diff options
author | Simon Rettberg | 2019-02-18 11:55:41 +0100 |
---|---|---|
committer | Simon Rettberg | 2019-02-18 11:55:41 +0100 |
commit | ae69a754244c4e475c8d2591772ca8e005071d83 (patch) | |
tree | 58b3fa7abc2dcfe3c23e1c0ce108950c720826ab | |
parent | Update gitignore (diff) | |
download | xscreensaver-ae69a754244c4e475c8d2591772ca8e005071d83.tar.gz xscreensaver-ae69a754244c4e475c8d2591772ca8e005071d83.tar.xz xscreensaver-ae69a754244c4e475c8d2591772ca8e005071d83.zip |
Update to 5.42
511 files changed, 83882 insertions, 1761 deletions
diff --git a/OSX/LaunchScreen.xib b/OSX/LaunchScreen.xib index 731d86e..15cdbc5 100644 --- a/OSX/LaunchScreen.xib +++ b/OSX/LaunchScreen.xib @@ -1,8 +1,12 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES"> +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES"> + <device id="retina4_7" orientation="portrait"> + <adaptation id="fullscreen"/> + </device> <dependencies> <deployment identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> @@ -10,7 +14,7 @@ <view contentMode="scaleToFill" id="iN0-l3-epB"> <rect key="frame" x="0.0" y="0.0" width="480" height="480"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/> + <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="simulatedStatusBarMetrics"/> <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> <point key="canvasLocation" x="404" y="445"/> diff --git a/OSX/Makefile b/OSX/Makefile index 373df6b..456c1bd 100644 --- a/OSX/Makefile +++ b/OSX/Makefile @@ -43,7 +43,14 @@ release:: distdepend release:: check_versions Sparkle.framework: - unzip ../archive/Sparkle.framework-2013-12-04.zip + rm -rf bin sparkle-bin + tar -vxjf ../archive/Sparkle-1.21.2.tar.bz2 \ + --exclude CHANGELOG \ + --exclude LICENSE \ + --exclude SampleAppcast.xml \ + --exclude Sparkle.framework.dSYM \ + --exclude Sparkle\ Test\ App\* + mv bin sparkle-bin # Download and resize images from jwz.org. # This saves us having to include 4MB of images in the tar file @@ -54,7 +61,7 @@ Sparkle.framework: BASE = xscreensaver/screenshots/ URL = https://www.jwz.org/$(BASE) -WGET = wget -q -U xscreensaver-build-osx +WGET = wget -q -U xscreensaver-build-osx --content-on-error=0 CVT = -thumbnail '200x150^' -gravity center -extent 200x150 \ \( +clone -alpha extract \ -draw 'fill black polygon 0,0 0,6 6,0 fill white circle 6,6 6,0' \ @@ -280,11 +287,12 @@ build/Release/installer.pkg: installer.rtf installer.xml installer.sh installer. # -format UDBZ saves 4% (~1.2 MB) over UDZO. -dmg:: distdepend -dmg:: check_versions check_coretext +dmg:: distdepend check_versions check_coretext #dmg:: check_gc dmg:: build/Release/installer.pkg -dmg:: +dmg:: _dmg notarize + +_dmg:: @ \ set -e ; \ SRC=../utils/version.h ; \ @@ -369,7 +377,68 @@ dmg:: "$$TMPDMG" -o "$$DMG" ; \ xattr -w com.apple.quarantine "0000;00000000;;" "$$DMG" ; \ rm -f "$$TMPDMG" ; \ - ls -ldhgF "$$DMG" + ls -ldhgF "$$DMG" ; \ + $(MAKE) notarize ; \ + + +# To set up notarization: +# - Log in on https://appleid.apple.com/ +# - Generate App-Specific Password, "altool-notarizer" +# - Keychain Access / New +# - Name: "altool-notarizer", Account: "jwz@jwz.org", +# Pass: the one you just generated. +# +# "make notarize", which will upload the DMG (slow). +# A response will be emailed back in about an hour. +# When that arrives, "make staple". +# +# https://developer.apple.com/documentation/security/notarizing_your_app_before_distribution/customizing_the_notarization_workflow?language=objc +# +# Note that if Sparkle.framework/.../Autoupdate.app is not independently +# signed, it won't pass. I had to add a build phase for that. +# +NOTARGS=-u "jwz@jwz.org" -p "@keychain:altool-notarizer" + +notarize:: + @ \ + set -e ; \ + SRC=../utils/version.h ; \ + V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' $$SRC` ; \ + BASE="xscreensaver-$$V" ; \ + OUTDIR="../archive" ; \ + DMG="$$OUTDIR/$$BASE.dmg" ; \ + set -x ; \ + xcrun altool --notarize-app --primary-bundle-id "org.jwz.xscreensaver" \ + --file "$$DMG" $(NOTARGS) ; \ + echo "" ; \ + sleep 3 ; \ + $(MAKE) notarize_wait staple updates.xml + +notarize_wait:: + @while ( xcrun altool --notarization-history 0 $(NOTARGS) | \ + grep -q 'in progress' ); do \ + echo `date +%I:%M:` "waiting for notarization..." ; \ + sleep 15 ; \ + done ; \ + echo '' ; \ + xcrun altool --notarization-history 0 $(NOTARGS) ; \ + +staple:: + @ \ + set -e ; \ + SRC=../utils/version.h ; \ + V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' $$SRC` ; \ + BASE="xscreensaver-$$V" ; \ + OUTDIR="../archive" ; \ + DMG="$$OUTDIR/$$BASE.dmg" ; \ + set -x ; \ + xcrun stapler staple "$$DMG" ; \ + xcrun stapler validate "$$DMG" + +notarization_history:: + xcrun altool --notarization-history 0 $(NOTARGS) + @echo 'now do: xcrun altool $(NOTARGS) --notarization-info <UUID>' ; \ + echo 'and wget the LogFileURL' # When debugging, sometimes I have to reset the preferences for all diff --git a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/Contents.json b/OSX/Media-iOS.xcassets/LaunchImage.launchimage/Contents.json index 5dd89e0..bc0812f 100644 --- a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/Contents.json +++ b/OSX/Media-iOS.xcassets/LaunchImage.launchimage/Contents.json @@ -1,6 +1,24 @@ { "images" : [ { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "736h", + "filename" : "1242x2208.png", + "minimum-system-version" : "8.0", + "orientation" : "portrait", + "scale" : "3x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "667h", + "filename" : "750x1334.png", + "minimum-system-version" : "8.0", + "orientation" : "portrait", + "scale" : "2x" + }, + { "orientation" : "portrait", "idiom" : "iphone", "filename" : "640x960.png", @@ -24,25 +42,7 @@ "extent" : "full-screen", "subtype" : "retina4", "scale" : "2x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "667h", - "filename" : "750x1334.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "736h", - "filename" : "1242x2208.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "3x" - }, + } ], "info" : { "version" : 1, @@ -20,7 +20,8 @@ ridiculously long list of steps! 5: Delete the "DangerBall copy-Info.plist" from the Build Settings too. 6: Manage Schemes, rename "DangerBall Copy". 7: Move to the right place in the list. - 8: Scheme / Run / Info: Executable: SaverTester.app. + 8. Scheme / Profile / Info: Executable: SaverTester.app. + Scheme / Run / Info: Executable: SaverTester.app. 9: Scheme / Run / Arguments: set SELECTED_SAVER environment variable. 10: File / Add Files / the new .c and .xml. 11: Re-order them in the file list. This will bring up an Options dialog. @@ -38,5 +39,5 @@ ridiculously long list of steps! 18: git add xscreensaver.xcodeproj/xcuserdata/*/xcschemes/*.xcscheme 19: Don't forget to create a man page from the XML with xml2man.pl, and update Makefile.in. - 20: Make a video: -record-animation 3600 -delay 1 -geom 1920x1080+128+64 + 20: Make a video: -record-animation 3600 -geom 1920x1080+128+64 ./upload-video.pl NAME diff --git a/OSX/SaverListController.m b/OSX/SaverListController.m index 9377275..e68387c 100644 --- a/OSX/SaverListController.m +++ b/OSX/SaverListController.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2012-2014 Jamie Zawinski <jwz@jwz.org> +/* xscreensaver, Copyright (c) 2012-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -225,6 +225,8 @@ for (int i = 0; i < n; i++) { if ([list_by_letter[i] count] > 0) { active_section_count++; + [list_by_letter[i] sortUsingSelector: + @selector(localizedCaseInsensitiveCompare:)]; [letter_sections addObject: list_by_letter[i]]; if (i <= 'Z'-'A') [section_titles addObject: [NSString stringWithFormat: @"%c", i+'A']]; diff --git a/OSX/SaverRunner.h b/OSX/SaverRunner.h index 073a87e..399eec0 100644 --- a/OSX/SaverRunner.h +++ b/OSX/SaverRunner.h @@ -31,7 +31,7 @@ # import <ScreenSaver/ScreenSaver.h> #endif -#import <XScreenSaverView.h> +#import "XScreenSaverView.h" #ifdef USE_IPHONE diff --git a/OSX/SaverRunner.m b/OSX/SaverRunner.m index f358fb7..8ab45c1 100644 --- a/OSX/SaverRunner.m +++ b/OSX/SaverRunner.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2006-2017 Jamie Zawinski <jwz@jwz.org> +/* xscreensaver, Copyright (c) 2006-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -1035,10 +1035,11 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) if (name) [result addObject: name]; } - if (! [result count]) - result = 0; - - return result; + if (result && [result count]) + return [result sortedArrayUsingSelector: + @selector(localizedCaseInsensitiveCompare:)]; + else + return 0; } diff --git a/OSX/SaverRunner.plist b/OSX/SaverRunner.plist index 3ad0ce7..1a5f022 100644 --- a/OSX/SaverRunner.plist +++ b/OSX/SaverRunner.plist @@ -7,7 +7,7 @@ <key>CFBundleExecutable</key> <string>${EXECUTABLE_NAME}</string> <key>CFBundleGetInfoString</key> - <string>5.40</string> + <string>5.42</string> <key>CFBundleIconFile</key> <string>SaverRunner</string> <key>CFBundleIdentifier</key> @@ -15,21 +15,21 @@ <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleLongVersionString</key> - <string>5.40</string> + <string>5.42</string> <key>CFBundleName</key> <string>${PRODUCT_NAME}</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>5.40</string> + <string>5.42</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> - <string>5.40</string> + <string>5.42</string> <key>LSMinimumSystemVersion</key> <string>${MACOSX_DEPLOYMENT_TARGET}</string> <key>NSHumanReadableCopyright</key> - <string>5.40</string> + <string>5.42</string> <key>NSMainNibFile</key> <string>SaverRunner</string> <key>NSPrincipalClass</key> diff --git a/OSX/Sparkle.framework/Modules b/OSX/Sparkle.framework/Modules new file mode 120000 index 0000000..5736f31 --- /dev/null +++ b/OSX/Sparkle.framework/Modules @@ -0,0 +1 @@ +Versions/Current/Modules
\ No newline at end of file diff --git a/OSX/Sparkle.framework/PrivateHeaders b/OSX/Sparkle.framework/PrivateHeaders new file mode 120000 index 0000000..d8e5645 --- /dev/null +++ b/OSX/Sparkle.framework/PrivateHeaders @@ -0,0 +1 @@ +Versions/Current/PrivateHeaders
\ No newline at end of file diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloadData.h b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloadData.h new file mode 100644 index 0000000..41cd574 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloadData.h @@ -0,0 +1,43 @@ +// +// SPUDownloadData.h +// Sparkle +// +// Created by Mayur Pawashe on 8/10/16. +// Copyright © 2016 Sparkle Project. All rights reserved. +// + +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif + +#import "SUExport.h" + +NS_ASSUME_NONNULL_BEGIN + +/*! + * A class for containing downloaded data along with some information about it. + */ +SU_EXPORT @interface SPUDownloadData : NSObject <NSSecureCoding> + +- (instancetype)initWithData:(NSData *)data textEncodingName:(NSString * _Nullable)textEncodingName MIMEType:(NSString * _Nullable)MIMEType; + +/*! + * The raw data that was downloaded. + */ +@property (nonatomic, readonly) NSData *data; + +/*! + * The IANA charset encoding name if available. Eg: "utf-8" + */ +@property (nonatomic, readonly, nullable, copy) NSString *textEncodingName; + +/*! + * The MIME type if available. Eg: "text/plain" + */ +@property (nonatomic, readonly, nullable, copy) NSString *MIMEType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloader.h b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloader.h new file mode 100644 index 0000000..5eee9bd --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloader.h @@ -0,0 +1,25 @@ +// +// SPUDownloader.h +// Downloader +// +// Created by Mayur Pawashe on 4/1/16. +// Copyright © 2016 Sparkle Project. All rights reserved. +// + +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif +#import "SPUDownloaderProtocol.h" + +@protocol SPUDownloaderDelegate; + +// This object implements the protocol which we have defined. It provides the actual behavior for the service. It is 'exported' by the service to make it available to the process hosting the service over an NSXPCConnection. +@interface SPUDownloader : NSObject <SPUDownloaderProtocol> + +// Due to XPC remote object reasons, this delegate is strongly referenced +// Invoke cleanup when done with this instance +- (instancetype)initWithDelegate:(id <SPUDownloaderDelegate>)delegate; + +@end diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderDelegate.h b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderDelegate.h new file mode 100644 index 0000000..76e7e75 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderDelegate.h @@ -0,0 +1,38 @@ +// +// SPUDownloaderDelegate.h +// Sparkle +// +// Created by Mayur Pawashe on 4/1/16. +// Copyright © 2016 Sparkle Project. All rights reserved. +// + +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif + +NS_ASSUME_NONNULL_BEGIN + +@class SPUDownloadData; + +@protocol SPUDownloaderDelegate <NSObject> + +// This is only invoked for persistent downloads +- (void)downloaderDidSetDestinationName:(NSString *)destinationName temporaryDirectory:(NSString *)temporaryDirectory; + +// Under rare cases, this may be called more than once, in which case the current progress should be reset back to 0 +// This is only invoked for persistent downloads +- (void)downloaderDidReceiveExpectedContentLength:(int64_t)expectedContentLength; + +// This is only invoked for persistent downloads +- (void)downloaderDidReceiveDataOfLength:(uint64_t)length; + +// downloadData is nil if this is a persisent download, otherwise it's non-nil if it's a temporary download +- (void)downloaderDidFinishWithTemporaryDownloadData:(SPUDownloadData * _Nullable)downloadData; + +- (void)downloaderDidFailWithError:(NSError *)error; + +@end + +NS_ASSUME_NONNULL_END diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderDeprecated.h b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderDeprecated.h new file mode 100644 index 0000000..36302df --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderDeprecated.h @@ -0,0 +1,13 @@ +// +// SPUDownloaderDeprecated.h +// Sparkle +// +// Created by Deadpikle on 12/20/17. +// Copyright © 2017 Sparkle Project. All rights reserved. +// + +#import "SPUDownloader.h" + +@interface SPUDownloaderDeprecated : SPUDownloader <SPUDownloaderProtocol> + +@end diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderProtocol.h b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderProtocol.h new file mode 100644 index 0000000..ebe477f --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderProtocol.h @@ -0,0 +1,34 @@ +// +// SPUDownloaderProtocol.h +// PersistentDownloader +// +// Created by Mayur Pawashe on 4/1/16. +// Copyright © 2016 Sparkle Project. All rights reserved. +// + +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif + +NS_ASSUME_NONNULL_BEGIN + +@class SPUURLRequest; + +// The protocol that this service will vend as its API. This header file will also need to be visible to the process hosting the service. +@protocol SPUDownloaderProtocol + +- (void)startPersistentDownloadWithRequest:(SPUURLRequest *)request bundleIdentifier:(NSString *)bundleIdentifier desiredFilename:(NSString *)desiredFilename; + +- (void)startTemporaryDownloadWithRequest:(SPUURLRequest *)request; + +- (void)downloadDidFinish; + +- (void)cleanup; + +- (void)cancel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderSession.h b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderSession.h new file mode 100644 index 0000000..4bde75a --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SPUDownloaderSession.h @@ -0,0 +1,20 @@ +// +// SPUDownloaderSession.h +// Sparkle +// +// Created by Deadpikle on 12/20/17. +// Copyright © 2017 Sparkle Project. All rights reserved. +// + +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif +#import "SPUDownloader.h" +#import "SPUDownloaderProtocol.h" + +NS_CLASS_AVAILABLE(NSURLSESSION_AVAILABLE, 7_0) +@interface SPUDownloaderSession : SPUDownloader <SPUDownloaderProtocol> + +@end diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SPUURLRequest.h b/OSX/Sparkle.framework/Versions/A/Headers/SPUURLRequest.h new file mode 100644 index 0000000..6949614 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SPUURLRequest.h @@ -0,0 +1,35 @@ +// +// SPUURLRequest.h +// Sparkle +// +// Created by Mayur Pawashe on 5/19/16. +// Copyright © 2016 Sparkle Project. All rights reserved. +// + +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif + +NS_ASSUME_NONNULL_BEGIN + +// A class that wraps NSURLRequest and implements NSSecureCoding +// This class exists because NSURLRequest did not support NSSecureCoding in macOS 10.8 +// I have not verified if NSURLRequest in 10.9 implements NSSecureCoding or not +@interface SPUURLRequest : NSObject <NSSecureCoding> + +// Creates a new URL request +// Only these properties are currently tracked: +// * URL +// * Cache policy +// * Timeout interval +// * HTTP header fields +// * networkServiceType ++ (instancetype)URLRequestWithRequest:(NSURLRequest *)request; + +@property (nonatomic, readonly) NSURLRequest *request; + +@end + +NS_ASSUME_NONNULL_END diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SUAppcast.h b/OSX/Sparkle.framework/Versions/A/Headers/SUAppcast.h index 5a60d2f..34276b7 100755..100644 --- a/OSX/Sparkle.framework/Versions/A/Headers/SUAppcast.h +++ b/OSX/Sparkle.framework/Versions/A/Headers/SUAppcast.h @@ -9,28 +9,27 @@ #ifndef SUAPPCAST_H #define SUAPPCAST_H +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif +#import "SUExport.h" + +NS_ASSUME_NONNULL_BEGIN + @class SUAppcastItem; -@interface SUAppcast : NSObject -{ -@private - NSArray *items; - NSString *userAgentString; - id delegate; - NSString *downloadFilename; - NSURLDownload *download; -} - -- (void)fetchAppcastFromURL:(NSURL *)url; -- (void)setDelegate:delegate; -- (void)setUserAgentString:(NSString *)userAgentString; - -- (NSArray *)items; +SU_EXPORT @interface SUAppcast : NSObject -@end +@property (copy, nullable) NSString *userAgentString; +@property (copy, nullable) NSDictionary<NSString *, NSString *> *httpHeaders; + +- (void)fetchAppcastFromURL:(NSURL *)url inBackground:(BOOL)bg completionBlock:(void (^)(NSError *_Nullable))err; +- (SUAppcast *)copyWithoutDeltaUpdates; -@interface NSObject (SUAppcastDelegate) -- (void)appcastDidFinishLoading:(SUAppcast *)appcast; -- (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error; +@property (readonly, copy, nullable) NSArray *items; @end +NS_ASSUME_NONNULL_END + #endif diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h b/OSX/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h index d6f9c64..c0380dd 100755..100644 --- a/OSX/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h +++ b/OSX/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h @@ -9,51 +9,43 @@ #ifndef SUAPPCASTITEM_H #define SUAPPCASTITEM_H -@interface SUAppcastItem : NSObject -{ -@private - NSString *title; - NSDate *date; - NSString *itemDescription; - - NSURL *releaseNotesURL; - - NSString *DSASignature; - NSString *minimumSystemVersion; - NSString *maximumSystemVersion; - - NSURL *fileURL; - NSString *versionString; - NSString *displayVersionString; - - NSDictionary *deltaUpdates; - - NSDictionary *propertiesDictionary; - - NSURL *infoURL; // UK 2007-08-31 -} +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif +#import "SUExport.h" +@class SUSignatures; + +SU_EXPORT @interface SUAppcastItem : NSObject +@property (copy, readonly) NSString *title; +@property (copy, readonly) NSString *dateString; +@property (copy, readonly) NSString *itemDescription; +@property (strong, readonly) NSURL *releaseNotesURL; +@property (strong, readonly) SUSignatures *signatures; +@property (copy, readonly) NSString *minimumSystemVersion; +@property (copy, readonly) NSString *maximumSystemVersion; +@property (strong, readonly) NSURL *fileURL; +@property (nonatomic, readonly) uint64_t contentLength; +@property (copy, readonly) NSString *versionString; +@property (copy, readonly) NSString *osString; +@property (copy, readonly) NSString *displayVersionString; +@property (copy, readonly) NSDictionary *deltaUpdates; +@property (strong, readonly) NSURL *infoURL; // Initializes with data from a dictionary provided by the RSS class. -- initWithDictionary:(NSDictionary *)dict; -- initWithDictionary:(NSDictionary *)dict failureReason:(NSString**)error; - -- (NSString *)title; -- (NSString *)versionString; -- (NSString *)displayVersionString; -- (NSDate *)date; -- (NSString *)itemDescription; -- (NSURL *)releaseNotesURL; -- (NSURL *)fileURL; -- (NSString *)DSASignature; -- (NSString *)minimumSystemVersion; -- (NSString *)maximumSystemVersion; -- (NSDictionary *)deltaUpdates; -- (BOOL)isDeltaUpdate; +- (instancetype)initWithDictionary:(NSDictionary *)dict; +- (instancetype)initWithDictionary:(NSDictionary *)dict failureReason:(NSString **)error; + +@property (getter=isDeltaUpdate, readonly) BOOL deltaUpdate; +@property (getter=isCriticalUpdate, readonly) BOOL criticalUpdate; +@property (getter=isMacOsUpdate, readonly) BOOL macOsUpdate; +@property (getter=isInformationOnlyUpdate, readonly) BOOL informationOnlyUpdate; // Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. -- (NSDictionary *)propertiesDictionary; +@property (readonly, copy) NSDictionary *propertiesDictionary; -- (NSURL *)infoURL; // UK 2007-08-31 +- (NSURL *)infoURL; @end diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SUCodeSigningVerifier.h b/OSX/Sparkle.framework/Versions/A/Headers/SUCodeSigningVerifier.h new file mode 100644 index 0000000..f034cd2 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SUCodeSigningVerifier.h @@ -0,0 +1,22 @@ +// +// SUCodeSigningVerifier.h +// Sparkle +// +// Created by Andy Matuschak on 7/5/12. +// +// + +#ifndef SUCODESIGNINGVERIFIER_H +#define SUCODESIGNINGVERIFIER_H + +#import <Foundation/Foundation.h> +#import "SUExport.h" + +SU_EXPORT @interface SUCodeSigningVerifier : NSObject ++ (BOOL)codeSignatureAtBundleURL:(NSURL *)oldBundlePath matchesSignatureAtBundleURL:(NSURL *)newBundlePath error:(NSError **)error; ++ (BOOL)codeSignatureIsValidAtBundleURL:(NSURL *)bundlePath error:(NSError **)error; ++ (BOOL)bundleAtURLIsCodeSigned:(NSURL *)bundlePath; ++ (NSDictionary *)codeSignatureInfoAtBundleURL:(NSURL *)bundlePath; +@end + +#endif diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SUErrors.h b/OSX/Sparkle.framework/Versions/A/Headers/SUErrors.h new file mode 100644 index 0000000..7d2e73a --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SUErrors.h @@ -0,0 +1,56 @@ +// +// SUErrors.h +// Sparkle +// +// Created by C.W. Betts on 10/13/14. +// Copyright (c) 2014 Sparkle Project. All rights reserved. +// + +#ifndef SUERRORS_H +#define SUERRORS_H + +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif +#import "SUExport.h" + +/** + * Error domain used by Sparkle + */ +SU_EXPORT extern NSString *const SUSparkleErrorDomain; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat" +typedef NS_ENUM(OSStatus, SUError) { + // Appcast phase errors. + SUAppcastParseError = 1000, + SUNoUpdateError = 1001, + SUAppcastError = 1002, + SURunningFromDiskImageError = 1003, + + // Download phase errors. + SUTemporaryDirectoryError = 2000, + SUDownloadError = 2001, + + // Extraction phase errors. + SUUnarchivingError = 3000, + SUSignatureError = 3001, + + // Installation phase errors. + SUFileCopyFailure = 4000, + SUAuthenticationFailure = 4001, + SUMissingUpdateError = 4002, + SUMissingInstallerToolError = 4003, + SURelaunchError = 4004, + SUInstallationError = 4005, + SUDowngradeError = 4006, + SUInstallationCancelledError = 4007, + + // System phase errors + SUSystemPowerOffError = 5000 +}; +#pragma clang diagnostic pop + +#endif diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SUExport.h b/OSX/Sparkle.framework/Versions/A/Headers/SUExport.h new file mode 100644 index 0000000..3e3f8a1 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SUExport.h @@ -0,0 +1,18 @@ +// +// SUExport.h +// Sparkle +// +// Created by Jake Petroules on 2014-08-23. +// Copyright (c) 2014 Sparkle Project. All rights reserved. +// + +#ifndef SUEXPORT_H +#define SUEXPORT_H + +#ifdef BUILDING_SPARKLE +#define SU_EXPORT __attribute__((visibility("default"))) +#else +#define SU_EXPORT +#endif + +#endif diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h b/OSX/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h new file mode 100644 index 0000000..ed11921 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h @@ -0,0 +1,52 @@ +// +// SUStandardVersionComparator.h +// Sparkle +// +// Created by Andy Matuschak on 12/21/07. +// Copyright 2007 Andy Matuschak. All rights reserved. +// + +#ifndef SUSTANDARDVERSIONCOMPARATOR_H +#define SUSTANDARDVERSIONCOMPARATOR_H + +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif +#import "SUExport.h" +#import "SUVersionComparisonProtocol.h" + +NS_ASSUME_NONNULL_BEGIN + +/*! + Sparkle's default version comparator. + + This comparator is adapted from MacPAD, by Kevin Ballard. + It's "dumb" in that it does essentially string comparison, + in components split by character type. +*/ +SU_EXPORT @interface SUStandardVersionComparator : NSObject <SUVersionComparison> + +/*! + Initializes a new instance of the standard version comparator. + */ +- (instancetype)init; + +/*! + Returns a singleton instance of the comparator. + + It is usually preferred to alloc/init new a comparator instead. +*/ ++ (SUStandardVersionComparator *)defaultComparator; + +/*! + Compares version strings through textual analysis. + + See the implementation for more details. +*/ +- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; +@end + +NS_ASSUME_NONNULL_END +#endif diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SUUpdater.h b/OSX/Sparkle.framework/Versions/A/Headers/SUUpdater.h index cd79566..bc1d491 100755..100644 --- a/OSX/Sparkle.framework/Versions/A/Headers/SUUpdater.h +++ b/OSX/Sparkle.framework/Versions/A/Headers/SUUpdater.h @@ -9,153 +9,223 @@ #ifndef SUUPDATER_H #define SUUPDATER_H +#if __has_feature(modules) +@import Cocoa; +#else +#import <Cocoa/Cocoa.h> +#endif +#import "SUExport.h" #import "SUVersionComparisonProtocol.h" #import "SUVersionDisplayProtocol.h" -@class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast; +@class SUAppcastItem, SUAppcast; + +@protocol SUUpdaterDelegate; + +/*! + The main API in Sparkle for controlling the update mechanism. -@interface SUUpdater : NSObject -{ -@private - NSTimer *checkTimer; - SUUpdateDriver *driver; + This class is used to configure the update paramters as well as manually + and automatically schedule and control checks for updates. + */ +SU_EXPORT @interface SUUpdater : NSObject - NSString *customUserAgentString; - SUHost *host; - IBOutlet id delegate; -} +@property (unsafe_unretained) IBOutlet id<SUUpdaterDelegate> delegate; +/*! + The shared updater for the main bundle. + + This is equivalent to passing [NSBundle mainBundle] to SUUpdater::updaterForBundle: + */ + (SUUpdater *)sharedUpdater; -+ (SUUpdater *)updaterForBundle:(NSBundle *)bundle; -- (id)initForBundle:(NSBundle *)bundle; -- (NSBundle *)hostBundle; +/*! + The shared updater for a specified bundle. + + If an updater has already been initialized for the provided bundle, that shared instance will be returned. + */ ++ (SUUpdater *)updaterForBundle:(NSBundle *)bundle; -- (void)setDelegate:(id)delegate; -- (id)delegate; +/*! + Designated initializer for SUUpdater. + + If an updater has already been initialized for the provided bundle, that shared instance will be returned. + */ +- (instancetype)initForBundle:(NSBundle *)bundle; -- (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks; -- (BOOL)automaticallyChecksForUpdates; +/*! + Explicitly checks for updates and displays a progress dialog while doing so. -- (void)setUpdateCheckInterval:(NSTimeInterval)interval; -- (NSTimeInterval)updateCheckInterval; + This method is meant for a main menu item. + Connect any menu item to this action in Interface Builder, + and Sparkle will check for updates and report back its findings verbosely + when it is invoked. -- (void)setFeedURL:(NSURL *)feedURL; -- (NSURL *)feedURL; // *** MUST BE CALLED ON MAIN THREAD *** + This will find updates that the user has opted into skipping. + */ +- (IBAction)checkForUpdates:(id)sender; -- (void)setUserAgentString:(NSString *)userAgent; -- (NSString *)userAgentString; +/*! + The menu item validation used for the -checkForUpdates: action + */ +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem; -- (void)setSendsSystemProfile:(BOOL)sendsSystemProfile; -- (BOOL)sendsSystemProfile; +/*! + Checks for updates, but does not display any UI unless an update is found. -- (void)setAutomaticallyDownloadsUpdates:(BOOL)automaticallyDownloadsUpdates; -- (BOOL)automaticallyDownloadsUpdates; + This is meant for programmatically initating a check for updates. That is, + it will display no UI unless it actually finds an update, in which case it + proceeds as usual. -// This IBAction is meant for a main menu item. Hook up any menu item to this action, -// and Sparkle will check for updates and report back its findings verbosely. -- (IBAction)checkForUpdates:(id)sender; + If automatic downloading of updates it turned on and allowed, however, + this will invoke that behavior, and if an update is found, it will be downloaded + in the background silently and will be prepped for installation. -// This kicks off an update meant to be programmatically initiated. That is, it will display no UI unless it actually finds an update, -// in which case it proceeds as usual. If the fully automated updating is turned on, however, this will invoke that behavior, and if an -// update is found, it will be downloaded and prepped for installation. + This will not find updates that the user has opted into skipping. + */ - (void)checkForUpdatesInBackground; -// Date of last update check. Returns nil if no check has been performed. -- (NSDate*)lastUpdateCheckDate; +/*! + A property indicating whether or not to check for updates automatically. -// This begins a "probing" check for updates which will not actually offer to update to that version. The delegate methods, though, -// (up to updater:didFindValidUpdate: and updaterDidNotFindUpdate:), are called, so you can use that information in your UI. -- (void)checkForUpdateInformation; + Setting this property will persist in the host bundle's user defaults. + The update schedule cycle will be reset in a short delay after the property's new value is set. + This is to allow reverting this property without kicking off a schedule change immediately + */ +@property BOOL automaticallyChecksForUpdates; -// Call this to appropriately schedule or cancel the update checking timer according to the preferences for time interval and automatic checks. This call does not change the date of the next check, but only the internal NSTimer. -- (void)resetUpdateCycle; +/*! + A property indicating whether or not updates can be automatically downloaded in the background. -- (BOOL)updateInProgress; + Note that automatic downloading of updates can be disallowed by the developer + or by the user's system if silent updates cannot be done (eg: if they require authentication). + In this case, -automaticallyDownloadsUpdates will return NO regardless of how this property is set. -@end + Setting this property will persist in the host bundle's user defaults. + */ +@property BOOL automaticallyDownloadsUpdates; +/*! + A property indicating the current automatic update check interval. -// ----------------------------------------------------------------------------- -// SUUpdater Delegate: -// ----------------------------------------------------------------------------- + Setting this property will persist in the host bundle's user defaults. + The update schedule cycle will be reset in a short delay after the property's new value is set. + This is to allow reverting this property without kicking off a schedule change immediately + */ +@property NSTimeInterval updateCheckInterval; -@interface NSObject (SUUpdaterDelegateInformalProtocol) +/*! + Begins a "probing" check for updates which will not actually offer to + update to that version. -// Use this to keep Sparkle from popping up e.g. while your setup assistant is showing: -- (BOOL)updaterMayCheckForUpdates:(SUUpdater *)bundle; + However, the delegate methods + SUUpdaterDelegate::updater:didFindValidUpdate: and + SUUpdaterDelegate::updaterDidNotFindUpdate: will be called, + so you can use that information in your UI. -// This method allows you to add extra parameters to the appcast URL, potentially based on whether or not Sparkle will also be sending along the system profile. This method should return an array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user. -- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile; + Updates that have been skipped by the user will not be found. + */ +- (void)checkForUpdateInformation; -// Override this to dynamically specify the entire URL. -- (NSString*)feedURLStringForUpdater:(SUUpdater*)updater; +/*! + The URL of the appcast used to download update information. -// Use this to override the default behavior for Sparkle prompting the user about automatic update checks. -- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)bundle; + Setting this property will persist in the host bundle's user defaults. + If you don't want persistence, you may want to consider instead implementing + SUUpdaterDelegate::feedURLStringForUpdater: or SUUpdaterDelegate::feedParametersForUpdater:sendingSystemProfile: -// Implement this if you want to do some special handling with the appcast once it finishes loading. -- (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast; + This property must be called on the main thread. + */ +@property (copy) NSURL *feedURL; -// If you're using special logic or extensions in your appcast, implement this to use your own logic for finding -// a valid update, if any, in the given appcast. -- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)bundle; +/*! + The host bundle that is being updated. + */ +@property (readonly, strong) NSBundle *hostBundle; -// Sent when a valid update is found by the update driver. -- (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)update; +/*! + The bundle this class (SUUpdater) is loaded into. + */ +@property (strong, readonly) NSBundle *sparkleBundle; -// Sent when a valid update is not found. -- (void)updaterDidNotFindUpdate:(SUUpdater *)update; +/*! + The user agent used when checking for updates. -// Sent immediately before installing the specified update. -- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update; + The default implementation can be overrided. + */ +@property (nonatomic, copy) NSString *userAgentString; -// Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue. -// This is not called if the user didn't relaunch on the previous update, in that case it will immediately -// restart. -- (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation; +/*! + The HTTP headers used when checking for updates. -// Some apps *can not* be relaunched in certain circumstances. They can use this method -// to prevent a relaunch "hard": -- (BOOL)updaterShouldRelaunchApplication:(SUUpdater *)updater; + The keys of this dictionary are HTTP header fields (NSString) and values are corresponding values (NSString) + */ +@property (copy) NSDictionary<NSString *, NSString *> *httpHeaders; -// Called immediately before relaunching. -- (void)updaterWillRelaunchApplication:(SUUpdater *)updater; +/*! + A property indicating whether or not the user's system profile information is sent when checking for updates. -// This method allows you to provide a custom version comparator. -// If you don't implement this method or return nil, the standard version comparator will be used. -- (id <SUVersionComparison>)versionComparatorForUpdater:(SUUpdater *)updater; + Setting this property will persist in the host bundle's user defaults. + */ +@property BOOL sendsSystemProfile; -// This method allows you to provide a custom version comparator. -// If you don't implement this method or return nil, the standard version displayer will be used. -- (id <SUVersionDisplay>)versionDisplayerForUpdater:(SUUpdater *)updater; +/*! + A property indicating the decryption password used for extracting updates shipped as Apple Disk Images (dmg) + */ +@property (nonatomic, copy) NSString *decryptionPassword; -// Returns the path which is used to relaunch the client after the update is installed. By default, the path of the host bundle. -- (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater; +/*! + This function ignores normal update schedule, ignores user preferences, + and interrupts users with an unwanted immediate app update. -// Called before and after, respectively, an updater shows a modal alert window, to give the host -// the opportunity to hide attached windows etc. that may get in the way: --(void) updaterWillShowModalAlert:(SUUpdater *)updater; --(void) updaterDidShowModalAlert:(SUUpdater *)updater; + WARNING: this function should not be used in regular apps. This function + is a user-unfriendly hack only for very special cases, like unstable + rapidly-changing beta builds that would not run correctly if they were + even one day out of date. -@end + Instead of this function you should set `SUAutomaticallyUpdate` to `YES`, + which will gracefully install updates when the app quits. + For UI-less/daemon apps that aren't usually quit, instead of this function, + you can use the delegate method + SUUpdaterDelegate::updater:willInstallUpdateOnQuit:immediateInstallationInvocation: + to immediately start installation when an update was found. -// ----------------------------------------------------------------------------- -// Constants: -// ----------------------------------------------------------------------------- + A progress dialog is shown but the user will never be prompted to read the + release notes. -// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds. -#if defined(DEBUG) && DEBUG && 0 -#define SU_MIN_CHECK_INTERVAL 60 -#else -#define SU_MIN_CHECK_INTERVAL 60*60 -#endif + This function will cause update to be downloaded twice if automatic updates are + enabled. -#if defined(DEBUG) && DEBUG && 0 -#define SU_DEFAULT_CHECK_INTERVAL 60 -#else -#define SU_DEFAULT_CHECK_INTERVAL 60*60*24 -#endif + You may want to respond to the userDidCancelDownload delegate method in case + the user clicks the "Cancel" button while the update is downloading. + */ +- (void)installUpdatesIfAvailable; + +/*! + Returns the date of last update check. + + \returns \c nil if no check has been performed. + */ +@property (readonly, copy) NSDate *lastUpdateCheckDate; + +/*! + Appropriately schedules or cancels the update checking timer according to + the preferences for time interval and automatic checks. + + This call does not change the date of the next check, + but only the internal NSTimer. + */ +- (void)resetUpdateCycle; + +/*! + A property indicating whether or not an update is in progress. + + Note this property is not indicative of whether or not user initiated updates can be performed. + Use SUUpdater::validateMenuItem: for that instead. + */ +@property (readonly) BOOL updateInProgress; + +@end #endif diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SUUpdaterDelegate.h b/OSX/Sparkle.framework/Versions/A/Headers/SUUpdaterDelegate.h new file mode 100644 index 0000000..86d1eb9 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Headers/SUUpdaterDelegate.h @@ -0,0 +1,301 @@ +// +// SUUpdaterDelegate.h +// Sparkle +// +// Created by Mayur Pawashe on 12/25/16. +// Copyright © 2016 Sparkle Project. All rights reserved. +// + +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif + +#import "SUExport.h" + +@protocol SUVersionComparison, SUVersionDisplay; +@class SUUpdater, SUAppcast, SUAppcastItem; + +NS_ASSUME_NONNULL_BEGIN + +// ----------------------------------------------------------------------------- +// SUUpdater Notifications for events that might be interesting to more than just the delegate +// The updater will be the notification object +// ----------------------------------------------------------------------------- +SU_EXPORT extern NSString *const SUUpdaterDidFinishLoadingAppCastNotification; +SU_EXPORT extern NSString *const SUUpdaterDidFindValidUpdateNotification; +SU_EXPORT extern NSString *const SUUpdaterDidNotFindUpdateNotification; +SU_EXPORT extern NSString *const SUUpdaterWillRestartNotification; +#define SUUpdaterWillRelaunchApplicationNotification SUUpdaterWillRestartNotification; +#define SUUpdaterWillInstallUpdateNotification SUUpdaterWillRestartNotification; + +// Key for the SUAppcastItem object in the SUUpdaterDidFindValidUpdateNotification userInfo +SU_EXPORT extern NSString *const SUUpdaterAppcastItemNotificationKey; +// Key for the SUAppcast object in the SUUpdaterDidFinishLoadingAppCastNotification userInfo +SU_EXPORT extern NSString *const SUUpdaterAppcastNotificationKey; + +// ----------------------------------------------------------------------------- +// SUUpdater Delegate: +// ----------------------------------------------------------------------------- + +/*! + Provides methods to control the behavior of an SUUpdater object. + */ +@protocol SUUpdaterDelegate <NSObject> +@optional + +/*! + Returns whether to allow Sparkle to pop up. + + For example, this may be used to prevent Sparkle from interrupting a setup assistant. + + \param updater The SUUpdater instance. + */ +- (BOOL)updaterMayCheckForUpdates:(SUUpdater *)updater; + +/*! + Returns additional parameters to append to the appcast URL's query string. + + This is potentially based on whether or not Sparkle will also be sending along the system profile. + + \param updater The SUUpdater instance. + \param sendingProfile Whether the system profile will also be sent. + + \return An array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user. + */ +- (NSArray<NSDictionary<NSString *, NSString *> *> *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile; + +/*! + Returns a custom appcast URL. + + Override this to dynamically specify the entire URL. + + An alternative may be to use SUUpdaterDelegate::feedParametersForUpdater:sendingSystemProfile: + and let the server handle what kind of feed to provide. + + \param updater The SUUpdater instance. + */ +- (nullable NSString *)feedURLStringForUpdater:(SUUpdater *)updater; + +/*! + Returns whether Sparkle should prompt the user about automatic update checks. + + Use this to override the default behavior. + + \param updater The SUUpdater instance. + */ +- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)updater; + +/*! + Called after Sparkle has downloaded the appcast from the remote server. + + Implement this if you want to do some special handling with the appcast once it finishes loading. + + \param updater The SUUpdater instance. + \param appcast The appcast that was downloaded from the remote server. + */ +- (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast; + +/*! + Returns the item in the appcast corresponding to the update that should be installed. + + If you're using special logic or extensions in your appcast, + implement this to use your own logic for finding a valid update, if any, + in the given appcast. + + \param appcast The appcast that was downloaded from the remote server. + \param updater The SUUpdater instance. + */ +- (nullable SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)updater; + +/*! + Called when a valid update is found by the update driver. + + \param updater The SUUpdater instance. + \param item The appcast item corresponding to the update that is proposed to be installed. + */ +- (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)item; + +/*! + Called when a valid update is not found. + + \param updater The SUUpdater instance. + */ +- (void)updaterDidNotFindUpdate:(SUUpdater *)updater; + +/*! + Called immediately before downloading the specified update. + + \param updater The SUUpdater instance. + \param item The appcast item corresponding to the update that is proposed to be downloaded. + \param request The mutable URL request that will be used to download the update. + */ +- (void)updater:(SUUpdater *)updater willDownloadUpdate:(SUAppcastItem *)item withRequest:(NSMutableURLRequest *)request; + +/*! + Called immediately after succesfull download of the specified update. + + \param updater The SUUpdater instance. + \param item The appcast item corresponding to the update that has been downloaded. + */ +- (void)updater:(SUUpdater *)updater didDownloadUpdate:(SUAppcastItem *)item; + +/*! + Called after the specified update failed to download. + + \param updater The SUUpdater instance. + \param item The appcast item corresponding to the update that failed to download. + \param error The error generated by the failed download. + */ +- (void)updater:(SUUpdater *)updater failedToDownloadUpdate:(SUAppcastItem *)item error:(NSError *)error; + +/*! + Called when the user clicks the cancel button while and update is being downloaded. + + \param updater The SUUpdater instance. + */ +- (void)userDidCancelDownload:(SUUpdater *)updater; + +/*! + Called immediately before extracting the specified downloaded update. + + \param updater The SUUpdater instance. + \param item The appcast item corresponding to the update that is proposed to be extracted. + */ +- (void)updater:(SUUpdater *)updater willExtractUpdate:(SUAppcastItem *)item; + +/*! + Called immediately after extracting the specified downloaded update. + + \param updater The SUUpdater instance. + \param item The appcast item corresponding to the update that has been extracted. + */ +- (void)updater:(SUUpdater *)updater didExtractUpdate:(SUAppcastItem *)item; + +/*! + Called immediately before installing the specified update. + + \param updater The SUUpdater instance. + \param item The appcast item corresponding to the update that is proposed to be installed. + */ +- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)item; + +/*! + Returns whether the relaunch should be delayed in order to perform other tasks. + + This is not called if the user didn't relaunch on the previous update, + in that case it will immediately restart. + + \param updater The SUUpdater instance. + \param item The appcast item corresponding to the update that is proposed to be installed. + \param invocation The invocation that must be completed with `[invocation invoke]` before continuing with the relaunch. + + \return \c YES to delay the relaunch until \p invocation is invoked. + */ +- (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)item untilInvoking:(NSInvocation *)invocation; + +/*! + Returns whether the application should be relaunched at all. + + Some apps \b cannot be relaunched under certain circumstances. + This method can be used to explicitly prevent a relaunch. + + \param updater The SUUpdater instance. + */ +- (BOOL)updaterShouldRelaunchApplication:(SUUpdater *)updater; + +/*! + Called immediately before relaunching. + + \param updater The SUUpdater instance. + */ +- (void)updaterWillRelaunchApplication:(SUUpdater *)updater; + +/*! + Called immediately after relaunching. SUUpdater delegate must be set before applicationDidFinishLaunching: to catch this event. + + \param updater The SUUpdater instance. + */ +- (void)updaterDidRelaunchApplication:(SUUpdater *)updater; + +/*! + Returns an object that compares version numbers to determine their arithmetic relation to each other. + + This method allows you to provide a custom version comparator. + If you don't implement this method or return \c nil, + the standard version comparator will be used. + + \sa SUStandardVersionComparator + + \param updater The SUUpdater instance. + */ +- (nullable id<SUVersionComparison>)versionComparatorForUpdater:(SUUpdater *)updater; + +/*! + Returns an object that formats version numbers for display to the user. + + If you don't implement this method or return \c nil, + the standard version formatter will be used. + + \sa SUUpdateAlert + + \param updater The SUUpdater instance. + */ +- (nullable id<SUVersionDisplay>)versionDisplayerForUpdater:(SUUpdater *)updater; + +/*! + Returns the path which is used to relaunch the client after the update is installed. + + The default is the path of the host bundle. + + \param updater The SUUpdater instance. + */ +- (nullable NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater; + +/*! + Called before an updater shows a modal alert window, + to give the host the opportunity to hide attached windows that may get in the way. + + \param updater The SUUpdater instance. + */ +- (void)updaterWillShowModalAlert:(SUUpdater *)updater; + +/*! + Called after an updater shows a modal alert window, + to give the host the opportunity to hide attached windows that may get in the way. + + \param updater The SUUpdater instance. + */ +- (void)updaterDidShowModalAlert:(SUUpdater *)updater; + +/*! + Called when an update is scheduled to be silently installed on quit. + This is after an update has been automatically downloaded in the background. + (i.e. SUUpdater::automaticallyDownloadsUpdates is YES) + + \param updater The SUUpdater instance. + \param item The appcast item corresponding to the update that is proposed to be installed. + \param invocation Can be used to trigger an immediate silent install and relaunch. + */ +- (void)updater:(SUUpdater *)updater willInstallUpdateOnQuit:(SUAppcastItem *)item immediateInstallationInvocation:(NSInvocation *)invocation; + +/*! + Calls after an update that was scheduled to be silently installed on quit has been canceled. + + \param updater The SUUpdater instance. + \param item The appcast item corresponding to the update that was proposed to be installed. + */ +- (void)updater:(SUUpdater *)updater didCancelInstallUpdateOnQuit:(SUAppcastItem *)item; + +/*! + Called after an update is aborted due to an error. + + \param updater The SUUpdater instance. + \param error The error that caused the abort + */ +- (void)updater:(SUUpdater *)updater didAbortWithError:(NSError *)error; + +@end + +NS_ASSUME_NONNULL_END diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h b/OSX/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h index 6c65ea4..c654fc4 100755..100644 --- a/OSX/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h +++ b/OSX/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h @@ -9,21 +9,29 @@ #ifndef SUVERSIONCOMPARISONPROTOCOL_H #define SUVERSIONCOMPARISONPROTOCOL_H -#import <Cocoa/Cocoa.h> +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif +#import "SUExport.h" + +NS_ASSUME_NONNULL_BEGIN /*! - @protocol - @abstract Implement this protocol to provide version comparison facilities for Sparkle. + Provides version comparison facilities for Sparkle. */ @protocol SUVersionComparison /*! - @method - @abstract An abstract method to compare two version strings. - @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent. + An abstract method to compare two version strings. + + Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, + and NSOrderedSame if they are equivalent. */ -- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD! +- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD! @end +NS_ASSUME_NONNULL_END #endif diff --git a/OSX/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h b/OSX/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h index 368b9c9..980efb3 100755..100644 --- a/OSX/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h +++ b/OSX/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h @@ -6,22 +6,24 @@ // Copyright 2009 Elgato Systems GmbH. All rights reserved. // -#import <Cocoa/Cocoa.h> - +#if __has_feature(modules) +@import Foundation; +#else +#import <Foundation/Foundation.h> +#endif +#import "SUExport.h" /*! - @protocol - @abstract Implement this protocol to apply special formatting to the two - version numbers. + Applies special display formatting to version numbers. */ @protocol SUVersionDisplay /*! - @method - @abstract An abstract method to format two version strings. - @discussion You get both so you can display important distinguishing - information, but leave out unnecessary/confusing parts. + Formats two version strings. + + Both versions are provided so that important distinguishing information + can be displayed while also leaving out unnecessary/confusing parts. */ --(void) formatVersion: (NSString**)inOutVersionA andVersion: (NSString**)inOutVersionB; +- (void)formatVersion:(NSString *_Nonnull*_Nonnull)inOutVersionA andVersion:(NSString *_Nonnull*_Nonnull)inOutVersionB; @end diff --git a/OSX/Sparkle.framework/Versions/A/Headers/Sparkle.h b/OSX/Sparkle.framework/Versions/A/Headers/Sparkle.h index 08dd577..5ae2e6a 100755..100644 --- a/OSX/Sparkle.framework/Versions/A/Headers/Sparkle.h +++ b/OSX/Sparkle.framework/Versions/A/Headers/Sparkle.h @@ -12,10 +12,22 @@ // This list should include the shared headers. It doesn't matter if some of them aren't shared (unless // there are name-space collisions) so we can list all of them to start with: -#import <Sparkle/SUUpdater.h> +#import "SUAppcast.h" +#import "SUAppcastItem.h" +#import "SUStandardVersionComparator.h" +#import "SUUpdater.h" +#import "SUUpdaterDelegate.h" +#import "SUVersionComparisonProtocol.h" +#import "SUVersionDisplayProtocol.h" +#import "SUErrors.h" -#import <Sparkle/SUAppcast.h> -#import <Sparkle/SUAppcastItem.h> -#import <Sparkle/SUVersionComparisonProtocol.h> +#import "SPUDownloader.h" +#import "SPUDownloaderDelegate.h" +#import "SPUDownloaderDeprecated.h" +#import "SPUDownloadData.h" +#import "SPUDownloaderProtocol.h" +#import "SPUDownloaderSession.h" +#import "SPUURLRequest.h" +#import "SUCodeSigningVerifier.h" #endif diff --git a/OSX/Sparkle.framework/Versions/A/Modules/module.modulemap b/OSX/Sparkle.framework/Versions/A/Modules/module.modulemap new file mode 100644 index 0000000..af3fe6d --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module Sparkle { + umbrella header "Sparkle.h" + + export * + module * { export * } +} diff --git a/OSX/Sparkle.framework/Versions/A/PrivateHeaders/SUUnarchiver.h b/OSX/Sparkle.framework/Versions/A/PrivateHeaders/SUUnarchiver.h new file mode 100644 index 0000000..a52bf5a --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/PrivateHeaders/SUUnarchiver.h @@ -0,0 +1,21 @@ +// +// SUUnarchiver.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@protocol SUUnarchiverProtocol; + +@interface SUUnarchiver : NSObject + ++ (nullable id <SUUnarchiverProtocol>)unarchiverForPath:(NSString *)path updatingHostBundlePath:(nullable NSString *)hostPath decryptionPassword:(nullable NSString *)decryptionPassword; + +@end + +NS_ASSUME_NONNULL_END diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist new file mode 100644 index 0000000..2bda3e9 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>BuildMachineOSBuild</key> + <string>18C54</string> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>Autoupdate</string> + <key>CFBundleIconFile</key> + <string>AppIcon.icns</string> + <key>CFBundleIdentifier</key> + <string>org.sparkle-project.Sparkle.Autoupdate</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleShortVersionString</key> + <string>1.21.2 12-ga5b23cdbe</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleSupportedPlatforms</key> + <array> + <string>MacOSX</string> + </array> + <key>CFBundleVersion</key> + <string>1.21.2</string> + <key>DTCompiler</key> + <string>com.apple.compilers.llvm.clang.1_0</string> + <key>DTPlatformBuild</key> + <string>10B61</string> + <key>DTPlatformVersion</key> + <string>GM</string> + <key>DTSDKBuild</key> + <string>18B71</string> + <key>DTSDKName</key> + <string>macosx10.14</string> + <key>DTXcode</key> + <string>1010</string> + <key>DTXcodeBuild</key> + <string>10B61</string> + <key>LSBackgroundOnly</key> + <string>1</string> + <key>LSMinimumSystemVersion</key> + <string>10.7</string> + <key>LSUIElement</key> + <string>1</string> + <key>NSMainNibFile</key> + <string>MainMenu</string> + <key>NSPrincipalClass</key> + <string>NSApplication</string> +</dict> +</plist> diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate Binary files differnew file mode 100755 index 0000000..ee27325 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop Binary files differnew file mode 100755 index 0000000..561ff48 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo new file mode 100644 index 0000000..bd04210 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPL????
\ No newline at end of file diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns Binary files differnew file mode 100644 index 0000000..7f2a571 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib Binary files differnew file mode 100644 index 0000000..da18126 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..4cd92c0 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ca.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ca.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..cc238f6 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ca.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..c93688a --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..10e3c5a --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..698dc67 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..deed9ef --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..8c38dc6 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..4f2015f --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fi.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fi.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..dab921c --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fi.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..c7a5571 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/he.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/he.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..fec4d0d --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/he.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/hr.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/hr.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..2a727d3 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/hr.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/hu.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/hu.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..9cd6bff --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/hu.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..74ae728 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..68b6d36 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..f5e9c6d --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..92c18ee --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..ec2561b --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..58be0e8 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..2b9c461 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..e55c6fd --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..00df86f --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..318baa9 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..c33086d --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..a7d2ebc --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..1be2a80 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..738c900 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..eca2570 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..4def140 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..f7eb257 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..214331c --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..533e208 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/DarkAqua.css b/OSX/Sparkle.framework/Versions/A/Resources/DarkAqua.css new file mode 100644 index 0000000..a41e0f2 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/DarkAqua.css @@ -0,0 +1,9 @@ +html { + color: #FFFFFFD8; +} +:link { + color: #419CFF; +} +:link:active { + color: #FF1919; +} diff --git a/OSX/Sparkle.framework/Versions/A/Resources/Info.plist b/OSX/Sparkle.framework/Versions/A/Resources/Info.plist index 1e79abe..0d62b6c 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/Info.plist +++ b/OSX/Sparkle.framework/Versions/A/Resources/Info.plist @@ -3,13 +3,13 @@ <plist version="1.0"> <dict> <key>BuildMachineOSBuild</key> - <string>13A603</string> + <string>18C54</string> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleExecutable</key> <string>Sparkle</string> <key>CFBundleIdentifier</key> - <string>org.andymatuschak.Sparkle</string> + <string>org.sparkle-project.Sparkle</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> @@ -17,24 +17,28 @@ <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleShortVersionString</key> - <string>1.5 Beta (git)</string> + <string>1.21.2 12-ga5b23cdbe</string> <key>CFBundleSignature</key> <string>????</string> + <key>CFBundleSupportedPlatforms</key> + <array> + <string>MacOSX</string> + </array> <key>CFBundleVersion</key> - <string>1.5</string> + <string>1.21.2</string> <key>DTCompiler</key> <string>com.apple.compilers.llvm.clang.1_0</string> <key>DTPlatformBuild</key> - <string>5A3005</string> + <string>10B61</string> <key>DTPlatformVersion</key> <string>GM</string> <key>DTSDKBuild</key> - <string>13A595</string> + <string>18B71</string> <key>DTSDKName</key> - <string>macosx10.9</string> + <string>macosx10.14</string> <key>DTXcode</key> - <string>0502</string> + <string>1010</string> <key>DTXcodeBuild</key> - <string>5A3005</string> + <string>10B61</string> </dict> </plist> diff --git a/OSX/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist b/OSX/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist index 63644f0..1f75b24 100755..100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist +++ b/OSX/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist @@ -9,27 +9,91 @@ <key>iMac4,1</key> <string>iMac (Core Duo)</string> <key>iMac4,2</key> - <string>iMac for Education (17-inch, Core Duo)</string> + <string>iMac for Education (17 inch, Core Duo)</string> <key>iMac5,1</key> <string>iMac (Core 2 Duo, 17 or 20 inch, SuperDrive)</string> <key>iMac5,2</key> <string>iMac (Core 2 Duo, 17 inch, Combo Drive)</string> <key>iMac6,1</key> <string>iMac (Core 2 Duo, 24 inch, SuperDrive)</string> + <key>iMac7,1</key> + <string>iMac Intel Core 2 Duo (aluminum enclosure)</string> <key>iMac8,1</key> - <string>iMac (April 2008)</string> + <string>iMac (Core 2 Duo, 20 or 24 inch, Early 2008 )</string> + <key>iMac9,1</key> + <string>iMac (Core 2 Duo, 20 or 24 inch, Early or Mid 2009 )</string> + <key>iMac10,1</key> + <string>iMac (Core 2 Duo, 21.5 or 27 inch, Late 2009 )</string> + <key>iMac11,1</key> + <string>iMac (Core i5 or i7, 27 inch Late 2009)</string> + <key>iMac11,2</key> + <string>21.5" iMac (mid 2010)</string> + <key>iMac11,3</key> + <string>iMac (Core i5 or i7, 27 inch Mid 2010)</string> + <key>iMac12,1</key> + <string>iMac (Core i3 or i5 or i7, 21.5 inch Mid 2010 or Late 2011)</string> + <key>iMac12,2</key> + <string>iMac (Core i5 or i7, 27 inch Mid 2011)</string> + <key>iMac13,1</key> + <string>iMac (Core i3 or i5 or i7, 21.5 inch Late 2012 or Early 2013)</string> + <key>iMac13,2</key> + <string>iMac (Core i5 or i7, 27 inch Late 2012)</string> + <key>iMac14,1</key> + <string>iMac (Core i5, 21.5 inch Late 2013)</string> + <key>iMac14,2</key> + <string>iMac (Core i5 or i7, 27 inch Late 2013)</string> + <key>iMac14,3</key> + <string>iMac (Core i5 or i7, 21.5 inch Late 2013)</string> + <key>iMac14,4</key> + <string>iMac (Core i5, 21.5 inch Mid 2014)</string> + <key>iMac15,1</key> + <string>iMac (Retina 5K Core i5 or i7, 27 inch Late 2014 or Mid 2015)</string> + <key>iMac16,1</key> + <string>iMac (Core i5, 21,5 inch Late 2015)</string> + <key>iMac16,2</key> + <string>iMac (Retina 4K Core i5 or i7, 21.5 inch Late 2015)</string> + <key>iMac17,1</key> + <string>iMac (Retina 5K Core i5 or i7, 27 inch Late 2015)</string> <key>MacBook1,1</key> <string>MacBook (Core Duo)</string> <key>MacBook2,1</key> <string>MacBook (Core 2 Duo)</string> <key>MacBook4,1</key> <string>MacBook (Core 2 Duo Feb 2008)</string> + <key>MacBook5,1</key> + <string>MacBook (Core 2 Duo, Late 2008, Unibody)</string> + <key>MacBook5,2</key> + <string>MacBook (Core 2 Duo, Early 2009, White)</string> + <key>MacBook6,1</key> + <string>MacBook (Core 2 Duo, Late 2009, Unibody)</string> + <key>MacBook7,1</key> + <string>MacBook (Core 2 Duo, Mid 2010, White)</string> + <key>MacBook8,1</key> + <string>MacBook (Core M, 12 inch, Early 2015)</string> <key>MacBookAir1,1</key> - <string>MacBook Air (January 2008)</string> + <string>MacBook Air (Core 2 Duo, 13 inch, Early 2008)</string> <key>MacBookAir2,1</key> - <string>MacBook Air (June 2009)</string> + <string>MacBook Air (Core 2 Duo, 13 inch, Mid 2009)</string> <key>MacBookAir3,1</key> - <string>MacBook Air (October 2010)</string> + <string>MacBook Air (Core 2 Duo, 11 inch, Late 2010)</string> + <key>MacBookAir3,2</key> + <string>MacBook Air (Core 2 Duo, 13 inch, Late 2010)</string> + <key>MacBookAir4,1</key> + <string>MacBook Air (Core i5 or i7, 11 inch, Mid 2011)</string> + <key>MacBookAir4,2</key> + <string>MacBook Air (Core i5 or i7, 13 inch, Mid 2011)</string> + <key>MacBookAir5,1</key> + <string>MacBook Air (Core i5 or i7, 11 inch, Mid 2012)</string> + <key>MacBookAir5,2</key> + <string>MacBook Air (Core i5 or i7, 13 inch, Mid 2012)</string> + <key>MacBookAir6,1</key> + <string>MacBook Air (Core i5 or i7, 11 inch, Mid 2013 or Early 2014)</string> + <key>MacBookAir6,2</key> + <string>MacBook Air (Core i5 or i7, 13 inch, Mid 2013 or Early 2014)</string> + <key>MacBookAir7,1</key> + <string>MacBook Air (Core i5 or i7, 11 inch, Early 2015)</string> + <key>MacBookAir7,2</key> + <string>MacBook Air (Core i5 or i7, 13 inch, Early 2015)</string> <key>MacBookPro1,1</key> <string>MacBook Pro Core Duo (15-inch)</string> <key>MacBookPro1,2</key> @@ -44,8 +108,70 @@ <string>MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo)</string> <key>MacBookPro4,1</key> <string>MacBook Pro (Core 2 Duo Feb 2008)</string> + <key>MacBookPro5,1</key> + <string>MacBook Pro Intel Core 2 Duo (aluminum unibody)</string> + <key>MacBookPro5,2</key> + <string>MacBook Pro Intel Core 2 Duo (aluminum unibody)</string> + <key>MacBookPro5,3</key> + <string>MacBook Pro Intel Core 2 Duo (aluminum unibody)</string> + <key>MacBookPro5,4</key> + <string>MacBook Pro Intel Core 2 Duo (aluminum unibody)</string> + <key>MacBookPro5,5</key> + <string>MacBook Pro Intel Core 2 Duo (aluminum unibody)</string> + <key>MacBookPro6,1</key> + <string>MacBook Pro Intel Core i5, Intel Core i7 (mid 2010)</string> + <key>MacBookPro6,2</key> + <string>MacBook Pro Intel Core i5, Intel Core i7 (mid 2010)</string> + <key>MacBookPro7,1</key> + <string>MacBook Pro Intel Core 2 Duo (mid 2010)</string> + <key>MacBookPro8,1</key> + <string>MacBook Pro Intel Core i5, Intel Core i7, 13" (early 2011)</string> + <key>MacBookPro8,2</key> + <string>MacBook Pro Intel Core i7, 15" (early 2011)</string> + <key>MacBookPro8,3</key> + <string>MacBook Pro Intel Core i7, 17" (early 2011)</string> + <key>MacBookPro9,1</key> + <string>MacBook Pro (15-inch, Mid 2012)</string> + <key>MacBookPro9,2</key> + <string>MacBook Pro (13-inch, Mid 2012)</string> + <key>MacBookPro10,1</key> + <string>MacBook Pro (Retina, Mid 2012)</string> + <key>MacBookPro10,2</key> + <string>MacBook Pro (Retina, 13-inch, Late 2012)</string> + <key>MacBookPro11,1</key> + <string>MacBook Pro (Retina, 13-inch, Late 2013)</string> + <key>MacBookPro11,2</key> + <string>MacBook Pro (Retina, 15-inch, Late 2013)</string> + <key>MacBookPro11,3</key> + <string>MacBook Pro (Retina, 15-inch, Late 2013)</string> + <key>MacbookPro11,4</key> + <string>MacBook Pro (Retina, 15-inch, Mid 2015)</string> + <key>MacbookPro11,5</key> + <string>MacBook Pro (Retina, 15-inch, Mid 2015)</string> + <key>MacbookPro12,1 </key> + <string>MacBook Pro (Retina, 13-inch, Early 2015)</string> <key>Macmini1,1</key> <string>Mac Mini (Core Solo/Duo)</string> + <key>Macmini2,1</key> + <string>Mac mini Intel Core</string> + <key>Macmini3,1</key> + <string>Mac mini Intel Core</string> + <key>Macmini4,1</key> + <string>Mac mini Intel Core (Mid 2010)</string> + <key>Macmini5,1</key> + <string>Mac mini (Core i5, Mid 2011)</string> + <key>Macmini5,2</key> + <string>Mac mini (Core i5 or Core i7, Mid 2011)</string> + <key>Macmini5,3</key> + <string>Mac mini (Core i7, Server, Mid 2011)</string> + <key>Macmini6,1</key> + <string>Mac mini (Core i5, Late 2012)</string> + <key>Macmini6,2</key> + <string>Mac mini (Core i7, Normal or Server, Late 2012)</string> + <key>Macmini7,1</key> + <string>Mac mini (Core i5 or Core i7, Late 2014)</string> + <key>MacPro1,1,Quad</key> + <string>Mac Pro</string> <key>MacPro1,1</key> <string>Mac Pro (four-core)</string> <key>MacPro2,1</key> @@ -55,7 +181,9 @@ <key>MacPro4,1</key> <string>Mac Pro (March 2009)</string> <key>MacPro5,1</key> - <string>Mac Pro (August 2010)</string> + <string>Mac Pro (2010 or 2012)</string> + <key>MacPro6,1</key> + <string>Mac Pro (Late 2013)</string> <key>PowerBook1,1</key> <string>PowerBook G3</string> <key>PowerBook2,1</key> @@ -118,14 +246,6 @@ <string>Power Macintosh G3 (Blue & White)</string> <key>PowerMac1,2</key> <string>Power Macintosh G4 (PCI Graphics)</string> - <key>PowerMac10,1</key> - <string>Mac Mini G4</string> - <key>PowerMac10,2</key> - <string>Mac Mini (Late 2005)</string> - <key>PowerMac11,2</key> - <string>Power Macintosh G5 (Late 2005)</string> - <key>PowerMac12,1</key> - <string>iMac G5 (iSight)</string> <key>PowerMac2,1</key> <string>iMac G3 (Slot-loading CD-ROM)</string> <key>PowerMac2,2</key> @@ -152,6 +272,8 @@ <string>iMac G4 (17-inch Flat Panel)</string> <key>PowerMac5,1</key> <string>Power Macintosh G4 Cube</string> + <key>PowerMac5,2</key> + <string>Power Mac G4 Cube</string> <key>PowerMac6,1</key> <string>iMac G4 (USB 2.0)</string> <key>PowerMac6,3</key> @@ -168,6 +290,14 @@ <string>iMac G5 (Ambient Light Sensor)</string> <key>PowerMac9,1</key> <string>Power Macintosh G5 (Late 2005)</string> + <key>PowerMac10,1</key> + <string>Mac Mini G4</string> + <key>PowerMac10,2</key> + <string>Mac Mini (Late 2005)</string> + <key>PowerMac11,2</key> + <string>Power Macintosh G5 (Late 2005)</string> + <key>PowerMac12,1</key> + <string>iMac G5 (iSight)</string> <key>RackMac1,1</key> <string>Xserve G4</string> <key>RackMac1,2</key> @@ -178,5 +308,7 @@ <string>Xserve (Intel Xeon)</string> <key>Xserve2,1</key> <string>Xserve (January 2008 quad-core)</string> + <key>Xserve3,1</key> + <string>Xserve (early 2009)</string> </dict> </plist> diff --git a/OSX/Sparkle.framework/Versions/A/Resources/SUStatus.nib b/OSX/Sparkle.framework/Versions/A/Resources/SUStatus.nib Binary files differindex 356987e..da18126 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/SUStatus.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/SUStatus.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 2d1b77b..29127f1 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib Binary files differindex b8925e7..c619e69 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 006d6aa..5773517 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings Binary files differindex 858a71f..4cd92c0 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..cc238f6 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 335264f..b3d57f6 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib Binary files differindex fe70bf2..30a49ec 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 9dcd944..f4c8532 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings Binary files differindex 9bbb996..c93688a 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 211e718..ef46cca 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib Binary files differindex 42395b2..778a468 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 58af832..e435904 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings Binary files differindex bcf691d..10e3c5a 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 19970aa..7540fa1 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib Binary files differindex 69fccfc..fed8b25 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib Binary files differindex c59bf3c..6ecec45 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings Binary files differindex 664946d..698dc67 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.nib Binary files differnew file mode 100644 index 0000000..6e803a7 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.nib Binary files differnew file mode 100644 index 0000000..8ca181c --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.nib Binary files differnew file mode 100644 index 0000000..353156a --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..deed9ef --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 512c1c5..15f157f 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib Binary files differindex e856f9d..29d60da 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 4f0c0a3..72f172e 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings Binary files differindex f9c15d8..8c38dc6 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 8d657a7..9b3f723 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib Binary files differindex d28a4f8..265bacc 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib Binary files differindex f927ba6..009394d 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings Binary files differindex 8e4ab94..4f2015f 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib Binary files differnew file mode 100644 index 0000000..a882db0 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib Binary files differnew file mode 100644 index 0000000..c7a3311 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdatePermissionPrompt.nib Binary files differnew file mode 100644 index 0000000..60cd954 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..dab921c --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 59b199b..5112924 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib Binary files differindex a084b19..e24e3fd 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 808db82..88598eb 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings Binary files differindex 236f807..c7a5571 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..fec4d0d --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/SUAutomaticUpdateAlert.nib Binary files differnew file mode 100644 index 0000000..75761ac --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdateAlert.nib Binary files differnew file mode 100644 index 0000000..867b7c0 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdatePermissionPrompt.nib Binary files differnew file mode 100644 index 0000000..f1090d7 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..2a727d3 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/hr.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib Binary files differnew file mode 100644 index 0000000..4d7e8a9 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib Binary files differnew file mode 100644 index 0000000..40571fd --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdatePermissionPrompt.nib Binary files differnew file mode 100644 index 0000000..ff2e24f --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..9cd6bff --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 89825fb..e27ca6d 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib Binary files differindex 2172c0d..3e2d8ef 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 9a4cca0..0dceed4 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings Binary files differindex 665e273..74ae728 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib Binary files differindex c3d7a42..c0522dc 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib Binary files differindex 7cc884b..5013418 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 285596b..cc82821 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings Binary files differindex 4ccd7af..68b6d36 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 61d2a29..27f5abf 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib Binary files differindex ee41cad..86798fe 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib Binary files differindex ebd5759..57fcc83 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings Binary files differindex b21ea04..f5e9c6d 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib Binary files differindex e7a8d46..977dc0a 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib Binary files differindex 89f887e..d52bd5d 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 5da11e0..7880aef 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..92c18ee --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.nib Binary files differnew file mode 100644 index 0000000..fd5b851 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.nib Binary files differnew file mode 100644 index 0000000..6b05c1f --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.nib Binary files differnew file mode 100644 index 0000000..b1474d1 --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..ec2561b --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 35a8de2..19e19ff 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib Binary files differindex eec88ff..13a6ea6 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib Binary files differindex ab2c86f..690b23a 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings Binary files differindex 023c473..58be0e8 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 0646f3f..3de644f 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib Binary files differindex 1b4d495..b05aea7 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 8ea95e8..fc42fa2 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings Binary files differindex 9a0bc8b..2b9c461 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib Binary files differindex e8a824a..c43d996 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib Binary files differindex 03500fa..bf5e54d 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib Binary files differindex dc92de6..0773eee 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings Binary files differindex 7a11a9e..e55c6fd 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib Binary files differindex c3603d5..f787d8c 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib Binary files differindex 2d371c4..a0ea252 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 7b6d719..8df1dbb 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings Binary files differindex 497cd83..00df86f 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib Binary files differindex d669654..b4068e8 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib Binary files differindex 6a75e5e..998781b 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 2e5802c..011aaf5 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings Binary files differindex e90bdf5..318baa9 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 8022f52..09fb088 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib Binary files differindex 9466dc3..423b2ce 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 3b26a5b..19e13ec 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings Binary files differindex 7afef95..c33086d 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 3afea8d..cf9cb70 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib Binary files differindex 15e760d..0413025 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib Binary files differindex e7d67a2..ea04cc1 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings Binary files differnew file mode 100644 index 0000000..a7d2ebc --- /dev/null +++ b/OSX/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 60cfe74..ac4ded9 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib Binary files differindex c3bd698..fc1c757 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 1ff5bc3..913fb3b 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings Binary files differindex 7ec0bc2..1be2a80 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 8df1ba0..5c5774c 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib Binary files differindex 9ab3288..bff9b7f 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 0337c2a..00410e3 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings Binary files differindex 16c3fb8..738c900 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib Binary files differindex e1377a4..9126de5 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib Binary files differindex 239b8f7..867b481 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 143ff91..25e48c8 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings Binary files differindex 0468c97..eca2570 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 263e74a..6526d27 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib Binary files differindex ca40c57..4e7b748 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 22a8f46..21bed5f 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings Binary files differindex cabc211..4def140 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 83dbcbf..5d2dda5 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib Binary files differindex 939e0cb..94c9dc7 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 8e2bf73..ac62cbf 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings Binary files differindex 6f0e4db..f7eb257 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib Binary files differindex 65cc3d2..789fbdb 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib Binary files differindex a453dfc..9ea3f4d 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 9f85d65..aec87f2 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings Binary files differindex b741758..214331c 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib Binary files differindex c4b9e9b..c5f6ea8 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib b/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib Binary files differindex 6e98d7e..1b4b140 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib b/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib Binary files differindex 935b007..1a642e8 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib +++ b/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib diff --git a/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings b/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings Binary files differindex c1f7e85..533e208 100644 --- a/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings +++ b/OSX/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings diff --git a/OSX/Sparkle.framework/Versions/A/Sparkle b/OSX/Sparkle.framework/Versions/A/Sparkle Binary files differindex 64eefd0..dcba851 100755 --- a/OSX/Sparkle.framework/Versions/A/Sparkle +++ b/OSX/Sparkle.framework/Versions/A/Sparkle diff --git a/OSX/Updater.h b/OSX/Updater.h index 53abbe4..3b56830 100644 --- a/OSX/Updater.h +++ b/OSX/Updater.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2013 Jamie Zawinski <jwz@jwz.org> +/* xscreensaver, Copyright (c) 2013-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -9,14 +9,17 @@ * implied warranty. */ -#ifndef USE_IPHONE -#import <Cocoa/Cocoa.h> -@interface XScreenSaverUpdater : NSObject <NSApplicationDelegate> +#ifdef IN_UPDATER +# import <Cocoa/Cocoa.h> +# import <Sparkle/SUUpdaterDelegate.h> + +@interface XScreenSaverUpdater : NSObject <NSApplicationDelegate, + SUUpdaterDelegate> { NSTimer *timer; } @end -#endif // !USE_IPHONE +#endif // IN_UPDATER #define UPDATER_DOMAIN "org.jwz.xscreensaver.updater" diff --git a/OSX/Updater.m b/OSX/Updater.m index 1bf29fa..6e0d3c9 100644 --- a/OSX/Updater.m +++ b/OSX/Updater.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2013 Jamie Zawinski <jwz@jwz.org> +/* xscreensaver, Copyright (c) 2013-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -17,6 +17,7 @@ * version 4-Dec-2013 or later. */ +#define IN_UPDATER #import "Updater.h" #import "Sparkle/SUUpdater.h" diff --git a/OSX/Updater.plist b/OSX/Updater.plist index fd3b176..05befe8 100644 --- a/OSX/Updater.plist +++ b/OSX/Updater.plist @@ -9,7 +9,7 @@ <key>CFBundleExecutable</key> <string>${EXECUTABLE_NAME}</string> <key>CFBundleGetInfoString</key> - <string>5.40</string> + <string>5.42</string> <key>CFBundleIconFile</key> <string>SaverRunner</string> <key>CFBundleIdentifier</key> @@ -17,23 +17,23 @@ <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleLongVersionString</key> - <string>5.40</string> + <string>5.42</string> <key>CFBundleName</key> <string>${PRODUCT_NAME}</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>5.40</string> + <string>5.42</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> - <string>5.40</string> + <string>5.42</string> <key>LSMinimumSystemVersion</key> <string>${MACOSX_DEPLOYMENT_TARGET}</string> <key>LSUIElement</key> <true/> <key>NSHumanReadableCopyright</key> - <string>5.40</string> + <string>5.42</string> <key>NSMainNibFile</key> <string>Updater</string> <key>NSPrincipalClass</key> diff --git a/OSX/XScreenSaver.plist b/OSX/XScreenSaver.plist index 3417295..4d106ad 100644 --- a/OSX/XScreenSaver.plist +++ b/OSX/XScreenSaver.plist @@ -15,11 +15,11 @@ <key>CFBundlePackageType</key> <string>BNDL</string> <key>CFBundleShortVersionString</key> - <string>5.40</string> + <string>5.42</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> - <string>5.40</string> + <string>5.42</string> <key>LSMinimumSystemVersion</key> <string>10.8</string> <key>NSMainNibFile</key> diff --git a/OSX/XScreenSaverConfigSheet.h b/OSX/XScreenSaverConfigSheet.h index b2fd489..8e40dde 100644 --- a/OSX/XScreenSaverConfigSheet.h +++ b/OSX/XScreenSaverConfigSheet.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski <jwz@jwz.org> +/* xscreensaver, Copyright (c) 2006-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -48,7 +48,7 @@ # endif > # else - NSWindow <NSXMLParserDelegate> + NSPanel <NSXMLParserDelegate> # endif { NSString *saver_name; diff --git a/OSX/XScreenSaverView.m b/OSX/XScreenSaverView.m index cb7d45b..371cf17 100644 --- a/OSX/XScreenSaverView.m +++ b/OSX/XScreenSaverView.m @@ -2059,10 +2059,10 @@ gl_check_ver (const struct gl_version *caps, if (!initted_p || ![self isAnimating]) // no event handling unless running. return NO; - [self lockFocus]; +// [self lockFocus]; // As of 10.14 this causes flicker on mouse motion [self prepareContext]; BOOL result = xsft->event_cb (xdpy, xwindow, xdata, e); - [self unlockFocus]; +// [self unlockFocus];cp -Rf ${CONFIGURATION_BUILD_DIR}/BuildOutputPrefPane.prefPane ~/Library/PreferencePanes return result; } diff --git a/OSX/bindist.rtf b/OSX/bindist.rtf index 9d82431..251bb11 100644 --- a/OSX/bindist.rtf +++ b/OSX/bindist.rtf @@ -16,8 +16,8 @@ \b0 by Jamie Zawinski\ and many others\ \ -version 5.40\ -12-Aug-2018\ +version 5.42\ +28-Dec-2018\ \ {\field{\*\fldinst{HYPERLINK "https://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 https://www.jwz.org/xscreensaver/}}\ \pard\pardeftab720 diff --git a/OSX/bindist2.webloc b/OSX/bindist2.webloc index 0ebfa91..4b87f8c 100644 --- a/OSX/bindist2.webloc +++ b/OSX/bindist2.webloc @@ -3,6 +3,6 @@ <plist version="1.0"> <dict> <key>URL</key> - <string>https://www.jwz.org/xscreensaver/download.html</string> + <string>https://play.google.com/store/apps/details?id=org.jwz.android.xscreensaver</string> </dict> </plist> diff --git a/OSX/fuzztest.sh b/OSX/fuzztest.sh index 20d596a..870d12c 100755 --- a/OSX/fuzztest.sh +++ b/OSX/fuzztest.sh @@ -33,6 +33,8 @@ function menu() { end tell end tell end tell" + + open -a XEmacs # switch focus back to somewhere sane } menu 'Shake Gesture' diff --git a/OSX/iSaverRunner.plist b/OSX/iSaverRunner.plist index 4604e9d..92ca6f0 100644 --- a/OSX/iSaverRunner.plist +++ b/OSX/iSaverRunner.plist @@ -9,7 +9,7 @@ <key>CFBundleExecutable</key> <string>${EXECUTABLE_NAME}</string> <key>CFBundleGetInfoString</key> - <string>5.40</string> + <string>5.42</string> <key>CFBundleIcons</key> <dict/> <key>CFBundleIcons~ipad</key> @@ -19,21 +19,21 @@ <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleLongVersionString</key> - <string>5.40</string> + <string>5.42</string> <key>CFBundleName</key> <string>${PRODUCT_NAME}</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>5.40</string> + <string>5.42</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> - <string>5.40</string> + <string>5.42</string> <key>LSRequiresIPhoneOS</key> <true/> <key>NSHumanReadableCopyright</key> - <string>5.40</string> + <string>5.42</string> <key>NSMainNibFile</key> <string>iSaverRunner</string> <key>UIAppFonts</key> diff --git a/OSX/ios-function-table.m b/OSX/ios-function-table.m index fcb2808..c2e5b88 100644 --- a/OSX/ios-function-table.m +++ b/OSX/ios-function-table.m @@ -1,5 +1,5 @@ /* Generated file, do not edit. - Created: Sat Aug 4 21:35:23 2018 by build-fntable.pl 1.6. + Created: Tue Oct 23 19:02:07 2018 by build-fntable.pl 1.6. */ #import <Foundation/Foundation.h> @@ -107,6 +107,7 @@ extern struct xscreensaver_function_table greynetic_xscreensaver_function_table, halftone_xscreensaver_function_table, halo_xscreensaver_function_table, + handsy_xscreensaver_function_table, helix_xscreensaver_function_table, hexadrop_xscreensaver_function_table, hexstrut_xscreensaver_function_table, @@ -346,6 +347,7 @@ NSDictionary *make_function_table_dict(void) [NSValue valueWithPointer:&greynetic_xscreensaver_function_table], @"greynetic", [NSValue valueWithPointer:&halftone_xscreensaver_function_table], @"halftone", [NSValue valueWithPointer:&halo_xscreensaver_function_table], @"halo", + [NSValue valueWithPointer:&handsy_xscreensaver_function_table], @"handsy", [NSValue valueWithPointer:&helix_xscreensaver_function_table], @"helix", [NSValue valueWithPointer:&hexadrop_xscreensaver_function_table], @"hexadrop", [NSValue valueWithPointer:&hexstrut_xscreensaver_function_table], @"hexstrut", diff --git a/OSX/seticon.pl b/OSX/seticon.pl index fb5dc71..a4f8c2c 100755 --- a/OSX/seticon.pl +++ b/OSX/seticon.pl @@ -18,7 +18,7 @@ use strict; use File::Temp; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.6 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.7 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; @@ -52,6 +52,11 @@ sub set_icon ($$) { close $rez_fh; my @cmd = ('Rez', + + '-isysroot', + '/Applications/Xcode.app/Contents/Developer/Platforms' . + '/MacOSX.platform/Developer/SDKs/MacOSX.sdk', + 'CoreServices.r', $rez_filename, '-o', $target_res); diff --git a/OSX/sparkle-bin/BinaryDelta b/OSX/sparkle-bin/BinaryDelta Binary files differnew file mode 100755 index 0000000..de7acd7 --- /dev/null +++ b/OSX/sparkle-bin/BinaryDelta diff --git a/OSX/sparkle-bin/BinaryDelta.dSYM/Contents/Info.plist b/OSX/sparkle-bin/BinaryDelta.dSYM/Contents/Info.plist new file mode 100644 index 0000000..325809b --- /dev/null +++ b/OSX/sparkle-bin/BinaryDelta.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> + <dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.BinaryDelta</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleVersion</key> + <string>1</string> + </dict> +</plist> diff --git a/OSX/sparkle-bin/BinaryDelta.dSYM/Contents/Resources/DWARF/BinaryDelta b/OSX/sparkle-bin/BinaryDelta.dSYM/Contents/Resources/DWARF/BinaryDelta Binary files differnew file mode 100644 index 0000000..302129c --- /dev/null +++ b/OSX/sparkle-bin/BinaryDelta.dSYM/Contents/Resources/DWARF/BinaryDelta diff --git a/OSX/sparkle-bin/generate_appcast b/OSX/sparkle-bin/generate_appcast Binary files differnew file mode 100755 index 0000000..cffaded --- /dev/null +++ b/OSX/sparkle-bin/generate_appcast diff --git a/OSX/sparkle-bin/generate_appcast.dSYM/Contents/Info.plist b/OSX/sparkle-bin/generate_appcast.dSYM/Contents/Info.plist new file mode 100644 index 0000000..85e4783 --- /dev/null +++ b/OSX/sparkle-bin/generate_appcast.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> + <dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.generate_appcast</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleVersion</key> + <string>1</string> + </dict> +</plist> diff --git a/OSX/sparkle-bin/generate_appcast.dSYM/Contents/Resources/DWARF/generate_appcast b/OSX/sparkle-bin/generate_appcast.dSYM/Contents/Resources/DWARF/generate_appcast Binary files differnew file mode 100644 index 0000000..da66605 --- /dev/null +++ b/OSX/sparkle-bin/generate_appcast.dSYM/Contents/Resources/DWARF/generate_appcast diff --git a/OSX/sparkle-bin/generate_keys b/OSX/sparkle-bin/generate_keys Binary files differnew file mode 100755 index 0000000..9b4bf11 --- /dev/null +++ b/OSX/sparkle-bin/generate_keys diff --git a/OSX/sparkle-bin/generate_keys.dSYM/Contents/Info.plist b/OSX/sparkle-bin/generate_keys.dSYM/Contents/Info.plist new file mode 100644 index 0000000..3caf890 --- /dev/null +++ b/OSX/sparkle-bin/generate_keys.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> + <dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.generate_keys</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleVersion</key> + <string>1</string> + </dict> +</plist> diff --git a/OSX/sparkle-bin/generate_keys.dSYM/Contents/Resources/DWARF/generate_keys b/OSX/sparkle-bin/generate_keys.dSYM/Contents/Resources/DWARF/generate_keys Binary files differnew file mode 100644 index 0000000..ff7be52 --- /dev/null +++ b/OSX/sparkle-bin/generate_keys.dSYM/Contents/Resources/DWARF/generate_keys diff --git a/OSX/sparkle-bin/old_dsa_scripts/generate_dsa_keys_macos_10.12_only b/OSX/sparkle-bin/old_dsa_scripts/generate_dsa_keys_macos_10.12_only new file mode 100755 index 0000000..56f195f --- /dev/null +++ b/OSX/sparkle-bin/old_dsa_scripts/generate_dsa_keys_macos_10.12_only @@ -0,0 +1,24 @@ +#!/bin/bash +set -e +for file in "dsaparam.pem" "dsa_priv.pem" "dsa_pub.pem"; do + if [ -e "$file" ]; then + echo "There's already a $file here! Move it aside or be more careful!" + exit 1 + fi +done + +openssl="/usr/bin/openssl" +$openssl gendsa <($openssl dsaparam 2047) -out dsa_priv.pem +chmod 0400 dsa_priv.pem +$openssl dsa -in dsa_priv.pem -pubout -out dsa_pub.pem + +echo " +Generated two files: +dsa_priv.pem: your private key. Keep it secret and don't share it! +dsa_pub.pem: public counterpart to include in the app bundle. + +BACK UP YOUR PRIVATE KEY AND KEEP IT SAFE! +If you lose it, your users will be unable to upgrade! +" + +open -R dsa_priv.pem diff --git a/OSX/sparkle-bin/old_dsa_scripts/sign_update b/OSX/sparkle-bin/old_dsa_scripts/sign_update new file mode 100755 index 0000000..fddaae8 --- /dev/null +++ b/OSX/sparkle-bin/old_dsa_scripts/sign_update @@ -0,0 +1,18 @@ +#!/bin/bash +set -e +set -o pipefail +if [ "$#" -ne 2 ]; then + echo "Usage: $0 update_archive_file dsa_priv.pem" + echo "This is an old DSA signing script for deprecated DSA keys." + echo "Do not use this for new applications." + exit 1 +fi +openssl=/usr/bin/openssl +version=`$openssl version` +if [[ $version =~ "OpenSSL 0.9" ]]; then + # pre-10.13 system: Fall back to OpenSSL DSS1 digest because it does not like the -sha1 option + $openssl dgst -sha1 -binary < "$1" | $openssl dgst -dss1 -sign "$2" | $openssl enc -base64 +else + # 10.13 and later: Use LibreSSL SHA1 digest + $openssl dgst -sha1 -binary < "$1" | $openssl dgst -sha1 -sign "$2" | $openssl enc -base64 +fi diff --git a/OSX/sparkle-bin/sign_update b/OSX/sparkle-bin/sign_update Binary files differnew file mode 100755 index 0000000..b97e4bd --- /dev/null +++ b/OSX/sparkle-bin/sign_update diff --git a/OSX/sparkle-bin/sign_update.dSYM/Contents/Info.plist b/OSX/sparkle-bin/sign_update.dSYM/Contents/Info.plist new file mode 100644 index 0000000..0739389 --- /dev/null +++ b/OSX/sparkle-bin/sign_update.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> + <dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.sign_update</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleVersion</key> + <string>1</string> + </dict> +</plist> diff --git a/OSX/sparkle-bin/sign_update.dSYM/Contents/Resources/DWARF/sign_update b/OSX/sparkle-bin/sign_update.dSYM/Contents/Resources/DWARF/sign_update Binary files differnew file mode 100644 index 0000000..67f19b4 --- /dev/null +++ b/OSX/sparkle-bin/sign_update.dSYM/Contents/Resources/DWARF/sign_update diff --git a/OSX/updates.pl b/OSX/updates.pl index 5938a4a..9249154 100755 --- a/OSX/updates.pl +++ b/OSX/updates.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2013 Jamie Zawinski <jwz@jwz.org> +# Copyright © 2013-2018 Jamie Zawinski <jwz@jwz.org> # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -21,14 +21,15 @@ use open ":encoding(utf8)"; use POSIX; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.2 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.5 $' =~ 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"; +my $dsa_priv_key_file = "$ENV{HOME}/.ssh/sparkle_dsa_priv.pem"; +my $dsa_sign_update = "sparkle-bin/old_dsa_scripts/sign_update"; +my $edddsa_sign_update = "sparkle-bin/sign_update"; sub generate_xml($$$$) { @@ -37,21 +38,26 @@ sub generate_xml($$$$) { my $outfile = "updates.xml"; my $obody = ''; - my %sigs; + my %sig1s; + my %sig2s; 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 (/<item/i, $obody)) { + my @i = split (/<item/i, $obody); + shift @i; + foreach my $item (@i) { my ($v) = ($item =~ m/version="(.*?)"/si); - my ($sig) = ($item =~ m/dsaSignature="(.*?)"/si); + my ($sig1) = ($item =~ m/dsaSignature="(.*?)"/si); + my ($sig2) = ($item =~ m/edSignature="(.*?)"/si); my ($date) = ($item =~ m/<pubDate>(.*?)</si); next unless $v; - $sigs{$v} = $sig if $sig; + $sig1s{$v} = $sig1 if $sig1; + $sig2s{$v} = $sig2 if $sig2; $dates{$v} = $date if $date; - print STDERR "$progname: $v: " . ($date || '?') . "\n" + print STDERR "$progname: existing: $v: " . ($date || '?') . "\n" if ($verbose > 1); } } @@ -82,7 +88,8 @@ sub generate_xml($$$$) { my $v2 = $v1; $v2 =~ s/\.//gs; my $zip = undef; DONE: - foreach my $ext ('zip', 'dmg', 'tar.gz', 'tar.Z') { + #foreach my $ext ('zip', 'dmg', 'tar.gz', 'tar.Z') { + foreach my $ext ('dmg') { foreach my $v ($v1, $v2) { foreach my $name ($app_name, "x" . lc($app_name)) { my $f = "$name-$v.$ext"; @@ -97,36 +104,51 @@ sub generate_xml($$$$) { my $publishedp = ($zip && -f "$www_dir/$zip"); $publishedp = 1 if ($count == 0); - my $url = ("${base_url}$app_name/" . ($publishedp ? $zip : "")); + my $url = ("${base_url}$app_name/" . ($publishedp && $zip ? $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 ? + $date = ($date ? strftime ("%a, %d %b %Y %T %z", localtime($date)) : ""); my $odate = $dates{$v1}; - my $sig = $sigs{$v1}; + my $sig1 = $sig1s{$v1}; + my $sig2 = $sig2s{$v1}; # Re-generate the sig if the file date changed. - $sig = undef if ($odate && $odate ne $date); + $sig1 = undef if ($odate && $odate ne $date); + $sig2 = undef if ($odate && $odate ne $date); - print STDERR "$progname: $v1: $date " . ($sig ? "Y" : "N") . "\n" + print STDERR "$progname: $v1: $date " . + ($sig1 ? "Y" : "N") . ($sig2 ? "Y" : "N") . "\n" if ($verbose > 1); - if (!$sig && $zip) { + if (!$sig1 && $zip) { # Old-style sigs local %ENV = %ENV; $ENV{PATH} = "/usr/bin:$ENV{PATH}"; - $sig = `$sign_update "$archive_dir/$zip" "$priv_key_file"`; - $sig =~ s/\s+//gs; + $sig1 = `$dsa_sign_update "$archive_dir/$zip" "$dsa_priv_key_file"`; + $sig1 =~ s/\s+//gs; } + if (!$sig2 && $zip) { # New-style sigs + local %ENV = %ENV; + $ENV{PATH} = "/usr/bin:$ENV{PATH}"; + my $xml = `$edddsa_sign_update "$archive_dir/$zip"`; + ($sig2) = ($xml =~ m/sparkle:edSignature=\"([^\"<>\s]+)\"/si); + error ("unparsable: $edddsa_sign_update: $xml") unless $sig2; + } + + $sig1 = 'ERROR' unless defined($sig1); + $sig2 = 'ERROR' unless defined($sig2); + $size = -1 unless defined($size); my $enc = ($publishedp ? ("<enclosure url=\"$url\"\n" . " sparkle:version=\"$v1\"\n" . - " sparkle:dsaSignature=\"$sig\"\n" . + " sparkle:dsaSignature=\"$sig1\"\n" . + " sparkle:edSignature=\"$sig2\"\n" . " length=\"$size\"\n" . " type=\"application/octet-stream\" />\n") : "<sparkle:version>$v1</sparkle:version>\n"); @@ -196,6 +218,8 @@ sub usage() { } sub main() { + binmode (STDOUT, ':utf8'); + binmode (STDERR, ':utf8'); my ($app_name, $changelog, $archive_dir, $www_dir); while ($#ARGV >= 0) { $_ = shift @ARGV; diff --git a/OSX/updates.xml b/OSX/updates.xml index a4733a6..e782f72 100644 --- a/OSX/updates.xml +++ b/OSX/updates.xml @@ -8,36 +8,39 @@ <description>Updates to xscreensaver.</description> <language>en</language> <item> - <title>Version 5.39</title> - <link>https://www.jwz.org/xscreensaver/xscreensaver-5.39.dmg</link> - <description><![CDATA[• New hacks, 'razzledazzle', 'peepers', 'crumbler' and `maze3d'. <BR>• More heuristics for using RSS feeds as image sources. <BR>• Android: Image loading works. <BR>• Built-in image assets are now PNG instead of XPM or XBM. <BR>• X11: Better font-loading fallback heuristics on systems with a terrible selection of installed fonts. <BR>• macOS: Retina display-related bug fixes.]]></description> - <pubDate>Thu, 12 Apr 2018 13:00:37 -0700</pubDate> - <enclosure url="https://www.jwz.org/xscreensaver/xscreensaver-5.39.dmg" - sparkle:version="5.39" - sparkle:dsaSignature="MC0CFCNqDWYNT+EDQXEpi0SAxySC77A+AhUArqhfa7sp5J8cXq42u5uFmBOQiFA=" - length="32888133" + <title>Version 5.42</title> + <link>https://www.jwz.org/xscreensaver/xscreensaver-5.42.dmg</link> + <description><![CDATA[• macOS: Fixed Sparkle auto-updater.]]></description> + <pubDate>Fri, 28 Dec 2018 16:20:28 -0800</pubDate> + <enclosure url="https://www.jwz.org/xscreensaver/xscreensaver-5.42.dmg" + sparkle:version="5.42" + sparkle:dsaSignature="MC0CFQC1IPDQbZA8nlNOy66NB/EpedRH6QIUSezxMtsmla56Axi6QpMzIKYaFAI=" + sparkle:edSignature="TlJojJAVzOQvQ5rUkHPvTpKtePMGKErePVI8nRvTnZjgaLR5YvxAiZAykdYeA1fip81jwzMXnOA14DxfumscAQ==" + length="36576409" type="application/octet-stream" /> </item> <item> - <title>Version 5.38</title> - <link>https://www.jwz.org/xscreensaver/xscreensaver-5.38.dmg</link> - <description><![CDATA[• New hack, 'esper'. <BR>• macOS: Support for Retina displays. <BR>• X11: `webcollage' now works with ImageMagick instead of with pbmtools if `webcollage-helper' is not installed. <BR>• 'bsod' now accepts Dunning-Krugerrands. <BR>• Android: These hacks work now: 'anemone', 'anemotaxis', 'atlantis', 'bouboule', 'celtic', 'compass', 'crackberg', 'epicycle', 'fuzzyflakes', 'goop', 'kumppa' 'munch', 'pacman', 'polyominoes', 'slip'. <BR>• Android: Thick lines work better for: 'anemone', 'anemotaxis', 'celtic', 'compass', 'deluxe', 'epicycle', 'fuzzyflakes', 'pacman' <BR>• Android: Assorted performance improvements, especially for 'kumppa' and 'slip'. <BR>• Android TV: Daydreams work. <BR>• iOS: Tweaks for iPhone X. <BR>• Lots of xlockmore-derived hacks now have animated erase routines. <BR>• 'crystal' works properly on non-X11 systems. <BR>• 'm6502' now includes 'texture.asm'. <BR>• X11: Try harder to find sensible fonts for the password dialog.]]></description> - <pubDate>Wed, 20 Dec 2017 11:16:13 -0800</pubDate> - <enclosure url="https://www.jwz.org/xscreensaver/xscreensaver-5.38.dmg" - sparkle:version="5.38" - sparkle:dsaSignature="MCwCFB2O5ykEfT4xCkb/CraguQZPTFJHAhQZde4jxrb5+zc2Haazg10uYLqNRw==" - length="54125574" + <title>Version 5.41</title> + <link>https://www.jwz.org/xscreensaver/xscreensaver-5.41.dmg</link> + <description><![CDATA[• X11: Those new font-loading fallback heuristics work again. Oops. <BR>• iOS, Android: Plugged many memory leaks at exit. <BR>• New hack, `handsy'. <BR>• Fixed `noof' from displaying minimalistically. <BR>• Rewrote `unknownpleasures' to be faster, and a true waterfall graph. <BR>• BSOD Solaris improved. DVD added. <BR>• Linux: If the xscreensaver daemon is setuid, then we can implore the kernel's out-of-memory killer to pretty please not unlock the screen. <BR>• macOS: Upgraded Sparkle (the "Check for Updates" library). <BR>• macOS: Screen saver settings work again on 10.14.]]></description> + <pubDate>Wed, 26 Dec 2018 23:00:51 -0800</pubDate> + <enclosure url="https://www.jwz.org/xscreensaver/xscreensaver-5.41.dmg" + sparkle:version="5.41" + sparkle:dsaSignature="MC0CFEH7e4ONZ1wfijWGBMEHwLESwKS3AhUAuhLIv/AsPsE60Jcmgm0eJDU0BRA=" + sparkle:edSignature="2hXB1NVm+HZsj3aMCgOmdwX1zHT+dJ95v5aI2Cyn6vEReOUs+NSxqpoWEWQgH/AIMYhr9I3b4c5e/MceOdK7Bg==" + length="35542175" type="application/octet-stream" /> </item> <item> - <title>Version 5.37</title> - <link>https://www.jwz.org/xscreensaver/xscreensaver-5.37.dmg</link> - <description><![CDATA[• New hack, `vigilance'. <BR>• Added Mac Software Update and VMware to `bsod'. <BR>• macOS: Grabbing the desktop works again. <BR>• macOS: Pinch to zoom. <BR>• Android: Both Daydreams and Live Wallpapers are implemented. <BR>• Updated `webcollage' for recent changes. <BR>• Various bug fixes.]]></description> - <pubDate>Wed, 05 Jul 2017 10:55:51 -0700</pubDate> - <enclosure url="https://www.jwz.org/xscreensaver/xscreensaver-5.37.dmg" - sparkle:version="5.37" - sparkle:dsaSignature="MCwCFFsEWCDZbAY8Owz7k4lcs+uGM+LUAhQlLSsjg0Eqkd2TX2UfxiFdPrciTA==" - length="52481386" + <title>Version 5.40</title> + <link>https://www.jwz.org/xscreensaver/xscreensaver-5.40.dmg</link> + <description><![CDATA[• New hacks, `filmleader', `vfeedback'. <BR>• New hack, `glitchpeg' (X11 and macOS only). <BR>• GLPlanet blends between day and night maps at the dusk terminator. <BR>• DymaxionMap can display arbitrary map images, and animate sunlight across the flattened globe. <BR>• Tessellimage can draw either Delaunay or Voronoi tilings. <BR>• XAnalogTV includes test cards. <BR>• Android: These hacks work now: `blitspin', `bumps', `cityflow', `endgame', `esper', `flipscreen3d', `gleidescope', `glslideshow', `jigglypuff', `queens', `tessellimage', `xanalogtv', `xmatrix', `zoom'.]]></description> + <pubDate>Sun, 12 Aug 2018 16:39:18 -0700</pubDate> + <enclosure url="https://www.jwz.org/xscreensaver/xscreensaver-5.40.dmg" + sparkle:version="5.40" + sparkle:dsaSignature="MCwCFBVb+Vyo39OOfiuqm9K3zmrahnGIAhRK6pirSDvI1gT0ddtv+okGTW4NLg==" + sparkle:edSignature="R3FTLn+BURQDTK8BORtPeUrLrb2BLyhP2TeEU11Y9oXl2epIJ2owMS2BvsQke+gV/nEyzq34sUnBHnCsKvfgDg==" + length="34297646" type="application/octet-stream" /> </item> <item> @@ -48,6 +51,7 @@ <enclosure url="https://www.jwz.org/xscreensaver/xscreensaver-5.34.dmg" sparkle:version="5.34" sparkle:dsaSignature="MCwCFAoZpMknlOVF0zFXlzFruzFvRXufAhQVKY0qlzelKcArrlC6k7EbHLTcyg==" + sparkle:edSignature="yUaWHZ0W91rhh0jsFUgtdcH17SPq66A4SdLMRqf/AU7cnVwNNBvlEJOKAJGJIMTVPpBMtYgk93YJL3/5R4+1BA==" length="58850776" type="application/octet-stream" /> </item> @@ -59,6 +63,7 @@ <enclosure url="https://www.jwz.org/xscreensaver/xscreensaver-5.14.dmg" sparkle:version="5.14" sparkle:dsaSignature="MCwCFHrKuttf1gN27mVG3YL8+ueMJmNaAhR6aSkKQefuNFNp6MinLq2o1nocaA==" + sparkle:edSignature="yAg5vrtkqVdOXnloYeZ/XlwNK6VA3yWdKIOvMbpFEEGUfmsRm5/besIJBMjQkZg5BxXG8DTVh9NMHWrzZ9KvCg==" length="54485615" type="application/octet-stream" /> </item> diff --git a/OSX/xscreensaver.xcodeproj/project.pbxproj b/OSX/xscreensaver.xcodeproj/project.pbxproj index f5e98b8..adb9fd1 100644 --- a/OSX/xscreensaver.xcodeproj/project.pbxproj +++ b/OSX/xscreensaver.xcodeproj/project.pbxproj @@ -239,6 +239,7 @@ AF777A1D09B660B300EA3033 /* PBXTargetDependency */, AF777A1B09B660B300EA3033 /* PBXTargetDependency */, AF777A1909B660B300EA3033 /* PBXTargetDependency */, + AF62D6392180087500C57C42 /* PBXTargetDependency */, AF1B0FC51D7AB5740011DBE4 /* PBXTargetDependency */, AF4F10F0143450C300E34F3F /* PBXTargetDependency */, AFC0E8C91CDC6125008CAFAC /* PBXTargetDependency */, @@ -400,7 +401,7 @@ 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, ); }; }; + AF1ADA1A1850186B00932759 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = AF1ADA171850180E00932759 /* Sparkle.framework */; }; 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 */; }; @@ -1849,6 +1850,20 @@ 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 */; }; + AF62D61F2180070600C57C42 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AF62D6212180070600C57C42 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AF62D6222180070600C57C42 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AF62D6232180070600C57C42 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AF62D6242180070600C57C42 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AF62D6252180070600C57C42 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AF62D6262180070600C57C42 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AF62D6272180070600C57C42 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AF62D6312180082100C57C42 /* handsy_model.c in Sources */ = {isa = PBXBuildFile; fileRef = AF62D62F2180082100C57C42 /* handsy_model.c */; }; + AF62D6322180082100C57C42 /* handsy_model.c in Sources */ = {isa = PBXBuildFile; fileRef = AF62D62F2180082100C57C42 /* handsy_model.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AF62D6332180082100C57C42 /* handsy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF62D6302180082100C57C42 /* handsy.c */; }; + AF62D6342180082100C57C42 /* handsy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF62D6302180082100C57C42 /* handsy.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AF62D6362180083E00C57C42 /* handsy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF62D6352180083D00C57C42 /* handsy.xml */; }; + AF62D6372180083E00C57C42 /* handsy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF62D6352180083D00C57C42 /* handsy.xml */; }; AF633C081EE0BA6F00AB33BD /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF633C0A1EE0BA6F00AB33BD /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF633C0B1EE0BA6F00AB33BD /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; @@ -1986,6 +2001,7 @@ 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 */; }; + AF6C07C121D6ECCE00083862 /* Sparkle.framework in Resources */ = {isa = PBXBuildFile; fileRef = AF1ADA171850180E00932759 /* Sparkle.framework */; }; 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 */; }; @@ -4606,6 +4622,20 @@ remoteGlobalIDString = AF5ECEA92116B1A400069433; remoteInfo = VFeedback; }; + AF62D61A2180070600C57C42 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AF62D6382180087500C57C42 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF62D6182180070600C57C42; + remoteInfo = Handsy; + }; AF633C031EE0BA6F00AB33BD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -7781,6 +7811,10 @@ AF6048F8157C07C600CA21E4 /* jwzgles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jwzgles.c; path = ../jwxyz/jwzgles.c; sourceTree = "<group>"; }; AF6048F9157C07C600CA21E4 /* jwzgles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzgles.h; path = ../jwxyz/jwzgles.h; sourceTree = "<group>"; }; AF6048FA157C07C600CA21E4 /* jwzglesI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzglesI.h; path = ../jwxyz/jwzglesI.h; sourceTree = "<group>"; }; + AF62D62D2180070600C57C42 /* Handsy.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Handsy.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AF62D62F2180082100C57C42 /* handsy_model.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = handsy_model.c; path = hacks/glx/handsy_model.c; sourceTree = "<group>"; }; + AF62D6302180082100C57C42 /* handsy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = handsy.c; path = hacks/glx/handsy.c; sourceTree = "<group>"; }; + AF62D6352180083D00C57C42 /* handsy.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = handsy.xml; sourceTree = "<group>"; }; AF633C161EE0BA6F00AB33BD /* Vigilance.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Vigilance.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF633C181EE0BC4900AB33BD /* vigilance.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = vigilance.xml; sourceTree = "<group>"; }; AF633C191EE0BC4A00AB33BD /* vigilance.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vigilance.c; path = hacks/glx/vigilance.c; sourceTree = "<group>"; }; @@ -9638,6 +9672,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF62D6202180070600C57C42 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AF62D6212180070600C57C42 /* libjwxyz.a in Frameworks */, + AF62D6222180070600C57C42 /* ScreenSaver.framework in Frameworks */, + AF62D6232180070600C57C42 /* QuartzCore.framework in Frameworks */, + AF62D6242180070600C57C42 /* Cocoa.framework in Frameworks */, + AF62D6252180070600C57C42 /* Carbon.framework in Frameworks */, + AF62D6262180070600C57C42 /* OpenGL.framework in Frameworks */, + AF62D6272180070600C57C42 /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF633C091EE0BA6F00AB33BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -12529,6 +12577,7 @@ AFA6AB0520999950006D2685 /* GlitchPEG.saver */, AFD77E7020C23F8600A3638D /* FilmLeader.saver */, AF5ECEC02116B1A400069433 /* VFeedback.saver */, + AF62D62D2180070600C57C42 /* Handsy.saver */, ); name = Products; path = ..; @@ -12911,6 +12960,8 @@ AF7777E709B64CF700EA3033 /* glslideshow.c */, AFA55C8C099349EE00F3E977 /* glsnake.c */, AFD56E080996A07A00BA26F7 /* gltext.c */, + AF62D62F2180082100C57C42 /* handsy_model.c */, + AF62D6302180082100C57C42 /* handsy.c */, AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */, AF78D18A142DD96E002AAF77 /* hilbert.c */, AFC0E8C21CDC60A9008CAFAC /* hydrostat.c */, @@ -13139,6 +13190,7 @@ AFC258C10988A468000655EE /* greynetic.xml */, AFC258C20988A468000655EE /* halftone.xml */, AFC258C30988A468000655EE /* halo.xml */, + AF62D6352180083D00C57C42 /* handsy.xml */, AFC258C40988A468000655EE /* helix.xml */, AFB591BC178B81E600EA4005 /* hexadrop.xml */, AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */, @@ -13567,6 +13619,7 @@ AF1AD9DF18500F9F00932759 /* Frameworks */, AF1AD9E018500F9F00932759 /* Resources */, AF1ADA191850185F00932759 /* CopyFiles */, + AF168EA821D240EB00ED6E08 /* Codesign Sparkle */, AF1ADA1E18501DC200932759 /* Run Update Info Plist */, ); buildRules = ( @@ -15017,6 +15070,26 @@ productReference = AF5ECEC02116B1A400069433 /* VFeedback.saver */; productType = "com.apple.product-type.bundle"; }; + AF62D6182180070600C57C42 /* Handsy */ = { + isa = PBXNativeTarget; + buildConfigurationList = AF62D62A2180070600C57C42 /* Build configuration list for PBXNativeTarget "Handsy" */; + buildPhases = ( + AF62D61B2180070600C57C42 /* Resources */, + AF62D61D2180070600C57C42 /* Sources */, + AF62D6202180070600C57C42 /* Frameworks */, + AF62D6282180070600C57C42 /* Rez */, + AF62D6292180070600C57C42 /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AF62D6192180070600C57C42 /* PBXTargetDependency */, + ); + name = Handsy; + productName = DangerBall; + productReference = AF62D62D2180070600C57C42 /* Handsy.saver */; + productType = "com.apple.product-type.bundle"; + }; AF633C011EE0BA6F00AB33BD /* Vigilance */ = { isa = PBXNativeTarget; buildConfigurationList = AF633C131EE0BA6F00AB33BD /* Build configuration list for PBXNativeTarget "Vigilance" */; @@ -18731,7 +18804,7 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0940; + LastUpgradeCheck = 1010; TargetAttributes = { AF08398F09930B6B00277BE9 = { DevelopmentTeam = 4627ATJELP; @@ -18985,6 +19058,9 @@ AF5ECEA92116B1A400069433 = { DevelopmentTeam = 4627ATJELP; }; + AF62D6182180070600C57C42 = { + DevelopmentTeam = 4627ATJELP; + }; AF633C011EE0BA6F00AB33BD = { DevelopmentTeam = 4627ATJELP; }; @@ -19756,6 +19832,7 @@ AF7777D009B64C6B00EA3033 /* GLSlideshow */, AFA55C77099349A600F3E977 /* GLSnake */, AFD56DF10996A03800BA26F7 /* GLText */, + AF62D6182180070600C57C42 /* Handsy */, AF1B0FA71D7AB4740011DBE4 /* Hexstrut */, AF78D175142DD8F3002AAF77 /* Hilbert */, AFC0E8AB1CDC601A008CAFAC /* Hydrostat */, @@ -19896,6 +19973,7 @@ AF1ADA1B18501B3D00932759 /* SaverRunner.icns in Resources */, AF3633FC18530DD90086A439 /* sparkle_dsa_pub.pem in Resources */, AF1ADA161850157400932759 /* Updater.xib in Resources */, + AF6C07C121D6ECCE00083862 /* Sparkle.framework in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -20477,6 +20555,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF62D61B2180070600C57C42 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF62D6362180083E00C57C42 /* handsy.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF633C041EE0BA6F00AB33BD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -20900,6 +20986,7 @@ AF918B0F158FC53D002B5D1E /* grav.xml in Resources */, AF918B11158FC53D002B5D1E /* halftone.xml in Resources */, AF918B12158FC53D002B5D1E /* halo.xml in Resources */, + AF62D6372180083E00C57C42 /* handsy.xml in Resources */, AF918B13158FC53D002B5D1E /* helix.xml in Resources */, AFB591BF178B81E600EA4005 /* hexadrop.xml in Resources */, AF1B0FC01D7AB5330011DBE4 /* hexstrut.xml in Resources */, @@ -22771,6 +22858,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF62D6282180070600C57C42 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF633C111EE0BA6F00AB33BD /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; @@ -24036,6 +24130,25 @@ shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; + AF168EA821D240EB00ED6E08 /* Codesign Sparkle */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Codesign Sparkle"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "codesign -v --force --deep -o runtime --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sparkle.framework/Versions/A/Resources/Autoupdate.app\ncodesign -v --force -o runtime --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sparkle.framework/Versions/A\n"; + showEnvVarsInLog = 0; + }; AF1A176F0D6D6EE3008AF328 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -24366,6 +24479,21 @@ shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; + AF62D6292180070600C57C42 /* Run Update Info Plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Update Info Plist"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + showEnvVarsInLog = 0; + }; AF633C121EE0BA6F00AB33BD /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -28816,6 +28944,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF62D61D2180070600C57C42 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF62D6312180082100C57C42 /* handsy_model.c in Sources */, + AF62D61F2180070600C57C42 /* XScreenSaverSubclass.m in Sources */, + AF62D6332180082100C57C42 /* handsy.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF633C061EE0BA6F00AB33BD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -29364,6 +29502,8 @@ AF918A67158FC3E5002B5D1E /* glslideshow.c in Sources */, AF918A68158FC3E5002B5D1E /* glsnake.c in Sources */, AF918A69158FC3E5002B5D1E /* gltext.c in Sources */, + AF62D6322180082100C57C42 /* handsy_model.c in Sources */, + AF62D6342180082100C57C42 /* handsy.c in Sources */, AF1B0FC31D7AB5500011DBE4 /* hexstrut.c in Sources */, AF918A6A158FC3E5002B5D1E /* hilbert.c in Sources */, AFC0E8C41CDC60B0008CAFAC /* hydrostat.c in Sources */, @@ -31488,6 +31628,16 @@ target = AF5ECEA92116B1A400069433 /* VFeedback */; targetProxy = AF5ECEC82116B31F00069433 /* PBXContainerItemProxy */; }; + AF62D6192180070600C57C42 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AF62D61A2180070600C57C42 /* PBXContainerItemProxy */; + }; + AF62D6392180087500C57C42 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF62D6182180070600C57C42 /* Handsy */; + targetProxy = AF62D6382180087500C57C42 /* PBXContainerItemProxy */; + }; AF633C021EE0BA6F00AB33BD /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; @@ -33672,6 +33822,7 @@ "$(SRCROOT)", ); INFOPLIST_FILE = "$(SRCROOT)/Updater.plist"; + LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -33688,6 +33839,7 @@ "$(SRCROOT)", ); INFOPLIST_FILE = "$(SRCROOT)/Updater.plist"; + LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -34815,6 +34967,28 @@ }; name = Release; }; + AF62D62B2180070600C57C42 /* 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; + }; + AF62D62C2180070600C57C42 /* 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; + }; AF633C141EE0BA6F00AB33BD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -38035,6 +38209,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD)"; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}"; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; @@ -38057,8 +38232,10 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application"; + CODE_SIGN_INJECT_BASE_ENTITLEMENTS = YES; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 4627ATJELP; + ENABLE_HARDENED_RUNTIME = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -38120,6 +38297,7 @@ ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; "OTHER_CFLAGS[sdk=macosx*]" = "$(OBJC_GC_CFLAGS)"; + OTHER_CODE_SIGN_FLAGS = "--timestamp"; "OTHER_LDFLAGS[sdk=macosx*]" = "-headerpad_max_install_names"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; @@ -38137,6 +38315,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD)"; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}"; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; @@ -38159,8 +38338,10 @@ "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)"; + CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 4627ATJELP; + ENABLE_HARDENED_RUNTIME = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -38221,6 +38402,7 @@ "LLVM_LTO[sdk=macosx*]" = NO; OTHER_CFLAGS = ""; "OTHER_CFLAGS[sdk=macosx*]" = "$(OBJC_GC_CFLAGS)"; + OTHER_CODE_SIGN_FLAGS = "--timestamp"; "OTHER_LDFLAGS[sdk=macosx*]" = "-headerpad_max_install_names"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; @@ -39006,6 +39188,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AF62D62A2180070600C57C42 /* Build configuration list for PBXNativeTarget "Handsy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AF62D62B2180070600C57C42 /* Debug */, + AF62D62C2180070600C57C42 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AF633C131EE0BA6F00AB33BD /* Build configuration list for PBXNativeTarget "Vigilance" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -46,19 +46,32 @@ XScreenSaver has an extensive manual -- please read it! =============================================================================== -5.40 * New hacks, 'filmleader', 'vfeedback'. - * New hack, 'glitchpeg' (X11 and macOS only). +5.42 * macOS: Fixed Sparkle auto-updater. + +5.41 * X11: Those new font-loading fallback heuristics work again. Oops. + * iOS, Android: Plugged many memory leaks at exit. + * New hack, `handsy'. + * Fixed `noof' from displaying minimalistically. + * Rewrote `unknownpleasures' to be faster, and a true waterfall graph. + * BSOD Solaris improved. DVD added. + * Linux: If the xscreensaver daemon is setuid, then we can implore the + kernel's out-of-memory killer to pretty please not unlock the screen. + * macOS: Upgraded Sparkle (the "Check for Updates" library). + * macOS: Screen saver settings work again on 10.14. + +5.40 * New hacks, `filmleader', `vfeedback'. + * New hack, `glitchpeg' (X11 and macOS only). * GLPlanet blends between day and night maps at the dusk terminator. * DymaxionMap can display arbitrary map images, and animate sunlight across the flattened globe. * Tessellimage can draw either Delaunay or Voronoi tilings. * XAnalogTV includes test cards. - * Android: These hacks work now: 'blitspin', 'bumps', 'cityflow', - 'endgame', 'esper', 'flipscreen3d', 'gleidescope', 'glslideshow', - 'jigglypuff', 'queens', 'tessellimage', 'xanalogtv', 'xmatrix', - 'zoom'. + * Android: These hacks work now: `blitspin', `bumps', `cityflow', + `endgame', `esper', `flipscreen3d', `gleidescope', `glslideshow', + `jigglypuff', `queens', `tessellimage', `xanalogtv', `xmatrix', + `zoom'. -5.39 * New hacks, 'razzledazzle', 'peepers', 'crumbler' and `maze3d'. +5.39 * New hacks, `razzledazzle', `peepers', `crumbler' and `maze3d'. * More heuristics for using RSS feeds as image sources. * Android: Image loading works. * Built-in image assets are now PNG instead of XPM or XBM. @@ -66,24 +79,24 @@ XScreenSaver has an extensive manual -- please read it! terrible selection of installed fonts. * macOS: Retina display-related bug fixes. -5.38 * New hack, 'esper'. +5.38 * New hack, `esper'. * macOS: Support for Retina displays. * X11: `webcollage' now works with ImageMagick instead of with pbmtools if `webcollage-helper' is not installed. - * 'bsod' now accepts Dunning-Krugerrands. - * Android: These hacks work now: 'anemone', 'anemotaxis', 'atlantis', - 'bouboule', 'celtic', 'compass', 'crackberg', 'epicycle', - 'fuzzyflakes', 'goop', 'kumppa' 'munch', 'pacman', 'polyominoes', - 'slip'. - * Android: Thick lines work better for: 'anemone', 'anemotaxis', - 'celtic', 'compass', 'deluxe', 'epicycle', 'fuzzyflakes', 'pacman' - * Android: Assorted performance improvements, especially for 'kumppa' - and 'slip'. + * `bsod' now accepts Dunning-Krugerrands. + * Android: These hacks work now: `anemone', `anemotaxis', `atlantis', + `bouboule', `celtic', `compass', `crackberg', `epicycle', + `fuzzyflakes', `goop', `kumppa' `munch', `pacman', `polyominoes', + `slip'. + * Android: Thick lines work better for: `anemone', `anemotaxis', + `celtic', `compass', `deluxe', `epicycle', `fuzzyflakes', `pacman'. + * Android: Assorted performance improvements, especially for `kumppa' + and `slip'. * Android TV: Daydreams work. * iOS: Tweaks for iPhone X. * Lots of xlockmore-derived hacks now have animated erase routines. - * 'crystal' works properly on non-X11 systems. - * 'm6502' now includes 'texture.asm'. + * `crystal' works properly on non-X11 systems. + * `m6502' now includes `texture.asm'. * X11: Try harder to find sensible fonts for the password dialog. 5.37 * New hack, `vigilance'. diff --git a/README.hacking b/README.hacking index 6fc2fe5..451aec1 100644 --- a/README.hacking +++ b/README.hacking @@ -178,6 +178,12 @@ Programming Tips - On modern machines, OpenGL will always run faster than Xlib. It's also more portable. Consider writing in OpenGL whenever possible. + - Free any memory you allocate. While screen savers under X11 have + their memory freed automatically when their process is killed by + the XScreenSaver daemon, under iOS and Android screen savers exist + in long-lived processes where no such cleanup takes place. + Consider Valgrind or gcc -fsanitize=leak to find memory leaks. + ========================================================================== macOS, iOS and Android @@ -39,7 +39,10 @@ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun # # Modified to require ngettext # Matthias Clasen <mclasen@redhat.com> 08/06/2004 -# + +# Increment this whenever this file is changed. +#serial 1 + # 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 diff --git a/android/Makefile b/android/Makefile index f0d5da0..ed65edf 100644 --- a/android/Makefile +++ b/android/Makefile @@ -128,6 +128,7 @@ export ANDROID_HACKS= \ grav \ greynetic \ halo \ + handsy \ helix \ hexadrop \ hexstrut \ diff --git a/android/build.gradle b/android/build.gradle index 648cc32..978b94c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,8 +1,8 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { - jcenter() google() + jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.2' @@ -12,9 +12,9 @@ buildscript { allprojects { repositories { + google() maven { url 'https://maven.google.com' } jcenter() - google() } } diff --git a/android/xscreensaver/.idea/caches/build_file_checksums.ser b/android/xscreensaver/.idea/caches/build_file_checksums.ser Binary files differindex bc8f00c..c2ab27f 100644 --- a/android/xscreensaver/.idea/caches/build_file_checksums.ser +++ b/android/xscreensaver/.idea/caches/build_file_checksums.ser diff --git a/android/xscreensaver/.idea/misc.xml b/android/xscreensaver/.idea/misc.xml index c0f68ed..99202cc 100644 --- a/android/xscreensaver/.idea/misc.xml +++ b/android/xscreensaver/.idea/misc.xml @@ -25,7 +25,7 @@ </value> </option> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/build/classes" /> </component> <component name="ProjectType"> diff --git a/android/xscreensaver/.idea/workspace.xml b/android/xscreensaver/.idea/workspace.xml index 1dedd64..9f2ef73 100644 --- a/android/xscreensaver/.idea/workspace.xml +++ b/android/xscreensaver/.idea/workspace.xml @@ -1,5 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> + <component name="CMakeSettings"> + <configurations> + <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" /> + </configurations> + </component> <component name="ChangeListManager"> <list default="true" id="41008724-035d-4e24-92b6-6dfb9231c83c" name="Default" comment="" /> <ignored path="xscreensaver.iws" /> @@ -35,8 +40,7 @@ <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="90"> - <caret line="6" column="0" lean-forward="false" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" /> - <folding /> + <caret line="6" selection-start-line="6" selection-end-line="6" /> </state> </provider> </entry> @@ -1659,7 +1663,7 @@ <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.tools.build/gradle-api/3.1.2/427e25639a55911cadcf70657c9b2ded2ad6af2b/gradle-api-3.1.2.jar" /> <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.databinding/compilerCommon/3.1.2/be65c11ded4242932046f23ecfa5c7ccb0e98f46/compilerCommon-3.1.2.jar" /> <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jre8/1.2.0/505f55b9619bbc5f5e26c77427dd24a6a441eef1/kotlin-stdlib-jre8-1.2.0.jar" /> - <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.tools.build/transform-api/2.0.0-deprecated-use-gradle-api/85bee1acea9e27152b920746c68133b30b11431/transform-api-2.0.0-deprecated-use-gradle-api.jar" /> + <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.tools.build/transform-api/2.0.0-deprecated-use-gradle-api/47f6c56527c42425742fa9b56ffd3fd80763fe03/transform-api-2.0.0-deprecated-use-gradle-api.jar" /> <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/5.1/5ef31c4fe953b1fd00b8a88fa1d6820e8785bb45/asm-5.1.jar" /> <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/5.1/6d1bf8989fc7901f868bee3863c44f21aa63d110/asm-analysis-5.1.jar" /> <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/5.1/25d8a575034dd9cfcb375a39b5334f0ba9c8474e/asm-commons-5.1.jar" /> @@ -1742,7 +1746,7 @@ <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.tools.build/gradle-api/3.1.2/427e25639a55911cadcf70657c9b2ded2ad6af2b/gradle-api-3.1.2.jar" /> <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.databinding/compilerCommon/3.1.2/be65c11ded4242932046f23ecfa5c7ccb0e98f46/compilerCommon-3.1.2.jar" /> <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jre8/1.2.0/505f55b9619bbc5f5e26c77427dd24a6a441eef1/kotlin-stdlib-jre8-1.2.0.jar" /> - <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.tools.build/transform-api/2.0.0-deprecated-use-gradle-api/85bee1acea9e27152b920746c68133b30b11431/transform-api-2.0.0-deprecated-use-gradle-api.jar" /> + <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.tools.build/transform-api/2.0.0-deprecated-use-gradle-api/47f6c56527c42425742fa9b56ffd3fd80763fe03/transform-api-2.0.0-deprecated-use-gradle-api.jar" /> <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/5.1/5ef31c4fe953b1fd00b8a88fa1d6820e8785bb45/asm-5.1.jar" /> <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/5.1/6d1bf8989fc7901f868bee3863c44f21aa63d110/asm-analysis-5.1.jar" /> <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/5.1/25d8a575034dd9cfcb375a39b5334f0ba9c8474e/asm-commons-5.1.jar" /> @@ -1826,44 +1830,18 @@ </entry> </map> </option> - <option name="externalProjectsViewState"> - <projects_view /> - </option> </component> <component name="ProjectFrameBounds"> - <option name="x" value="90" /> - <option name="y" value="24" /> + <option name="x" value="105" /> + <option name="y" value="23" /> <option name="width" value="1339" /> <option name="height" value="859" /> </component> <component name="ProjectView"> <navigator currentView="Scope" currentSubView="Project Files" proportions="" version="1"> - <flattenPackages /> - <showMembers /> - <showModules /> - <showLibraryContents /> - <hideEmptyPackages /> - <abbreviatePackageNames /> - <autoscrollToSource /> - <autoscrollFromSource /> - <sortByType /> - <manualOrder /> <foldersAlwaysOnTop value="true" /> </navigator> <panes> - <pane id="AndroidView"> - <subPane> - <expand> - <path> - <item name="xscreensaver" type="1abcf292:AndroidViewProjectNode" /> - <item name="Gradle Scripts" type="ae0cef3a:AndroidBuildScriptsGroupNode" /> - </path> - </expand> - <select /> - </subPane> - </pane> - <pane id="PackagesPane" /> - <pane id="Scratches" /> <pane id="ProjectPane" /> <pane id="Scope"> <subPane subId="Project Files"> @@ -1887,6 +1865,18 @@ <select /> </subPane> </pane> + <pane id="AndroidView"> + <subPane> + <expand> + <path> + <item name="xscreensaver" type="1abcf292:AndroidViewProjectNode" /> + <item name="Gradle Scripts" type="ae0cef3a:AndroidBuildScriptsGroupNode" /> + </path> + </expand> + <select /> + </subPane> + </pane> + <pane id="PackagesPane" /> </panes> </component> <component name="PropertiesComponent"> @@ -1901,8 +1891,9 @@ <property name="SearchEverywhereHistoryKey" value="sdk manager	ACTION	WelcomeScreen.RunAndroidSdkManager" /> <property name="last_opened_file_path" value="$PROJECT_DIR$" /> <property name="show.do.not.ask.upgrade.gradle.plugin" value="2.1.0" /> - <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1533959035566" /> + <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1545885427557" /> <property name="device.picker.selection" value="Nexus_5_8.1" /> + <property name="sync.plugin.last.upgrade.timestamp" value="1538463643381" /> </component> <component name="RunDashboard"> <option name="ruleStates"> @@ -1918,8 +1909,6 @@ </component> <component name="RunManager"> <configuration default="true" type="AndroidJUnit" factoryName="Android JUnit"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <module name="" /> <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> <option name="ALTERNATIVE_JRE_PATH" /> <option name="PACKAGE_NAME" /> @@ -1929,22 +1918,22 @@ <option name="VM_PARAMETERS" /> <option name="PARAMETERS" /> <option name="WORKING_DIRECTORY" value="file://$MODULE_DIR$" /> - <option name="ENV_VARIABLES" /> <option name="PASS_PARENT_ENVS" value="true" /> <option name="TEST_SEARCH_SCOPE"> <value defaultName="singleModule" /> </option> - <envs /> <patterns /> <method> + <option name="Make" enabled="false" /> <option name="Android.Gradle.BeforeRunTask" enabled="true" /> </method> </configuration> <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android App"> - <module name="" /> <option name="DEPLOY" value="true" /> + <option name="DEPLOY_APK_FROM_BUNDLE" value="false" /> <option name="ARTIFACT_NAME" value="" /> <option name="PM_INSTALL_OPTIONS" value="" /> + <option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" /> <option name="ACTIVITY_EXTRA_FLAGS" value="" /> <option name="MODE" value="default_activity" /> <option name="CLEAR_LOGCAT" value="false" /> @@ -1981,19 +1970,22 @@ </Native> <Profilers> <option name="ADVANCED_PROFILING_ENABLED" value="false" /> + <option name="STARTUP_CPU_PROFILING_ENABLED" value="false" /> + <option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sampled (Java)" /> </Profilers> <option name="DEEP_LINK" value="" /> <option name="ACTIVITY_CLASS" value="" /> <method> <option name="Android.Gradle.BeforeRunTask" enabled="true" /> - <option name="com.android.instantApps.provision.BeforeRunTask" enabled="true" clearCache="false" clearProvisionedDevices="false" /> </method> </configuration> <configuration name="xscreensaver" type="AndroidRunConfigurationType" factoryName="Android App"> <module name="xscreensaver" /> <option name="DEPLOY" value="true" /> + <option name="DEPLOY_APK_FROM_BUNDLE" value="false" /> <option name="ARTIFACT_NAME" value="" /> <option name="PM_INSTALL_OPTIONS" value="" /> + <option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" /> <option name="ACTIVITY_EXTRA_FLAGS" value="" /> <option name="MODE" value="default_activity" /> <option name="CLEAR_LOGCAT" value="false" /> @@ -2030,37 +2022,16 @@ </Native> <Profilers> <option name="ADVANCED_PROFILING_ENABLED" value="false" /> + <option name="STARTUP_CPU_PROFILING_ENABLED" value="false" /> + <option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sampled (Java)" /> </Profilers> <option name="DEEP_LINK" value="" /> <option name="ACTIVITY_CLASS" value="" /> - <method> - <option name="com.android.instantApps.provision.BeforeRunTask" enabled="true" clearCache="false" clearProvisionedDevices="false" /> - </method> </configuration> <configuration default="true" type="Application" factoryName="Application"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <option name="MAIN_CLASS_NAME" /> - <option name="VM_PARAMETERS" /> - <option name="PROGRAM_PARAMETERS" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> - <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> - <option name="ALTERNATIVE_JRE_PATH" /> - <option name="ENABLE_SWING_INSPECTOR" value="false" /> - <option name="ENV_VARIABLES" /> - <option name="PASS_PARENT_ENVS" value="true" /> - <module name="" /> - <envs /> - </configuration> - <configuration default="true" type="Remote" factoryName="Remote"> - <option name="USE_SOCKET_TRANSPORT" value="true" /> - <option name="SERVER_MODE" value="false" /> - <option name="SHMEM_ADDRESS" value="javadebug" /> - <option name="HOST" value="localhost" /> - <option name="PORT" value="5005" /> </configuration> <configuration default="true" type="TestNG" factoryName="TestNG"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <module name="" /> <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> <option name="ALTERNATIVE_JRE_PATH" /> <option name="SUITE_NAME" /> @@ -2073,15 +2044,12 @@ <option name="PARAMETERS" /> <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" /> <option name="OUTPUT_DIRECTORY" /> - <option name="ANNOTATION_TYPE" /> - <option name="ENV_VARIABLES" /> <option name="PASS_PARENT_ENVS" value="true" /> <option name="TEST_SEARCH_SCOPE"> <value defaultName="singleModule" /> </option> <option name="USE_DEFAULT_REPORTERS" value="false" /> <option name="PROPERTIES_FILE" /> - <envs /> <properties /> <listeners /> </configuration> @@ -2098,9 +2066,6 @@ <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" /> </configuration> </component> - <component name="ShelveChangesManager" show_recycled="false"> - <option name="remove_strategy" value="false" /> - </component> <component name="SvnConfiguration"> <configuration /> </component> @@ -2115,43 +2080,44 @@ <servers /> </component> <component name="ToolWindowManager"> - <frame x="90" y="24" width="1339" height="859" extended-state="0" /> + <frame x="105" y="23" width="1339" height="859" extended-state="0" /> <layout> - <window_info id="Android Profiler" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> - <window_info id="Palette	" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Build Variants" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> - <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32928476" sideWeight="0.5312259" order="7" side_tool="true" content_ui="tabs" /> - <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Logcat" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Captures" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2544333" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> - <window_info id="Build" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32928476" sideWeight="0.47185814" order="8" side_tool="false" content_ui="tabs" /> - <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32928476" sideWeight="0.49421743" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Device File Explorer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> - <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> - <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> - <window_info id="Nl-Palette" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> - <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> - <window_info id="Android Monitor" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> - <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Android Model" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> - <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32839838" sideWeight="0.49730146" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> - <window_info id="Gradle Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" /> + <window_info anchor="bottom" id="Android Profiler" order="7" show_stripe_button="false" /> + <window_info anchor="bottom" id="TODO" order="6" /> + <window_info anchor="right" id="Palette	" order="3" /> + <window_info id="Image Layers" order="3" /> + <window_info id="Build Variants" order="3" side_tool="true" /> + <window_info anchor="right" id="Capture Analysis" order="3" /> + <window_info active="true" anchor="bottom" id="Event Log" order="7" sideWeight="0.5188897" side_tool="true" visible="true" weight="0.32882273" /> + <window_info anchor="bottom" id="Run" order="2" /> + <window_info anchor="bottom" id="Version Control" order="7" show_stripe_button="false" /> + <window_info anchor="bottom" id="Terminal" order="7" /> + <window_info anchor="bottom" id="Logcat" order="7" /> + <window_info id="Captures" order="2" weight="0.25" /> + <window_info id="Capture Tool" order="3" /> + <window_info id="Designer" order="3" /> + <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.2544333" /> + <window_info anchor="right" id="Assistant" visible="true" weight="0.3299923" /> + <window_info anchor="bottom" id="Build" order="8" sideWeight="0.47185814" weight="0.32928476" /> + <window_info anchor="bottom" id="Find" order="1" sideWeight="0.48111024" visible="true" weight="0.32882273" /> + <window_info anchor="right" id="Gradle" order="3" /> + <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> + <window_info anchor="right" id="Device File Explorer" order="3" side_tool="true" /> + <window_info anchor="right" id="Theme Preview" order="3" /> + <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> + <window_info id="Favorites" order="3" side_tool="true" /> + <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> + <window_info anchor="bottom" id="Messages" order="7" sideWeight="0.49730146" visible="true" weight="0.32839838" /> + <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> + <window_info anchor="right" id="Android Model" order="3" side_tool="true" /> + <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> + <window_info id="Nl-Palette" order="3" /> + <window_info anchor="right" id="Properties" order="3" /> + <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> + <window_info anchor="bottom" id="Message" order="0" /> + <window_info anchor="bottom" id="Gradle Console" order="7" side_tool="true" /> + <window_info anchor="bottom" id="Android Monitor" order="7" /> + <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> </layout> </component> <component name="Vcs.Log.UiProperties"> @@ -2170,56 +2136,68 @@ <path value="$PROJECT_DIR$/../.." /> </ignored-roots> </component> - <component name="XDebuggerManager"> - <breakpoint-manager /> - <watches-manager /> - </component> <component name="editorHistoryManager"> <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> + <state relative-caret-position="90"> + <caret line="6" selection-start-line="6" selection-end-line="6" /> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> + <state /> </provider> </entry> <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> + <state /> </provider> </entry> <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> + <state /> </provider> </entry> <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> + <state /> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> + <provider selected="true" editor-type-id="text-editor"> + <state /> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> + <provider selected="true" editor-type-id="text-editor"> + <state /> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> + <provider selected="true" editor-type-id="text-editor"> + <state /> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> + <provider selected="true" editor-type-id="text-editor"> + <state /> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> + <provider selected="true" editor-type-id="text-editor"> + <state /> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> + <provider selected="true" editor-type-id="text-editor"> + <state /> </provider> </entry> <entry file="file://$PROJECT_DIR$/../gradle/wrapper/gradle-wrapper.properties"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="90"> - <caret line="6" column="0" lean-forward="false" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" /> - <folding /> + <caret line="6" selection-start-line="6" selection-end-line="6" /> </state> </provider> </entry> diff --git a/android/xscreensaver/build.gradle b/android/xscreensaver/build.gradle index f0ff9a3..038e613 100644 --- a/android/xscreensaver/build.gradle +++ b/android/xscreensaver/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'android' dependencies { - compile fileTree(include: '*.jar', dir: 'libs') - compile "com.android.support:support-v4:27.1.1" + implementation fileTree(include: '*.jar', dir: 'libs') + implementation "com.android.support:support-v4:27.1.1" } android { @@ -96,6 +96,10 @@ android { defaultConfig { + // Previous applicationId was "org.jwz.xscreensaver" but I had + // to change it because I managed to lose the signing key... + // Note that the Java class tree is still "org.jwz.xscreensaver". + applicationId "org.jwz.android.xscreensaver" minSdkVersion 15 targetSdkVersion 27 } diff --git a/android/xscreensaver/jni/Android.mk b/android/xscreensaver/jni/Android.mk index 1e20a83..3396bd9 100644 --- a/android/xscreensaver/jni/Android.mk +++ b/android/xscreensaver/jni/Android.mk @@ -73,6 +73,7 @@ LOCAL_SRC_FILES += \ hacks/glx/gllist.c \ hacks/glx/glschool_alg.c \ hacks/glx/glschool_gl.c \ + hacks/glx/handsy_model.c \ hacks/glx/involute.c \ hacks/glx/lament_model.c \ hacks/glx/pipeobjs.c \ diff --git a/android/xscreensaver/jni/Application.mk b/android/xscreensaver/jni/Application.mk index d3f5436..311946d 100644 --- a/android/xscreensaver/jni/Application.mk +++ b/android/xscreensaver/jni/Application.mk @@ -1,7 +1,7 @@ # Get this value from android/Makefile APP_ABI := $(shell echo $$APP_ABI) -APP_STL := stlport_static -APP_PLATFORM := android-14 +APP_STL := c++_static +APP_PLATFORM := android-16 # ^^ APP_PLATFORM is minimum API version supported # https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md#target-api-set-higher-than-device-api diff --git a/android/xscreensaver/xscreensaver.iml b/android/xscreensaver/xscreensaver.iml index dd9566c..18e9fb0 100644 --- a/android/xscreensaver/xscreensaver.iml +++ b/android/xscreensaver/xscreensaver.iml @@ -79,7 +79,23 @@ <sourceFolder url="file://$MODULE_DIR$/tests/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/tests/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/tests/shaders" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/splits-support" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> + <excludeFolder url="file://$MODULE_DIR$/build/reports" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> <orderEntry type="jdk" jdkName="Android API 27 Platform" jdkType="Android SDK" /> diff --git a/config.h.in b/config.h.in index 6294bee..8c031ec 100644 --- a/config.h.in +++ b/config.h.in @@ -211,6 +211,10 @@ examined to determine when keyboard activity has occurred. */ #undef HAVE_PROC_INTERRUPTS +/* Define this if you have a Linux-like /proc/.../oom_score_adj file which can + be adjusted by root to exempt us from the out-of-memory . */ +#undef HAVE_PROC_OOM + /* Define this if your system supports POSIX threads. */ #undef HAVE_PTHREAD @@ -835,6 +835,7 @@ with_xf86vmode_ext with_xf86gamma_ext with_randr_ext with_proc_interrupts +with_proc_oom enable_locking enable_root_passwd with_pam @@ -1522,6 +1523,7 @@ Installation options: --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-proc-oom Include support for disabling the OOM-killer. --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. @@ -2626,6 +2628,8 @@ echo "command line was: $0 $@" + + # 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. @@ -10321,6 +10325,61 @@ fi ############################################################################### # +# Check for /proc/*/oom_score_adj. +# +############################################################################### + +have_proc_oom=no +with_proc_oom_req=unspecified + +# Check whether --with-proc-oom was given. +if test "${with_proc_oom+set}" = set; then : + withval=$with_proc_oom; with_proc_oom="$withval"; with_proc_oom_req="$withval" +else + with_proc_oom=yes +fi + + +if test "$with_proc_oom_req" = yes; then + + # Note that we may be building in an environment (e.g. Debian buildd chroot) + # without a proper /proc filesystem. + # + have_proc_oom=yes + $as_echo "#define HAVE_PROC_OOM 1" >>confdefs.h + + +elif test "$with_proc_oom_req" = unspecified; then + + have_proc_oom=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /proc/$$/oom_score_adj exists" >&5 +$as_echo_n "checking whether /proc/$$/oom_score_adj exists... " >&6; } +if ${ac_cv_have_proc_oom+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_have_proc_oom=no + if test -f /proc/$$/oom_score_adj; then + ac_cv_have_proc_oom=yes + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_proc_oom" >&5 +$as_echo "$ac_cv_have_proc_oom" >&6; } + have_proc_oom=$ac_cv_have_proc_oom + + if test "$have_proc_oom" = yes; then + $as_echo "#define HAVE_PROC_OOM 1" >>confdefs.h + + fi + +elif test "$with_proc_oom" != no; then + echo "error: must be yes or no: --with-proc-oom=$with_proc_oom" + exit 1 +fi + + +############################################################################### +# # The --enable-locking option # ############################################################################### @@ -13351,7 +13410,7 @@ if ${ac_cv_mesagl_version_string+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<EOF -#line 13358 "configure" +#line 13417 "configure" #include "confdefs.h" #include <GL/gl.h> #ifndef MESA_MAJOR_VERSION diff --git a/configure.in b/configure.in index d439bb5..f8ed25e 100644 --- a/configure.in +++ b/configure.in @@ -124,6 +124,11 @@ AH_TEMPLATE([HAVE_PROC_INTERRUPTS], can be examined to determine when keyboard activity has occurred.]) +AH_TEMPLATE([HAVE_PROC_OOM], + [Define this if you have a Linux-like /proc/.../oom_score_adj file + which can be adjusted by root to exempt us from the out-of-memory + .]) + AH_TEMPLATE([HAVE_MOTIF],[Define this if you have Motif.]) AH_TEMPLATE([HAVE_XMCOMBOBOX], @@ -1952,6 +1957,49 @@ fi ############################################################################### # +# Check for /proc/*/oom_score_adj. +# +############################################################################### + +have_proc_oom=no +with_proc_oom_req=unspecified +AC_ARG_WITH(proc-oom, +[ --with-proc-oom Include support for disabling the OOM-killer.], + [with_proc_oom="$withval"; with_proc_oom_req="$withval"], + [with_proc_oom=yes]) + +if test "$with_proc_oom_req" = yes; then + + # Note that we may be building in an environment (e.g. Debian buildd chroot) + # without a proper /proc filesystem. + # + have_proc_oom=yes + AC_DEFINE(HAVE_PROC_OOM) + +elif test "$with_proc_oom_req" = unspecified; then + + have_proc_oom=no + AC_CACHE_CHECK([whether /proc/$$/oom_score_adj exists], + ac_cv_have_proc_oom, + [ac_cv_have_proc_oom=no + if test -f /proc/$$/oom_score_adj; then + ac_cv_have_proc_oom=yes + fi + ]) + have_proc_oom=$ac_cv_have_proc_oom + + if test "$have_proc_oom" = yes; then + AC_DEFINE(HAVE_PROC_OOM) + fi + +elif test "$with_proc_oom" != no; then + echo "error: must be yes or no: --with-proc-oom=$with_proc_oom" + exit 1 +fi + + +############################################################################### +# # The --enable-locking option # ############################################################################### diff --git a/driver/Makefile.in b/driver/Makefile.in index 55effec..b13853e 100644 --- a/driver/Makefile.in +++ b/driver/Makefile.in @@ -115,10 +115,12 @@ 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-randr.c xdpyinfo.c test-mlstring.c test-screens.c \ + test-yarandom.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 + test-randr xdpyinfo test-mlstring test-screens \ + test-yarandom MOTIF_LIBS = @MOTIF_LIBS@ @PNG_LIBS@ $(XMU_LIBS) GTK_LIBS = @GTK_LIBS@ $(XMU_LIBS) @@ -865,6 +867,9 @@ test-screens.o: screens.c test-screens: test-screens.o $(CC) $(LDFLAGS) -o $@ $(TEST_SCREENS_OBJS) $(SAVER_LIBS) +test-yarandom: test-yarandom.o + $(CC) -DTEST $(LDFLAGS) -o $@ test-yarandom.o $(UTILS_BIN)/yarandom.o + xdpyinfo.o: xdpyinfo.c $(CC) -c $(INCLUDES) -DHAVE_GLX $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ @@ -980,6 +985,8 @@ test-uid.o: ../config.h test-vp.o: ../config.h test-xdpms.o: ../config.h test-xinerama.o: ../config.h +test-yarandom.o: ../config.h +test-yarandom.o: $(UTILS_SRC)/yarandom.h timers.o: ../config.h timers.o: $(srcdir)/prefs.h timers.o: $(srcdir)/types.h diff --git a/driver/XScreenSaver.ad.in b/driver/XScreenSaver.ad.in index f4e29d4..eec998f 100644 --- a/driver/XScreenSaver.ad.in +++ b/driver/XScreenSaver.ad.in @@ -4,8 +4,8 @@ ! a screen saver and locker for the X window system ! by Jamie Zawinski ! -! version 5.40 -! 12-Aug-2018 +! version 5.42 +! 28-Dec-2018 ! ! See "man xscreensaver" for more info. The latest version is always ! available at https://www.jwz.org/xscreensaver/ @@ -386,6 +386,7 @@ GetViewPortIsFullOfLies: False @GL_KLUDGE@ GL: crumbler -root \n\ filmleader -root \n\ glitchpeg -root \n\ +@GL_KLUDGE@ GL: handsy -root \n\ @GL_KLUDGE@ GL: maze3d -root \n\ @GL_KLUDGE@ GL: peepers -root \n\ @GL_KLUDGE@ GL: razzledazzle -root \n\ diff --git a/driver/XScreenSaver_ad.h b/driver/XScreenSaver_ad.h index cd4976e..2d7b168 100644 --- a/driver/XScreenSaver_ad.h +++ b/driver/XScreenSaver_ad.h @@ -281,6 +281,7 @@ GL: crumbler -root \\n\ filmleader -root \\n\ glitchpeg -root \\n\ + GL: handsy -root \\n\ GL: maze3d -root \\n\ GL: peepers -root \\n\ GL: razzledazzle -root \\n\ diff --git a/driver/demo-Gtk.c b/driver/demo-Gtk.c index 0dfc387..ef00d82 100644 --- a/driver/demo-Gtk.c +++ b/driver/demo-Gtk.c @@ -3970,6 +3970,11 @@ launch_preview_subproc (state *s) } else { + /* We do this instead of relying on $XSCREENSAVER_WINDOW specifically + so that third-party savers that don't implement -window-id will fail: + otherwise we might have full-screen windows popping up when we were + just trying to get a preview thumbnail. + */ strcpy (new_cmd, cmd); sprintf (new_cmd + strlen (new_cmd), " -window-id 0x%X", (unsigned int) id); diff --git a/driver/passwd.c b/driver/passwd.c index ac5a3f0..f443726 100644 --- a/driver/passwd.c +++ b/driver/passwd.c @@ -1,5 +1,5 @@ /* passwd.c --- verifying typed passwords with the OS. - * xscreensaver, Copyright (c) 1993-2014 Jamie Zawinski <jwz@jwz.org> + * xscreensaver, Copyright (c) 1993-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -24,6 +24,7 @@ #endif #include <time.h> #include <sys/time.h> +#include <sys/stat.h> #ifndef VMS # include <pwd.h> /* for getpwuid() */ @@ -111,6 +112,44 @@ struct auth_methods methods[] = { }; +# ifdef HAVE_PROC_OOM +/* On some recent Linux systems you can tell the kernel's OOM-killer to + consider the possibility of maybe sometimes not killing you in low-memory + situations. Because that would unlock the screen. And that would be bad. + + Linux >= 2.6.11: echo -17 > /proc/$$/oom_adj <-- ignoring this. + Linux >= 2.6.37: echo -1000 > /proc/$$/oom_score_adj <-- trying this. + */ +static void +oom_assassin_immunity (Bool verbose_p) +{ + char fn[1024]; + struct stat st; + FILE *out; + sprintf (fn, "/proc/%d/oom_score_adj", getpid()); + if (stat(fn, &st) != 0) + { + if (verbose_p) + fprintf (stderr, "%s: OOM: %s does not exist\n", blurb(), fn); + return; + } + out = fopen (fn, "w"); + if (!out) + { + if (verbose_p) + { + char b[2048]; + sprintf (b, "%s: OOM: unable to write %s\n", blurb(), fn); + perror(b); + } + return; + } + fputs ("-1000\n", out); + fclose (out); +} +# endif /* HAVE_PROC_OOM */ + + Bool lock_priv_init (int argc, char **argv, Bool verbose_p) { @@ -130,6 +169,11 @@ lock_priv_init (int argc, char **argv, Bool verbose_p) fprintf (stderr, "%s: initialization of %s passwords failed.\n", blurb(), methods[i].name); } + +# ifdef HAVE_PROC_OOM + oom_assassin_immunity (verbose_p); +# endif + return any_ok; } diff --git a/driver/test-yarandom.c b/driver/test-yarandom.c new file mode 100644 index 0000000..6701ff8 --- /dev/null +++ b/driver/test-yarandom.c @@ -0,0 +1,66 @@ +/* test-yarandom.c --- generate a file of random bytes for analysis. + * xscreensaver, Copyright (c) 2018 Jamie Zawinski <jwz@jwz.org> + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * 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 <stdlib.h> +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#include <ctype.h> +#include <stdio.h> +#include "yarandom.h" + +char *progname = 0; + +int +main (int argc, char **argv) +{ + unsigned long i, n; + char *f; + FILE *fd; + + progname = argv[0]; + if (argc != 3) + { + fprintf(stderr, "usage: %s bytes outfile\n", argv[0]); + exit(1); + } + + n = atol (argv[1]); + f = argv[2]; + +# undef ya_rand_init + ya_rand_init(0); + + fd = fopen (f, "w"); + if (!fd) { perror (f); exit (1); } + + n /= sizeof(uint32_t); + for (i = 0; i < n; i++) + { + union { uint32_t i; char s[sizeof(uint32_t)]; } rr; + rr.i = random(); + if (! fwrite (rr.s, sizeof(rr.s), 1, fd)) + { + perror ("write"); + exit (1); + } + } + fclose (fd); + fprintf (stderr, "%s: %s: wrote %ld bytes\n", + progname, f, i * sizeof(uint32_t)); + exit(0); +} diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c index f5f65dc..abcb07f 100644 --- a/driver/xscreensaver.c +++ b/driver/xscreensaver.c @@ -1328,6 +1328,10 @@ main_loop (saver_info *si) { Time lock_timeout = p->lock_timeout; + /* If we're fading, don't lock until the fade finishes. */ + if (si->fading_possible_p && p->fade_p) + lock_timeout += p->fade_seconds / 1000; + if (si->emergency_lock_p && p->lock_p && lock_timeout) { int secs = p->lock_timeout / 1000; @@ -2071,15 +2075,15 @@ handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p) sprintf (buf, "LOCK ClientMessage received; %s", response); clientmessage_response (si, window, False, buf, response); + /* Have to set the time or xscreensaver-command doesn't report + the LOCK state change. Must come before set_locked_p(). */ + si->blank_time = time ((time_t *) 0); + /* 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; diff --git a/hacks/Makefile.in b/hacks/Makefile.in index 4556872..63e69be 100644 --- a/hacks/Makefile.in +++ b/hacks/Makefile.in @@ -115,15 +115,15 @@ SRCS = attraction.c blitspin.c bouboule.c braid.c bubbles.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 filmleader.c \ - wormhole.c pacman.c pacman_ai.c pacman_level.c \ + apple2-main.c analogtv.c analogtv-cli.c xanalogtv.c pong.c \ + filmleader.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 \ - glitchpeg.c vfeedback.c \ - webcollage-cocoa.m webcollage-helper-cocoa.m testx11.c + glitchpeg.c vfeedback.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, @@ -156,14 +156,15 @@ OBJS = attraction.o blitspin.o bouboule.o braid.o bubbles.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 filmleader.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 glitchpeg.o vfeedback.o testx11.o + apple2-main.o analogtv.o analogtv2.o analogtv-cli.o \ + xanalogtv.o pong.o filmleader.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 \ + glitchpeg.o vfeedback.o testx11.o EXES = attraction blitspin bouboule braid decayscreen deco \ drift flame galaxy grav greynetic halo \ @@ -414,7 +415,9 @@ distdepend:: m6502.h -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' ; \ + -e 's@ $$(srcdir)/\(m6502.h\)@ \1@g' \ + -e 's@ $$(srcdir)/\(images/gen/\)@ \1@g' \ + -e 's@ $$(HACK_SRC)/\(images/gen/\)@ \1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ mv /tmp/distdepend.$$$$ Makefile.in @@ -533,8 +536,9 @@ $(UTIL_OBJS): $(MAKE) $(@F) CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" # How we build object files in this directory. +HACK_CFLAGS_BASE=$(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) .c.o: - $(CC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $< + $(CC) -c $(HACK_CFLAGS_BASE) $< # Make sure these are regenerated when the version number ticks. @@ -564,11 +568,13 @@ xscreensaver-sgigl: xscreensaver-sgigl.c $(XMU_LIBS) -lX11 -lXext $(X_EXTRA_LIBS) -lm test-utf8wc: $(UTILS_SRC)/utf8wc.c - $(CC) $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $(LDFLAGS)\ + $(CC) $(HACK_CFLAGS_BASE) $(LDFLAGS)\ -o $@ -DSELFTEST $< # Make sure the images have been packaged. This is the first one hit: -$(HACK_BIN)/images/gen/nose-f1_png.h: +images/gen/som_png.h: + cd $(srcdir)/images && $(MAKE) +images/gen/6x10font_png.h: cd $(srcdir)/images && $(MAKE) # The rules for those hacks which follow the `screenhack.c' API. @@ -691,6 +697,21 @@ apple2: apple2.o apple2-main.o $(HACK_OBJS) $(ATV) $(GRAB) $(TEXT) $(PN xanalogtv: xanalogtv.o $(HACK_OBJS) $(ATV) $(GRAB) $(PNG) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(ATV) $(GRAB) $(PNG) $(PNG_LIBS) $(HACK_LIBS) $(THRL) +ATVCLI_CFLAGS=-DANALOGTV_SCALE=1 -DNO_CONSTRAIN_RATIO $(HACK_CFLAGS_BASE) +analogtv2.o: Makefile +analogtv2.o: images/gen/6x10font_png.h +analogtv2.o: $(srcdir)/analogtv.h +analogtv2.o: $(srcdir)/analogtv.c + $(CC) -o $@ -c $(ATVCLI_CFLAGS) $< +analogtv-cli.o: $(srcdir)/analogtv-cli.c + $(CC) -o $@ -c $(ATVCLI_CFLAGS) $< + +ATVCLI=analogtv2.o $(UTILS_BIN)/yarandom.o $(THRO) $(PNG) +analogtv-cli: analogtv-cli.o $(ATVCLI) + $(CC_HACK) -o $@ $@.o $(ATVCLI) $(THRL) $(PNG_LIBS) -lpng +clean:: + -rm -f analogtv-cli + distort: distort.o $(HACK_OBJS) $(GRAB) $(SHM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(SHM) $(HACK_LIBS) $(THRL) @@ -1035,9 +1056,19 @@ 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-cli.o: $(srcdir)/analogtv.h +analogtv-cli.o: ../config.h +analogtv-cli.o: $(UTILS_SRC)/aligned_malloc.h +analogtv-cli.o: $(UTILS_SRC)/font-retry.h +analogtv-cli.o: $(UTILS_SRC)/resources.h +analogtv-cli.o: $(UTILS_SRC)/thread_util.h +analogtv-cli.o: $(UTILS_SRC)/visual.h +analogtv-cli.o: $(UTILS_SRC)/xshm.h +analogtv-cli.o: $(UTILS_SRC)/yarandom.h +analogtv-cli.o: $(srcdir)/ximage-loader.h analogtv.o: $(srcdir)/analogtv.h analogtv.o: ../config.h -analogtv.o: $(srcdir)/images/gen/6x10font_png.h +analogtv.o: images/gen/6x10font_png.h analogtv.o: $(UTILS_SRC)/aligned_malloc.h analogtv.o: $(UTILS_SRC)/font-retry.h analogtv.o: $(UTILS_SRC)/grabscreen.h @@ -1131,7 +1162,7 @@ apple2.o: $(srcdir)/analogtv.h apple2.o: $(srcdir)/apple2.h apple2.o: ../config.h apple2.o: $(srcdir)/fps.h -apple2.o: $(srcdir)/images/gen/apple2font_png.h +apple2.o: images/gen/apple2font_png.h apple2.o: $(srcdir)/recanim.h apple2.o: $(srcdir)/screenhackI.h apple2.o: $(UTILS_SRC)/aligned_malloc.h @@ -1204,7 +1235,7 @@ 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/gen/som_png.h +blitspin.o: images/gen/som_png.h blitspin.o: $(srcdir)/recanim.h blitspin.o: $(srcdir)/screenhackI.h blitspin.o: $(srcdir)/screenhack.h @@ -1266,17 +1297,19 @@ bsod.o: $(srcdir)/analogtv.h bsod.o: $(srcdir)/apple2.h bsod.o: ../config.h bsod.o: $(srcdir)/fps.h -bsod.o: $(srcdir)/images/gen/amiga_png.h -bsod.o: $(srcdir)/images/gen/android_png.h -bsod.o: $(srcdir)/images/gen/apple_png.h -bsod.o: $(srcdir)/images/gen/atari_png.h -bsod.o: $(srcdir)/images/gen/atm_png.h -bsod.o: $(srcdir)/images/gen/hmac_png.h -bsod.o: $(srcdir)/images/gen/macbomb_png.h -bsod.o: $(srcdir)/images/gen/mac_png.h -bsod.o: $(srcdir)/images/gen/osx_10_2_png.h -bsod.o: $(srcdir)/images/gen/osx_10_3_png.h -bsod.o: $(srcdir)/images/gen/ransomware_png.h +bsod.o: images/gen/amiga_png.h +bsod.o: images/gen/android_png.h +bsod.o: images/gen/apple_png.h +bsod.o: images/gen/atari_png.h +bsod.o: images/gen/atm_png.h +bsod.o: images/gen/dvd_png.h +bsod.o: images/gen/hmac_png.h +bsod.o: images/gen/macbomb_png.h +bsod.o: images/gen/mac_png.h +bsod.o: images/gen/osx_10_2_png.h +bsod.o: images/gen/osx_10_3_png.h +bsod.o: images/gen/ransomware_png.h +bsod.o: images/gen/sun_png.h bsod.o: $(srcdir)/recanim.h bsod.o: $(srcdir)/screenhackI.h bsod.o: $(srcdir)/screenhack.h @@ -1294,50 +1327,50 @@ bsod.o: $(UTILS_SRC)/yarandom.h bsod.o: $(srcdir)/ximage-loader.h bubbles-default.o: $(srcdir)/bubbles.h bubbles-default.o: ../config.h -bubbles-default.o: $(srcdir)/images/gen/blood10_png.h -bubbles-default.o: $(srcdir)/images/gen/blood11_png.h -bubbles-default.o: $(srcdir)/images/gen/blood1_png.h -bubbles-default.o: $(srcdir)/images/gen/blood2_png.h -bubbles-default.o: $(srcdir)/images/gen/blood3_png.h -bubbles-default.o: $(srcdir)/images/gen/blood4_png.h -bubbles-default.o: $(srcdir)/images/gen/blood5_png.h -bubbles-default.o: $(srcdir)/images/gen/blood6_png.h -bubbles-default.o: $(srcdir)/images/gen/blood7_png.h -bubbles-default.o: $(srcdir)/images/gen/blood8_png.h -bubbles-default.o: $(srcdir)/images/gen/blood9_png.h -bubbles-default.o: $(srcdir)/images/gen/blue10_png.h -bubbles-default.o: $(srcdir)/images/gen/blue11_png.h -bubbles-default.o: $(srcdir)/images/gen/blue1_png.h -bubbles-default.o: $(srcdir)/images/gen/blue2_png.h -bubbles-default.o: $(srcdir)/images/gen/blue3_png.h -bubbles-default.o: $(srcdir)/images/gen/blue4_png.h -bubbles-default.o: $(srcdir)/images/gen/blue5_png.h -bubbles-default.o: $(srcdir)/images/gen/blue6_png.h -bubbles-default.o: $(srcdir)/images/gen/blue7_png.h -bubbles-default.o: $(srcdir)/images/gen/blue8_png.h -bubbles-default.o: $(srcdir)/images/gen/blue9_png.h -bubbles-default.o: $(srcdir)/images/gen/glass10_png.h -bubbles-default.o: $(srcdir)/images/gen/glass11_png.h -bubbles-default.o: $(srcdir)/images/gen/glass1_png.h -bubbles-default.o: $(srcdir)/images/gen/glass2_png.h -bubbles-default.o: $(srcdir)/images/gen/glass3_png.h -bubbles-default.o: $(srcdir)/images/gen/glass4_png.h -bubbles-default.o: $(srcdir)/images/gen/glass5_png.h -bubbles-default.o: $(srcdir)/images/gen/glass6_png.h -bubbles-default.o: $(srcdir)/images/gen/glass7_png.h -bubbles-default.o: $(srcdir)/images/gen/glass8_png.h -bubbles-default.o: $(srcdir)/images/gen/glass9_png.h -bubbles-default.o: $(srcdir)/images/gen/jade10_png.h -bubbles-default.o: $(srcdir)/images/gen/jade11_png.h -bubbles-default.o: $(srcdir)/images/gen/jade1_png.h -bubbles-default.o: $(srcdir)/images/gen/jade2_png.h -bubbles-default.o: $(srcdir)/images/gen/jade3_png.h -bubbles-default.o: $(srcdir)/images/gen/jade4_png.h -bubbles-default.o: $(srcdir)/images/gen/jade5_png.h -bubbles-default.o: $(srcdir)/images/gen/jade6_png.h -bubbles-default.o: $(srcdir)/images/gen/jade7_png.h -bubbles-default.o: $(srcdir)/images/gen/jade8_png.h -bubbles-default.o: $(srcdir)/images/gen/jade9_png.h +bubbles-default.o: images/gen/blood10_png.h +bubbles-default.o: images/gen/blood11_png.h +bubbles-default.o: images/gen/blood1_png.h +bubbles-default.o: images/gen/blood2_png.h +bubbles-default.o: images/gen/blood3_png.h +bubbles-default.o: images/gen/blood4_png.h +bubbles-default.o: images/gen/blood5_png.h +bubbles-default.o: images/gen/blood6_png.h +bubbles-default.o: images/gen/blood7_png.h +bubbles-default.o: images/gen/blood8_png.h +bubbles-default.o: images/gen/blood9_png.h +bubbles-default.o: images/gen/blue10_png.h +bubbles-default.o: images/gen/blue11_png.h +bubbles-default.o: images/gen/blue1_png.h +bubbles-default.o: images/gen/blue2_png.h +bubbles-default.o: images/gen/blue3_png.h +bubbles-default.o: images/gen/blue4_png.h +bubbles-default.o: images/gen/blue5_png.h +bubbles-default.o: images/gen/blue6_png.h +bubbles-default.o: images/gen/blue7_png.h +bubbles-default.o: images/gen/blue8_png.h +bubbles-default.o: images/gen/blue9_png.h +bubbles-default.o: images/gen/glass10_png.h +bubbles-default.o: images/gen/glass11_png.h +bubbles-default.o: images/gen/glass1_png.h +bubbles-default.o: images/gen/glass2_png.h +bubbles-default.o: images/gen/glass3_png.h +bubbles-default.o: images/gen/glass4_png.h +bubbles-default.o: images/gen/glass5_png.h +bubbles-default.o: images/gen/glass6_png.h +bubbles-default.o: images/gen/glass7_png.h +bubbles-default.o: images/gen/glass8_png.h +bubbles-default.o: images/gen/glass9_png.h +bubbles-default.o: images/gen/jade10_png.h +bubbles-default.o: images/gen/jade11_png.h +bubbles-default.o: images/gen/jade1_png.h +bubbles-default.o: images/gen/jade2_png.h +bubbles-default.o: images/gen/jade3_png.h +bubbles-default.o: images/gen/jade4_png.h +bubbles-default.o: images/gen/jade5_png.h +bubbles-default.o: images/gen/jade6_png.h +bubbles-default.o: images/gen/jade7_png.h +bubbles-default.o: images/gen/jade8_png.h +bubbles-default.o: images/gen/jade9_png.h bubbles-default.o: $(UTILS_SRC)/yarandom.h bubbles.o: $(srcdir)/bubbles.h bubbles.o: ../config.h @@ -1701,7 +1734,7 @@ 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/gen/bob_png.h +flag.o: images/gen/bob_png.h flag.o: $(srcdir)/recanim.h flag.o: $(srcdir)/screenhackI.h flag.o: $(UTILS_SRC)/colors.h @@ -2232,8 +2265,8 @@ m6502.o: $(UTILS_SRC)/xshm.h m6502.o: $(UTILS_SRC)/yarandom.h maze.o: ../config.h maze.o: $(srcdir)/fps.h -maze.o: $(srcdir)/images/gen/logo-180_png.h -maze.o: $(srcdir)/images/gen/logo-50_png.h +maze.o: images/gen/logo-180_png.h +maze.o: images/gen/logo-50_png.h maze.o: $(srcdir)/recanim.h maze.o: $(srcdir)/screenhackI.h maze.o: $(srcdir)/screenhack.h @@ -2345,14 +2378,14 @@ 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/gen/nose-f1_png.h -noseguy.o: $(srcdir)/images/gen/nose-f2_png.h -noseguy.o: $(srcdir)/images/gen/nose-f3_png.h -noseguy.o: $(srcdir)/images/gen/nose-f4_png.h -noseguy.o: $(srcdir)/images/gen/nose-l1_png.h -noseguy.o: $(srcdir)/images/gen/nose-l2_png.h -noseguy.o: $(srcdir)/images/gen/nose-r1_png.h -noseguy.o: $(srcdir)/images/gen/nose-r2_png.h +noseguy.o: images/gen/nose-f1_png.h +noseguy.o: images/gen/nose-f2_png.h +noseguy.o: images/gen/nose-f3_png.h +noseguy.o: images/gen/nose-f4_png.h +noseguy.o: images/gen/nose-l1_png.h +noseguy.o: images/gen/nose-l2_png.h +noseguy.o: images/gen/nose-r1_png.h +noseguy.o: images/gen/nose-r2_png.h noseguy.o: $(srcdir)/recanim.h noseguy.o: $(srcdir)/screenhackI.h noseguy.o: $(srcdir)/screenhack.h @@ -2404,7 +2437,7 @@ pacman_level.o: $(srcdir)/ximage-loader.h pacman_level.o: $(srcdir)/xlockmoreI.h pacman.o: ../config.h pacman.o: $(srcdir)/fps.h -pacman.o: $(srcdir)/images/gen/pacman_png.h +pacman.o: images/gen/pacman_png.h pacman.o: $(srcdir)/pacman_ai.h pacman.o: $(srcdir)/pacman.h pacman.o: $(srcdir)/pacman_level.h @@ -2480,7 +2513,7 @@ 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/gen/6x10font_png.h +phosphor.o: images/gen/6x10font_png.h phosphor.o: $(srcdir)/recanim.h phosphor.o: $(srcdir)/screenhackI.h phosphor.o: $(srcdir)/screenhack.h @@ -2912,7 +2945,7 @@ tessellimage.o: $(UTILS_SRC)/yarandom.h testx11.o: ../config.h testx11.o: $(srcdir)/fps.h testx11.o: $(srcdir)/glx/rotator.h -testx11.o: $(srcdir)/images/gen/logo-180_png.h +testx11.o: images/gen/logo-180_png.h testx11.o: $(srcdir)/recanim.h testx11.o: $(srcdir)/screenhackI.h testx11.o: $(srcdir)/screenhack.h @@ -3116,10 +3149,10 @@ worm.o: $(srcdir)/xlockmore.h xanalogtv.o: $(srcdir)/analogtv.h xanalogtv.o: ../config.h xanalogtv.o: $(srcdir)/fps.h -xanalogtv.o: $(srcdir)/images/gen/logo-180_png.h -xanalogtv.o: $(srcdir)/images/gen/testcard_bbcf_png.h -xanalogtv.o: $(srcdir)/images/gen/testcard_pm5544_png.h -xanalogtv.o: $(srcdir)/images/gen/testcard_rca_png.h +xanalogtv.o: images/gen/logo-180_png.h +xanalogtv.o: images/gen/testcard_bbcf_png.h +xanalogtv.o: images/gen/testcard_pm5544_png.h +xanalogtv.o: images/gen/testcard_rca_png.h xanalogtv.o: $(srcdir)/recanim.h xanalogtv.o: $(srcdir)/screenhackI.h xanalogtv.o: $(srcdir)/screenhack.h @@ -3137,7 +3170,7 @@ xanalogtv.o: $(UTILS_SRC)/yarandom.h xanalogtv.o: $(srcdir)/ximage-loader.h xflame.o: ../config.h xflame.o: $(srcdir)/fps.h -xflame.o: $(srcdir)/images/gen/bob_png.h +xflame.o: images/gen/bob_png.h xflame.o: $(srcdir)/recanim.h xflame.o: $(srcdir)/screenhackI.h xflame.o: $(srcdir)/screenhack.h @@ -3196,10 +3229,10 @@ 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/gen/matrix1b_png.h -xmatrix.o: $(srcdir)/images/gen/matrix1_png.h -xmatrix.o: $(srcdir)/images/gen/matrix2b_png.h -xmatrix.o: $(srcdir)/images/gen/matrix2_png.h +xmatrix.o: images/gen/matrix1b_png.h +xmatrix.o: images/gen/matrix1_png.h +xmatrix.o: images/gen/matrix2b_png.h +xmatrix.o: images/gen/matrix2_png.h xmatrix.o: $(srcdir)/recanim.h xmatrix.o: $(srcdir)/screenhackI.h xmatrix.o: $(srcdir)/screenhack.h diff --git a/hacks/abstractile.c b/hacks/abstractile.c index b4394f1..1b055c2 100644 --- a/hacks/abstractile.c +++ b/hacks/abstractile.c @@ -1485,6 +1485,7 @@ abstractile_init(Display *display, Window window) fprintf(stderr, "%s: unknown tile option %s\n", progname, tile); st->tile = TILE_RANDOM; } + if (tile) free (tile); st->speed = get_integer_resource(display, "speed", "Integer"); if (st->speed < 0) st->speed = 0; @@ -1579,6 +1580,14 @@ static void abstractile_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + if (st->dline) free(st->dline); + if (st->eline) free(st->eline); + if (st->grid) free(st->grid); + if (st->zlist) free(st->zlist); + if (st->fdol) free(st->fdol); + if (st->odi) free(st->odi); + XFreeGC (dpy, st->fgc); + XFreeGC (dpy, st->bgc); free (st); } diff --git a/hacks/analogtv-cli.c b/hacks/analogtv-cli.c new file mode 100644 index 0000000..d70db1b --- /dev/null +++ b/hacks/analogtv-cli.c @@ -0,0 +1,967 @@ +/* xanalogtv-cli, Copyright (c) 2018 Jamie Zawinski <jwz@jwz.org> + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation. No representations are made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * Performs the "Analog TV" transform on an image file, converting it to + * an MP4. The MP4 file will have the same dimensions as the input image. + * Requires 'ffmpeg' on $PATH. + * + * --duration Length in seconds of MP4. + * --powerup Do the power-on animation at the beginning. + * --logo FILE Small image overlayed onto the colorbars image. + * --audio FILE Add a soundtrack. Must be as long or longer. + * + * Created: 10-Dec-2018 by jwz. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <signal.h> + +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xos.h> + +#include "resources.h" +#include "visual.h" +#include "yarandom.h" +#include "font-retry.h" +#include "ximage-loader.h" +#include "thread_util.h" +#include "xshm.h" +#include "analogtv.h" + +#ifdef HAVE_LIBPNG +# include <png.h> +#endif + +const char *progname; +const char *progclass; +int mono_p = 0; +static Bool verbose_p = 0; + +#define RANDSIGN() ((random() & 1) ? 1 : -1) + +enum { + N_CHANNELS=12, + MAX_MULTICHAN=2, + MAX_STATIONS=11 +}; + +typedef struct chansetting_s { + analogtv_reception recs[MAX_MULTICHAN]; + double noise_level; +} chansetting; + +struct state { + XImage *output_frame; + int frames_written; + char *framefile_fmt; + + Display *dpy; + Window window; + analogtv *tv; + analogtv_font ugly_font; + + int n_stations; + analogtv_input *stations[MAX_STATIONS]; + Bool image_loading_p; + XImage *logo, *logo_mask; + + int curinputi; + chansetting chansettings[N_CHANNELS]; + chansetting *cs; +}; + +static struct state global_state; + + +/* Since this program does not connect to an X server, or in fact link + with Xlib, we need stubs for the few X11 routines that analogtv.c calls. + Most are unused. It seems like I am forever implementing subsets of X11. + */ + +Status +XAllocColor (Display *dpy, Colormap cmap, XColor *c) +{ + abort(); +} + +int +XClearArea (Display *dpy, Window win, int x, int y, + unsigned int w, unsigned int h, Bool exp) +{ + return 0; +} + +int +XClearWindow (Display *dpy, Window window) +{ + return 0; +} + +GC +XCreateGC(Display *dpy, Drawable d, unsigned long mask, XGCValues *gcv) +{ + return 0; +} + +XImage * +XCreateImage (Display *dpy, Visual *v, 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)); + unsigned long r, g, b; + + if (depth == 0) depth = 32; + + 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_rgb_masks (0, v, &r, &g, &b); + ximage->red_mask = (depth == 1 ? 0 : r); + ximage->green_mask = (depth == 1 ? 0 : g); + ximage->blue_mask = (depth == 1 ? 0 : b); + ximage->bits_per_pixel = (depth == 1 ? 1 : visual_pixmap_depth (0, v)); + ximage->bytes_per_line = bytes_per_line; + + XInitImage (ximage); + if (! ximage->f.put_pixel) abort(); + return ximage; +} + +Pixmap +XCreatePixmap (Display *dpy, Drawable d, unsigned int width, + unsigned int height, unsigned int depth) +{ + abort(); +} + +Pixmap +XCreatePixmapFromBitmapData (Display *dpy, Drawable d, char *data, + unsigned int w, unsigned int h, + unsigned long fg, unsigned long bg, + unsigned int depth) +{ + abort(); +} + +int +XDrawString (Display *dpy, Drawable d, GC gc, int x, int y, const char *s, + int len) +{ + abort(); +} + +int +XFillRectangle (Display *dpy, Drawable d, GC gc, int x, int y, + unsigned int width, unsigned int height) +{ + abort(); +} + +int +XFreeColors (Display *dpy, Colormap cmap, unsigned long *px, int n, + unsigned long planes) +{ + abort(); +} + +int +XFreeGC (Display *dpy, GC gc) +{ + abort(); +} + +int +XFreePixmap (Display *dpy, Pixmap p) +{ + abort(); +} + +XImage * +XGetImage (Display *dpy, Drawable d, int x, int y, + unsigned int w, unsigned int h, + unsigned long pm, int fmt) +{ + abort(); +} + +Status +XGetWindowAttributes (Display *dpy, Window w, XWindowAttributes *xgwa) +{ + struct state *st = &global_state; + memset (xgwa, 0, sizeof(*xgwa)); + xgwa->width = st->output_frame->width; + xgwa->height = st->output_frame->height; + return True; +} + +int +XPutImage (Display *dpy, Drawable d, GC gc, XImage *image, + int src_x, int src_y, int dest_x, int dest_y, + unsigned int w, unsigned int h) +{ + struct state *st = &global_state; + XImage *out = st->output_frame; + int x, y; + for (y = 0; y < h; y++) { + int iy = src_y + y; + int oy = dest_y + y; + if (iy >= 0 && + oy >= 0 && + iy < image->height && + oy < out->height) + for (x = 0; x < w; x++) { + int ix = src_x + x; + int ox = dest_x + x; + if (ix >= 0 && + ox >= 0 && + ix < image->width && + ox < out->width) { + XPutPixel (out, ox, oy, XGetPixel (image, ix, iy)); + } + } + } + return 0; +} + +int +XQueryColor (Display *dpy, Colormap cmap, XColor *color) +{ + uint16_t r = (color->pixel & 0x00FF0000L) >> 16; + uint16_t g = (color->pixel & 0x0000FF00L) >> 8; + uint16_t b = (color->pixel & 0x000000FFL); + color->red = r | (r<<8); + color->green = g | (g<<8); + color->blue = b | (b<<8); + 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; +} + +int +XSetForeground (Display *dpy, GC gc, unsigned long fg) +{ + abort(); +} + +int +XSetWindowBackground (Display *dpy, Window win, unsigned long bg) +{ + return 0; +} + +XImage * +create_xshm_image (Display *dpy, Visual *visual, + unsigned int depth, + int format, XShmSegmentInfo *shm_info, + unsigned int width, unsigned int height) +{ +# undef BitmapPad +# define BitmapPad(dpy) 8 + XImage *image = XCreateImage (dpy, visual, depth, format, 0, NULL, + width, height, BitmapPad(dpy), 0); + int error = thread_malloc ((void **)&image->data, dpy, + image->height * image->bytes_per_line); + if (error) { + XDestroyImage (image); + image = NULL; + } else { + memset (image->data, 0, image->height * image->bytes_per_line); + } + + return image; +} + +void +destroy_xshm_image (Display *dpy, XImage *image, XShmSegmentInfo *shm_info) +{ + thread_free (image->data); + image->data = NULL; + XDestroyImage (image); +} + +Bool +get_boolean_resource (Display *dpy, char *name, char *class) +{ + if (!strcmp(name, "useThreads")) return True; + abort(); +} + +double +get_float_resource (Display *dpy, char *name, char *class) +{ + if (!strcmp(name, "TVTint")) return 5; + if (!strcmp(name, "TVColor")) return 70; + if (!strcmp(name, "TVBrightness")) return -15; + if (!strcmp(name, "TVContrast")) return 150; + abort(); +} + +int +get_integer_resource (Display *dpy, char *name, char *class) +{ + if (!strcmp(name, "use_cmap")) return 0; + abort(); +} + +unsigned int +get_pixel_resource (Display *dpy, Colormap cmap, char *name, char *class) +{ + if (!strcmp(name, "background")) return 0; + abort(); +} + +XFontStruct * +load_font_retry (Display *dpy, const char *xlfd) +{ + abort(); +} + +Bool +put_xshm_image (Display *dpy, Drawable d, GC gc, XImage *image, + int src_x, int src_y, int dest_x, int dest_y, + unsigned int width, unsigned int height, + XShmSegmentInfo *shm_info) +{ + return XPutImage (dpy, d, gc, image, src_x, src_y, dest_x, dest_y, + width, height); +} + +int +visual_class (Screen *s, Visual *v) +{ + return TrueColor; +} + +int +visual_pixmap_depth (Screen *s, Visual *v) +{ + return 32; +} + +void +visual_rgb_masks (Screen *screen, Visual *visual, + unsigned long *red_mask, + unsigned long *green_mask, + unsigned long *blue_mask) +{ + *red_mask = 0x00FF0000L; + *green_mask = 0x0000FF00L; + *blue_mask = 0x000000FFL; +} + + +static void +update_smpte_colorbars(analogtv_input *input) +{ + struct state *st = (struct state *) input->client_data; + int col; + 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); + + 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 */ + if (st->logo) + { + double aspect = (double) + st->output_frame->width / st->output_frame->height; + int w2 = st->tv->xgwa.width * 0.35; + int h2 = st->tv->xgwa.height * 0.35 * aspect; + analogtv_load_ximage (st->tv, input, st->logo, st->logo_mask, + (st->tv->xgwa.width - w2) / 2, + st->tv->xgwa.height * 0.20, + w2, h2); + } + + input->next_update_time += 1.0; +} + + + +static void +analogtv_save_frame (struct state *st, const char *outfile, + unsigned long frame) +{ + char *pngfile = malloc (strlen (st->framefile_fmt) + 40); + FILE *f; + + sprintf (pngfile, st->framefile_fmt, (int) frame); + f = fopen (pngfile, "wb"); + if (! f) { + fprintf (stderr, "%s: unable to write %s\n", progname, pngfile); + exit (1); + } + +# ifdef HAVE_LIBPNG + { + png_structp png_ptr; + png_infop info_ptr; + png_bytep row; + XImage *img = st->output_frame; + int x, y; + + png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, 0, 0, 0); + if (!png_ptr) abort(); + info_ptr = png_create_info_struct (png_ptr); + if (!info_ptr) abort(); + if (setjmp (png_jmpbuf (png_ptr))) abort(); + + png_init_io (png_ptr, f); + + png_set_IHDR (png_ptr, info_ptr, img->width, img->height, 8, + PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + png_write_info (png_ptr, info_ptr); + + row = (png_bytep) malloc (3 * img->width * sizeof(png_byte)); + if (!row) abort(); + for (y = 0 ; y < img->height ; y++) { + for (x = 0 ; x < img->width ; x++) { + unsigned long p = XGetPixel (img, x, y); + row[x*3+0] = (p & 0x000000FFL); + row[x*3+1] = (p & 0x0000FF00L) >> 8; + row[x*3+2] = (p & 0x00FF0000L) >> 16; + } + png_write_row (png_ptr, row); + } + + png_write_end (png_ptr, 0); + + png_free_data (png_ptr, info_ptr, PNG_FREE_ALL, -1); + png_destroy_write_struct (&png_ptr, 0); + free (row); + } +#else /* ! HAVE_LIBPNG */ +# error libpng required +# endif /* ! HAVE_LIBPNG */ + + fclose (f); + if (verbose_p > 1) + fprintf (stderr, "%s: wrote %s\n", progname, pngfile); + free (pngfile); +} + + +static void +delete_tmp_files(void) +{ + struct state *st = &global_state; + char outfile[2048]; + int i; + for (i = 0; i <= st->frames_written; i++) + { + sprintf (outfile, st->framefile_fmt, i); + if (verbose_p > 1) + fprintf (stderr, "%s: rm %s\n", progname, outfile); + unlink (outfile); + } +} + + +static RETSIGTYPE +analogtv_signal (int sig) +{ + signal (sig, SIG_DFL); + delete_tmp_files(); + kill (getpid (), sig); +} + + +static void +analogtv_write_mp4 (struct state *st, const char *outfile, + const char *audiofile, + unsigned long frames) +{ + char cmd[1024]; + struct stat ss; + + sprintf (cmd, + "ffmpeg" + " -hide_banner" + " -v 16" + " -framerate 30" /* rate of input: must be before -i */ + " -i '%s'" + " -r 30", /* rate of output: must be after -i */ + st->framefile_fmt); + if (audiofile) + sprintf (cmd + strlen(cmd), + " -i '%s'" + " -map 0:v:0" + " -map 1:a:0" + " -acodec aac" + " -shortest", + audiofile); + sprintf (cmd + strlen(cmd), + " -c:v libx264" + " -profile:v high" + " -crf 24" /* 18 is very high; 24 is good enough */ + " -pix_fmt yuv420p" + " '%s'" + " </dev/null" + /*" 2>&-"*/, + outfile); + + if (verbose_p > 1) + fprintf (stderr, "%s: exec: %s\n", progname, cmd); + unlink (outfile); + system (cmd); + + delete_tmp_files(); + + if (stat (outfile, &ss)) + { + fprintf (stderr, "%s: %s was not created\n", progname, outfile); + exit (1); + } + + if (verbose_p) + fprintf (stderr, "%s: wrote %s (%dx%d, %lu sec, %.0f MB)\n", + progname, outfile, + st->output_frame->width, st->output_frame->height, + frames/30, + (float) ss.st_size / (1024*1024)); +} + + +static void +flip_ximage (XImage *ximage) +{ + char *data2, *in, *out; + int y; + + if (!ximage) return; + data2 = malloc (ximage->bytes_per_line * ximage->height); + if (!data2) abort(); + in = ximage->data; + out = data2 + ximage->bytes_per_line * (ximage->height - 1); + for (y = 0; y < ximage->height; y++) + { + memcpy (out, in, ximage->bytes_per_line); + in += ximage->bytes_per_line; + out -= ximage->bytes_per_line; + } + free (ximage->data); + ximage->data = data2; +} + + +static void +analogtv_convert (const char *infile, const char *outfile, + const char *audiofile, const char *logofile, + int duration, Bool powerp) +{ + struct state *st = &global_state; + XImage *ximage = file_to_ximage (0, 0, infile); + Display *dpy = 0; + Window window = 0; + int i; + unsigned long curticks = 0; + time_t lastlog = time((time_t *)0); + int frames_left; + int fps = 30; + + if (verbose_p) + fprintf (stderr, "%s: progname: loaded %s %dx%d\n", + progname, infile, ximage->width, ximage->height); + + flip_ximage (ximage); + + memset (st, 0, sizeof(*st)); + st->dpy = dpy; + st->window = window; + + st->output_frame = XCreateImage (dpy, 0, ximage->depth, ximage->format, 0, + NULL, + ximage->width & ~1, /* can't be odd */ + ximage->height & ~1, + ximage->bitmap_pad, 0); + st->output_frame->data = (char *) + calloc (st->output_frame->height, st->output_frame->bytes_per_line); + + { + char *s1, *s2; + st->framefile_fmt = malloc (strlen(outfile) + 100); + strcpy (st->framefile_fmt, outfile); + s1 = strrchr (st->framefile_fmt, '/'); + s2 = strrchr (st->framefile_fmt, '.'); + if (s2 && s2 > s1) *s2 = 0; + sprintf (st->framefile_fmt + strlen(st->framefile_fmt), + ".%08x.%%06d.png", (random() % 0xFFFFFFFF)); + } + + if (logofile) { + int x, y; + st->logo = file_to_ximage (0, 0, logofile); + if (verbose_p) + fprintf (stderr, "%s: progname: loaded %s %dx%d\n", + progname, logofile, st->logo->width, st->logo->height); + flip_ximage (st->logo); + /* Pull the alpha out of the logo and make a separate mask ximage. */ + st->logo_mask = XCreateImage (dpy, 0, st->logo->depth, st->logo->format, 0, + NULL, st->logo->width, st->logo->height, + st->logo->bitmap_pad, 0); + st->logo_mask->data = (char *) + calloc (st->logo_mask->height, st->logo_mask->bytes_per_line); + + for (y = 0; y < st->logo->height; y++) + for (x = 0; x < st->logo->width; x++) { + unsigned long p = XGetPixel (st->logo, x, y); + uint8_t a = (p & 0xFF000000L) >> 24; + XPutPixel (st->logo, x, y, (p & 0x00FFFFFFL)); + XPutPixel (st->logo_mask, x, y, (a ? 0x00FFFFFFL : 0)); + } + } + + + if (audiofile) { + struct stat ss; + if (stat (audiofile, &ss)) + { + fprintf (stderr, "%s: %s does not exist\n", progname, audiofile); + exit (1); + } + } + + /* Catch signals to delete tmp files before we start writing them. */ + + signal (SIGHUP, analogtv_signal); + signal (SIGINT, analogtv_signal); + signal (SIGQUIT, analogtv_signal); + signal (SIGILL, analogtv_signal); + signal (SIGTRAP, analogtv_signal); +# ifdef SIGIOT + signal (SIGIOT, analogtv_signal); +# endif + signal (SIGABRT, analogtv_signal); +# ifdef SIGEMT + signal (SIGEMT, analogtv_signal); +# endif + signal (SIGFPE, analogtv_signal); + signal (SIGBUS, analogtv_signal); + signal (SIGSEGV, analogtv_signal); +# ifdef SIGSYS + signal (SIGSYS, analogtv_signal); +# endif + signal (SIGTERM, analogtv_signal); +# ifdef SIGXCPU + signal (SIGXCPU, analogtv_signal); +# endif +# ifdef SIGXFSZ + signal (SIGXFSZ, analogtv_signal); +# endif +# ifdef SIGDANGER + signal (SIGDANGER, analogtv_signal); +# endif + + st->tv=analogtv_allocate(dpy, window); + + while (st->n_stations < MAX_STATIONS) { + analogtv_input *input=analogtv_input_allocate(); + st->stations[st->n_stations++]=input; + input->client_data = 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) * RANDSIGN(); + } + if (random()%4==0) { + st->tv->brightness_control += frand(0.15); + } + if (random()%4==0) { + st->tv->contrast_control += frand(0.2) * RANDSIGN(); + } + + for (i=0; i<N_CHANNELS; i++) { + memset(&st->chansettings[i], 0, sizeof(chansetting)); + + st->chansettings[i].noise_level = 0.06; + { + int last_station=42; + int stati; + for (stati=0; stati<MAX_MULTICHAN; stati++) { + analogtv_reception *rec=&st->chansettings[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; + } + } + } + + st->curinputi=0; + st->cs = &st->chansettings[st->curinputi]; + frames_left = fps * (2 + frand(1.5)); + + st->tv->powerup=0.0; + + /* load_station_images() */ + + for (i = 0; i < MAX_STATIONS; i++) { + analogtv_input *input = st->stations[i]; + + if (i == 1) { /* station 0 is the unadulterated image. + station 1 is colorbars. */ + input->updater = update_smpte_colorbars; + } else { + int w = ximage->width * 0.815; /* underscan */ + int h = ximage->height * 0.970; + int x = (ximage->width - w) / 2; + int y = (ximage->height - h) / 2; + analogtv_input *input = st->stations[i]; + analogtv_setup_sync(input, 1, (random()%20)==0); + analogtv_load_ximage (st->tv, input, ximage, 0, x, y, w, h); + } + } + + + /* xanalogtv_draw() */ + + while (1) { + const analogtv_reception *recs[MAX_MULTICHAN]; + unsigned rec_count = 0; + double curtime=curticks*0.001; + + frames_left--; + if (frames_left <= 0) { + frames_left = fps * (0.5 + frand(2.5)); + + if (st->curinputi != 0 && !(random() % 3)) { + st->curinputi = 0; /* unadulterated image */ + } else { + st->curinputi = 1 + (random() % (N_CHANNELS - 1)); + } + + st->cs = &st->chansettings[st->curinputi]; + /* Set channel change noise flag */ + st->tv->channel_change_cycles=200000; + } + + for (i=0; i<MAX_MULTICHAN; i++) { + analogtv_reception *rec = &st->cs->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=(powerp ? curtime : 9999); + + if (st->curinputi == 0) { + XPutImage (dpy, 0, 0, ximage, 0, 0, 0, 0, + ximage->width, ximage->height); + } else { + for (i=0; i<MAX_MULTICHAN; i++) { + analogtv_reception *rec = &st->cs->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); + } + + analogtv_save_frame (st, outfile, st->frames_written); + + if (curtime >= duration) break; + + curticks += 1000/fps; + st->frames_written++; + + if (verbose_p) { + unsigned long now = time((time_t *)0); + if (now > lastlog + 5) { + fprintf (stderr, "%s: %2d%%...\n", progname, + (int) (curtime * 100 / duration)); + lastlog = now; + } + } + } + + analogtv_write_mp4 (st, outfile, audiofile, st->frames_written); +} + + +static void +usage(const char *err) +{ + if (err) fprintf (stderr, "%s: %s unknown\n", progname, err); + fprintf (stderr, "usage: %s [--verbose] [--duration secs]" + " [--audio mp3-file] [--no-powerup] infile.png outfile.mp4\n", + progname); + exit (1); +} + +int +main (int argc, char **argv) +{ + int i; + const char *infile = 0; + const char *outfile = 0; + int duration = 30; + Bool powerp = False; + char *audio = 0; + char *logo = 0; + + char *s = strrchr (argv[0], '/'); + progname = s ? s+1 : argv[0]; + progclass = progname; + + for (i = 1; i < argc; i++) + { + if (argv[i][0] == '-' && argv[i][1] == '-') + argv[i]++; + if (!strcmp(argv[i], "-v") || + !strcmp(argv[i], "-verbose")) + verbose_p++; + else if (!strcmp(argv[i], "-vv")) verbose_p += 2; + else if (!strcmp(argv[i], "-vvv")) verbose_p += 3; + else if (!strcmp(argv[i], "-vvvv")) verbose_p += 4; + else if (!strcmp(argv[i], "-vvvvv")) verbose_p += 5; + else if (!strcmp(argv[i], "-duration") && argv[i+1]) + { + char dummy; + i++; + if (1 != sscanf (argv[i], " %d %c", &duration, &dummy)) + usage(argv[i]); + } + else if (!strcmp(argv[i], "-audio") && argv[i+1]) + audio = argv[++i]; + else if (!strcmp(argv[i], "-logo") && argv[i+1]) + logo = argv[++i]; + else if (!strcmp(argv[i], "-powerup") || + !strcmp(argv[i], "-power")) + powerp = True; + else if (!strcmp(argv[i], "-no-powerup") || + !strcmp(argv[i], "-no-power")) + powerp = False; + else if (argv[i][0] == '-') + usage(argv[i]); + else if (!infile) + infile = argv[i]; + else if (!outfile) + outfile = argv[i]; + else + usage(argv[i]); + } + if (!infile) usage("input file"); + if (!outfile) usage("output file"); + +# undef ya_rand_init + ya_rand_init (0); + analogtv_convert (infile, outfile, audio, logo, duration, powerp); + exit (0); +} diff --git a/hacks/analogtv.c b/hacks/analogtv.c index fd7f504..8ef3c7d 100644 --- a/hacks/analogtv.c +++ b/hacks/analogtv.c @@ -329,7 +329,7 @@ analogtv_configure(analogtv *it) wlim = it->xgwa.width; ratio = wlim / (float) hlim; -#ifdef HAVE_MOBILE +#if defined(HAVE_MOBILE) || defined(NO_CONSTRAIN_RATIO) /* Fill the whole iPhone screen, even though that distorts the image. */ min_ratio = 0; max_ratio = 10; @@ -1002,7 +1002,7 @@ analogtv_setup_sync(analogtv_input *input, int do_cb, int do_ssavi) if (do_cb) { /* 9 cycles of colorburst */ - for (i=ANALOGTV_CB_START; i<ANALOGTV_CB_START+36; i+=4) { + for (i=ANALOGTV_CB_START; i<ANALOGTV_CB_START+36*ANALOGTV_SCALE; i+=4*ANALOGTV_SCALE) { sig[i+1] += ANALOGTV_CB_LEVEL; sig[i+3] -= ANALOGTV_CB_LEVEL; } @@ -1022,11 +1022,11 @@ analogtv_sync(analogtv *it) float cbfc=1.0f/128.0f; /* sp = it->rx_signal + lineno*ANALOGTV_H + cur_hsync;*/ - for (i=-32; i<32; i++) { + for (i=-32*ANALOGTV_SCALE; i<32*ANALOGTV_SCALE; i++) { lineno = (cur_vsync + i + ANALOGTV_V) % ANALOGTV_V; sp = it->rx_signal + lineno*ANALOGTV_H; filt=0.0f; - for (j=0; j<ANALOGTV_H; j+=ANALOGTV_H/16) { + for (j=0; j<ANALOGTV_H; j+=ANALOGTV_H/(16*ANALOGTV_SCALE)) { filt += sp[j]; } filt *= it->agclevel; @@ -1039,11 +1039,11 @@ analogtv_sync(analogtv *it) for (lineno=0; lineno<ANALOGTV_V; lineno++) { - if (lineno>5 && lineno<ANALOGTV_V-3) { /* ignore vsync interval */ + if (lineno>5*ANALOGTV_SCALE && lineno<ANALOGTV_V-3*ANALOGTV_SCALE) { /* ignore vsync interval */ unsigned lineno2 = (lineno + cur_vsync + ANALOGTV_V)%ANALOGTV_V; if (!lineno2) lineno2 = ANALOGTV_V; sp = it->rx_signal + lineno2*ANALOGTV_H + cur_hsync; - for (i=-8; i<8; i++) { + for (i=-8*ANALOGTV_SCALE; i<8*ANALOGTV_SCALE; i++) { osc = (float)(ANALOGTV_H+i)/(float)ANALOGTV_H; filt=(sp[i-3]+sp[i-2]+sp[i-1]+sp[i]) * it->agclevel; @@ -1061,9 +1061,9 @@ analogtv_sync(analogtv *it) cycles. */ - if (lineno>15) { + if (lineno>15*ANALOGTV_SCALE) { sp = it->rx_signal + lineno*ANALOGTV_H + (cur_hsync&~3); - for (i=ANALOGTV_CB_START+8; i<ANALOGTV_CB_START+36-8; i++) { + for (i=ANALOGTV_CB_START+8*ANALOGTV_SCALE; i<ANALOGTV_CB_START+(36-8)*ANALOGTV_SCALE; i++) { it->cb_phase[i&3] = it->cb_phase[i&3]*(1.0f-cbfc) + sp[i]*it->agclevel*cbfc; } @@ -2009,7 +2009,7 @@ analogtv_load_ximage(analogtv *it, analogtv_input *input, unsigned long black = 0; /* not BlackPixelOfScreen (it->xgwa.screen); */ int x_length=ANALOGTV_PIC_LEN; - int y_overscan=5; /* overscan this much top and bottom */ + int y_overscan=5*ANALOGTV_SCALE; /* overscan this much top and bottom */ int y_scanlength=ANALOGTV_VISLINES+2*y_overscan; if (target_w > 0) x_length = x_length * target_w / it->xgwa.width; @@ -2297,8 +2297,8 @@ analogtv_make_font(Display *dpy, Window window, analogtv_font *f, f->text_im->bytes_per_line); } - f->x_mult=4; - f->y_mult=2; + f->x_mult=4 * ANALOGTV_SCALE; + f->y_mult=2 * ANALOGTV_SCALE; } int @@ -2415,7 +2415,7 @@ analogtv_draw_string(analogtv_input *input, analogtv_font *f, { while (*s) { analogtv_draw_char(input, f, *s, x, y, ntsc); - x += f->char_w * 4; + x += f->char_w * f->x_mult; s++; } } @@ -2424,7 +2424,7 @@ 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; + int width=strlen(s) * f->char_w * f->x_mult; x -= width/2; analogtv_draw_string(input, f, s, x, y, ntsc); diff --git a/hacks/analogtv.h b/hacks/analogtv.h index e3170f1..4b11b58 100644 --- a/hacks/analogtv.h +++ b/hacks/analogtv.h @@ -19,21 +19,29 @@ # define HAVE_MOBILE #endif +/* To simulate an NTSC CRT monitor with way more scanlines, and thus + apply an ahistorical tv-like effect to a larger image, increase + this resolution multiplier. + */ +#ifndef ANALOGTV_SCALE +# define ANALOGTV_SCALE 1 +#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_V=262*ANALOGTV_SCALE, + ANALOGTV_TOP=30*ANALOGTV_SCALE, + ANALOGTV_VISLINES=200*ANALOGTV_SCALE, 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, + ANALOGTV_H=912*ANALOGTV_SCALE, /* Each line is 63500 nS long. The sync pulse is 4700 nS long, etc. Define sync, back porch, colorburst, picture, and front porch @@ -54,7 +62,7 @@ enum { 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_HASHNOISE_LEN=6*ANALOGTV_SCALE, ANALOGTV_GHOSTFIR_LEN=4, diff --git a/hacks/anemone.c b/hacks/anemone.c index deedb27..f0ea5e8 100644 --- a/hacks/anemone.c +++ b/hacks/anemone.c @@ -409,6 +409,9 @@ 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); + XFreeGC (dpy, st->gcDraw); + XFreeGC (dpy, st->gcClear); + free (st->colors); free (st); } diff --git a/hacks/anemotaxis.c b/hacks/anemotaxis.c index 9f240e8..04c12e3 100644 --- a/hacks/anemotaxis.c +++ b/hacks/anemotaxis.c @@ -722,6 +722,9 @@ anemotaxis_free (Display *dpy, Window window, void *closure) if (st->searcher[i]) destroy_searcher (st->searcher[i]); free (st->searcher); } + XFreeGC (dpy, st->gcDraw); + XFreeGC (dpy, st->gcClear); + free (st->colors); free (st); } diff --git a/hacks/apple2-main.c b/hacks/apple2-main.c index 3063b58..c30be1f 100644 --- a/hacks/apple2-main.c +++ b/hacks/apple2-main.c @@ -813,7 +813,7 @@ struct terminal_controller_data { /* 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 char *global_program; static Bool global_fast_p; @@ -1825,8 +1825,10 @@ apple2_init (Display *dpy, Window window) } if (s) free (s); - global_program = get_string_resource (dpy, "program", "Program"); - global_fast_p = get_boolean_resource (dpy, "fast", "Boolean"); + if (!global_program) { + 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. */ @@ -1836,7 +1838,8 @@ apple2_init (Display *dpy, Window window) { st->controller = terminal_controller; st->random_p = False; - global_program = getenv ("SHELL"); + if (global_program) free (global_program); + global_program = strdup (getenv ("SHELL")); global_fast_p = True; } } @@ -1906,6 +1909,8 @@ apple2_free (Display *dpy, Window window, void *closure) if (apple2_one_frame (st->sim)) abort(); /* should have freed! */ } + if (global_program) free (global_program); + global_program = 0; free (st); } diff --git a/hacks/attraction.c b/hacks/attraction.c index 4fe22c2..25bc3b0 100644 --- a/hacks/attraction.c +++ b/hacks/attraction.c @@ -227,6 +227,7 @@ attraction_init (Display *dpy, Window window) progname, mode_str); exit (1); } + if (mode_str) free (mode_str); graph_mode_str = get_string_resource (dpy, "graphmode", "Mode"); if (! graph_mode_str) st->graph_mode = graph_none; @@ -241,6 +242,7 @@ attraction_init (Display *dpy, Window window) progname, graph_mode_str); exit (1); } + if (graph_mode_str) free (graph_mode_str); /* only allocate memory if it is needed */ if(st->graph_mode != graph_none) @@ -1044,6 +1046,9 @@ attraction_free (Display *dpy, Window window, void *closure) if (st->colors) free (st->colors); if (st->spl) free_spline (st->spl); + XFreeGC (dpy, st->draw_gc); + XFreeGC (dpy, st->erase_gc); + free (st); } diff --git a/hacks/barcode.c b/hacks/barcode.c index 31574bd..2ce609e 100644 --- a/hacks/barcode.c +++ b/hacks/barcode.c @@ -391,14 +391,12 @@ 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 @@ -1913,6 +1911,16 @@ barcode_reshape (Display *dpy, Window window, void *closure, static void barcode_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + int i; + XFreeGC (dpy, st->theGC); + st->theImage->data = 0; + XDestroyImage (st->theImage); + bitmapFree (st->theBitmap); + for (i = 0; i < st->barcode_max; i++) + bitmapFree (st->barcodes[i].bitmap); + free (st->barcodes); + free (st); } diff --git a/hacks/binaryring.c b/hacks/binaryring.c index 3cbaec2..755a1b4 100644 --- a/hacks/binaryring.c +++ b/hacks/binaryring.c @@ -554,10 +554,12 @@ static void binaryring_free ( Display* display, Window win, void *closure ) { XWindowAttributes tmp; XGetWindowAttributes(display, win, &tmp); - free( st->buffer ); - free( st->particles ); - - free ( st ); + if (st->gc) XFreeGC (display, st->gc); + if (st->pix) XFreePixmap (display, st->pix); + if (st->buf) XDestroyImage (st->buf); + free (st->buffer); + free (st->particles); + free (st); } diff --git a/hacks/blaster.c b/hacks/blaster.c index a60351a..5ab3741 100644 --- a/hacks/blaster.c +++ b/hacks/blaster.c @@ -1083,6 +1083,8 @@ blaster_free (Display *dpy, Window window, void *closure) 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->EXPLODE_COLOR_1) XFreeGC (dpy, st->EXPLODE_COLOR_1); + if (st->EXPLODE_COLOR_2) XFreeGC (dpy, st->EXPLODE_COLOR_2); if (st->stars) free (st->stars); if (st->mother) { free (st->mother->lasers); diff --git a/hacks/blitspin.c b/hacks/blitspin.c index d27271d..00d9109 100644 --- a/hacks/blitspin.c +++ b/hacks/blitspin.c @@ -256,11 +256,13 @@ blitspin_init (Display *d_arg, Window w_arg) bitmap_name = get_string_resource (st->dpy, "bitmap", "Bitmap"); if (! bitmap_name || !*bitmap_name) - bitmap_name = "(default)"; + bitmap_name = strdup ("(default)"); if (!strcasecmp (bitmap_name, "(default)") || - !strcasecmp (bitmap_name, "default")) - bitmap_name = "(screen)"; + !strcasecmp (bitmap_name, "default")) { + free (bitmap_name); + bitmap_name = strdup ("(screen)"); + } if (!strcasecmp (bitmap_name, "(builtin)") || !strcasecmp (bitmap_name, "builtin")) @@ -309,6 +311,7 @@ blitspin_init (Display *d_arg, Window w_arg) blitspin_init_2 (st); } + if (bitmap_name) free (bitmap_name); return st; } @@ -421,6 +424,18 @@ blitspin_event (Display *dpy, Window window, void *closure, XEvent *event) static void blitspin_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; +# ifdef USE_XCOPYAREA + if (st->gc_set) XFreeGC (dpy, st->gc_set); + if (st->gc_clear) XFreeGC (dpy, st->gc_clear); + if (st->gc_copy) XFreeGC (dpy, st->gc_copy); + if (st->gc_and) XFreeGC (dpy, st->gc_and); + if (st->gc_or) XFreeGC (dpy, st->gc_or); + if (st->gc_xor) XFreeGC (dpy, st->gc_xor); +# endif + if (st->gc) XFreeGC (dpy, st->gc); + XFreePixmap (dpy, st->bitmap); + free (st); } diff --git a/hacks/boxfit.c b/hacks/boxfit.c index 1b1d0d7..09d2ef7 100644 --- a/hacks/boxfit.c +++ b/hacks/boxfit.c @@ -88,6 +88,7 @@ reset_boxes (state *st) progname, s); exit (1); } + free (s); } if (st->mode == -1) @@ -514,6 +515,11 @@ boxfit_event (Display *dpy, Window window, void *closure, XEvent *event) static void boxfit_free (Display *dpy, Window window, void *closure) { + state *st = (state *) closure; + if (st->boxes) free (st->boxes); + if (st->colors) free (st->colors); + XFreeGC (dpy, st->gc); + free (st); } diff --git a/hacks/bsod.c b/hacks/bsod.c index ff6c359..f3af911 100644 --- a/hacks/bsod.c +++ b/hacks/bsod.c @@ -61,6 +61,8 @@ #include "images/gen/macbomb_png.h" #include "images/gen/apple_png.h" #include "images/gen/atm_png.h" +#include "images/gen/sun_png.h" +#include "images/gen/dvd_png.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -481,8 +483,14 @@ draw_char (struct bsod_state *bst, char c) { int dir, ascent, descent; XCharStruct ov; + Bool cursorp = (c == '\033'); /* apparently \e is non-standard now! */ + + if (cursorp) c = ' '; XTextExtents (bst->font, &c, 1, &dir, &ascent, &descent, &ov); + if (bst->x < bst->left_margin) + bst->x = bst->left_margin; + if ((bst->wrap_p || bst->word_wrap_p) && bst->x + ov.width > bst->xgwa.width - bst->right_margin - bst->xoff) { @@ -518,8 +526,30 @@ draw_char (struct bsod_state *bst, char c) } } + /* We render the character ESC as an inverted space (block cursor). */ + + if (cursorp) + { + 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); + } + XDrawImageString (bst->dpy, bst->window, bst->gc, bst->x, bst->y, &c, 1); + + if (cursorp) + { + 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); + c = ' '; + } + bst->x += ov.width; if (bst->word_wrap_p) @@ -670,6 +700,11 @@ bsod_pop (struct bsod_state *bst) int h = (long) bst->queue[bst->pos].arg4; int tox = (long) bst->queue[bst->pos].arg5; int toy = (long) bst->queue[bst->pos].arg6; + + /* If ~0, place pixmap at current text pos */ + if (tox == ~0) tox = bst->x; + if (toy == ~0) toy = bst->y - bst->font->ascent; + if (type == PIXMAP && bst->mask) { XSetClipMask (bst->dpy, bst->gc, bst->mask); @@ -838,7 +873,7 @@ make_bsod_state (Display *dpy, Window window, char buf1[1024], buf2[1024]; char buf5[1024], buf6[1024]; char buf7[1024], buf8[1024]; - const char *font1, *font3, *font4; + char *font1, *font3, *font4; bst = (struct bsod_state *) calloc (1, sizeof (*bst)); bst->queue_size = 10; @@ -939,6 +974,11 @@ make_bsod_state (Display *dpy, Window window, bst->y = bst->font->ascent + bst->left_margin + bst->yoff; XSetWindowBackground (dpy, window, gcv.background); + + if (font1) free (font1); + if (font3) free (font3); + if (font4) free (font4); + return bst; } @@ -956,6 +996,8 @@ free_bsod_state (struct bsod_state *bst) XFreePixmap(bst->dpy, bst->mask); XFreeFont (bst->dpy, bst->font); + if (bst->fontB && bst->fontB != bst->font) XFreeFont (bst->dpy, bst->fontB); + if (bst->fontC && bst->fontC != bst->font) XFreeFont (bst->dpy, bst->fontC); XFreeGC (bst->dpy, bst->gc); for (i = 0; i < bst->queue_size; i++) @@ -3217,6 +3259,36 @@ sparc_solaris (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "solaris", "Solaris"); int i; + int pix_w = 0, pix_h = 0; + int char_width; + Pixmap mask = 0; + Pixmap pixmap = image_data_to_pixmap (dpy, window, + sun_png, sizeof(sun_png), + &pix_w, &pix_h, &mask); +# if 0 + if (pixmap && + pix_w < bst->xgwa.width / 2 && + pix_h < bst->xgwa.height / 2) + { + int i, n = 1; + if (bst->xgwa.width > 2560) n++; /* Retina displays */ + for (i = 0; i < n; i++) + { + pixmap = double_pixmap (dpy, bst->xgwa.visual, + bst->xgwa.depth, pixmap, pix_w, pix_h); + mask = double_pixmap (dpy, bst->xgwa.visual, 1, mask, pix_w, pix_h); + pix_w *= 2; + pix_h *= 2; + } + } +# endif + + char_width = (bst->font->per_char + ? bst->font->per_char['n'-bst->font->min_char_or_byte2].width + : bst->font->min_bounds.width); + + bst->pixmap = pixmap; + bst->mask = mask; bst->scroll_p = True; bst->wrap_p = True; @@ -3224,8 +3296,14 @@ sparc_solaris (Display *dpy, Window window) bst->top_margin = bst->bottom_margin = bst->xgwa.height * 0.07; bst->y = bst->top_margin + bst->yoff + bst->font->ascent; +# if 0 + /* This looks correct if we have a desktop image behind it, but doesn't + make sense if it's a photo. So let's skip it. */ BSOD_IMG (bst); BSOD_PAUSE (bst, 3000000); +# endif + + BSOD_LINE_DELAY (bst, 20000); BSOD_INVERT(bst); BSOD_RECT (bst, True, @@ -3260,30 +3338,359 @@ sparc_solaris (Display *dpy, Window window) " 100131480 10012a6e0 0\n" "End traceback...\n" "panic[cpu0]/thread=30000953a20: trap\n" - "syncing file systems..."); + "syncing file systems...\033"); BSOD_PAUSE (bst, 3000000); - BSOD_TEXT (bst, LEFT, " 1 done\n"); - BSOD_TEXT (bst, LEFT, "dumping to /dev/dsk/c0t0d0s3, offset 26935296\n"); + BSOD_TEXT (bst, LEFT, "\b 1 done\n"); + BSOD_TEXT (bst, LEFT, "dumping to /dev/dsk/c0t0d0s3, offset 26935296\n\033"); BSOD_PAUSE (bst, 2000000); - + BSOD_TEXT (bst, LEFT, "\b"); 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); + sprintf (buf, "\r %3d%% done\033", i); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 100000); } BSOD_TEXT (bst, LEFT, - ": 2803 pages dumped, compression ratio 2.88, dump succeeded\n"); + "\b: 2803 pages dumped, compression ratio 2.88, dump succeeded\n\033"); BSOD_PAUSE (bst, 2000000); BSOD_TEXT (bst, LEFT, - "rebooting...\n" - "Resetting ..."); + "\brebooting...\n" + "Resetting ...\n\033"); + + 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_MOVETO (bst, bst->left_margin, bst->top_margin + bst->font->ascent); + BSOD_PAUSE (bst, 1000000); + + BSOD_TEXT (bst, LEFT, + "Starting real time clock...\n" + "Probing /sbus@1,f8000000 at 0,0 dma esp sd st le\n" + "Probing /sbus@1,f8000000 at 1,0 Invalid FCode start byte at ffe70000\n" + "Probing /sbus@1,f8000000 at 2,0 Invalid FCode start byte at ffe70000\n" + "Probing /sbus@1,f8000000 at 3,0 bwtwo\n" + "\n"); + + BSOD_PIXMAP (bst, 0, 0, pix_w, pix_h, ~0, ~0); + BSOD_MARGINS (bst, + bst->left_margin + char_width * 12, + bst->top_margin); + BSOD_TEXT (bst, LEFT, + "SPARCstation IPC, Keyboard Present\n" + "ROM Rev. 2.9, 16 MB memory installed, Serial #12648190.\n" + "Ethernet address 8:0:20:37:1:87, Host ID: 52c0fefe.\n"); + BSOD_MARGINS (bst, bst->left_margin, bst->top_margin); + + BSOD_TEXT (bst, LEFT, "\n\n\033"); + BSOD_PAUSE (bst, 3000000); + BSOD_TEXT (bst, LEFT, "\r"); + + BSOD_TEXT (bst, LEFT, "Testing 16 megs of memory. Still to go \033 16"); + + for (i = 16; i > 0; i--) + { + char buf[100]; + sprintf (buf, "\b\b%2d", i); + BSOD_TEXT (bst, LEFT, buf); + BSOD_PAUSE (bst, 100000); + } + BSOD_TEXT (bst, LEFT, "\b\b\b\b 0\n" + "Initializing 16 megs of memory at addr 0\033 16"); + for (i = 16; i >= 0; i--) + { + char buf[100]; + sprintf (buf, "\b\b%2d", i); + BSOD_TEXT (bst, LEFT, buf); + BSOD_PAUSE (bst, 30000); + } + BSOD_TEXT (bst, LEFT, "\r" + " \r" + "Boot device: /sbus/le@0,c00000 File and args:\n\033"); + + { + int n = (random() % 10); + for (i = 0; i < n; i++) + { + BSOD_PAUSE (bst, 3000000); + BSOD_TEXT (bst, LEFT, "\rTimeout waiting for ARP/RARP packet\n\033"); + } + } + BSOD_TEXT (bst, LEFT, "\r"); + + BSOD_TEXT (bst, LEFT, + "Internal loopback test -- Wrong packet length;" + " expected 36, observed 1600\n" + "Can't open boot device\n" + "\n" + "Type b (boot), c (continue), or n (new command mode)\n" + ">"); + BSOD_CURSOR (bst, CURSOR_BLOCK, 500000, 10); + BSOD_TEXT (bst, LEFT, "n\n"); + BSOD_PAUSE (bst, 500000); + BSOD_TEXT (bst, LEFT, "Type help for more information\n" + "ok "); + + BSOD_CURSOR (bst, CURSOR_BLOCK, 500000, 4); + BSOD_CHAR_DELAY (bst, 80000); + BSOD_TEXT (bst, LEFT, /* "test net" */ + "t\033\be\033\bs\033\bt\033\b \033\bn\033\be\033\bt\033\b"); + BSOD_CURSOR (bst, CURSOR_BLOCK, 500000, 2); + BSOD_TEXT (bst, LEFT, "\n\033"); + BSOD_CHAR_DELAY (bst, 0); + + BSOD_PAUSE (bst, 1000000); + BSOD_TEXT (bst, LEFT, "\r Lance register test -- succeeded.\n\033"); + BSOD_PAUSE (bst, 1000000); + BSOD_TEXT (bst, LEFT, "\r Internal loopback test -- succeeded.\n\033"); + BSOD_PAUSE (bst, 1000000); + BSOD_TEXT (bst, LEFT, "\r External loopback test -- succeeded.\n" + "ok "); + BSOD_CURSOR (bst, CURSOR_BLOCK, 500000, 8); + + BSOD_TEXT (bst, LEFT, "\rok "); + BSOD_CURSOR (bst, CURSOR_BLOCK, 500000, 4); + BSOD_CHAR_DELAY (bst, 80000); + BSOD_TEXT (bst, LEFT, /* "boot cdrom" */ + "b\033\bo\033\bo\033\bt\033\b \033\bc\033\bd\033\br\033\bo\033\bm\033\b"); + BSOD_TEXT (bst, LEFT, " \n"); + BSOD_CHAR_DELAY (bst, 0); + BSOD_TEXT (bst, LEFT, + "\rBoot device: /sbus/esp@0,800000/sd@6,0:c File and args:\n\033"); + BSOD_PAUSE (bst, 1000000); + BSOD_TEXT (bst, LEFT, + "\rroot on fstype 4.3\n" + "Boot: vmunix\n\033"); + + BSOD_TEXT (bst, LEFT, "\rSize: 696320+"); + BSOD_CHAR_DELAY (bst, 5000); + BSOD_INVERT(bst); + BSOD_TEXT (bst, LEFT, /* spinner */ + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" + "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/" "\b-\b\\\b|\b/"); + BSOD_INVERT(bst); + BSOD_TEXT (bst, LEFT, "\b+"); + BSOD_CHAR_DELAY (bst, 0); + BSOD_TEXT (bst, LEFT, + "2218504+28056 bytes\n\033"); + BSOD_PAUSE (bst, 1000000); + + i = random() % 3; + + if (i == 0) + { + BSOD_TEXT (bst, LEFT, + "\rSunOS Release 4.1.1 (MUNIX) #1: Thu Oct 11 11:22:48 PDT 1990\n" + "Copyright (c) 1983-1990, Sun Microsystems, Inc.\n" + "mem = 16384K (0x1000000)\n" + "avail mem = 12865536\n" + "Ethernet address = 8:0:20:37:1:87\n" + "No FPU in configuration\n" + "cpu = SUNW,Sun 4/40\n" + "zs0 at obio 0xf1000000 pri 12\n" + "zs1 at obio 0xf0000000 pri 12\n" + "sbus0 at SBus slot 0 0x0\n" + "dma0 at SBus slot 0 0x400000\n" + "esp0 at SBus slot 0 0x800000 pri 3\n" + "\033"); + } + else if (i == 1) + { + BSOD_TEXT (bst, LEFT, + "\rSunOS Release 5.6 Version Generic [UNIX(R) System V Release 4.0]\n" + "Copyright (c) 1983-1997, Sun Microsystems, Inc.\n" + "No FPU in configuration\n" + "WARNING: kbd: Unknown keyboard type, Type 3 assumed.\n" + "WARNING: kbd: Unknown keyboard type, Type 3 assumed.\n" + "Configuring devices...\n" + "\033"); + BSOD_PAUSE (bst, 1000000); + BSOD_TEXT (bst, LEFT, + "\rWARNING: /sbus@1,f8000000/esp@0,800000/sd@6,0 (sd6):\n" + " incomplete read- retrying\n" + "\n" + "loadkeys: ioctl(KIOCLAYOUT): Invalid argument\n" + "\033"); + } + else + { + BSOD_TEXT (bst, LEFT, + "\rSunOS Release 5.3 Version Generic [UNIX(R) System V Release 4.0]\n" + "Copyright (c) 1983-1993, Sun Microsystems, Inc.\n" + "No FPU in configuration\n" + "WARNING: /sbus@1,f8000000/esp@0,800000/sd@3,0 (sd3):\n" + " corrupt label - wrong magic number\n" + "\n" + "\\ unexpected data phase\n\033"); + for (i = 0; i < 3; i++) + { + BSOD_PAUSE (bst, 3000000); + if (i > 0) + BSOD_TEXT (bst, LEFT, + "\r polled command timeout\n"); + BSOD_TEXT (bst, LEFT, + "\resp: State=DATA Last State=UNKNOWN\n" + "esp: Latched stat=0x11<XZERO,IO> intr=0x10<BUS,FCMO>" + " fifo 0x0\n" + "esp: lst msg out: IDENTIFY; lst msg in: COMMAND COMPLETE\n" + "esp: DMA csr=0x10<INTEN>\n" + "esp: addr=fff0100f dmacnt=8000 last=fff01008 last_cnt=7\n" + "esp: Cmd dump for Target 6 Lun 0:\n" + "esp: cdblen=6, cdb=[ 0x0 0x0 0x0 0x0 0x1 0x0 ]\n" + "esp: pkt_state 0x3<SEL,ARB> pkt_flags 0x10000" + " pkt_statistics 0x0\n" + "esp: cmd_flags=0x10022 cmd_timeout=120\n" + "\033"); + } + BSOD_PAUSE (bst, 3000000); + BSOD_TEXT (bst, LEFT, + "\rWARNING: /sbus@1,f8000000/esp@0,800000/sd@6,0 (sd6):\n" + " incomplete read- retrying\n" + "\n" + "loadkeys: ioctl(KIOCLAYOUT): Invalid argument\n" + "\033"); + } + + BSOD_PAUSE (bst, 1000000); + BSOD_TEXT (bst, LEFT, + "\rsd1 at esp0 target 1 lun 0\n" + "sd1: corrupt label - wrong magic number\n" + "sd1: Vendor ' SEAGAT', product ' ', 786432 512 byte blocks\n" + "sr0: Unrecongized vendor 'Sony '," + " product 'CDU-76S 'sr0 at esp0 target 6 lun 0\n" + "le0 at SBus slot 0 0xc00000 pri 5\n" + "fd0 at obio 0xf7200000 pri 11\n\033"); + BSOD_PAUSE (bst, 1000000); + BSOD_TEXT (bst, LEFT, + "\rrd0: using preloaded munixfs\n" + "WARNING: TOD clock not initialized -- CHECK AND RESET THE DATE!\n" + "root on rd0a fstype 4.2\n" + "swap on ns0b fstype spec size 12480K\n" + "dump on ns0b fstype spec size 12468K\n" + "\033"); + BSOD_PAUSE (bst, 4000000); + + i = random() % 3; + + if (i == 0) + { + BSOD_TEXT (bst, LEFT, + "\rStarting OpenWindows...\n" + "\n" + "\n" + "waiting for X server to begin accepting connections \033"); + BSOD_PAUSE (bst, 2500000); + BSOD_TEXT (bst, LEFT, "\b.\033"); + BSOD_PAUSE (bst, 2500000); + BSOD_TEXT (bst, LEFT, "\b \n.\033"); + for (i = 0; i < 10; i++) + { + BSOD_PAUSE (bst, 2500000); + BSOD_TEXT (bst, LEFT, "\b.\033"); + BSOD_PAUSE (bst, 2500000); + BSOD_TEXT (bst, LEFT, "\b \n.\033"); + } + } + else if (i == 1) + { + BSOD_TEXT (bst, LEFT, + "\rCan't invoke /sbin/init, error 13\n" + "Can't invoke /etc/init, error 13\n" + "Can't invoke /bin/init, error 13\n" + "Can't invoke /usr/etc/init, error 13\n" + "Can't invoke /usr/bin/init, error 13\n" + "panic: icode\n" + "syncing file systems...\033"); + BSOD_PAUSE (bst, 2000000); + BSOD_TEXT (bst, LEFT, "\b done\n"); + BSOD_TEXT (bst, LEFT, + "00000 low-memory static kernel pages\n" + "00888 additional static and sysmap kernel pages\n" + "00000 dynamic kernel data pages\n" + "00008 additional user structure pages\n" + "00000 segmap kernel pages\n" + "00000 segvn kernel pages\n" + "00000 current user process pages\n" + "00000 user stack pages\n" + "00896 total pages (896 chunks)\n" + "\n" + "dumping to vp ff007dd4, offset 17768\n" + "0 total pages, dump failed: error 19\n" + "rebooting...\n"); + } + else + { + BSOD_TEXT (bst, LEFT, + "\r \n" + "What would you like to do?\n" + " 1 - install SunOS mini-root\n" + " 2 - exit to single user shell\n" + "Enter a 1 or 2: "); + BSOD_CURSOR (bst, CURSOR_BLOCK, 500000, 4); + BSOD_TEXT (bst, LEFT, + "2\n" + "you may restart this script by typing <cntl-D>\n# "); + BSOD_CURSOR (bst, CURSOR_BLOCK, 500000, 4); + BSOD_CHAR_DELAY (bst, 80000); + BSOD_TEXT (bst, LEFT, "l\033\bs\033\b"); + BSOD_TEXT (bst, LEFT, " \n"); + BSOD_CHAR_DELAY (bst, 0); + BSOD_TEXT (bst, LEFT, + ".MUNIXFS bin extract stand\n" + ".profile dev lib tmp\n" + "README etc sbin usr\n" + "# "); + BSOD_CURSOR (bst, CURSOR_BLOCK, 500000, 4); + BSOD_CHAR_DELAY (bst, 80000); + BSOD_TEXT (bst, LEFT, /* ". extract" */ + ".\033\b \033\be\033\bx\033\bt\033\br\033\ba\033\bc\033\bt\033\b"); + BSOD_TEXT (bst, LEFT, " \n"); + BSOD_CHAR_DELAY (bst, 0); + BSOD_TEXT (bst, LEFT, + "using cdrom partition number 2\n" + "esp0: data transfer overrun\n" + " State=DATA Last State=DATA_DNE\n" + " Latched stat=0x11<XZERO,IO> intr=0x10<BUS> fifo 0x0\n" + " lst msg out: EXTENDED; lst msg in: COMMAND COMPLETE\n" + " DMA csr=0x10<INTEN>\n" + " addr=fff026d0 last=fff024d0 last_count=200\n" + " Cmd dump for Target 6 Lun 0:\n" + " cdb=[ 0x8 0x0 0x0 0x0 0x1 0x0 ]\n" + " pkt_state 0xf<XFER,CMD,SEL,ARB> pkt_flags 0x0" + " pkt_statistics 0x0\n" + " Mapped Dma Space:\n" + " Base = 0x24d0 Count = 0x200\n" + " Transfer History:\n" + " Base = 0x24d0 Count = 0x200\n"); + } + + BSOD_CURSOR (bst, CURSOR_BLOCK, 500000, 8); + + XClearWindow(dpy, window); return bst; } @@ -5023,6 +5430,122 @@ apple2ransomware (Display *dpy, Window window) +static void +a2controller_encom (apple2_sim_t *sim, int *stepno, + double *next_actiontime) +{ + apple2_state_t *st=sim->st; + + struct mydata { + const char *str; + Bool bold_p; + } *mine; + + if (!sim->controller_data) + sim->controller_data = calloc(sizeof(struct mydata),1); + mine=(struct mydata *) sim->controller_data; + + switch(*stepno) { + case 0: + + st->gr_mode |= A2_GR_FULL; + a2_cls(st); + a2_goto(st,0,35); + a2_prints(st, "ENCOM"); + a2_goto(st,23,0); + *stepno = 10; + *next_actiontime += 6; + break; + + case 10: + a2_cls(st); + a2_goto(st,0,0); + *stepno = 11; + *next_actiontime += 1; + break; + + case 11: + a2_goto(st, 1, 0); + *stepno = 12; + mine->str = ("\n" + "\r\n" + "\r\n" + "\r\n" + "\r\n" + "\r\n" + "\r\n" + "\r\n" + "\r\n" + "SEPT 22, 18:32:21 PM\n" + "\n" + " YOUR ACCESS SUSPENDED\n" + " PLEASE REPORT TO DILLINGER\n" + " IMMEDIATELY\n" + " AUTHORIZATION: MASTER CONTROL\n" + " PROGRAM\n" + "\n" + "\r\r\r\r\r" + " END OF LINE\n" + "\n" + "\n" + "\n" + "\n"); + break; + + case 12: + { + char c = *mine->str; + mine->str++; + + if (c == 0) + { + *next_actiontime += 30; + *stepno = 0; + } + else + { + if (c == '\r') + *next_actiontime += 0.2; + if (mine->bold_p) + c |= 0xC0; + a2_printc_noscroll(st, c); + } + } + break; + + case A2CONTROLLER_FREE: + return; + } +} + + +static int +a2_encom_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_encom); + bst->closure = sim; + } + + if (! apple2_one_frame (sim)) { + bst->closure = 0; + } + + return 10000; +} + +static struct bsod_state * +encom (Display *dpy, Window window) +{ + struct bsod_state *bst = make_bsod_state (dpy, window, "encom", "Encom"); + bst->draw_cb = a2_encom_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. */ @@ -5080,6 +5603,56 @@ atm (Display *dpy, Window window) } +static struct bsod_state * +dvd (Display *dpy, Window window) +{ + struct bsod_state *bst = make_bsod_state (dpy, window, "dvd", "DVD"); + int pix_w, pix_h; + float scale = 0.15; + Pixmap mask = 0; + Pixmap pixmap = image_data_to_pixmap (dpy, window, + dvd_png, sizeof(dvd_png), + &pix_w, &pix_h, &mask); + int i = 0; + int x, y, dx, dy; + int steps = 10000; + + XClearWindow (dpy, window); + + while (pix_w <= bst->xgwa.width * scale && + pix_h <= bst->xgwa.height * scale) + { + pixmap = double_pixmap (dpy, bst->xgwa.visual, bst->xgwa.depth, + pixmap, pix_w, pix_h); + mask = double_pixmap (dpy, bst->xgwa.visual, 1, mask, pix_w, pix_h); + pix_w *= 2; + pix_h *= 2; + i++; + } + + bst->pixmap = pixmap; + bst->mask = mask; + x = random() % (bst->xgwa.width - pix_w); + y = random() % (bst->xgwa.height - pix_h); + dx = random() & 1 ? 1 : -1; + dy = random() & 1 ? 1 : -1; + + BSOD_INVERT(bst); + for (i = 0; i < steps; i++) + { + BSOD_RECT (bst, True, x, y, pix_w, pix_h); + if (x + dx < 0 || x + dx + pix_w > bst->xgwa.width) dx = -dx; + if (y + dy < 0 || y + dy + pix_h > bst->xgwa.height) dy = -dy; + x += dx; + y += dy; + BSOD_PIXMAP (bst, 0, 0, pix_w, pix_h, x, y); + BSOD_PAUSE (bst, 1000000 / 30.0); + } + + return bst; +} + + /* An Android phone boot loader, by jwz. */ static struct bsod_state * @@ -5355,6 +5928,8 @@ static const struct { { "GLaDOS", glados }, { "Android", android }, { "VMware", vmware }, + { "Encom", encom }, + { "DVD", dvd }, }; @@ -5385,6 +5960,7 @@ hack_title (struct driver_state *dst) XStoreName (dst->bst->dpy, dst->bst->window, nname); free (nname); } + if (oname) free (oname); # endif /* !HAVE_JWXYZ */ } @@ -5673,6 +6249,8 @@ static const char *bsod_defaults [] = { "*doGLaDOS: True", "*doAndroid: True", "*doVMware: True", + "*doEncom: True", + "*doDVD: True", ".foreground: White", ".background: Black", @@ -6000,6 +6578,10 @@ static const XrmOptionDescRec bsod_options [] = { { "-no-android", ".doAndroid", XrmoptionNoArg, "False" }, { "-vmware", ".doVMware", XrmoptionNoArg, "True" }, { "-no-vmware", ".doVMware", XrmoptionNoArg, "False" }, + { "-encom", ".doEncom", XrmoptionNoArg, "True" }, + { "-no-encom", ".doEncom", XrmoptionNoArg, "False" }, + { "-dvd", ".doDVD", XrmoptionNoArg, "True" }, + { "-no-dvd", ".doDVD", XrmoptionNoArg, "False" }, ANALOGTV_OPTIONS { 0, 0, 0, 0 } }; diff --git a/hacks/bubbles.c b/hacks/bubbles.c index 9cb2678..eefe048 100644 --- a/hacks/bubbles.c +++ b/hacks/bubbles.c @@ -129,7 +129,7 @@ struct state { #ifdef FANCY_BUBBLES int num_bubble_pixmaps; - Bubble_Step **step_pixmaps; + Bubble_Step **step_pixmaps, **def_list; #endif Bool simple; @@ -1214,6 +1214,8 @@ default_to_pixmaps (struct state *st) init_default_bubbles(); + st->def_list = (Bubble_Step **)xmalloc((num_default_bubbles + 1) * + sizeof(Bubble_Step *)); for (i = 0; i < num_default_bubbles; i++) { newpix = (Bubble_Step *)xmalloc(sizeof(Bubble_Step)); make_pixmap_from_default(st, @@ -1221,6 +1223,7 @@ default_to_pixmaps (struct state *st) default_bubbles[i].size, newpix); /* Now add to list */ + st->def_list[i] = newpix; if (pixmap_list == (Bubble_Step *)NULL) { pixmap_list = newpix; } else { @@ -1278,6 +1281,8 @@ get_resources(struct state *st) else fprintf (stderr, "%s: bogus mode: \"%s\"\n", progname, s); + if (s) free (s); + st->trails = get_boolean_resource(st->dpy, "trails", "Boolean"); st->drop_dir = (st->drop ? 1 : -1); if (st->drop || rise) @@ -1428,9 +1433,38 @@ bubbles_event (Display *dpy, Window window, void *closure, XEvent *event) } static void +free_bubble (Display *dpy, Bubble_Step *b) +{ + if (b->ball) XFreePixmap (dpy, b->ball); + if (b->shape_mask) XFreePixmap (dpy, b->shape_mask); + if (b->draw_gc) XFreeGC (dpy, b->draw_gc); + if (b->erase_gc) XFreeGC (dpy, b->erase_gc); + free (b); +} + +static void bubbles_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + int i; + + /* #### The lifetime of objects in this program is fucking incomprehensible. + I give up. */ + + /* for (i = 0; i < num_default_bubbles; i++) + free_bubble (dpy, st->def_list[i]); */ + for (i = 0; i < st->num_bubble_pixmaps; i++) + free_bubble (dpy, st->step_pixmaps[i]); + for (i = 0; i < st->mesh_cells; i++) + free (st->adjacent_list[i]); + /* for (i = 0; i < st->mesh_cells; i++) + free_bubble (dpy, st->mesh[i]); */ + if (st->draw_gc) XFreeGC (dpy, st->draw_gc); + if (st->erase_gc) XFreeGC (dpy, st->erase_gc); + free (st->adjacent_list); + free (st->def_list); + free (st->step_pixmaps); + free (st->mesh); free (st); } diff --git a/hacks/bumps.c b/hacks/bumps.c index fa728e6..d24ce00 100644 --- a/hacks/bumps.c +++ b/hacks/bumps.c @@ -376,6 +376,8 @@ static void SetPalette(Display *dpy, SBumps *pBumps, XWindowAttributes *pXWinAtt #endif /* VERBOSE */ XSetWindowBackground( pBumps->dpy, pBumps->Win, pBumps->aColors[ 0 ] ); + + if (sColor) free (sColor); } @@ -418,6 +420,7 @@ static void InitBumpMap_2(Display *dpy, SBumps *pBumps) XClearWindow (pBumps->dpy, pBumps->Win); XSync (pBumps->dpy, 0); + if (pBumps->aBumpMap) free (pBumps->aBumpMap); pBumps->aBumpMap = malloc( pBumps->iWinWidth * pBumps->iWinHeight * sizeof(uint16_t) ); nSoften = get_integer_resource(dpy, "soften", "Integer" ); @@ -606,9 +609,12 @@ static void DestroySpotLight( SSpotLight *pSpotLight ) { free( pSpotLight->aLigh static void DestroyBumps( SBumps *pBumps ) { DestroySpotLight( &pBumps->SpotLight ); + free (pBumps->xColors); free( pBumps->aColors ); free( pBumps->aBumpMap ); destroy_xshm_image( pBumps->dpy, pBumps->pXImage, &pBumps->XShmInfo ); + XFreeGC (pBumps->dpy, pBumps->GraphicsContext); + free(pBumps); } diff --git a/hacks/ccurve.c b/hacks/ccurve.c index 23b53e8..a4423b2 100644 --- a/hacks/ccurve.c +++ b/hacks/ccurve.c @@ -733,6 +733,7 @@ ccurve_draw (Display *dpy, Window window, void *closure) { st->draw_segment_count = lengths [random () % (sizeof (lengths) / sizeof (int))]; + if (st->draw_segments) free (st->draw_segments); st->draw_segments = (Segment*)(malloc ((st->draw_segment_count) * sizeof (Segment))); select_pattern (st->draw_segment_count, st->draw_segments); @@ -839,6 +840,10 @@ ccurve_event (Display *dpy, Window window, void *closure, XEvent *event) static void ccurve_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + XFreeGC (dpy, st->context); + if (st->draw_segments) free (st->draw_segments); + free (st); } diff --git a/hacks/celtic.c b/hacks/celtic.c index 890b398..232adb6 100644 --- a/hacks/celtic.c +++ b/hacks/celtic.c @@ -911,6 +911,7 @@ celtic_init (Display *d_arg, Window w_arg) XGetWindowAttributes (st->dpy, st->window, &st->xgwa); + if (st->colors) free (st->colors); assert(st->colors = (XColor *) calloc (st->ncolors,sizeof(XColor))); if (get_boolean_resource(st->dpy, "mono", "Boolean")) @@ -983,7 +984,8 @@ celtic_draw (Display *dpy, Window window, void *closure) pattern_del(st->pattern); } st->pattern = NULL; - graph_del(st->graph); + if (st->graph) graph_del(st->graph); + st->graph = NULL; /* recolor each time */ st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer"); @@ -1124,6 +1126,13 @@ static void celtic_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->gc); + XFreeGC (dpy, st->shadow_gc); + XFreeGC (dpy, st->gc_graph); + if (st->pattern) pattern_del (st->pattern); + st->pattern = 0; + if (st->graph) graph_del (st->graph); + if (st->eraser) eraser_free (st->eraser); free (st); } diff --git a/hacks/check-configs.pl b/hacks/check-configs.pl index 7a7d0bb..7cc60b4 100755 --- a/hacks/check-configs.pl +++ b/hacks/check-configs.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2008-2017 Jamie Zawinski <jwz@jwz.org> +# Copyright © 2008-2018 Jamie Zawinski <jwz@jwz.org> # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -21,7 +21,7 @@ use diagnostics; use strict; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.26 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.28 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; my $debug_p = 0; @@ -997,17 +997,17 @@ sub build_android(@) { $write_files{"$xml_dir/${saver_underscore}_wallpaper.xml"} = $wallpaper; $daydream_java .= - (" public static class $saver_class extends org.jwz.xscreensaver.Daydream {\n" . + (" public static class $saver_class extends $package.Daydream {\n" . " }\n" . "\n"); $wallpaper_java .= - (" public static class $saver_class extends org.jwz.xscreensaver.Wallpaper {\n" . + (" public static class $saver_class extends $package.Wallpaper {\n" . " }\n" . "\n"); $settings_java .= - (" public static class $saver_class extends org.jwz.xscreensaver.Settings\n" . + (" public static class $saver_class extends $package.Settings\n" . " implements SharedPreferences.OnSharedPreferenceChangeListener {\n" . " }\n" . "\n"); @@ -1035,7 +1035,7 @@ sub build_android(@) { $manifest .= "<activity android:name=\"$package.Settings\" />\n"; $manifest .= ("<activity android:name=\"" . - "org.jwz.xscreensaver.Activity\"\n" . + "$package.Activity\"\n" . " android:theme=\"\@android:style/Theme.Holo\"\n" . " android:label=\"\@string/app_name\">\n" . " <intent-filter>\n" . @@ -1056,7 +1056,7 @@ sub build_android(@) { $manifest .= ("<activity android:name=\"" . - "org.jwz.xscreensaver.TVActivity\"\n" . + "$package.TVActivity\"\n" . " android:theme=\"\@android:style/Theme.Holo\"\n" . " android:label=\"\@string/app_name\">\n" . " <intent-filter>\n" . @@ -1091,7 +1091,7 @@ sub build_android(@) { " android:versionCode=\"$versb\"\n" . " android:versionName=\"$vers\">\n" . - " <uses-sdk android:minSdkVersion=\"14\"" . + " <uses-sdk android:minSdkVersion=\"16\"" . " android:targetSdkVersion=\"19\" />\n" . " <uses-feature android:glEsVersion=\"0x00010001\"\n" . @@ -1117,23 +1117,23 @@ sub build_android(@) { " </application>\n" . "</manifest>\n"); - $daydream_java = ("package org.jwz.xscreensaver.gen;\n" . + $daydream_java = ("package $package.gen;\n" . "\n" . - "import org.jwz.xscreensaver.jwxyz;\n" . + "import $package.jwxyz;\n" . "\n" . "public class Daydream {\n" . $daydream_java . "}\n"); - $wallpaper_java = ("package org.jwz.xscreensaver.gen;\n" . + $wallpaper_java = ("package $package.gen;\n" . "\n" . - "import org.jwz.xscreensaver.jwxyz;\n" . + "import $package.jwxyz;\n" . "\n" . "public class Wallpaper {\n" . $wallpaper_java . "}\n"); - $settings_java = ("package org.jwz.xscreensaver.gen;\n" . + $settings_java = ("package $package.gen;\n" . "\n" . "import android.content.SharedPreferences;\n" . "\n" . diff --git a/hacks/cloudlife.c b/hacks/cloudlife.c index 4b65f9e..123dd13 100644 --- a/hacks/cloudlife.c +++ b/hacks/cloudlife.c @@ -382,6 +382,11 @@ cloudlife_event (Display *dpy, Window window, void *closure, XEvent *event) { XClearWindow (dpy, window); st->cycles = 0; + if (st->field) { + free (st->field->cells); + free (st->field->new_cells); + free (st->field); + } st->field = init_field(st); return True; } @@ -392,6 +397,12 @@ static void cloudlife_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + free (st->field->cells); + free (st->field->new_cells); + free (st->field); + free (st->colors); + XFreeGC (dpy, st->fgc); + XFreeGC (dpy, st->bgc); free (st); } diff --git a/hacks/compass.c b/hacks/compass.c index 1dc1d3e..1678ca9 100644 --- a/hacks/compass.c +++ b/hacks/compass.c @@ -957,6 +957,18 @@ compass_event (Display *dpy, Window window, void *closure, XEvent *event) static void compass_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + int i; + XFreeGC (dpy, st->ptr_gc); + XFreeGC (dpy, st->erase_gc); + for (i = 0; i < 4; i++) + if (st->discs[i]) { + XFreeGC (dpy, st->discs[i]->gc); + free (st->discs[i]); + } + if (st->ba) XFreePixmap (dpy, st->ba); + if (st->bb) XFreePixmap (dpy, st->bb); + free (st); } diff --git a/hacks/compile_axp.com b/hacks/compile_axp.com index c50e0f9..9fab007 100644 --- a/hacks/compile_axp.com +++ b/hacks/compile_axp.com @@ -1,5 +1,6 @@ $ 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]) ANALOGTV-CLI.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 diff --git a/hacks/compile_decc.com b/hacks/compile_decc.com index c50e0f9..9fab007 100644 --- a/hacks/compile_decc.com +++ b/hacks/compile_decc.com @@ -1,5 +1,6 @@ $ 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]) ANALOGTV-CLI.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 diff --git a/hacks/config/README b/hacks/config/README index 9771a89..5981463 100644 --- a/hacks/config/README +++ b/hacks/config/README @@ -4,8 +4,8 @@ a screen saver and locker for the X window system by Jamie Zawinski - version 5.40 - 12-Aug-2018 + version 5.42 + 28-Dec-2018 https://www.jwz.org/xscreensaver/ diff --git a/hacks/config/bsod.xml b/hacks/config/bsod.xml index ef18e21..0d18218 100644 --- a/hacks/config/bsod.xml +++ b/hacks/config/bsod.xml @@ -40,12 +40,14 @@ <boolean id="atari" _label="Atari" arg-set="-atari"/> <boolean id="macx" _label="MacOS X" arg-unset="-no-macx"/> <boolean id="os390" _label="OS/390" arg-unset="-no-os390"/> + <boolean id="encom" _label="Encom" arg-unset="-no-encom"/> </vgroup> <vgroup> <boolean id="vms" _label="VMS" arg-unset="-no-vms"/> <boolean id="hvx" _label="HVX/GCOS6" arg-unset="-no-hvx"/> <boolean id="blitdamage" _label="NCD X Terminal " arg-unset="-no-blitdamage"/> <boolean id="atm" _label="ATM" arg-unset="-no-atm"/> + <boolean id="dvd" _label="DVD" arg-unset="-no-dvd"/> </vgroup> <vgroup> <boolean id="bsd" _label="BSD" arg-set="-bsd"/> diff --git a/hacks/config/handsy.xml b/hacks/config/handsy.xml new file mode 100644 index 0000000..2ff9608 --- /dev/null +++ b/hacks/config/handsy.xml @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<screensaver name="handsy" _label="Handsy" gl="yes"> + + <command arg="-root"/> + + <video href="https://www.youtube.com/watch?v=awI8EawYTdE"/> + + <hgroup> + <vgroup> + <number id="delay" type="slider" arg="-delay %" + _label="Frame rate" _low-label="Low" _high-label="High" + low="0" high="100000" default="30000" + convert="invert"/> + + <number id="speed" type="slider" arg="-speed %" + _label="Speed" _low-label="Slow" _high-label="Fast" + low="0.05" high="2.0" default="1.0"/> + + <number id="count" type="slider" arg="-count %" + _label="Number of hands" _low-label="Two" _high-label="Many" + low="2" high="32" default="2"/> + </vgroup> + + <vgroup> + + <boolean id="wander" _label="Wander" arg-unset="-no-wander"/> + <select id="rotation"> + <option id="no" _label="Don't rotate" arg-set="-spin 0"/> + <option id="x" _label="Rotate around X axis" arg-set="-spin X"/> + <option id="y" _label="Rotate around Y axis" arg-set="-spin Y"/> + <option id="z" _label="Rotate around Z axis" arg-set="-spin Z"/> + <option id="xy" _label="Rotate around X and Y axes"/> + <option id="xz" _label="Rotate around X and Z axes" arg-set="-spin XZ"/> + <option id="yz" _label="Rotate around Y and Z axes" arg-set="-spin YZ"/> + <option id="xyz" _label="Rotate around all three axes" arg-set="-spin XYZ"/> + </select> + + <select id="facing"> + <option id="front" _label="Always face front"/> + <option id="nofront" _label="Spin all the way around" arg-set="-no-front"/> + </select> + + <hgroup> + <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/> + <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/> + </hgroup> + + <xscreensaver-updater /> + </vgroup> + </hgroup> + + <_description> +A set of robotic hands communicate non-verbally. + +Written by Jamie Zawinski; 2018. + </_description> +</screensaver> diff --git a/hacks/config/ripples.xml b/hacks/config/ripples.xml index 191e041..8a2e1be 100644 --- a/hacks/config/ripples.xml +++ b/hacks/config/ripples.xml @@ -24,8 +24,7 @@ <number id="fluidity" type="slider" arg="-fluidity %" _label="Fluidity" _low-label="Small drops" _high-label="Big drops" - low="0" high="16" default="6" - convert="invert"/> + low="0" high="16" default="6"/> </vgroup> <vgroup> diff --git a/hacks/config/unknownpleasures.xml b/hacks/config/unknownpleasures.xml index 7ef79ac..0730599 100644 --- a/hacks/config/unknownpleasures.xml +++ b/hacks/config/unknownpleasures.xml @@ -4,7 +4,7 @@ <command arg="-root"/> - <video href="https://www.youtube.com/watch?v=vuWhUxBq99E"/> + <video href="https://www.youtube.com/watch?v=DEWPiUbwnt0"/> <hgroup> <vgroup> @@ -16,22 +16,31 @@ <number id="count" type="slider" arg="-count %" _label="Scanlines" _low-label="Few" _high-label="Many" low="3" high="200" default="80"/> - </vgroup> - <vgroup> <number id="speed" type="slider" arg="-speed %" _label="Speed" _low-label="Slow" _high-label="Fast" - low="0.1" high="3.0" default="1.0"/> + low="0.1" high="20.0" default="1.0"/> + </vgroup> + <vgroup> <number id="resolution" type="slider" arg="-resolution %" _label="Resolution" _low-label="Low" _high-label="High" low="5" high="300" default="100"/> + + <number id="amplitude" type="slider" arg="-amplitude %" + _label="Amplitude" _low-label="Low" _high-label="High" + low="0.01" high="0.25" default="0.13"/> + + <number id="noise" type="slider" arg="-noise %" + _label="Noise" _low-label="Low" _high-label="High" + low="0.0" high="3.0" default="1.0"/> </vgroup> </hgroup> <hgroup> <boolean id="ortho" _label="Orthographic Projection" arg-unset="-no-ortho"/> - <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/> + <boolean id="buzz" _label="Buzz" arg-set="-buzz"/> + <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/> <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/> </hgroup> diff --git a/hacks/coral.c b/hacks/coral.c index 9cfcf50..f82f9ed 100644 --- a/hacks/coral.c +++ b/hacks/coral.c @@ -71,8 +71,10 @@ init_coral(struct state *st) st->ncolors = 0; } gcv.foreground = st->default_fg_pixel = get_pixel_resource(st->dpy, cmap, "foreground", "Foreground"); + if (st->draw_gc) XFreeGC (st->dpy, st->draw_gc); st->draw_gc = XCreateGC(st->dpy, st->window, GCForeground, &gcv); gcv.foreground = get_pixel_resource (st->dpy, cmap, "background", "Background"); + if (st->erase_gc) XFreeGC (st->dpy, st->erase_gc); st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); st->ncolors = NCOLORSMAX; make_uniform_colormap(xgwa.screen, xgwa.visual, cmap, @@ -283,6 +285,8 @@ coral_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st->pointbuf); + XFreeGC (dpy, st->draw_gc); + XFreeGC (dpy, st->erase_gc); if (st->walkers) free (st->walkers); if (st->board) free (st->board); free (st); diff --git a/hacks/critical.c b/hacks/critical.c index 81fd0c1..d716fc6 100644 --- a/hacks/critical.c +++ b/hacks/critical.c @@ -198,7 +198,7 @@ static void setup_colormap (struct state *st, XColor **colors, int *n_colors) { Bool writable; - char const * color_scheme; + char * color_scheme; /* Make a colormap */ *n_colors = get_integer_resource (st->dpy, "ncolors", "Integer"); @@ -237,6 +237,7 @@ setup_colormap (struct state *st, XColor **colors, int *n_colors) *colors, n_colors, True, &writable, True); } + if (color_scheme) free (color_scheme); } @@ -421,6 +422,12 @@ static void critical_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->fgc); + XFreeGC (dpy, st->bgc); + free (st->model->cells); + free (st->model); + free (st->history); + free (st->d_colors); free (st); } diff --git a/hacks/cwaves.c b/hacks/cwaves.c index 20dd80a..b032626 100644 --- a/hacks/cwaves.c +++ b/hacks/cwaves.c @@ -182,6 +182,11 @@ cwaves_event (Display *dpy, Window window, void *closure, XEvent *event) static void cwaves_free (Display *dpy, Window window, void *closure) { + state *st = (state *) closure; + XFreeGC (dpy, st->gc); + free (st->colors); + free (st->waves); + free (st); } diff --git a/hacks/cynosure.c b/hacks/cynosure.c index 8b8b85b..3eaa397 100644 --- a/hacks/cynosure.c +++ b/hacks/cynosure.c @@ -409,6 +409,11 @@ static void cynosure_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->fg_gc); + XFreeGC (dpy, st->bg_gc); + XFreeGC (dpy, st->shadow_gc); + if (st->colors) free (st->colors); + if (st->colors2) free (st->colors2); free (st); } diff --git a/hacks/decayscreen.c b/hacks/decayscreen.c index 8b45af9..6b2a4cb 100644 --- a/hacks/decayscreen.c +++ b/hacks/decayscreen.c @@ -122,6 +122,7 @@ decayscreen_init (Display *dpy, Window window) st->random_p = 1; st->mode = random() % (FUZZ+1); } + if (s) free (s); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); if (st->delay < 0) st->delay = 0; @@ -361,6 +362,7 @@ static void decayscreen_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->gc); free (st); } diff --git a/hacks/deco.c b/hacks/deco.c index 876badc..cebed2c 100644 --- a/hacks/deco.c +++ b/hacks/deco.c @@ -297,6 +297,8 @@ static void deco_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->fgc); + XFreeGC (dpy, st->bgc); free (st); } diff --git a/hacks/deluxe.c b/hacks/deluxe.c index 694a982..5fd7eb7 100644 --- a/hacks/deluxe.c +++ b/hacks/deluxe.c @@ -423,6 +423,20 @@ deluxe_event (Display *dpy, Window window, void *closure, XEvent *event) static void deluxe_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + int i; + XFreeGC (dpy, st->erase_gc); + if (st->ba) XFreePixmap (dpy, st->ba); + if (st->bb) XFreePixmap (dpy, st->bb); + if (st->plane_masks) free (st->plane_masks); + for (i = 0; i < st->count; i++) + if (st->throbbers[i]) { + XFreeGC (dpy, st->throbbers[i]->gc); + free (st->throbbers[i]); + } + free (st->throbbers); + free (st->colors); + free (st); } diff --git a/hacks/distort.c b/hacks/distort.c index ba81279..a3586cf 100644 --- a/hacks/distort.c +++ b/hacks/distort.c @@ -74,6 +74,7 @@ struct state { int ***from; int ****from_array; int *fast_from; + int from_size; int bpp_size; @@ -140,6 +141,7 @@ distort_reset (struct state *st) ; else if (s && *s) fprintf(stderr,"%s: bogus effect: %s\n", progname, s); + if (s) free (s); if (st->effect == NULL && st->radius == 0 && st->speed == 0 && st->number == 0 && !st->blackhole && !st->vortex && !st->magnify && !st->reflect) { @@ -307,9 +309,11 @@ distort_finish_loading (struct state *st) XClearWindow (st->dpy, st->window); XCopyArea (st->dpy, st->pm, st->window, st->gc, 0, 0, st->xgwa.width, st->xgwa.height, 0, 0); + if (st->orig_map) XDestroyImage (st->orig_map); st->orig_map = XGetImage(st->dpy, st->pm, 0, 0, st->xgwa.width, st->xgwa.height, ~0L, ZPixmap); + if (st->buffer_map_cache) free (st->buffer_map_cache); 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) { @@ -317,6 +321,8 @@ distort_finish_loading (struct state *st) exit(EXIT_FAILURE); } + if (st->buffer_map) + destroy_xshm_image (st->dpy, st->buffer_map, &st->shm_info); st->buffer_map = create_xshm_image(st->dpy, st->xgwa.visual, st->orig_map->depth, ZPixmap, &st->shm_info, 2*st->radius + st->speed + 2, @@ -377,6 +383,7 @@ static void convert(struct state *st) { int *p; int i, j; + if (st->fast_from) free (st->fast_from); 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"); @@ -478,6 +485,17 @@ static void allocate_lense(struct state *st) * then pointers could be used instead of arrays in some places (and * maybe give a speedup - maybe also consume less memory) */ + if (st->from) { + for (i = 0; i < st->from_size; i++) + if (st->from[i]) { + for (j = 0; j < st->from_size; j++) { + if (st->from[i][j]) free (st->from[i][j]); + } + free (st->from[i]); + } + free (st->from); + } + st->from_size = s; st->from = (int ***)malloc(s*sizeof(int **)); if (st->from == NULL) { perror("distort"); @@ -508,6 +526,7 @@ static void init_round_lense(struct state *st) int k; if (st->effect == &swamp_thing) { + if (st->from_array) free (st->from_array); st->from_array = (int ****)malloc((st->radius+1)*sizeof(int ***)); for (k=0; k <= st->radius; k++) { allocate_lense(st); @@ -796,13 +815,27 @@ static void distort_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + int i, j; XFreeGC (st->dpy, st->gc); if (st->pm) XFreePixmap (dpy, st->pm); if (st->orig_map) XDestroyImage (st->orig_map); - if (st->buffer_map) destroy_xshm_image (st->dpy, st->buffer_map, &st->shm_info); - if (st->from) free (st->from); + if (st->buffer_map) + destroy_xshm_image (st->dpy, st->buffer_map, &st->shm_info); if (st->fast_from) free (st->fast_from); if (st->from_array) free (st->from_array); + if (st->buffer_map_cache) free (st->buffer_map_cache); + + if (st->from) { + for (i = 0; i < st->from_size; i++) + if (st->from[i]) { + for (j = 0; j < st->from_size; j++) { + if (st->from[i][j]) free (st->from[i][j]); + } + free (st->from[i]); + } + free (st->from); + } + free (st); } diff --git a/hacks/epicycle.c b/hacks/epicycle.c index 89fab0b..a8a257c 100644 --- a/hacks/epicycle.c +++ b/hacks/epicycle.c @@ -788,6 +788,10 @@ static void epicycle_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + if (st->eraser) eraser_free (st->eraser); + if (st->pb0) delete_body (st->pb0); + XFreeGC (dpy, st->color0); + free (st->colors); free (st); } diff --git a/hacks/eruption.c b/hacks/eruption.c index 629cb8e..3f68cf7 100644 --- a/hacks/eruption.c +++ b/hacks/eruption.c @@ -482,15 +482,16 @@ eruption_event (Display *dpy, Window window, void *closure, XEvent *event) 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 + int i; + XDestroyImage (st->pImage); + free (st->aiColorVals); + for (i = 0; i < st->iWinHeight; ++i) + free (st->fire[i]); + free (st->fire); + free (st->particles); + XFreeGC (dpy, st->gc); + free (st); } diff --git a/hacks/filmleader.c b/hacks/filmleader.c index ef021e1..25b64c4 100644 --- a/hacks/filmleader.c +++ b/hacks/filmleader.c @@ -53,6 +53,7 @@ filmleader_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; + char *s; st->dpy = dpy; st->window = window; @@ -105,15 +106,15 @@ filmleader_init (Display *dpy, Window window) st->xftdraw = XftDrawCreate (dpy, st->pix, st->xgwa.visual, st->xgwa.colormap); - st->font = load_xft_font_retry (dpy, screen_number (st->xgwa.screen), - get_string_resource (dpy, "numberFont", - "Font")); - st->font2 = load_xft_font_retry (dpy, screen_number (st->xgwa.screen), - get_string_resource (dpy, "numberFont2", - "Font")); - st->font3 = load_xft_font_retry (dpy, screen_number (st->xgwa.screen), - get_string_resource (dpy, "numberFont3", - "Font")); + s = get_string_resource (dpy, "numberFont", "Font"); + st->font = load_xft_font_retry (dpy, screen_number (st->xgwa.screen), s); + if (s) free (s); + s = get_string_resource (dpy, "numberFont2", "Font"); + st->font2 = load_xft_font_retry (dpy, screen_number (st->xgwa.screen), s); + if (s) free (s); + s = get_string_resource (dpy, "numberFont3", "Font"); + st->font3 = load_xft_font_retry (dpy, screen_number (st->xgwa.screen), s); + if (s) free (s); st->bg = get_pixel_resource (dpy, st->xgwa.colormap, "textBackground", "Background"); @@ -124,12 +125,15 @@ filmleader_init (Display *dpy, Window window) st->trace_color = get_pixel_resource (dpy, st->xgwa.colormap, "traceColor", "Foreground"); - XftColorAllocName (dpy, st->xgwa.visual, st->xgwa.colormap, - get_string_resource (dpy, "textColor", "Foreground"), + s = get_string_resource (dpy, "textColor", "Foreground"); + XftColorAllocName (dpy, st->xgwa.visual, st->xgwa.colormap, s, &st->xft_text_color_1); - XftColorAllocName (dpy, st->xgwa.visual, st->xgwa.colormap, - get_string_resource (dpy, "textBackground", "Background"), + if (s) free (s); + + s = get_string_resource (dpy, "textBackground", "Background"); + XftColorAllocName (dpy, st->xgwa.visual, st->xgwa.colormap, s, &st->xft_text_color_2); + if (s) free (s); return st; } @@ -512,6 +516,7 @@ filmleader_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; analogtv_release (st->tv); + free (st->inp); XftDrawDestroy (st->xftdraw); XftColorFree(dpy, st->xgwa.visual, st->xgwa.colormap, &st->xft_text_color_1); XftColorFree(dpy, st->xgwa.visual, st->xgwa.colormap, &st->xft_text_color_2); diff --git a/hacks/fireworkx.c b/hacks/fireworkx.c index faf3745..57ba128 100644 --- a/hacks/fireworkx.c +++ b/hacks/fireworkx.c @@ -571,11 +571,13 @@ static void resize(struct state *st) XSync(st->dpy, 0); if (st->xim) { - if (st->xim->data == (char *)st->palaka2) st->xim->data = NULL; + /* 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 = 0; } st->xim = XCreateImage(st->dpy, xwa.visual, xwa.depth, ZPixmap, 0, 0, st->width, st->height, 8, 0); @@ -841,6 +843,14 @@ fireworkx_free (Display *dpy, Window window, void *closure) free(st->mem1); free(st->fireshell_array->fpix); free(st->fireshell_array); + if (st->xim) { + st->xim->data = NULL; + XDestroyImage (st->xim); + } + if (st->light_map) free(st->light_map); + if (st->colors) free (st->colors); + XFreeGC (dpy, st->gc); + free(st); } static const char *fireworkx_defaults [] = diff --git a/hacks/flag.c b/hacks/flag.c index f12c0bc..ca58ed8 100644 --- a/hacks/flag.c +++ b/hacks/flag.c @@ -196,8 +196,9 @@ make_flag_bits(ModeInfo *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 */ +#ifdef HAVE_JWXYZ /* always use default */ + if (bitmap_name) free (bitmap_name); + bitmap_name = 0; #endif /* If neither a bitmap nor text are specified, randomly select either @@ -228,6 +229,7 @@ make_flag_bits(ModeInfo *mi) &width, &height, 0); if (bitmap) { + if (fp->image) XDestroyImage (fp->image); fp->image = XGetImage(dpy, bitmap, 0, 0, width, height, ~0L, ZPixmap); XFreePixmap(dpy, bitmap); @@ -256,6 +258,7 @@ make_flag_bits(ModeInfo *mi) struct utsname uts; if (uname (&uts) < 0) { + if (text) free (text); text = strdup("uname() failed"); } else @@ -263,6 +266,7 @@ make_flag_bits(ModeInfo *mi) char *s; if ((s = strchr(uts.nodename, '.'))) *s = 0; + if (text) free (text); text = (char *) malloc(strlen(uts.nodename) + strlen(uts.sysname) + strlen(uts.version) + @@ -280,11 +284,14 @@ make_flag_bits(ModeInfo *mi) 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; \ +# define GRAB(S,V) \ + if (strstr(buf, S)) { \ + fgets (buf, sizeof(buf)-1, f); \ + if ((s = strchr (buf, '>'))) { \ + if (V) free (V); \ + V = strdup(s+1); \ + } \ + if ((s = strchr (V, '<'))) *s = 0; \ } GRAB ("ProductName", pn) GRAB ("ProductBuildVersion", pbv) @@ -298,6 +305,9 @@ make_flag_bits(ModeInfo *mi) else sprintf(text, "%s\n%s %s", uts.nodename, uts.sysname, uts.release); + if (pbv) free (pbv); + if (pn) free (pn); + if (puvv) free (puvv); } # else sprintf(text, "%s\n%s %s", @@ -305,6 +315,7 @@ make_flag_bits(ModeInfo *mi) # endif /* special system types */ } #else /* !HAVE_UNAME */ + if (text) free (text); # ifdef VMS text = strdup(getenv("SYS$NODE")); # else @@ -320,8 +331,9 @@ make_flag_bits(ModeInfo *mi) text2 = strdup(text); - if (!fn) fn = def_fn; + if (!fn) fn = strdup (def_fn); font = load_font_retry (dpy, fn); + free (fn); memset(&overall, 0, sizeof(overall)); token = text; @@ -371,10 +383,10 @@ make_flag_bits(ModeInfo *mi) lines++; } free(text2); - XUnloadFont(dpy, font->fid); - XFree((XPointer) font); + XFreeFont(dpy, font); XFreeGC(dpy, gc); + if (fp->image) XDestroyImage (fp->image); fp->image = XGetImage(dpy, bitmap, 0, 0, width, height, 1L, XYPixmap); XFreePixmap(dpy, bitmap); } @@ -420,6 +432,7 @@ make_flag_bits(ModeInfo *mi) int w = flag_width; int h = flag_height; int i = 0; + if (fp->image) XDestroyImage (fp->image); fp->image = XCreateImage(MI_DISPLAY(mi), MI_VISUAL(mi), 1, XYBitmap, 0, /* dpth, fmt, offset */ @@ -543,15 +556,10 @@ draw_flag(ModeInfo * mi) ENTRYPOINT void free_flag(ModeInfo * mi) { - int screen = MI_SCREEN(mi); - - if (flags == NULL) - return; - - if (flags[screen].cache && flags[screen].dbufp) - XFreePixmap(MI_DISPLAY(mi), flags[screen].cache); - if (flags[screen].image) - XDestroyImage(flags[screen].image); + flagstruct *fp = &flags[MI_SCREEN(mi)]; + if (fp->cache && fp->dbufp) + XFreePixmap(MI_DISPLAY(mi), fp->cache); + if (fp->image) XDestroyImage(fp->image); } #ifndef STANDALONE diff --git a/hacks/flame.c b/hacks/flame.c index 7b59056..f7e9833 100644 --- a/hacks/flame.c +++ b/hacks/flame.c @@ -459,6 +459,8 @@ static void flame_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->gc); + free (st->colors); free (st); } diff --git a/hacks/fluidballs.c b/hacks/fluidballs.c index 9273082..533ee2d 100644 --- a/hacks/fluidballs.c +++ b/hacks/fluidballs.c @@ -800,6 +800,17 @@ static void fluidballs_free (Display *dpy, Window window, void *closure) { b_state *state = (b_state *) closure; + XFreeGC (dpy, state->draw_gc); + XFreeGC (dpy, state->draw_gc2); + XFreeGC (dpy, state->erase_gc); + free (state->m); + free (state->r); + free (state->vx); + free (state->vy); + free (state->px); + free (state->py); + free (state->opx); + free (state->opy); free (state); } diff --git a/hacks/fontglide.c b/hacks/fontglide.c index 263393a..df8f498 100644 --- a/hacks/fontglide.c +++ b/hacks/fontglide.c @@ -172,9 +172,11 @@ append_font_name(Display *dpy, char *dest, const XFontStruct *font) int i; for (i = 0; i != font->n_properties; ++i) { if (font->properties[i].name == XA_FONT) { - const char *suffix = XGetAtomName (dpy, font->properties[i].card32); + char *suffix = XGetAtomName (dpy, font->properties[i].card32); + int L = strlen(suffix); strcpy(dest, suffix); - return dest + strlen(suffix); + free (suffix); + return dest + L; } } @@ -768,6 +770,7 @@ 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); + free (w); } @@ -860,6 +863,7 @@ split_words (state *s, sentence *se) char *t2 = chars[k]; word *w2 = new_word (s, se, t2, True); words2[j++] = w2; + free (t2); w2->x = x; w2->y = y; @@ -1219,7 +1223,7 @@ populate_sentence (state *s, sentence *se) y + se->xftfont->ascent + se->xftfont->descent > s->xgwa.height) { unread_word (s, w); - free (w); + w = 0; /* done = True; */ break; } @@ -2203,8 +2207,10 @@ fontglide_init (Display *dpy, Window window) 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 == '(')) + if (s->font_override && (!*s->font_override || *s->font_override == '(')) { + free (s->font_override); s->font_override = 0; + } s->charset = get_string_resource (dpy, "fontCharset", "FontCharset"); s->border_width = get_integer_resource (dpy, "fontBorderWidth", "Integer"); @@ -2247,7 +2253,7 @@ fontglide_init (Display *dpy, Window window) if (s->trails_p) s->dbuf = False; /* don't need it in this case */ { - const char *ss = get_string_resource (dpy, "mode", "Mode"); + 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")) @@ -2262,6 +2268,7 @@ fontglide_init (Display *dpy, Window window) "%s: `mode' must be `scroll', `page', or `random', not `%s'\n", progname, ss); } + if (ss) free (ss); } if (s->dbuf) @@ -2410,8 +2417,20 @@ static void fontglide_free (Display *dpy, Window window, void *closure) { state *s = (state *) closure; + int i; + textclient_close (s->tc); +// if (s->b && s->b != s->window) XFreePixmap (dpy, s->b); +// if (s->ba && s->ba != s->b) XFreePixmap (dpy, s->ba); + XFreeGC (dpy, s->bg_gc); + if (s->charset) free (s->charset); + if (s->font_override) free (s->font_override); + for (i = 0;i < s->nsentences; i++) + if (s->sentences[i]) + free_sentence (s, s->sentences[i]); + free (s->sentences); + #ifdef DEBUG if (s->metrics_xftfont) XftFontClose (s->dpy, s->metrics_xftfont); @@ -2424,8 +2443,6 @@ fontglide_free (Display *dpy, Window window, void *closure) if (s->label_gc) XFreeGC (dpy, s->label_gc); #endif - /* #### there's more to free here */ - free (s); } diff --git a/hacks/fuzzyflakes.c b/hacks/fuzzyflakes.c index 18470bc..7429fa8 100644 --- a/hacks/fuzzyflakes.c +++ b/hacks/fuzzyflakes.c @@ -445,6 +445,10 @@ FuzzyFlakesFreeFlake(Flake *flake) if (flake->DB.bb) XFreePixmap(flake->dpy, flake->DB.bb); if (flake->DB.ba) XFreePixmap(flake->dpy, flake->DB.ba); + XFreeGC (flake->dpy, flake->GCVar); + if (flake->Colors.Back) free (flake->Colors.Back); + if (flake->Colors.Fore) free (flake->Colors.Fore); + if (flake->Colors.Bord) free (flake->Colors.Bord); } static void @@ -607,6 +611,7 @@ fuzzyflakes_free (Display *dpy, Window window, void *closure) { Flake *flake = (Flake *) closure; FuzzyFlakesFreeFlake(flake); + free(flake->Flakes); free(flake); } diff --git a/hacks/glx/Makefile.in b/hacks/glx/Makefile.in index e3fa617..91e4d51 100644 --- a/hacks/glx/Makefile.in +++ b/hacks/glx/Makefile.in @@ -132,7 +132,7 @@ SRCS = xscreensaver-gl-helper.c normals.c erase-gl.c fps-gl.c \ raverhoop.c hydrostat.c discoball.c cubetwist.c cubestack.c \ splodesic.c hexstrut.c vigilance.c seccam.c esper.c \ razzledazzle.c ships.c peepers.c crumbler.c quickhull.c \ - maze3d.c + maze3d.c handsy.c handsy_model.c OBJS = xscreensaver-gl-helper.o normals.o erase-gl.o fps-gl.o \ atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \ @@ -179,7 +179,7 @@ OBJS = xscreensaver-gl-helper.o normals.o erase-gl.o fps-gl.o \ raverhoop.o hydrostat.o discoball.o cubetwist.o cubestack.o \ splodesic.o hexstrut.o vigilance.o seccam.o esper.o \ razzledazzle.o ships.o peepers.o crumbler.o quickhull.o \ - maze3d.o + maze3d.o handsy.o handsy_model.o GL_EXES = cage gears moebius pipes sproingies stairs superquadrics \ morph3d rubik atlantis lament bubble3d glplanet pulsar \ @@ -200,7 +200,7 @@ GL_EXES = cage gears moebius pipes sproingies stairs superquadrics \ splitflap dymaxionmap unicrud energystream raverhoop \ hydrostat discoball cubetwist cubestack splodesic \ hexstrut vigilance esper razzledazzle peepers crumbler \ - maze3d + maze3d handsy GLE_EXES = extrusion SUID_EXES = sonar GL_UTIL_EXES = xscreensaver-gl-helper @@ -237,7 +237,7 @@ HDRS = atlantis.h bubble3d.h buildlwo.h e_textures.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 \ - quickhull.h dymaxionmap-coords.h + quickhull.h dymaxionmap-coords.h handsy_anim.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 \ @@ -266,7 +266,7 @@ GL_MEN = atlantis.man boxed.man bubble3d.man cage.man circuit.man \ unicrud.man energystream.man raverhoop.man hydrostat.man \ discoball.man cubetwist.man cubestack.man splodesic.man \ hexstrut.man vigilance.man esper.man razzledazzle.man \ - peepers.man crumbler.man maze3d.man + peepers.man crumbler.man maze3d.man handsy.man MEN = @GL_MEN@ RETIRED_MEN = glforestfire.man EXTRAS = README Makefile.in dxf2gl.pl vrml2gl.pl wfront2gl.pl \ @@ -452,7 +452,9 @@ distdepend:: molecules.h -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' ; \ + -e 's@ $$(srcdir)/\(.*molecules.h\)@ \1@g' \ + -e 's@ $$(srcdir)/\(images/gen/\)@ ../\1@g' \ + -e 's@ $$(HACK_SRC)/\(images/gen/\)@ ../\1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ mv /tmp/distdepend.$$$$ Makefile.in @@ -997,6 +999,14 @@ crumbler: crumbler.o quickhull.o $(HACK_TRACK_OBJS) maze3d: maze3d.o $(PNG) $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(PNG) $(PNG_LIBS) $(HACK_TRACK_OBJS) $(HACK_LIBS) +HANDSY_OBJS=gllist.o handsy_model.o normals.o $(HACK_TRACK_OBJS) +handsy: handsy.o $(HANDSY_OBJS) + $(CC_HACK) -o $@ $@.o $(HANDSY_OBJS) $(HACK_LIBS) + +handsy_dxf:: + ./dxf2gl.pl --smooth 28 --layers handsy.dxf handsy_model.c + + ############################################################################## # # DO NOT DELETE: updated by make distdepend @@ -1062,7 +1072,7 @@ 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/gen/sea-texture_png.h +atlantis.o: ../images/gen/sea-texture_png.h atlantis.o: $(HACK_SRC)/recanim.h atlantis.o: $(HACK_SRC)/screenhackI.h atlantis.o: $(UTILS_SRC)/colors.h @@ -1079,12 +1089,12 @@ atlantis.o: $(HACK_SRC)/xlockmoreI.h atlantis.o: $(HACK_SRC)/xlockmore.h atunnel.o: ../../config.h atunnel.o: $(HACK_SRC)/fps.h -atunnel.o: $(HACK_SRC)/images/gen/tunnel0_png.h -atunnel.o: $(HACK_SRC)/images/gen/tunnel1_png.h -atunnel.o: $(HACK_SRC)/images/gen/tunnel2_png.h -atunnel.o: $(HACK_SRC)/images/gen/tunnel3_png.h -atunnel.o: $(HACK_SRC)/images/gen/tunnel4_png.h -atunnel.o: $(HACK_SRC)/images/gen/tunnel5_png.h +atunnel.o: ../images/gen/tunnel0_png.h +atunnel.o: ../images/gen/tunnel1_png.h +atunnel.o: ../images/gen/tunnel2_png.h +atunnel.o: ../images/gen/tunnel3_png.h +atunnel.o: ../images/gen/tunnel4_png.h +atunnel.o: ../images/gen/tunnel5_png.h atunnel.o: $(HACK_SRC)/recanim.h atunnel.o: $(HACK_SRC)/screenhackI.h atunnel.o: $(srcdir)/tunnel_draw.h @@ -1149,7 +1159,7 @@ 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/gen/blocktube_png.h +blocktube.o: ../images/gen/blocktube_png.h blocktube.o: $(HACK_SRC)/recanim.h blocktube.o: $(HACK_SRC)/screenhackI.h blocktube.o: $(UTILS_SRC)/colors.h @@ -1249,7 +1259,7 @@ buildlwo.o: $(srcdir)/buildlwo.h buildlwo.o: ../../config.h cage.o: ../../config.h cage.o: $(HACK_SRC)/fps.h -cage.o: $(HACK_SRC)/images/gen/wood_png.h +cage.o: ../images/gen/wood_png.h cage.o: $(HACK_SRC)/recanim.h cage.o: $(HACK_SRC)/screenhackI.h cage.o: $(UTILS_SRC)/colors.h @@ -1582,10 +1592,10 @@ dymaxionmap.o: ../../config.h dymaxionmap.o: $(srcdir)/dymaxionmap-coords.h dymaxionmap.o: $(HACK_SRC)/fps.h dymaxionmap.o: $(srcdir)/gltrackball.h -dymaxionmap.o: $(HACK_SRC)/images/gen/earth_flat_png.h -dymaxionmap.o: $(HACK_SRC)/images/gen/earth_night_png.h -dymaxionmap.o: $(HACK_SRC)/images/gen/earth_png.h -dymaxionmap.o: $(HACK_SRC)/images/gen/ground_png.h +dymaxionmap.o: ../images/gen/earth_flat_png.h +dymaxionmap.o: ../images/gen/earth_night_png.h +dymaxionmap.o: ../images/gen/earth_png.h +dymaxionmap.o: ../images/gen/ground_png.h dymaxionmap.o: $(srcdir)/normals.h dymaxionmap.o: $(HACK_SRC)/recanim.h dymaxionmap.o: $(srcdir)/rotator.h @@ -1804,8 +1814,8 @@ 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/gen/chromesphere_png.h -flyingtoasters.o: $(HACK_SRC)/images/gen/toast_png.h +flyingtoasters.o: ../images/gen/chromesphere_png.h +flyingtoasters.o: ../images/gen/toast_png.h flyingtoasters.o: $(HACK_SRC)/recanim.h flyingtoasters.o: $(HACK_SRC)/screenhackI.h flyingtoasters.o: $(UTILS_SRC)/colors.h @@ -1965,8 +1975,8 @@ gleidescope.o: $(HACK_SRC)/xlockmore.h glforestfire.o: ../../config.h glforestfire.o: $(HACK_SRC)/fps.h glforestfire.o: $(srcdir)/gltrackball.h -glforestfire.o: $(HACK_SRC)/images/gen/ground_png.h -glforestfire.o: $(HACK_SRC)/images/gen/tree_png.h +glforestfire.o: ../images/gen/ground_png.h +glforestfire.o: ../images/gen/tree_png.h glforestfire.o: $(HACK_SRC)/recanim.h glforestfire.o: $(HACK_SRC)/screenhackI.h glforestfire.o: $(UTILS_SRC)/colors.h @@ -2019,7 +2029,7 @@ gllist.o: ../../config.h gllist.o: $(srcdir)/gllist.h glmatrix.o: ../../config.h glmatrix.o: $(HACK_SRC)/fps.h -glmatrix.o: $(HACK_SRC)/images/gen/matrix3_png.h +glmatrix.o: ../images/gen/matrix3_png.h glmatrix.o: $(HACK_SRC)/recanim.h glmatrix.o: $(HACK_SRC)/screenhackI.h glmatrix.o: $(UTILS_SRC)/colors.h @@ -2037,8 +2047,8 @@ glmatrix.o: $(HACK_SRC)/xlockmore.h glplanet.o: ../../config.h glplanet.o: $(HACK_SRC)/fps.h glplanet.o: $(srcdir)/gltrackball.h -glplanet.o: $(HACK_SRC)/images/gen/earth_night_png.h -glplanet.o: $(HACK_SRC)/images/gen/earth_png.h +glplanet.o: ../images/gen/earth_night_png.h +glplanet.o: ../images/gen/earth_png.h glplanet.o: $(HACK_SRC)/recanim.h glplanet.o: $(srcdir)/rotator.h glplanet.o: $(HACK_SRC)/screenhackI.h @@ -2151,6 +2161,29 @@ grab-ximage.o: $(UTILS_SRC)/grabscreen.h grab-ximage.o: $(UTILS_SRC)/pow2.h grab-ximage.o: $(UTILS_SRC)/visual.h grab-ximage.o: $(UTILS_SRC)/xshm.h +handsy_model.o: ../../config.h +handsy_model.o: $(srcdir)/gllist.h +handsy.o: ../../config.h +handsy.o: $(HACK_SRC)/fps.h +handsy.o: $(srcdir)/gllist.h +handsy.o: $(srcdir)/gltrackball.h +handsy.o: $(srcdir)/handsy_anim.h +handsy.o: $(HACK_SRC)/recanim.h +handsy.o: $(srcdir)/rotator.h +handsy.o: $(HACK_SRC)/screenhackI.h +handsy.o: $(srcdir)/sphere.h +handsy.o: $(srcdir)/tube.h +handsy.o: $(UTILS_SRC)/colors.h +handsy.o: $(UTILS_SRC)/erase.h +handsy.o: $(UTILS_SRC)/font-retry.h +handsy.o: $(UTILS_SRC)/grabscreen.h +handsy.o: $(UTILS_SRC)/hsv.h +handsy.o: $(UTILS_SRC)/resources.h +handsy.o: $(UTILS_SRC)/usleep.h +handsy.o: $(UTILS_SRC)/visual.h +handsy.o: $(UTILS_SRC)/yarandom.h +handsy.o: $(HACK_SRC)/xlockmoreI.h +handsy.o: $(HACK_SRC)/xlockmore.h hexstrut.o: ../../config.h hexstrut.o: $(HACK_SRC)/fps.h hexstrut.o: $(srcdir)/gltrackball.h @@ -2255,7 +2288,7 @@ 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/gen/jigglymap_png.h +jigglypuff.o: ../images/gen/jigglymap_png.h jigglypuff.o: $(HACK_SRC)/recanim.h jigglypuff.o: $(HACK_SRC)/screenhackI.h jigglypuff.o: $(UTILS_SRC)/colors.h @@ -2352,7 +2385,7 @@ 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/gen/lament512_png.h +lament.o: ../images/gen/lament512_png.h lament.o: $(srcdir)/normals.h lament.o: $(HACK_SRC)/recanim.h lament.o: $(srcdir)/rotator.h @@ -2408,12 +2441,12 @@ marching.o: $(srcdir)/marching.h marching.o: $(srcdir)/normals.h maze3d.o: ../../config.h maze3d.o: $(HACK_SRC)/fps.h -maze3d.o: $(HACK_SRC)/images/gen/bob_png.h -maze3d.o: $(HACK_SRC)/images/gen/brick1_png.h -maze3d.o: $(HACK_SRC)/images/gen/brick2_png.h -maze3d.o: $(HACK_SRC)/images/gen/logo-32_png.h -maze3d.o: $(HACK_SRC)/images/gen/start_png.h -maze3d.o: $(HACK_SRC)/images/gen/wood2_png.h +maze3d.o: ../images/gen/bob_png.h +maze3d.o: ../images/gen/brick1_png.h +maze3d.o: ../images/gen/brick2_png.h +maze3d.o: ../images/gen/logo-32_png.h +maze3d.o: ../images/gen/start_png.h +maze3d.o: ../images/gen/wood2_png.h maze3d.o: $(HACK_SRC)/recanim.h maze3d.o: $(HACK_SRC)/screenhackI.h maze3d.o: $(UTILS_SRC)/colors.h @@ -2557,8 +2590,8 @@ normals.o: $(srcdir)/normals.h peepers.o: ../../config.h peepers.o: $(HACK_SRC)/fps.h peepers.o: $(srcdir)/gltrackball.h -peepers.o: $(HACK_SRC)/images/gen/iris_png.h -peepers.o: $(HACK_SRC)/images/gen/sclera_png.h +peepers.o: ../images/gen/iris_png.h +peepers.o: ../images/gen/sclera_png.h peepers.o: $(srcdir)/normals.h peepers.o: $(HACK_SRC)/recanim.h peepers.o: $(srcdir)/rotator.h @@ -2875,8 +2908,8 @@ 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/gen/sball-bg_png.h -sballs.o: $(HACK_SRC)/images/gen/sball_png.h +sballs.o: ../images/gen/sball-bg_png.h +sballs.o: ../images/gen/sball_png.h sballs.o: $(HACK_SRC)/recanim.h sballs.o: $(HACK_SRC)/screenhackI.h sballs.o: $(UTILS_SRC)/colors.h @@ -2928,7 +2961,7 @@ 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/gen/scales_png.h +skytentacles.o: ../images/gen/scales_png.h skytentacles.o: $(srcdir)/normals.h skytentacles.o: $(HACK_SRC)/recanim.h skytentacles.o: $(srcdir)/rotator.h @@ -3094,7 +3127,7 @@ 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/gen/wood_png.h +stairs.o: ../images/gen/wood_png.h stairs.o: $(HACK_SRC)/recanim.h stairs.o: $(HACK_SRC)/screenhackI.h stairs.o: $(srcdir)/sphere.h @@ -3242,11 +3275,11 @@ 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/gen/logo-180_png.h -timetunnel.o: $(HACK_SRC)/images/gen/timetunnel0_png.h -timetunnel.o: $(HACK_SRC)/images/gen/timetunnel1_png.h -timetunnel.o: $(HACK_SRC)/images/gen/timetunnel2_png.h -timetunnel.o: $(HACK_SRC)/images/gen/tunnelstar_png.h +timetunnel.o: ../images/gen/logo-180_png.h +timetunnel.o: ../images/gen/timetunnel0_png.h +timetunnel.o: ../images/gen/timetunnel1_png.h +timetunnel.o: ../images/gen/timetunnel2_png.h +timetunnel.o: ../images/gen/tunnelstar_png.h timetunnel.o: $(HACK_SRC)/recanim.h timetunnel.o: $(srcdir)/rotator.h timetunnel.o: $(HACK_SRC)/screenhackI.h @@ -3433,7 +3466,7 @@ 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/gen/chromesphere_png.h +winduprobot.o: ../images/gen/chromesphere_png.h winduprobot.o: $(srcdir)/involute.h winduprobot.o: $(HACK_SRC)/recanim.h winduprobot.o: $(HACK_SRC)/screenhackI.h diff --git a/hacks/glx/antinspect.c b/hacks/glx/antinspect.c index ad3bef5..8f2152b 100644 --- a/hacks/glx/antinspect.c +++ b/hacks/glx/antinspect.c @@ -19,7 +19,6 @@ #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" -# define free_antinspect 0 # define release_antinspect 0 #include "xlockmore.h" #else @@ -645,7 +644,7 @@ ENTRYPOINT void draw_antinspect(ModeInfo * mi) if(!mp->glx_context) return; - glXMakeCurrent(display, window, *(mp->glx_context)); + glXMakeCurrent(display, window, *mp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -695,10 +694,17 @@ ENTRYPOINT void change_antinspect(ModeInfo * mi) if (!mp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); pinit(); } #endif /* !STANDALONE */ +ENTRYPOINT void free_antinspect(ModeInfo * mi) +{ + antinspectstruct *mp = &antinspect[MI_SCREEN(mi)]; + if (!mp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); + gltrackball_free (mp->trackball); +} XSCREENSAVER_MODULE ("AntInspect", antinspect) diff --git a/hacks/glx/antmaze.c b/hacks/glx/antmaze.c index 79b7e0b..6853b35 100644 --- a/hacks/glx/antmaze.c +++ b/hacks/glx/antmaze.c @@ -25,7 +25,6 @@ static const char sccsid[] = "@(#)antmaze.c 5.01 2001/03/01 xlockmore"; "*showFPS: False \n" \ "*fpsSolid: True \n" -# define free_antmaze 0 # define release_antmaze 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -1442,7 +1441,7 @@ ENTRYPOINT void draw_antmaze(ModeInfo * mi) return; mi->polygon_count = 0; - glXMakeCurrent(display, window, *(mp->glx_context)); + glXMakeCurrent(display, window, *mp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -1603,11 +1602,22 @@ ENTRYPOINT void change_antmaze(ModeInfo * mi) if (!mp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); pinit(); } #endif /* !STANDALONE */ +ENTRYPOINT void free_antmaze(ModeInfo * mi) +{ + antmazestruct *mp = &antmaze[MI_SCREEN(mi)]; + if (!mp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); + gltrackball_free (mp->trackball); + free_rotator (mp->rot); + if (mp->checktexture) glDeleteTextures (1, &mp->checktexture); + if (mp->brushedtexture) glDeleteTextures (1, &mp->brushedtexture); +} + XSCREENSAVER_MODULE ("AntMaze", antmaze) #endif diff --git a/hacks/glx/antspotlight.c b/hacks/glx/antspotlight.c index 55bb80c..f5e1e69 100644 --- a/hacks/glx/antspotlight.c +++ b/hacks/glx/antspotlight.c @@ -19,7 +19,6 @@ "*showFPS: False \n" \ "*useSHM: True \n" -# define free_antspotlight 0 # define release_antspotlight 0 #include "xlockmore.h" #else @@ -750,7 +749,7 @@ ENTRYPOINT void draw_antspotlight(ModeInfo * mi) /* Just keep running before the texture has come in. */ /* if (mp->waiting_for_image_p) return; */ - glXMakeCurrent(display, window, *(mp->glx_context)); + glXMakeCurrent(display, window, *mp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -791,9 +790,19 @@ ENTRYPOINT void change_antspotlight(ModeInfo * mi) if (!mp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); pinit(); } #endif /* !STANDALONE */ +ENTRYPOINT void free_antspotlight(ModeInfo * mi) +{ + antspotlightstruct *mp = &antspotlight[MI_SCREEN(mi)]; + if (!mp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); + gltrackball_free (mp->trackball); + free_rotator (mp->rot); + if (mp->screentexture) glDeleteTextures (1, &mp->screentexture); +} + XSCREENSAVER_MODULE ("AntSpotlight", antspotlight) diff --git a/hacks/glx/atlantis.c b/hacks/glx/atlantis.c index 04bde12..05ea903 100644 --- a/hacks/glx/atlantis.c +++ b/hacks/glx/atlantis.c @@ -308,6 +308,9 @@ Init(ModeInfo *mi) glLoadIdentity(); glScalef(scale, scale, 1); glMatrixMode(GL_MODELVIEW); + + if (ap->texture) XDestroyImage (ap->texture); + ap->texture = 0; } InitFishs(ap); @@ -466,7 +469,7 @@ init_atlantis(ModeInfo * mi) if ((ap->sharks = (fishRec *) calloc(ap->num_sharks, sizeof (fishRec))) == NULL) { /* free everything up to now */ - (void) free((void *) atlantis); + free(atlantis); atlantis = NULL; return; } @@ -520,7 +523,7 @@ draw_atlantis(ModeInfo * mi) if (!ap->glx_context) return; - glXMakeCurrent(display, window, *(ap->glx_context)); + glXMakeCurrent(display, window, *ap->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -545,12 +548,10 @@ draw_atlantis(ModeInfo * mi) ENTRYPOINT void free_atlantis(ModeInfo * mi) { -#if 0 - atlantisstruct *ap = &atlantis[screen]; - - if (ap->sharks) - (void) free((void *) ap->sharks); -#endif + atlantisstruct *ap = &atlantis[MI_SCREEN(mi)]; + if (!ap->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *ap->glx_context); + if (ap->sharks) free(ap->sharks); } #ifndef STANDALONE @@ -567,7 +568,7 @@ change_atlantis(ModeInfo * mi) if (!ap->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(ap->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *ap->glx_context); Init(mi); } #endif /* !STANDALONE */ diff --git a/hacks/glx/atunnel.c b/hacks/glx/atunnel.c index f21d04f..1b8fb07 100644 --- a/hacks/glx/atunnel.c +++ b/hacks/glx/atunnel.c @@ -267,7 +267,7 @@ ENTRYPOINT void draw_atunnel(ModeInfo * mi) if (!sa->glx_context) return; - glXMakeCurrent(display, window, *(sa->glx_context)); + glXMakeCurrent(display, window, *sa->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -303,13 +303,13 @@ ENTRYPOINT void init_atunnel(ModeInfo * mi) } -/* all sorts of nice cleanup code should go here! */ ENTRYPOINT void free_atunnel(ModeInfo * mi) { -#if 0 atunnelstruct *sa = &Atunnel[MI_SCREEN(mi)]; - FreeTunnel(sa->ts); -#endif + if (!sa->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sa->glx_context); + atunnel_FreeTunnel(sa->ts); + glDeleteTextures (MAX_TEXTURE, sa->texture); } XSCREENSAVER_MODULE ("Atunnel", atunnel) diff --git a/hacks/glx/b_draw.c b/hacks/glx/b_draw.c index 977efbe..1b789b6 100644 --- a/hacks/glx/b_draw.c +++ b/hacks/glx/b_draw.c @@ -127,8 +127,8 @@ glb_draw_end(void *cc) glb_sphere_end (c->d); - (void) free((void *) c->bubble_list); - (void) free((void *) c); + free(c->bubble_list); + free(c); } static int diff --git a/hacks/glx/b_lockglue.c b/hacks/glx/b_lockglue.c index 1bb1e67..d134a66 100644 --- a/hacks/glx/b_lockglue.c +++ b/hacks/glx/b_lockglue.c @@ -195,7 +195,7 @@ draw_bubble3d(ModeInfo * mi) if (!c->glx_context) return; - glXMakeCurrent(display, window, *(c->glx_context)); + glXMakeCurrent(display, window, *c->glx_context); glb_config.polygon_count = 0; glPushMatrix(); @@ -231,8 +231,9 @@ ENTRYPOINT void free_bubble3d(ModeInfo * mi) { struct context *c = &contexts[MI_SCREEN(mi)]; - if (c->draw_context) - glb_draw_end(c->draw_context); + if (!c->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *c->glx_context); + if (c->draw_context) glb_draw_end(c->draw_context); } XSCREENSAVER_MODULE ("Bubble3D", bubble3d) diff --git a/hacks/glx/b_sphere.c b/hacks/glx/b_sphere.c index 78be392..38e3d79 100644 --- a/hacks/glx/b_sphere.c +++ b/hacks/glx/b_sphere.c @@ -213,7 +213,7 @@ glb_sphere_get_triangles(glb_data *d, int *nr_triangles_ptr) void glb_sphere_end(glb_data *d) { - (void) free((void *) d->vertices); - (void) free((void *) d->triangles); + free(d->vertices); + free(d->triangles); free (d); } diff --git a/hacks/glx/blinkbox.c b/hacks/glx/blinkbox.c index f777371..45071a9 100644 --- a/hacks/glx/blinkbox.c +++ b/hacks/glx/blinkbox.c @@ -16,7 +16,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_ball 0 # define release_ball 0 # define ball_handle_event xlockmore_no_events #undef countof @@ -383,11 +382,11 @@ init_ball (ModeInfo *mi) #define SPHERE_SLICES 12 /* how densely to render spheres */ #define SPHERE_STACKS 16 - bp->sp = malloc(sizeof(*bp->sp)); +/* 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"); @@ -449,7 +448,7 @@ draw_ball (ModeInfo *mi) if (! bp->glx_context) return; mi->polygon_count = 0; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -603,6 +602,16 @@ draw_ball (ModeInfo *mi) } +ENTRYPOINT void +free_ball (ModeInfo *mi) +{ + blinkboxstruct *bp = &blinkbox[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (glIsList(bp->ballList)) glDeleteLists(bp->ballList, 1); + if (glIsList(bp->boxList)) glDeleteLists(bp->boxList, 1); +} + XSCREENSAVER_MODULE_2 ("BlinkBox", blinkbox, ball) #endif /* USE_GL */ diff --git a/hacks/glx/blocktube.c b/hacks/glx/blocktube.c index d4a402e..811b185 100644 --- a/hacks/glx/blocktube.c +++ b/hacks/glx/blocktube.c @@ -291,14 +291,13 @@ ENTRYPOINT void free_blocktube (ModeInfo *mi) { blocktube_configuration *lp = &lps[MI_SCREEN(mi)]; # if defined ( I_HAVE_XPM ) - if (lp->glx_context) { - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(lp->glx_context)); - - if (lp->envTexture) - glDeleteTextures(1, &lp->envTexture); - if (lp->texti) - XDestroyImage(lp->texti); - } + if (!lp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *lp->glx_context); + if (lp->envTexture) glDeleteTextures(1, &lp->envTexture); + if (lp->texti) XDestroyImage(lp->texti); + if (glIsList(lp->block_dlist)) glDeleteLists(lp->block_dlist, 1); + if (lp->envTexture) glDeleteTextures (1, &lp->envTexture); + # endif } @@ -308,7 +307,7 @@ ENTRYPOINT void reshape_blocktube (ModeInfo *mi, int width, int height) GLfloat h = (GLfloat) height / (GLfloat) width; int y = 0; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(lp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *lp->glx_context); if (width > height * 5) { /* tiny window: show middle */ height = width; @@ -421,7 +420,7 @@ draw_blocktube (ModeInfo *mi) mi->polygon_count = 0; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(lp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *lp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); diff --git a/hacks/glx/boing.c b/hacks/glx/boing.c index 55a05f3..adaf96b 100644 --- a/hacks/glx/boing.c +++ b/hacks/glx/boing.c @@ -25,7 +25,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -# define free_boing 0 # define release_boing 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -595,7 +594,7 @@ draw_boing (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); mi->polygon_count = 0; @@ -653,6 +652,16 @@ draw_boing (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_boing (ModeInfo *mi) +{ + boing_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->trackball) gltrackball_free (bp->trackball); +} + XSCREENSAVER_MODULE ("Boing", boing) #endif /* USE_GL */ diff --git a/hacks/glx/bouncingcow.c b/hacks/glx/bouncingcow.c index 6f9b45d..bcbea24 100644 --- a/hacks/glx/bouncingcow.c +++ b/hacks/glx/bouncingcow.c @@ -16,7 +16,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -# define free_cow 0 # define release_cow 0 #define DEF_SPEED "1.0" #define DEF_TEXTURE "(none)" @@ -463,7 +462,7 @@ draw_cow (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -514,6 +513,25 @@ draw_cow (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_cow (ModeInfo *mi) +{ + cow_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->floaters) { + for (i = 0; i < bp->nfloaters; i++) + free_rotator (bp->floaters[i].rot); + free (bp->floaters); + } + for (i = 0; i < countof(all_objs); i++) + if (glIsList(bp->dlists[i])) glDeleteLists(bp->dlists[i], 1); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->dlists) free (bp->dlists); +} + XSCREENSAVER_MODULE_2 ("BouncingCow", bouncingcow, cow) #endif /* USE_GL */ diff --git a/hacks/glx/boxed.c b/hacks/glx/boxed.c index 136d468..6ce82bb 100644 --- a/hacks/glx/boxed.c +++ b/hacks/glx/boxed.c @@ -1330,7 +1330,7 @@ draw_boxed(ModeInfo * mi) glDrawBuffer(GL_BACK); - glXMakeCurrent(display, window, *(gp->glx_context)); + glXMakeCurrent(display, window, *gp->glx_context); draw(mi); if (mi->fps_p) do_fps (mi); @@ -1343,23 +1343,17 @@ free_boxed(ModeInfo * mi) { boxedstruct *gp = &boxed[MI_SCREEN(mi)]; int i; - - 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;i<gp->bman.num_balls;i++) { - if (gp->bman.balls[i].bounced) freetris(&gp->tman[i]); - } - free (gp->bman.balls); - free (gp->tman); - free (gp->tex1); - - - } + if (!gp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), gp->window, *gp->glx_context); + if (glIsList(gp->listobjects)) glDeleteLists(gp->listobjects, 3); + for (i=0;i<gp->bman.num_balls;i++) + if (gp->bman.balls[i].bounced) freetris(&gp->tman[i]); + glDeleteLists (gp->gllists[0], 1); + glDeleteLists (gp->gllists[1], 1); + glDeleteLists (gp->gllists[2], 1); + free (gp->bman.balls); + free (gp->tman); + free (gp->tex1); } diff --git a/hacks/glx/bubble3d.c b/hacks/glx/bubble3d.c index 9cd2afc..7b0b686 100644 --- a/hacks/glx/bubble3d.c +++ b/hacks/glx/bubble3d.c @@ -114,20 +114,20 @@ glb_bubble_new(glb_data *d, GLfloat x, GLfloat y, GLfloat z, GLfloat scale, b->contributions = (GLfloat *) malloc(sizeof (GLfloat) * nr_vertices * glb_config.nr_nudge_axes); if (b->contributions == 0) { - (void) free((void *) b); + free(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); + free(b->contributions); + free(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); + free(b->nudge_angle); + free(b->contributions); + free(b); return 0; } /* Initialize primitive elements. */ @@ -176,18 +176,18 @@ glb_bubble_delete(void *bb) if (b != NULL) { if (b->nudge_angle_incr) { - (void) free((void *) b->nudge_angle_incr); + free(b->nudge_angle_incr); b->nudge_angle_incr = NULL; } if (b->nudge_angle) { - (void) free((void *) b->nudge_angle); + free(b->nudge_angle); b->nudge_angle = NULL; } if (b->contributions) { - (void) free((void *) b->contributions); + free(b->contributions); b->contributions = NULL; } - (void) free((void *) b); + free(b); b = NULL; } } @@ -267,7 +267,7 @@ glb_bubble_draw(glb_data *d, void *bb) } glEnd(); glPopMatrix(); - (void) free((void *) new_vertices); + free(new_vertices); glb_config.polygon_count += nr_triangles; } diff --git a/hacks/glx/cage.c b/hacks/glx/cage.c index 66f48aa..32384a7 100644 --- a/hacks/glx/cage.c +++ b/hacks/glx/cage.c @@ -82,7 +82,6 @@ static const char sccsid[] = "@(#)cage.c 5.01 2001/03/01 xlockmore"; "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_cage 0 # define release_cage 0 # define cage_handle_event xlockmore_no_events # include "xlockmore.h" /* from the xscreensaver distribution */ @@ -418,7 +417,7 @@ draw_cage (ModeInfo * mi) return; mi->polygon_count = 0; - glXMakeCurrent(display, window, *(cp->glx_context)); + glXMakeCurrent(display, window, *cp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -470,11 +469,17 @@ change_cage (ModeInfo * mi) if (!cp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cp->glx_context); pinit(mi); } #endif /* !STANDALONE */ +ENTRYPOINT void +free_cage (ModeInfo * mi) +{ + /* nothing to do */ +} + XSCREENSAVER_MODULE ("Cage", cage) #endif diff --git a/hacks/glx/carousel.c b/hacks/glx/carousel.c index 863b1a5..c1132b1 100644 --- a/hacks/glx/carousel.c +++ b/hacks/glx/carousel.c @@ -34,7 +34,6 @@ "*grabDesktopImages: False \n" \ "*chooseRandomImages: True \n" -# define free_carousel 0 # define release_carousel 0 # include "xlockmore.h" @@ -497,6 +496,7 @@ hack_resources (Display *dpy) value.addr = buf2; value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); + free (val); # endif /* !HAVE_JWXYZ */ } @@ -847,7 +847,7 @@ draw_carousel (ModeInfo *mi) if (!ss->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(ss->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *ss->glx_context); if (ss->awaiting_first_images_p) if (!load_initial_images (mi)) @@ -936,6 +936,29 @@ draw_carousel (ModeInfo *mi) glXSwapBuffers (MI_DISPLAY (mi), MI_WINDOW(mi)); } + +ENTRYPOINT void +free_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->rot) free_rotator (ss->rot); + if (ss->trackball) gltrackball_free (ss->trackball); + if (ss->texfont) free_texture_font (ss->texfont); + if (ss->titlefont) free_texture_font (ss->titlefont); + for (i = 0; i < ss->nframes; i++) { + if (ss->frames[i]->current.title) free (ss->frames[i]->current.title); + if (ss->frames[i]->loading.title) free (ss->frames[i]->loading.title); + if (ss->frames[i]->rot) free_rotator (ss->frames[i]->rot); + if (ss->frames[i]->current.texid) + glDeleteTextures (1, &ss->frames[i]->current.texid); + if (ss->frames[i]->loading.texid) + glDeleteTextures (1, &ss->frames[i]->loading.texid); + } +} + XSCREENSAVER_MODULE ("Carousel", carousel) #endif /* USE_GL */ diff --git a/hacks/glx/circuit.c b/hacks/glx/circuit.c index 744e4b6..b8b845e 100644 --- a/hacks/glx/circuit.c +++ b/hacks/glx/circuit.c @@ -2072,7 +2072,7 @@ ENTRYPOINT void draw_circuit(ModeInfo *mi) if (!ci->glx_context) return; - glXMakeCurrent(disp, w, *(ci->glx_context)); + glXMakeCurrent(disp, w, *ci->glx_context); display(mi); @@ -2084,8 +2084,12 @@ ENTRYPOINT void draw_circuit(ModeInfo *mi) ENTRYPOINT void free_circuit(ModeInfo *mi) { Circuit *ci = &circuit[MI_SCREEN(mi)]; - if (ci->font) - free_texture_font (ci->font); + int i; + if (!ci->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *ci->glx_context); + if (ci->font) free_texture_font (ci->font); + for (i = 0 ; i < 12 ; i++) + if (glIsList(ci->band_list[i])) glDeleteLists(ci->band_list[i], 1); FreeAllGL(mi); } diff --git a/hacks/glx/cityflow.c b/hacks/glx/cityflow.c index 2b3bd4f..a6660af 100644 --- a/hacks/glx/cityflow.c +++ b/hacks/glx/cityflow.c @@ -14,7 +14,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -# define free_cube 0 # define release_cube 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -381,7 +380,7 @@ draw_cube (ModeInfo *mi) return; mi->polygon_count = 0; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cc->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cc->glx_context); interference (mi); animate_cubes (mi); @@ -540,6 +539,24 @@ draw_cube (ModeInfo *mi) } +ENTRYPOINT void +free_cube (ModeInfo *mi) +{ + cube_configuration *cc = &ccs[MI_SCREEN(mi)]; + if (!cc->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cc->glx_context); + + if (cc->waves) { + free (cc->waves->srcs); + free (cc->waves->heights); + free (cc->waves); + } + if (cc->trackball) gltrackball_free (cc->trackball); + if (cc->cubes) free (cc->cubes); + if (cc->colors) free (cc->colors); +} + + XSCREENSAVER_MODULE_2 ("Cityflow", cityflow, cube) #endif /* USE_GL */ diff --git a/hacks/glx/companion.c b/hacks/glx/companion.c index 3c004a5..1f518b1 100644 --- a/hacks/glx/companion.c +++ b/hacks/glx/companion.c @@ -26,7 +26,6 @@ /* #define DEBUG */ -# define free_cube 0 # define release_cube 0 #define DEF_SPEED "1.0" #define DEF_SPIN "False" @@ -548,7 +547,7 @@ draw_cube (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -587,6 +586,23 @@ draw_cube (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_cube (ModeInfo *mi) +{ + cube_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + for (i = 0; i < bp->nfloaters; i++) + if (bp->floaters[i].rot) free_rotator (bp->floaters[i].rot); + for (i = 0; i < countof(all_objs)+1; i++) + if (glIsList(bp->dlists[i])) glDeleteLists(bp->dlists[i], 1); + if (bp->floaters) free (bp->floaters); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->dlists) free (bp->dlists); +} + XSCREENSAVER_MODULE_2 ("CompanionCube", companioncube, cube) #endif /* USE_GL */ diff --git a/hacks/glx/crackberg.c b/hacks/glx/crackberg.c index 74c6915..22d3adc 100644 --- a/hacks/glx/crackberg.c +++ b/hacks/glx/crackberg.c @@ -95,7 +95,7 @@ struct _Trile { const Morph *morph; struct _Trile *left, *right, *parent; /* for bst, NOT spatial */ - struct _Trile *next_free; /* for memory allocation */ + struct _Trile *next_free, *next0; /* for memory allocation */ }; enum { MOTION_AUTO = 0, MOTION_MANUAL = 1, MOTION_LROT= 2, MOTION_RROT = 4, @@ -124,6 +124,7 @@ struct _cberg_state { double *heights, *norms; Trile *free_head; /* for trile_[alloc|free] */ + Trile *all_triles; double draw_elapsed; @@ -539,13 +540,15 @@ static Trile *trile_alloc(cberg_state *cberg) 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))) { + if (!(new = calloc(1, sizeof(Trile))) + || !(new->l = (double *) calloc(sizeof(double), cberg->epoints * 3))) { perror(progname); exit(1); } new->r = new->l + cberg->epoints; new->v = new->r + cberg->epoints; + new->next0 = cberg->all_triles; + cberg->all_triles = new; #ifdef DEBUG printf("needed to alloc; [%d]\n", cberg->count); #endif @@ -584,13 +587,15 @@ static void trile_draw(Trile *tr, void *ignore) static void grow_init(Trile *tr) { - tr->morph_data = (void *) malloc(sizeof(double)); + if (!tr->morph_data) + 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); + if (tr->morph_data) free(tr->morph_data); + tr->morph_data = 0; } static void grow_draw(Trile *tr) @@ -619,13 +624,15 @@ static void grow_dying_iter(Trile *tr, cberg_state *cberg) static void fall_init(Trile *tr) { - tr->morph_data = (void *) malloc(sizeof(double)); + if (!tr->morph_data) + tr->morph_data = (void *) malloc(sizeof(double)); *((double *)tr->morph_data) = 0.0; } static void fall_free(Trile *tr) { - free(tr->morph_data); + if (tr->morph_data) free(tr->morph_data); + tr->morph_data = 0; } static void fall_draw(Trile *tr) @@ -654,13 +661,15 @@ static void fall_dying_iter(Trile *tr, cberg_state *cberg) static void yeast_init(Trile *tr) { - tr->morph_data = (void *) malloc(sizeof(double)); + if (!tr->morph_data) + tr->morph_data = (void *) malloc(sizeof(double)); *((double *)tr->morph_data) = 0.02; } static void yeast_free(Trile *tr) { - free(tr->morph_data); + if (tr->morph_data) free(tr->morph_data); + tr->morph_data = 0; } static void yeast_draw(Trile *tr) @@ -1362,7 +1371,7 @@ ENTRYPOINT void draw_crackberg (ModeInfo *mi) 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)); + 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; @@ -1458,9 +1467,17 @@ ENTRYPOINT void draw_crackberg (ModeInfo *mi) ENTRYPOINT void free_crackberg (ModeInfo *mi) { cberg_state *cberg = &cbergs[MI_SCREEN(mi)]; - if (cberg->norms) - free(cberg->norms); - free(cberg->heights); + if (!cberg->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cberg->glx_context); + while (cberg->all_triles) { + Trile *n = cberg->all_triles; + cberg->all_triles = n->next0; + free (n->l); + if (n->morph_data) free (n->morph_data); + free (n); + } + if (cberg->norms) free(cberg->norms); + if (cberg->heights) free(cberg->heights); } XSCREENSAVER_MODULE ("Crackberg", crackberg) diff --git a/hacks/glx/crumbler.c b/hacks/glx/crumbler.c index 8e783db..b7b8acc 100644 --- a/hacks/glx/crumbler.c +++ b/hacks/glx/crumbler.c @@ -747,7 +747,7 @@ draw_crumbler (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); tick_crumbler (mi); @@ -861,12 +861,14 @@ free_crumbler (ModeInfo *mi) { crumbler_configuration *bp = &bps[MI_SCREEN(mi)]; int i; - free (bp->trackball); - free (bp->rot); - free (bp->colors); + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->colors) free (bp->colors); for (i = 0; i < bp->nchunks; i++) free_chunk (bp->chunks[i]); - free (bp->chunks); + if (bp->chunks) free (bp->chunks); } diff --git a/hacks/glx/cube21.c b/hacks/glx/cube21.c index 451a523..de72206 100644 --- a/hacks/glx/cube21.c +++ b/hacks/glx/cube21.c @@ -45,7 +45,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" -# define free_cube21 0 # define release_cube21 0 #include "xlockmore.h" @@ -915,7 +914,7 @@ ENTRYPOINT void draw_cube21(ModeInfo * mi) MI_IS_DRAWN(mi) = True; if (!cp->glx_context) return; mi->polygon_count = 0; - glXMakeCurrent(display, window, *(cp->glx_context)); + glXMakeCurrent(display, window, *cp->glx_context); if (!draw_main(mi, cp)) { MI_ABORT(mi); return; @@ -930,11 +929,18 @@ 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)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cp->glx_context); init_gl(mi); } #endif /* !STANDALONE */ +ENTRYPOINT void free_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); + gltrackball_free (cp->trackball); +} XSCREENSAVER_MODULE ("Cube21", cube21) diff --git a/hacks/glx/cubenetic.c b/hacks/glx/cubenetic.c index cc9b0d6..0ddbb29 100644 --- a/hacks/glx/cubenetic.c +++ b/hacks/glx/cubenetic.c @@ -15,7 +15,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_cube 0 # define release_cube 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -530,7 +529,7 @@ draw_cube (ModeInfo *mi) return; mi->polygon_count = 0; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cc->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cc->glx_context); glShadeModel(GL_FLAT); @@ -593,6 +592,27 @@ draw_cube (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_cube (ModeInfo *mi) +{ + cube_configuration *cc = &ccs[MI_SCREEN(mi)]; + if (!cc->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cc->glx_context); + if (cc->waves) { + free (cc->waves->srcs); + free (cc->waves->heights); + free (cc->waves); + } + if (glIsList(cc->cube_list)) glDeleteLists(cc->cube_list, 1); + if (cc->rot) free_rotator (cc->rot); + if (cc->trackball) gltrackball_free (cc->trackball); + if (cc->texture_colors) free (cc->texture_colors); + if (cc->cube_colors) free (cc->cube_colors); + if (cc->texture) free (cc->texture); + if (cc->texture_id) glDeleteTextures (1, &cc->texture_id); +} + XSCREENSAVER_MODULE_2 ("Cubenetic", cubenetic, cube) #endif /* USE_GL */ diff --git a/hacks/glx/cubestack.c b/hacks/glx/cubestack.c index 70883f6..928ad1c 100644 --- a/hacks/glx/cubestack.c +++ b/hacks/glx/cubestack.c @@ -14,7 +14,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_cube 0 # define release_cube 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -406,7 +405,7 @@ draw_cube (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); @@ -457,6 +456,18 @@ draw_cube (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_cube (ModeInfo *mi) +{ + cube_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->colors) free (bp->colors); +} + XSCREENSAVER_MODULE_2 ("CubeStack", cubestack, cube) #endif /* USE_GL */ diff --git a/hacks/glx/cubestorm.c b/hacks/glx/cubestorm.c index cf973c9..afa1797 100644 --- a/hacks/glx/cubestorm.c +++ b/hacks/glx/cubestorm.c @@ -17,7 +17,6 @@ "*suppressRotationAnimation: True\n" \ -# define free_cube 0 # define release_cube 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -391,7 +390,7 @@ draw_cube (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glShadeModel(GL_SMOOTH); @@ -464,6 +463,25 @@ draw_cube (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_cube (ModeInfo *mi) +{ + cube_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->subcubes) { + for (i = 0; i < MI_COUNT(mi); i++) + free_rotator (bp->subcubes[i].rot); + free (bp->subcubes); + } + if (bp->hist) free (bp->hist); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->colors) free (bp->colors); + +} + XSCREENSAVER_MODULE_2 ("CubeStorm", cubestorm, cube) #endif /* USE_GL */ diff --git a/hacks/glx/cubetwist.c b/hacks/glx/cubetwist.c index 61af287..776e396 100644 --- a/hacks/glx/cubetwist.c +++ b/hacks/glx/cubetwist.c @@ -517,7 +517,7 @@ draw_cube (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); @@ -574,6 +574,8 @@ ENTRYPOINT void free_cube (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); while (bp->cubes) { cube *c = bp->cubes->next; @@ -587,6 +589,8 @@ free_cube (ModeInfo *mi) free (bp->oscillators); bp->oscillators = o; } + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); } diff --git a/hacks/glx/cubicgrid.c b/hacks/glx/cubicgrid.c index 34b6c34..d7ef6f2 100644 --- a/hacks/glx/cubicgrid.c +++ b/hacks/glx/cubicgrid.c @@ -24,7 +24,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_cubicgrid 0 # define release_cubicgrid 0 #include "xlockmore.h" @@ -242,7 +241,7 @@ ENTRYPOINT void draw_cubicgrid(ModeInfo * mi) cp = &cubicgrid[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!cp->glx_context) return; - glXMakeCurrent(display, window, *(cp->glx_context)); + glXMakeCurrent(display, window, *cp->glx_context); if (!draw_main(mi)) { MI_ABORT(mi); return; @@ -258,11 +257,20 @@ 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)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cp->glx_context); init_gl(mi); } #endif /* !STANDALONE */ +ENTRYPOINT void free_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); + gltrackball_free (cp->trackball); + free_rotator (cp->rot); + if (glIsList(cp->list)) glDeleteLists(cp->list, 1); +} XSCREENSAVER_MODULE ("CubicGrid", cubicgrid) diff --git a/hacks/glx/dangerball.c b/hacks/glx/dangerball.c index e40ccc5..7cb38e0 100644 --- a/hacks/glx/dangerball.c +++ b/hacks/glx/dangerball.c @@ -15,7 +15,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_ball 0 # define release_ball 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -294,7 +293,7 @@ draw_ball (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glShadeModel(GL_SMOOTH); @@ -359,6 +358,21 @@ draw_ball (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_ball (ModeInfo *mi) +{ + ball_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->colors) free (bp->colors); + if (bp->spikes) free (bp->spikes); + if (bp->rot) free_rotator (bp->rot); + if (bp->trackball) gltrackball_free (bp->trackball); + if (glIsList(bp->ball_list)) glDeleteLists(bp->ball_list, 1); + if (glIsList(bp->spike_list)) glDeleteLists(bp->spike_list, 1); +} + XSCREENSAVER_MODULE_2 ("DangerBall", dangerball, ball) #endif /* USE_GL */ diff --git a/hacks/glx/discoball.c b/hacks/glx/discoball.c index 4085c56..427d7e9 100644 --- a/hacks/glx/discoball.c +++ b/hacks/glx/discoball.c @@ -637,7 +637,7 @@ draw_ball (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glShadeModel(GL_SMOOTH); @@ -693,13 +693,17 @@ ENTRYPOINT void free_ball (ModeInfo *mi) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); while (bp->tiles) { tile *t = bp->tiles->next; free (bp->tiles); bp->tiles = t; } - free (bp->rays); + if (bp->rays) free (bp->rays); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); } XSCREENSAVER_MODULE_2 ("Discoball", discoball, ball) diff --git a/hacks/glx/dnalogo.c b/hacks/glx/dnalogo.c index 2b24f83..3afb73c 100644 --- a/hacks/glx/dnalogo.c +++ b/hacks/glx/dnalogo.c @@ -67,7 +67,6 @@ # define CWFONT "-*-helvetica-medium-r-normal-*-*-240-*-*-*-*-*-*" # endif -# define free_logo 0 # define release_logo 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -2944,6 +2943,7 @@ init_logo (ModeInfo *mi) dc->color[2] = xcolor.blue / 65535.0; dc->color[3] = 1.0; + free (color_name); 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') @@ -2956,6 +2956,7 @@ init_logo (ModeInfo *mi) fprintf (stderr, "%s: can't parse color %s\n", progname, color_name); exit (1); } + free (color_name); # ifdef CW dc->codeword_color[0] = xcolor.red / 65535.0; @@ -2975,6 +2976,7 @@ init_logo (ModeInfo *mi) fprintf (stderr, "%s: can't parse color %s\n", progname, color_name); exit (1); } + free (color_name); dc->codeword_bg[0] = xcolor.red / 65535.0; dc->codeword_bg[1] = xcolor.green / 65535.0; @@ -3289,7 +3291,7 @@ draw_logo (ModeInfo *mi) return; mi->polygon_count = 0; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(dc->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *dc->glx_context); if (!wire && dc->wire_overlay == 0 && @@ -3634,6 +3636,35 @@ draw_logo (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_logo (ModeInfo *mi) +{ + logo_configuration *dc = &dcs[MI_SCREEN(mi)]; + if (!dc->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *dc->glx_context); + if (dc->trackball) gltrackball_free (dc->trackball); +# ifdef CW + if (dc->codeword_text) free (dc->codeword_text); + if (dc->codeword_text_out) free (dc->codeword_text_out); + if (dc->scene_rot) free_rotator (dc->scene_rot); + if (dc->font) free_texture_font (dc->font); +# endif +# ifdef DEBUG + if (dc->label_font) free_texture_font (dc->label_font); +# endif + glDeleteLists(dc->helix_list, 1); + glDeleteLists(dc->helix_list_wire, 1); + glDeleteLists(dc->helix_list_facetted, 1); + glDeleteLists(dc->pizza_list, 1); + glDeleteLists(dc->pizza_list_wire, 1); + glDeleteLists(dc->pizza_list_facetted, 1); + glDeleteLists(dc->gasket_list, 1); + glDeleteLists(dc->gasket_list_wire, 1); + glDeleteLists(dc->frame_list, 1); + glDeleteLists(dc->frame_list_wire, 1); +} + XSCREENSAVER_MODULE_2 ("DNALogo", dnalogo, logo) #endif /* USE_GL */ diff --git a/hacks/glx/dxf2gl.pl b/hacks/glx/dxf2gl.pl index 9ed470c..65b5a80 100755 --- a/hacks/glx/dxf2gl.pl +++ b/hacks/glx/dxf2gl.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2003-2014 Jamie Zawinski <jwz@jwz.org> +# Copyright © 2003-2018 Jamie Zawinski <jwz@jwz.org> # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -17,8 +17,8 @@ # --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. +# --smooth [DEG] When computing normals for the vertexes, average the +# normals at any edge which is less than N degrees. # If this option is not specified, planar normals will be # used, resulting in a "faceted" object. # @@ -39,7 +39,7 @@ 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 ($version) = ('$Revision: 1.13 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; @@ -121,8 +121,8 @@ sub vector_angle($$$$$$) { # 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) = @_; +sub compute_vertex_normals($@) { + my ($smooth, @points) = @_; my $npoints = ($#points+1) / 3; my $nfaces = $npoints / 3; @@ -185,7 +185,7 @@ sub compute_vertex_normals(@) { # 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); + next if ($angle >= $smooth); $nx += $fnorm[0]; $ny += $fnorm[1]; @@ -208,7 +208,7 @@ sub parse_dxf($$$$$) { # 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); + 1 while ($dxf =~ s/([^ \t\n])[ \t\#]+([^ \t\n])/$1_$2/gs); $dxf =~ s/\r/\n/gs; @@ -455,7 +455,7 @@ sub parse_dxf($$$$$) { sub generate_c_1($$$$$@) { - my ($name, $outfile, $smooth_p, $wireframe_p, $normalize_p, @points) = @_; + my ($name, $outfile, $smooth, $wireframe_p, $normalize_p, @points) = @_; my $ccw_p = 1; # counter-clockwise winding rule for computing normals @@ -463,8 +463,8 @@ sub generate_c_1($$$$$@) { my $nfaces = ($wireframe_p ? $npoints/2 : $npoints/3); my @normals; - if ($smooth_p && !$wireframe_p) { - @normals = compute_vertex_normals (@points); + if ($smooth && !$wireframe_p) { + @normals = compute_vertex_normals ($smooth, @points); if ($#normals != $#points) { error ("computed " . (($#normals+1)/3) . " normals for " . @@ -514,7 +514,7 @@ sub generate_c_1($$$$$@) { $nbx, $nby, $nbz, $ncx, $ncy, $ncz); - if ($smooth_p) { + if ($smooth) { $nax = $normals[$i*9]; $nay = $normals[$i*9+1]; $naz = $normals[$i*9+2]; @@ -572,7 +572,7 @@ sub generate_c_1($$$$$@) { sub generate_c($$$$$$) { - my ($infile, $outfile, $smooth_p, $wireframe_p, $normalize_p, $layers) = @_; + my ($infile, $outfile, $smooth, $wireframe_p, $normalize_p, $layers) = @_; my $code = ''; @@ -594,8 +594,8 @@ sub generate_c($$$$$$) { strftime ("%d-%b-%Y", localtime ()) . ".\n" . " " . ($wireframe_p ? "Wireframe." - : ($smooth_p ? - "Smoothed vertex normals." : + : ($smooth ? + "Smoothed vertex normals at $smooth\x{00B0}." : "Faceted face normals.")) . ($normalize_p ? " Normalized to unit bounding box." : "") . "\n" . @@ -613,7 +613,7 @@ sub generate_c($$$$$$) { my $name = $layer ? "${token}_${layer}" : $token; my ($c, $np, $nf) = generate_c_1 ($name, $outfile, - $smooth_p, $wireframe_p, $normalize_p, + $smooth, $wireframe_p, $normalize_p, @{$layers->{$layer}}); $code .= $c; $npoints += $np; @@ -648,7 +648,7 @@ sub cmp_files($$) { sub dxf_to_gl($$$$$$) { - my ($infile, $outfile, $smooth_p, $normalize_p, $wireframe_p, $layers_p) = @_; + my ($infile, $outfile, $smooth, $normalize_p, $wireframe_p, $layers_p) = @_; open (my $in, "<$infile") || error ("$infile: $!"); my $filename = ($infile eq '-' ? "<stdin>" : $infile); @@ -662,14 +662,14 @@ sub dxf_to_gl($$$$$$) { my $data = parse_dxf ($filename, $dxf, $normalize_p, $wireframe_p, $layers_p); $filename = ($outfile eq '-' ? "<stdout>" : $outfile); - my $code = generate_c ($infile, $filename, $smooth_p, $wireframe_p, + my $code = generate_c ($infile, $filename, $smooth, $wireframe_p, $normalize_p, $data); if ($outfile eq '-') { print STDOUT $code; } else { my $tmp = "$outfile.tmp"; - open (my $out, '>', $tmp) || error ("$tmp: $!"); + open (my $out, '>:utf8', $tmp) || error ("$tmp: $!"); print $out $code || error ("$filename: $!"); close $out || error ("$filename: $!"); if (cmp_files ($filename, $tmp)) { @@ -702,7 +702,7 @@ sub usage() { sub main() { my ($infile, $outfile); my $normalize_p = 0; - my $smooth_p = 0; + my $smooth = 0; my $wireframe_p = 0; my $layers_p = 0; while ($_ = $ARGV[0]) { @@ -710,7 +710,14 @@ sub main() { if ($_ eq "--verbose") { $verbose++; } elsif (m/^-v+$/) { $verbose += length($_)-1; } elsif ($_ eq "--normalize") { $normalize_p = 1; } - elsif ($_ eq "--smooth") { $smooth_p = 1; } + elsif ($_ eq "--smooth") { + if ($ARGV[0] && $ARGV[0] =~ m/^(\d[\d.]*)%?$/s) { + $smooth = 0 + $1; + shift @ARGV; + } else { + $smooth = 30; + } + } elsif ($_ eq "--wireframe") { $wireframe_p = 1; } elsif ($_ eq "--layers") { $layers_p = 1; } elsif (m/^-./) { usage; } @@ -722,7 +729,7 @@ sub main() { $infile = "-" unless defined ($infile); $outfile = "-" unless defined ($outfile); - dxf_to_gl ($infile, $outfile, $smooth_p, $normalize_p, $wireframe_p, $layers_p); + dxf_to_gl ($infile, $outfile, $smooth, $normalize_p, $wireframe_p, $layers_p); } main; diff --git a/hacks/glx/dymaxionmap.c b/hacks/glx/dymaxionmap.c index 711db2e..41de703 100644 --- a/hacks/glx/dymaxionmap.c +++ b/hacks/glx/dymaxionmap.c @@ -277,6 +277,7 @@ create_daylight_mask (Display *dpy, Visual *v, int w, int h) { XImage *image = XCreateImage (dpy, v, 8, ZPixmap, 0, 0, w, h, 8, 0); int x, y; +# undef sun /* Doh */ XYZ sun; double axial_tilt = frand(23.4) / (180/M_PI) * RANDSIGN(); double dusk = M_PI * 0.035; @@ -1422,7 +1423,7 @@ draw_planet (ModeInfo * mi) glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glXMakeCurrent (dpy, window, *(gp->glx_context)); + glXMakeCurrent (dpy, window, *gp->glx_context); mi->polygon_count = 0; @@ -1631,21 +1632,28 @@ free_planet (ModeInfo * mi) planetstruct *gp = &planets[MI_SCREEN(mi)]; int i; + if (!gp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *gp->glx_context); + + if (gp->font_data) free_texture_font (gp->font_data); + if (gp->trackball) gltrackball_free (gp->trackball); + if (gp->rot) free_rotator (gp->rot); + if (gp->rot2) free_rotator (gp->rot2); + if (gp->day) XDestroyImage (gp->day); if (gp->night) XDestroyImage (gp->night); if (gp->dusk) XDestroyImage (gp->dusk); if (gp->cvt) XDestroyImage (gp->cvt); - for (i = 0; i < gp->nimages; i++) - if (gp->images[i]) XDestroyImage (gp->images[i]); - free (gp->images); - - if (gp->glx_context) { - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(gp->glx_context)); - - if (glIsList(gp->starlist)) - glDeleteLists(gp->starlist, 1); + if (gp->images) { + for (i = 0; i < gp->nimages; i++) + if (gp->images[i]) XDestroyImage (gp->images[i]); + free (gp->images); } + + if (glIsList(gp->starlist)) glDeleteLists(gp->starlist, 1); + if (gp->tex1) glDeleteTextures (1, &gp->tex1); + if (gp->tex2) glDeleteTextures (1, &gp->tex2); } diff --git a/hacks/glx/endgame.c b/hacks/glx/endgame.c index ddba7f9..cc5f22c 100644 --- a/hacks/glx/endgame.c +++ b/hacks/glx/endgame.c @@ -20,7 +20,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -# define free_chess 0 # define release_chess 0 # include "xlockmore.h" @@ -894,7 +893,7 @@ ENTRYPOINT void draw_chess(ModeInfo *mi) if(!cs->glx_context) return; - glXMakeCurrent(disp, w, *(cs->glx_context)); + glXMakeCurrent(disp, w, *cs->glx_context); /** code for moving a piece */ if(cs->moving && ++cs->steps == 100) { @@ -966,6 +965,22 @@ ENTRYPOINT void draw_chess(ModeInfo *mi) glXSwapBuffers(disp, w); } + +ENTRYPOINT void free_chess(ModeInfo *mi) +{ + Chesscreen *cs = &qs[MI_SCREEN(mi)]; + int i; + if (!cs->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cs->glx_context); + gltrackball_free (cs->trackball); + if (cs->piecetexture) glDeleteTextures (1, &cs->piecetexture); + if (cs->boardtexture) glDeleteTextures (1, &cs->boardtexture); + + /* this is horrible! List numbers are hardcoded! */ + for (i = 1; i <= 20; i++) + if (glIsList(i)) glDeleteLists(i, 1); +} + XSCREENSAVER_MODULE_2 ("Endgame", endgame, chess) #endif diff --git a/hacks/glx/energystream.c b/hacks/glx/energystream.c index 7221f0d..cc8b5b2 100644 --- a/hacks/glx/energystream.c +++ b/hacks/glx/energystream.c @@ -367,16 +367,19 @@ free_stream (ModeInfo * mi) stream_configuration *es = &ess[MI_SCREEN(mi)]; int i; - if (es->glx_context) { - glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *(es->glx_context)); + if (!es->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *es->glx_context); - for (i = 0; i < es->num_streams; i++) { - free (es->streams[i].flares); - glDeleteTextures (1, &es->streams[i].flare_tex); - } + if (es->trackball) gltrackball_free (es->trackball); + if (es->rot) free_rotator (es->rot); - free (es->streams); + for (i = 0; i < es->num_streams; i++) { + free (es->streams[i].flares); + glDeleteTextures (1, &es->streams[i].flare_tex); } + + if (es->streams) free (es->streams); + } @@ -438,7 +441,7 @@ draw_stream (ModeInfo *mi) 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)); + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *es->glx_context); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); diff --git a/hacks/glx/engine.c b/hacks/glx/engine.c index 0f39b8d..ba30d81 100644 --- a/hacks/glx/engine.c +++ b/hacks/glx/engine.c @@ -27,7 +27,6 @@ "*suppressRotationAnimation: True\n" \ "*titleFont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \ -# define free_engine 0 # define release_engine 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -985,7 +984,7 @@ ENTRYPOINT void draw_engine(ModeInfo *mi) if (!e->glx_context) return; - glXMakeCurrent(disp, w, *(e->glx_context)); + glXMakeCurrent(disp, w, *e->glx_context); mi->polygon_count = display(mi); @@ -1001,6 +1000,20 @@ ENTRYPOINT void draw_engine(ModeInfo *mi) glXSwapBuffers(disp, w); } + +ENTRYPOINT void free_engine(ModeInfo *mi) +{ + Engine *e = &engine[MI_SCREEN(mi)]; + if (!e->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *e->glx_context); + if (e->font_data) free_texture_font (e->font_data); + free (e->engine_name); + gltrackball_free (e->trackball); + free_rotator (e->rot); + if (glIsList(e->piston_list)) glDeleteLists(e->piston_list, 1); + if (glIsList(e->shaft_list)) glDeleteLists(e->shaft_list, 1); +} + XSCREENSAVER_MODULE ("Engine", engine) #endif diff --git a/hacks/glx/esper.c b/hacks/glx/esper.c index 7a0bb0b..e7d85a9 100644 --- a/hacks/glx/esper.c +++ b/hacks/glx/esper.c @@ -147,7 +147,6 @@ "*reticleColor: #FFFF77\n" \ "*textColor: #FFFFBB\n" \ -# define free_esper 0 # define refresh_esper 0 # define release_esper 0 # include "xlockmore.h" @@ -2327,6 +2326,7 @@ parse_color (ModeInfo *mi, char *key, GLfloat color[4]) key, string); exit (1); } + free (string); color[0] = xcolor.red / 65536.0; color[1] = xcolor.green / 65536.0; @@ -2390,7 +2390,7 @@ draw_esper (ModeInfo *mi) if (!ss->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(ss->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *ss->glx_context); mi->polygon_count = 0; @@ -2407,6 +2407,31 @@ draw_esper (ModeInfo *mi) glXSwapBuffers (MI_DISPLAY (mi), MI_WINDOW(mi)); } + +ENTRYPOINT void +free_esper (ModeInfo *mi) +{ + esper_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->font_data) free_texture_font (ss->font_data); + for (i = 0; i < ss->nimages; i++) { + if (ss->images[i]) { + if (ss->images[i]->title) free (ss->images[i]->title); + if (ss->images[i]->texid) glDeleteTextures (1, &ss->images[i]->texid); + free (ss->images[i]); + } + } + for (i = 0; i < countof(ss->sprites); i++) { + if (ss->sprites[i]) { + if (ss->sprites[i]->text) free (ss->sprites[i]->text); + if (ss->sprites[i]) free (ss->sprites[i]); + } + } +} + XSCREENSAVER_MODULE ("Esper", esper) #endif /* USE_GL */ diff --git a/hacks/glx/extrusion.c b/hacks/glx/extrusion.c index 3dee71c..f8aaeb5 100644 --- a/hacks/glx/extrusion.c +++ b/hacks/glx/extrusion.c @@ -31,7 +31,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" -# define free_extrusion 0 # define release_extrusion 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -314,7 +313,7 @@ draw_extrusion(ModeInfo * mi) if (!gp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(gp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *gp->glx_context); glPushMatrix(); @@ -551,6 +550,17 @@ init_extrusion (ModeInfo * mi) } + +ENTRYPOINT void +free_extrusion (ModeInfo * mi) +{ + extrusionstruct *gp = &Extrusion[MI_SCREEN(mi)]; + if (!gp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *gp->glx_context); + if (gp->trackball) gltrackball_free (gp->trackball); + if (gp->rot) free_rotator (gp->rot); +} + XSCREENSAVER_MODULE ("Extrusion", extrusion) #endif /* USE_GL */ diff --git a/hacks/glx/flipflop.c b/hacks/glx/flipflop.c index c26458c..fe1643b 100644 --- a/hacks/glx/flipflop.c +++ b/hacks/glx/flipflop.c @@ -456,7 +456,7 @@ draw_flipflop(ModeInfo *mi) if(!c->glx_context || (textured && !c->got_texture)) return; - glXMakeCurrent(disp, w, *(c->glx_context)); + glXMakeCurrent(disp, w, *c->glx_context); mi->polygon_count = display(mi); @@ -474,10 +474,14 @@ ENTRYPOINT void free_flipflop(ModeInfo *mi) { Flipflopcreen *c = &qs[MI_SCREEN(mi)]; + if (!c->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *c->glx_context); + if(c->trackball) gltrackball_free(c->trackball); if (c->sheet) { randsheet_free(c->sheet); free (c->sheet); } + if (c->texid) glDeleteTextures (1, &c->texid); } /*** ADDED RANDSHEET FUNCTIONS ***/ diff --git a/hacks/glx/flipscreen3d.c b/hacks/glx/flipscreen3d.c index e4db5df..ce3dc76 100644 --- a/hacks/glx/flipscreen3d.c +++ b/hacks/glx/flipscreen3d.c @@ -21,7 +21,6 @@ "*useSHM: True \n" \ "*suppressRotationAnimation: True\n" \ -# define free_screenflip 0 # define release_screenflip 0 # include "xlockmore.h" /* from the xscreensaver distribution */ # include "gltrackball.h" @@ -499,7 +498,7 @@ ENTRYPOINT void draw_screenflip(ModeInfo *mi) if (c->waiting_for_image_p && c->first_image_p) return; - glXMakeCurrent(disp, w, *(c->glx_context)); + glXMakeCurrent(disp, w, *c->glx_context); glBindTexture(GL_TEXTURE_2D, c->texid); @@ -513,6 +512,16 @@ ENTRYPOINT void draw_screenflip(ModeInfo *mi) glXSwapBuffers(disp, w); } + +ENTRYPOINT void free_screenflip(ModeInfo *mi) +{ + Screenflip *c = &screenflip[MI_SCREEN(mi)]; + if (!c->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *c->glx_context); + gltrackball_free (c->trackball); + if (c->texid) glDeleteTextures (1, &c->texid); +} + XSCREENSAVER_MODULE_2 ("FlipScreen3D", flipscreen3d, screenflip) #endif diff --git a/hacks/glx/fliptext.c b/hacks/glx/fliptext.c index c233e8b..951c188 100644 --- a/hacks/glx/fliptext.c +++ b/hacks/glx/fliptext.c @@ -798,6 +798,7 @@ ENTRYPOINT void init_fliptext (ModeInfo *mi) { int wire = MI_IS_WIREFRAME(mi); + char *s; fliptext_configuration *sc; @@ -897,9 +898,9 @@ init_fliptext (ModeInfo *mi) 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); + s = get_string_resource(mi->dpy, "foreground", "Foreground"); + parse_color (mi, "foreground", s, sc->color); + if (s) free (s); sc->top_margin = (sc->char_width * 100); sc->bottom_margin = -sc->top_margin; @@ -919,7 +920,7 @@ draw_fliptext (ModeInfo *mi) if (!sc->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sc->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sc->glx_context); #if 0 if (XtAppPending (app) & (XtIMTimer|XtIMAlternateInput)) @@ -989,11 +990,18 @@ ENTRYPOINT void free_fliptext (ModeInfo *mi) { fliptext_configuration *sc = &scs[MI_SCREEN(mi)]; + int i; + if (!sc->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sc->glx_context); if (sc->tc) textclient_close (sc->tc); - free(sc->lines); - - /* #### there's more to free here */ + if (sc->texfont) free_texture_font (sc->texfont); + for (i = 0; i < sc->nlines; i++) + if (sc->lines[i]) { + if (sc->lines[i]->text) free (sc->lines[i]->text); + free (sc->lines[i]); + } + if(sc->lines) free(sc->lines); } XSCREENSAVER_MODULE ("FlipText", fliptext) diff --git a/hacks/glx/flurry-texture.c b/hacks/glx/flurry-texture.c index c787f59..f1b7e36 100644 --- a/hacks/glx/flurry-texture.c +++ b/hacks/glx/flurry-texture.c @@ -53,7 +53,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. static GLubyte smallTextureArray[32][32]; static GLubyte bigTextureArray[256][256][2]; -GLuint theTexture = 0; /* simple smoothing routine */ static void SmoothTexture(void) @@ -187,8 +186,9 @@ static void AverageLastAndFirstTextures(void) } } -void MakeTexture() +GLuint MakeTexture(void) { + GLuint theTexture = 0; int i,j; for (i=0;i<8;i++) { @@ -221,4 +221,5 @@ void MakeTexture() gluBuild2DMipmaps(GL_TEXTURE_2D, 2, 256, 256, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, bigTextureArray); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + return theTexture; } diff --git a/hacks/glx/flurry.c b/hacks/glx/flurry.c index c9008a9..a236f52 100644 --- a/hacks/glx/flurry.c +++ b/hacks/glx/flurry.c @@ -90,6 +90,7 @@ ModStruct flurry_description = { global_info_t *flurry_info = NULL; + static double currentTime(void) { struct timeval tv; @@ -313,7 +314,7 @@ 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)); + glXMakeCurrent(MI_DISPLAY(mi), global->window, *global->glx_context); glViewport(0.0, 0.0, width, height); glMatrixMode(GL_PROJECTION); @@ -506,11 +507,11 @@ draw_flurry(ModeInfo * mi) return; if (global->first) { - MakeTexture(); + global->texid = MakeTexture(); global->first = 0; } glDrawBuffer(GL_BACK); - glXMakeCurrent(display, window, *(global->glx_context)); + glXMakeCurrent(display, window, *global->glx_context); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -535,13 +536,12 @@ free_flurry(ModeInfo * mi) global_info_t *global = &flurry_info[MI_SCREEN(mi)]; flurry_info_t *flurry; - if (global->glx_context) { - glXMakeCurrent(MI_DISPLAY(mi), global->window, *(global->glx_context)); - } + if (!global->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), global->window, *global->glx_context); - for (flurry = global->flurry; flurry; flurry=flurry->next) { - delete_flurry_info(flurry); - } + for (flurry = global->flurry; flurry; flurry=flurry->next) + delete_flurry_info(flurry); + if (global->texid) glDeleteTextures (1, &global->texid); } XSCREENSAVER_MODULE ("Flurry", flurry) diff --git a/hacks/glx/flurry.h b/hacks/glx/flurry.h index 9bbe4b2..b4c7787 100644 --- a/hacks/glx/flurry.h +++ b/hacks/glx/flurry.h @@ -211,7 +211,7 @@ static vector float FastDistance2DV(vector float x, vector float y) { extern GLuint theTexture; -void MakeTexture(void); +GLuint MakeTexture(void); #define OPT_MODE_SCALAR_BASE 0x0 @@ -290,6 +290,7 @@ struct _global_info_t { double oldFrameTime; flurry_info_t *flurry; + GLuint texid; }; #define kNumSpectrumEntries 512 diff --git a/hacks/glx/flyingtoasters.c b/hacks/glx/flyingtoasters.c index 19a5897..a527e8b 100644 --- a/hacks/glx/flyingtoasters.c +++ b/hacks/glx/flyingtoasters.c @@ -32,7 +32,6 @@ /* #define DEBUG */ -# define free_toasters 0 # define release_toasters 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -796,7 +795,7 @@ draw_toasters (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -863,6 +862,27 @@ draw_toasters (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_toasters (ModeInfo *mi) +{ + toaster_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + if (bp->dlists) free (bp->dlists); + if (bp->floaters) free (bp->floaters); + if (bp->user_trackball) gltrackball_free (bp->user_trackball); + for (i = 0; i < countof(all_objs); i++) + if (glIsList(bp->dlists[i])) glDeleteLists(bp->dlists[i], 1); + if (bp->toast_texture) glDeleteTextures (1, &bp->toast_texture); +# ifndef HAVE_JWZGLES + if (bp->chrome_texture) glDeleteTextures (1, &bp->chrome_texture); +# endif +} + XSCREENSAVER_MODULE_2 ("FlyingToasters", flyingtoasters, toasters) #endif /* USE_GL */ diff --git a/hacks/glx/fps-gl.c b/hacks/glx/fps-gl.c index eb6b6de..b8cbb25 100644 --- a/hacks/glx/fps-gl.c +++ b/hacks/glx/fps-gl.c @@ -1,4 +1,4 @@ -/* fps, Copyright (c) 2001-2015 Jamie Zawinski <jwz@jwz.org> +/* fps, Copyright (c) 2001-2018 Jamie Zawinski <jwz@jwz.org> * Draw a frames-per-second display (Xlib and OpenGL). * * Permission to use, copy, modify, distribute, and sell this software and its @@ -96,3 +96,16 @@ xlockmore_gl_draw_fps (ModeInfo *mi) st->string); } } + +void +xlockmore_gl_free_fps (fps_state *st) +{ + gl_fps_data *data = (gl_fps_data *) st->gl_fps_data; + if (data) + { + if (data->texfont) free_texture_font (data->texfont); + free (data); + st->gl_fps_data = 0; + } + fps_free (st); +} diff --git a/hacks/glx/gears.c b/hacks/glx/gears.c index 3976f2f..feaae8c 100644 --- a/hacks/glx/gears.c +++ b/hacks/glx/gears.c @@ -18,7 +18,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_gears 0 # define release_gears 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -827,7 +826,7 @@ draw_gears (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glShadeModel(GL_SMOOTH); @@ -933,6 +932,24 @@ gears_handle_event (ModeInfo *mi, XEvent *event) return False; } + +ENTRYPOINT void +free_gears (ModeInfo *mi) +{ + gears_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->rot) free_rotator (bp->rot); + if (bp->trackball) gltrackball_free (bp->trackball); + for (i = 0; i < bp->ngears; i++) + if (bp->gears[i]) + free_gear (bp->gears[i]); + if (glIsList(bp->armature_dlist)) + glDeleteLists (bp->armature_dlist, 1); + +} + XSCREENSAVER_MODULE ("Gears", gears) #endif /* USE_GL */ diff --git a/hacks/glx/geodesic.c b/hacks/glx/geodesic.c index 9ef2696..83fd4ac 100644 --- a/hacks/glx/geodesic.c +++ b/hacks/glx/geodesic.c @@ -14,7 +14,6 @@ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_geodesic 0 # define release_geodesic 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -625,7 +624,7 @@ draw_geodesic (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); if (! wire) glShadeModel(GL_SMOOTH); @@ -811,6 +810,18 @@ draw_geodesic (ModeInfo *mi) } } + +ENTRYPOINT void +free_geodesic (ModeInfo *mi) +{ + geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->colors) free (bp->colors); +} + XSCREENSAVER_MODULE ("Geodesic", geodesic) #endif /* USE_GL */ diff --git a/hacks/glx/geodesicgears.c b/hacks/glx/geodesicgears.c index ecc7f26..3911b38 100644 --- a/hacks/glx/geodesicgears.c +++ b/hacks/glx/geodesicgears.c @@ -1325,7 +1325,7 @@ reshape_geodesic (ModeInfo *mi, int width, int height) h = height / (GLfloat) width; } - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glViewport (0, y, (GLint) width, (GLint) height); @@ -1527,7 +1527,7 @@ draw_geodesic (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); if (bp->draw_time == 0) @@ -1790,11 +1790,13 @@ free_geodesic (ModeInfo *mi) geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); - free_texture_font (bp->font); - free (bp->colors); - free_sphere_gears (mi); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->font) free_texture_font (bp->font); + if (bp->colors) free (bp->colors); + if (mi) free_sphere_gears (mi); if (bp->desc) free (bp->desc); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); } diff --git a/hacks/glx/gflux.c b/hacks/glx/gflux.c index dbbb11c..63c9676 100644 --- a/hacks/glx/gflux.c +++ b/hacks/glx/gflux.c @@ -46,7 +46,6 @@ "*useSHM: True \n" \ "*suppressRotationAnimation: True\n" \ -# define free_gflux 0 # define release_gflux 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -275,7 +274,7 @@ ENTRYPOINT void draw_gflux(ModeInfo * mi) /* Just keep running before the texture has come in. */ /* if (gp->waiting_for_image_p) return; */ - glXMakeCurrent(display, window, *(gp->glx_context)); + glXMakeCurrent(display, window, *gp->glx_context); calcGrid(gp); mi->polygon_count = gp->drawFunc(gp); @@ -382,6 +381,7 @@ ENTRYPOINT void init_gflux(ModeInfo * mi) progname, s); exit (1); } + if (s) free (s); } gp->modeinfo = mi; @@ -394,6 +394,14 @@ ENTRYPOINT void init_gflux(ModeInfo * mi) } } +ENTRYPOINT void free_gflux(ModeInfo * mi) +{ + gfluxstruct *gp = &gfluxes[MI_SCREEN(mi)]; + if (!gp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *gp->glx_context); + gltrackball_free (gp->trackball); + if (gp->texName) glDeleteTextures (1, &gp->texName); +} static void createTexture(gfluxstruct *gp) { diff --git a/hacks/glx/glblur.c b/hacks/glx/glblur.c index cee020c..d1514d1 100644 --- a/hacks/glx/glblur.c +++ b/hacks/glx/glblur.c @@ -27,7 +27,6 @@ "*fpsSolid: True \n" \ "*suppressRotationAnimation: True\n" \ -# define free_glblur 0 # define release_glblur 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -483,7 +482,7 @@ draw_glblur (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); /* Decide what we're drawing */ @@ -605,6 +604,29 @@ draw_glblur (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_glblur (ModeInfo *mi) +{ + glblur_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->tex_data) free (bp->tex_data); + if (bp->colors0) free (bp->colors0); + if (bp->colors1) free (bp->colors1); + if (bp->colors2) free (bp->colors2); + if (bp->colors3) free (bp->colors3); + if (bp->rot) free_rotator (bp->rot); + if (bp->trackball) gltrackball_free (bp->trackball); + if (glIsList(bp->obj_dlist0)) glDeleteLists(bp->obj_dlist0, 1); + if (glIsList(bp->obj_dlist1)) glDeleteLists(bp->obj_dlist1, 1); + if (glIsList(bp->obj_dlist2)) glDeleteLists(bp->obj_dlist2, 1); + if (glIsList(bp->obj_dlist3)) glDeleteLists(bp->obj_dlist3, 1); + if (glIsList(bp->scene_dlist1)) glDeleteLists(bp->scene_dlist1, 1); + if (glIsList(bp->scene_dlist2)) glDeleteLists(bp->scene_dlist2, 1); + if (bp->texture) glDeleteTextures (1, &bp->texture); +} + XSCREENSAVER_MODULE ("GLBlur", glblur) #endif /* USE_GL */ diff --git a/hacks/glx/glcells.c b/hacks/glx/glcells.c index adf9866..b8ee5b8 100644 --- a/hacks/glx/glcells.c +++ b/hacks/glx/glcells.c @@ -905,6 +905,9 @@ static int create_list( State *st, double fac ) glNormalPointer( GL_FLOAT, 0, vertex_array->normal ); glDrawElements( GL_TRIANGLES, vertex_array->num_index, GL_UNSIGNED_INT, vertex_array->index ); + free (vertex_array->vertex); + free (vertex_array->normal); + free (vertex_array->index); free( vertex_array ); #else glBegin( GL_TRIANGLES ); @@ -1349,8 +1352,7 @@ draw_glcells( ModeInfo *mi ) if (!st->glx_context) return; - glXMakeCurrent( MI_DISPLAY(mi), MI_WINDOW(mi), - *(st->glx_context) ); + glXMakeCurrent( MI_DISPLAY(mi), MI_WINDOW(mi), *st->glx_context); mi->polygon_count = render( st ); @@ -1366,23 +1368,21 @@ free_glcells( ModeInfo *mi ) int i; State *st = &sstate[MI_SCREEN(mi)]; - if (st->glx_context) { - glXMakeCurrent( MI_DISPLAY(mi), MI_WINDOW(mi), - *(st->glx_context) ); - - /* nuke everything before exit */ - if (st->sphere) free_Object( st->sphere ); - if (st->food) free( st->food ); - for (i=0; i<NUM_CELL_SHAPES; ++i) { - if (st->cell_list[i] != -1) { - glDeleteLists( st->cell_list[i], 1 ); - } + if (!st->glx_context) return; + glXMakeCurrent( MI_DISPLAY(mi), MI_WINDOW(mi), *st->glx_context); + + if (st->sphere) free_Object( st->sphere ); + if (st->food) free( st->food ); + for (i=0; i<NUM_CELL_SHAPES; ++i) { + if (st->cell_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 ); } + if (st->cell) free( st->cell ); + free( st->disturbance ); + glDeleteTextures( 1, &st->texture_name ); + free( st->texture ); + if (glIsList(st->nucleus_list)) glDeleteLists(st->nucleus_list, 1); } XSCREENSAVER_MODULE( "GLCells", glcells ) diff --git a/hacks/glx/gleidescope.c b/hacks/glx/gleidescope.c index ec33388..60faf3e 100644 --- a/hacks/glx/gleidescope.c +++ b/hacks/glx/gleidescope.c @@ -1405,7 +1405,7 @@ ENTRYPOINT void reshape_gleidescope(ModeInfo *mi, int width, int height) h = height / (GLfloat) width; } - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(gp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *gp->glx_context); glViewport(0, y, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); @@ -1574,7 +1574,7 @@ draw_gleidescope(ModeInfo * mi) glDrawBuffer(GL_BACK); - glXMakeCurrent(display, window, *(gp->glx_context)); + glXMakeCurrent(display, window, *gp->glx_context); draw(mi); if (mi->fps_p) { @@ -1608,15 +1608,12 @@ draw_gleidescope(ModeInfo * mi) ENTRYPOINT void free_gleidescope(ModeInfo * mi) { - gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; - - /* 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 */ - } + gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; + if (!gp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *gp->glx_context); + if (glIsList(gp->list)) glDeleteLists(gp->list, 1); + if (gp->textures[0].id) glDeleteTextures (1, &gp->textures[0].id); + if (gp->textures[1].id) glDeleteTextures (1, &gp->textures[1].id); } XSCREENSAVER_MODULE ("Gleidescope", gleidescope) diff --git a/hacks/glx/glforestfire.c b/hacks/glx/glforestfire.c index bcc9ed7..8aa1c97 100644 --- a/hacks/glx/glforestfire.c +++ b/hacks/glx/glforestfire.c @@ -885,6 +885,9 @@ free_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 (mode_font != None && fs->fontbase != None) { glDeleteLists(fs->fontbase, mode_font->max_char_or_byte2 - mode_font->min_char_or_byte2 + 1); @@ -892,15 +895,15 @@ free_fire(ModeInfo * mi) } if (fs->p != NULL) { - (void) free((void *) fs->p); + free(fs->p); fs->p = (part *) NULL; } if (fs->r != NULL) { - (void) free((void *) fs->r); + free(fs->r); fs->r = (rain *) NULL; } if (fs->treepos != NULL) { - (void) free((void *) fs->treepos); + free(fs->treepos); fs->treepos = (treestruct *) NULL; } if (fs->ttexture != None) { @@ -913,6 +916,8 @@ free_fire(ModeInfo * mi) XDestroyImage(fs->gtexture); fs->gtexture = None; } + + if (fs->trackball) gltrackball_free (fs->trackball); } /* @@ -989,7 +994,7 @@ ENTRYPOINT void draw_fire(ModeInfo * mi) if (!fs->glx_context) return; - glXMakeCurrent(display, window, *(fs->glx_context)); + glXMakeCurrent(display, window, *fs->glx_context); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); @@ -1064,7 +1069,7 @@ ENTRYPOINT void change_fire(ModeInfo * mi) if (!fs->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(fs->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *fs->glx_context); /* if available, randomly change some values */ if (do_fog) diff --git a/hacks/glx/glhanoi.c b/hacks/glx/glhanoi.c index 865930f..eaf775f 100644 --- a/hacks/glx/glhanoi.c +++ b/hacks/glx/glhanoi.c @@ -1012,6 +1012,8 @@ static int drawTube(GLdouble bottomRadius, GLdouble topRadius, glVertex3f(0.0, y, innerRadius); glVertex3f(0.0, y, radius); glEnd(); + free (cosCache); + free (sinCache); return polys; } @@ -1855,7 +1857,7 @@ ENTRYPOINT void reshape_glhanoi(ModeInfo * mi, int width, int height) h = height / (GLfloat) width; } - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(glhanoi->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *glhanoi->glx_context); glViewport(0, y, (GLint) width, (GLint) height); @@ -1962,7 +1964,7 @@ ENTRYPOINT void draw_glhanoi(ModeInfo * mi) if(!glhanoi->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(glhanoi->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *glhanoi->glx_context); glPolygonMode(GL_FRONT, glhanoi->wire ? GL_LINE : GL_FILL); @@ -2060,25 +2062,32 @@ ENTRYPOINT Bool glhanoi_handle_event(ModeInfo * mi, XEvent * event) ENTRYPOINT void free_glhanoi(ModeInfo * mi) { + glhcfg *glh = &glhanoi_cfg[MI_SCREEN(mi)]; int i; int j; - glhcfg *glh = &glhanoi_cfg[MI_SCREEN(mi)]; - if (glh->glx_context) { - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(glh->glx_context)); - 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); - } - } - } + + if (!glh->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *glh->glx_context); + + free_rotator (glh->the_rotator); + if (glh->pole) { + for (i = 0; i < glh->numberOfPoles; i++) + if (glh->pole[i].data) free (glh->pole[i].data); + free (glh->pole); + } + if (glh->diskPos) free (glh->diskPos); + if (glh->trailQ) free (glh->trailQ); + if (glh->solveStack) free (glh->solveStack); + + 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); + glDeleteTextures (N_TEXTURES, glh->textureNames); } XSCREENSAVER_MODULE ("GLHanoi", glhanoi) diff --git a/hacks/glx/glknots.c b/hacks/glx/glknots.c index 730cadb..06be339 100644 --- a/hacks/glx/glknots.c +++ b/hacks/glx/glknots.c @@ -18,7 +18,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_knot 0 # define release_knot 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -348,7 +347,7 @@ draw_knot (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); if (bp->mode == 0) { @@ -440,6 +439,19 @@ draw_knot (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_knot (ModeInfo *mi) +{ + knot_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->colors) free (bp->colors); + if (glIsList(bp->knot_list)) glDeleteLists(bp->knot_list, 1); +} + XSCREENSAVER_MODULE_2 ("GLKnots", glknots, knot) #endif /* USE_GL */ diff --git a/hacks/glx/glmatrix.c b/hacks/glx/glmatrix.c index 6a9b1fe..1e1c4f6 100644 --- a/hacks/glx/glmatrix.c +++ b/hacks/glx/glmatrix.c @@ -20,7 +20,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -# define free_matrix 0 # define release_matrix 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -986,7 +985,7 @@ draw_matrix (ModeInfo *mi) if (!mp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -1063,6 +1062,17 @@ draw_matrix (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_matrix (ModeInfo *mi) +{ + matrix_configuration *mp = &mps[MI_SCREEN(mi)]; + if (!mp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); + if (mp->strips) free (mp->strips); + if (mp->texture) glDeleteTextures (1, &mp->texture); +} + XSCREENSAVER_MODULE_2 ("GLMatrix", glmatrix, matrix) #endif /* USE_GL */ diff --git a/hacks/glx/glplanet.c b/hacks/glx/glplanet.c index f26a4ad..a2f6889 100644 --- a/hacks/glx/glplanet.c +++ b/hacks/glx/glplanet.c @@ -178,6 +178,7 @@ setup_xpm_texture (ModeInfo *mi, const unsigned char *data, unsigned long size) GL_RGBA, GL_UNSIGNED_BYTE, image->data); sprintf (buf, "builtin texture (%dx%d)", image->width, image->height); check_gl_error(buf); + XDestroyImage (image); } @@ -399,7 +400,7 @@ reshape_planet (ModeInfo *mi, int width, int height) planetstruct *gp = &planets[MI_SCREEN(mi)]; GLfloat h = (GLfloat) height / (GLfloat) width; - glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), gp->window, *gp->glx_context); glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); @@ -587,7 +588,7 @@ draw_planet (ModeInfo * mi) glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glXMakeCurrent (dpy, window, *(gp->glx_context)); + glXMakeCurrent (dpy, window, *gp->glx_context); mi->polygon_count = 0; @@ -831,14 +832,18 @@ free_planet (ModeInfo * mi) { planetstruct *gp = &planets[MI_SCREEN(mi)]; - if (gp->glx_context) { - glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context)); + if (!gp->glx_context) return; + 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); - } + if (glIsList(gp->platelist)) glDeleteLists(gp->platelist, 1); + if (glIsList(gp->shadowlist)) glDeleteLists(gp->shadowlist, 1); + if (glIsList(gp->latlonglist)) glDeleteLists(gp->latlonglist, 1); + if (glIsList(gp->starlist)) glDeleteLists(gp->starlist, 1); + glDeleteTextures(1, &gp->tex1); + glDeleteTextures(1, &gp->tex2); + + if (gp->trackball) gltrackball_free (gp->trackball); + if (gp->rot) free_rotator (gp->rot); } diff --git a/hacks/glx/glschool.c b/hacks/glx/glschool.c index 49cfc11..6ad80a9 100644 --- a/hacks/glx/glschool.c +++ b/hacks/glx/glschool.c @@ -16,7 +16,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -#define free_glschool (0) #define release_glschool (0) #define glschool_handle_event (xlockmore_no_events) @@ -124,7 +123,7 @@ reshape_glschool(ModeInfo *mi, int width, int height) double aspect = (double)width/(double)height; glschool_configuration *sc = &scs[MI_SCREEN(mi)]; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sc->context)); + 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); @@ -187,7 +186,7 @@ draw_glschool(ModeInfo *mi) return; } - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sc->context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sc->context); mi->polygon_count = 0; @@ -213,4 +212,20 @@ draw_glschool(ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_glschool(ModeInfo *mi) +{ + glschool_configuration *sc = &scs[MI_SCREEN(mi)]; + + if (!sc->context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sc->context); + + if (sc->school) glschool_freeSchool (sc->school); + if (sc->colors) free (sc->colors); + if (glIsList(sc->bboxList)) glDeleteLists(sc->bboxList, 1); + if (glIsList(sc->goalList)) glDeleteLists(sc->goalList, 1); + if (glIsList(sc->fishList)) glDeleteLists(sc->fishList, 1); +} + XSCREENSAVER_MODULE("GLSchool", glschool) diff --git a/hacks/glx/glslideshow.c b/hacks/glx/glslideshow.c index 64b1494..77c741c 100644 --- a/hacks/glx/glslideshow.c +++ b/hacks/glx/glslideshow.c @@ -78,7 +78,6 @@ "*grabDesktopImages: False \n" \ "*chooseRandomImages: True \n" -# define free_slideshow 0 # define release_slideshow 0 # include "xlockmore.h" @@ -1068,6 +1067,7 @@ hack_resources (void) value.addr = buf2; value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); + free (val); #endif } @@ -1137,7 +1137,7 @@ draw_slideshow (ModeInfo *mi) if (!ss->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(ss->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *ss->glx_context); if (ss->awaiting_first_image_p) { @@ -1217,6 +1217,28 @@ draw_slideshow (ModeInfo *mi) check_fps (mi); } + +ENTRYPOINT void +free_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->font_data) free_texture_font (ss->font_data); + for (i = 0; i < ss->nimages; i++) { + if (ss->images[i]) { + if (ss->images[i]->title) free (ss->images[i]->title); + if (ss->images[i]->texid) glDeleteTextures (1, &ss->images[i]->texid); + free (ss->images[i]); + } + } + for (i = 0; i < countof(ss->sprites); i++) { + if (ss->sprites[i]) free (ss->sprites[i]); + } +} + XSCREENSAVER_MODULE_2 ("GLSlideshow", glslideshow, slideshow) #endif /* USE_GL */ diff --git a/hacks/glx/glsnake.c b/hacks/glx/glsnake.c index 5f20421..8efc681 100644 --- a/hacks/glx/glsnake.c +++ b/hacks/glx/glsnake.c @@ -144,7 +144,6 @@ static GLfloat angvel; #define glsnake_init init_glsnake #define glsnake_display draw_glsnake #define glsnake_reshape reshape_glsnake -#define free_glsnake 0 #define release_glsnake 0 #define glsnake_handle_event xlockmore_no_events @@ -2176,7 +2175,7 @@ ENTRYPOINT void glsnake_display( if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); #endif gl_init(mi); @@ -2334,6 +2333,20 @@ ENTRYPOINT void glsnake_display( #endif } + +#ifndef HAVE_GLUT +ENTRYPOINT void free_glsnake(ModeInfo * mi) +{ + struct glsnake_cfg * bp = &glc[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->font_data) free_texture_font (bp->font_data); + if (glIsList(bp->node_solid)) glDeleteLists(bp->node_solid, 1); + if (glIsList(bp->node_wire)) glDeleteLists(bp->node_wire, 1); +} +#endif + + #ifdef HAVE_GLUT /* anything that needs to be cleaned up goes here */ static void unmain() diff --git a/hacks/glx/gltext.c b/hacks/glx/gltext.c index 276c448..ab5a512 100644 --- a/hacks/glx/gltext.c +++ b/hacks/glx/gltext.c @@ -573,7 +573,7 @@ draw_text (ModeInfo *mi) if (!tp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *tp->glx_context); if (tp->reload) { @@ -650,8 +650,18 @@ ENTRYPOINT void free_text(ModeInfo * mi) { text_configuration *tp = &tps[MI_SCREEN(mi)]; + + if (!tp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *tp->glx_context); + if (tp->tc) textclient_close (tp->tc); + if (tp->text) free (tp->text); + if (tp->trackball) gltrackball_free (tp->trackball); + if (tp->rot) free_rotator (tp->rot); + if (tp->rot2) free_rotator (tp->rot2); + if (tp->colors) free (tp->colors); + if (glIsList(tp->text_list)) glDeleteLists(tp->text_list, 1); } diff --git a/hacks/glx/gltrackball.c b/hacks/glx/gltrackball.c index 57b4b99..9e3314c 100644 --- a/hacks/glx/gltrackball.c +++ b/hacks/glx/gltrackball.c @@ -76,6 +76,13 @@ gltrackball_init (int ignore_device_rotation_p) return ts; } +void +gltrackball_free (trackball_state *ts) +{ + free (ts); +} + + /* Device rotation interacts very strangely with mouse positions. I'm not entirely sure this is the right fix. */ diff --git a/hacks/glx/gltrackball.h b/hacks/glx/gltrackball.h index ba9e574..2ccfb9a 100644 --- a/hacks/glx/gltrackball.h +++ b/hacks/glx/gltrackball.h @@ -19,6 +19,7 @@ typedef struct trackball_state trackball_state; 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); +extern void gltrackball_free (trackball_state *); /* Begin tracking the mouse: Call this when the mouse button goes down. x and y are the mouse position relative to the window. diff --git a/hacks/glx/handsy.c b/hacks/glx/handsy.c new file mode 100644 index 0000000..077df76 --- /dev/null +++ b/hacks/glx/handsy.c @@ -0,0 +1,1175 @@ +/* handsy, Copyright (c) 2018 Jamie Zawinski <jwz@jwz.org> + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * 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: 2 \n" \ + ".foreground: #8888CC" "\n" \ + "*groundColor: #0000FF" "\n" \ + "*showFPS: False \n" \ + "*wireframe: False \n" + +# define release_hands 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 "gllist.h" +#include <ctype.h> + +#ifdef USE_GL /* whole file */ + + +#define DEF_SPEED "1.0" +#define DEF_SPIN "XY" +#define DEF_WANDER "True" +#define DEF_FACE_FRONT "True" +#define DEF_DEBUG "False" + +extern const struct gllist + *handsy_model_finger_distal, *handsy_model_finger_intermediate, + *handsy_model_finger_proximal, *handsy_model_finger_metacarpal, + *handsy_model_thumb_distal, *handsy_model_thumb_proximal, + *handsy_model_thumb_metacarpal, *handsy_model_palm; +static struct gllist *ground = 0; + +static const struct gllist * const *all_objs[] = { + &handsy_model_finger_distal, &handsy_model_finger_intermediate, + &handsy_model_finger_proximal, &handsy_model_finger_metacarpal, + &handsy_model_thumb_distal, &handsy_model_thumb_proximal, + &handsy_model_thumb_metacarpal, &handsy_model_palm, + (const struct gllist * const *) &ground +}; + +#define FINGER_DISTAL 0 +#define FINGER_INTERMEDIATE 1 +#define FINGER_PROXIMAL 2 +#define FINGER_METACARPAL 3 +#define THUMB_DISTAL 4 +#define THUMB_PROXIMAL 5 +#define THUMB_METACARPAL 6 +#define PALM 7 +#define GROUND 8 + + +/* 'hand_geom' describes the position and extent of the various joints. + 'hand' describes the current flexion of the joints in that model. + 'hand_anim' is a list of positions and timings describing an animation. + 'hands_configuration' is the usual global state structure. + */ + +typedef struct { + double min, max; /* +- pi */ +} joint; + +typedef struct { + joint bones[4]; + joint base; +} finger; + +typedef struct { + finger fingers[5]; + joint palm; + joint wrist1; + joint wrist2; +} hand_geom; + +static const hand_geom human_hand = { + {{{{ 0.0, 1.6 }, /* thumb distal */ + { 0.0, 1.6 }, /* thumb proximal */ + { 0.0, 1.6 }, /* thumb metacarpal */ + { 0.0, 0.0 }}, /* none */ + { -1.70, 0.00 }}, + {{{ -0.2, 1.6 }, /* index distal */ + { -0.2, 1.6 }, /* index intermediate */ + { -0.2, 1.6 }, /* index proximal */ + { 0.0, 0.0 }}, /* index metacarpal */ + { -0.25, 0.25 }}, + {{{ -0.2, 1.6 }, /* middle distal */ + { -0.2, 1.6 }, /* middle intermediate */ + { -0.2, 1.6 }, /* middle proximal */ + { 0.0, 0.0 }}, /* middle metacarpal */ + { -0.25, 0.25 }}, + {{{ -0.2, 1.6 }, /* ring distal */ + { -0.2, 1.6 }, /* ring intermediate */ + { -0.2, 1.6 }, /* ring proximal */ + { 0.0, 0.0 }}, /* ring metacarpal */ + { -0.25, 0.25 }}, + {{{ -0.2, 1.6 }, /* pinky distal */ + { -0.2, 1.6 }, /* pinky intermediate */ + { -0.2, 1.6 }, /* pinky proximal */ + { 0.0, 0.0 }}, /* pinky metacarpal */ + { -0.25, 0.25 }}}, + { -0.7, 1.5 }, /* palm (wrist up/down) */ + { -M_PI, M_PI }, /* wrist left/right */ + { -M_PI, M_PI }, /* wrist rotate */ +}; + +typedef struct { + double joint[countof(human_hand.fingers)] /* +- pi */ + [countof(human_hand.fingers[0].bones)]; + double base[countof(human_hand.fingers)]; + double wrist[3]; /* up/down, left/right, rotate */ + double pos[3]; /* XYZ */ + Bool sinister; + double alpha; +} hand; + +typedef struct { + const hand * const dest; + double duration, pause; + double pos[3], rot[3]; /* XYZ */ +} hand_anim; + +typedef struct { + const hand_anim * const pair[2]; /* L/R */ + double delay; /* Delay added to R */ +} hand_anim_pair; + +typedef struct { + GLXContext *glx_context; + rotator *rot, *rot2; + trackball_state *trackball; + Bool spinx, spiny, spinz; + Bool button_down_p; + + const hand_geom *geom; + GLuint *dlists; + int nhands; + + struct { + const hand_anim *anim; + int anim_hands; /* frames in animation */ + int anim_hand; /* pos in anim, L/R */ + double anim_start, anim_time; + double tick; + double delay; + } pair[2]; + + struct { hand from, to, current; } *hands; + GLfloat color[4]; + Bool ringp; + +} hands_configuration; + +#include "handsy_anim.h" + + +static hands_configuration *bps = NULL; + +static GLfloat speed; +static char *do_spin; +static Bool do_wander; +static Bool face_front_p; +static Bool debug_p; + +static XrmOptionDescRec opts[] = { + { "-speed", ".speed", 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" }, + { "-debug", ".debug", XrmoptionNoArg, "True" }, + { "+debug", ".debug", XrmoptionNoArg, "False" }, +}; + +static argtype vars[] = { + {&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}, + {&speed, "speed", "Speed", DEF_SPEED, t_Float}, + {&debug_p, "debug", "Debug", DEF_DEBUG, t_Bool}, +}; + +ENTRYPOINT ModeSpecOpt hands_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 double +constrain_joint (double v, double min, double max) +{ + if (v < min) v = min; + else if (v > max) v = max; + return v; +} + + +static void +draw_hand (ModeInfo *mi, hand *h) +{ + hands_configuration *bp = &bps[MI_SCREEN(mi)]; + int wire = MI_IS_WIREFRAME(mi); + int finger; + int off = h->sinister ? -1 : 1; + int nfingers = countof (bp->geom->fingers); + int nbones = countof (bp->geom->fingers[0].bones); + + glLineWidth (1); + glPushMatrix(); + + glTranslatef (off * h->pos[0], h->pos[1], h->pos[2]); + glRotatef (h->wrist[1] * 180 / M_PI * -off, 0, 1, 0); + glRotatef (h->wrist[2] * 180 / M_PI * -off, 0, 0, 1); + glRotatef (h->wrist[0] * 180 / M_PI, 1, 0, 0); + + bp->color[3] = h->alpha; + glColor4fv (bp->color); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, bp->color); + + if (!wire) glEnable (GL_BLEND); + + glPushMatrix(); + if (h->sinister) + { + glScalef (-1, 1, 1); + glFrontFace (GL_CW); + } + else + glFrontFace (GL_CCW); + glCallList (bp->dlists[PALM]); + glPopMatrix(); + + for (finger = 0; finger < nfingers; finger++) + { + int bone = nbones - 2; + glPushMatrix(); + if (finger == 0) /* thumb */ + { + glTranslatef (off * 0.113, -0.033, 0.093); + glRotatef (off * 45, 0, 1, 0); + + if (h->sinister) + glRotatef (180, 0, 0, 1); + + glRotatef (off * h->base[finger] * -180 / M_PI, 1, 0, 0); + bone--; + + glFrontFace (GL_CCW); + glCallList (bp->dlists[THUMB_METACARPAL]); + glPushMatrix(); + glScalef (1, -1, 1); + glFrontFace (GL_CW); + glCallList (bp->dlists[THUMB_METACARPAL]); + glPopMatrix(); + + glTranslatef (0, 0, 0.1497); + glRotatef (h->joint[finger][bone] * -180 / M_PI, 0, 1, 0); + bone--; + + glFrontFace (GL_CCW); + glCallList (bp->dlists[THUMB_PROXIMAL]); + glPushMatrix(); + glScalef (1, -1, 1); + glFrontFace (GL_CW); + glCallList (bp->dlists[THUMB_PROXIMAL]); + glPopMatrix(); + + glTranslatef (0, 0, 0.1212); + glRotatef (h->joint[finger][bone] * -180 / M_PI, 0, 1, 0); + bone--; + + glFrontFace (GL_CCW); + glCallList (bp->dlists[THUMB_DISTAL]); + glPushMatrix(); + glScalef (1, -1, 1); + glFrontFace (GL_CW); + glCallList (bp->dlists[THUMB_DISTAL]); + glPopMatrix(); + } + else + { + switch (finger) { + case 1: /* index */ + glTranslatef (off * 0.135, 0.004, 0.26835); + glRotatef (off * 4, 0, 1, 0); + break; + case 2: /* middle */ + glTranslatef (off * 0.046, 0.004, 0.27152); + glRotatef (off * 1, 0, 1, 0); + break; + case 3: /* ring */ + glTranslatef (off * -0.046, 0.004, 0.25577); + glRotatef (off * -1, 0, 1, 0); + break; + case 4: /* pinky */ + glTranslatef (off * -0.135, 0.004, 0.22204); + glRotatef (off * -4, 0, 1, 0); + break; + default: abort(); break; + } + + glRotatef (90, 0, 0, 1); + + glFrontFace (GL_CCW); + glCallList (bp->dlists[FINGER_METACARPAL]); + glPushMatrix(); + glScalef (1, -1, 1); + glFrontFace (GL_CW); + glCallList (bp->dlists[FINGER_METACARPAL]); + glPopMatrix(); + + glTranslatef (0, 0, 0.1155); + glRotatef (off * h->base[finger] * -180 / M_PI, 1, 0, 0); + glRotatef (h->joint[finger][bone] * -180 / M_PI, 0, 1, 0); + bone--; + + glFrontFace (GL_CCW); + glCallList (bp->dlists[FINGER_PROXIMAL]); + glPushMatrix(); + glScalef (1, -1, 1); + glFrontFace (GL_CW); + glCallList (bp->dlists[FINGER_PROXIMAL]); + glPopMatrix(); + + glTranslatef (0, 0, 0.1815); + glRotatef (h->joint[finger][bone] * -180 / M_PI, 0, 1, 0); + bone--; + + glFrontFace (GL_CCW); + glCallList (bp->dlists[FINGER_INTERMEDIATE]); + glPushMatrix(); + glScalef (1, -1, 1); + glFrontFace (GL_CW); + glCallList (bp->dlists[FINGER_INTERMEDIATE]); + glPopMatrix(); + + glTranslatef (0, 0, 0.1003); + glRotatef (h->joint[finger][bone] * -180 / M_PI, 0, 1, 0); + bone--; + + glFrontFace (GL_CCW); + glCallList (bp->dlists[FINGER_DISTAL]); + glPushMatrix(); + glScalef (1, -1, 1); + glFrontFace (GL_CW); + glCallList (bp->dlists[FINGER_DISTAL]); + glPopMatrix(); + } + glPopMatrix(); + } + glPopMatrix(); + + if (h->sinister && bp->ringp) + { + GLfloat color[] = { 1.0, 0.4, 0.4, 1 }; + GLfloat center = 0.4; + GLfloat th; + GLfloat r = center - h->pos[0] + 0.1; + GLfloat min = 0.22; + if (r < min) r = min; + glPushMatrix(); + glTranslatef (-center, -0.28, 0.5); + glRotatef (h->wrist[2] * 180 / M_PI * -off, 0, 0, 1); + glRotatef (h->wrist[0] * 180 / M_PI, 1, 0, 0); + + glColor4fv (color); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); + glDisable (GL_LIGHTING); + glLineWidth (8); + glBegin (GL_LINE_LOOP); + for (th = 0; th < M_PI * 2; th += M_PI / 180) + glVertex3f (r * cos(th), r * sin(th), 0); + glEnd(); + if (! wire) glEnable (GL_LIGHTING); + glPopMatrix(); + } + + glDisable (GL_BLEND); +} + + +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); + } + free (string); + + color[0] = xcolor.red / 65536.0; + color[1] = xcolor.green / 65536.0; + color[2] = xcolor.blue / 65536.0; + color[3] = 1; +} + + +static int +draw_ground (ModeInfo *mi) +{ + int wire = MI_IS_WIREFRAME(mi); + GLfloat i, j, k; + + /* When using fog, iOS apparently doesn't like lines or quads that are + really long, and extend very far outside of the scene. Maybe? If the + length of the line (cells * cell_size) is greater than 25 or so, lines + that are oriented steeply away from the viewer tend to disappear + (whether implemented as GL_LINES or as GL_QUADS). + + So we do a bunch of smaller grids instead of one big one. + */ + int cells = 30; + GLfloat cell_size = 0.8; + int points = 0; + int grids = 12; + GLfloat color[4]; + + if (wire) glLineWidth (1); + + parse_color (mi, "groundColor", color); + + glPushMatrix(); + + glScalef (0.2, 0.2, 0.2); + + glRotatef (frand(90), 0, 0, 1); + + if (!wire) + { + GLfloat fog_color[4] = { 0, 0, 0, 1 }; + + glLineWidth (4); + 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.015); + glFogf (GL_FOG_START, -cells/2 * cell_size * grids); + glEnable (GL_FOG); + } + + glColor4fv (color); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); + + glTranslatef (-cells * grids * cell_size / 2, + -cells * grids * cell_size / 2, 0); + + for (j = 0; j < grids; j++) + { + glPushMatrix(); + for (k = 0; k < grids; k++) + { + 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(); + glTranslatef (cells * cell_size, 0, 0); + } + glPopMatrix(); + glTranslatef (0, cells * cell_size, 0); + } + + if (!wire) + { + glDisable (GL_LINE_SMOOTH); + glDisable (GL_BLEND); + glDisable (GL_FOG); + } + + glPopMatrix(); + + return points; +} + + +ENTRYPOINT void +reshape_hands (ModeInfo *mi, int width, int height) +{ + GLfloat h = (GLfloat) height / (GLfloat) width; + int y = 0; + + glViewport (0, y, (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 +hands_handle_event (ModeInfo *mi, XEvent *event) +{ + hands_configuration *bp = &bps[MI_SCREEN(mi)]; + Bool ok = False; + + if (gltrackball_event_handler (event, bp->trackball, + MI_WIDTH (mi), MI_HEIGHT (mi), + &bp->button_down_p)) + ok = True; + else if (debug_p && event->type == KeyPress) + { + int nfingers = countof (bp->geom->fingers); + int nbones = countof (bp->geom->fingers[0].bones); + KeySym keysym; + char c = 0; + Bool tiltp = False; + double delta = 0.02; + double sign = 1; + int i, j, k; + + XLookupString (&event->xkey, &c, 1, &keysym, 0); + + for (i = 0; i < bp->nhands; i++) + { + hand *h = &bp->hands[i].current; + Bool modp = !!event->xkey.state; + + switch (keysym) { + case XK_Up: ok = True; h->pos[(modp ? 1 : 2)] += delta; break; + case XK_Down: ok = True; h->pos[(modp ? 1 : 2)] -= delta; break; + case XK_Right: ok = True; h->pos[0] += delta; break; + case XK_Left: ok = True; h->pos[0] -= delta; break; + default: break; + } + + switch (c) { + case '?': case '/': + ok = True; + fprintf (stderr, "\n" + " Open fingers: 12345 (1 = pinky, 5 = thumb)\n" + " Close fingers: QWERT\n" + " Tilt left: ASDFG\n" + " Tilt right: ZXCVB\n" + " Bend wrist: UJ (up/down)\n" + " Bend wrist: IK (left/right)\n" + " Rotate wrist: OL\n" + " Move origin: arrow keys: XZ plane; shift: XY plane\n" + " Tab: print current state to stdout\n" + " 0: Reset\n" + " ?: This\n\n"); + return ok; + break; + + + case '1': case '!': j = 4; sign = -1; goto FINGER; + case '2': case '@': j = 3; sign = -1; goto FINGER; + case '3': case '#': j = 2; sign = -1; goto FINGER; + case '4': case '$': j = 1; sign = -1; goto FINGER; + case '5': case '%': j = 0; sign = -1; goto FINGER; + + case 'q': case 'Q': j = 4; sign = 1; goto FINGER; + case 'w': case 'W': j = 3; sign = 1; goto FINGER; + case 'e': case 'E': j = 2; sign = 1; goto FINGER; + case 'r': case 'R': j = 1; sign = 1; goto FINGER; + case 't': case 'T': j = 0; sign = 1; goto FINGER; + + case 'a': case 'A': tiltp = True; j = 4; sign = 1; goto FINGER; + case 's': case 'S': tiltp = True; j = 3; sign = 1; goto FINGER; + case 'd': case 'D': tiltp = True; j = 2; sign = 1; goto FINGER; + case 'f': case 'F': tiltp = True; j = 1; sign = 1; goto FINGER; + case 'g': case 'G': tiltp = True; j = 0; sign = 1; goto FINGER; + + case 'z': case 'Z': tiltp = True; j = 4; sign = -1; goto FINGER; + case 'x': case 'X': tiltp = True; j = 3; sign = -1; goto FINGER; + case 'c': case 'C': tiltp = True; j = 2; sign = -1; goto FINGER; + case 'v': case 'V': tiltp = True; j = 1; sign = -1; goto FINGER; + case 'b': case 'B': tiltp = True; j = 0; sign = -1; goto FINGER; + FINGER: + ok = True; + if (tiltp) + h->base[j] = constrain_joint (h->base[j] + sign * delta, + bp->geom->fingers[j].base.min, + bp->geom->fingers[j].base.max); + else + for (k = 0; k < nbones; k++) + h->joint[j][k] = + constrain_joint (h->joint[j][k] + sign * delta, + bp->geom->fingers[j].bones[k].min, + bp->geom->fingers[j].bones[k].max); + break; + + case 'u': case 'U': ok = True; h->wrist[0] -= delta; break; + case 'j': case 'J': ok = True; h->wrist[0] += delta; break; + case 'i': case 'I': ok = True; h->wrist[1] += delta; break; + case 'k': case 'K': ok = True; h->wrist[1] -= delta; break; + case 'o': case 'O': ok = True; h->wrist[2] -= delta; break; + case 'l': case 'L': ok = True; h->wrist[2] += delta; break; + + case '0': case ')': + ok = True; + for (j = 0; j < nfingers; j++) + { + h->base[j] = 0; + for (k = 0; k < nbones; k++) + h->joint[j][k] = 0; + } + for (j = 0; j < 3; j++) + h->wrist[j] = 0; + for (j = 0; j < 3; j++) + h->pos[j] = 0; + break; + + case '\t': + ok = True; + fprintf (stdout, "\nstatic const hand H = {\n {"); + for (i = 0; i < nfingers; i++) + { + if (i > 0) fprintf (stdout, " "); + fprintf (stdout, "{"); + for (j = 0; j < nbones; j++) + { + double v = h->joint[i][j]; + if (i == 0 && j == 3) v = 0; /* no thumb intermediate */ + if (j == 0) fprintf (stdout, " "); + fprintf (stdout, "%.2f", v); + if (j < nbones-1) fprintf (stdout, ", "); + } + fprintf (stdout, " }"); + if (i < nfingers-1) fprintf (stdout, ",\n"); + } + fprintf (stdout, "},\n { "); + for (i = 0; i < nfingers; i++) + { + fprintf (stdout, "%.2f", h->base[i]); + if (i < nfingers-1) fprintf (stdout, ", "); + } + fprintf (stdout, " },\n"); + fprintf (stdout, " { %.2f, %.2f, %.2f },\n", + h->wrist[0], h->wrist[1], h->wrist[2]); + fprintf (stdout, " { %.2f, %.2f, %.2f },\n", + h->pos[0], h->pos[1], h->pos[2]); + fprintf (stdout, " True\n};\n\n"); + fflush (stdout); + return ok; + break; + + default: break; + } + } + } + return ok; +} + + +ENTRYPOINT void +init_hands (ModeInfo *mi) +{ + hands_configuration *bp; + int wire = MI_IS_WIREFRAME(mi); + hand def[2]; + int i; + + MI_INIT (mi, bps); + bp = &bps[MI_SCREEN(mi)]; + + bp->glx_context = init_GL(mi); + + reshape_hands (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); + + bp->pair[0].tick = bp->pair[1].tick = 1.0; + bp->geom = &human_hand; + bp->nhands = MI_COUNT(mi); + if (bp->nhands <= 0) bp->nhands = 1; + + if (bp->nhands & 1) bp->nhands++; /* Even number */ + + if (debug_p) + { + bp->nhands = 1; + do_spin = ""; + do_wander = False; + } + + bp->hands = calloc (bp->nhands, sizeof(*bp->hands)); + + { + double spin_speed = 0.5 * speed; + double wander_speed = 0.005 * speed; + double tilt_speed = 0.001 * speed; + 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); + } + + /* Set default hand to the last hand in the animation list. */ + for (i = 0; i <= 1; i++) + { + int j; + for (j = 0; ; j++) + if (!all_hand_anims[j+1].pair[i]) + { + if (! all_hand_anims[j].pair[i]) abort(); + def[i] = *all_hand_anims[j].pair[i]->dest; + if (debug_p) + def[i].alpha = 1; + else + { + def[i].pos[1] = 5; /* off screen */ + def[i].pos[2] = 5; + } + break; + } + } + + for (i = 0; i < bp->nhands; i++) + { + int sinister = (i & 1); + bp->hands[i].to = def[sinister]; + bp->hands[i].to.sinister = sinister; + bp->hands[i].from = bp->hands[i].to; + bp->hands[i].current = bp->hands[i].to; + } + + glFrontFace(GL_CW); + 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]; + GLfloat s = 0.1; + glNewList (bp->dlists[i], GL_COMPILE); + switch (i) { + case GROUND: + if (! ground) + ground = (struct gllist *) calloc (1, sizeof(*ground)); + ground->points = draw_ground (mi); + break; + default: + glPushMatrix(); + glScalef (s, s, s); + renderList (gll, wire); + glPopMatrix(); + break; + } + glEndList (); + } + + if (!wire) + { + GLfloat pos[4] = {0.4, 0.2, 0.4, 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}; + + 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); + } + + parse_color (mi, "foreground", bp->color); +} + + +static void +tick_hands (ModeInfo *mi) +{ + hands_configuration *bp = &bps[MI_SCREEN(mi)]; + int i, j, k, nfingers, nbones, sinister; + double now = double_time(); + + if (debug_p) return; + + if (!bp->pair[0].anim && /* Both hands finished. */ + !bp->pair[1].anim) /* Pick a new animation. */ + { + int nanims = 0; + while (all_hand_anims[nanims].pair[0] || + all_hand_anims[nanims].pair[1]) + nanims++; + i = random() % nanims; + for (sinister = 0; sinister <= 1; sinister++) + { + bp->pair[sinister].anim = all_hand_anims[i].pair[sinister]; + bp->pair[sinister].anim_hand = 0; + bp->pair[sinister].anim_hands = 0; + while (bp->pair[sinister].anim[bp->pair[sinister].anim_hands].dest) + bp->pair[sinister].anim_hands++; + bp->pair[sinister].anim_start = now; + bp->pair[sinister].tick = 0; + + if (sinister == 1) + bp->pair[sinister].delay = all_hand_anims[i].delay; + } + + bp->ringp = (all_hand_anims[i].pair[0] == goatse_anim); + + for (i = 0; i < bp->nhands; i++) + { + sinister = bp->hands[i].from.sinister; + bp->hands[i].from = bp->hands[i].current; + bp->hands[i].to = *bp->pair[sinister].anim->dest; + bp->hands[i].to.sinister = sinister; + + j = bp->pair[sinister].anim_hand; + + bp->hands[i].to.alpha = + (bp->pair[sinister].anim == hidden_anim ? 0 : 1); + + /* Anim keyframes can adjust position and rotation */ + for (k = 0; k < 3; k++) + { + bp->hands[i].to.wrist[k] += + bp->pair[sinister].anim[j].rot[k]; + bp->hands[i].to.pos[k] += + bp->pair[sinister].anim[j].pos[k]; + } + } + } + + for (sinister = 0; sinister <= 1; sinister++) + { + const hand_anim *h; + double elapsed, duration, duration2; + + if (! bp->pair[sinister].anim) /* Done with this hand, not the other. */ + continue; + + h = &bp->pair[sinister].anim[bp->pair[sinister].anim_hand]; + + elapsed = now - bp->pair[sinister].anim_start; + duration = h->duration / speed; + duration2 = duration + (bp->pair[sinister].delay + h->pause) / speed; + + if (elapsed > duration2 && /* Done animating and pausing this hand. */ + bp->pair[sinister].tick >= 1) /* ...and painted final frame. */ + { + bp->pair[sinister].anim_hand++; + bp->pair[sinister].tick = 1; + if (bp->pair[sinister].anim_hand >= bp->pair[sinister].anim_hands) + { + /* Done with all steps of this hand's animation. */ + bp->pair[sinister].anim = 0; + for (i = 0; i < bp->nhands; i++) + if (bp->hands[i].from.sinister == sinister) + bp->hands[i].from = bp->hands[i].to = bp->hands[i].current; + } + else + { + /* Move to next step of animation. */ + for (i = 0; i < bp->nhands; i++) + { + if (sinister != bp->hands[i].current.sinister) + continue; + + j = bp->pair[sinister].anim_hand; + bp->hands[i].from = bp->hands[i].current; + bp->hands[i].to = *bp->pair[sinister].anim[j].dest; + bp->hands[i].to.alpha = + (bp->pair[sinister].anim == hidden_anim ? 0 : 1); + + /* Anim keyframes can adjust position and rotation */ + for (k = 0; k < 3; k++) + { + bp->hands[i].to.wrist[k] += + bp->pair[sinister].anim[j].rot[k]; + bp->hands[i].to.pos[k] += + bp->pair[sinister].anim[j].pos[k]; + } + } + bp->pair[sinister].anim_start = now; + bp->pair[sinister].tick = 0; + bp->pair[sinister].delay = 0; + } + } + else if (elapsed > duration) /* Done animating, still pausing. */ + bp->pair[sinister].tick = 1; + else /* Still animating. */ + bp->pair[sinister].tick = elapsed / duration; + + if (bp->pair[sinister].tick > 1) + bp->pair[sinister].tick = 1; + + /* Move the joints into position: + compute 'current' between 'from' and 'to' by ratio 'tick'. */ + + nfingers = countof (bp->geom->fingers); + nbones = countof (bp->geom->fingers[0].bones); + for (i = 0; i < bp->nhands; i++) + { + if (bp->hands[i].current.sinister != sinister) + continue; + for (j = 0; j < nfingers; j++) + { + for (k = 0; k < nbones; k++) + bp->hands[i].current.joint[j][k] = + constrain_joint (bp->hands[i].from.joint[j][k] + + bp->pair[sinister].tick + * (bp->hands[i].to.joint[j][k] - + bp->hands[i].from.joint[j][k]), + bp->geom->fingers[j].bones[k].min, + bp->geom->fingers[j].bones[k].max); + bp->hands[i].current.base[j] = + constrain_joint (bp->hands[i].from.base[j] + + bp->pair[sinister].tick + * (bp->hands[i].to.base[j] - + bp->hands[i].from.base[j]), + bp->geom->fingers[j].base.min, + bp->geom->fingers[j].base.max); + } + j = 0; + bp->hands[i].current.wrist[j] = + constrain_joint (bp->hands[i].from.wrist[j] + + bp->pair[sinister].tick + * (bp->hands[i].to.wrist[j] - + bp->hands[i].from.wrist[j]), + bp->geom->palm.min, + bp->geom->palm.max); + j = 1; + bp->hands[i].current.wrist[j] = + constrain_joint (bp->hands[i].from.wrist[j] + + bp->pair[sinister].tick + * (bp->hands[i].to.wrist[j] - + bp->hands[i].from.wrist[j]), + bp->geom->wrist1.min, + bp->geom->wrist1.max); + j = 2; + bp->hands[i].current.wrist[j] = + constrain_joint (bp->hands[i].from.wrist[j] + + bp->pair[sinister].tick + * (bp->hands[i].to.wrist[j] - + bp->hands[i].from.wrist[j]), + bp->geom->wrist2.min, + bp->geom->wrist2.max); + for (j = 0; j < 3; j++) + bp->hands[i].current.pos[j] = + constrain_joint (bp->hands[i].from.pos[j] + + bp->pair[sinister].tick + * (bp->hands[i].to.pos[j] - + bp->hands[i].from.pos[j]), + -999, 999); + bp->hands[i].current.alpha = + bp->hands[i].from.alpha + + bp->pair[sinister].tick * + (bp->hands[i].to.alpha - bp->hands[i].from.alpha); + } + } +} + + +ENTRYPOINT void +draw_hands (ModeInfo *mi) +{ + hands_configuration *bp = &bps[MI_SCREEN(mi)]; + Display *dpy = MI_DISPLAY(mi); + Window window = MI_WINDOW(mi); + GLfloat s; + int i; + + static const GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0}; + static const GLfloat bshiny = 128.0; + GLfloat bcolor[4] = { 0.7, 0.7, 1.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 (); + + glRotatef(current_device_rotation(), 0, 0, 1); + + s = 10; + glScalef (s, s, s); + + { + double x, y, z; + + gltrackball_rotate (bp->trackball); + + if (face_front_p) + { + double maxx = 120 / 10.0; + double maxy = 55 / 10.0; + double maxz = 40 / 10.0; + get_position (bp->rot2, &x, &y, &z, !bp->button_down_p); + if (bp->spinx) glRotatef (maxx/2 - x*maxx, 0, 1, 0); + if (bp->spiny) glRotatef (maxy/2 - y*maxy, 1, 0, 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); + } + + glRotatef (-70, 1, 0, 0); + + glTranslatef (0, 0, -0.5); + + glPushMatrix(); + glRotatef ((bp->spiny ? y : bp->spinx ? x : z) * 90, 0, 0, 1); + glCallList (bp->dlists[GROUND]); + glPopMatrix(); + + get_position (bp->rot, &x, &y, &z, !bp->button_down_p); + z += 1; /* Origin of hands is 1.0 above floor. */ + glTranslatef((x - 0.5) * 0.8, + (y - 0.5) * 1.1, + (z - 0.5) * 0.2); + } + + glMaterialfv (GL_FRONT, GL_SPECULAR, bspec); + glMateriali (GL_FRONT, GL_SHININESS, bshiny); + glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bcolor); + + { + /* Lay the pairs out in a square-ish grid, keeping pairs together. */ + int rows = sqrt (bp->nhands / 2); + int cols; + int x, y; + + cols = ceil (bp->nhands / 2.0 / rows); + + if (bp->nhands <= 2) + rows = cols = 1; + + if (MI_WIDTH(mi) < MI_HEIGHT(mi)) /* Portrait */ + { + s = 0.5; + glScalef (s, s, s); + } + + if (bp->nhands == 1) + glScalef (2, 2, 2); + + if (cols > 1) + { + s = 1.0 / rows; + glScalef (s, s, s); + } + + if (bp->nhands > 1) + { + s = 0.8; + glTranslatef (-s * rows * 1.5, -s * cols, 0); + glTranslatef (s, s, 0); + } + + i = 0; + for (y = 0; y < cols; y++) + for (x = 0; x < rows; x++) + { + glPushMatrix(); + glTranslatef (x * s * 3, y * s * 2, y * s); + if (i < bp->nhands) + draw_hand (mi, &bp->hands[i++].current); + glTranslatef (s, 0, 0); + if (i < bp->nhands) + draw_hand (mi, &bp->hands[i++].current); + glPopMatrix(); + } + } + glPopMatrix(); + + tick_hands (mi); + + if (mi->fps_p) do_fps (mi); + glFinish(); + + glXSwapBuffers(dpy, window); +} + + +ENTRYPOINT void +free_hands (ModeInfo *mi) +{ + hands_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->rot) free_rotator (bp->rot); + if (bp->trackball) gltrackball_free (bp->trackball); + + if (bp->dlists) { + for (i = 0; i < countof(all_objs); i++) + if (glIsList(bp->dlists[i])) glDeleteLists(bp->dlists[i], 1); + free (bp->dlists); + } +} + +XSCREENSAVER_MODULE_2 ("Handsy", handsy, hands) + +#endif /* USE_GL */ diff --git a/hacks/glx/handsy.dxf b/hacks/glx/handsy.dxf new file mode 100644 index 0000000..c455186 --- /dev/null +++ b/hacks/glx/handsy.dxf @@ -0,0 +1,67706 @@ + 0 +SECTION + 2 +ENTITIES + 0 +3DFACE + 8 +finger proximal +10 +-0.18812188165369287 +20 +-1.1102230246251565e-15 +30 +2.0022820636598677 +11 +-0.1330222582069191 +21 +0.19156135043888822 +31 +2.0445614917581056 +12 +-0.18812188165372756 +22 +0.19156135043889155 +32 +2.00228206365989 +13 +-0.18812188165372756 +23 +0.19156135043889155 +33 +2.00228206365989 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.1330222582069191 +20 +0.19156135043888822 +30 +2.0445614917581056 +11 +-0.18812188165369287 +21 +-1.1102230246251565e-15 +31 +2.0022820636598677 +12 +-0.13302225820690117 +22 +-1.1102230246251565e-15 +32 +2.044561491758081 +13 +-0.13302225820690117 +23 +-1.1102230246251565e-15 +33 +2.044561491758081 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.23040130975195694 +20 +-1.1102230246251565e-15 +30 +1.9471824402131095 +11 +0.188121881653721 +21 +0.19156135043889155 +31 +2.002282063659892 +12 +0.18812188165372434 +22 +-2.220446049250313e-15 +32 +2.002282063659901 +13 +0.18812188165372434 +23 +-2.220446049250313e-15 +33 +2.002282063659901 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.188121881653721 +20 +0.19156135043889155 +30 +2.002282063659892 +11 +0.23040130975195694 +21 +-1.1102230246251565e-15 +31 +1.9471824402131095 +12 +0.2304013097519334 +22 +0.19156135043889155 +32 +1.9471824402130984 +13 +0.2304013097519334 +23 +0.19156135043889155 +33 +1.9471824402130984 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.23040130975190468 +20 +-1.1102230246251565e-15 +30 +1.6811379237992659 +11 +-0.18812188165372756 +21 +0.19156135043889044 +31 +1.6260383003524492 +12 +-0.1881218816537231 +22 +-2.220446049250313e-15 +32 +1.626038300352452 +13 +-0.1881218816537231 +23 +-2.220446049250313e-15 +33 +1.626038300352452 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.18812188165372756 +20 +0.19156135043889044 +30 +1.6260383003524492 +11 +-0.23040130975190468 +21 +-1.1102230246251565e-15 +31 +1.6811379237992659 +12 +-0.23040130975192985 +22 +0.19156135043889155 +32 +1.6811379237992548 +13 +-0.23040130975192985 +23 +0.19156135043889155 +33 +1.6811379237992548 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.23040130975192985 +20 +0.19156135043889155 +30 +1.9471824402130984 +11 +-0.2569792693466746 +21 +-1.1102230246251565e-15 +31 +1.8830175696991678 +12 +-0.23040130975189796 +22 +-2.220446049250313e-15 +32 +1.947182440213074 +13 +-0.23040130975189796 +23 +-2.220446049250313e-15 +33 +1.947182440213074 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.2569792693466746 +20 +-1.1102230246251565e-15 +30 +1.8830175696991678 +11 +-0.23040130975192985 +21 +0.19156135043889155 +31 +1.9471824402130984 +12 +-0.2569792693467132 +22 +0.19156135043888933 +32 +1.88301756969917 +13 +-0.2569792693467132 +23 +0.19156135043888933 +33 +1.88301756969917 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.13302225820690117 +20 +-1.1102230246251565e-15 +30 +2.044561491758081 +11 +-0.06885738769298949 +21 +0.19156135043889155 +31 +2.0711394513528925 +12 +-0.1330222582069191 +22 +0.19156135043888822 +32 +2.0445614917581056 +13 +-0.1330222582069191 +23 +0.19156135043888822 +33 +2.0445614917581056 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.06885738769298949 +20 +0.19156135043889155 +30 +2.0711394513528925 +11 +-0.13302225820690117 +21 +-1.1102230246251565e-15 +31 +2.044561491758081 +12 +-0.06885738769298727 +22 +0.0 +32 +2.0711394513528703 +13 +-0.06885738769298727 +23 +0.0 +33 +2.0711394513528703 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +1.7763568394002505e-15 +20 +-2.220446049250313e-15 +30 +2.0802046984199913 +11 +0.06885738769298744 +21 +0.19156135043889044 +31 +2.0711394513528925 +12 +-9.992007221626409e-16 +22 +0.19156135043889155 +32 +2.08020469842002 +13 +-9.992007221626409e-16 +23 +0.19156135043889155 +33 +2.08020469842002 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.06885738769298744 +20 +0.19156135043889044 +30 +2.0711394513528925 +11 +1.7763568394002505e-15 +21 +-2.220446049250313e-15 +31 +2.0802046984199913 +12 +0.06885738769298966 +22 +-1.1102230246251565e-15 +32 +2.071139451352888 +13 +0.06885738769298966 +23 +-1.1102230246251565e-15 +33 +2.071139451352888 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.2660445164138411 +20 +0.19156135043889155 +30 +1.8141601820061808 +11 +-0.25697926934668525 +21 +-1.1102230246251565e-15 +31 +1.745302794313192 +12 +-0.26604451641381477 +22 +-2.220446049250313e-15 +32 +1.8141601820061808 +13 +-0.26604451641381477 +23 +-2.220446049250313e-15 +33 +1.8141601820061808 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.25697926934668525 +20 +-1.1102230246251565e-15 +30 +1.745302794313192 +11 +-0.2660445164138411 +21 +0.19156135043889155 +31 +1.8141601820061808 +12 +-0.2569792693467132 +22 +0.19156135043889155 +32 +1.745302794313181 +13 +-0.2569792693467132 +23 +0.19156135043889155 +33 +1.745302794313181 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.2569792693466746 +20 +-1.1102230246251565e-15 +30 +1.8830175696991678 +11 +-0.2660445164138411 +21 +0.19156135043889155 +31 +1.8141601820061808 +12 +-0.26604451641381477 +22 +-2.220446049250313e-15 +32 +1.8141601820061808 +13 +-0.26604451641381477 +23 +-2.220446049250313e-15 +33 +1.8141601820061808 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.2660445164138411 +20 +0.19156135043889155 +30 +1.8141601820061808 +11 +-0.2569792693466746 +21 +-1.1102230246251565e-15 +31 +1.8830175696991678 +12 +-0.2569792693467132 +22 +0.19156135043888933 +32 +1.88301756969917 +13 +-0.2569792693467132 +23 +0.19156135043888933 +33 +1.88301756969917 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.2569792693467132 +20 +0.19156135043889155 +30 +1.745302794313181 +11 +-0.23040130975190468 +21 +-1.1102230246251565e-15 +31 +1.6811379237992659 +12 +-0.25697926934668525 +22 +-1.1102230246251565e-15 +32 +1.745302794313192 +13 +-0.25697926934668525 +23 +-1.1102230246251565e-15 +33 +1.745302794313192 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.23040130975190468 +20 +-1.1102230246251565e-15 +30 +1.6811379237992659 +11 +-0.2569792693467132 +21 +0.19156135043889155 +31 +1.745302794313181 +12 +-0.23040130975192985 +22 +0.19156135043889155 +32 +1.6811379237992548 +13 +-0.23040130975192985 +23 +0.19156135043889155 +33 +1.6811379237992548 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.06885738769298966 +20 +-1.1102230246251565e-15 +30 +2.071139451352888 +11 +0.13302225820692148 +21 +0.19156135043888933 +31 +2.0445614917581056 +12 +0.06885738769298744 +22 +0.19156135043889044 +32 +2.0711394513528925 +13 +0.06885738769298744 +23 +0.19156135043889044 +33 +2.0711394513528925 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.13302225820692148 +20 +0.19156135043888933 +30 +2.0445614917581056 +11 +0.06885738769298966 +21 +-1.1102230246251565e-15 +31 +2.071139451352888 +12 +0.1330222582069237 +22 +-1.1102230246251565e-15 +32 +2.044561491758108 +13 +0.1330222582069237 +23 +-1.1102230246251565e-15 +33 +2.044561491758108 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.1330222582069237 +20 +-1.1102230246251565e-15 +30 +2.044561491758108 +11 +0.188121881653721 +21 +0.19156135043889155 +31 +2.002282063659892 +12 +0.13302225820692148 +22 +0.19156135043888933 +32 +2.0445614917581056 +13 +0.13302225820692148 +23 +0.19156135043888933 +33 +2.0445614917581056 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.188121881653721 +20 +0.19156135043889155 +30 +2.002282063659892 +11 +0.1330222582069237 +21 +-1.1102230246251565e-15 +31 +2.044561491758108 +12 +0.18812188165372434 +22 +-2.220446049250313e-15 +32 +2.002282063659901 +13 +0.18812188165372434 +23 +-2.220446049250313e-15 +33 +2.002282063659901 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.06885738769298727 +20 +0.0 +30 +2.0711394513528703 +11 +-9.992007221626409e-16 +21 +0.19156135043889155 +31 +2.08020469842002 +12 +-0.06885738769298949 +22 +0.19156135043889155 +32 +2.0711394513528925 +13 +-0.06885738769298949 +23 +0.19156135043889155 +33 +2.0711394513528925 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-9.992007221626409e-16 +20 +0.19156135043889155 +30 +2.08020469842002 +11 +-0.06885738769298727 +21 +0.0 +31 +2.0711394513528703 +12 +1.7763568394002505e-15 +22 +-2.220446049250313e-15 +32 +2.0802046984199913 +13 +1.7763568394002505e-15 +23 +-2.220446049250313e-15 +33 +2.0802046984199913 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.26604451641384186 +20 +0.19156135043889044 +30 +1.8141601820061786 +11 +0.25697926934670945 +21 +-1.1102230246251565e-15 +31 +1.8830175696991722 +12 +0.2660445164138424 +22 +-2.220446049250313e-15 +32 +1.814160182006172 +13 +0.2660445164138424 +23 +-2.220446049250313e-15 +33 +1.814160182006172 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.25697926934670945 +20 +-1.1102230246251565e-15 +30 +1.8830175696991722 +11 +0.26604451641384186 +21 +0.19156135043889044 +31 +1.8141601820061786 +12 +0.2569792693467089 +22 +0.19156135043889155 +32 +1.88301756969917 +13 +0.2569792693467089 +23 +0.19156135043889155 +33 +1.88301756969917 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.2569792693467089 +20 +0.19156135043889155 +30 +1.88301756969917 +11 +0.23040130975195694 +21 +-1.1102230246251565e-15 +31 +1.9471824402131095 +12 +0.25697926934670945 +22 +-1.1102230246251565e-15 +32 +1.8830175696991722 +13 +0.25697926934670945 +23 +-1.1102230246251565e-15 +33 +1.8830175696991722 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.23040130975195694 +20 +-1.1102230246251565e-15 +30 +1.9471824402131095 +11 +0.2569792693467089 +21 +0.19156135043889155 +31 +1.88301756969917 +12 +0.2304013097519334 +22 +0.19156135043889155 +32 +1.9471824402130984 +13 +0.2304013097519334 +23 +0.19156135043889155 +33 +1.9471824402130984 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.18812188165369287 +20 +-1.1102230246251565e-15 +30 +2.0022820636598677 +11 +-0.23040130975192985 +21 +0.19156135043889155 +31 +1.9471824402130984 +12 +-0.23040130975189796 +22 +-2.220446049250313e-15 +32 +1.947182440213074 +13 +-0.23040130975189796 +23 +-2.220446049250313e-15 +33 +1.947182440213074 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.23040130975192985 +20 +0.19156135043889155 +30 +1.9471824402130984 +11 +-0.18812188165369287 +21 +-1.1102230246251565e-15 +31 +2.0022820636598677 +12 +-0.18812188165372756 +22 +0.19156135043889155 +32 +2.00228206365989 +13 +-0.18812188165372756 +23 +0.19156135043889155 +33 +2.00228206365989 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.23040130975192985 +20 +0.19156135043889155 +30 +1.6811379237992548 +11 +6.661338147750939e-16 +21 +0.19156135043889155 +31 +1.8141601820061741 +12 +-0.18812188165372756 +22 +0.19156135043889044 +32 +1.6260383003524492 +13 +-0.18812188165372756 +23 +0.19156135043889044 +33 +1.6260383003524492 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +6.661338147750939e-16 +20 +0.19156135043889155 +30 +1.8141601820061741 +11 +-0.23040130975192985 +21 +0.19156135043889155 +31 +1.6811379237992548 +12 +-0.2569792693467132 +22 +0.19156135043889155 +32 +1.745302794313181 +13 +-0.2569792693467132 +23 +0.19156135043889155 +33 +1.745302794313181 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +6.661338147750939e-16 +20 +0.19156135043889155 +30 +1.8141601820061741 +11 +-0.2569792693467132 +21 +0.19156135043889155 +31 +1.745302794313181 +12 +-0.2660445164138411 +22 +0.19156135043889155 +32 +1.8141601820061808 +13 +-0.2660445164138411 +23 +0.19156135043889155 +33 +1.8141601820061808 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +6.661338147750939e-16 +20 +0.19156135043889155 +30 +1.8141601820061741 +11 +-0.2660445164138411 +21 +0.19156135043889155 +31 +1.8141601820061808 +12 +0.26604451641384186 +22 +0.19156135043889044 +32 +1.8141601820061786 +13 +0.26604451641384186 +23 +0.19156135043889044 +33 +1.8141601820061786 +70 +15 + 0 +3DFACE + 8 +finger proximal +10 +0.26604451641384186 +20 +0.19156135043889044 +30 +1.8141601820061786 +11 +-0.2660445164138411 +21 +0.19156135043889155 +31 +1.8141601820061808 +12 +0.2569792693467089 +22 +0.19156135043889155 +32 +1.88301756969917 +13 +0.2569792693467089 +23 +0.19156135043889155 +33 +1.88301756969917 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.2569792693467089 +20 +0.19156135043889155 +30 +1.88301756969917 +11 +-0.2660445164138411 +21 +0.19156135043889155 +31 +1.8141601820061808 +12 +-0.2569792693467132 +22 +0.19156135043888933 +32 +1.88301756969917 +13 +-0.2569792693467132 +23 +0.19156135043888933 +33 +1.88301756969917 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.2569792693467089 +20 +0.19156135043889155 +30 +1.88301756969917 +11 +-0.2569792693467132 +21 +0.19156135043888933 +31 +1.88301756969917 +12 +-0.23040130975192985 +22 +0.19156135043889155 +32 +1.9471824402130984 +13 +-0.23040130975192985 +23 +0.19156135043889155 +33 +1.9471824402130984 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.2569792693467089 +20 +0.19156135043889155 +30 +1.88301756969917 +11 +-0.23040130975192985 +21 +0.19156135043889155 +31 +1.9471824402130984 +12 +0.2304013097519334 +22 +0.19156135043889155 +32 +1.9471824402130984 +13 +0.2304013097519334 +23 +0.19156135043889155 +33 +1.9471824402130984 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.2304013097519334 +20 +0.19156135043889155 +30 +1.9471824402130984 +11 +-0.23040130975192985 +21 +0.19156135043889155 +31 +1.9471824402130984 +12 +-0.18812188165372756 +22 +0.19156135043889155 +32 +2.00228206365989 +13 +-0.18812188165372756 +23 +0.19156135043889155 +33 +2.00228206365989 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.2304013097519334 +20 +0.19156135043889155 +30 +1.9471824402130984 +11 +-0.18812188165372756 +21 +0.19156135043889155 +31 +2.00228206365989 +12 +0.188121881653721 +22 +0.19156135043889155 +32 +2.002282063659892 +13 +0.188121881653721 +23 +0.19156135043889155 +33 +2.002282063659892 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.188121881653721 +20 +0.19156135043889155 +30 +2.002282063659892 +11 +-0.18812188165372756 +21 +0.19156135043889155 +31 +2.00228206365989 +12 +-0.1330222582069191 +22 +0.19156135043888822 +32 +2.0445614917581056 +13 +-0.1330222582069191 +23 +0.19156135043888822 +33 +2.0445614917581056 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.188121881653721 +20 +0.19156135043889155 +30 +2.002282063659892 +11 +-0.1330222582069191 +21 +0.19156135043888822 +31 +2.0445614917581056 +12 +0.13302225820692148 +22 +0.19156135043888933 +32 +2.0445614917581056 +13 +0.13302225820692148 +23 +0.19156135043888933 +33 +2.0445614917581056 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.13302225820692148 +20 +0.19156135043888933 +30 +2.0445614917581056 +11 +-0.1330222582069191 +21 +0.19156135043888822 +31 +2.0445614917581056 +12 +-0.06885738769298949 +22 +0.19156135043889155 +32 +2.0711394513528925 +13 +-0.06885738769298949 +23 +0.19156135043889155 +33 +2.0711394513528925 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.13302225820692148 +20 +0.19156135043888933 +30 +2.0445614917581056 +11 +-0.06885738769298949 +21 +0.19156135043889155 +31 +2.0711394513528925 +12 +0.06885738769298744 +22 +0.19156135043889044 +32 +2.0711394513528925 +13 +0.06885738769298744 +23 +0.19156135043889044 +33 +2.0711394513528925 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.06885738769298744 +20 +0.19156135043889044 +30 +2.0711394513528925 +11 +-0.06885738769298949 +21 +0.19156135043889155 +31 +2.0711394513528925 +12 +-9.992007221626409e-16 +22 +0.19156135043889155 +32 +2.08020469842002 +13 +-9.992007221626409e-16 +23 +0.19156135043889155 +33 +2.08020469842002 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.26604451641384186 +20 +0.19156135043889044 +30 +1.8141601820061786 +11 +0.261211438220872 +21 +0.19156135043889044 +31 +1.777449308444807 +12 +6.661338147750939e-16 +22 +0.19156135043889155 +32 +1.8141601820061741 +13 +6.661338147750939e-16 +23 +0.19156135043889155 +33 +1.8141601820061741 +70 +12 + 0 +3DFACE + 8 +finger proximal +10 +-0.18812188165372756 +20 +0.19156135043889044 +30 +1.6260383003524492 +11 +-0.3424871358064196 +21 +-2.220446049250313e-15 +31 +1.4716730461997534 +12 +-0.1881218816537231 +22 +-2.220446049250313e-15 +32 +1.626038300352452 +13 +-0.1881218816537231 +23 +-2.220446049250313e-15 +33 +1.626038300352452 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.3424871358064196 +20 +-2.220446049250313e-15 +30 +1.4716730461997534 +11 +-0.18812188165372756 +21 +0.19156135043889044 +31 +1.6260383003524492 +12 +-0.33052374502961596 +22 +0.08856357055999653 +32 +1.4836364369765538 +13 +-0.33052374502961596 +23 +0.08856357055999653 +33 +1.4836364369765538 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.33052374502961596 +20 +0.08856357055999653 +30 +1.4836364369765538 +11 +-0.18812188165372756 +21 +0.19156135043889044 +31 +1.6260383003524492 +12 +-0.2955708619933719 +22 +0.1706479167364875 +32 +1.518589320012799 +13 +-0.2955708619933719 +23 +0.1706479167364875 +33 +1.518589320012799 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.2955708619933719 +20 +0.1706479167364875 +30 +1.518589320012799 +11 +-0.18812188165372756 +21 +0.19156135043889044 +31 +1.6260383003524492 +12 +-0.24034094956198906 +22 +0.2403409495619936 +32 +1.5738192324441853 +13 +-0.24034094956198906 +23 +0.2403409495619936 +33 +1.5738192324441853 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.24034094956198906 +20 +0.2403409495619936 +30 +1.5738192324441853 +11 +-0.18812188165372756 +21 +0.19156135043889044 +31 +1.6260383003524492 +12 +6.661338147750939e-16 +22 +0.19156135043889155 +32 +1.8141601820061741 +13 +6.661338147750939e-16 +23 +0.19156135043889155 +33 +1.8141601820061741 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.24034094956198906 +20 +0.2403409495619936 +30 +1.5738192324441853 +11 +6.661338147750939e-16 +21 +0.19156135043889155 +31 +1.8141601820061741 +12 +1.1102230246251565e-16 +22 +0.33379067100000304 +32 +1.8141601820061741 +13 +1.1102230246251565e-16 +23 +0.33379067100000304 +33 +1.8141601820061741 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.24034094956198906 +20 +0.2403409495619936 +30 +1.5738192324441853 +11 +1.1102230246251565e-16 +21 +0.33379067100000304 +31 +1.8141601820061741 +12 +-0.16904149407111246 +22 +0.2927884563185241 +32 +1.645118687935059 +13 +-0.16904149407111246 +23 +0.2927884563185241 +33 +1.645118687935059 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.16904149407111246 +20 +0.2927884563185241 +30 +1.645118687935059 +11 +1.1102230246251565e-16 +21 +0.33379067100000304 +31 +1.8141601820061741 +12 +-0.08696289916304184 +22 +0.32454995804996933 +32 +1.7271972828431308 +13 +-0.08696289916304184 +23 +0.32454995804996933 +33 +1.7271972828431308 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.33052374502961596 +20 +0.08856357055999653 +30 +1.4836364369765538 +11 +-0.36643493196576155 +21 +6.894044639604857e-07 +31 +0.36643493196577 +12 +-0.3424871358064196 +22 +-2.220446049250313e-15 +32 +1.4716730461997534 +13 +-0.3424871358064196 +23 +-2.220446049250313e-15 +33 +1.4716730461997534 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.36643493196576155 +20 +6.894044639604857e-07 +30 +0.36643493196577 +11 +-0.33052374502961596 +21 +0.08856357055999653 +31 +1.4836364369765538 +12 +-0.3541898489439894 +22 +0.09490488399184593 +32 +0.3541898489439996 +13 +-0.3541898489439894 +23 +0.09490488399184593 +33 +0.3541898489439996 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.2955708619933719 +20 +0.1706479167364875 +30 +1.518589320012799 +11 +-0.3541898489439894 +21 +0.09490488399184593 +31 +0.3541898489439996 +12 +-0.33052374502961596 +22 +0.08856357055999653 +32 +1.4836364369765538 +13 +-0.33052374502961596 +23 +0.08856357055999653 +33 +1.4836364369765538 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.3541898489439894 +20 +0.09490488399184593 +30 +0.3541898489439996 +11 +-0.2955708619933719 +21 +0.1706479167364875 +31 +1.518589320012799 +12 +-0.34654102806927234 +22 +0.11372420208085299 +32 +0.34654102806927917 +13 +-0.34654102806927234 +23 +0.11372420208085299 +33 +0.34654102806927917 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.31821039848923144 +20 +0.18371885922669984 +30 +0.31821039848924043 +11 +-0.34654102806927234 +21 +0.11372420208085299 +31 +0.34654102806927917 +12 +-0.2955708619933719 +22 +0.1706479167364875 +32 +1.518589320012799 +13 +-0.2955708619933719 +23 +0.1706479167364875 +33 +1.518589320012799 +70 +0 + 0 +3DFACE + 8 +finger proximal +10 +-0.24034094956198906 +20 +0.2403409495619936 +30 +1.5738192324441853 +11 +-0.31821039848923144 +21 +0.18371885922669984 +31 +0.31821039848924043 +12 +-0.2955708619933719 +22 +0.1706479167364875 +32 +1.518589320012799 +13 +-0.2955708619933719 +23 +0.1706479167364875 +33 +1.518589320012799 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.31821039848923144 +20 +0.18371885922669984 +30 +0.31821039848924043 +11 +-0.24034094956198906 +21 +0.2403409495619936 +31 +1.5738192324441853 +12 +-0.30780841448952007 +22 +0.1975803495231122 +32 +0.30780841448952795 +13 +-0.30780841448952007 +23 +0.1975803495231122 +33 +0.30780841448952795 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.24034094956198906 +20 +0.2403409495619936 +30 +1.5738192324441853 +11 +-0.2885829061834132 +21 +0.22332138636309273 +31 +0.28858290618342114 +12 +-0.30780841448952007 +22 +0.1975803495231122 +32 +0.30780841448952795 +13 +-0.30780841448952007 +23 +0.1975803495231122 +33 +0.30780841448952795 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.2885829061834132 +20 +0.22332138636309273 +30 +0.28858290618342114 +11 +-0.24034094956198906 +21 +0.2403409495619936 +31 +1.5738192324441853 +12 +-0.2606802535046579 +22 +0.26068025350466195 +32 +0.2606802535046641 +13 +-0.2606802535046579 +23 +0.26068025350466195 +33 +0.2606802535046641 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.24034094956198906 +20 +0.2403409495619936 +30 +1.5738192324441853 +11 +-0.19372715732247747 +21 +0.3138879622371804 +31 +0.19372715732248486 +12 +-0.2606802535046579 +22 +0.26068025350466195 +32 +0.2606802535046641 +13 +-0.2606802535046579 +23 +0.26068025350466195 +33 +0.2606802535046641 +70 +0 + 0 +3DFACE + 8 +finger proximal +10 +-0.19372715732247747 +20 +0.3138879622371804 +30 +0.19372715732248486 +11 +-0.16904149407111246 +21 +0.2927884563185241 +31 +1.645118687935059 +12 +-0.18514211013161566 +22 +0.3206755413684731 +32 +0.1851421101316219 +13 +-0.18514211013161566 +23 +0.3206755413684731 +33 +0.1851421101316219 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.16904149407111246 +20 +0.2927884563185241 +30 +1.645118687935059 +11 +-0.19372715732247747 +21 +0.3138879622371804 +31 +0.19372715732248486 +12 +-0.24034094956198906 +22 +0.2403409495619936 +32 +1.5738192324441853 +13 +-0.24034094956198906 +23 +0.2403409495619936 +33 +1.5738192324441853 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.16904149407111246 +20 +0.2927884563185241 +30 +1.645118687935059 +11 +-0.1013377420365758 +21 +0.3573720124041593 +31 +0.1013377420365838 +12 +-0.18514211013161566 +22 +0.3206755413684731 +32 +0.1851421101316219 +13 +-0.18514211013161566 +23 +0.3206755413684731 +33 +0.1851421101316219 +70 +0 + 0 +3DFACE + 8 +finger proximal +10 +-0.1013377420365758 +20 +0.3573720124041593 +30 +0.1013377420365838 +11 +-0.08696289916304184 +21 +0.32454995804996933 +31 +1.7271972828431308 +12 +-0.09633958547085791 +22 +0.3595442277573727 +32 +0.09633958547086535 +13 +-0.09633958547085791 +23 +0.3595442277573727 +33 +0.09633958547086535 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.08696289916304184 +20 +0.32454995804996933 +30 +1.7271972828431308 +11 +-0.1013377420365758 +21 +0.3573720124041593 +31 +0.1013377420365838 +12 +-0.16904149407111246 +22 +0.2927884563185241 +32 +1.645118687935059 +13 +-0.16904149407111246 +23 +0.2927884563185241 +33 +1.645118687935059 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.08696289916304184 +20 +0.32454995804996933 +30 +1.7271972828431308 +11 +1.1102230246251565e-16 +21 +0.37319459270527366 +31 +0.05244907956522271 +12 +-0.002638372221004881 +22 +0.3728562895769836 +32 +0.05240153416118987 +13 +-0.002638372221004881 +23 +0.3728562895769836 +33 +0.05240153416118987 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +1.1102230246251565e-16 +20 +0.37319459270527366 +30 +0.05244907956522271 +11 +-0.08696289916304184 +21 +0.32454995804996933 +31 +1.7271972828431308 +12 +1.1102230246251565e-16 +22 +0.33379067100000304 +32 +1.8141601820061741 +13 +1.1102230246251565e-16 +23 +0.33379067100000304 +33 +1.8141601820061741 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.09660018260574987 +20 +0.36051678950509547 +30 +0.050667330521278475 +11 +0.16715806244605846 +21 +0.28952625705134216 +31 +1.7906676483827717 +12 +0.18667566717603135 +22 +0.3233317400856974 +32 +0.04544131263742729 +13 +0.18667566717603135 +23 +0.3233317400856974 +33 +0.04544131263742729 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.16715806244605846 +20 +0.28952625705134216 +30 +1.7906676483827717 +11 +0.09660018260574987 +21 +0.36051678950509547 +31 +0.050667330521278475 +12 +0.08646172679066877 +22 +0.3226795572929172 +32 +1.8020087787532109 +13 +0.08646172679066877 +23 +0.3226795572929172 +33 +1.8020087787532109 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.3731945927052738 +20 +1.1102230246251565e-15 +30 +0.05244907956522721 +11 +0.32339898045021165 +21 +0.08665449564468308 +31 +1.7687094193518036 +12 +0.334843235733576 +22 +0.0 +32 +1.7671010341617321 +13 +0.334843235733576 +23 +0.0 +33 +1.7671010341617321 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.32339898045021165 +20 +0.08665449564468308 +30 +1.7687094193518036 +11 +0.3731945927052738 +21 +1.1102230246251565e-15 +31 +0.05244907956522721 +12 +0.360516789505095 +22 +0.09660018260575365 +32 +0.050667330521278475 +13 +0.360516789505095 +23 +0.09660018260575365 +33 +0.050667330521278475 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.3233317400856941 +20 +0.18667566717602557 +30 +0.04544131263742618 +11 +0.23655144370181413 +21 +0.23655144370181402 +31 +1.7809150446582704 +12 +0.28986029081458276 +22 +0.16735091692918358 +32 +1.773422974788019 +13 +0.28986029081458276 +23 +0.16735091692918358 +33 +1.773422974788019 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.23655144370181413 +20 +0.23655144370181402 +30 +1.7809150446582704 +11 +0.3233317400856941 +21 +0.18667566717602557 +31 +0.04544131263742618 +12 +0.2800330587934533 +22 +0.24332527544562987 +32 +0.0393560798271011 +13 +0.2800330587934533 +23 +0.24332527544562987 +33 +0.0393560798271011 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.23655144370181413 +20 +0.23655144370181402 +30 +1.7809150446582704 +11 +0.2800330587934533 +21 +0.24332527544562987 +31 +0.0393560798271011 +12 +0.2641308495701662 +22 +0.26413084957016775 +32 +0.037121170069247644 +13 +0.2641308495701662 +23 +0.26413084957016775 +33 +0.037121170069247644 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.18667566717603135 +20 +0.3233317400856974 +30 +0.04544131263742729 +11 +0.23655144370181413 +21 +0.23655144370181402 +31 +1.7809150446582704 +12 +0.2641308495701662 +22 +0.26413084957016775 +32 +0.037121170069247644 +13 +0.2641308495701662 +23 +0.26413084957016775 +33 +0.037121170069247644 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.23655144370181413 +20 +0.23655144370181402 +30 +1.7809150446582704 +11 +0.18667566717603135 +21 +0.3233317400856974 +31 +0.04544131263742729 +12 +0.16715806244605846 +22 +0.28952625705134216 +32 +1.7906676483827717 +13 +0.16715806244605846 +23 +0.28952625705134216 +33 +1.7906676483827717 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.360516789505095 +20 +0.09660018260575365 +30 +0.050667330521278475 +11 +0.28986029081458276 +21 +0.16735091692918358 +31 +1.773422974788019 +12 +0.32339898045021165 +22 +0.08665449564468308 +32 +1.7687094193518036 +13 +0.32339898045021165 +23 +0.08665449564468308 +33 +1.7687094193518036 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.28986029081458276 +20 +0.16735091692918358 +30 +1.773422974788019 +11 +0.360516789505095 +21 +0.09660018260575365 +31 +0.050667330521278475 +12 +0.3233317400856941 +22 +0.18667566717602557 +32 +0.04544131263742618 +13 +0.3233317400856941 +23 +0.18667566717602557 +33 +0.04544131263742618 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.03798528133991513 +20 +0.3682094062559258 +30 +0.051748457300486994 +11 +0.08646172679066877 +21 +0.3226795572929172 +31 +1.8020087787532109 +12 +0.09660018260574987 +22 +0.36051678950509547 +32 +0.050667330521278475 +13 +0.09660018260574987 +23 +0.36051678950509547 +33 +0.050667330521278475 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.08646172679066877 +20 +0.3226795572929172 +30 +1.8020087787532109 +11 +0.03798528133991513 +21 +0.3682094062559258 +31 +0.051748457300486994 +12 +1.1102230246251565e-16 +22 +0.37319459270527366 +32 +0.05244907956522271 +13 +1.1102230246251565e-16 +23 +0.37319459270527366 +33 +0.05244907956522271 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.08646172679066877 +20 +0.3226795572929172 +30 +1.8020087787532109 +11 +1.1102230246251565e-16 +21 +0.37319459270527366 +31 +0.05244907956522271 +12 +1.1102230246251565e-16 +22 +0.33379067100000304 +32 +1.8141601820061741 +13 +1.1102230246251565e-16 +23 +0.33379067100000304 +33 +1.8141601820061741 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.26121143822087256 +20 +0.0 +30 +1.7774493084448049 +11 +0.26604451641384186 +21 +0.19156135043889044 +31 +1.8141601820061786 +12 +0.2660445164138424 +22 +-2.220446049250313e-15 +32 +1.814160182006172 +13 +0.2660445164138424 +23 +-2.220446049250313e-15 +33 +1.814160182006172 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.26604451641384186 +20 +0.19156135043889044 +30 +1.8141601820061786 +11 +0.26121143822087256 +21 +0.0 +31 +1.7774493084448049 +12 +0.261211438220872 +22 +0.19156135043889044 +32 +1.777449308444807 +13 +0.261211438220872 +23 +0.19156135043889044 +33 +1.777449308444807 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +6.661338147750939e-16 +20 +0.19156135043889155 +30 +1.8141601820061741 +11 +0.08646172679066877 +21 +0.3226795572929172 +31 +1.8020087787532109 +12 +1.1102230246251565e-16 +22 +0.33379067100000304 +32 +1.8141601820061741 +13 +1.1102230246251565e-16 +23 +0.33379067100000304 +33 +1.8141601820061741 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.08646172679066877 +20 +0.3226795572929172 +30 +1.8020087787532109 +11 +6.661338147750939e-16 +21 +0.19156135043889155 +31 +1.8141601820061741 +12 +0.261211438220872 +22 +0.19156135043889044 +32 +1.777449308444807 +13 +0.261211438220872 +23 +0.19156135043889044 +33 +1.777449308444807 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.08646172679066877 +20 +0.3226795572929172 +30 +1.8020087787532109 +11 +0.261211438220872 +21 +0.19156135043889044 +31 +1.777449308444807 +12 +0.16715806244605846 +22 +0.28952625705134216 +32 +1.7906676483827717 +13 +0.16715806244605846 +23 +0.28952625705134216 +33 +1.7906676483827717 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.16715806244605846 +20 +0.28952625705134216 +30 +1.7906676483827717 +11 +0.261211438220872 +21 +0.19156135043889044 +31 +1.777449308444807 +12 +0.23655144370181413 +22 +0.23655144370181402 +32 +1.7809150446582704 +13 +0.23655144370181413 +23 +0.23655144370181402 +33 +1.7809150446582704 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.23655144370181413 +20 +0.23655144370181402 +30 +1.7809150446582704 +11 +0.261211438220872 +21 +0.19156135043889044 +31 +1.777449308444807 +12 +0.28986029081458276 +22 +0.16735091692918358 +32 +1.773422974788019 +13 +0.28986029081458276 +23 +0.16735091692918358 +33 +1.773422974788019 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.28986029081458276 +20 +0.16735091692918358 +30 +1.773422974788019 +11 +0.261211438220872 +21 +0.19156135043889044 +31 +1.777449308444807 +12 +0.26121143822087256 +22 +0.0 +32 +1.7774493084448049 +13 +0.26121143822087256 +23 +0.0 +33 +1.7774493084448049 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.28986029081458276 +20 +0.16735091692918358 +30 +1.773422974788019 +11 +0.26121143822087256 +21 +0.0 +31 +1.7774493084448049 +12 +0.334843235733576 +22 +0.0 +32 +1.7671010341617321 +13 +0.334843235733576 +23 +0.0 +33 +1.7671010341617321 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.28986029081458276 +20 +0.16735091692918358 +30 +1.773422974788019 +11 +0.334843235733576 +21 +0.0 +31 +1.7671010341617321 +12 +0.32339898045021165 +22 +0.08665449564468308 +32 +1.7687094193518036 +13 +0.32339898045021165 +23 +0.08665449564468308 +33 +1.7687094193518036 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.09633958547085791 +20 +0.3595442277573727 +30 +0.09633958547086535 +11 +-0.002638372221004881 +21 +0.3728562895769836 +31 +0.05240153416118987 +12 +-0.051500277979212306 +22 +0.3664435186276659 +32 +0.05150027797922019 +13 +-0.051500277979212306 +23 +0.3664435186276659 +33 +0.05150027797922019 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.002638372221004881 +20 +0.3728562895769836 +30 +0.05240153416118987 +11 +-0.09633958547085791 +21 +0.3595442277573727 +31 +0.09633958547086535 +12 +-0.08696289916304184 +22 +0.32454995804996933 +32 +1.7271972828431308 +13 +-0.08696289916304184 +23 +0.32454995804996933 +33 +1.7271972828431308 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.36643493196576155 +20 +6.894044639604857e-07 +30 +0.36643493196577 +11 +-0.1844404161195001 +21 +0.049420660550877904 +31 +0.1844404161195074 +12 +-0.18812185528866687 +22 +3.539292661169924e-07 +32 +0.18812185528867426 +13 +-0.18812185528866687 +23 +3.539292661169924e-07 +33 +0.18812185528867426 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.1844404161195001 +20 +0.049420660550877904 +30 +0.1844404161195074 +11 +-0.36643493196576155 +21 +6.894044639604857e-07 +31 +0.36643493196577 +12 +-0.3541898489439894 +22 +0.09490488399184593 +32 +0.3541898489439996 +13 +-0.3541898489439894 +23 +0.09490488399184593 +33 +0.3541898489439996 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.1844404161195001 +20 +0.049420660550877904 +30 +0.1844404161195074 +11 +-0.3541898489439894 +21 +0.09490488399184593 +31 +0.3541898489439996 +12 +-0.17298028978074165 +22 +0.09987021686940978 +32 +0.17298028978074903 +13 +-0.17298028978074165 +23 +0.09987021686940978 +33 +0.17298028978074903 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.17298028978074165 +20 +0.09987021686940978 +30 +0.17298028978074903 +11 +-0.3541898489439894 +21 +0.09490488399184593 +31 +0.3541898489439996 +12 +-0.34654102806927234 +22 +0.11372420208085299 +32 +0.34654102806927917 +13 +-0.34654102806927234 +23 +0.11372420208085299 +33 +0.34654102806927917 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.17298028978074165 +20 +0.09987021686940978 +30 +0.17298028978074903 +11 +-0.34654102806927234 +21 +0.11372420208085299 +31 +0.34654102806927917 +12 +-0.15240279554847375 +22 +0.15240279554847047 +32 +0.15240279554848163 +13 +-0.15240279554847375 +23 +0.15240279554847047 +33 +0.15240279554848163 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.15240279554847375 +20 +0.15240279554847047 +30 +0.15240279554848163 +11 +-0.34654102806927234 +21 +0.11372420208085299 +31 +0.34654102806927917 +12 +-0.31821039848923144 +22 +0.18371885922669984 +32 +0.31821039848924043 +13 +-0.31821039848923144 +23 +0.18371885922669984 +33 +0.31821039848924043 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.15240279554847375 +20 +0.15240279554847047 +30 +0.15240279554848163 +11 +-0.31821039848923144 +21 +0.18371885922669984 +31 +0.31821039848924043 +12 +-0.1330222582069191 +22 +0.18585839010548322 +32 +0.13302225820692531 +13 +-0.1330222582069191 +23 +0.18585839010548322 +33 +0.13302225820692531 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.1330222582069191 +20 +0.18585839010548322 +30 +0.13302225820692531 +11 +-0.31821039848923144 +21 +0.18371885922669984 +31 +0.31821039848924043 +12 +-0.30780841448952007 +22 +0.1975803495231122 +32 +0.30780841448952795 +13 +-0.30780841448952007 +23 +0.1975803495231122 +33 +0.30780841448952795 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.1330222582069191 +20 +0.18585839010548322 +30 +0.13302225820692531 +11 +-0.30780841448952007 +21 +0.1975803495231122 +31 +0.30780841448952795 +12 +-0.11825835860108969 +22 +0.2048294855167876 +32 +0.11825835860109529 +13 +-0.11825835860108969 +23 +0.2048294855167876 +33 +0.11825835860109529 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.11825835860108969 +20 +0.2048294855167876 +30 +0.11825835860109529 +11 +-0.30780841448952007 +21 +0.1975803495231122 +31 +0.30780841448952795 +12 +-0.2885829061834132 +22 +0.22332138636309273 +32 +0.28858290618342114 +13 +-0.2885829061834132 +23 +0.22332138636309273 +33 +0.28858290618342114 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.11825835860108969 +20 +0.2048294855167876 +30 +0.11825835860109529 +11 +-0.2885829061834132 +21 +0.22332138636309273 +31 +0.28858290618342114 +12 +-0.06885738769298949 +22 +0.2472510609542653 +32 +0.06885738769299571 +13 +-0.06885738769298949 +23 +0.2472510609542653 +33 +0.06885738769299571 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.06885738769298949 +20 +0.2472510609542653 +30 +0.06885738769299571 +11 +-0.2885829061834132 +21 +0.22332138636309273 +31 +0.28858290618342114 +12 +-0.2606802535046579 +22 +0.26068025350466195 +32 +0.2606802535046641 +13 +-0.2606802535046579 +23 +0.26068025350466195 +33 +0.2606802535046641 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.06885738769298949 +20 +0.2472510609542653 +30 +0.06885738769299571 +11 +-0.2606802535046579 +21 +0.26068025350466195 +31 +0.2606802535046641 +12 +-0.06658844156786636 +22 +0.24851144712811246 +32 +0.06658844156787258 +13 +-0.06658844156786636 +23 +0.24851144712811246 +33 +0.06658844156787258 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.06658844156786636 +20 +0.24851144712811246 +30 +0.06658844156787258 +11 +-0.2606802535046579 +21 +0.26068025350466195 +31 +0.2606802535046641 +12 +-0.03605586729290833 +22 +0.25655082645025573 +32 +0.036055867292911215 +13 +-0.03605586729290833 +23 +0.25655082645025573 +33 +0.036055867292911215 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.03605586729290833 +20 +0.25655082645025573 +30 +0.036055867292911215 +11 +-0.2606802535046579 +21 +0.26068025350466195 +31 +0.2606802535046641 +12 +-0.051500277979212306 +22 +0.3664435186276659 +32 +0.05150027797922019 +13 +-0.051500277979212306 +23 +0.3664435186276659 +33 +0.05150027797922019 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +-0.051500277979212306 +20 +0.3664435186276659 +30 +0.05150027797922019 +11 +-0.2606802535046579 +21 +0.26068025350466195 +31 +0.2606802535046641 +12 +-0.19372715732247747 +22 +0.3138879622371804 +32 +0.19372715732248486 +13 +-0.19372715732247747 +23 +0.3138879622371804 +33 +0.19372715732248486 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.051500277979212306 +20 +0.3664435186276659 +30 +0.05150027797922019 +11 +-0.19372715732247747 +21 +0.3138879622371804 +31 +0.19372715732248486 +12 +-0.18514211013161566 +22 +0.3206755413684731 +32 +0.1851421101316219 +13 +-0.18514211013161566 +23 +0.3206755413684731 +33 +0.1851421101316219 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.051500277979212306 +20 +0.3664435186276659 +30 +0.05150027797922019 +11 +-0.18514211013161566 +21 +0.3206755413684731 +31 +0.1851421101316219 +12 +-0.1013377420365758 +22 +0.3573720124041593 +32 +0.1013377420365838 +13 +-0.1013377420365758 +23 +0.3573720124041593 +33 +0.1013377420365838 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +-0.051500277979212306 +20 +0.3664435186276659 +30 +0.05150027797922019 +11 +-0.1013377420365758 +21 +0.3573720124041593 +31 +0.1013377420365838 +12 +-0.09633958547085791 +22 +0.3595442277573727 +32 +0.09633958547086535 +13 +-0.09633958547085791 +23 +0.3595442277573727 +33 +0.09633958547086535 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.002638372221004881 +20 +0.3728562895769836 +30 +0.05240153416118987 +11 +-0.03605586729290833 +21 +0.25655082645025573 +31 +0.036055867292911215 +12 +-0.051500277979212306 +22 +0.3664435186276659 +32 +0.05150027797922019 +13 +-0.051500277979212306 +23 +0.3664435186276659 +33 +0.05150027797922019 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +-0.03605586729290833 +20 +0.25655082645025573 +30 +0.036055867292911215 +11 +-0.002638372221004881 +21 +0.3728562895769836 +31 +0.05240153416118987 +12 +1.2212453270876722e-15 +22 +0.2612114382208691 +32 +0.036710873561378254 +13 +1.2212453270876722e-15 +23 +0.2612114382208691 +33 +0.036710873561378254 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +1.2212453270876722e-15 +20 +0.2612114382208691 +30 +0.036710873561378254 +11 +-0.002638372221004881 +21 +0.3728562895769836 +31 +0.05240153416118987 +12 +1.1102230246251565e-16 +22 +0.37319459270527366 +32 +0.05244907956522271 +13 +1.1102230246251565e-16 +23 +0.37319459270527366 +33 +0.05244907956522271 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +1.2212453270876722e-15 +20 +0.2612114382208691 +30 +0.036710873561378254 +11 +1.1102230246251565e-16 +21 +0.37319459270527366 +31 +0.05244907956522271 +12 +0.03798528133991513 +22 +0.3682094062559258 +32 +0.051748457300486994 +13 +0.03798528133991513 +23 +0.3682094062559258 +33 +0.051748457300486994 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +1.2212453270876722e-15 +20 +0.2612114382208691 +30 +0.036710873561378254 +11 +0.03798528133991513 +21 +0.3682094062559258 +31 +0.051748457300486994 +12 +0.0676483697554201 +22 +0.2524671529764305 +32 +0.03548194441425151 +13 +0.0676483697554201 +23 +0.2524671529764305 +33 +0.03548194441425151 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.0676483697554201 +20 +0.2524671529764305 +30 +0.03548194441425151 +11 +0.03798528133991513 +21 +0.3682094062559258 +31 +0.051748457300486994 +12 +0.09660018260574987 +22 +0.36051678950509547 +32 +0.050667330521278475 +13 +0.09660018260574987 +23 +0.36051678950509547 +33 +0.050667330521278475 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.0676483697554201 +20 +0.2524671529764305 +30 +0.03548194441425151 +11 +0.09660018260574987 +21 +0.36051678950509547 +31 +0.050667330521278475 +12 +0.1309243680317843 +22 +0.2267676573798948 +32 +0.031870115851683534 +13 +0.1309243680317843 +23 +0.2267676573798948 +33 +0.031870115851683534 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.1309243680317843 +20 +0.2267676573798948 +30 +0.031870115851683534 +11 +0.09660018260574987 +21 +0.36051678950509547 +31 +0.050667330521278475 +12 +0.18667566717603135 +22 +0.3233317400856974 +32 +0.04544131263742729 +13 +0.18667566717603135 +23 +0.3233317400856974 +33 +0.04544131263742729 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.1309243680317843 +20 +0.2267676573798948 +30 +0.031870115851683534 +11 +0.18667566717603135 +21 +0.3233317400856974 +31 +0.04544131263742729 +12 +0.18569241579901274 +22 +0.18569241579901485 +32 +0.026097367114300607 +13 +0.18569241579901274 +23 +0.18569241579901485 +33 +0.026097367114300607 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.18569241579901274 +20 +0.18569241579901485 +30 +0.026097367114300607 +11 +0.18667566717603135 +21 +0.3233317400856974 +31 +0.04544131263742729 +12 +0.2641308495701662 +22 +0.26413084957016775 +32 +0.037121170069247644 +13 +0.2641308495701662 +23 +0.26413084957016775 +33 +0.037121170069247644 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.2641308495701662 +20 +0.26413084957016775 +30 +0.037121170069247644 +11 +0.22676765737989824 +21 +0.13092436803178253 +31 +0.03187011585168126 +12 +0.18569241579901274 +22 +0.18569241579901485 +32 +0.026097367114300607 +13 +0.18569241579901274 +23 +0.18569241579901485 +33 +0.026097367114300607 +70 +1 + 0 +3DFACE + 8 +finger proximal +10 +0.22676765737989824 +20 +0.13092436803178253 +30 +0.03187011585168126 +11 +0.2641308495701662 +21 +0.26413084957016775 +31 +0.037121170069247644 +12 +0.25246715297643174 +22 +0.06764836975541832 +32 +0.03548194441424812 +13 +0.25246715297643174 +23 +0.06764836975541832 +33 +0.03548194441424812 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.25246715297643174 +20 +0.06764836975541832 +30 +0.03548194441424812 +11 +0.2641308495701662 +21 +0.26413084957016775 +31 +0.037121170069247644 +12 +0.2612114382208709 +22 +2.220446049250313e-15 +32 +0.036710873561377144 +13 +0.2612114382208709 +23 +2.220446049250313e-15 +33 +0.036710873561377144 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.2612114382208709 +20 +2.220446049250313e-15 +30 +0.036710873561377144 +11 +0.2641308495701662 +21 +0.26413084957016775 +31 +0.037121170069247644 +12 +0.3731945927052738 +22 +1.1102230246251565e-15 +32 +0.05244907956522721 +13 +0.3731945927052738 +23 +1.1102230246251565e-15 +33 +0.05244907956522721 +70 +3 + 0 +3DFACE + 8 +finger proximal +10 +0.3731945927052738 +20 +1.1102230246251565e-15 +30 +0.05244907956522721 +11 +0.2641308495701662 +21 +0.26413084957016775 +31 +0.037121170069247644 +12 +0.2800330587934533 +22 +0.24332527544562987 +32 +0.0393560798271011 +13 +0.2800330587934533 +23 +0.24332527544562987 +33 +0.0393560798271011 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.3731945927052738 +20 +1.1102230246251565e-15 +30 +0.05244907956522721 +11 +0.2800330587934533 +21 +0.24332527544562987 +31 +0.0393560798271011 +12 +0.3233317400856941 +22 +0.18667566717602557 +32 +0.04544131263742618 +13 +0.3233317400856941 +23 +0.18667566717602557 +33 +0.04544131263742618 +70 +13 + 0 +3DFACE + 8 +finger proximal +10 +0.3731945927052738 +20 +1.1102230246251565e-15 +30 +0.05244907956522721 +11 +0.3233317400856941 +21 +0.18667566717602557 +31 +0.04544131263742618 +12 +0.360516789505095 +22 +0.09660018260575365 +32 +0.050667330521278475 +13 +0.360516789505095 +23 +0.09660018260575365 +33 +0.050667330521278475 +70 +1 + 0 +LINE + 8 +finger proximal +10 +2.886579864025407e-15 +20 +1.1102230246251565e-15 +30 +6.716849298982197e-15 +11 +3.4416913763379853e-15 +21 +1.1102230246251565e-15 +31 +0.036055867292914545 + 0 +LINE + 8 +finger proximal +10 +2.886579864025407e-15 +20 +1.1102230246251565e-15 +30 +6.716849298982197e-15 +11 +2.886579864025407e-15 +21 +0.37319459270527366 +31 +5.6066262743570405e-15 + 0 +LINE + 8 +finger proximal +10 +2.886579864025407e-15 +20 +1.1102230246251565e-15 +30 +6.716849298982197e-15 +11 +0.37319459270527433 +21 +0.0 +31 +4.496403249731884e-15 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06818492398575215 +20 +0.017821605409913677 +30 +1.4094380312409234 +11 +-0.11687444975825895 +21 +0.06651113118242014 +31 +1.3828600716461388 +12 +-0.13016342955565008 +22 +0.03442869592545578 +32 +1.3828600716461388 +13 +-0.13016342955565008 +23 +0.03442869592545578 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.11687444975825895 +20 +0.06651113118242014 +30 +1.3828600716461388 +11 +-0.06818492398575215 +21 +0.017821605409913677 +31 +1.4094380312409234 +12 +-0.06130604186265742 +22 +0.034428695925455444 +32 +1.4094380312409234 +13 +-0.06130604186265742 +23 +0.034428695925455444 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +2.078959449036688e-09 +30 +1.4185032783080505 +11 +-0.05036332065479815 +21 +0.048689527851465464 +31 +1.4094380312409234 +12 +-0.06130604186265742 +22 +0.034428695925455444 +32 +1.4094380312409234 +13 +-0.06130604186265742 +23 +0.034428695925455444 +33 +1.4094380312409234 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.05795845209807354 +20 +0.034428695925455666 +30 +1.4094380312409234 +11 +0.09238714594456965 +21 +0.09406094290582162 +31 +1.3828600716461388 +12 +0.047015730890213825 +22 +0.04868952785146535 +32 +1.4094380312409234 +13 +0.047015730890213825 +23 +0.04868952785146535 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.09238714594456965 +20 +0.09406094290582162 +30 +1.3828600716461388 +11 +0.05795845209807354 +21 +0.034428695925455666 +31 +1.4094380312409234 +12 +0.11352685999367468 +22 +0.06651113118242036 +32 +1.3828600716461388 +13 +0.11352685999367468 +23 +0.06651113118242036 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2586530642290084 +20 +0.06885738977195188 +30 +1.1524587618942086 +11 +-0.2299631369342784 +21 +0.13180291516579612 +31 +1.133935070472781 +12 +-0.25742830375937065 +22 +0.06852921619319091 +32 +1.1428276089410967 +13 +-0.25742830375937065 +23 +0.06852921619319091 +33 +1.1428276089410967 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2299631369342784 +20 +0.13180291516579612 +30 +1.133935070472781 +11 +-0.2586530642290084 +21 +0.06885738977195188 +31 +1.1524587618942086 +12 +-0.23207510463422537 +22 +0.13302226028588032 +32 +1.1524587618942086 +13 +-0.23207510463422537 +23 +0.13302226028588032 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18736621068130693 +20 +0.18569241787797425 +30 +1.1263613947799127 +11 +-0.1346960530892126 +21 +0.2304013118308924 +31 +1.1524587618942086 +12 +-0.13259816291407706 +22 +0.22676765945885902 +32 +1.1205886460425298 +13 +-0.13259816291407706 +23 +0.22676765945885902 +33 +1.1205886460425298 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1346960530892126 +20 +0.2304013118308924 +30 +1.1524587618942086 +11 +-0.18736621068130693 +21 +0.18569241787797425 +31 +1.1263613947799127 +12 +-0.18979567653601576 +22 +0.18812188373268263 +32 +1.1524587618942086 +13 +-0.18979567653601576 +23 +0.18812188373268263 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1645921234021466 +20 +0.16291833059881372 +30 +1.2854810201011309 +11 +-0.22422437038251308 +21 +0.12848963675231756 +31 +1.221316149587198 +12 +-0.2012071821926738 +22 +0.11520065695492604 +32 +1.2854810201011309 +13 +-0.2012071821926738 +23 +0.11520065695492604 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.22422437038251308 +20 +0.12848963675231756 +30 +1.221316149587198 +11 +-0.1645921234021466 +21 +0.16291833059881372 +31 +1.2854810201011309 +12 +-0.18338557886171938 +22 +0.18171178605838728 +32 +1.221316149587198 +13 +-0.18338557886171938 +23 +0.18171178605838728 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.23207510463422537 +20 +0.13302226028588032 +30 +1.1524587618942086 +11 +-0.18736621068130693 +21 +0.18569241787797425 +31 +1.1263613947799127 +12 +-0.2299631369342784 +22 +0.13180291516579612 +32 +1.133935070472781 +13 +-0.2299631369342784 +23 +0.13180291516579612 +33 +1.133935070472781 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18736621068130693 +20 +0.18569241787797425 +30 +1.1263613947799127 +11 +-0.23207510463422537 +21 +0.13302226028588032 +31 +1.1524587618942086 +12 +-0.18979567653601576 +22 +0.18812188373268263 +32 +1.1524587618942086 +13 +-0.18979567653601576 +23 +0.18812188373268263 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.016147808448662315 +20 +0.06651113118241958 +30 +1.4094380312409234 +11 +-0.001673794882292523 +21 +0.06885738977195172 +31 +1.4094380312409234 +12 +-0.0016737948822921345 +22 +2.078959449036688e-09 +32 +1.4185032783080505 +13 +-0.0016737948822921345 +23 +2.078959449036688e-09 +33 +1.4185032783080505 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.13016342955565008 +20 +0.03442869592545578 +30 +1.3828600716461388 +11 +-0.1645921234021454 +21 +0.09406094290582062 +31 +1.3405806435479293 +12 +-0.18338557886171858 +22 +0.048689527851465464 +32 +1.3405806435479293 +13 +-0.18338557886171858 +23 +0.048689527851465464 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1645921234021454 +20 +0.09406094290582062 +30 +1.3405806435479293 +11 +-0.13016342955565008 +21 +0.03442869592545578 +31 +1.3828600716461388 +12 +-0.11687444975825895 +22 +0.06651113118242014 +32 +1.3828600716461388 +13 +-0.11687444975825895 +23 +0.06651113118242014 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1645921234021462 +20 +0.1629183305988131 +30 +1.0194365036872854 +11 +-0.17465408466303567 +21 +0.099870218948371 +31 +0.9794784721134615 +12 +-0.20120718219267303 +22 +0.11520065695492587 +32 +1.0194365036872854 +13 +-0.20120718219267303 +23 +0.11520065695492587 +33 +1.0194365036872854 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.17465408466303567 +20 +0.099870218948371 +30 +0.9794784721134615 +11 +-0.1645921234021462 +21 +0.1629183305988131 +31 +1.0194365036872854 +12 +-0.16443652005322085 +22 +0.12595478545169825 +32 +0.9896960367232768 +13 +-0.16443652005322085 +23 +0.12595478545169825 +33 +0.9896960367232768 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.16443652005322085 +20 +0.12595478545169825 +30 +0.9896960367232768 +11 +-0.1645921234021462 +21 +0.1629183305988131 +31 +1.0194365036872854 +12 +-0.1540765904307652 +22 +0.1524027976274323 +32 +1.0000559663457305 +13 +-0.1540765904307652 +23 +0.1524027976274323 +33 +1.0000559663457305 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18979567653601495 +20 +2.078959449036688e-09 +30 +1.3405806435479293 +11 +-0.22422437038251186 +21 +0.059632249059325015 +31 +1.2854810201011309 +12 +-0.23207510463422537 +22 +2.078959449036688e-09 +32 +1.2854810201011309 +13 +-0.23207510463422537 +23 +2.078959449036688e-09 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.22422437038251186 +20 +0.059632249059325015 +30 +1.2854810201011309 +11 +-0.18979567653601495 +21 +2.078959449036688e-09 +31 +1.3405806435479293 +12 +-0.18338557886171858 +22 +0.048689527851465464 +32 +1.3405806435479293 +13 +-0.18338557886171858 +23 +0.048689527851465464 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.22422437038251186 +20 +0.12848963675231756 +30 +1.083601374201211 +11 +-0.1645921234021462 +21 +0.1629183305988131 +31 +1.0194365036872854 +12 +-0.20120718219267303 +22 +0.11520065695492587 +32 +1.0194365036872854 +13 +-0.20120718219267303 +23 +0.11520065695492587 +33 +1.0194365036872854 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1645921234021462 +20 +0.1629183305988131 +30 +1.0194365036872854 +11 +-0.22422437038251186 +21 +0.12848963675231756 +31 +1.083601374201211 +12 +-0.18338557886171938 +22 +0.18171178605838667 +32 +1.083601374201211 +13 +-0.18338557886171938 +23 +0.18171178605838667 +33 +1.083601374201211 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +2.078959449036688e-09 +30 +1.4185032783080505 +11 +-0.036102488728788296 +21 +0.05963224905932479 +31 +1.4094380312409234 +12 +-0.05036332065479815 +22 +0.048689527851465464 +32 +1.4094380312409234 +13 +-0.05036332065479815 +23 +0.048689527851465464 +33 +1.4094380312409234 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06685541923193933 +20 +0.2557545109560382 +30 +1.1428276089410931 +11 +0.13134846332462868 +21 +0.23040131183089219 +31 +1.1524587618942086 +12 +0.13012911820454431 +22 +0.22828934413094437 +32 +1.133935070472775 +13 +0.13012911820454431 +23 +0.22828934413094437 +33 +1.133935070472775 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.13134846332462868 +20 +0.23040131183089219 +30 +1.1524587618942086 +11 +0.06685541923193933 +21 +0.2557545109560382 +31 +1.1428276089410931 +12 +0.06718359281070013 +22 +0.25697927142567467 +32 +1.1524587618942086 +13 +0.06718359281070013 +23 +0.25697927142567467 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001673794882292523 +20 +0.25697927142567634 +30 +1.221316149587198 +11 +0.06718359281070013 +21 +0.25697927142567467 +31 +1.1524587618942086 +12 +-0.001673794882292523 +22 +0.2660445184928011 +32 +1.1524587618942086 +13 +-0.001673794882292523 +23 +0.2660445184928011 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06718359281070013 +20 +0.25697927142567467 +30 +1.1524587618942086 +11 +-0.001673794882292523 +21 +0.25697927142567634 +31 +1.221316149587198 +12 +0.06483733422116866 +22 +0.2482229151618479 +32 +1.221316149587198 +13 +0.06483733422116866 +23 +0.2482229151618479 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.047015730890213825 +20 +0.1817117860583855 +30 +1.3405806435479293 +11 +-0.0016737948822921345 +21 +0.23040131183089285 +31 +1.2854810201011309 +12 +-0.0016737948822921345 +22 +0.18812188373268185 +32 +1.3405806435479293 +13 +-0.0016737948822921345 +23 +0.18812188373268185 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +0.23040131183089285 +30 +1.2854810201011309 +11 +0.047015730890213825 +21 +0.1817117860583855 +31 +1.3405806435479293 +12 +0.05795845209807354 +22 +0.22255057757917918 +32 +1.2854810201011309 +13 +0.05795845209807354 +23 +0.22255057757917918 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.03275489896420397 +20 +0.12848963675231745 +30 +1.3828600716461388 +11 +-0.0016737948822921345 +21 +0.18812188373268185 +31 +1.3405806435479293 +12 +-0.001673794882292523 +22 +0.1330222602858806 +32 +1.3828600716461388 +13 +-0.001673794882292523 +23 +0.1330222602858806 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +0.18812188373268185 +30 +1.3405806435479293 +11 +0.03275489896420397 +21 +0.12848963675231745 +31 +1.3828600716461388 +12 +0.047015730890213825 +22 +0.1817117860583855 +32 +1.3405806435479293 +13 +0.047015730890213825 +23 +0.1817117860583855 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.016147808448662315 +20 +0.06651113118241958 +30 +1.4094380312409234 +11 +-0.001673794882292523 +21 +0.1330222602858806 +31 +1.3828600716461388 +12 +-0.001673794882292523 +22 +0.06885738977195172 +32 +1.4094380312409234 +13 +-0.001673794882292523 +23 +0.06885738977195172 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001673794882292523 +20 +0.1330222602858806 +30 +1.3828600716461388 +11 +0.016147808448662315 +21 +0.06651113118241958 +31 +1.4094380312409234 +12 +0.03275489896420397 +22 +0.12848963675231745 +32 +1.3828600716461388 +13 +0.03275489896420397 +23 +0.12848963675231745 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +0.23040131183089285 +30 +1.2854810201011309 +11 +0.06483733422116866 +21 +0.2482229151618479 +31 +1.221316149587198 +12 +-0.001673794882292523 +22 +0.25697927142567634 +32 +1.221316149587198 +13 +-0.001673794882292523 +23 +0.25697927142567634 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06483733422116866 +20 +0.2482229151618479 +30 +1.221316149587198 +11 +-0.0016737948822921345 +21 +0.23040131183089285 +31 +1.2854810201011309 +12 +0.05795845209807354 +22 +0.22255057757917918 +32 +1.2854810201011309 +13 +0.05795845209807354 +23 +0.22255057757917918 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.03275489896420397 +20 +0.05963224905932468 +30 +1.4094380312409234 +11 +0.016147808448662315 +21 +0.06651113118241958 +31 +1.4094380312409234 +12 +-0.0016737948822921345 +22 +2.078959449036688e-09 +32 +1.4185032783080505 +13 +-0.0016737948822921345 +23 +2.078959449036688e-09 +33 +1.4185032783080505 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1645921234021454 +20 +0.09406094290582062 +30 +1.3405806435479293 +11 +-0.1645921234021466 +21 +0.16291833059881372 +31 +1.2854810201011309 +12 +-0.2012071821926738 +22 +0.11520065695492604 +32 +1.2854810201011309 +13 +-0.2012071821926738 +23 +0.11520065695492604 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1645921234021466 +20 +0.16291833059881372 +30 +1.2854810201011309 +11 +-0.1645921234021454 +21 +0.09406094290582062 +31 +1.3405806435479293 +12 +-0.1346960530892126 +22 +0.1330222602858796 +32 +1.3405806435479293 +13 +-0.1346960530892126 +23 +0.1330222602858796 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1346960530892106 +20 +0.1858583921844445 +30 +1.0194365036872854 +11 +-0.1540765904307652 +21 +0.1524027976274323 +31 +1.0000559663457305 +12 +-0.1645921234021462 +22 +0.1629183305988131 +32 +1.0194365036872854 +13 +-0.1645921234021462 +23 +0.1629183305988131 +33 +1.0194365036872854 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06483733422116866 +20 +0.2482229151618479 +30 +1.221316149587198 +11 +0.13134846332462868 +21 +0.23040131183089219 +31 +1.1524587618942086 +12 +0.06718359281070013 +22 +0.25697927142567467 +32 +1.1524587618942086 +13 +0.06718359281070013 +23 +0.25697927142567467 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.13134846332462868 +20 +0.23040131183089219 +30 +1.1524587618942086 +11 +0.06483733422116866 +21 +0.2482229151618479 +31 +1.221316149587198 +12 +0.1268158397910666 +22 +0.22255057757917973 +32 +1.221316149587198 +13 +0.1268158397910666 +23 +0.22255057757917973 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.05795845209807354 +20 +0.22255057757917918 +30 +1.2854810201011309 +11 +0.1268158397910666 +21 +0.22255057757917973 +31 +1.221316149587198 +12 +0.06483733422116866 +22 +0.2482229151618479 +32 +1.221316149587198 +13 +0.06483733422116866 +23 +0.2482229151618479 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.1268158397910666 +20 +0.22255057757917973 +30 +1.221316149587198 +11 +0.05795845209807354 +21 +0.22255057757917918 +31 +1.2854810201011309 +12 +0.11352685999367468 +22 +0.19953338938934095 +32 +1.2854810201011309 +13 +0.11352685999367468 +23 +0.19953338938934095 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18338557886171938 +20 +0.18171178605838667 +30 +1.083601374201211 +11 +-0.1346960530892106 +21 +0.1858583921844445 +31 +1.0194365036872854 +12 +-0.1645921234021462 +22 +0.1629183305988131 +32 +1.0194365036872854 +13 +-0.1645921234021462 +23 +0.1629183305988131 +33 +1.0194365036872854 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1346960530892106 +20 +0.1858583921844445 +30 +1.0194365036872854 +11 +-0.18338557886171938 +21 +0.18171178605838667 +31 +1.083601374201211 +12 +-0.11993215348338515 +22 +0.20482948759574693 +32 +1.0342004032931107 +13 +-0.11993215348338515 +23 +0.20482948759574693 +33 +1.0342004032931107 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.11993215348338515 +20 +0.20482948759574693 +30 +1.0342004032931107 +11 +-0.18338557886171938 +21 +0.18171178605838667 +31 +1.083601374201211 +12 +-0.13016342955565008 +22 +0.2225505775791794 +32 +1.083601374201211 +13 +-0.13016342955565008 +23 +0.2225505775791794 +33 +1.083601374201211 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.07053118257528401 +20 +2.0789595045478393e-09 +30 +1.4094380312409234 +11 +-0.13016342955565008 +21 +0.03442869592545578 +31 +1.3828600716461388 +12 +-0.1346960530892126 +22 +2.078959449036688e-09 +32 +1.3828600716461388 +13 +-0.1346960530892126 +23 +2.078959449036688e-09 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.13016342955565008 +20 +0.03442869592545578 +30 +1.3828600716461388 +11 +-0.07053118257528401 +21 +2.0789595045478393e-09 +31 +1.4094380312409234 +12 +-0.06818492398575215 +22 +0.017821605409913677 +32 +1.4094380312409234 +13 +-0.06818492398575215 +23 +0.017821605409913677 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.09238714594456926 +20 +0.16291833059881272 +30 +1.3405806435479293 +11 +0.05795845209807354 +21 +0.22255057757917918 +31 +1.2854810201011309 +12 +0.047015730890213825 +22 +0.1817117860583855 +32 +1.3405806435479293 +13 +0.047015730890213825 +23 +0.1817117860583855 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.05795845209807354 +20 +0.22255057757917918 +30 +1.2854810201011309 +11 +0.09238714594456926 +21 +0.16291833059881272 +31 +1.3405806435479293 +12 +0.11352685999367468 +22 +0.19953338938934095 +32 +1.2854810201011309 +13 +0.11352685999367468 +23 +0.19953338938934095 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06483733422116827 +20 +0.11520065695492626 +30 +1.3828600716461388 +11 +0.047015730890213825 +21 +0.1817117860583855 +31 +1.3405806435479293 +12 +0.03275489896420397 +22 +0.12848963675231745 +32 +1.3828600716461388 +13 +0.03275489896420397 +23 +0.12848963675231745 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.047015730890213825 +20 +0.1817117860583855 +30 +1.3405806435479293 +11 +0.06483733422116827 +21 +0.11520065695492626 +31 +1.3828600716461388 +12 +0.09238714594456926 +22 +0.16291833059881272 +32 +1.3405806435479293 +13 +0.09238714594456926 +23 +0.16291833059881272 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +2.078959449036688e-09 +30 +1.4185032783080505 +11 +-0.06130604186265742 +21 +0.034428695925455444 +31 +1.4094380312409234 +12 +-0.06818492398575215 +22 +0.017821605409913677 +32 +1.4094380312409234 +13 +-0.06818492398575215 +23 +0.017821605409913677 +33 +1.4094380312409234 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.22422437038251308 +20 +0.12848963675231756 +30 +1.221316149587198 +11 +-0.2586530642290084 +21 +0.06885738977195188 +31 +1.1524587618942086 +12 +-0.249896707965181 +22 +0.06651113118242025 +32 +1.221316149587198 +13 +-0.249896707965181 +23 +0.06651113118242025 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2586530642290084 +20 +0.06885738977195188 +30 +1.1524587618942086 +11 +-0.22422437038251308 +21 +0.12848963675231756 +31 +1.221316149587198 +12 +-0.23207510463422537 +22 +0.13302226028588032 +32 +1.1524587618942086 +13 +-0.23207510463422537 +23 +0.13302226028588032 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.05036332065479854 +20 +0.1817117860583855 +30 +1.3405806435479293 +11 +-0.0016737948822921345 +21 +0.23040131183089285 +31 +1.2854810201011309 +12 +-0.06130604186265742 +22 +0.22255057757917918 +32 +1.2854810201011309 +13 +-0.06130604186265742 +23 +0.22255057757917918 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +0.23040131183089285 +30 +1.2854810201011309 +11 +-0.05036332065479854 +21 +0.1817117860583855 +31 +1.3405806435479293 +12 +-0.0016737948822921345 +22 +0.18812188373268185 +32 +1.3405806435479293 +13 +-0.0016737948822921345 +23 +0.18812188373268185 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.05036332065479815 +20 +0.048689527851465464 +30 +1.4094380312409234 +11 +-0.06818492398575215 +21 +0.11520065695492637 +31 +1.3828600716461388 +12 +-0.09573473570915433 +22 +0.09406094290582112 +32 +1.3828600716461388 +13 +-0.09573473570915433 +23 +0.09406094290582112 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06818492398575215 +20 +0.11520065695492637 +30 +1.3828600716461388 +11 +-0.05036332065479815 +21 +0.048689527851465464 +31 +1.4094380312409234 +12 +-0.036102488728788296 +22 +0.05963224905932479 +32 +1.4094380312409234 +13 +-0.036102488728788296 +23 +0.05963224905932479 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.047015730890213825 +20 +0.04868952785146535 +30 +1.4094380312409234 +11 +0.03275489896420397 +21 +0.05963224905932468 +31 +1.4094380312409234 +12 +-0.0016737948822921345 +22 +2.078959449036688e-09 +32 +1.4185032783080505 +13 +-0.0016737948822921345 +23 +2.078959449036688e-09 +33 +1.4185032783080505 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1645921234021466 +20 +0.16291833059881372 +30 +1.2854810201011309 +11 +-0.13016342955565008 +21 +0.22255057757917995 +31 +1.221316149587198 +12 +-0.18338557886171938 +22 +0.18171178605838728 +32 +1.221316149587198 +13 +-0.18338557886171938 +23 +0.18171178605838728 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.13016342955565008 +20 +0.22255057757917995 +30 +1.221316149587198 +11 +-0.1645921234021466 +21 +0.16291833059881372 +31 +1.2854810201011309 +12 +-0.11687444975825895 +22 +0.19953338938934106 +32 +1.2854810201011309 +13 +-0.11687444975825895 +23 +0.19953338938934106 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06718359281069974 +20 +2.078959393525537e-09 +30 +1.4094380312409234 +11 +0.1268158397910666 +21 +0.03442869592545589 +31 +1.3828600716461388 +12 +0.06483733422116789 +22 +0.01782160540991351 +32 +1.4094380312409234 +13 +0.06483733422116789 +23 +0.01782160540991351 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.1268158397910666 +20 +0.03442869592545589 +30 +1.3828600716461388 +11 +0.06718359281069974 +21 +2.078959393525537e-09 +31 +1.4094380312409234 +12 +0.1313484633246299 +22 +2.078959449036688e-09 +32 +1.3828600716461388 +13 +0.1313484633246299 +23 +2.078959449036688e-09 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18644808677143027 +20 +2.078959393525537e-09 +30 +1.3405806435479293 +11 +0.2208767806179276 +21 +0.059632249059325015 +31 +1.2854810201011309 +12 +0.18003798909713392 +22 +0.0486895278514653 +32 +1.3405806435479293 +13 +0.18003798909713392 +23 +0.0486895278514653 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2208767806179276 +20 +0.059632249059325015 +30 +1.2854810201011309 +11 +0.18644808677143027 +21 +2.078959393525537e-09 +31 +1.3405806435479293 +12 +0.22872751486964182 +22 +2.078959393525537e-09 +32 +1.2854810201011309 +13 +0.22872751486964182 +23 +2.078959393525537e-09 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.16124453363756153 +20 +0.09406094290582073 +30 +1.3405806435479293 +11 +0.16124453363756192 +21 +0.162918330598814 +31 +1.2854810201011309 +12 +0.13134846332462868 +22 +0.13302226028588 +32 +1.3405806435479293 +13 +0.13134846332462868 +23 +0.13302226028588 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.16124453363756192 +20 +0.162918330598814 +30 +1.2854810201011309 +11 +0.16124453363756153 +21 +0.09406094290582073 +31 +1.3405806435479293 +12 +0.19785959242808948 +22 +0.11520065695492626 +32 +1.2854810201011309 +13 +0.19785959242808948 +23 +0.11520065695492626 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2553054744644233 +20 +0.06885738977195177 +30 +1.1524587618942086 +11 +0.2553054744644241 +21 +2.078959393525537e-09 +31 +1.221316149587198 +12 +0.2643707215315495 +22 +2.078959393525537e-09 +32 +1.1524587618942086 +13 +0.2643707215315495 +23 +2.078959393525537e-09 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2553054744644241 +20 +2.078959393525537e-09 +30 +1.221316149587198 +11 +0.2553054744644233 +21 +0.06885738977195177 +31 +1.1524587618942086 +12 +0.24654911820059633 +22 +0.06651113118241986 +32 +1.221316149587198 +13 +0.24654911820059633 +23 +0.06651113118241986 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.11352685999367468 +20 +0.06651113118242036 +30 +1.3828600716461388 +11 +0.13134846332462868 +21 +0.13302226028588 +31 +1.3405806435479293 +12 +0.09238714594456965 +22 +0.09406094290582162 +32 +1.3828600716461388 +13 +0.09238714594456965 +23 +0.09406094290582162 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.13134846332462868 +20 +0.13302226028588 +30 +1.3405806435479293 +11 +0.11352685999367468 +21 +0.06651113118242036 +31 +1.3828600716461388 +12 +0.16124453363756153 +22 +0.09406094290582073 +32 +1.3405806435479293 +13 +0.16124453363756153 +23 +0.09406094290582073 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06483733422116789 +20 +0.01782160540991351 +30 +1.4094380312409234 +11 +0.05795845209807354 +21 +0.034428695925455666 +31 +1.4094380312409234 +12 +-0.0016737948822921345 +22 +2.078959449036688e-09 +32 +1.4185032783080505 +13 +-0.0016737948822921345 +23 +2.078959449036688e-09 +33 +1.4185032783080505 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.047015730890213825 +20 +0.04868952785146535 +30 +1.4094380312409234 +11 +0.06483733422116827 +21 +0.11520065695492626 +31 +1.3828600716461388 +12 +0.03275489896420397 +22 +0.05963224905932468 +32 +1.4094380312409234 +13 +0.03275489896420397 +23 +0.05963224905932468 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06483733422116827 +20 +0.11520065695492626 +30 +1.3828600716461388 +11 +0.047015730890213825 +21 +0.04868952785146535 +31 +1.4094380312409234 +12 +0.09238714594456965 +22 +0.09406094290582162 +32 +1.3828600716461388 +13 +0.09238714594456965 +23 +0.09406094290582162 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.1313484633246299 +20 +2.078959449036688e-09 +30 +1.3828600716461388 +11 +0.18003798909713392 +21 +0.0486895278514653 +31 +1.3405806435479293 +12 +0.1268158397910666 +22 +0.03442869592545589 +32 +1.3828600716461388 +13 +0.1268158397910666 +23 +0.03442869592545589 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18003798909713392 +20 +0.0486895278514653 +30 +1.3405806435479293 +11 +0.1313484633246299 +21 +2.078959449036688e-09 +31 +1.3828600716461388 +12 +0.18644808677143027 +22 +2.078959393525537e-09 +32 +1.3405806435479293 +13 +0.18644808677143027 +23 +2.078959393525537e-09 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.05795845209807354 +20 +0.034428695925455666 +30 +1.4094380312409234 +11 +0.047015730890213825 +21 +0.04868952785146535 +31 +1.4094380312409234 +12 +-0.0016737948822921345 +22 +2.078959449036688e-09 +32 +1.4185032783080505 +13 +-0.0016737948822921345 +23 +2.078959449036688e-09 +33 +1.4185032783080505 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.11352685999367468 +20 +0.19953338938934095 +30 +1.2854810201011309 +11 +0.18003798909713586 +21 +0.18171178605838728 +31 +1.221316149587198 +12 +0.1268158397910666 +22 +0.22255057757917973 +32 +1.221316149587198 +13 +0.1268158397910666 +23 +0.22255057757917973 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18003798909713586 +20 +0.18171178605838728 +30 +1.221316149587198 +11 +0.11352685999367468 +21 +0.19953338938934095 +31 +1.2854810201011309 +12 +0.16124453363756192 +22 +0.162918330598814 +32 +1.2854810201011309 +13 +0.16124453363756192 +23 +0.162918330598814 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.24654911820059633 +20 +0.06651113118241986 +30 +1.221316149587198 +11 +0.19785959242808948 +21 +0.11520065695492626 +31 +1.2854810201011309 +12 +0.2208767806179276 +22 +0.059632249059325015 +32 +1.2854810201011309 +13 +0.2208767806179276 +23 +0.059632249059325015 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.19785959242808948 +20 +0.11520065695492626 +30 +1.2854810201011309 +11 +0.24654911820059633 +21 +0.06651113118241986 +31 +1.221316149587198 +12 +0.22087678061792837 +22 +0.12848963675231756 +32 +1.221316149587198 +13 +0.22087678061792837 +23 +0.12848963675231756 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.03275489896420397 +20 +0.05963224905932468 +30 +1.4094380312409234 +11 +0.03275489896420397 +21 +0.12848963675231745 +31 +1.3828600716461388 +12 +0.016147808448662315 +22 +0.06651113118241958 +32 +1.4094380312409234 +13 +0.016147808448662315 +23 +0.06651113118241958 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.03275489896420397 +20 +0.12848963675231745 +30 +1.3828600716461388 +11 +0.03275489896420397 +21 +0.05963224905932468 +31 +1.4094380312409234 +12 +0.06483733422116827 +22 +0.11520065695492626 +32 +1.3828600716461388 +13 +0.06483733422116827 +23 +0.11520065695492626 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.22422437038251108 +20 +0.05963224905932479 +30 +1.0194365036872854 +11 +-0.18979567653601576 +21 +2.0789595045478393e-09 +31 +0.9643368802404846 +12 +-0.23207510463422495 +22 +2.078959449036688e-09 +32 +1.0194365036872854 +13 +-0.23207510463422495 +23 +2.078959449036688e-09 +33 +1.0194365036872854 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18979567653601576 +20 +2.0789595045478393e-09 +30 +0.9643368802404846 +11 +-0.22422437038251108 +21 +0.05963224905932479 +31 +1.0194365036872854 +12 +-0.1861142110017942 +22 +0.049420662629840184 +32 +0.9680183457747035 +13 +-0.1861142110017942 +23 +0.049420662629840184 +33 +0.9680183457747035 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.258653064229008 +20 +2.0789595045478393e-09 +30 +1.083601374201211 +11 +-0.22422437038251108 +21 +0.05963224905932479 +31 +1.0194365036872854 +12 +-0.23207510463422495 +22 +2.078959449036688e-09 +32 +1.0194365036872854 +13 +-0.23207510463422495 +23 +2.078959449036688e-09 +33 +1.0194365036872854 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.22422437038251108 +20 +0.05963224905932479 +30 +1.0194365036872854 +11 +-0.258653064229008 +21 +2.0789595045478393e-09 +31 +1.083601374201211 +12 +-0.2498967079651798 +22 +0.06651113118242008 +32 +1.083601374201211 +13 +-0.2498967079651798 +23 +0.06651113118242008 +33 +1.083601374201211 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.22422437038251186 +20 +0.059632249059325015 +30 +1.2854810201011309 +11 +-0.2586530642290092 +21 +2.078959449036688e-09 +31 +1.221316149587198 +12 +-0.23207510463422537 +22 +2.078959449036688e-09 +32 +1.2854810201011309 +13 +-0.23207510463422537 +23 +2.078959449036688e-09 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2586530642290092 +20 +2.078959449036688e-09 +30 +1.221316149587198 +11 +-0.22422437038251186 +21 +0.059632249059325015 +31 +1.2854810201011309 +12 +-0.249896707965181 +22 +0.06651113118242025 +32 +1.221316149587198 +13 +-0.249896707965181 +23 +0.06651113118242025 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.13259816291407706 +20 +0.22676765945885902 +30 +1.1205886460425298 +11 +-0.0705311825752852 +21 +0.2569792714256749 +31 +1.1524587618942086 +12 +-0.06932216463771257 +22 +0.2524671550553943 +32 +1.1169768174799652 +13 +-0.06932216463771257 +23 +0.2524671550553943 +33 +1.1169768174799652 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0705311825752852 +20 +0.2569792714256749 +30 +1.1524587618942086 +11 +-0.13259816291407706 +21 +0.22676765945885902 +31 +1.1205886460425298 +12 +-0.1346960530892126 +22 +0.2304013118308924 +32 +1.1524587618942086 +13 +-0.1346960530892126 +23 +0.2304013118308924 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2012071821926738 +20 +0.11520065695492604 +30 +1.2854810201011309 +11 +-0.249896707965181 +21 +0.06651113118242025 +31 +1.221316149587198 +12 +-0.22422437038251186 +22 +0.059632249059325015 +32 +1.2854810201011309 +13 +-0.22422437038251186 +23 +0.059632249059325015 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.249896707965181 +20 +0.06651113118242025 +30 +1.221316149587198 +11 +-0.2012071821926738 +21 +0.11520065695492604 +31 +1.2854810201011309 +12 +-0.22422437038251308 +22 +0.12848963675231756 +32 +1.221316149587198 +13 +-0.22422437038251308 +23 +0.12848963675231756 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18338557886171858 +20 +0.048689527851465464 +30 +1.3405806435479293 +11 +-0.2012071821926738 +21 +0.11520065695492604 +31 +1.2854810201011309 +12 +-0.22422437038251186 +22 +0.059632249059325015 +32 +1.2854810201011309 +13 +-0.22422437038251186 +23 +0.059632249059325015 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2012071821926738 +20 +0.11520065695492604 +30 +1.2854810201011309 +11 +-0.18338557886171858 +21 +0.048689527851465464 +31 +1.3405806435479293 +12 +-0.1645921234021454 +22 +0.09406094290582062 +32 +1.3405806435479293 +13 +-0.1645921234021454 +23 +0.09406094290582062 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1346960530892126 +20 +0.1330222602858796 +30 +1.3405806435479293 +11 +-0.11687444975825895 +21 +0.19953338938934106 +31 +1.2854810201011309 +12 +-0.1645921234021466 +22 +0.16291833059881372 +32 +1.2854810201011309 +13 +-0.1645921234021466 +23 +0.16291833059881372 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.11687444975825895 +20 +0.19953338938934106 +30 +1.2854810201011309 +11 +-0.1346960530892126 +21 +0.1330222602858796 +31 +1.3405806435479293 +12 +-0.09573473570915275 +22 +0.162918330598813 +32 +1.3405806435479293 +13 +-0.09573473570915275 +23 +0.162918330598813 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18338557886171938 +20 +0.18171178605838728 +30 +1.221316149587198 +11 +-0.1346960530892126 +21 +0.2304013118308924 +31 +1.1524587618942086 +12 +-0.18979567653601576 +22 +0.18812188373268263 +32 +1.1524587618942086 +13 +-0.18979567653601576 +23 +0.18812188373268263 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1346960530892126 +20 +0.2304013118308924 +30 +1.1524587618942086 +11 +-0.18338557886171938 +21 +0.18171178605838728 +31 +1.221316149587198 +12 +-0.13016342955565008 +22 +0.22255057757917995 +32 +1.221316149587198 +13 +-0.13016342955565008 +23 +0.22255057757917995 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09573473570915433 +20 +0.09406094290582112 +30 +1.3828600716461388 +11 +-0.09573473570915275 +21 +0.162918330598813 +31 +1.3405806435479293 +12 +-0.1346960530892126 +22 +0.1330222602858796 +32 +1.3405806435479293 +13 +-0.1346960530892126 +23 +0.1330222602858796 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09573473570915275 +20 +0.162918330598813 +30 +1.3405806435479293 +11 +-0.09573473570915433 +21 +0.09406094290582112 +31 +1.3828600716461388 +12 +-0.06818492398575215 +22 +0.11520065695492637 +32 +1.3828600716461388 +13 +-0.06818492398575215 +23 +0.11520065695492637 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.20120718219267303 +20 +0.11520065695492587 +30 +1.0194365036872854 +11 +-0.1861142110017942 +21 +0.049420662629840184 +31 +0.9680183457747035 +12 +-0.22422437038251108 +22 +0.05963224905932479 +32 +1.0194365036872854 +13 +-0.22422437038251108 +23 +0.05963224905932479 +33 +1.0194365036872854 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1861142110017942 +20 +0.049420662629840184 +30 +0.9680183457747035 +11 +-0.20120718219267303 +21 +0.11520065695492587 +31 +1.0194365036872854 +12 +-0.17465408466303567 +22 +0.099870218948371 +32 +0.9794784721134615 +13 +-0.17465408466303567 +23 +0.099870218948371 +33 +0.9794784721134615 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06130604186265742 +20 +0.034428695925455444 +30 +1.4094380312409234 +11 +-0.09573473570915433 +21 +0.09406094290582112 +31 +1.3828600716461388 +12 +-0.11687444975825895 +22 +0.06651113118242014 +32 +1.3828600716461388 +13 +-0.11687444975825895 +23 +0.06651113118242014 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09573473570915433 +20 +0.09406094290582112 +30 +1.3828600716461388 +11 +-0.06130604186265742 +21 +0.034428695925455444 +31 +1.4094380312409234 +12 +-0.05036332065479815 +22 +0.048689527851465464 +32 +1.4094380312409234 +13 +-0.05036332065479815 +23 +0.048689527851465464 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.11687444975825895 +20 +0.06651113118242014 +30 +1.3828600716461388 +11 +-0.1346960530892126 +21 +0.1330222602858796 +31 +1.3405806435479293 +12 +-0.1645921234021454 +22 +0.09406094290582062 +32 +1.3405806435479293 +13 +-0.1645921234021454 +23 +0.09406094290582062 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1346960530892126 +20 +0.1330222602858796 +30 +1.3405806435479293 +11 +-0.11687444975825895 +21 +0.06651113118242014 +31 +1.3828600716461388 +12 +-0.09573473570915433 +22 +0.09406094290582112 +32 +1.3828600716461388 +13 +-0.09573473570915433 +23 +0.09406094290582112 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2498967079651798 +20 +0.06651113118242008 +30 +1.083601374201211 +11 +-0.20120718219267303 +21 +0.11520065695492587 +31 +1.0194365036872854 +12 +-0.22422437038251108 +22 +0.05963224905932479 +32 +1.0194365036872854 +13 +-0.22422437038251108 +23 +0.05963224905932479 +33 +1.0194365036872854 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.20120718219267303 +20 +0.11520065695492587 +30 +1.0194365036872854 +11 +-0.2498967079651798 +21 +0.06651113118242008 +31 +1.083601374201211 +12 +-0.22422437038251186 +22 +0.12848963675231756 +32 +1.083601374201211 +13 +-0.22422437038251186 +23 +0.12848963675231756 +33 +1.083601374201211 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1346960530892126 +20 +2.078959449036688e-09 +30 +1.3828600716461388 +11 +-0.18338557886171858 +21 +0.048689527851465464 +31 +1.3405806435479293 +12 +-0.18979567653601495 +22 +2.078959449036688e-09 +32 +1.3405806435479293 +13 +-0.18979567653601495 +23 +2.078959449036688e-09 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18338557886171858 +20 +0.048689527851465464 +30 +1.3405806435479293 +11 +-0.1346960530892126 +21 +2.078959449036688e-09 +31 +1.3828600716461388 +12 +-0.13016342955565008 +22 +0.03442869592545578 +32 +1.3828600716461388 +13 +-0.13016342955565008 +23 +0.03442869592545578 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18338557886171938 +20 +0.18171178605838728 +30 +1.221316149587198 +11 +-0.23207510463422537 +21 +0.13302226028588032 +31 +1.1524587618942086 +12 +-0.22422437038251308 +22 +0.12848963675231756 +32 +1.221316149587198 +13 +-0.22422437038251308 +23 +0.12848963675231756 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.23207510463422537 +20 +0.13302226028588032 +30 +1.1524587618942086 +11 +-0.18338557886171938 +21 +0.18171178605838728 +31 +1.221316149587198 +12 +-0.18979567653601576 +22 +0.18812188373268263 +32 +1.1524587618942086 +13 +-0.18979567653601576 +23 +0.18812188373268263 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.036102488728788684 +20 +0.12848963675231756 +30 +1.3828600716461388 +11 +-0.0016737948822921345 +21 +0.18812188373268185 +31 +1.3405806435479293 +12 +-0.05036332065479854 +22 +0.1817117860583855 +32 +1.3405806435479293 +13 +-0.05036332065479854 +23 +0.1817117860583855 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +0.18812188373268185 +30 +1.3405806435479293 +11 +-0.036102488728788684 +21 +0.12848963675231756 +31 +1.3828600716461388 +12 +-0.001673794882292523 +22 +0.1330222602858806 +32 +1.3828600716461388 +13 +-0.001673794882292523 +23 +0.1330222602858806 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06130604186265742 +20 +0.22255057757917918 +30 +1.2854810201011309 +11 +-0.001673794882292523 +21 +0.25697927142567634 +31 +1.221316149587198 +12 +-0.06818492398575296 +22 +0.24822291516184813 +32 +1.221316149587198 +13 +-0.06818492398575296 +23 +0.24822291516184813 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001673794882292523 +20 +0.25697927142567634 +30 +1.221316149587198 +11 +-0.06130604186265742 +21 +0.22255057757917918 +31 +1.2854810201011309 +12 +-0.0016737948822921345 +22 +0.23040131183089285 +32 +1.2854810201011309 +13 +-0.0016737948822921345 +23 +0.23040131183089285 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06818492398575296 +20 +0.24822291516184813 +30 +1.221316149587198 +11 +-0.001673794882292523 +21 +0.2660445184928011 +31 +1.1524587618942086 +12 +-0.0705311825752852 +22 +0.2569792714256749 +32 +1.1524587618942086 +13 +-0.0705311825752852 +23 +0.2569792714256749 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001673794882292523 +20 +0.2660445184928011 +30 +1.1524587618942086 +11 +-0.06818492398575296 +21 +0.24822291516184813 +31 +1.221316149587198 +12 +-0.001673794882292523 +22 +0.25697927142567634 +32 +1.221316149587198 +13 +-0.001673794882292523 +23 +0.25697927142567634 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.036102488728788296 +20 +0.05963224905932479 +30 +1.4094380312409234 +11 +-0.036102488728788684 +21 +0.12848963675231756 +31 +1.3828600716461388 +12 +-0.06818492398575215 +22 +0.11520065695492637 +32 +1.3828600716461388 +13 +-0.06818492398575215 +23 +0.11520065695492637 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.036102488728788684 +20 +0.12848963675231756 +30 +1.3828600716461388 +11 +-0.036102488728788296 +21 +0.05963224905932479 +31 +1.4094380312409234 +12 +-0.019495398213246973 +22 +0.06651113118241969 +32 +1.4094380312409234 +13 +-0.019495398213246973 +23 +0.06651113118241969 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06818492398575215 +20 +0.11520065695492637 +30 +1.3828600716461388 +11 +-0.05036332065479854 +21 +0.1817117860583855 +31 +1.3405806435479293 +12 +-0.09573473570915275 +22 +0.162918330598813 +32 +1.3405806435479293 +13 +-0.09573473570915275 +23 +0.162918330598813 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.05036332065479854 +20 +0.1817117860583855 +30 +1.3405806435479293 +11 +-0.06818492398575215 +21 +0.11520065695492637 +31 +1.3828600716461388 +12 +-0.036102488728788684 +22 +0.12848963675231756 +32 +1.3828600716461388 +13 +-0.036102488728788684 +23 +0.12848963675231756 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09573473570915275 +20 +0.162918330598813 +30 +1.3405806435479293 +11 +-0.06130604186265742 +21 +0.22255057757917918 +31 +1.2854810201011309 +12 +-0.11687444975825895 +22 +0.19953338938934106 +32 +1.2854810201011309 +13 +-0.11687444975825895 +23 +0.19953338938934106 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06130604186265742 +20 +0.22255057757917918 +30 +1.2854810201011309 +11 +-0.09573473570915275 +21 +0.162918330598813 +31 +1.3405806435479293 +12 +-0.05036332065479854 +22 +0.1817117860583855 +32 +1.3405806435479293 +13 +-0.05036332065479854 +23 +0.1817117860583855 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +2.078959449036688e-09 +30 +1.4185032783080505 +11 +-0.001673794882292523 +21 +0.06885738977195172 +31 +1.4094380312409234 +12 +-0.019495398213246973 +22 +0.06651113118241969 +32 +1.4094380312409234 +13 +-0.019495398213246973 +23 +0.06651113118241969 +33 +1.4094380312409234 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +2.078959449036688e-09 +30 +1.4185032783080505 +11 +-0.019495398213246973 +21 +0.06651113118241969 +31 +1.4094380312409234 +12 +-0.036102488728788296 +22 +0.05963224905932479 +32 +1.4094380312409234 +13 +-0.036102488728788296 +23 +0.05963224905932479 +33 +1.4094380312409234 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.07053118257528798 +20 +0.24725106303322575 +30 +1.083601374201211 +11 +-0.11993215348338515 +21 +0.20482948759574693 +31 +1.0342004032931107 +12 +-0.13016342955565008 +22 +0.2225505775791794 +32 +1.083601374201211 +13 +-0.13016342955565008 +23 +0.2225505775791794 +33 +1.083601374201211 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016737948822921345 +20 +2.078959449036688e-09 +30 +1.4185032783080505 +11 +-0.06818492398575215 +21 +0.017821605409913677 +31 +1.4094380312409234 +12 +-0.07053118257528401 +22 +2.0789595045478393e-09 +32 +1.4094380312409234 +13 +-0.07053118257528401 +23 +2.0789595045478393e-09 +33 +1.4094380312409234 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06932216463771257 +20 +0.2524671550553943 +30 +1.1169768174799652 +11 +-0.001673794882292523 +21 +0.2660445184928011 +31 +1.1524587618942086 +12 +-0.0377296621751953 +22 +0.2565508285292213 +32 +1.1164028946013032 +13 +-0.0377296621751953 +23 +0.2565508285292213 +33 +1.1164028946013032 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001673794882292523 +20 +0.2660445184928011 +30 +1.1524587618942086 +11 +-0.06932216463771257 +21 +0.2524671550553943 +31 +1.1169768174799652 +12 +-0.0705311825752852 +22 +0.2569792714256749 +32 +1.1524587618942086 +13 +-0.0705311825752852 +23 +0.2569792714256749 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.11687444975825895 +20 +0.19953338938934106 +30 +1.2854810201011309 +11 +-0.06818492398575296 +21 +0.24822291516184813 +31 +1.221316149587198 +12 +-0.13016342955565008 +22 +0.22255057757917995 +32 +1.221316149587198 +13 +-0.13016342955565008 +23 +0.22255057757917995 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06818492398575296 +20 +0.24822291516184813 +30 +1.221316149587198 +11 +-0.11687444975825895 +21 +0.19953338938934106 +31 +1.2854810201011309 +12 +-0.06130604186265742 +22 +0.22255057757917918 +32 +1.2854810201011309 +13 +-0.06130604186265742 +23 +0.22255057757917918 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.13016342955565008 +20 +0.22255057757917995 +30 +1.221316149587198 +11 +-0.0705311825752852 +21 +0.2569792714256749 +31 +1.1524587618942086 +12 +-0.1346960530892126 +22 +0.2304013118308924 +32 +1.1524587618942086 +13 +-0.1346960530892126 +23 +0.2304013118308924 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0705311825752852 +20 +0.2569792714256749 +30 +1.1524587618942086 +11 +-0.13016342955565008 +21 +0.22255057757917995 +31 +1.221316149587198 +12 +-0.06818492398575296 +22 +0.24822291516184813 +32 +1.221316149587198 +13 +-0.06818492398575296 +23 +0.24822291516184813 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.1268158397910666 +20 +0.22255057757917973 +30 +1.221316149587198 +11 +0.18644808677143104 +21 +0.18812188373268263 +31 +1.1524587618942086 +12 +0.13134846332462868 +22 +0.23040131183089219 +32 +1.1524587618942086 +13 +0.13134846332462868 +23 +0.23040131183089219 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18644808677143104 +20 +0.18812188373268263 +30 +1.1524587618942086 +11 +0.1268158397910666 +21 +0.22255057757917973 +31 +1.221316149587198 +12 +0.18003798909713586 +22 +0.18171178605838728 +32 +1.221316149587198 +13 +0.18003798909713586 +23 +0.18171178605838728 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2553054744644233 +20 +0.06885738977195177 +30 +1.1524587618942086 +11 +0.2643707215315495 +21 +2.078959393525537e-09 +31 +1.1524587618942086 +12 +0.2540807139947864 +22 +0.06852921619319102 +32 +1.1428276089410956 +13 +0.2540807139947864 +23 +0.06852921619319102 +33 +1.1428276089410956 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06718359281069974 +20 +2.078959393525537e-09 +30 +1.4094380312409234 +11 +0.06483733422116789 +21 +0.01782160540991351 +31 +1.4094380312409234 +12 +-0.0016737948822921345 +22 +2.078959449036688e-09 +32 +1.4185032783080505 +13 +-0.0016737948822921345 +23 +2.078959449036688e-09 +33 +1.4185032783080505 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18401862091672266 +20 +0.18569241787797314 +30 +1.1263613947799103 +11 +0.2287275148696407 +21 +0.1330222602858802 +31 +1.1524587618942086 +12 +0.22661554716969412 +22 +0.13180291516579662 +32 +1.133935070472775 +13 +0.22661554716969412 +23 +0.13180291516579662 +33 +1.133935070472775 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2287275148696407 +20 +0.1330222602858802 +30 +1.1524587618942086 +11 +0.18401862091672266 +21 +0.18569241787797314 +31 +1.1263613947799103 +12 +0.18644808677143104 +22 +0.18812188373268263 +32 +1.1524587618942086 +13 +0.18644808677143104 +23 +0.18812188373268263 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06718359281070013 +20 +0.25697927142567467 +30 +1.1524587618942086 +11 +0.06685541923193933 +21 +0.2557545109560382 +31 +1.1428276089410931 +12 +-0.001673794882292523 +22 +0.2660445184928011 +32 +1.1524587618942086 +13 +-0.001673794882292523 +23 +0.2660445184928011 +33 +1.1524587618942086 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.019495398213246973 +20 +0.06651113118241969 +30 +1.4094380312409234 +11 +-0.001673794882292523 +21 +0.1330222602858806 +31 +1.3828600716461388 +12 +-0.036102488728788684 +22 +0.12848963675231756 +32 +1.3828600716461388 +13 +-0.036102488728788684 +23 +0.12848963675231756 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001673794882292523 +20 +0.1330222602858806 +30 +1.3828600716461388 +11 +-0.019495398213246973 +21 +0.06651113118241969 +31 +1.4094380312409234 +12 +-0.001673794882292523 +22 +0.06885738977195172 +32 +1.4094380312409234 +13 +-0.001673794882292523 +23 +0.06885738977195172 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.13012911820454431 +20 +0.22828934413094437 +30 +1.133935070472775 +11 +0.18644808677143104 +21 +0.18812188373268263 +31 +1.1524587618942086 +12 +0.18401862091672266 +22 +0.18569241787797314 +32 +1.1263613947799103 +13 +0.18401862091672266 +23 +0.18569241787797314 +33 +1.1263613947799103 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18644808677143104 +20 +0.18812188373268263 +30 +1.1524587618942086 +11 +0.13012911820454431 +21 +0.22828934413094437 +31 +1.133935070472775 +12 +0.13134846332462868 +22 +0.23040131183089219 +32 +1.1524587618942086 +13 +0.13134846332462868 +23 +0.23040131183089219 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2287275148696407 +20 +0.1330222602858802 +30 +1.1524587618942086 +11 +0.18003798909713586 +21 +0.18171178605838728 +31 +1.221316149587198 +12 +0.22087678061792837 +22 +0.12848963675231756 +32 +1.221316149587198 +13 +0.22087678061792837 +23 +0.12848963675231756 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18003798909713586 +20 +0.18171178605838728 +30 +1.221316149587198 +11 +0.2287275148696407 +21 +0.1330222602858802 +31 +1.1524587618942086 +12 +0.18644808677143104 +22 +0.18812188373268263 +32 +1.1524587618942086 +13 +0.18644808677143104 +23 +0.18812188373268263 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.09238714594456965 +20 +0.09406094290582162 +30 +1.3828600716461388 +11 +0.09238714594456926 +21 +0.16291833059881272 +31 +1.3405806435479293 +12 +0.06483733422116827 +22 +0.11520065695492626 +32 +1.3828600716461388 +13 +0.06483733422116827 +23 +0.11520065695492626 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.09238714594456926 +20 +0.16291833059881272 +30 +1.3405806435479293 +11 +0.09238714594456965 +21 +0.09406094290582162 +31 +1.3828600716461388 +12 +0.13134846332462868 +22 +0.13302226028588 +32 +1.3405806435479293 +13 +0.13134846332462868 +23 +0.13302226028588 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.22087678061792837 +20 +0.12848963675231756 +30 +1.221316149587198 +11 +0.16124453363756192 +21 +0.162918330598814 +31 +1.2854810201011309 +12 +0.19785959242808948 +22 +0.11520065695492626 +32 +1.2854810201011309 +13 +0.19785959242808948 +23 +0.11520065695492626 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.16124453363756192 +20 +0.162918330598814 +30 +1.2854810201011309 +11 +0.22087678061792837 +21 +0.12848963675231756 +31 +1.221316149587198 +12 +0.18003798909713586 +22 +0.18171178605838728 +32 +1.221316149587198 +13 +0.18003798909713586 +23 +0.18171178605838728 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2553054744644233 +20 +0.06885738977195177 +30 +1.1524587618942086 +11 +0.22087678061792837 +21 +0.12848963675231756 +31 +1.221316149587198 +12 +0.24654911820059633 +22 +0.06651113118241986 +32 +1.221316149587198 +13 +0.24654911820059633 +23 +0.06651113118241986 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.22087678061792837 +20 +0.12848963675231756 +30 +1.221316149587198 +11 +0.2553054744644233 +21 +0.06885738977195177 +31 +1.1524587618942086 +12 +0.2287275148696407 +22 +0.1330222602858802 +32 +1.1524587618942086 +13 +0.2287275148696407 +23 +0.1330222602858802 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.22661554716969412 +20 +0.13180291516579662 +30 +1.133935070472775 +11 +0.2553054744644233 +21 +0.06885738977195177 +31 +1.1524587618942086 +12 +0.2540807139947864 +22 +0.06852921619319102 +32 +1.1428276089410956 +13 +0.2540807139947864 +23 +0.06852921619319102 +33 +1.1428276089410956 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2553054744644233 +20 +0.06885738977195177 +30 +1.1524587618942086 +11 +0.22661554716969412 +21 +0.13180291516579662 +31 +1.133935070472775 +12 +0.2287275148696407 +22 +0.1330222602858802 +32 +1.1524587618942086 +13 +0.2287275148696407 +23 +0.1330222602858802 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18003798909713392 +20 +0.0486895278514653 +30 +1.3405806435479293 +11 +0.19785959242808948 +21 +0.11520065695492626 +31 +1.2854810201011309 +12 +0.16124453363756153 +22 +0.09406094290582073 +32 +1.3405806435479293 +13 +0.16124453363756153 +23 +0.09406094290582073 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.19785959242808948 +20 +0.11520065695492626 +30 +1.2854810201011309 +11 +0.18003798909713392 +21 +0.0486895278514653 +31 +1.3405806435479293 +12 +0.2208767806179276 +22 +0.059632249059325015 +32 +1.2854810201011309 +13 +0.2208767806179276 +23 +0.059632249059325015 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.13134846332462868 +20 +0.13302226028588 +30 +1.3405806435479293 +11 +0.11352685999367468 +21 +0.19953338938934095 +31 +1.2854810201011309 +12 +0.09238714594456926 +22 +0.16291833059881272 +32 +1.3405806435479293 +13 +0.09238714594456926 +23 +0.16291833059881272 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.11352685999367468 +20 +0.19953338938934095 +30 +1.2854810201011309 +11 +0.13134846332462868 +21 +0.13302226028588 +31 +1.3405806435479293 +12 +0.16124453363756192 +22 +0.162918330598814 +32 +1.2854810201011309 +13 +0.16124453363756192 +23 +0.162918330598814 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.1268158397910666 +20 +0.03442869592545589 +30 +1.3828600716461388 +11 +0.16124453363756153 +21 +0.09406094290582073 +31 +1.3405806435479293 +12 +0.11352685999367468 +22 +0.06651113118242036 +32 +1.3828600716461388 +13 +0.11352685999367468 +23 +0.06651113118242036 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.16124453363756153 +20 +0.09406094290582073 +30 +1.3405806435479293 +11 +0.1268158397910666 +21 +0.03442869592545589 +31 +1.3828600716461388 +12 +0.18003798909713392 +22 +0.0486895278514653 +32 +1.3405806435479293 +13 +0.18003798909713392 +23 +0.0486895278514653 +33 +1.3405806435479293 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06483733422116789 +20 +0.01782160540991351 +30 +1.4094380312409234 +11 +0.11352685999367468 +21 +0.06651113118242036 +31 +1.3828600716461388 +12 +0.05795845209807354 +22 +0.034428695925455666 +32 +1.4094380312409234 +13 +0.05795845209807354 +23 +0.034428695925455666 +33 +1.4094380312409234 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.11352685999367468 +20 +0.06651113118242036 +30 +1.3828600716461388 +11 +0.06483733422116789 +21 +0.01782160540991351 +31 +1.4094380312409234 +12 +0.1268158397910666 +22 +0.03442869592545589 +32 +1.3828600716461388 +13 +0.1268158397910666 +23 +0.03442869592545589 +33 +1.3828600716461388 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.24654911820059633 +20 +0.06651113118241986 +30 +1.221316149587198 +11 +0.22872751486964182 +21 +2.078959393525537e-09 +31 +1.2854810201011309 +12 +0.2553054744644241 +22 +2.078959393525537e-09 +32 +1.221316149587198 +13 +0.2553054744644241 +23 +2.078959393525537e-09 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.22872751486964182 +20 +2.078959393525537e-09 +30 +1.2854810201011309 +11 +0.24654911820059633 +21 +0.06651113118241986 +31 +1.221316149587198 +12 +0.2208767806179276 +22 +0.059632249059325015 +32 +1.2854810201011309 +13 +0.2208767806179276 +23 +0.059632249059325015 +33 +1.2854810201011309 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.30905309760007 +20 +0.08235659503094556 +30 +-0.029987258687029512 +11 +-0.001695615174016285 +21 +2.078961613971586e-09 +31 +-0.029987258687029512 +12 +-0.3198956001177664 +22 +3.9221799974509253e-07 +32 +-0.029987258687029512 +13 +-0.3198956001177664 +23 +3.9221799974509253e-07 +33 +-0.029987258687029512 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001695615174016285 +20 +2.078961613971586e-09 +30 +-0.029987258687029512 +11 +-0.30905309760007 +21 +0.08235659503094556 +31 +-0.029987258687029512 +12 +-0.27726469062630743 +22 +0.15910033213491825 +32 +-0.029987258687029512 +13 +-0.27726469062630743 +23 +0.15910033213491825 +33 +-0.029987258687029512 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001695615174016285 +20 +2.078961613971586e-09 +30 +-0.029987258687029512 +11 +-0.27726469062630743 +21 +0.15910033213491825 +31 +-0.029987258687029512 +12 +-0.226696706598913 +22 +0.2250016446713048 +32 +-0.029987258687029512 +13 +-0.226696706598913 +23 +0.2250016446713048 +33 +-0.029987258687029512 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001695615174016285 +20 +2.078961613971586e-09 +30 +-0.029987258687029512 +11 +-0.226696706598913 +21 +0.2250016446713048 +31 +-0.029987258687029512 +12 +-0.16079527006181052 +22 +0.2755694670978184 +32 +-0.029987258687029512 +13 +-0.16079527006181052 +23 +0.2755694670978184 +33 +-0.029987258687029512 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001695615174016285 +20 +2.078961613971586e-09 +30 +-0.029987258687029512 +11 +-0.16079527006181052 +21 +0.2755694670978184 +31 +-0.029987258687029512 +12 +-0.08405145500772823 +22 +0.30735768588336976 +32 +-0.029987258687029512 +13 +-0.08405145500772823 +23 +0.30735768588336976 +33 +-0.029987258687029512 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001695615174016285 +20 +2.078961613971586e-09 +30 +-0.029987258687029512 +11 +-0.08405145500772823 +21 +0.30735768588336976 +31 +-0.029987258687029512 +12 +-0.001695225607451445 +22 +0.31819998645023906 +32 +-0.029987258687029512 +13 +-0.001695225607451445 +23 +0.31819998645023906 +33 +-0.029987258687029512 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001695615174016285 +20 +2.078961613971586e-09 +30 +-0.029987258687029512 +11 +-0.001695225607451445 +21 +0.31819998645023906 +31 +-0.029987258687029512 +12 +-0.0015797266903812557 +22 +1.936872939811707e-09 +32 +-0.029987258687029512 +13 +-0.0015797266903812557 +23 +1.936872939811707e-09 +33 +-0.029987258687029512 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0015797266903812557 +20 +1.936872939811707e-09 +30 +-0.029987258687029512 +11 +-0.001695225607451445 +21 +0.31819998645023906 +31 +-0.029987258687029512 +12 +0.08066097720549281 +22 +0.30735748393254325 +32 +-0.029987258687029512 +13 +0.08066097720549281 +23 +0.30735748393254325 +33 +-0.029987258687029512 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0015797266903812557 +20 +1.936872939811707e-09 +30 +-0.029987258687029512 +11 +0.08066097720549281 +21 +0.30735748393254325 +31 +-0.029987258687029512 +12 +1.2212453270876722e-15 +22 +-3.885780586188048e-16 +32 +-0.029987258687029512 +13 +1.2212453270876722e-15 +23 +-3.885780586188048e-16 +33 +-0.029987258687029512 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +1.2212453270876722e-15 +20 +-3.885780586188048e-16 +30 +-0.029987258687029512 +11 +0.08066097720549281 +21 +0.30735748393254325 +31 +-0.029987258687029512 +12 +0.3165043686247876 +22 +-3.880600751848817e-07 +32 +-0.029987258687029512 +13 +0.3165043686247876 +23 +-3.880600751848817e-07 +33 +-0.029987258687029512 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +0.3165043686247876 +20 +-3.880600751848817e-07 +30 +-0.029987258687029512 +11 +0.08066097720549281 +21 +0.30735748393254325 +31 +-0.029987258687029512 +12 +0.1574047143094663 +22 +0.27556907695878063 +32 +-0.029987258687029512 +13 +0.1574047143094663 +23 +0.27556907695878063 +33 +-0.029987258687029512 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +0.3165043686247876 +20 +-3.880600751848817e-07 +30 +-0.029987258687029512 +11 +0.1574047143094663 +21 +0.27556907695878063 +31 +-0.029987258687029512 +12 +0.22330602684585132 +22 +0.2250010929313866 +32 +-0.029987258687029512 +13 +0.22330602684585132 +23 +0.2250010929313866 +33 +-0.029987258687029512 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +0.3165043686247876 +20 +-3.880600751848817e-07 +30 +-0.029987258687029512 +11 +0.22330602684585132 +21 +0.2250010929313866 +31 +-0.029987258687029512 +12 +0.2738738492723656 +22 +0.1590996563942833 +32 +-0.029987258687029512 +13 +0.2738738492723656 +23 +0.1590996563942833 +33 +-0.029987258687029512 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +0.3165043686247876 +20 +-3.880600751848817e-07 +30 +-0.029987258687029512 +11 +0.2738738492723656 +21 +0.1590996563942833 +31 +-0.029987258687029512 +12 +0.3056620680579174 +22 +0.08235584134020102 +32 +-0.029987258687029512 +13 +0.3056620680579174 +23 +0.08235584134020102 +33 +-0.029987258687029512 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.249896707965181 +20 +0.06651113118242025 +30 +1.221316149587198 +11 +-0.26771831129613466 +21 +2.078959449036688e-09 +31 +1.1524587618942086 +12 +-0.2586530642290092 +22 +2.078959449036688e-09 +32 +1.221316149587198 +13 +-0.2586530642290092 +23 +2.078959449036688e-09 +33 +1.221316149587198 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.26771831129613466 +20 +2.078959449036688e-09 +30 +1.1524587618942086 +11 +-0.249896707965181 +21 +0.06651113118242025 +31 +1.221316149587198 +12 +-0.2586530642290084 +22 +0.06885738977195188 +32 +1.1524587618942086 +13 +-0.2586530642290084 +23 +0.06885738977195188 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2586530642290084 +20 +0.06885738977195188 +30 +1.1524587618942086 +11 +-0.25742830375937065 +21 +0.06852921619319091 +31 +1.1428276089410967 +12 +-0.26771831129613466 +22 +2.078959449036688e-09 +32 +1.1524587618942086 +13 +-0.26771831129613466 +23 +2.078959449036688e-09 +33 +1.1524587618942086 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06685541923193933 +20 +0.2557545109560382 +30 +1.1428276089410931 +11 +0.12925057314949195 +21 +0.22676765945885802 +31 +1.1205886460425298 +12 +0.06597457487312747 +22 +0.25246715505539363 +32 +1.1169768174799652 +13 +0.06597457487312747 +23 +0.25246715505539363 +33 +1.1169768174799652 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.12925057314949195 +20 +0.22676765945885802 +30 +1.1205886460425298 +11 +0.06685541923193933 +21 +0.2557545109560382 +31 +1.1428276089410931 +12 +0.13012911820454431 +22 +0.22828934413094437 +32 +1.133935070472775 +13 +0.13012911820454431 +23 +0.22828934413094437 +33 +1.133935070472775 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.13012911820454431 +20 +0.22828934413094437 +30 +1.133935070472775 +11 +0.18401862091672266 +21 +0.18569241787797314 +31 +1.1263613947799103 +12 +0.12925057314949195 +22 +0.22676765945885802 +32 +1.1205886460425298 +13 +0.12925057314949195 +23 +0.22676765945885802 +33 +1.1205886460425298 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001673794882292523 +20 +0.2660445184928011 +30 +1.1524587618942086 +11 +-0.001673794882292523 +21 +0.2612114402998337 +31 +1.1157478883328396 +12 +-0.0377296621751953 +22 +0.2565508285292213 +32 +1.1164028946013032 +13 +-0.0377296621751953 +23 +0.2565508285292213 +33 +1.1164028946013032 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.001673794882292523 +20 +0.2660445184928011 +30 +1.1524587618942086 +11 +0.06597457487312747 +21 +0.25246715505539363 +31 +1.1169768174799652 +12 +-0.001673794882292523 +22 +0.2612114402998337 +32 +1.1157478883328396 +13 +-0.001673794882292523 +23 +0.2612114402998337 +33 +1.1157478883328396 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.06597457487312747 +20 +0.25246715505539363 +30 +1.1169768174799652 +11 +-0.001673794882292523 +21 +0.2660445184928011 +31 +1.1524587618942086 +12 +0.06685541923193933 +22 +0.2557545109560382 +32 +1.1428276089410931 +13 +0.06685541923193933 +23 +0.2557545109560382 +33 +1.1428276089410931 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18401862091672266 +20 +0.18569241787797314 +30 +1.1263613947799103 +11 +0.22661554716969412 +21 +0.13180291516579662 +31 +1.133935070472775 +12 +0.22509386249760543 +22 +0.13092437011074415 +32 +1.1205886460425298 +13 +0.22509386249760543 +23 +0.13092437011074415 +33 +1.1205886460425298 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.13227951399272905 +20 +0.2262157433373062 +30 +1.1157478883328396 +11 +-0.07053118257528798 +21 +0.24725106303322575 +31 +1.083601374201211 +12 +-0.13016342955565008 +22 +0.2225505775791794 +32 +1.083601374201211 +13 +-0.13016342955565008 +23 +0.2225505775791794 +33 +1.083601374201211 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.07053118257528798 +20 +0.24725106303322575 +30 +1.083601374201211 +11 +-0.13227951399272905 +21 +0.2262157433373062 +31 +1.1157478883328396 +12 +-0.06826223645016033 +22 +0.2485114492070778 +32 +1.085870320326334 +13 +-0.06826223645016033 +23 +0.2485114492070778 +33 +1.085870320326334 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06826223645016033 +20 +0.2485114492070778 +30 +1.085870320326334 +11 +-0.13227951399272905 +21 +0.2262157433373062 +31 +1.1157478883328396 +12 +-0.06928028989247559 +22 +0.2523108763786134 +32 +1.1157478883328396 +13 +-0.06928028989247559 +23 +0.2523108763786134 +33 +1.1157478883328396 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06928028989247559 +20 +0.2523108763786134 +30 +1.1157478883328396 +11 +-0.13227951399272905 +21 +0.2262157433373062 +31 +1.1157478883328396 +12 +-0.13259816291407706 +22 +0.22676765945885902 +32 +1.1205886460425298 +13 +-0.13259816291407706 +23 +0.22676765945885902 +33 +1.1205886460425298 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06928028989247559 +20 +0.2523108763786134 +30 +1.1157478883328396 +11 +-0.13259816291407706 +21 +0.22676765945885902 +31 +1.1205886460425298 +12 +-0.06932216463771257 +22 +0.2524671550553943 +32 +1.1169768174799652 +13 +-0.06932216463771257 +23 +0.2524671550553943 +33 +1.1169768174799652 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18637817417176358 +20 +0.1847043813684307 +30 +1.1157478883328396 +11 +-0.13016342955565008 +21 +0.2225505775791794 +31 +1.083601374201211 +12 +-0.18338557886171938 +22 +0.18171178605838667 +32 +1.083601374201211 +13 +-0.18338557886171938 +23 +0.18171178605838667 +33 +1.083601374201211 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.13016342955565008 +20 +0.2225505775791794 +30 +1.083601374201211 +11 +-0.18637817417176358 +21 +0.1847043813684307 +31 +1.1157478883328396 +12 +-0.13227951399272905 +22 +0.2262157433373062 +32 +1.1157478883328396 +13 +-0.13227951399272905 +23 +0.2262157433373062 +33 +1.1157478883328396 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.13227951399272905 +20 +0.2262157433373062 +30 +1.1157478883328396 +11 +-0.18637817417176358 +21 +0.1847043813684307 +31 +1.1157478883328396 +12 +-0.18736621068130693 +22 +0.18569241787797425 +32 +1.1263613947799127 +13 +-0.18736621068130693 +23 +0.18569241787797425 +33 +1.1263613947799127 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.13227951399272905 +20 +0.2262157433373062 +30 +1.1157478883328396 +11 +-0.18736621068130693 +21 +0.18569241787797425 +31 +1.1263613947799127 +12 +-0.13259816291407706 +22 +0.22676765945885902 +32 +1.1205886460425298 +13 +-0.13259816291407706 +23 +0.22676765945885902 +33 +1.1205886460425298 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2539846691819466 +20 +0.06760649708914246 +30 +1.1157478883328396 +11 +-0.22422437038251186 +21 +0.12848963675231756 +31 +1.083601374201211 +12 +-0.2498967079651798 +22 +0.06651113118242008 +32 +1.083601374201211 +13 +-0.2498967079651798 +23 +0.06651113118242008 +33 +1.083601374201211 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.22422437038251186 +20 +0.12848963675231756 +30 +1.083601374201211 +11 +-0.2539846691819466 +21 +0.06760649708914246 +31 +1.1157478883328396 +12 +-0.25742830375937065 +22 +0.06852921619319091 +32 +1.1428276089410967 +13 +-0.25742830375937065 +23 +0.06852921619319091 +33 +1.1428276089410967 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.22422437038251186 +20 +0.12848963675231756 +30 +1.083601374201211 +11 +-0.25742830375937065 +21 +0.06852921619319091 +31 +1.1428276089410967 +12 +-0.2299631369342784 +22 +0.13180291516579612 +32 +1.133935070472781 +13 +-0.2299631369342784 +23 +0.13180291516579612 +33 +1.133935070472781 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.22422437038251186 +20 +0.12848963675231756 +30 +1.083601374201211 +11 +-0.2299631369342784 +21 +0.13180291516579612 +31 +1.133935070472781 +12 +-0.2278895361406395 +22 +0.13060572118939684 +32 +1.1157478883328396 +13 +-0.2278895361406395 +23 +0.13060572118939684 +33 +1.1157478883328396 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.25742830375937065 +20 +0.06852921619319091 +30 +1.1428276089410967 +11 +-0.26288523310316675 +21 +2.078959449036688e-09 +31 +1.1157478883328396 +12 +-0.26771831129613466 +22 +2.078959449036688e-09 +32 +1.1524587618942086 +13 +-0.26771831129613466 +23 +2.078959449036688e-09 +33 +1.1524587618942086 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.26288523310316675 +20 +2.078959449036688e-09 +30 +1.1157478883328396 +11 +-0.25742830375937065 +21 +0.06852921619319091 +31 +1.1428276089410967 +12 +-0.258653064229008 +22 +2.0789595045478393e-09 +32 +1.083601374201211 +13 +-0.258653064229008 +23 +2.0789595045478393e-09 +33 +1.083601374201211 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.258653064229008 +20 +2.0789595045478393e-09 +30 +1.083601374201211 +11 +-0.25742830375937065 +21 +0.06852921619319091 +31 +1.1428276089410967 +12 +-0.2498967079651798 +22 +0.06651113118242008 +32 +1.083601374201211 +13 +-0.2498967079651798 +23 +0.06651113118242008 +33 +1.083601374201211 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2498967079651798 +20 +0.06651113118242008 +30 +1.083601374201211 +11 +-0.25742830375937065 +21 +0.06852921619319091 +31 +1.1428276089410967 +12 +-0.2539846691819466 +22 +0.06760649708914246 +32 +1.1157478883328396 +13 +-0.2539846691819466 +23 +0.06760649708914246 +33 +1.1157478883328396 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.22509386249760543 +20 +0.13092437011074415 +30 +1.1205886460425298 +11 +0.2626308843757006 +21 +0.26432585403041065 +31 +1.1153131616555407 +12 +0.18401862091672266 +22 +0.18569241787797314 +32 +1.1263613947799103 +13 +0.18401862091672266 +23 +0.18569241787797314 +33 +1.1263613947799103 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2626308843757006 +20 +0.26432585403041065 +30 +1.1153131616555407 +11 +0.22509386249760543 +21 +0.13092437011074415 +31 +1.1205886460425298 +12 +0.25079335809414127 +22 +0.06764837183437955 +32 +1.1169768174799628 +13 +0.25079335809414127 +23 +0.06764837183437955 +33 +1.1169768174799628 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2626308843757006 +20 +0.26432585403041065 +30 +1.1153131616555407 +11 +0.25079335809414127 +21 +0.06764837183437955 +31 +1.1169768174799628 +12 +0.2595376433385824 +22 +2.078959393525537e-09 +32 +1.1157478883328396 +13 +0.2595376433385824 +23 +2.078959393525537e-09 +33 +1.1157478883328396 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2626308843757006 +20 +0.26432585403041065 +30 +1.1153131616555407 +11 +0.2595376433385824 +21 +2.078959393525537e-09 +31 +1.1157478883328396 +12 +0.3718950373839425 +22 +2.0789609478377713e-09 +32 +1.0999570863887107 +13 +0.3718950373839425 +23 +2.0789609478377713e-09 +33 +1.0999570863887107 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2626308843757006 +20 +0.26432585403041065 +30 +1.1153131616555407 +11 +0.3718950373839425 +21 +2.0789609478377713e-09 +31 +1.0999570863887107 +12 +0.3219319512611786 +22 +0.1868459359501376 +32 +1.1069789402167114 +13 +0.3219319512611786 +23 +0.1868459359501376 +33 +1.1069789402167114 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +0.3219319512611786 +20 +0.1868459359501376 +30 +1.1069789402167114 +11 +0.3718950373839425 +21 +2.0789609478377713e-09 +31 +1.0999570863887107 +12 +0.3591904613034176 +22 +0.09669866074029804 +32 +1.1017425981156106 +13 +0.3591904613034176 +23 +0.09669866074029804 +33 +1.1017425981156106 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2278895361406395 +20 +0.13060572118939684 +30 +1.1157478883328396 +11 +-0.18338557886171938 +21 +0.18171178605838667 +31 +1.083601374201211 +12 +-0.22422437038251186 +22 +0.12848963675231756 +32 +1.083601374201211 +13 +-0.22422437038251186 +23 +0.12848963675231756 +33 +1.083601374201211 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18338557886171938 +20 +0.18171178605838667 +30 +1.083601374201211 +11 +-0.2278895361406395 +21 +0.13060572118939684 +31 +1.1157478883328396 +12 +-0.2299631369342784 +22 +0.13180291516579612 +32 +1.133935070472781 +13 +-0.2299631369342784 +23 +0.13180291516579612 +33 +1.133935070472781 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18338557886171938 +20 +0.18171178605838667 +30 +1.083601374201211 +11 +-0.2299631369342784 +21 +0.13180291516579612 +31 +1.133935070472781 +12 +-0.18736621068130693 +22 +0.18569241787797425 +32 +1.1263613947799127 +13 +-0.18736621068130693 +23 +0.18569241787797425 +33 +1.1263613947799127 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18338557886171938 +20 +0.18171178605838667 +30 +1.083601374201211 +11 +-0.18736621068130693 +21 +0.18569241787797425 +31 +1.1263613947799127 +12 +-0.18637817417176358 +22 +0.1847043813684307 +32 +1.1157478883328396 +13 +-0.18637817417176358 +23 +0.1847043813684307 +33 +1.1157478883328396 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.25079335809414127 +20 +0.06764837183437955 +30 +1.1169768174799628 +11 +0.2643707215315495 +21 +2.078959393525537e-09 +31 +1.1524587618942086 +12 +0.2595376433385824 +22 +2.078959393525537e-09 +32 +1.1157478883328396 +13 +0.2595376433385824 +23 +2.078959393525537e-09 +33 +1.1157478883328396 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2643707215315495 +20 +2.078959393525537e-09 +30 +1.1524587618942086 +11 +0.25079335809414127 +21 +0.06764837183437955 +31 +1.1169768174799628 +12 +0.2540807139947864 +22 +0.06852921619319102 +32 +1.1428276089410956 +13 +0.2540807139947864 +23 +0.06852921619319102 +33 +1.1428276089410956 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.18979567653601576 +20 +2.0789595045478393e-09 +30 +0.9643368802404846 +11 +-0.35829150997042125 +21 +0.09555005256687987 +31 +0.7958410468060751 +12 +-0.3706909491339097 +22 +4.544972251330215e-07 +32 +0.7834416076425874 +13 +-0.3706909491339097 +23 +4.544972251330215e-07 +33 +0.7834416076425874 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.35829150997042125 +20 +0.09555005256687987 +30 +0.7958410468060751 +11 +-0.18979567653601576 +21 +2.0789595045478393e-09 +31 +0.9643368802404846 +12 +-0.32186859092445047 +22 +0.18485247889635142 +32 +0.8322639658520461 +13 +-0.32186859092445047 +23 +0.18485247889635142 +33 +0.8322639658520461 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.32186859092445047 +20 +0.18485247889635142 +30 +0.8322639658520461 +11 +-0.18979567653601576 +21 +2.0789595045478393e-09 +31 +0.9643368802404846 +12 +-0.29191131237938345 +22 +0.22460181803280632 +32 +0.8622212443971131 +13 +-0.29191131237938345 +23 +0.22460181803280632 +33 +0.8622212443971131 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.29191131237938345 +20 +0.22460181803280632 +30 +0.8622212443971131 +11 +-0.18979567653601576 +21 +2.0789595045478393e-09 +31 +0.9643368802404846 +12 +-0.2637126619050216 +22 +0.26201769074666237 +32 +0.890419894871474 +13 +-0.2637126619050216 +23 +0.26201769074666237 +33 +0.890419894871474 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2637126619050216 +20 +0.26201769074666237 +30 +0.890419894871474 +11 +-0.18979567653601576 +21 +2.0789595045478393e-09 +31 +0.9643368802404846 +12 +-0.1875225673732847 +22 +0.3218626350699233 +32 +0.9666099894032089 +13 +-0.1875225673732847 +23 +0.3218626350699233 +33 +0.9666099894032089 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1875225673732847 +20 +0.3218626350699233 +30 +0.9666099894032089 +11 +-0.18979567653601576 +21 +2.0789595045478393e-09 +31 +0.9643368802404846 +12 +-0.1861142110017942 +22 +0.049420662629840184 +32 +0.9680183457747035 +13 +-0.1861142110017942 +23 +0.049420662629840184 +33 +0.9680183457747035 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1875225673732847 +20 +0.3218626350699233 +30 +0.9666099894032089 +11 +-0.1861142110017942 +21 +0.049420662629840184 +31 +0.9680183457747035 +12 +-0.17465408466303567 +22 +0.099870218948371 +32 +0.9794784721134615 +13 +-0.17465408466303567 +23 +0.099870218948371 +33 +0.9794784721134615 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1875225673732847 +20 +0.3218626350699233 +30 +0.9666099894032089 +11 +-0.17465408466303567 +21 +0.099870218948371 +31 +0.9794784721134615 +12 +-0.09822205169936674 +22 +0.36024333207843495 +32 +1.05591050507713 +13 +-0.09822205169936674 +23 +0.36024333207843495 +33 +1.05591050507713 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09822205169936674 +20 +0.36024333207843495 +30 +1.05591050507713 +11 +-0.17465408466303567 +21 +0.099870218948371 +31 +0.9794784721134615 +12 +-0.16443652005322085 +22 +0.12595478545169825 +32 +0.9896960367232768 +13 +-0.16443652005322085 +23 +0.12595478545169825 +33 +0.9896960367232768 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09822205169936674 +20 +0.36024333207843495 +30 +1.05591050507713 +11 +-0.16443652005322085 +21 +0.12595478545169825 +31 +0.9896960367232768 +12 +-0.1540765904307652 +22 +0.1524027976274323 +32 +1.0000559663457305 +13 +-0.1540765904307652 +23 +0.1524027976274323 +33 +1.0000559663457305 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09822205169936674 +20 +0.36024333207843495 +30 +1.05591050507713 +11 +-0.1540765904307652 +21 +0.1524027976274323 +31 +1.0000559663457305 +12 +-0.1346960530892106 +22 +0.1858583921844445 +32 +1.0194365036872854 +13 +-0.1346960530892106 +23 +0.1858583921844445 +33 +1.0194365036872854 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09822205169936674 +20 +0.36024333207843495 +30 +1.05591050507713 +11 +-0.1346960530892106 +21 +0.1858583921844445 +31 +1.0194365036872854 +12 +-0.11993215348338515 +22 +0.20482948759574693 +32 +1.0342004032931107 +13 +-0.11993215348338515 +23 +0.20482948759574693 +33 +1.0342004032931107 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09822205169936674 +20 +0.36024333207843495 +30 +1.05591050507713 +11 +-0.11993215348338515 +21 +0.20482948759574693 +31 +1.0342004032931107 +12 +-0.07053118257528798 +22 +0.24725106303322575 +32 +1.083601374201211 +13 +-0.07053118257528798 +23 +0.24725106303322575 +33 +1.083601374201211 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09822205169936674 +20 +0.36024333207843495 +30 +1.05591050507713 +11 +-0.07053118257528798 +21 +0.24725106303322575 +31 +1.083601374201211 +12 +-0.053235390890986944 +22 +0.3668191518579341 +32 +1.1009056923994525 +13 +-0.053235390890986944 +23 +0.3668191518579341 +33 +1.1009056923994525 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.053235390890986944 +20 +0.3668191518579341 +30 +1.1009056923994525 +11 +-0.07053118257528798 +21 +0.24725106303322575 +31 +1.083601374201211 +12 +-0.06826223645016033 +22 +0.2485114492070778 +32 +1.085870320326334 +13 +-0.06826223645016033 +23 +0.2485114492070778 +33 +1.085870320326334 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.053235390890986944 +20 +0.3668191518579341 +30 +1.1009056923994525 +11 +-0.06826223645016033 +21 +0.2485114492070778 +31 +1.085870320326334 +12 +-0.0377296621751953 +22 +0.2565508285292213 +32 +1.1164028946013032 +13 +-0.0377296621751953 +23 +0.2565508285292213 +33 +1.1164028946013032 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.22509386249760543 +20 +0.13092437011074415 +30 +1.1205886460425298 +11 +0.2540807139947864 +21 +0.06852921619319102 +31 +1.1428276089410956 +12 +0.25079335809414127 +22 +0.06764837183437955 +32 +1.1169768174799628 +13 +0.25079335809414127 +23 +0.06764837183437955 +33 +1.1169768174799628 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2540807139947864 +20 +0.06852921619319102 +30 +1.1428276089410956 +11 +0.22509386249760543 +21 +0.13092437011074415 +31 +1.1205886460425298 +12 +0.22661554716969412 +22 +0.13180291516579662 +32 +1.133935070472775 +13 +0.22661554716969412 +23 +0.13180291516579662 +33 +1.133935070472775 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.06928028989247559 +20 +0.2523108763786134 +30 +1.1157478883328396 +11 +-0.0377296621751953 +21 +0.2565508285292213 +31 +1.1164028946013032 +12 +-0.06826223645016033 +22 +0.2485114492070778 +32 +1.085870320326334 +13 +-0.06826223645016033 +23 +0.2485114492070778 +33 +1.085870320326334 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0377296621751953 +20 +0.2565508285292213 +30 +1.1164028946013032 +11 +-0.06928028989247559 +21 +0.2523108763786134 +31 +1.1157478883328396 +12 +-0.06932216463771257 +22 +0.2524671550553943 +32 +1.1169768174799652 +13 +-0.06932216463771257 +23 +0.2524671550553943 +33 +1.1169768174799652 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0377296621751953 +20 +0.2565508285292213 +30 +1.1164028946013032 +11 +-0.0016951576939718827 +21 +0.37359067095576093 +31 +1.0999540174532403 +12 +-0.053235390890986944 +22 +0.3668191518579341 +32 +1.1009056923994525 +13 +-0.053235390890986944 +23 +0.3668191518579341 +33 +1.1009056923994525 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016951576939718827 +20 +0.37359067095576093 +30 +1.0999540174532403 +11 +-0.0377296621751953 +21 +0.2565508285292213 +31 +1.1164028946013032 +12 +-0.001673794882292523 +22 +0.2612114402998337 +32 +1.1157478883328396 +13 +-0.001673794882292523 +23 +0.2612114402998337 +33 +1.1157478883328396 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016951576939718827 +20 +0.37359067095576093 +30 +1.0999540174532403 +11 +-0.001673794882292523 +21 +0.2612114402998337 +31 +1.1157478883328396 +12 +0.09500391648962592 +22 +0.3608857995504491 +32 +1.1017395706853292 +13 +0.09500391648962592 +23 +0.3608857995504491 +33 +1.1017395706853292 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +0.09500391648962592 +20 +0.3608857995504491 +30 +1.1017395706853292 +11 +-0.001673794882292523 +21 +0.2612114402998337 +31 +1.1157478883328396 +12 +0.06597457487312747 +22 +0.25246715505539363 +32 +1.1169768174799652 +13 +0.06597457487312747 +23 +0.25246715505539363 +33 +1.1169768174799652 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +0.09500391648962592 +20 +0.3608857995504491 +30 +1.1017395706853292 +11 +0.06597457487312747 +21 +0.25246715505539363 +31 +1.1169768174799652 +12 +0.12925057314949195 +22 +0.22676765945885802 +32 +1.1205886460425298 +13 +0.12925057314949195 +23 +0.22676765945885802 +33 +1.1205886460425298 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +0.09500391648962592 +20 +0.3608857995504491 +30 +1.1017395706853292 +11 +0.12925057314949195 +21 +0.22676765945885802 +31 +1.1205886460425298 +12 +0.18515108995501323 +22 +0.32362707322580364 +32 +1.1069759431829398 +13 +0.18515108995501323 +23 +0.32362707322580364 +33 +1.1069759431829398 +70 +3 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18515108995501323 +20 +0.32362707322580364 +30 +1.1069759431829398 +11 +0.12925057314949195 +21 +0.22676765945885802 +31 +1.1205886460425298 +12 +0.18401862091672266 +22 +0.18569241787797314 +32 +1.1263613947799103 +13 +0.18401862091672266 +23 +0.18569241787797314 +33 +1.1263613947799103 +70 +13 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18515108995501323 +20 +0.32362707322580364 +30 +1.1069759431829398 +11 +0.18401862091672266 +21 +0.18569241787797314 +31 +1.1263613947799103 +12 +0.2626308843757006 +22 +0.26432585403041065 +32 +1.1153131616555407 +13 +0.2626308843757006 +23 +0.26432585403041065 +33 +1.1153131616555407 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.30905309760007 +20 +0.08235659503094556 +30 +-0.029987258687029512 +11 +-0.3198956001177664 +21 +3.9221799974509253e-07 +31 +-0.029987258687029512 +12 +-0.3706909491339097 +22 +4.544972251330215e-07 +32 +0.7834416076425874 +13 +-0.3706909491339097 +23 +4.544972251330215e-07 +33 +0.7834416076425874 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.35829150997042125 +20 +0.09555005256687987 +30 +0.7958410468060751 +11 +-0.30905309760007 +21 +0.08235659503094556 +31 +-0.029987258687029512 +12 +-0.3706909491339097 +22 +4.544972251330215e-07 +32 +0.7834416076425874 +13 +-0.3706909491339097 +23 +4.544972251330215e-07 +33 +0.7834416076425874 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.2637126619050216 +20 +0.26201769074666237 +30 +0.890419894871474 +11 +-0.16079527006181052 +21 +0.2755694670978184 +31 +-0.029987258687029512 +12 +-0.226696706598913 +22 +0.2250016446713048 +32 +-0.029987258687029512 +13 +-0.226696706598913 +23 +0.2250016446713048 +33 +-0.029987258687029512 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1875225673732847 +20 +0.3218626350699233 +30 +0.9666099894032089 +11 +-0.16079527006181052 +21 +0.2755694670978184 +31 +-0.029987258687029512 +12 +-0.2637126619050216 +22 +0.26201769074666237 +32 +0.890419894871474 +13 +-0.2637126619050216 +23 +0.26201769074666237 +33 +0.890419894871474 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.1875225673732847 +20 +0.3218626350699233 +30 +0.9666099894032089 +11 +-0.08405145500772823 +21 +0.30735768588336976 +31 +-0.029987258687029512 +12 +-0.16079527006181052 +22 +0.2755694670978184 +32 +-0.029987258687029512 +13 +-0.16079527006181052 +23 +0.2755694670978184 +33 +-0.029987258687029512 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09822205169936674 +20 +0.36024333207843495 +30 +1.05591050507713 +11 +-0.08405145500772823 +21 +0.30735768588336976 +31 +-0.029987258687029512 +12 +-0.1875225673732847 +22 +0.3218626350699233 +32 +0.9666099894032089 +13 +-0.1875225673732847 +23 +0.3218626350699233 +33 +0.9666099894032089 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.27726469062630743 +20 +0.15910033213491825 +30 +-0.029987258687029512 +11 +-0.30905309760007 +21 +0.08235659503094556 +31 +-0.029987258687029512 +12 +-0.35829150997042125 +22 +0.09555005256687987 +32 +0.7958410468060751 +13 +-0.35829150997042125 +23 +0.09555005256687987 +33 +0.7958410468060751 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.32186859092445047 +20 +0.18485247889635142 +30 +0.8322639658520461 +11 +-0.27726469062630743 +21 +0.15910033213491825 +31 +-0.029987258687029512 +12 +-0.35829150997042125 +22 +0.09555005256687987 +32 +0.7958410468060751 +13 +-0.35829150997042125 +23 +0.09555005256687987 +33 +0.7958410468060751 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.22330602684585132 +20 +0.2250010929313866 +30 +-0.029987258687029512 +11 +0.3219319512611786 +21 +0.1868459359501376 +31 +1.1069789402167114 +12 +0.2738738492723656 +22 +0.1590996563942833 +32 +-0.029987258687029512 +13 +0.2738738492723656 +23 +0.1590996563942833 +33 +-0.029987258687029512 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2626308843757006 +20 +0.26432585403041065 +30 +1.1153131616555407 +11 +0.3219319512611786 +21 +0.1868459359501376 +31 +1.1069789402167114 +12 +0.22330602684585132 +22 +0.2250010929313866 +32 +-0.029987258687029512 +13 +0.22330602684585132 +23 +0.2250010929313866 +33 +-0.029987258687029512 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.226696706598913 +20 +0.2250016446713048 +30 +-0.029987258687029512 +11 +-0.27726469062630743 +21 +0.15910033213491825 +31 +-0.029987258687029512 +12 +-0.32186859092445047 +22 +0.18485247889635142 +32 +0.8322639658520461 +13 +-0.32186859092445047 +23 +0.18485247889635142 +33 +0.8322639658520461 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18515108995501323 +20 +0.32362707322580364 +30 +1.1069759431829398 +11 +0.22330602684585132 +21 +0.2250010929313866 +31 +-0.029987258687029512 +12 +0.1574047143094663 +22 +0.27556907695878063 +32 +-0.029987258687029512 +13 +0.1574047143094663 +23 +0.27556907695878063 +33 +-0.029987258687029512 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2626308843757006 +20 +0.26432585403041065 +30 +1.1153131616555407 +11 +0.22330602684585132 +21 +0.2250010929313866 +31 +-0.029987258687029512 +12 +0.18515108995501323 +22 +0.32362707322580364 +32 +1.1069759431829398 +13 +0.18515108995501323 +23 +0.32362707322580364 +33 +1.1069759431829398 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.09822205169936674 +20 +0.36024333207843495 +30 +1.05591050507713 +11 +-0.001695225607451445 +21 +0.31819998645023906 +31 +-0.029987258687029512 +12 +-0.08405145500772823 +22 +0.30735768588336976 +32 +-0.029987258687029512 +13 +-0.08405145500772823 +23 +0.30735768588336976 +33 +-0.029987258687029512 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016951576939718827 +20 +0.37359067095576093 +30 +1.0999540174532403 +11 +-0.001695225607451445 +21 +0.31819998645023906 +31 +-0.029987258687029512 +12 +-0.09822205169936674 +22 +0.36024333207843495 +32 +1.05591050507713 +13 +-0.09822205169936674 +23 +0.36024333207843495 +33 +1.05591050507713 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.053235390890986944 +20 +0.3668191518579341 +30 +1.1009056923994525 +11 +-0.0016951576939718827 +21 +0.37359067095576093 +31 +1.0999540174532403 +12 +-0.09822205169936674 +22 +0.36024333207843495 +32 +1.05591050507713 +13 +-0.09822205169936674 +23 +0.36024333207843495 +33 +1.05591050507713 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.29191131237938345 +20 +0.22460181803280632 +30 +0.8622212443971131 +11 +-0.226696706598913 +21 +0.2250016446713048 +31 +-0.029987258687029512 +12 +-0.32186859092445047 +22 +0.18485247889635142 +32 +0.8322639658520461 +13 +-0.32186859092445047 +23 +0.18485247889635142 +33 +0.8322639658520461 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.226696706598913 +20 +0.2250016446713048 +30 +-0.029987258687029512 +11 +-0.29191131237938345 +21 +0.22460181803280632 +31 +0.8622212443971131 +12 +-0.2637126619050216 +22 +0.26201769074666237 +32 +0.890419894871474 +13 +-0.2637126619050216 +23 +0.26201769074666237 +33 +0.890419894871474 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +-0.0016951576939718827 +20 +0.37359067095576093 +30 +1.0999540174532403 +11 +0.08066097720549281 +21 +0.30735748393254325 +31 +-0.029987258687029512 +12 +-0.001695225607451445 +22 +0.31819998645023906 +32 +-0.029987258687029512 +13 +-0.001695225607451445 +23 +0.31819998645023906 +33 +-0.029987258687029512 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.08066097720549281 +20 +0.30735748393254325 +30 +-0.029987258687029512 +11 +-0.0016951576939718827 +21 +0.37359067095576093 +31 +1.0999540174532403 +12 +0.09500391648962592 +22 +0.3608857995504491 +32 +1.1017395706853292 +13 +0.09500391648962592 +23 +0.3608857995504491 +33 +1.1017395706853292 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.2738738492723656 +20 +0.1590996563942833 +30 +-0.029987258687029512 +11 +0.3591904613034176 +21 +0.09669866074029804 +31 +1.1017425981156106 +12 +0.3056620680579174 +22 +0.08235584134020102 +32 +-0.029987258687029512 +13 +0.3056620680579174 +23 +0.08235584134020102 +33 +-0.029987258687029512 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.3219319512611786 +20 +0.1868459359501376 +30 +1.1069789402167114 +11 +0.3591904613034176 +21 +0.09669866074029804 +31 +1.1017425981156106 +12 +0.2738738492723656 +22 +0.1590996563942833 +32 +-0.029987258687029512 +13 +0.2738738492723656 +23 +0.1590996563942833 +33 +-0.029987258687029512 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.09500391648962592 +20 +0.3608857995504491 +30 +1.1017395706853292 +11 +0.1574047143094663 +21 +0.27556907695878063 +31 +-0.029987258687029512 +12 +0.08066097720549281 +22 +0.30735748393254325 +32 +-0.029987258687029512 +13 +0.08066097720549281 +23 +0.30735748393254325 +33 +-0.029987258687029512 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.18515108995501323 +20 +0.32362707322580364 +30 +1.1069759431829398 +11 +0.1574047143094663 +21 +0.27556907695878063 +31 +-0.029987258687029512 +12 +0.09500391648962592 +22 +0.3608857995504491 +32 +1.1017395706853292 +13 +0.09500391648962592 +23 +0.3608857995504491 +33 +1.1017395706853292 +70 +0 + 0 +3DFACE + 8 +finger metacarpal +10 +0.3056620680579174 +20 +0.08235584134020102 +30 +-0.029987258687029512 +11 +0.3718950373839425 +21 +2.0789609478377713e-09 +31 +1.0999570863887107 +12 +0.3165043686247876 +22 +-3.880600751848817e-07 +32 +-0.029987258687029512 +13 +0.3165043686247876 +23 +-3.880600751848817e-07 +33 +-0.029987258687029512 +70 +1 + 0 +3DFACE + 8 +finger metacarpal +10 +0.3718950373839425 +20 +2.0789609478377713e-09 +30 +1.0999570863887107 +11 +0.3056620680579174 +21 +0.08235584134020102 +31 +-0.029987258687029512 +12 +0.3591904613034176 +22 +0.09669866074029804 +32 +1.1017425981156106 +13 +0.3591904613034176 +23 +0.09669866074029804 +33 +1.1017425981156106 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.296250080065389 +20 +0.05625570433824323 +30 +0.6644157568117056 +11 +0.2555856897176694 +21 +0.0770228110613641 +31 +0.7375987435993245 +12 +0.25907879909916354 +22 +0.0425646293072397 +32 +0.7311194193909711 +13 +0.25907879909916354 +23 +0.0425646293072397 +33 +0.7311194193909711 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.2555856897176694 +20 +0.0770228110613641 +30 +0.7375987435993245 +11 +0.296250080065389 +21 +0.05625570433824323 +31 +0.6644157568117056 +12 +0.2902821751225073 +22 +0.10111068285304725 +32 +0.67540282766255 +13 +0.2902821751225073 +23 +0.10111068285304725 +33 +0.67540282766255 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.296250080065389 +20 +0.05625570433824323 +30 +0.6644157568117056 +11 +0.26337177035066883 +21 +0.00021611756771083845 +31 +0.7232330781817133 +12 +0.30144711598939 +22 +1.3877787807814457e-15 +32 +0.6548478762140961 +13 +0.30144711598939 +23 +1.3877787807814457e-15 +33 +0.6548478762140961 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.26337177035066883 +20 +0.00021611756771083845 +30 +0.7232330781817133 +11 +0.296250080065389 +21 +0.05625570433824323 +31 +0.6644157568117056 +12 +0.25907879909916354 +22 +0.0425646293072397 +32 +0.7311194193909711 +13 +0.25907879909916354 +23 +0.0425646293072397 +33 +0.7311194193909711 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.08597126774640101 +20 +0.305931990758305 +30 +1.1950892539563733 +11 +0.14591265330279257 +21 +0.30907788121177326 +31 +1.1068841952682413 +12 +0.09248182231156576 +22 +0.34122279747238193 +32 +1.1068841952682413 +13 +0.09248182231156576 +23 +0.34122279747238193 +33 +1.1068841952682413 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.30907788121177326 +30 +1.1068841952682413 +11 +0.08597126774640101 +21 +0.305931990758305 +31 +1.1950892539563733 +12 +0.14591265330279257 +22 +0.2927773222601686 +32 +1.1435553817691761 +13 +0.14591265330279257 +23 +0.2927773222601686 +33 +1.1435553817691761 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.2927773222601686 +30 +1.1435553817691761 +11 +0.08597126774640101 +21 +0.305931990758305 +31 +1.1950892539563733 +12 +0.13856428289474443 +22 +0.2742911190654399 +32 +1.1950892539563733 +13 +0.13856428289474443 +23 +0.2742911190654399 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.17315837194884964 +20 +0.31485375811798544 +30 +0.8910308472281347 +11 +0.16483919203682462 +21 +0.3090020498238778 +31 +0.9060890011061947 +12 +0.17165022633163995 +22 +0.2974743709819362 +32 +0.8934201589578008 +13 +0.17165022633163995 +23 +0.2974743709819362 +33 +0.8934201589578008 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.16483919203682462 +20 +0.3090020498238778 +30 +0.9060890011061947 +11 +0.1624333997344558 +21 +0.32322972405982175 +31 +0.9107758047501918 +12 +0.16148066621521584 +22 +0.30464032797763685 +32 +0.9121263906088999 +13 +0.16148066621521584 +23 +0.30464032797763685 +33 +0.9121263906088999 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.1624333997344558 +20 +0.32322972405982175 +30 +0.9107758047501918 +11 +0.16483919203682462 +21 +0.3090020498238778 +31 +0.9060890011061947 +12 +0.17315837194884964 +22 +0.31485375811798544 +32 +0.8910308472281347 +13 +0.17315837194884964 +23 +0.31485375811798544 +33 +0.8910308472281347 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.18260248174312899 +20 +0.22232457698922659 +30 +1.198099275585573 +11 +0.11855648811852992 +21 +0.22395776089577168 +31 +1.2708326549933064 +12 +0.15543163413708405 +22 +0.1828607460436268 +32 +1.2708326549933064 +13 +0.15543163413708405 +23 +0.1828607460436268 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.11855648811852992 +20 +0.22395776089577168 +30 +1.2708326549933064 +11 +0.18260248174312899 +21 +0.22232457698922659 +31 +1.198099275585573 +12 +0.17760884479078798 +22 +0.2307763099490301 +32 +1.1950892539563756 +13 +0.17760884479078798 +23 +0.2307763099490301 +33 +1.1950892539563756 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.11855648811852992 +20 +0.22395776089577168 +30 +1.2708326549933064 +11 +0.17760884479078798 +21 +0.2307763099490301 +31 +1.1950892539563756 +12 +0.13856428289474443 +22 +0.2742911190654399 +32 +1.1950892539563733 +13 +0.13856428289474443 +23 +0.2742911190654399 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.21079763456608602 +20 +0.15200255171741062 +30 +1.2116649767211727 +11 +0.15543163413708405 +21 +0.1828607460436268 +31 +1.2708326549933064 +12 +0.18372692886278563 +22 +0.12930207354027978 +32 +1.2708326549933064 +13 +0.18372692886278563 +23 +0.12930207354027978 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.15543163413708405 +20 +0.1828607460436268 +30 +1.2708326549933064 +11 +0.21079763456608602 +21 +0.15200255171741062 +31 +1.2116649767211727 +12 +0.19513291276861866 +22 +0.20111681641123347 +32 +1.1960904299564608 +13 +0.19513291276861866 +23 +0.20111681641123347 +33 +1.1960904299564608 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.15543163413708405 +20 +0.1828607460436268 +30 +1.2708326549933064 +11 +0.19513291276861866 +21 +0.20111681641123347 +31 +1.1960904299564608 +12 +0.18260248174312899 +22 +0.22232457698922659 +32 +1.198099275585573 +13 +0.18260248174312899 +23 +0.22232457698922659 +33 +1.198099275585573 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.22483831324751347 +20 +0.1079802180841335 +30 +1.3469345417672878 +11 +0.22607406136431274 +21 +0.10410572475522972 +31 +1.2088129668204062 +12 +0.22607406136431385 +22 +0.1041057247552285 +32 +1.347444628490924 +13 +0.22607406136431385 +23 +0.1041057247552285 +33 +1.347444628490924 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.22607406136431274 +20 +0.10410572475522972 +30 +1.2088129668204062 +11 +0.22483831324751347 +21 +0.1079802180841335 +31 +1.3469345417672878 +12 +0.21079763456608602 +22 +0.15200255171741062 +32 +1.2116649767211727 +13 +0.21079763456608602 +23 +0.15200255171741062 +33 +1.2116649767211727 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.21079763456608602 +20 +0.15200255171741062 +30 +1.2116649767211727 +11 +0.22483831324751347 +21 +0.1079802180841335 +31 +1.3469345417672878 +12 +0.19513291276861866 +22 +0.20111681641123635 +32 +1.3083560995869057 +13 +0.19513291276861866 +23 +0.20111681641123635 +33 +1.3083560995869057 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.21079763456608602 +20 +0.15200255171741062 +30 +1.2116649767211727 +11 +0.19513291276861866 +21 +0.20111681641123635 +31 +1.3083560995869057 +12 +0.19513291276861866 +22 +0.20111681641123347 +32 +1.1960904299564608 +13 +0.19513291276861866 +23 +0.20111681641123347 +33 +1.1960904299564608 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.26337177035066883 +20 +0.00021611756771083845 +30 +0.7232330781817133 +11 +0.263393678712192 +21 +1.9984014443252818e-15 +31 +1.3611504071680836 +12 +0.263393678712192 +22 +6.106226635438361e-16 +32 +0.7231946266820767 +13 +0.263393678712192 +23 +6.106226635438361e-16 +33 +0.7231946266820767 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.263393678712192 +20 +1.9984014443252818e-15 +30 +1.3611504071680836 +11 +0.26337177035066883 +21 +0.00021611756771083845 +31 +0.7232330781817133 +12 +0.2524474623535692 +22 +0.10798021808412805 +32 +1.3469345417672878 +13 +0.2524474623535692 +23 +0.10798021808412805 +33 +1.3469345417672878 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.2524474623535692 +20 +0.10798021808412805 +30 +1.3469345417672878 +11 +0.26337177035066883 +21 +0.00021611756771083845 +31 +0.7232330781817133 +12 +0.25907879909916354 +22 +0.0425646293072397 +32 +0.7311194193909711 +13 +0.25907879909916354 +23 +0.0425646293072397 +33 +0.7311194193909711 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.2524474623535692 +20 +0.10798021808412805 +30 +1.3469345417672878 +11 +0.25907879909916354 +21 +0.0425646293072397 +31 +0.7311194193909711 +12 +0.2555856897176694 +22 +0.0770228110613641 +32 +0.7375987435993245 +13 +0.2555856897176694 +23 +0.0770228110613641 +33 +0.7375987435993245 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.2524474623535692 +20 +0.10798021808412805 +30 +1.3469345417672878 +11 +0.2555856897176694 +21 +0.0770228110613641 +31 +0.7375987435993245 +12 +0.25192819408071887 +22 +0.11310260005700445 +32 +0.7446065308916078 +13 +0.25192819408071887 +23 +0.11310260005700445 +33 +0.7446065308916078 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.2524474623535692 +20 +0.10798021808412805 +30 +1.3469345417672878 +11 +0.25192819408071887 +21 +0.11310260005700445 +31 +0.7446065308916078 +12 +0.25192819408071765 +22 +0.11310260005700845 +32 +1.3448127816824647 +13 +0.25192819408071765 +23 +0.11310260005700845 +33 +1.3448127816824647 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.274037280744151 +20 +0.15716672872113313 +30 +0.7053101078903244 +11 +0.23789809216172886 +21 +0.15709177191973378 +31 +0.7705295873705995 +12 +0.2480027252213851 +22 +0.12541028857502534 +32 +0.7518189517863902 +13 +0.2480027252213851 +23 +0.12541028857502534 +33 +0.7518189517863902 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.23789809216172886 +20 +0.15709177191973378 +30 +0.7705295873705995 +11 +0.274037280744151 +21 +0.15716672872113313 +31 +0.7053101078903244 +12 +0.2591667482690694 +22 +0.19321003684080962 +32 +0.7326871515023154 +13 +0.2591667482690694 +23 +0.19321003684080962 +33 +0.7326871515023154 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.2591667482690694 +20 +0.19321003684080962 +30 +0.7326871515023154 +11 +0.21954103663658775 +21 +0.21464742440548745 +31 +0.8047207977789652 +12 +0.23789809216172886 +22 +0.15709177191973378 +32 +0.7705295873705995 +13 +0.23789809216172886 +23 +0.15709177191973378 +33 +0.7705295873705995 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.21954103663658775 +20 +0.21464742440548745 +30 +0.8047207977789652 +11 +0.2591667482690694 +21 +0.19321003684080962 +31 +0.7326871515023154 +12 +0.23066726183653696 +22 +0.24695009092044307 +32 +0.7851554598356051 +13 +0.23066726183653696 +23 +0.24695009092044307 +33 +0.7851554598356051 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.214135315851808 +20 +0.2688995990817393 +30 +0.8155912096632217 +11 +0.17165022633163995 +21 +0.2974743709819362 +31 +0.8934201589578008 +12 +0.20642658047224793 +22 +0.2386153747599219 +32 +0.8289927497633759 +13 +0.20642658047224793 +23 +0.2386153747599219 +33 +0.8289927497633759 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.17165022633163995 +20 +0.2974743709819362 +30 +0.8934201589578008 +11 +0.214135315851808 +21 +0.2688995990817393 +31 +0.8155912096632217 +12 +0.17315837194884964 +22 +0.31485375811798544 +32 +0.8910308472281347 +13 +0.17315837194884964 +23 +0.31485375811798544 +33 +0.8910308472281347 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.22876729304572974 +20 +0.07753802914401464 +30 +1.217426749765848 +11 +0.18372692886278563 +21 +0.12930207354027978 +31 +1.2708326549933064 +12 +0.20151409472026383 +22 +0.06693167840694275 +32 +1.2708326549933064 +13 +0.20151409472026383 +23 +0.06693167840694275 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.18372692886278563 +20 +0.12930207354027978 +30 +1.2708326549933064 +11 +0.22876729304572974 +21 +0.07753802914401464 +31 +1.217426749765848 +12 +0.22607406136431274 +22 +0.10410572475522972 +32 +1.2088129668204062 +13 +0.22607406136431274 +23 +0.10410572475522972 +33 +1.2088129668204062 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.18372692886278563 +20 +0.12930207354027978 +30 +1.2708326549933064 +11 +0.22607406136431274 +21 +0.10410572475522972 +31 +1.2088129668204062 +12 +0.21079763456608602 +22 +0.15200255171741062 +32 +1.2116649767211727 +13 +0.21079763456608602 +23 +0.15200255171741062 +33 +1.2116649767211727 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.22876729304572974 +20 +0.07753802914401464 +30 +1.217426749765848 +11 +0.20758096575101137 +21 +2.7755575615628914e-16 +31 +1.2708326549933064 +12 +0.23662751094573675 +22 +-2.7755575615628914e-16 +32 +1.2158519800606344 +13 +0.23662751094573675 +23 +-2.7755575615628914e-16 +33 +1.2158519800606344 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.20758096575101137 +20 +2.7755575615628914e-16 +30 +1.2708326549933064 +11 +0.22876729304572974 +21 +0.07753802914401464 +31 +1.217426749765848 +12 +0.20151409472026383 +22 +0.06693167840694275 +32 +1.2708326549933064 +13 +0.20151409472026383 +23 +0.06693167840694275 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.23662751094573675 +20 +1.8318679906315083e-15 +30 +1.3611504071680836 +11 +0.22876729304572974 +21 +0.07753802914401464 +31 +1.217426749765848 +12 +0.23662751094573675 +22 +-2.7755575615628914e-16 +32 +1.2158519800606344 +13 +0.23662751094573675 +23 +-2.7755575615628914e-16 +33 +1.2158519800606344 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.22876729304572974 +20 +0.07753802914401464 +30 +1.217426749765848 +11 +0.23662751094573675 +21 +1.8318679906315083e-15 +31 +1.3611504071680836 +12 +0.22607406136431385 +22 +0.1041057247552285 +32 +1.347444628490924 +13 +0.22607406136431385 +23 +0.1041057247552285 +33 +1.347444628490924 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.22876729304572974 +20 +0.07753802914401464 +30 +1.217426749765848 +11 +0.22607406136431385 +21 +0.1041057247552285 +31 +1.347444628490924 +12 +0.22607406136431274 +22 +0.10410572475522972 +32 +1.2088129668204062 +13 +0.22607406136431274 +23 +0.10410572475522972 +33 +1.2088129668204062 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.26337177035066883 +20 +0.00021611756771083845 +30 +0.7232330781817133 +11 +0.263393678712192 +21 +6.106226635438361e-16 +31 +0.7231946266820767 +12 +0.30144711598939 +22 +1.3877787807814457e-15 +32 +0.6548478762140961 +13 +0.30144711598939 +23 +1.3877787807814457e-15 +33 +0.6548478762140961 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.296250080065389 +20 +0.05625570433824323 +30 +0.6644157568117056 +11 +0.30144711598939 +21 +1.3877787807814457e-15 +31 +0.6548478762140961 +12 +0.42920423721993983 +22 +2.7755575615628914e-15 +32 +0.0 +13 +0.42920423721993983 +23 +2.7755575615628914e-15 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.21831309401632604 +20 +0.21849744483100497 +30 +1.2976625093750926 +11 +0.1907104937441224 +21 +0.2086017627515685 +31 +1.3052557332991035 +12 +0.19513291276861866 +22 +0.20111681641123635 +32 +1.3083560995869057 +13 +0.19513291276861866 +23 +0.20111681641123635 +33 +1.3083560995869057 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.09327307500958115 +20 +0.34551182473544184 +30 +1.0731565574038182 +11 +0.14591265330279257 +21 +0.3224508871153656 +31 +1.0122285079127469 +12 +0.1060148804133424 +22 +0.3464540804912427 +32 +1.0122285079127469 +13 +0.1060148804133424 +23 +0.3464540804912427 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.3224508871153656 +30 +1.0122285079127469 +11 +0.09327307500958115 +21 +0.34551182473544184 +31 +1.0731565574038182 +12 +0.14591265330279257 +22 +0.30907788121177326 +32 +1.1068841952682413 +13 +0.14591265330279257 +23 +0.30907788121177326 +33 +1.1068841952682413 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.30907788121177326 +30 +1.1068841952682413 +11 +0.09327307500958115 +21 +0.34551182473544184 +31 +1.0731565574038182 +12 +0.09248182231156576 +22 +0.34122279747238193 +32 +1.1068841952682413 +13 +0.09248182231156576 +23 +0.34122279747238193 +33 +1.1068841952682413 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.21831309401632715 +20 +0.21849744483100653 +30 +0.8070247740079369 +11 +0.17310779103353768 +21 +0.29500744201820384 +31 +1.2389543236831635 +12 +0.21831309401632604 +22 +0.21849744483100497 +32 +1.2976625093750926 +13 +0.21831309401632604 +23 +0.21849744483100497 +33 +1.2976625093750926 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.17310779103353768 +20 +0.29500744201820384 +30 +1.2389543236831635 +11 +0.21831309401632715 +21 +0.21849744483100653 +31 +0.8070247740079369 +12 +0.20642658047224793 +22 +0.2386153747599219 +32 +0.8289927497633759 +13 +0.20642658047224793 +23 +0.2386153747599219 +33 +0.8289927497633759 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.17310779103353768 +20 +0.29500744201820384 +30 +1.2389543236831635 +11 +0.20642658047224793 +21 +0.2386153747599219 +31 +0.8289927497633759 +12 +0.17165022633163995 +22 +0.2974743709819362 +32 +0.8934201589578008 +13 +0.17165022633163995 +23 +0.2974743709819362 +33 +0.8934201589578008 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.17310779103353768 +20 +0.29500744201820384 +30 +1.2389543236831635 +11 +0.17165022633163995 +21 +0.2974743709819362 +31 +0.8934201589578008 +12 +0.1648391920368235 +22 +0.309002049823879 +32 +1.2207161957078443 +13 +0.1648391920368235 +23 +0.309002049823879 +33 +1.2207161957078443 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.1648391920368235 +20 +0.309002049823879 +30 +1.2207161957078443 +11 +0.17165022633163995 +21 +0.2974743709819362 +31 +0.8934201589578008 +12 +0.16483919203682462 +22 +0.3090020498238778 +32 +0.9060890011061947 +13 +0.16483919203682462 +23 +0.3090020498238778 +33 +0.9060890011061947 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14628261733798686 +20 +0.28490260216305396 +30 +1.0876716112414513 +11 +0.14591265330279257 +21 +0.2927773222601686 +31 +1.1435553817691761 +12 +0.14591265330279146 +22 +0.28442212939005906 +32 +1.159696374922908 +13 +0.14591265330279146 +23 +0.28442212939005906 +33 +1.159696374922908 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.2927773222601686 +30 +1.1435553817691761 +11 +0.14628261733798686 +21 +0.28490260216305396 +31 +1.0876716112414513 +12 +0.14591265330279257 +22 +0.30907788121177326 +32 +1.1068841952682413 +13 +0.14591265330279257 +23 +0.30907788121177326 +33 +1.1068841952682413 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.2480027252213851 +20 +0.12541028857502534 +30 +0.7518189517863902 +11 +0.25192819408071765 +21 +0.11310260005700845 +31 +1.3448127816824647 +12 +0.25192819408071887 +22 +0.11310260005700445 +32 +0.7446065308916078 +13 +0.25192819408071887 +23 +0.11310260005700445 +33 +0.7446065308916078 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.25192819408071765 +20 +0.11310260005700845 +30 +1.3448127816824647 +11 +0.2480027252213851 +21 +0.12541028857502534 +31 +0.7518189517863902 +12 +0.21831309401632604 +22 +0.21849744483100497 +32 +1.2976625093750926 +13 +0.21831309401632604 +23 +0.21849744483100497 +33 +1.2976625093750926 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.21831309401632604 +20 +0.21849744483100497 +30 +1.2976625093750926 +11 +0.2480027252213851 +21 +0.12541028857502534 +31 +0.7518189517863902 +12 +0.23789809216172886 +22 +0.15709177191973378 +32 +0.7705295873705995 +13 +0.23789809216172886 +23 +0.15709177191973378 +33 +0.7705295873705995 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.21831309401632604 +20 +0.21849744483100497 +30 +1.2976625093750926 +11 +0.23789809216172886 +21 +0.15709177191973378 +31 +0.7705295873705995 +12 +0.21954103663658775 +22 +0.21464742440548745 +32 +0.8047207977789652 +13 +0.21954103663658775 +23 +0.21464742440548745 +33 +0.8047207977789652 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.21831309401632604 +20 +0.21849744483100497 +30 +1.2976625093750926 +11 +0.21954103663658775 +21 +0.21464742440548745 +31 +0.8047207977789652 +12 +0.21831309401632715 +22 +0.21849744483100653 +32 +0.8070247740079369 +13 +0.21831309401632715 +23 +0.21849744483100653 +33 +0.8070247740079369 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.23662751094573675 +20 +1.8318679906315083e-15 +30 +1.3611504071680836 +11 +0.2524474623535692 +21 +0.10798021808412805 +31 +1.3469345417672878 +12 +0.22607406136431385 +22 +0.1041057247552285 +32 +1.347444628490924 +13 +0.22607406136431385 +23 +0.1041057247552285 +33 +1.347444628490924 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.2524474623535692 +20 +0.10798021808412805 +30 +1.3469345417672878 +11 +0.23662751094573675 +21 +1.8318679906315083e-15 +31 +1.3611504071680836 +12 +0.263393678712192 +22 +1.9984014443252818e-15 +32 +1.3611504071680836 +13 +0.263393678712192 +23 +1.9984014443252818e-15 +33 +1.3611504071680836 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.2902821751225073 +20 +0.10111068285304725 +30 +0.67540282766255 +11 +0.25192819408071887 +21 +0.11310260005700445 +31 +0.7446065308916078 +12 +0.2555856897176694 +22 +0.0770228110613641 +32 +0.7375987435993245 +13 +0.2555856897176694 +23 +0.0770228110613641 +33 +0.7375987435993245 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.25192819408071887 +20 +0.11310260005700445 +30 +0.7446065308916078 +11 +0.2902821751225073 +21 +0.10111068285304725 +31 +0.67540282766255 +12 +0.274037280744151 +22 +0.15716672872113313 +32 +0.7053101078903244 +13 +0.274037280744151 +23 +0.15716672872113313 +33 +0.7053101078903244 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.25192819408071887 +20 +0.11310260005700445 +30 +0.7446065308916078 +11 +0.274037280744151 +21 +0.15716672872113313 +31 +0.7053101078903244 +12 +0.2480027252213851 +22 +0.12541028857502534 +32 +0.7518189517863902 +13 +0.2480027252213851 +23 +0.12541028857502534 +33 +0.7518189517863902 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.25192819408071765 +20 +0.11310260005700845 +30 +1.3448127816824647 +11 +0.19513291276861866 +21 +0.20111681641123635 +31 +1.3083560995869057 +12 +0.22483831324751347 +22 +0.1079802180841335 +32 +1.3469345417672878 +13 +0.22483831324751347 +23 +0.1079802180841335 +33 +1.3469345417672878 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.19513291276861866 +20 +0.20111681641123635 +30 +1.3083560995869057 +11 +0.18260248174312899 +21 +0.22232457698922659 +31 +1.198099275585573 +12 +0.19513291276861866 +22 +0.20111681641123347 +32 +1.1960904299564608 +13 +0.19513291276861866 +23 +0.20111681641123347 +33 +1.1960904299564608 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.18260248174312899 +20 +0.22232457698922659 +30 +1.198099275585573 +11 +0.19513291276861866 +21 +0.20111681641123635 +31 +1.3083560995869057 +12 +0.1907104937441224 +22 +0.2086017627515685 +32 +1.3052557332991035 +13 +0.1907104937441224 +23 +0.2086017627515685 +33 +1.3052557332991035 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.18260248174312899 +20 +0.22232457698922659 +30 +1.198099275585573 +11 +0.1907104937441224 +21 +0.2086017627515685 +31 +1.3052557332991035 +12 +0.17760884479078798 +22 +0.2307763099490301 +32 +1.1950892539563756 +13 +0.17760884479078798 +23 +0.2307763099490301 +33 +1.1950892539563756 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.1907104937441224 +20 +0.2086017627515685 +30 +1.3052557332991035 +11 +0.15406334402645439 +21 +0.2950074420182055 +31 +1.238954323683159 +12 +0.14628261733798686 +22 +0.28490260216305374 +32 +1.2467080400132249 +13 +0.14628261733798686 +23 +0.28490260216305374 +33 +1.2467080400132249 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.15406334402645439 +20 +0.2950074420182055 +30 +1.238954323683159 +11 +0.1907104937441224 +21 +0.2086017627515685 +31 +1.3052557332991035 +12 +0.17310779103353768 +22 +0.29500744201820384 +32 +1.2389543236831635 +13 +0.17310779103353768 +23 +0.29500744201820384 +33 +1.2389543236831635 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.17310779103353768 +20 +0.29500744201820384 +30 +1.2389543236831635 +11 +0.1907104937441224 +21 +0.2086017627515685 +31 +1.3052557332991035 +12 +0.21831309401632604 +22 +0.21849744483100497 +32 +1.2976625093750926 +13 +0.21831309401632604 +23 +0.21849744483100497 +33 +1.2976625093750926 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.2524474623535692 +20 +0.10798021808412805 +30 +1.3469345417672878 +11 +0.25192819408071765 +21 +0.11310260005700845 +31 +1.3448127816824647 +12 +0.22607406136431385 +22 +0.1041057247552285 +32 +1.347444628490924 +13 +0.22607406136431385 +23 +0.1041057247552285 +33 +1.347444628490924 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.23066726183653696 +20 +0.24695009092044307 +30 +0.7851554598356051 +11 +0.2591667482690694 +21 +0.19321003684080962 +31 +0.7326871515023154 +12 +0.37170177284439176 +22 +0.21460211860997003 +32 +0.0 +13 +0.37170177284439176 +23 +0.21460211860997003 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.25192819408071765 +20 +0.11310260005700845 +30 +1.3448127816824647 +11 +0.22483831324751347 +21 +0.1079802180841335 +31 +1.3469345417672878 +12 +0.22607406136431385 +22 +0.1041057247552285 +32 +1.347444628490924 +13 +0.22607406136431385 +23 +0.1041057247552285 +33 +1.347444628490924 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.274037280744151 +20 +0.15716672872113313 +30 +0.7053101078903244 +11 +0.2902821751225073 +21 +0.10111068285304725 +31 +0.67540282766255 +12 +0.41457945748344094 +22 +0.11108623083122104 +32 +0.0 +13 +0.41457945748344094 +23 +0.11108623083122104 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.0862196570520593 +20 +0.3424202262257874 +30 +1.1068841952682413 +11 +0.09327307500958115 +21 +0.34551182473544184 +31 +1.0731565574038182 +12 +1.7763568394002505e-15 +22 +0.3532598344360507 +32 +1.1068841952682391 +13 +1.7763568394002505e-15 +23 +0.3532598344360507 +33 +1.1068841952682391 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.3532598344360507 +30 +1.1068841952682391 +11 +0.09327307500958115 +21 +0.34551182473544184 +31 +1.0731565574038182 +12 +0.09465568735549401 +22 +0.353259834436051 +32 +1.0122285079127469 +13 +0.09465568735549401 +23 +0.353259834436051 +33 +1.0122285079127469 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.3532598344360507 +30 +1.1068841952682391 +11 +0.09465568735549401 +21 +0.353259834436051 +31 +1.0122285079127469 +12 +1.7763568394002505e-15 +22 +0.365721492087253 +32 +1.0122285079127469 +13 +1.7763568394002505e-15 +23 +0.365721492087253 +33 +1.0122285079127469 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.25192819408071765 +20 +0.11310260005700845 +30 +1.3448127816824647 +11 +0.21831309401632604 +21 +0.21849744483100497 +31 +1.2976625093750926 +12 +0.19513291276861866 +22 +0.20111681641123635 +32 +1.3083560995869057 +13 +0.19513291276861866 +23 +0.20111681641123635 +33 +1.3083560995869057 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.17310779103353768 +20 +0.29500744201820384 +30 +1.2389543236831635 +11 +0.1648391920368235 +21 +0.309002049823879 +31 +1.2207161957078443 +12 +0.15406334402645439 +22 +0.2950074420182055 +32 +1.238954323683159 +13 +0.15406334402645439 +23 +0.2950074420182055 +33 +1.238954323683159 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.17315837194884964 +20 +0.31485375811798544 +30 +0.8910308472281347 +11 +0.214135315851808 +21 +0.2688995990817393 +31 +0.8155912096632217 +12 +0.30349322665222 +22 +0.303493226652219 +32 +0.0 +13 +0.30349322665222 +23 +0.303493226652219 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.1060148804133424 +20 +0.3464540804912427 +30 +1.0122285079127469 +11 +0.21460211860997136 +21 +0.3717017728443903 +31 +0.0 +12 +0.1110862308312226 +22 +0.4145794574834395 +32 +0.0 +13 +0.1110862308312226 +23 +0.4145794574834395 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.051933324443145024 +20 +0.25432064826909484 +30 +1.270832654993302 +11 +1.7763568394002505e-15 +21 +0.25860414708055923 +31 +1.2708326549933042 +12 +0.03977877210196379 +22 +0.18090139708368969 +32 +1.3289526107702627 +13 +0.03977877210196379 +23 +0.18090139708368969 +33 +1.3289526107702627 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.06777344544969494 +20 +0.30941171298926207 +30 +1.1950892539563756 +11 +0.0862196570520593 +21 +0.3424202262257874 +31 +1.1068841952682413 +12 +1.7763568394002505e-15 +22 +0.31672410285751074 +32 +1.1950892539563733 +13 +1.7763568394002505e-15 +23 +0.31672410285751074 +33 +1.1950892539563733 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.03977877210196379 +20 +0.18090139708368969 +30 +1.3289526107702627 +11 +1.7763568394002505e-15 +21 +0.182860746043627 +31 +1.328952610770256 +12 +0.03213810108186088 +22 +0.09415736007026898 +32 +1.3654883423488011 +13 +0.03213810108186088 +23 +0.09415736007026898 +33 +1.3654883423488011 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.3305275449199734 +30 +0.9357778285299473 +11 +0.14628261733798686 +21 +0.2849026021630544 +31 +0.9336709982866838 +12 +0.14628261733798686 +22 +0.3305275449199734 +32 +0.9336709982866838 +13 +0.14628261733798686 +23 +0.3305275449199734 +33 +0.9336709982866838 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.25860414708055923 +30 +1.2708326549933042 +11 +0.06777344544969494 +21 +0.30941171298926207 +31 +1.1950892539563756 +12 +1.7763568394002505e-15 +22 +0.31672410285751074 +32 +1.1950892539563733 +13 +1.7763568394002505e-15 +23 +0.31672410285751074 +33 +1.1950892539563733 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.25860414708055923 +30 +1.2708326549933042 +11 +0.051933324443145024 +21 +0.25432064826909484 +31 +1.270832654993302 +12 +0.06777344544969494 +22 +0.30941171298926207 +32 +1.1950892539563756 +13 +0.06777344544969494 +23 +0.30941171298926207 +33 +1.1950892539563756 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.03977877210196379 +20 +0.18090139708368969 +30 +1.3289526107702627 +11 +1.7763568394002505e-15 +21 +0.25860414708055923 +31 +1.2708326549933042 +12 +1.7763568394002505e-15 +22 +0.182860746043627 +32 +1.328952610770256 +13 +1.7763568394002505e-15 +23 +0.182860746043627 +33 +1.328952610770256 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.03213810108186088 +20 +0.09415736007026898 +30 +1.3654883423488011 +11 +1.7763568394002505e-15 +21 +0.182860746043627 +31 +1.328952610770256 +12 +1.7763568394002505e-15 +22 +0.09465568735549279 +32 +1.3654883423487965 +13 +1.7763568394002505e-15 +23 +0.09465568735549279 +33 +1.3654883423487965 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.31672410285751074 +30 +1.1950892539563733 +11 +0.0862196570520593 +21 +0.3424202262257874 +31 +1.1068841952682413 +12 +1.7763568394002505e-15 +22 +0.3532598344360507 +32 +1.1068841952682391 +13 +1.7763568394002505e-15 +23 +0.3532598344360507 +33 +1.1068841952682391 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.20151409472026383 +20 +0.06693167840694275 +30 +1.2708326549933064 +11 +0.13856428289474554 +21 +0.09143037302181356 +31 +1.3289526107702583 +12 +0.15114170849065778 +22 +0.04732784367774656 +32 +1.3289526107702583 +13 +0.15114170849065778 +23 +0.04732784367774656 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.13856428289474554 +20 +0.09143037302181356 +30 +1.3289526107702583 +11 +0.20151409472026383 +21 +0.06693167840694275 +31 +1.2708326549933064 +12 +0.18372692886278563 +22 +0.12930207354027978 +32 +1.2708326549933064 +13 +0.18372692886278563 +23 +0.12930207354027978 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.029532010486047477 +20 +2.7755575615628914e-16 +30 +1.37795 +11 +-0.08197422986253194 +21 +0.047327843677746395 +31 +1.3654883423487965 +12 +-0.09143037302181262 +22 +0.024498694614871808 +32 +1.3654883423487965 +13 +-0.09143037302181262 +23 +0.024498694614871808 +33 +1.3654883423487965 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.08597126774640212 +20 +0.04732784367774656 +30 +1.3654883423487987 +11 +0.11855648811852992 +21 +0.12930207354027978 +31 +1.3289526107702583 +12 +0.07561447106922731 +22 +0.06693167840694275 +32 +1.3654883423487987 +13 +0.07561447106922731 +23 +0.06693167840694275 +33 +1.3654883423487987 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.11855648811852992 +20 +0.12930207354027978 +30 +1.3289526107702583 +11 +0.08597126774640212 +21 +0.04732784367774656 +31 +1.3654883423487987 +12 +0.13856428289474554 +22 +0.09143037302181356 +32 +1.3289526107702583 +13 +0.13856428289474554 +23 +0.09143037302181356 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.13856428289474554 +20 +0.09143037302181356 +30 +1.3289526107702583 +11 +0.15543163413708405 +21 +0.1828607460436268 +31 +1.2708326549933064 +12 +0.11855648811852992 +22 +0.12930207354027978 +32 +1.3289526107702583 +13 +0.11855648811852992 +23 +0.12930207354027978 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.15543163413708405 +20 +0.1828607460436268 +30 +1.2708326549933064 +11 +0.13856428289474554 +21 +0.09143037302181356 +31 +1.3289526107702583 +12 +0.18372692886278563 +22 +0.12930207354027978 +32 +1.2708326549933064 +13 +0.18372692886278563 +23 +0.12930207354027978 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.08597126774640212 +20 +0.04732784367774656 +30 +1.3654883423487987 +11 +0.07561447106922731 +21 +0.06693167840694275 +31 +1.3654883423487987 +12 +0.029532010486047477 +22 +2.7755575615628914e-16 +32 +1.37795 +13 +0.029532010486047477 +23 +2.7755575615628914e-16 +33 +1.37795 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.07561447106922731 +20 +0.06693167840694275 +30 +1.3654883423487987 +11 +0.06211723085817539 +21 +0.08197422986253433 +31 +1.3654883423487987 +12 +0.029532010486047477 +22 +2.7755575615628914e-16 +32 +1.37795 +13 +0.029532010486047477 +23 +2.7755575615628914e-16 +33 +1.37795 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.07561447106922731 +20 +0.06693167840694275 +30 +1.3654883423487987 +11 +0.09248182231156576 +21 +0.1583620514287558 +31 +1.3289526107702583 +12 +0.06211723085817539 +22 +0.08197422986253433 +32 +1.3654883423487987 +13 +0.06211723085817539 +23 +0.08197422986253433 +33 +1.3654883423487987 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.09248182231156576 +20 +0.1583620514287558 +30 +1.3289526107702583 +11 +0.07561447106922731 +21 +0.06693167840694275 +31 +1.3654883423487987 +12 +0.11855648811852992 +22 +0.12930207354027978 +32 +1.3289526107702583 +13 +0.11855648811852992 +23 +0.12930207354027978 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.09470245123030319 +20 +3.885780586188048e-16 +30 +1.3654883423487987 +11 +0.09248182231156576 +21 +0.024498694614871863 +31 +1.3654883423487987 +12 +0.029532010486047477 +22 +2.7755575615628914e-16 +32 +1.37795 +13 +0.029532010486047477 +23 +2.7755575615628914e-16 +33 +1.37795 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.11855648811852992 +20 +0.12930207354027978 +30 +1.3289526107702583 +11 +0.11855648811852992 +21 +0.22395776089577168 +31 +1.2708326549933064 +12 +0.09248182231156576 +22 +0.1583620514287558 +32 +1.3289526107702583 +13 +0.09248182231156576 +23 +0.1583620514287558 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.11855648811852992 +20 +0.22395776089577168 +30 +1.2708326549933064 +11 +0.11855648811852992 +21 +0.12930207354027978 +31 +1.3289526107702583 +12 +0.15543163413708405 +22 +0.1828607460436268 +32 +1.2708326549933064 +13 +0.15543163413708405 +23 +0.1828607460436268 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.2927773222601686 +30 +1.1435553817691761 +11 +0.13856428289474443 +21 +0.2742911190654399 +31 +1.1950892539563733 +12 +0.14591265330279146 +22 +0.28442212939005906 +32 +1.159696374922908 +13 +0.14591265330279146 +23 +0.28442212939005906 +33 +1.159696374922908 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.09143037302181262 +20 +0.024498694614871808 +30 +1.3654883423487965 +11 +-0.15836205142875398 +21 +0.09143037302181356 +31 +1.328952610770256 +12 +-0.1766299172180231 +22 +0.04732784367774656 +32 +1.328952610770256 +13 +-0.1766299172180231 +23 +0.04732784367774656 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.15836205142875398 +20 +0.09143037302181356 +30 +1.328952610770256 +11 +-0.09143037302181262 +21 +0.024498694614871808 +31 +1.3654883423487965 +12 +-0.08197422986253194 +22 +0.047327843677746395 +32 +1.3654883423487965 +13 +-0.08197422986253194 +23 +0.047327843677746395 +33 +1.3654883423487965 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.06211723085817539 +20 +0.08197422986253433 +30 +1.3654883423487987 +11 +0.04639936172838599 +21 +0.09143037302181423 +31 +1.3654883423487987 +12 +0.029532010486047477 +22 +2.7755575615628914e-16 +32 +1.37795 +13 +0.029532010486047477 +23 +2.7755575615628914e-16 +33 +1.37795 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.15836205142875398 +20 +0.09143037302181356 +30 +1.328952610770256 +11 +-0.18286074604362482 +21 +0.18286074604362668 +31 +1.2708326549933042 +12 +-0.22395776089577035 +22 +0.12930207354027978 +32 +1.2708326549933042 +13 +-0.22395776089577035 +23 +0.12930207354027978 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.18286074604362482 +20 +0.18286074604362668 +30 +1.2708326549933042 +11 +-0.15836205142875398 +21 +0.09143037302181356 +31 +1.328952610770256 +12 +-0.12930207354027806 +22 +0.12930207354027967 +32 +1.328952610770256 +13 +-0.12930207354027806 +23 +0.12930207354027967 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.06211723085817539 +20 +0.08197422986253433 +30 +1.3654883423487987 +11 +0.06211723085817539 +21 +0.176629917218026 +31 +1.3289526107702583 +12 +0.04639936172838599 +22 +0.09143037302181423 +32 +1.3654883423487987 +13 +0.04639936172838599 +23 +0.09143037302181423 +33 +1.3654883423487987 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.06211723085817539 +20 +0.176629917218026 +30 +1.3289526107702583 +11 +0.06211723085817539 +21 +0.08197422986253433 +31 +1.3654883423487987 +12 +0.09248182231156576 +22 +0.1583620514287558 +32 +1.3289526107702583 +13 +0.09248182231156576 +23 +0.1583620514287558 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.1766299172180231 +20 +0.04732784367774656 +30 +1.328952610770256 +11 +-0.22395776089577035 +21 +0.12930207354027978 +31 +1.2708326549933042 +12 +-0.24979242445056726 +22 +0.06693167840694259 +32 +1.2708326549933042 +13 +-0.24979242445056726 +23 +0.06693167840694259 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.22395776089577035 +20 +0.12930207354027978 +30 +1.2708326549933042 +11 +-0.1766299172180231 +21 +0.04732784367774656 +31 +1.328952610770256 +12 +-0.15836205142875398 +22 +0.09143037302181356 +32 +1.328952610770256 +13 +-0.15836205142875398 +23 +0.09143037302181356 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.07561447106922731 +20 +0.24979242445056904 +30 +1.2708326549933064 +11 +0.13856428289474443 +21 +0.2742911190654399 +31 +1.1950892539563733 +12 +0.08597126774640101 +22 +0.305931990758305 +32 +1.1950892539563733 +13 +0.08597126774640101 +23 +0.305931990758305 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.13856428289474443 +20 +0.2742911190654399 +30 +1.1950892539563733 +11 +0.07561447106922731 +21 +0.24979242445056904 +31 +1.2708326549933064 +12 +0.11855648811852992 +22 +0.22395776089577168 +32 +1.2708326549933064 +13 +0.11855648811852992 +23 +0.22395776089577168 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.09248182231156576 +20 +0.1583620514287558 +30 +1.3289526107702583 +11 +0.07561447106922731 +21 +0.24979242445056904 +31 +1.2708326549933064 +12 +0.06211723085817539 +22 +0.176629917218026 +32 +1.3289526107702583 +13 +0.06211723085817539 +23 +0.176629917218026 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.07561447106922731 +20 +0.24979242445056904 +30 +1.2708326549933064 +11 +0.09248182231156576 +21 +0.1583620514287558 +31 +1.3289526107702583 +12 +0.11855648811852992 +22 +0.22395776089577168 +32 +1.2708326549933064 +13 +0.11855648811852992 +23 +0.22395776089577168 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.18286074604362482 +20 +0.18286074604362668 +30 +1.2708326549933042 +11 +-0.2742911190654381 +21 +0.15836205142875548 +31 +1.1950892539563733 +12 +-0.22395776089577035 +22 +0.12930207354027978 +32 +1.2708326549933042 +13 +-0.22395776089577035 +23 +0.12930207354027978 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.2742911190654381 +20 +0.15836205142875548 +30 +1.1950892539563733 +11 +-0.18286074604362482 +21 +0.18286074604362668 +31 +1.2708326549933042 +12 +-0.22395776089576924 +22 +0.22395776089577124 +32 +1.1950892539563733 +13 +-0.22395776089576924 +23 +0.22395776089577124 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14628261733798686 +20 +0.28490260216305374 +30 +1.2467080400132249 +11 +0.17760884479078798 +21 +0.2307763099490301 +31 +1.1950892539563756 +12 +0.1907104937441224 +22 +0.2086017627515685 +32 +1.3052557332991035 +13 +0.1907104937441224 +23 +0.2086017627515685 +33 +1.3052557332991035 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.09327307500958115 +20 +0.34551182473544184 +30 +1.0731565574038182 +11 +0.1060148804133424 +21 +0.3464540804912427 +31 +1.0122285079127469 +12 +0.09465568735549401 +22 +0.353259834436051 +32 +1.0122285079127469 +13 +0.09465568735549401 +23 +0.353259834436051 +33 +1.0122285079127469 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.22395776089576924 +20 +0.22395776089577124 +30 +1.1950892539563733 +11 +-0.3059319907583018 +21 +0.17662991721802546 +31 +1.1068841952682391 +12 +-0.2742911190654381 +22 +0.15836205142875548 +32 +1.1950892539563733 +13 +-0.2742911190654381 +23 +0.15836205142875548 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.3059319907583018 +20 +0.17662991721802546 +30 +1.1068841952682391 +11 +-0.22395776089576924 +21 +0.22395776089577124 +31 +1.1950892539563733 +12 +-0.24979242445056726 +22 +0.24979242445056848 +32 +1.1068841952682391 +13 +-0.24979242445056726 +23 +0.24979242445056848 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.08197422986253194 +20 +0.047327843677746395 +30 +1.3654883423487965 +11 +-0.12930207354027806 +21 +0.12930207354027967 +31 +1.328952610770256 +12 +-0.15836205142875398 +22 +0.09143037302181356 +32 +1.328952610770256 +13 +-0.15836205142875398 +23 +0.09143037302181356 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.12930207354027806 +20 +0.12930207354027967 +30 +1.328952610770256 +11 +-0.08197422986253194 +21 +0.047327843677746395 +31 +1.3654883423487965 +12 +-0.0669316784069407 +22 +0.06693167840694259 +32 +1.3654883423487965 +13 +-0.0669316784069407 +23 +0.06693167840694259 +33 +1.3654883423487965 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.03213810108186088 +20 +0.09415736007026898 +30 +1.3654883423488011 +11 +1.7763568394002505e-15 +21 +0.09465568735549279 +31 +1.3654883423487965 +12 +0.029532010486047477 +22 +2.7755575615628914e-16 +32 +1.37795 +13 +0.029532010486047477 +23 +2.7755575615628914e-16 +33 +1.37795 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.029532010486047477 +20 +2.7755575615628914e-16 +30 +1.37795 +11 +1.7763568394002505e-15 +21 +0.09465568735549279 +31 +1.3654883423487965 +12 +-0.024498694614870198 +22 +0.09143037302181412 +32 +1.3654883423487965 +13 +-0.024498694614870198 +23 +0.09143037302181412 +33 +1.3654883423487965 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.22395776089577035 +20 +0.12930207354027978 +30 +1.2708326549933042 +11 +-0.3059319907583018 +21 +0.081974229862534 +31 +1.1950892539563733 +12 +-0.24979242445056726 +22 +0.06693167840694259 +32 +1.2708326549933042 +13 +-0.24979242445056726 +23 +0.06693167840694259 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.3059319907583018 +20 +0.081974229862534 +30 +1.1950892539563733 +11 +-0.22395776089577035 +21 +0.12930207354027978 +31 +1.2708326549933042 +12 +-0.2742911190654381 +22 +0.15836205142875548 +32 +1.1950892539563733 +13 +-0.2742911190654381 +23 +0.15836205142875548 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.024498694614870198 +20 +0.09143037302181412 +30 +1.3654883423487965 +11 +1.7763568394002505e-15 +21 +0.182860746043627 +31 +1.328952610770256 +12 +-0.04732784367774434 +22 +0.1766299172180259 +32 +1.328952610770256 +13 +-0.04732784367774434 +23 +0.1766299172180259 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.182860746043627 +30 +1.328952610770256 +11 +-0.024498694614870198 +21 +0.09143037302181412 +31 +1.3654883423487965 +12 +1.7763568394002505e-15 +22 +0.09465568735549279 +32 +1.3654883423487965 +13 +1.7763568394002505e-15 +23 +0.09465568735549279 +33 +1.3654883423487965 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.04732784367774434 +20 +0.1766299172180259 +30 +1.328952610770256 +11 +1.7763568394002505e-15 +21 +0.25860414708055923 +31 +1.2708326549933042 +12 +-0.06693167840693953 +22 +0.24979242445056893 +32 +1.2708326549933042 +13 +-0.06693167840693953 +23 +0.24979242445056893 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.25860414708055923 +30 +1.2708326549933042 +11 +-0.04732784367774434 +21 +0.1766299172180259 +31 +1.328952610770256 +12 +1.7763568394002505e-15 +22 +0.182860746043627 +32 +1.328952610770256 +13 +1.7763568394002505e-15 +23 +0.182860746043627 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.06693167840693953 +20 +0.24979242445056893 +30 +1.2708326549933042 +11 +1.7763568394002505e-15 +21 +0.31672410285751074 +31 +1.1950892539563733 +12 +-0.08197422986253078 +22 +0.3059319907583048 +32 +1.1950892539563733 +13 +-0.08197422986253078 +23 +0.3059319907583048 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.31672410285751074 +30 +1.1950892539563733 +11 +-0.06693167840693953 +21 +0.24979242445056893 +31 +1.2708326549933042 +12 +1.7763568394002505e-15 +22 +0.25860414708055923 +32 +1.2708326549933042 +13 +1.7763568394002505e-15 +23 +0.25860414708055923 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.08197422986253078 +20 +0.3059319907583048 +30 +1.1950892539563733 +11 +1.7763568394002505e-15 +21 +0.3532598344360507 +31 +1.1068841952682391 +12 +-0.0914303730218115 +22 +0.3412227974723816 +32 +1.1068841952682391 +13 +-0.0914303730218115 +23 +0.3412227974723816 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.3532598344360507 +30 +1.1068841952682391 +11 +-0.08197422986253078 +21 +0.3059319907583048 +31 +1.1950892539563733 +12 +1.7763568394002505e-15 +22 +0.31672410285751074 +32 +1.1950892539563733 +13 +1.7763568394002505e-15 +23 +0.31672410285751074 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.0914303730218115 +20 +0.3412227974723816 +30 +1.1068841952682391 +11 +1.7763568394002505e-15 +21 +0.365721492087253 +31 +1.0122285079127469 +12 +-0.09465568735549051 +22 +0.3532598344360508 +32 +1.0122285079127469 +13 +-0.09465568735549051 +23 +0.3532598344360508 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.365721492087253 +30 +1.0122285079127469 +11 +-0.0914303730218115 +21 +0.3412227974723816 +31 +1.1068841952682391 +12 +1.7763568394002505e-15 +22 +0.3532598344360507 +32 +1.1068841952682391 +13 +1.7763568394002505e-15 +23 +0.3532598344360507 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.2742911190654381 +20 +0.15836205142875548 +30 +1.1950892539563733 +11 +-0.34122279747237944 +21 +0.09143037302181367 +31 +1.1068841952682391 +12 +-0.3059319907583018 +22 +0.081974229862534 +32 +1.1950892539563733 +13 +-0.3059319907583018 +23 +0.081974229862534 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.34122279747237944 +20 +0.09143037302181367 +30 +1.1068841952682391 +11 +-0.2742911190654381 +21 +0.15836205142875548 +31 +1.1950892539563733 +12 +-0.3059319907583018 +22 +0.17662991721802546 +32 +1.1068841952682391 +13 +-0.3059319907583018 +23 +0.17662991721802546 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.09248182231156576 +20 +0.024498694614871863 +30 +1.3654883423487987 +11 +0.08597126774640212 +21 +0.04732784367774656 +31 +1.3654883423487987 +12 +0.029532010486047477 +22 +2.7755575615628914e-16 +32 +1.37795 +13 +0.029532010486047477 +23 +2.7755575615628914e-16 +33 +1.37795 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.24979242445056726 +20 +0.24979242445056848 +30 +1.1068841952682391 +11 +-0.3167241028575086 +21 +0.18286074604362668 +31 +1.0122285079127469 +12 +-0.3059319907583018 +22 +0.17662991721802546 +32 +1.1068841952682391 +13 +-0.3059319907583018 +23 +0.17662991721802546 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.3167241028575086 +20 +0.18286074604362668 +30 +1.0122285079127469 +11 +-0.24979242445056726 +21 +0.24979242445056848 +31 +1.1068841952682391 +12 +-0.2586041470805568 +22 +0.2586041470805588 +32 +1.0122285079127469 +13 +-0.2586041470805568 +23 +0.2586041470805588 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.15836205142875287 +20 +0.27429111906544 +30 +1.1950892539563733 +11 +-0.0914303730218115 +21 +0.3412227974723816 +31 +1.1068841952682391 +12 +-0.1766299172180231 +22 +0.305931990758305 +32 +1.1068841952682391 +13 +-0.1766299172180231 +23 +0.305931990758305 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.0914303730218115 +20 +0.3412227974723816 +30 +1.1068841952682391 +11 +-0.15836205142875287 +21 +0.27429111906544 +31 +1.1950892539563733 +12 +-0.08197422986253078 +22 +0.3059319907583048 +32 +1.1950892539563733 +13 +-0.08197422986253078 +23 +0.3059319907583048 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.1766299172180231 +20 +0.305931990758305 +30 +1.1068841952682391 +11 +-0.09465568735549051 +21 +0.3532598344360508 +31 +1.0122285079127469 +12 +-0.1828607460436237 +22 +0.31672410285751096 +32 +1.0122285079127469 +13 +-0.1828607460436237 +23 +0.31672410285751096 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.09465568735549051 +20 +0.3532598344360508 +30 +1.0122285079127469 +11 +-0.1766299172180231 +21 +0.305931990758305 +31 +1.1068841952682391 +12 +-0.0914303730218115 +22 +0.3412227974723816 +32 +1.1068841952682391 +13 +-0.0914303730218115 +23 +0.3412227974723816 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.029532010486047477 +20 +2.7755575615628914e-16 +30 +1.37795 +11 +-0.024498694614870198 +21 +0.09143037302181412 +31 +1.3654883423487965 +12 +-0.04732784367774434 +22 +0.08197422986253444 +32 +1.3654883423487965 +13 +-0.04732784367774434 +23 +0.08197422986253444 +33 +1.3654883423487965 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.04732784367774434 +20 +0.08197422986253444 +30 +1.3654883423487965 +11 +-0.04732784367774434 +21 +0.1766299172180259 +31 +1.328952610770256 +12 +-0.0914303730218115 +22 +0.15836205142875603 +32 +1.328952610770256 +13 +-0.0914303730218115 +23 +0.15836205142875603 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.04732784367774434 +20 +0.1766299172180259 +30 +1.328952610770256 +11 +-0.04732784367774434 +21 +0.08197422986253444 +31 +1.3654883423487965 +12 +-0.024498694614870198 +22 +0.09143037302181412 +32 +1.3654883423487965 +13 +-0.024498694614870198 +23 +0.09143037302181412 +33 +1.3654883423487965 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.0914303730218115 +20 +0.15836205142875603 +30 +1.328952610770256 +11 +-0.06693167840693953 +21 +0.24979242445056893 +31 +1.2708326549933042 +12 +-0.12930207354027695 +22 +0.2239577608957718 +32 +1.2708326549933042 +13 +-0.12930207354027695 +23 +0.2239577608957718 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.06693167840693953 +20 +0.24979242445056893 +30 +1.2708326549933042 +11 +-0.0914303730218115 +21 +0.15836205142875603 +31 +1.328952610770256 +12 +-0.04732784367774434 +22 +0.1766299172180259 +32 +1.328952610770256 +13 +-0.04732784367774434 +23 +0.1766299172180259 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.029532010486047477 +20 +2.7755575615628914e-16 +30 +1.37795 +11 +-0.04732784367774434 +21 +0.08197422986253444 +31 +1.3654883423487965 +12 +-0.0669316784069407 +22 +0.06693167840694259 +32 +1.3654883423487965 +13 +-0.0669316784069407 +23 +0.06693167840694259 +33 +1.3654883423487965 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.12930207354027695 +20 +0.2239577608957718 +30 +1.2708326549933042 +11 +-0.08197422986253078 +21 +0.3059319907583048 +31 +1.1950892539563733 +12 +-0.15836205142875287 +22 +0.27429111906544 +32 +1.1950892539563733 +13 +-0.15836205142875287 +23 +0.27429111906544 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.08197422986253078 +20 +0.3059319907583048 +30 +1.1950892539563733 +11 +-0.12930207354027695 +21 +0.2239577608957718 +31 +1.2708326549933042 +12 +-0.06693167840693953 +22 +0.24979242445056893 +32 +1.2708326549933042 +13 +-0.06693167840693953 +23 +0.24979242445056893 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.24979242445056726 +20 +0.06693167840694259 +30 +1.2708326549933042 +11 +-0.3167241028575086 +21 +3.885780586188048e-16 +31 +1.1950892539563733 +12 +-0.2586041470805568 +22 +3.885780586188048e-16 +32 +1.2708326549933042 +13 +-0.2586041470805568 +23 +3.885780586188048e-16 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.3167241028575086 +20 +3.885780586188048e-16 +30 +1.1950892539563733 +11 +-0.24979242445056726 +21 +0.06693167840694259 +31 +1.2708326549933042 +12 +-0.3059319907583018 +22 +0.081974229862534 +32 +1.1950892539563733 +13 +-0.3059319907583018 +23 +0.081974229862534 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.0669316784069407 +20 +0.06693167840694259 +30 +1.3654883423487965 +11 +-0.0914303730218115 +21 +0.15836205142875603 +31 +1.328952610770256 +12 +-0.12930207354027806 +22 +0.12930207354027967 +32 +1.328952610770256 +13 +-0.12930207354027806 +23 +0.12930207354027967 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.0914303730218115 +20 +0.15836205142875603 +30 +1.328952610770256 +11 +-0.0669316784069407 +21 +0.06693167840694259 +31 +1.3654883423487965 +12 +-0.04732784367774434 +22 +0.08197422986253444 +32 +1.3654883423487965 +13 +-0.04732784367774434 +23 +0.08197422986253444 +33 +1.3654883423487965 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.09248182231156576 +20 +0.024498694614871863 +30 +1.3654883423487987 +11 +0.13856428289474554 +21 +0.09143037302181356 +31 +1.3289526107702583 +12 +0.08597126774640212 +22 +0.04732784367774656 +32 +1.3654883423487987 +13 +0.08597126774640212 +23 +0.04732784367774656 +33 +1.3654883423487987 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.13856428289474554 +20 +0.09143037302181356 +30 +1.3289526107702583 +11 +0.09248182231156576 +21 +0.024498694614871863 +31 +1.3654883423487987 +12 +0.15114170849065778 +22 +0.04732784367774656 +32 +1.3289526107702583 +13 +0.15114170849065778 +23 +0.04732784367774656 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.12930207354027806 +20 +0.12930207354027967 +30 +1.328952610770256 +11 +-0.12930207354027695 +21 +0.2239577608957718 +31 +1.2708326549933042 +12 +-0.18286074604362482 +22 +0.18286074604362668 +32 +1.2708326549933042 +13 +-0.18286074604362482 +23 +0.18286074604362668 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.12930207354027695 +20 +0.2239577608957718 +30 +1.2708326549933042 +11 +-0.12930207354027806 +21 +0.12930207354027967 +31 +1.328952610770256 +12 +-0.0914303730218115 +22 +0.15836205142875603 +32 +1.328952610770256 +13 +-0.0914303730218115 +23 +0.15836205142875603 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.18286074604362482 +20 +0.18286074604362668 +30 +1.2708326549933042 +11 +-0.15836205142875287 +21 +0.27429111906544 +31 +1.1950892539563733 +12 +-0.22395776089576924 +22 +0.22395776089577124 +32 +1.1950892539563733 +13 +-0.22395776089576924 +23 +0.22395776089577124 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.15836205142875287 +20 +0.27429111906544 +30 +1.1950892539563733 +11 +-0.18286074604362482 +21 +0.18286074604362668 +31 +1.2708326549933042 +12 +-0.12930207354027695 +22 +0.2239577608957718 +32 +1.2708326549933042 +13 +-0.12930207354027695 +23 +0.2239577608957718 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.22395776089576924 +20 +0.22395776089577124 +30 +1.1950892539563733 +11 +-0.1766299172180231 +21 +0.305931990758305 +31 +1.1068841952682391 +12 +-0.24979242445056726 +22 +0.24979242445056848 +32 +1.1068841952682391 +13 +-0.24979242445056726 +23 +0.24979242445056848 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.1766299172180231 +20 +0.305931990758305 +30 +1.1068841952682391 +11 +-0.22395776089576924 +21 +0.22395776089577124 +31 +1.1950892539563733 +12 +-0.15836205142875287 +22 +0.27429111906544 +32 +1.1950892539563733 +13 +-0.15836205142875287 +23 +0.27429111906544 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.029532010486047477 +20 +2.7755575615628914e-16 +30 +1.37795 +11 +-0.0669316784069407 +21 +0.06693167840694259 +31 +1.3654883423487965 +12 +-0.08197422986253194 +22 +0.047327843677746395 +32 +1.3654883423487965 +13 +-0.08197422986253194 +23 +0.047327843677746395 +33 +1.3654883423487965 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.24979242445056726 +20 +0.24979242445056848 +30 +1.1068841952682391 +11 +-0.1828607460436237 +21 +0.31672410285751096 +31 +1.0122285079127469 +12 +-0.2586041470805568 +22 +0.2586041470805588 +32 +1.0122285079127469 +13 +-0.2586041470805568 +23 +0.2586041470805588 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.1828607460436237 +20 +0.31672410285751096 +30 +1.0122285079127469 +11 +-0.24979242445056726 +21 +0.24979242445056848 +31 +1.1068841952682391 +12 +-0.1766299172180231 +22 +0.305931990758305 +32 +1.1068841952682391 +13 +-0.1766299172180231 +23 +0.305931990758305 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.20151409472026383 +20 +0.06693167840694275 +30 +1.2708326549933064 +11 +0.15543163413708405 +21 +3.885780586188048e-16 +31 +1.3289526107702583 +12 +0.20758096575101137 +22 +2.7755575615628914e-16 +32 +1.2708326549933064 +13 +0.20758096575101137 +23 +2.7755575615628914e-16 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.15543163413708405 +20 +3.885780586188048e-16 +30 +1.3289526107702583 +11 +0.20151409472026383 +21 +0.06693167840694275 +31 +1.2708326549933064 +12 +0.15114170849065778 +22 +0.04732784367774656 +32 +1.3289526107702583 +13 +0.15114170849065778 +23 +0.04732784367774656 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.3059319907583018 +20 +0.17662991721802546 +30 +1.1068841952682391 +11 +-0.3532598344360491 +21 +0.09465568735549246 +31 +1.0122285079127469 +12 +-0.34122279747237944 +22 +0.09143037302181367 +32 +1.1068841952682391 +13 +-0.34122279747237944 +23 +0.09143037302181367 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.3532598344360491 +20 +0.09465568735549246 +30 +1.0122285079127469 +11 +-0.3059319907583018 +21 +0.17662991721802546 +31 +1.1068841952682391 +12 +-0.3167241028575086 +22 +0.18286074604362668 +32 +1.0122285079127469 +13 +-0.3167241028575086 +23 +0.18286074604362668 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.029532010486047477 +20 +2.7755575615628914e-16 +30 +1.37795 +11 +-0.09143037302181262 +21 +0.024498694614871808 +31 +1.3654883423487965 +12 +-0.09465568735549051 +22 +3.3306690738754696e-16 +32 +1.3654883423487965 +13 +-0.09465568735549051 +23 +3.3306690738754696e-16 +33 +1.3654883423487965 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.09465568735549051 +20 +3.3306690738754696e-16 +30 +1.3654883423487965 +11 +-0.1766299172180231 +21 +0.04732784367774656 +31 +1.328952610770256 +12 +-0.18286074604362482 +22 +3.885780586188048e-16 +32 +1.328952610770256 +13 +-0.18286074604362482 +23 +3.885780586188048e-16 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.1766299172180231 +20 +0.04732784367774656 +30 +1.328952610770256 +11 +-0.09465568735549051 +21 +3.3306690738754696e-16 +31 +1.3654883423487965 +12 +-0.09143037302181262 +22 +0.024498694614871808 +32 +1.3654883423487965 +13 +-0.09143037302181262 +23 +0.024498694614871808 +33 +1.3654883423487965 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.18286074604362482 +20 +3.885780586188048e-16 +30 +1.328952610770256 +11 +-0.24979242445056726 +21 +0.06693167840694259 +31 +1.2708326549933042 +12 +-0.2586041470805568 +22 +3.885780586188048e-16 +32 +1.2708326549933042 +13 +-0.2586041470805568 +23 +3.885780586188048e-16 +33 +1.2708326549933042 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.24979242445056726 +20 +0.06693167840694259 +30 +1.2708326549933042 +11 +-0.18286074604362482 +21 +3.885780586188048e-16 +31 +1.328952610770256 +12 +-0.1766299172180231 +22 +0.04732784367774656 +32 +1.328952610770256 +13 +-0.1766299172180231 +23 +0.04732784367774656 +33 +1.328952610770256 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.3059319907583018 +20 +0.081974229862534 +30 +1.1950892539563733 +11 +-0.3532598344360491 +21 +3.885780586188048e-16 +31 +1.1068841952682391 +12 +-0.3167241028575086 +22 +3.885780586188048e-16 +32 +1.1950892539563733 +13 +-0.3167241028575086 +23 +3.885780586188048e-16 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.3532598344360491 +20 +3.885780586188048e-16 +30 +1.1068841952682391 +11 +-0.3059319907583018 +21 +0.081974229862534 +31 +1.1950892539563733 +12 +-0.34122279747237944 +22 +0.09143037302181367 +32 +1.1068841952682391 +13 +-0.34122279747237944 +23 +0.09143037302181367 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.34122279747237944 +20 +0.09143037302181367 +30 +1.1068841952682391 +11 +-0.3657214920872503 +21 +3.885780586188048e-16 +31 +1.0122285079127469 +12 +-0.3532598344360491 +22 +3.885780586188048e-16 +32 +1.1068841952682391 +13 +-0.3532598344360491 +23 +3.885780586188048e-16 +33 +1.1068841952682391 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.3657214920872503 +20 +3.885780586188048e-16 +30 +1.0122285079127469 +11 +-0.34122279747237944 +21 +0.09143037302181367 +31 +1.1068841952682391 +12 +-0.3532598344360491 +22 +0.09465568735549246 +32 +1.0122285079127469 +13 +-0.3532598344360491 +23 +0.09465568735549246 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.09470245123030319 +20 +3.885780586188048e-16 +30 +1.3654883423487987 +11 +0.15114170849065778 +21 +0.04732784367774656 +31 +1.3289526107702583 +12 +0.09248182231156576 +22 +0.024498694614871863 +32 +1.3654883423487987 +13 +0.09248182231156576 +23 +0.024498694614871863 +33 +1.3654883423487987 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.15114170849065778 +20 +0.04732784367774656 +30 +1.3289526107702583 +11 +0.09470245123030319 +21 +3.885780586188048e-16 +31 +1.3654883423487987 +12 +0.15543163413708405 +22 +3.885780586188048e-16 +32 +1.3289526107702583 +13 +0.15543163413708405 +23 +3.885780586188048e-16 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.06211723085817539 +20 +0.176629917218026 +30 +1.3289526107702583 +11 +0.051933324443145024 +21 +0.25432064826909484 +31 +1.270832654993302 +12 +0.03977877210196379 +22 +0.18090139708368969 +32 +1.3289526107702627 +13 +0.03977877210196379 +23 +0.18090139708368969 +33 +1.3289526107702627 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.051933324443145024 +20 +0.25432064826909484 +30 +1.270832654993302 +11 +0.06211723085817539 +21 +0.176629917218026 +31 +1.3289526107702583 +12 +0.07561447106922731 +22 +0.24979242445056904 +32 +1.2708326549933064 +13 +0.07561447106922731 +23 +0.24979242445056904 +33 +1.2708326549933064 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.06777344544969494 +20 +0.30941171298926207 +30 +1.1950892539563756 +11 +0.09248182231156576 +21 +0.34122279747238193 +31 +1.1068841952682413 +12 +0.0862196570520593 +22 +0.3424202262257874 +32 +1.1068841952682413 +13 +0.0862196570520593 +23 +0.3424202262257874 +33 +1.1068841952682413 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.09248182231156576 +20 +0.34122279747238193 +30 +1.1068841952682413 +11 +0.06777344544969494 +21 +0.30941171298926207 +31 +1.1950892539563756 +12 +0.08597126774640101 +22 +0.305931990758305 +32 +1.1950892539563733 +13 +0.08597126774640101 +23 +0.305931990758305 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.1060148804133424 +20 +0.3464540804912427 +30 +1.0122285079127469 +11 +0.1110862308312226 +21 +0.4145794574834395 +31 +0.0 +12 +0.09465568735549401 +22 +0.353259834436051 +32 +1.0122285079127469 +13 +0.09465568735549401 +23 +0.353259834436051 +33 +1.0122285079127469 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.06777344544969494 +20 +0.30941171298926207 +30 +1.1950892539563756 +11 +0.07561447106922731 +21 +0.24979242445056904 +31 +1.2708326549933064 +12 +0.08597126774640101 +22 +0.305931990758305 +32 +1.1950892539563733 +13 +0.08597126774640101 +23 +0.305931990758305 +33 +1.1950892539563733 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.07561447106922731 +20 +0.24979242445056904 +30 +1.2708326549933064 +11 +0.06777344544969494 +21 +0.30941171298926207 +31 +1.1950892539563756 +12 +0.051933324443145024 +22 +0.25432064826909484 +32 +1.270832654993302 +13 +0.051933324443145024 +23 +0.25432064826909484 +33 +1.270832654993302 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.16148066621521584 +20 +0.30464032797763685 +30 +0.9121263906088999 +11 +0.14628261733798686 +21 +0.3305275449199734 +31 +0.9336709982866838 +12 +0.14628261733798686 +22 +0.2849026021630544 +32 +0.9336709982866838 +13 +0.14628261733798686 +23 +0.2849026021630544 +33 +0.9336709982866838 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14628261733798686 +20 +0.3305275449199734 +30 +0.9336709982866838 +11 +0.16148066621521584 +21 +0.30464032797763685 +31 +0.9121263906088999 +12 +0.1624333997344558 +22 +0.32322972405982175 +32 +0.9107758047501918 +13 +0.1624333997344558 +23 +0.32322972405982175 +33 +0.9107758047501918 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.04639936172838599 +20 +0.09143037302181423 +30 +1.3654883423487987 +11 +0.03977877210196379 +21 +0.18090139708368969 +31 +1.3289526107702627 +12 +0.03213810108186088 +22 +0.09415736007026898 +32 +1.3654883423488011 +13 +0.03213810108186088 +23 +0.09415736007026898 +33 +1.3654883423488011 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.03977877210196379 +20 +0.18090139708368969 +30 +1.3289526107702627 +11 +0.04639936172838599 +21 +0.09143037302181423 +31 +1.3654883423487987 +12 +0.06211723085817539 +22 +0.176629917218026 +32 +1.3289526107702583 +13 +0.06211723085817539 +23 +0.176629917218026 +33 +1.3289526107702583 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.04639936172838599 +20 +0.09143037302181423 +30 +1.3654883423487987 +11 +0.03213810108186088 +21 +0.09415736007026898 +31 +1.3654883423488011 +12 +0.029532010486047477 +22 +2.7755575615628914e-16 +32 +1.37795 +13 +0.029532010486047477 +23 +2.7755575615628914e-16 +33 +1.37795 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.09248182231156576 +20 +0.34122279747238193 +30 +1.1068841952682413 +11 +0.09327307500958115 +21 +0.34551182473544184 +31 +1.0731565574038182 +12 +0.0862196570520593 +22 +0.3424202262257874 +32 +1.1068841952682413 +13 +0.0862196570520593 +23 +0.3424202262257874 +33 +1.1068841952682413 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.23066726183653696 +20 +0.24695009092044307 +30 +0.7851554598356051 +11 +0.21831309401632715 +21 +0.21849744483100653 +31 +0.8070247740079369 +12 +0.21954103663658775 +22 +0.21464742440548745 +32 +0.8047207977789652 +13 +0.21954103663658775 +23 +0.21464742440548745 +33 +0.8047207977789652 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.21831309401632715 +20 +0.21849744483100653 +30 +0.8070247740079369 +11 +0.23066726183653696 +21 +0.24695009092044307 +31 +0.7851554598356051 +12 +0.20642658047224793 +22 +0.2386153747599219 +32 +0.8289927497633759 +13 +0.20642658047224793 +23 +0.2386153747599219 +33 +0.8289927497633759 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.20642658047224793 +20 +0.2386153747599219 +30 +0.8289927497633759 +11 +0.23066726183653696 +21 +0.24695009092044307 +31 +0.7851554598356051 +12 +0.214135315851808 +22 +0.2688995990817393 +32 +0.8155912096632217 +13 +0.214135315851808 +23 +0.2688995990817393 +33 +0.8155912096632217 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14628261733798686 +20 +0.28490260216305374 +30 +1.2467080400132249 +11 +0.14591265330279146 +21 +0.28442212939005906 +31 +1.159696374922908 +12 +0.13856428289474443 +22 +0.2742911190654399 +32 +1.1950892539563733 +13 +0.13856428289474443 +23 +0.2742911190654399 +33 +1.1950892539563733 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.41457945748344094 +20 +0.11108623083122104 +30 +0.0 +11 +0.2902821751225073 +21 +0.10111068285304725 +31 +0.67540282766255 +12 +0.296250080065389 +22 +0.05625570433824323 +32 +0.6644157568117056 +13 +0.296250080065389 +23 +0.05625570433824323 +33 +0.6644157568117056 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.1624333997344558 +20 +0.32322972405982175 +30 +0.9107758047501918 +11 +0.17315837194884964 +21 +0.31485375811798544 +31 +0.8910308472281347 +12 +0.30349322665222 +22 +0.303493226652219 +32 +0.0 +13 +0.30349322665222 +23 +0.303493226652219 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.14628261733798686 +20 +0.28490260216305374 +30 +1.2467080400132249 +11 +0.14628261733798686 +21 +0.28490260216305396 +31 +1.0876716112414513 +12 +0.14591265330279146 +22 +0.28442212939005906 +32 +1.159696374922908 +13 +0.14591265330279146 +23 +0.28442212939005906 +33 +1.159696374922908 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14628261733798686 +20 +0.28490260216305396 +30 +1.0876716112414513 +11 +0.14628261733798686 +21 +0.28490260216305374 +31 +1.2467080400132249 +12 +0.15406334402645439 +22 +0.2950074420182055 +32 +1.238954323683159 +13 +0.15406334402645439 +23 +0.2950074420182055 +33 +1.238954323683159 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.14628261733798686 +20 +0.28490260216305396 +30 +1.0876716112414513 +11 +0.15406334402645439 +21 +0.2950074420182055 +31 +1.238954323683159 +12 +0.14628261733798686 +22 +0.2849026021630544 +32 +0.9336709982866838 +13 +0.14628261733798686 +23 +0.2849026021630544 +33 +0.9336709982866838 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.14628261733798686 +20 +0.2849026021630544 +30 +0.9336709982866838 +11 +0.15406334402645439 +21 +0.2950074420182055 +31 +1.238954323683159 +12 +0.16148066621521584 +22 +0.30464032797763685 +32 +0.9121263906088999 +13 +0.16148066621521584 +23 +0.30464032797763685 +33 +0.9121263906088999 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.16148066621521584 +20 +0.30464032797763685 +30 +0.9121263906088999 +11 +0.15406334402645439 +21 +0.2950074420182055 +31 +1.238954323683159 +12 +0.1648391920368235 +22 +0.309002049823879 +32 +1.2207161957078443 +13 +0.1648391920368235 +23 +0.309002049823879 +33 +1.2207161957078443 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.16148066621521584 +20 +0.30464032797763685 +30 +0.9121263906088999 +11 +0.1648391920368235 +21 +0.309002049823879 +31 +1.2207161957078443 +12 +0.16483919203682462 +22 +0.3090020498238778 +32 +0.9060890011061947 +13 +0.16483919203682462 +23 +0.3090020498238778 +33 +0.9060890011061947 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.37170177284439176 +20 +0.21460211860997003 +30 +0.0 +11 +0.2591667482690694 +21 +0.19321003684080962 +31 +0.7326871515023154 +12 +0.274037280744151 +22 +0.15716672872113313 +32 +0.7053101078903244 +13 +0.274037280744151 +23 +0.15716672872113313 +33 +0.7053101078903244 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.14628261733798686 +20 +0.28490260216305374 +30 +1.2467080400132249 +11 +0.13856428289474443 +21 +0.2742911190654399 +31 +1.1950892539563733 +12 +0.17760884479078798 +22 +0.2307763099490301 +32 +1.1950892539563756 +13 +0.17760884479078798 +23 +0.2307763099490301 +33 +1.1950892539563756 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.37170177284439176 +20 +0.21460211860997003 +30 +0.0 +11 +0.274037280744151 +21 +0.15716672872113313 +31 +0.7053101078903244 +12 +0.41457945748344094 +22 +0.11108623083122104 +32 +0.0 +13 +0.41457945748344094 +23 +0.11108623083122104 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.30349322665222 +20 +0.303493226652219 +30 +0.0 +11 +0.214135315851808 +21 +0.2688995990817393 +31 +0.8155912096632217 +12 +0.23066726183653696 +22 +0.24695009092044307 +32 +0.7851554598356051 +13 +0.23066726183653696 +23 +0.24695009092044307 +33 +0.7851554598356051 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.1624333997344558 +20 +0.32322972405982175 +30 +0.9107758047501918 +11 +0.30349322665222 +21 +0.303493226652219 +31 +0.0 +12 +0.21460211860997136 +22 +0.3717017728443903 +32 +0.0 +13 +0.21460211860997136 +23 +0.3717017728443903 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.30349322665222 +20 +0.303493226652219 +30 +0.0 +11 +0.23066726183653696 +21 +0.24695009092044307 +31 +0.7851554598356051 +12 +0.37170177284439176 +22 +0.21460211860997003 +32 +0.0 +13 +0.37170177284439176 +23 +0.21460211860997003 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.41457945748344094 +20 +0.11108623083122104 +30 +0.0 +11 +0.296250080065389 +21 +0.05625570433824323 +31 +0.6644157568117056 +12 +0.42920423721993983 +22 +2.7755575615628914e-15 +32 +0.0 +13 +0.42920423721993983 +23 +2.7755575615628914e-15 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.3305275449199734 +30 +0.9357778285299473 +11 +0.14591265330279257 +21 +0.30907788121177326 +31 +1.1068841952682413 +12 +0.14628261733798686 +22 +0.2849026021630544 +32 +0.9336709982866838 +13 +0.14628261733798686 +23 +0.2849026021630544 +33 +0.9336709982866838 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.30907788121177326 +30 +1.1068841952682413 +11 +0.14591265330279257 +21 +0.3305275449199734 +31 +0.9357778285299473 +12 +0.14591265330279257 +22 +0.3224508871153656 +32 +1.0122285079127469 +13 +0.14591265330279257 +23 +0.3224508871153656 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.30907788121177326 +30 +1.1068841952682413 +11 +0.14628261733798686 +21 +0.28490260216305396 +31 +1.0876716112414513 +12 +0.14628261733798686 +22 +0.2849026021630544 +32 +0.9336709982866838 +13 +0.14628261733798686 +23 +0.2849026021630544 +33 +0.9336709982866838 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.14628261733798686 +20 +0.3305275449199734 +30 +0.9336709982866838 +11 +0.1624333997344558 +21 +0.32322972405982175 +31 +0.9107758047501918 +12 +0.21460211860997136 +22 +0.3717017728443903 +32 +0.0 +13 +0.21460211860997136 +23 +0.3717017728443903 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.1060148804133424 +20 +0.3464540804912427 +30 +1.0122285079127469 +11 +0.14628261733798686 +21 +0.3305275449199734 +31 +0.9336709982866838 +12 +0.21460211860997136 +22 +0.3717017728443903 +32 +0.0 +13 +0.21460211860997136 +23 +0.3717017728443903 +33 +0.0 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +0.1060148804133424 +20 +0.3464540804912427 +30 +1.0122285079127469 +11 +0.14591265330279257 +21 +0.3305275449199734 +31 +0.9357778285299473 +12 +0.14628261733798686 +22 +0.3305275449199734 +32 +0.9336709982866838 +13 +0.14628261733798686 +23 +0.3305275449199734 +33 +0.9336709982866838 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.14591265330279257 +20 +0.3305275449199734 +30 +0.9357778285299473 +11 +0.1060148804133424 +21 +0.3464540804912427 +31 +1.0122285079127469 +12 +0.14591265330279257 +22 +0.3224508871153656 +32 +1.0122285079127469 +13 +0.14591265330279257 +23 +0.3224508871153656 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.2586041470805568 +20 +0.2586041470805588 +30 +1.0122285079127469 +11 +-0.35104895415806886 +21 +0.20267820818189808 +31 +0.3510489541580695 +12 +-0.3167241028575086 +22 +0.18286074604362668 +32 +1.0122285079127469 +13 +-0.3167241028575086 +23 +0.18286074604362668 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.35104895415806886 +20 +0.20267820818189808 +30 +0.3510489541580695 +11 +-0.2586041470805568 +21 +0.2586041470805588 +31 +1.0122285079127469 +12 +-0.34136914729025525 +22 +0.2162382106052272 +32 +0.3413691472902548 +13 +-0.34136914729025525 +23 +0.2162382106052272 +33 +0.3413691472902548 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.2586041470805568 +20 +0.2586041470805588 +30 +1.0122285079127469 +11 +-0.31956463959574843 +21 +0.24729676227526276 +31 +0.319564639595748 +12 +-0.34136914729025525 +22 +0.2162382106052272 +32 +0.3413691472902548 +13 +-0.34136914729025525 +23 +0.2162382106052272 +33 +0.3413691472902548 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.31956463959574843 +20 +0.24729676227526276 +30 +0.319564639595748 +11 +-0.2586041470805568 +21 +0.2586041470805588 +31 +1.0122285079127469 +12 +-0.28975619668604413 +22 +0.28975619668604524 +32 +0.2897561966860459 +13 +-0.28975619668604413 +23 +0.28975619668604524 +33 +0.2897561966860459 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.3167241028575086 +20 +0.18286074604362668 +30 +1.0122285079127469 +11 +-0.38891611994706954 +21 +0.10420976026326378 +31 +0.3889161199470702 +12 +-0.3532598344360491 +22 +0.09465568735549246 +32 +1.0122285079127469 +13 +-0.3532598344360491 +23 +0.09465568735549246 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.38891611994706954 +20 +0.10420976026326378 +30 +0.3889161199470702 +11 +-0.3167241028575086 +21 +0.18286074604362668 +31 +1.0122285079127469 +12 +-0.3824872047423873 +22 +0.12071693477296785 +32 +0.38248720474238906 +13 +-0.3824872047423873 +23 +0.12071693477296785 +33 +0.38248720474238906 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.35104895415806886 +20 +0.20267820818189808 +30 +0.3510489541580695 +11 +-0.3824872047423873 +21 +0.12071693477296785 +31 +0.38248720474238906 +12 +-0.3167241028575086 +22 +0.18286074604362668 +32 +1.0122285079127469 +13 +-0.3167241028575086 +23 +0.18286074604362668 +33 +1.0122285079127469 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.3532598344360491 +20 +0.09465568735549246 +30 +1.0122285079127469 +11 +-0.4017178381596732 +21 +3.885780586188048e-16 +31 +0.4017178381596739 +12 +-0.3657214920872503 +22 +3.885780586188048e-16 +32 +1.0122285079127469 +13 +-0.3657214920872503 +23 +3.885780586188048e-16 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.4017178381596732 +20 +3.885780586188048e-16 +30 +0.4017178381596739 +11 +-0.3532598344360491 +21 +0.09465568735549246 +31 +1.0122285079127469 +12 +-0.39943530308125597 +22 +0.018359816733039713 +32 +0.39943530308125774 +13 +-0.39943530308125597 +23 +0.018359816733039713 +33 +0.39943530308125774 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.38891611994706954 +20 +0.10420976026326378 +30 +0.3889161199470702 +11 +-0.39943530308125597 +21 +0.018359816733039713 +31 +0.39943530308125774 +12 +-0.3532598344360491 +22 +0.09465568735549246 +32 +1.0122285079127469 +13 +-0.3532598344360491 +23 +0.09465568735549246 +33 +1.0122285079127469 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.1828607460436237 +20 +0.31672410285751096 +30 +1.0122285079127469 +11 +-0.20785502656237878 +21 +0.3600154666146186 +31 +0.2078550265623772 +12 +-0.2778969996485491 +22 +0.2997598063673419 +32 +0.27789699964855086 +13 +-0.2778969996485491 +23 +0.2997598063673419 +33 +0.27789699964855086 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.28975619668604413 +20 +0.28975619668604524 +30 +0.2897561966860459 +11 +-0.1828607460436237 +21 +0.31672410285751096 +31 +1.0122285079127469 +12 +-0.2778969996485491 +22 +0.2997598063673419 +32 +0.27789699964855086 +13 +-0.2778969996485491 +23 +0.2997598063673419 +33 +0.27789699964855086 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.1828607460436237 +20 +0.31672410285751096 +30 +1.0122285079127469 +11 +-0.28975619668604413 +21 +0.28975619668604524 +31 +0.2897561966860459 +12 +-0.2586041470805568 +22 +0.2586041470805588 +32 +1.0122285079127469 +13 +-0.2586041470805568 +23 +0.2586041470805588 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.09465568735549051 +20 +0.3532598344360508 +30 +1.0122285079127469 +11 +-0.10931187503979845 +21 +0.4079574715191584 +31 +0.10931187503979797 +12 +-0.19486138979903292 +22 +0.36626416358485825 +32 +0.1948613897990347 +13 +-0.19486138979903292 +23 +0.36626416358485825 +33 +0.1948613897990347 +70 +0 + 0 +3DFACE + 8 +thumb distal +10 +-0.20785502656237878 +20 +0.3600154666146186 +30 +0.2078550265623772 +11 +-0.09465568735549051 +21 +0.3532598344360508 +31 +1.0122285079127469 +12 +-0.19486138979903292 +22 +0.36626416358485825 +32 +0.1948613897990347 +13 +-0.19486138979903292 +23 +0.36626416358485825 +33 +0.1948613897990347 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.09465568735549051 +20 +0.3532598344360508 +30 +1.0122285079127469 +11 +-0.20785502656237878 +21 +0.3600154666146186 +31 +0.2078550265623772 +12 +-0.1828607460436237 +22 +0.31672410285751096 +32 +1.0122285079127469 +13 +-0.1828607460436237 +23 +0.31672410285751096 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.365721492087253 +30 +1.0122285079127469 +11 +0.1110862308312226 +21 +0.4145794574834395 +31 +0.0 +12 +1.7763568394002505e-15 +22 +0.4292042372199397 +32 +0.0 +13 +1.7763568394002505e-15 +23 +0.4292042372199397 +33 +0.0 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.1110862308312226 +20 +0.4145794574834395 +30 +0.0 +11 +1.7763568394002505e-15 +21 +0.365721492087253 +31 +1.0122285079127469 +12 +0.09465568735549401 +22 +0.353259834436051 +32 +1.0122285079127469 +13 +0.09465568735549401 +23 +0.353259834436051 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.10931187503979845 +20 +0.4079574715191584 +30 +0.10931187503979797 +11 +1.7763568394002505e-15 +21 +0.365721492087253 +31 +1.0122285079127469 +12 +1.7763568394002505e-15 +22 +0.4292042372199397 +32 +0.0 +13 +1.7763568394002505e-15 +23 +0.4292042372199397 +33 +0.0 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.365721492087253 +30 +1.0122285079127469 +11 +-0.10931187503979845 +21 +0.4079574715191584 +31 +0.10931187503979797 +12 +-0.09465568735549051 +22 +0.3532598344360508 +32 +1.0122285079127469 +13 +-0.09465568735549051 +23 +0.3532598344360508 +33 +1.0122285079127469 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.4292042372199397 +30 +0.0 +11 +0.3562827519999995 +21 +0.21460211860996914 +31 +-2.220446049250313e-15 +12 +-1.609823385706477e-15 +22 +0.2146021186099698 +32 +0.0 +13 +-1.609823385706477e-15 +23 +0.2146021186099698 +33 +0.0 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +0.3562827519999995 +20 +0.21460211860996914 +30 +-2.220446049250313e-15 +11 +1.7763568394002505e-15 +21 +0.4292042372199397 +31 +0.0 +12 +0.1110862308312226 +22 +0.4145794574834395 +32 +0.0 +13 +0.1110862308312226 +23 +0.4145794574834395 +33 +0.0 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.3562827519999995 +20 +0.21460211860996914 +30 +-2.220446049250313e-15 +11 +0.1110862308312226 +21 +0.4145794574834395 +31 +0.0 +12 +0.21460211860997136 +22 +0.3717017728443903 +32 +0.0 +13 +0.21460211860997136 +23 +0.3717017728443903 +33 +0.0 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.3562827519999995 +20 +0.21460211860996914 +30 +-2.220446049250313e-15 +11 +0.21460211860997136 +21 +0.3717017728443903 +31 +0.0 +12 +0.30349322665222 +22 +0.303493226652219 +32 +0.0 +13 +0.30349322665222 +23 +0.303493226652219 +33 +0.0 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.3562827519999995 +20 +0.21460211860996914 +30 +-2.220446049250313e-15 +11 +0.30349322665222 +21 +0.303493226652219 +31 +0.0 +12 +0.37170177284439176 +22 +0.21460211860997003 +32 +0.0 +13 +0.37170177284439176 +23 +0.21460211860997003 +33 +0.0 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +0.3562827519999995 +20 +0.21460211860996914 +30 +-2.220446049250313e-15 +11 +0.37170177284439176 +21 +0.21460211860997003 +31 +0.0 +12 +0.3562827519999995 +22 +2.1649348980190553e-15 +32 +-2.220446049250313e-15 +13 +0.3562827519999995 +23 +2.1649348980190553e-15 +33 +-2.220446049250313e-15 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.3562827519999995 +20 +2.1649348980190553e-15 +30 +-2.220446049250313e-15 +11 +0.37170177284439176 +21 +0.21460211860997003 +31 +0.0 +12 +0.42920423721993983 +22 +2.7755575615628914e-15 +32 +0.0 +13 +0.42920423721993983 +23 +2.7755575615628914e-15 +33 +0.0 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +0.42920423721993983 +20 +2.7755575615628914e-15 +30 +0.0 +11 +0.37170177284439176 +21 +0.21460211860997003 +31 +0.0 +12 +0.41457945748344094 +22 +0.11108623083122104 +32 +0.0 +13 +0.41457945748344094 +23 +0.11108623083122104 +33 +0.0 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.39943530308125597 +20 +0.018359816733039713 +30 +0.39943530308125774 +11 +-0.2519299499590043 +21 +1.0547118733938987e-15 +31 +0.2519299499590027 +12 +-0.4017178381596732 +22 +3.885780586188048e-16 +32 +0.4017178381596739 +13 +-0.4017178381596732 +23 +3.885780586188048e-16 +33 +0.4017178381596739 +70 +1 + 0 +3DFACE + 8 +thumb distal +10 +-0.2519299499590043 +20 +1.0547118733938987e-15 +30 +0.2519299499590027 +11 +-0.39943530308125597 +21 +0.018359816733039713 +31 +0.39943530308125774 +12 +-0.2519299499590054 +22 +0.21460211860996914 +32 +0.2519299499590072 +13 +-0.2519299499590054 +23 +0.21460211860996914 +33 +0.2519299499590072 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +-0.2519299499590054 +20 +0.21460211860996914 +30 +0.2519299499590072 +11 +-0.39943530308125597 +21 +0.018359816733039713 +31 +0.39943530308125774 +12 +-0.38891611994706954 +22 +0.10420976026326378 +32 +0.3889161199470702 +13 +-0.38891611994706954 +23 +0.10420976026326378 +33 +0.3889161199470702 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +-0.2519299499590054 +20 +0.21460211860996914 +30 +0.2519299499590072 +11 +-0.38891611994706954 +21 +0.10420976026326378 +31 +0.3889161199470702 +12 +-0.3824872047423873 +22 +0.12071693477296785 +32 +0.38248720474238906 +13 +-0.3824872047423873 +23 +0.12071693477296785 +33 +0.38248720474238906 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +-0.2519299499590054 +20 +0.21460211860996914 +30 +0.2519299499590072 +11 +-0.3824872047423873 +21 +0.12071693477296785 +31 +0.38248720474238906 +12 +-0.35104895415806886 +22 +0.20267820818189808 +32 +0.3510489541580695 +13 +-0.35104895415806886 +23 +0.20267820818189808 +33 +0.3510489541580695 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +-0.2519299499590054 +20 +0.21460211860996914 +30 +0.2519299499590072 +11 +-0.35104895415806886 +21 +0.20267820818189808 +31 +0.3510489541580695 +12 +-0.34136914729025525 +22 +0.2162382106052272 +32 +0.3413691472902548 +13 +-0.34136914729025525 +23 +0.2162382106052272 +33 +0.3413691472902548 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +-0.2519299499590054 +20 +0.21460211860996914 +30 +0.2519299499590072 +11 +-0.34136914729025525 +21 +0.2162382106052272 +31 +0.3413691472902548 +12 +-1.609823385706477e-15 +22 +0.2146021186099698 +32 +0.0 +13 +-1.609823385706477e-15 +23 +0.2146021186099698 +33 +0.0 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +-1.609823385706477e-15 +20 +0.2146021186099698 +30 +0.0 +11 +-0.34136914729025525 +21 +0.2162382106052272 +31 +0.3413691472902548 +12 +1.7763568394002505e-15 +22 +0.4292042372199397 +32 +0.0 +13 +1.7763568394002505e-15 +23 +0.4292042372199397 +33 +0.0 +70 +3 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.4292042372199397 +30 +0.0 +11 +-0.34136914729025525 +21 +0.2162382106052272 +31 +0.3413691472902548 +12 +-0.31956463959574843 +22 +0.24729676227526276 +32 +0.319564639595748 +13 +-0.31956463959574843 +23 +0.24729676227526276 +33 +0.319564639595748 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.4292042372199397 +30 +0.0 +11 +-0.31956463959574843 +21 +0.24729676227526276 +31 +0.319564639595748 +12 +-0.28975619668604413 +22 +0.28975619668604524 +32 +0.2897561966860459 +13 +-0.28975619668604413 +23 +0.28975619668604524 +33 +0.2897561966860459 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.4292042372199397 +30 +0.0 +11 +-0.28975619668604413 +21 +0.28975619668604524 +31 +0.2897561966860459 +12 +-0.2778969996485491 +22 +0.2997598063673419 +32 +0.27789699964855086 +13 +-0.2778969996485491 +23 +0.2997598063673419 +33 +0.27789699964855086 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.4292042372199397 +30 +0.0 +11 +-0.2778969996485491 +21 +0.2997598063673419 +31 +0.27789699964855086 +12 +-0.20785502656237878 +22 +0.3600154666146186 +32 +0.2078550265623772 +13 +-0.20785502656237878 +23 +0.3600154666146186 +33 +0.2078550265623772 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.4292042372199397 +30 +0.0 +11 +-0.20785502656237878 +21 +0.3600154666146186 +31 +0.2078550265623772 +12 +-0.19486138979903292 +22 +0.36626416358485825 +32 +0.1948613897990347 +13 +-0.19486138979903292 +23 +0.36626416358485825 +33 +0.1948613897990347 +70 +13 + 0 +3DFACE + 8 +thumb distal +10 +1.7763568394002505e-15 +20 +0.4292042372199397 +30 +0.0 +11 +-0.19486138979903292 +21 +0.36626416358485825 +31 +0.1948613897990347 +12 +-0.10931187503979845 +22 +0.4079574715191584 +32 +0.10931187503979797 +13 +-0.10931187503979845 +23 +0.4079574715191584 +33 +0.10931187503979797 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.19123308709410364 +20 +0.15899592086427866 +30 +0.8885515077908579 +11 +2.220446049250313e-15 +21 +0.15899592086427866 +31 +1.0007956832333833 +12 +-0.15693817501863377 +22 +0.15899592086427866 +32 +0.8438575082147479 +13 +-0.15693817501863377 +23 +0.15899592086427866 +33 +0.8438575082147479 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +2.220446049250313e-15 +20 +0.15899592086427866 +30 +1.0007956832333833 +11 +-0.19123308709410364 +21 +0.15899592086427866 +31 +0.8885515077908579 +12 +-0.21329279355777295 +22 +0.15899592086427866 +32 +0.9418083503174176 +13 +-0.21329279355777295 +23 +0.15899592086427866 +33 +0.9418083503174176 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +2.220446049250313e-15 +20 +0.15899592086427866 +30 +1.0007956832333833 +11 +-0.21329279355777295 +21 +0.15899592086427866 +31 +0.9418083503174176 +12 +-0.2208169486234871 +22 +0.15899592086427866 +32 +0.9989599821026028 +13 +-0.2208169486234871 +23 +0.15899592086427866 +33 +0.9989599821026028 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +2.220446049250313e-15 +20 +0.15899592086427866 +30 +1.0007956832333833 +11 +-0.2208169486234871 +21 +0.15899592086427866 +31 +0.9989599821026028 +12 +-0.21329279355777295 +22 +0.15899592086427866 +32 +1.056111613887788 +13 +-0.21329279355777295 +23 +0.15899592086427866 +33 +1.056111613887788 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +2.220446049250313e-15 +20 +0.15899592086427866 +30 +1.0007956832333833 +11 +-0.21329279355777295 +21 +0.15899592086427866 +31 +1.056111613887788 +12 +0.22057527398480187 +22 +0.15899592086427866 +32 +1.0007956832333833 +13 +0.22057527398480187 +23 +0.15899592086427866 +33 +1.0007956832333833 +70 +15 + 0 +3DFACE + 8 +finger intermediate +10 +0.22057527398480187 +20 +0.15899592086427866 +30 +1.0007956832333833 +11 +-0.21329279355777295 +21 +0.15899592086427866 +31 +1.056111613887788 +12 +0.21329279355777625 +22 +0.15899592086427866 +32 +1.056111613887788 +13 +0.21329279355777625 +23 +0.15899592086427866 +33 +1.056111613887788 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +0.21329279355777625 +20 +0.15899592086427866 +30 +1.056111613887788 +11 +-0.21329279355777295 +21 +0.15899592086427866 +31 +1.056111613887788 +12 +-0.19123308709410364 +22 +0.15899592086427866 +32 +1.1093684564143456 +13 +-0.19123308709410364 +23 +0.15899592086427866 +33 +1.1093684564143456 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.21329279355777625 +20 +0.15899592086427866 +30 +1.056111613887788 +11 +-0.19123308709410364 +21 +0.15899592086427866 +31 +1.1093684564143456 +12 +0.19123308709410575 +22 +0.15899592086427866 +32 +1.1093684564143456 +13 +0.19123308709410575 +23 +0.15899592086427866 +33 +1.1093684564143456 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +0.19123308709410575 +20 +0.15899592086427866 +30 +1.1093684564143456 +11 +-0.19123308709410364 +21 +0.15899592086427866 +31 +1.1093684564143456 +12 +-0.15614116177258947 +22 +0.15899592086427866 +32 +1.1551011438751944 +13 +-0.15614116177258947 +23 +0.15899592086427866 +33 +1.1551011438751944 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.19123308709410575 +20 +0.15899592086427866 +30 +1.1093684564143456 +11 +-0.15614116177258947 +21 +0.15899592086427866 +31 +1.1551011438751944 +12 +0.15614116177259163 +22 +0.15899592086427866 +32 +1.1551011438751944 +13 +0.15614116177259163 +23 +0.15899592086427866 +33 +1.1551011438751944 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +0.15614116177259163 +20 +0.15899592086427866 +30 +1.1551011438751944 +11 +-0.15614116177258947 +21 +0.15899592086427866 +31 +1.1551011438751944 +12 +-0.15510247388785273 +22 +0.15899592086427866 +32 +1.1558981571212381 +13 +-0.15510247388785273 +23 +0.15899592086427866 +33 +1.1558981571212381 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.15614116177259163 +20 +0.15899592086427866 +30 +1.1551011438751944 +11 +-0.15510247388785273 +21 +0.15899592086427866 +31 +1.1558981571212381 +12 +0.110408474311746 +22 +0.15899592086427866 +32 +1.1901930691967098 +13 +0.110408474311746 +23 +0.15899592086427866 +33 +1.1901930691967098 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +0.110408474311746 +20 +0.15899592086427866 +30 +1.1901930691967098 +11 +-0.15510247388785273 +21 +0.15899592086427866 +31 +1.1558981571212381 +12 +-0.11040847431174272 +22 +0.15899592086427866 +32 +1.1901930691967098 +13 +-0.11040847431174272 +23 +0.15899592086427866 +33 +1.1901930691967098 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.110408474311746 +20 +0.15899592086427866 +30 +1.1901930691967098 +11 +-0.11040847431174272 +21 +0.15899592086427866 +31 +1.1901930691967098 +12 +-0.0571516317851824 +22 +0.15899592086427866 +32 +1.2122527756603774 +13 +-0.0571516317851824 +23 +0.15899592086427866 +33 +1.2122527756603774 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.110408474311746 +20 +0.15899592086427866 +30 +1.1901930691967098 +11 +-0.0571516317851824 +21 +0.15899592086427866 +31 +1.2122527756603774 +12 +0.057151631785184565 +22 +0.15899592086427866 +32 +1.2122527756603774 +13 +0.057151631785184565 +23 +0.15899592086427866 +33 +1.2122527756603774 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +0.057151631785184565 +20 +0.15899592086427866 +30 +1.2122527756603774 +11 +-0.0571516317851824 +21 +0.15899592086427866 +31 +1.2122527756603774 +12 +1.0547118733938987e-15 +22 +0.15899592086427866 +32 +1.2197769307260904 +13 +1.0547118733938987e-15 +23 +0.15899592086427866 +33 +1.2197769307260904 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.22057527398480187 +20 +0.15899592086427866 +30 +1.0007956832333833 +11 +0.2165682094492341 +21 +0.15899592086427866 +31 +0.9703590063073866 +12 +2.220446049250313e-15 +22 +0.15899592086427866 +32 +1.0007956832333833 +13 +2.220446049250313e-15 +23 +0.15899592086427866 +33 +1.0007956832333833 +70 +12 + 0 +3DFACE + 8 +finger intermediate +10 +-0.15693817501863658 +20 +-1.887379141862766e-15 +30 +0.8438575082147456 +11 +-0.2931142709759422 +21 +0.07853973219804244 +31 +0.7076814122574394 +12 +-0.30391732134661864 +22 +-2.3314683517128287e-15 +32 +0.696878361886763 +13 +-0.30391732134661864 +23 +-2.3314683517128287e-15 +33 +0.696878361886763 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.2931142709759422 +20 +0.07853973219804244 +30 +0.7076814122574394 +11 +-0.15693817501863658 +21 +-1.887379141862766e-15 +31 +0.8438575082147456 +12 +-0.2616302453704491 +22 +0.1510522925927807 +32 +0.7391654378629331 +13 +-0.2616302453704491 +23 +0.1510522925927807 +33 +0.7391654378629331 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +-0.2616302453704491 +20 +0.1510522925927807 +30 +0.7391654378629331 +11 +-0.15693817501863658 +21 +-1.887379141862766e-15 +31 +0.8438575082147456 +12 +-0.21211943838078534 +22 +0.21211943838079228 +32 +0.788676244852598 +13 +-0.21211943838078534 +23 +0.21211943838079228 +33 +0.788676244852598 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +-0.21211943838078534 +20 +0.21211943838079228 +30 +0.788676244852598 +11 +-0.15693817501863658 +21 +-1.887379141862766e-15 +31 +0.8438575082147456 +12 +-0.15693817501863377 +22 +0.15899592086427866 +32 +0.8438575082147479 +13 +-0.15693817501863377 +23 +0.15899592086427866 +33 +0.8438575082147479 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +-0.21211943838078534 +20 +0.21211943838079228 +30 +0.788676244852598 +11 +-0.15693817501863377 +21 +0.15899592086427866 +31 +0.8438575082147479 +12 +-0.1486302864960926 +22 +0.25743520775475925 +32 +0.8521653967372884 +13 +-0.1486302864960926 +23 +0.25743520775475925 +33 +0.8521653967372884 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +-0.1486302864960926 +20 +0.25743520775475925 +30 +0.8521653967372884 +11 +-0.15693817501863377 +21 +0.15899592086427866 +31 +0.8438575082147479 +12 +2.220446049250313e-15 +22 +0.15899592086427866 +32 +1.0007956832333833 +13 +2.220446049250313e-15 +23 +0.15899592086427866 +33 +1.0007956832333833 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +-0.1486302864960926 +20 +0.25743520775475925 +30 +0.8521653967372884 +11 +2.220446049250313e-15 +21 +0.15899592086427866 +31 +1.0007956832333833 +12 +-0.07613234059483498 +22 +0.2841297631990751 +32 +0.9246633426385472 +13 +-0.07613234059483498 +23 +0.2841297631990751 +33 +0.9246633426385472 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +-0.07613234059483498 +20 +0.2841297631990751 +30 +0.9246633426385472 +11 +2.220446049250313e-15 +21 +0.15899592086427866 +31 +1.0007956832333833 +12 +2.220446049250313e-15 +22 +0.2908891820000008 +32 +1.0007956832333833 +13 +2.220446049250313e-15 +23 +0.2908891820000008 +33 +1.0007956832333833 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.2931142709759422 +20 +0.07853973219804244 +30 +0.7076814122574394 +11 +-0.32007010417162757 +21 +-2.220446049250313e-15 +31 +0.3200701041716287 +12 +-0.30391732134661864 +22 +-2.3314683517128287e-15 +32 +0.696878361886763 +13 +-0.30391732134661864 +23 +-2.3314683517128287e-15 +33 +0.696878361886763 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.32007010417162757 +20 +-2.220446049250313e-15 +30 +0.3200701041716287 +11 +-0.2931142709759422 +21 +0.07853973219804244 +31 +0.7076814122574394 +12 +-0.3095976113128597 +22 +0.08295642992988683 +32 +0.30959761131286023 +13 +-0.3095976113128597 +23 +0.08295642992988683 +33 +0.30959761131286023 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.16339321594943848 +20 +0.2830053516365104 +30 +0.16339321594944067 +11 +-0.07613234059483498 +21 +0.2841297631990751 +31 +0.9246633426385472 +12 +-0.0854433972629631 +22 +0.3188790997566827 +32 +0.08544339726296475 +13 +-0.0854433972629631 +23 +0.3188790997566827 +33 +0.08544339726296475 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.07613234059483498 +20 +0.2841297631990751 +30 +0.9246633426385472 +11 +-0.16339321594943848 +21 +0.2830053516365104 +31 +0.16339321594944067 +12 +-0.1486302864960926 +22 +0.25743520775475925 +32 +0.8521653967372884 +13 +-0.1486302864960926 +23 +0.25743520775475925 +33 +0.8521653967372884 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.2616302453704491 +20 +0.1510522925927807 +30 +0.7391654378629331 +11 +-0.3095976113128597 +21 +0.08295642992988683 +31 +0.30959761131286023 +12 +-0.2931142709759422 +22 +0.07853973219804244 +32 +0.7076814122574394 +13 +-0.2931142709759422 +23 +0.07853973219804244 +33 +0.7076814122574394 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.3095976113128597 +20 +0.08295642992988683 +30 +0.30959761131286023 +11 +-0.2616302453704491 +21 +0.1510522925927807 +31 +0.7391654378629331 +12 +-0.27872379164223104 +22 +0.16092125613419955 +32 +0.27872379164223327 +13 +-0.27872379164223104 +23 +0.16092125613419955 +33 +0.27872379164223327 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.21211943838078534 +20 +0.21211943838079228 +30 +0.788676244852598 +11 +-0.27872379164223104 +21 +0.16092125613419955 +31 +0.27872379164223327 +12 +-0.2616302453704491 +22 +0.1510522925927807 +32 +0.7391654378629331 +13 +-0.2616302453704491 +23 +0.1510522925927807 +33 +0.7391654378629331 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.27872379164223104 +20 +0.16092125613419955 +30 +0.27872379164223327 +11 +-0.21211943838078534 +21 +0.21211943838079228 +31 +0.788676244852598 +12 +-0.22908176290007004 +22 +0.22908176290007598 +32 +0.22908176290007168 +13 +-0.22908176290007004 +23 +0.22908176290007598 +33 +0.22908176290007168 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.3095976113128597 +20 +0.08295642992988683 +30 +0.30959761131286023 +11 +-0.18812188165369356 +21 +-1.887379141862766e-15 +31 +0.1881218816536935 +12 +-0.32007010417162757 +22 +-2.220446049250313e-15 +32 +0.3200701041716287 +13 +-0.32007010417162757 +23 +-2.220446049250313e-15 +33 +0.3200701041716287 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.18812188165369356 +20 +-1.887379141862766e-15 +30 +0.1881218816536935 +11 +-0.3095976113128597 +21 +0.08295642992988683 +31 +0.30959761131286023 +12 +-0.18812188165372323 +22 +0.1915613504388899 +32 +0.18812188165372262 +13 +-0.18812188165372323 +23 +0.1915613504388899 +33 +0.18812188165372262 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +-0.18812188165372323 +20 +0.1915613504388899 +30 +0.18812188165372262 +11 +-0.3095976113128597 +21 +0.08295642992988683 +31 +0.30959761131286023 +12 +-0.27872379164223104 +22 +0.16092125613419955 +32 +0.27872379164223327 +13 +-0.27872379164223104 +23 +0.16092125613419955 +33 +0.27872379164223327 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +-0.18812188165372323 +20 +0.1915613504388899 +30 +0.18812188165372262 +11 +-0.27872379164223104 +21 +0.16092125613419955 +31 +0.27872379164223327 +12 +-0.22908176290007004 +22 +0.22908176290007598 +32 +0.22908176290007168 +13 +-0.22908176290007004 +23 +0.22908176290007598 +33 +0.22908176290007168 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +-0.18812188165372323 +20 +0.1915613504388899 +30 +0.18812188165372262 +11 +-0.22908176290007004 +21 +0.22908176290007598 +31 +0.22908176290007168 +12 +1.6653345369377348e-15 +22 +0.19156135043889 +32 +0.0 +13 +1.6653345369377348e-15 +23 +0.19156135043889 +33 +0.0 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +1.6653345369377348e-15 +20 +0.19156135043889 +30 +0.0 +11 +-0.22908176290007004 +21 +0.22908176290007598 +31 +0.22908176290007168 +12 +2.220446049250313e-15 +22 +0.33379067100000115 +32 +-2.2379254005500117e-15 +13 +2.220446049250313e-15 +23 +0.33379067100000115 +33 +-2.2379254005500117e-15 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +2.220446049250313e-15 +20 +0.33379067100000115 +30 +-2.2379254005500117e-15 +11 +-0.22908176290007004 +21 +0.22908176290007598 +31 +0.22908176290007168 +12 +-0.16339321594943848 +22 +0.2830053516365104 +32 +0.16339321594944067 +13 +-0.16339321594943848 +23 +0.2830053516365104 +33 +0.16339321594944067 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +2.220446049250313e-15 +20 +0.33379067100000115 +30 +-2.2379254005500117e-15 +11 +-0.16339321594943848 +21 +0.2830053516365104 +31 +0.16339321594944067 +12 +-0.0854433972629631 +22 +0.3188790997566827 +32 +0.08544339726296475 +13 +-0.0854433972629631 +23 +0.3188790997566827 +33 +0.08544339726296475 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.22908176290007004 +20 +0.22908176290007598 +30 +0.22908176290007168 +11 +-0.1486302864960926 +21 +0.25743520775475925 +31 +0.8521653967372884 +12 +-0.16339321594943848 +22 +0.2830053516365104 +32 +0.16339321594944067 +13 +-0.16339321594943848 +23 +0.2830053516365104 +33 +0.16339321594944067 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.1486302864960926 +20 +0.25743520775475925 +30 +0.8521653967372884 +11 +-0.22908176290007004 +21 +0.22908176290007598 +31 +0.22908176290007168 +12 +-0.21211943838078534 +22 +0.21211943838079228 +32 +0.788676244852598 +13 +-0.21211943838078534 +23 +0.21211943838079228 +33 +0.788676244852598 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.19123308709410364 +20 +0.15899592086427866 +30 +0.8885515077908579 +11 +-0.15693817501863658 +21 +-1.887379141862766e-15 +31 +0.8438575082147456 +12 +-0.19123308709410083 +22 +-1.887379141862766e-15 +32 +0.8885515077908601 +13 +-0.19123308709410083 +23 +-1.887379141862766e-15 +33 +0.8885515077908601 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.15693817501863658 +20 +-1.887379141862766e-15 +30 +0.8438575082147456 +11 +-0.19123308709410364 +21 +0.15899592086427866 +31 +0.8885515077908579 +12 +-0.15693817501863377 +22 +0.15899592086427866 +32 +0.8438575082147479 +13 +-0.15693817501863377 +23 +0.15899592086427866 +33 +0.8438575082147479 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.11040847431174217 +20 +-1.887379141862766e-15 +30 +1.1901930691967075 +11 +-0.0571516317851824 +21 +0.15899592086427866 +31 +1.2122527756603774 +12 +-0.11040847431174272 +22 +0.15899592086427866 +32 +1.1901930691967098 +13 +-0.11040847431174272 +23 +0.15899592086427866 +33 +1.1901930691967098 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.0571516317851824 +20 +0.15899592086427866 +30 +1.2122527756603774 +11 +-0.11040847431174217 +21 +-1.887379141862766e-15 +31 +1.1901930691967075 +12 +-0.0571516317851824 +22 +-1.887379141862766e-15 +32 +1.212252775660373 +13 +-0.0571516317851824 +23 +-1.887379141862766e-15 +33 +1.212252775660373 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.2208169486234871 +20 +0.15899592086427866 +30 +0.9989599821026028 +11 +-0.2132927935577707 +21 +-1.887379141862766e-15 +31 +0.9418083503174198 +12 +-0.22081694862348375 +22 +-1.887379141862766e-15 +32 +0.9989599821026028 +13 +-0.22081694862348375 +23 +-1.887379141862766e-15 +33 +0.9989599821026028 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.2132927935577707 +20 +-1.887379141862766e-15 +30 +0.9418083503174198 +11 +-0.2208169486234871 +21 +0.15899592086427866 +31 +0.9989599821026028 +12 +-0.21329279355777295 +22 +0.15899592086427866 +32 +0.9418083503174176 +13 +-0.21329279355777295 +23 +0.15899592086427866 +33 +0.9418083503174176 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.21329279355777295 +20 +0.15899592086427866 +30 +0.9418083503174176 +11 +-0.19123308709410083 +21 +-1.887379141862766e-15 +31 +0.8885515077908601 +12 +-0.2132927935577707 +22 +-1.887379141862766e-15 +32 +0.9418083503174198 +13 +-0.2132927935577707 +23 +-1.887379141862766e-15 +33 +0.9418083503174198 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.19123308709410083 +20 +-1.887379141862766e-15 +30 +0.8885515077908601 +11 +-0.21329279355777295 +21 +0.15899592086427866 +31 +0.9418083503174176 +12 +-0.19123308709410364 +22 +0.15899592086427866 +32 +0.8885515077908579 +13 +-0.19123308709410364 +23 +0.15899592086427866 +33 +0.8885515077908579 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.21329279355777295 +20 +0.15899592086427866 +30 +1.056111613887788 +11 +-0.22057527398479468 +21 +-1.3877787807814457e-15 +31 +1.0007956832333833 +12 +-0.21329279355776792 +22 +-1.887379141862766e-15 +32 +1.0561116138877857 +13 +-0.21329279355776792 +23 +-1.887379141862766e-15 +33 +1.0561116138877857 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.22057527398479468 +20 +-1.3877787807814457e-15 +30 +1.0007956832333833 +11 +-0.2208169486234871 +21 +0.15899592086427866 +31 +0.9989599821026028 +12 +-0.22081694862348375 +22 +-1.887379141862766e-15 +32 +0.9989599821026028 +13 +-0.22081694862348375 +23 +-1.887379141862766e-15 +33 +0.9989599821026028 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.2208169486234871 +20 +0.15899592086427866 +30 +0.9989599821026028 +11 +-0.22057527398479468 +21 +-1.3877787807814457e-15 +31 +1.0007956832333833 +12 +-0.21329279355777295 +22 +0.15899592086427866 +32 +1.056111613887788 +13 +-0.21329279355777295 +23 +0.15899592086427866 +33 +1.056111613887788 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +-0.15614116177258947 +20 +0.15899592086427866 +30 +1.1551011438751944 +11 +-0.19123308709409917 +21 +-1.887379141862766e-15 +31 +1.1093684564143433 +12 +-0.15614116177258947 +22 +-1.887379141862766e-15 +32 +1.1551011438751921 +13 +-0.15614116177258947 +23 +-1.887379141862766e-15 +33 +1.1551011438751921 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.19123308709409917 +20 +-1.887379141862766e-15 +30 +1.1093684564143433 +11 +-0.15614116177258947 +21 +0.15899592086427866 +31 +1.1551011438751944 +12 +-0.19123308709410364 +22 +0.15899592086427866 +32 +1.1093684564143456 +13 +-0.19123308709410364 +23 +0.15899592086427866 +33 +1.1093684564143456 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.11040847431174217 +20 +-1.887379141862766e-15 +30 +1.1901930691967075 +11 +-0.15614116177258947 +21 +0.15899592086427866 +31 +1.1551011438751944 +12 +-0.15614116177258947 +22 +-1.887379141862766e-15 +32 +1.1551011438751921 +13 +-0.15614116177258947 +23 +-1.887379141862766e-15 +33 +1.1551011438751921 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.15614116177258947 +20 +0.15899592086427866 +30 +1.1551011438751944 +11 +-0.11040847431174217 +21 +-1.887379141862766e-15 +31 +1.1901930691967075 +12 +-0.15510247388785273 +22 +0.15899592086427866 +32 +1.1558981571212381 +13 +-0.15510247388785273 +23 +0.15899592086427866 +33 +1.1558981571212381 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +-0.15510247388785273 +20 +0.15899592086427866 +30 +1.1558981571212381 +11 +-0.11040847431174217 +21 +-1.887379141862766e-15 +31 +1.1901930691967075 +12 +-0.11040847431174272 +22 +0.15899592086427866 +32 +1.1901930691967098 +13 +-0.11040847431174272 +23 +0.15899592086427866 +33 +1.1901930691967098 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.19123308709410364 +20 +0.15899592086427866 +30 +1.1093684564143456 +11 +-0.21329279355776792 +21 +-1.887379141862766e-15 +31 +1.0561116138877857 +12 +-0.19123308709409917 +22 +-1.887379141862766e-15 +32 +1.1093684564143433 +13 +-0.19123308709409917 +23 +-1.887379141862766e-15 +33 +1.1093684564143433 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.21329279355776792 +20 +-1.887379141862766e-15 +30 +1.0561116138877857 +11 +-0.19123308709410364 +21 +0.15899592086427866 +31 +1.1093684564143456 +12 +-0.21329279355777295 +22 +0.15899592086427866 +32 +1.056111613887788 +13 +-0.21329279355777295 +23 +0.15899592086427866 +33 +1.056111613887788 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.21329279355777625 +20 +0.15899592086427866 +30 +1.056111613887788 +11 +0.1912330870941092 +21 +-1.887379141862766e-15 +31 +1.10936845641435 +12 +0.21329279355777625 +22 +-1.887379141862766e-15 +32 +1.0561116138877857 +13 +0.21329279355777625 +23 +-1.887379141862766e-15 +33 +1.0561116138877857 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.1912330870941092 +20 +-1.887379141862766e-15 +30 +1.10936845641435 +11 +0.21329279355777625 +21 +0.15899592086427866 +31 +1.056111613887788 +12 +0.19123308709410575 +22 +0.15899592086427866 +32 +1.1093684564143456 +13 +0.19123308709410575 +23 +0.15899592086427866 +33 +1.1093684564143456 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +1.6653345369377348e-15 +20 +-1.887379141862766e-15 +30 +1.2197769307260882 +11 +0.057151631785184565 +21 +0.15899592086427866 +31 +1.2122527756603774 +12 +1.0547118733938987e-15 +22 +0.15899592086427866 +32 +1.2197769307260904 +13 +1.0547118733938987e-15 +23 +0.15899592086427866 +33 +1.2197769307260904 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.057151631785184565 +20 +0.15899592086427866 +30 +1.2122527756603774 +11 +1.6653345369377348e-15 +21 +-1.887379141862766e-15 +31 +1.2197769307260882 +12 +0.057151631785183454 +22 +-1.887379141862766e-15 +32 +1.2122527756603774 +13 +0.057151631785183454 +23 +-1.887379141862766e-15 +33 +1.2122527756603774 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.11040847431174489 +20 +-1.887379141862766e-15 +30 +1.1901930691967098 +11 +0.057151631785184565 +21 +0.15899592086427866 +31 +1.2122527756603774 +12 +0.057151631785183454 +22 +-1.887379141862766e-15 +32 +1.2122527756603774 +13 +0.057151631785183454 +23 +-1.887379141862766e-15 +33 +1.2122527756603774 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.057151631785184565 +20 +0.15899592086427866 +30 +1.2122527756603774 +11 +0.11040847431174489 +21 +-1.887379141862766e-15 +31 +1.1901930691967098 +12 +0.110408474311746 +22 +0.15899592086427866 +32 +1.1901930691967098 +13 +0.110408474311746 +23 +0.15899592086427866 +33 +1.1901930691967098 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.22057527398480187 +20 +0.15899592086427866 +30 +1.0007956832333833 +11 +0.21329279355777625 +21 +-1.887379141862766e-15 +31 +1.0561116138877857 +12 +0.22057527398480187 +22 +-1.887379141862766e-15 +32 +1.0007956832333833 +13 +0.22057527398480187 +23 +-1.887379141862766e-15 +33 +1.0007956832333833 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.21329279355777625 +20 +-1.887379141862766e-15 +30 +1.0561116138877857 +11 +0.22057527398480187 +21 +0.15899592086427866 +31 +1.0007956832333833 +12 +0.21329279355777625 +22 +0.15899592086427866 +32 +1.056111613887788 +13 +0.21329279355777625 +23 +0.15899592086427866 +33 +1.056111613887788 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +1.6653345369377348e-15 +20 +-1.887379141862766e-15 +30 +1.2197769307260882 +11 +-0.0571516317851824 +21 +0.15899592086427866 +31 +1.2122527756603774 +12 +-0.0571516317851824 +22 +-1.887379141862766e-15 +32 +1.212252775660373 +13 +-0.0571516317851824 +23 +-1.887379141862766e-15 +33 +1.212252775660373 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.0571516317851824 +20 +0.15899592086427866 +30 +1.2122527756603774 +11 +1.6653345369377348e-15 +21 +-1.887379141862766e-15 +31 +1.2197769307260882 +12 +1.0547118733938987e-15 +22 +0.15899592086427866 +32 +1.2197769307260904 +13 +1.0547118733938987e-15 +23 +0.15899592086427866 +33 +1.2197769307260904 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.15614116177259496 +20 +-1.887379141862766e-15 +30 +1.1551011438751944 +11 +0.110408474311746 +21 +0.15899592086427866 +31 +1.1901930691967098 +12 +0.11040847431174489 +22 +-1.887379141862766e-15 +32 +1.1901930691967098 +13 +0.11040847431174489 +23 +-1.887379141862766e-15 +33 +1.1901930691967098 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.110408474311746 +20 +0.15899592086427866 +30 +1.1901930691967098 +11 +0.15614116177259496 +21 +-1.887379141862766e-15 +31 +1.1551011438751944 +12 +0.15614116177259163 +22 +0.15899592086427866 +32 +1.1551011438751944 +13 +0.15614116177259163 +23 +0.15899592086427866 +33 +1.1551011438751944 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.19123308709410575 +20 +0.15899592086427866 +30 +1.1093684564143456 +11 +0.15614116177259496 +21 +-1.887379141862766e-15 +31 +1.1551011438751944 +12 +0.1912330870941092 +22 +-1.887379141862766e-15 +32 +1.10936845641435 +13 +0.1912330870941092 +23 +-1.887379141862766e-15 +33 +1.10936845641435 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.15614116177259496 +20 +-1.887379141862766e-15 +30 +1.1551011438751944 +11 +0.19123308709410575 +21 +0.15899592086427866 +31 +1.1093684564143456 +12 +0.15614116177259163 +22 +0.15899592086427866 +32 +1.1551011438751944 +13 +0.15614116177259163 +23 +0.15899592086427866 +33 +1.1551011438751944 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +2.220446049250313e-15 +20 +0.33379067100000115 +30 +-2.2379254005500117e-15 +11 +0.26121143822087073 +21 +0.19156135043888944 +31 +0.036710873561373786 +12 +1.6653345369377348e-15 +22 +0.19156135043889 +32 +0.0 +13 +1.6653345369377348e-15 +23 +0.19156135043889 +33 +0.0 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.26121143822087073 +20 +0.19156135043888944 +30 +0.036710873561373786 +11 +2.220446049250313e-15 +21 +0.33379067100000115 +31 +-2.2379254005500117e-15 +12 +0.08625688360556105 +22 +0.3219150721185059 +32 +0.012122614420753606 +13 +0.08625688360556105 +23 +0.3219150721185059 +33 +0.012122614420753606 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.26121143822087073 +20 +0.19156135043888944 +30 +0.036710873561373786 +11 +0.08625688360556105 +21 +0.3219150721185059 +31 +0.012122614420753606 +12 +0.1663941050906908 +22 +0.28820304409702857 +32 +0.023385166419002953 +13 +0.1663941050906908 +23 +0.28820304409702857 +33 +0.023385166419002953 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.26121143822087073 +20 +0.19156135043888944 +30 +0.036710873561373786 +11 +0.1663941050906908 +21 +0.28820304409702857 +31 +0.023385166419002953 +12 +0.23502443164595715 +22 +0.235024431645955 +32 +0.03303052979897671 +13 +0.23502443164595715 +23 +0.235024431645955 +33 +0.03303052979897671 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.26121143822087073 +20 +0.19156135043888944 +30 +0.036710873561373786 +11 +0.23502443164595715 +21 +0.235024431645955 +31 +0.03303052979897671 +12 +0.2491438361672455 +22 +0.21648512794230157 +32 +0.035014882695901035 +13 +0.2491438361672455 +23 +0.21648512794230157 +33 +0.035014882695901035 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.26121143822087073 +20 +0.19156135043888944 +30 +0.036710873561373786 +11 +0.2491438361672455 +21 +0.21648512794230157 +31 +0.035014882695901035 +12 +0.2875708080778629 +22 +0.16602908345483203 +32 +0.04041544140330445 +13 +0.2875708080778629 +23 +0.16602908345483203 +33 +0.04041544140330445 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.26121143822087073 +20 +0.19156135043888944 +30 +0.036710873561373786 +11 +0.2875708080778629 +21 +0.16602908345483203 +31 +0.04041544140330445 +12 +0.26121143822087073 +22 +1.1102230246251565e-16 +32 +0.036710873561373786 +13 +0.26121143822087073 +23 +1.1102230246251565e-16 +33 +0.036710873561373786 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +0.26121143822087073 +20 +1.1102230246251565e-16 +30 +0.036710873561373786 +11 +0.2875708080778629 +21 +0.16602908345483203 +31 +0.04041544140330445 +12 +0.3317917526381973 +22 +4.440892098500626e-16 +32 +0.046630289863139704 +13 +0.3317917526381973 +23 +4.440892098500626e-16 +33 +0.046630289863139704 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +0.3317917526381973 +20 +4.440892098500626e-16 +30 +0.046630289863139704 +11 +0.2875708080778629 +21 +0.16602908345483203 +31 +0.04041544140330445 +12 +0.32055163282900784 +22 +0.08589155114901104 +32 +0.045050594043002004 +13 +0.32055163282900784 +23 +0.08589155114901104 +33 +0.045050594043002004 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.07540523862764037 +20 +0.28141618171520544 +30 +0.9901981680557236 +11 +0.1663941050906908 +21 +0.28820304409702857 +31 +0.023385166419002953 +12 +0.08625688360556105 +22 +0.3219150721185059 +32 +0.012122614420753606 +13 +0.08625688360556105 +23 +0.3219150721185059 +33 +0.012122614420753606 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.1663941050906908 +20 +0.28820304409702857 +30 +0.023385166419002953 +11 +0.07540523862764037 +21 +0.28141618171520544 +31 +0.9901981680557236 +12 +0.14588403875819583 +22 +0.25267856714253933 +32 +0.9802930186565522 +13 +0.14588403875819583 +23 +0.25267856714253933 +33 +0.9802930186565522 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.2875708080778629 +20 +0.16602908345483203 +30 +0.04041544140330445 +11 +0.20656971000640417 +21 +0.20656971000640245 +31 +0.9717642037648546 +12 +0.25323868698207214 +22 +0.14620742409832682 +32 +0.9652053067859873 +13 +0.25323868698207214 +23 +0.14620742409832682 +33 +0.9652053067859873 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.20656971000640417 +20 +0.20656971000640245 +30 +0.9717642037648546 +11 +0.2875708080778629 +21 +0.16602908345483203 +31 +0.04041544140330445 +12 +0.2491438361672455 +22 +0.21648512794230157 +32 +0.035014882695901035 +13 +0.2491438361672455 +23 +0.21648512794230157 +33 +0.035014882695901035 +70 +13 + 0 +3DFACE + 8 +finger intermediate +10 +0.20656971000640417 +20 +0.20656971000640245 +30 +0.9717642037648546 +11 +0.2491438361672455 +21 +0.21648512794230157 +31 +0.035014882695901035 +12 +0.23502443164595715 +22 +0.235024431645955 +32 +0.03303052979897671 +13 +0.23502443164595715 +23 +0.235024431645955 +33 +0.03303052979897671 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.3317917526381973 +20 +4.440892098500626e-16 +30 +0.046630289863139704 +11 +0.2826220454264932 +21 +0.07572834883526192 +31 +0.9610757450638483 +12 +0.2926523001357429 +22 +3.885780586188048e-16 +32 +0.9596660846947334 +13 +0.2926523001357429 +23 +3.885780586188048e-16 +33 +0.9596660846947334 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.2826220454264932 +20 +0.07572834883526192 +30 +0.9610757450638483 +11 +0.3317917526381973 +21 +4.440892098500626e-16 +31 +0.046630289863139704 +12 +0.32055163282900784 +22 +0.08589155114901104 +32 +0.045050594043002004 +13 +0.32055163282900784 +23 +0.08589155114901104 +33 +0.045050594043002004 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.14588403875819583 +20 +0.25267856714253933 +30 +0.9802930186565522 +11 +0.23502443164595715 +21 +0.235024431645955 +31 +0.03303052979897671 +12 +0.1663941050906908 +22 +0.28820304409702857 +32 +0.023385166419002953 +13 +0.1663941050906908 +23 +0.28820304409702857 +33 +0.023385166419002953 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.23502443164595715 +20 +0.235024431645955 +30 +0.03303052979897671 +11 +0.14588403875819583 +21 +0.25267856714253933 +31 +0.9802930186565522 +12 +0.20656971000640417 +22 +0.20656971000640245 +32 +0.9717642037648546 +13 +0.20656971000640417 +23 +0.20656971000640245 +33 +0.9717642037648546 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.32055163282900784 +20 +0.08589155114901104 +30 +0.045050594043002004 +11 +0.25323868698207214 +21 +0.14620742409832682 +31 +0.9652053067859873 +12 +0.2826220454264932 +22 +0.07572834883526192 +32 +0.9610757450638483 +13 +0.2826220454264932 +23 +0.07572834883526192 +33 +0.9610757450638483 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.25323868698207214 +20 +0.14620742409832682 +30 +0.9652053067859873 +11 +0.32055163282900784 +21 +0.08589155114901104 +31 +0.045050594043002004 +12 +0.2875708080778629 +22 +0.16602908345483203 +32 +0.04041544140330445 +13 +0.2875708080778629 +23 +0.16602908345483203 +33 +0.04041544140330445 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.2165682094492341 +20 +-8.326672684688674e-16 +30 +0.9703590063073866 +11 +0.22057527398480187 +21 +0.15899592086427866 +31 +1.0007956832333833 +12 +0.22057527398480187 +22 +-1.887379141862766e-15 +32 +1.0007956832333833 +13 +0.22057527398480187 +23 +-1.887379141862766e-15 +33 +1.0007956832333833 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.22057527398480187 +20 +0.15899592086427866 +30 +1.0007956832333833 +11 +0.2165682094492341 +21 +-8.326672684688674e-16 +31 +0.9703590063073866 +12 +0.2165682094492341 +22 +0.15899592086427866 +32 +0.9703590063073866 +13 +0.2165682094492341 +23 +0.15899592086427866 +33 +0.9703590063073866 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.2926523001357429 +20 +3.885780586188048e-16 +30 +0.9596660846947334 +11 +0.2165682094492341 +21 +0.15899592086427866 +31 +0.9703590063073866 +12 +0.2165682094492341 +22 +-8.326672684688674e-16 +32 +0.9703590063073866 +13 +0.2165682094492341 +23 +-8.326672684688674e-16 +33 +0.9703590063073866 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.2165682094492341 +20 +0.15899592086427866 +30 +0.9703590063073866 +11 +0.2926523001357429 +21 +3.885780586188048e-16 +31 +0.9596660846947334 +12 +0.25323868698207214 +22 +0.14620742409832682 +32 +0.9652053067859873 +13 +0.25323868698207214 +23 +0.14620742409832682 +33 +0.9652053067859873 +70 +15 + 0 +3DFACE + 8 +finger intermediate +10 +0.25323868698207214 +20 +0.14620742409832682 +30 +0.9652053067859873 +11 +0.2926523001357429 +21 +3.885780586188048e-16 +31 +0.9596660846947334 +12 +0.2826220454264932 +22 +0.07572834883526192 +32 +0.9610757450638483 +13 +0.2826220454264932 +23 +0.07572834883526192 +33 +0.9610757450638483 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.2165682094492341 +20 +0.15899592086427866 +30 +0.9703590063073866 +11 +2.220446049250313e-15 +21 +0.2908891820000008 +31 +1.0007956832333833 +12 +2.220446049250313e-15 +22 +0.15899592086427866 +32 +1.0007956832333833 +13 +2.220446049250313e-15 +23 +0.15899592086427866 +33 +1.0007956832333833 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +2.220446049250313e-15 +20 +0.2908891820000008 +30 +1.0007956832333833 +11 +0.2165682094492341 +21 +0.15899592086427866 +31 +0.9703590063073866 +12 +0.07540523862764037 +22 +0.28141618171520544 +32 +0.9901981680557236 +13 +0.07540523862764037 +23 +0.28141618171520544 +33 +0.9901981680557236 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +0.07540523862764037 +20 +0.28141618171520544 +30 +0.9901981680557236 +11 +0.2165682094492341 +21 +0.15899592086427866 +31 +0.9703590063073866 +12 +0.14588403875819583 +22 +0.25267856714253933 +32 +0.9802930186565522 +13 +0.14588403875819583 +23 +0.25267856714253933 +33 +0.9802930186565522 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +0.14588403875819583 +20 +0.25267856714253933 +30 +0.9802930186565522 +11 +0.2165682094492341 +21 +0.15899592086427866 +31 +0.9703590063073866 +12 +0.20656971000640417 +22 +0.20656971000640245 +32 +0.9717642037648546 +13 +0.20656971000640417 +23 +0.20656971000640245 +33 +0.9717642037648546 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +0.20656971000640417 +20 +0.20656971000640245 +30 +0.9717642037648546 +11 +0.2165682094492341 +21 +0.15899592086427866 +31 +0.9703590063073866 +12 +0.25323868698207214 +22 +0.14620742409832682 +32 +0.9652053067859873 +13 +0.25323868698207214 +23 +0.14620742409832682 +33 +0.9652053067859873 +70 +3 + 0 +3DFACE + 8 +finger intermediate +10 +2.220446049250313e-15 +20 +0.2908891820000008 +30 +1.0007956832333833 +11 +0.08625688360556105 +21 +0.3219150721185059 +31 +0.012122614420753606 +12 +2.220446049250313e-15 +22 +0.33379067100000115 +32 +-2.2379254005500117e-15 +13 +2.220446049250313e-15 +23 +0.33379067100000115 +33 +-2.2379254005500117e-15 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +0.08625688360556105 +20 +0.3219150721185059 +30 +0.012122614420753606 +11 +2.220446049250313e-15 +21 +0.2908891820000008 +31 +1.0007956832333833 +12 +0.07540523862764037 +22 +0.28141618171520544 +32 +0.9901981680557236 +13 +0.07540523862764037 +23 +0.28141618171520544 +33 +0.9901981680557236 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +-0.0854433972629631 +20 +0.3188790997566827 +30 +0.08544339726296475 +11 +2.220446049250313e-15 +21 +0.2908891820000008 +31 +1.0007956832333833 +12 +2.220446049250313e-15 +22 +0.33379067100000115 +32 +-2.2379254005500117e-15 +13 +2.220446049250313e-15 +23 +0.33379067100000115 +33 +-2.2379254005500117e-15 +70 +1 + 0 +3DFACE + 8 +finger intermediate +10 +2.220446049250313e-15 +20 +0.2908891820000008 +30 +1.0007956832333833 +11 +-0.0854433972629631 +21 +0.3188790997566827 +31 +0.08544339726296475 +12 +-0.07613234059483498 +22 +0.2841297631990751 +32 +0.9246633426385472 +13 +-0.07613234059483498 +23 +0.2841297631990751 +33 +0.9246633426385472 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.09508647761767314 +20 +0.18027301793291245 +30 +1.0018635478066782 +11 +0.09931785063555398 +21 +0.1845043909507944 +31 +1.1319291153552398 +12 +0.09931785063555171 +22 +0.1845043909507933 +32 +1.001863547806677 +13 +0.09931785063555171 +23 +0.1845043909507933 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.09931785063555398 +20 +0.1845043909507944 +30 +1.1319291153552398 +11 +0.09508647761767314 +21 +0.18027301793291245 +31 +1.0018635478066782 +12 +0.0903926304890455 +22 +0.1755791708042826 +32 +1.0588240032604657 +13 +0.0903926304890455 +23 +0.1755791708042826 +33 +1.0588240032604657 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.09931785063555398 +20 +0.1845043909507944 +30 +1.1319291153552398 +11 +0.0903926304890455 +21 +0.1755791708042826 +31 +1.0588240032604657 +12 +0.08492812760476576 +22 +0.17011466792000507 +32 +1.0799005744368184 +13 +0.08492812760476576 +23 +0.17011466792000507 +33 +1.0799005744368184 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.09931785063555398 +20 +0.1845043909507944 +30 +1.1319291153552398 +11 +0.08492812760476576 +21 +0.17011466792000507 +31 +1.0799005744368184 +12 +0.08492812760476576 +22 +0.17011466792000618 +32 +1.0912264321828118 +13 +0.08492812760476576 +23 +0.17011466792000618 +33 +1.0912264321828118 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.09931785063555398 +20 +0.1845043909507944 +30 +1.1319291153552398 +11 +0.08492812760476576 +21 +0.17011466792000618 +31 +1.0912264321828118 +12 +0.08492812760476576 +22 +0.17011466792000507 +32 +1.1359944433702325 +13 +0.08492812760476576 +23 +0.17011466792000507 +33 +1.1359944433702325 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.09931785063555398 +20 +0.1845043909507944 +30 +1.1319291153552398 +11 +0.08492812760476576 +21 +0.17011466792000507 +31 +1.1359944433702325 +12 +0.09096170351208649 +22 +0.1761482438273269 +32 +1.1428190583057358 +13 +0.09096170351208649 +23 +0.1761482438273269 +33 +1.1428190583057358 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.09096170351208649 +20 +0.1761482438273269 +30 +1.1428190583057358 +11 +0.08492812760476576 +21 +0.17011466792000507 +31 +1.1359944433702325 +12 +0.08492812760476465 +22 +0.17011466792000618 +32 +1.1474487839334422 +13 +0.08492812760476465 +23 +0.17011466792000618 +33 +1.1474487839334422 +70 +1 + 0 +LINE + 8 +finger distal +10 +-0.20568971316600607 +20 +0.20717595716186143 +30 +0.20568971316600676 +11 +-0.20652621200157167 +21 +0.206526212001578 +31 +0.2045995666591466 + 0 +3DFACE + 8 +finger distal +10 +0.18396767361172195 +20 +0.11560560777326617 +30 +0.7307557071160136 +11 +0.14004304520099842 +21 +0.16005831690802014 +31 +0.8489738683201561 +12 +0.1752009048041535 +22 +0.11429416310676693 +32 +0.7946280917100798 +13 +0.1752009048041535 +23 +0.11429416310676693 +33 +0.7946280917100798 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.14004304520099842 +20 +0.16005831690802014 +30 +0.8489738683201561 +11 +0.18396767361172195 +21 +0.11560560777326617 +31 +0.7307557071160136 +12 +0.15567497232576927 +22 +0.1634910183993356 +32 +0.7307557071160147 +13 +0.15567497232576927 +23 +0.1634910183993356 +33 +0.7307557071160147 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.09524177069161455 +20 +0.193567791051381 +30 +0.9182260948156299 +11 +0.15567497232576927 +21 +0.1634910183993356 +31 +0.7307557071160147 +12 +0.11880320614369011 +22 +0.20023478630317332 +32 +0.7307557071160136 +13 +0.11880320614369011 +23 +0.20023478630317332 +33 +0.7307557071160136 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.15567497232576927 +20 +0.1634910183993356 +30 +0.7307557071160147 +11 +0.09524177069161455 +21 +0.193567791051381 +31 +0.9182260948156299 +12 +0.14004304520099842 +22 +0.16005831690802014 +32 +0.8489738683201561 +13 +0.14004304520099842 +23 +0.16005831690802014 +33 +0.8489738683201561 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.20175320916481837 +20 +0.059841866024748225 +30 +0.7307557071160136 +11 +0.1752009048041535 +21 +0.11429416310676693 +31 +0.7946280917100798 +12 +0.19765914773897608 +22 +0.05953197480025596 +32 +0.7599129336382517 +13 +0.19765914773897608 +23 +0.05953197480025596 +33 +0.7599129336382517 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.1752009048041535 +20 +0.11429416310676693 +30 +0.7946280917100798 +11 +0.20175320916481837 +21 +0.059841866024748225 +31 +0.7307557071160136 +12 +0.18396767361172195 +22 +0.11560560777326617 +32 +0.7307557071160136 +13 +0.18396767361172195 +23 +0.11560560777326617 +33 +0.7307557071160136 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.2534617548141387 +20 +0.1463362123712234 +30 +0.30841453414256254 +11 +-0.20653412136710422 +21 +0.2065341213671094 +31 +0.20653412136710492 +12 +-0.2531852032990528 +22 +0.1461765452795445 +32 +0.2531852032990535 +13 +-0.2531852032990528 +23 +0.1461765452795445 +33 +0.2531852032990535 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.20653412136710422 +20 +0.2065341213671094 +30 +0.20653412136710492 +11 +-0.2534617548141387 +21 +0.1463362123712234 +31 +0.30841453414256254 +12 +-0.20695065620168485 +22 +0.2069506562016934 +32 +0.30841453414256254 +13 +-0.20695065620168485 +23 +0.2069506562016934 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.20175320916481837 +20 +0.059841866024748225 +30 +0.7307557071160136 +11 +0.20538343774009993 +21 +1.1657341758564144e-15 +31 +0.7479729991936949 +12 +0.20781952412910853 +22 +1.1657341758564144e-15 +32 +0.7307557071160136 +13 +0.20781952412910853 +23 +1.1657341758564144e-15 +33 +0.7307557071160136 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.20538343774009993 +20 +1.1657341758564144e-15 +30 +0.7479729991936949 +11 +0.20175320916481837 +21 +0.059841866024748225 +31 +0.7307557071160136 +12 +0.19765914773897608 +22 +0.05953197480025596 +32 +0.7599129336382517 +13 +0.19765914773897608 +23 +0.05953197480025596 +33 +0.7599129336382517 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.14586628805175494 +20 +0.25264782201712543 +30 +0.14586628805175564 +11 +-0.07574919749967438 +21 +0.2826998537013695 +31 +0.30841453414256254 +12 +-0.07540049589488734 +22 +0.2813984815956233 +32 +0.07540049589488913 +13 +-0.07540049589488734 +23 +0.2813984815956233 +33 +0.07540049589488913 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.07574919749967438 +20 +0.2826998537013695 +30 +0.30841453414256254 +11 +-0.14586628805175494 +21 +0.25264782201712543 +31 +0.14586628805175564 +12 +-0.1463362123712171 +22 +0.253461754814145 +32 +0.30841453414256254 +13 +-0.1463362123712171 +23 +0.253461754814145 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.044467883797984775 +20 +0.21278370795076884 +30 +0.9967105744140091 +11 +0.11880320614369011 +21 +0.20023478630317332 +31 +0.7307557071160136 +12 +0.07586512499733417 +22 +0.2233328844240816 +32 +0.7307557071160136 +13 +0.07586512499733417 +23 +0.2233328844240816 +33 +0.7307557071160136 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.11880320614369011 +20 +0.20023478630317332 +30 +0.7307557071160136 +11 +0.044467883797984775 +21 +0.21278370795076884 +31 +0.9967105744140091 +12 +0.09524177069161455 +22 +0.193567791051381 +32 +0.9182260948156299 +13 +0.09524177069161455 +23 +0.193567791051381 +33 +0.9182260948156299 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.2826998537013644 +20 +0.07574919749967957 +30 +0.30841453414256254 +11 +-0.2531852032990528 +21 +0.1461765452795445 +31 +0.2531852032990535 +12 +-0.2825554318689639 +22 +0.07571049978631911 +32 +0.28255543186896687 +13 +-0.2825554318689639 +23 +0.07571049978631911 +33 +0.28255543186896687 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.2531852032990528 +20 +0.1461765452795445 +30 +0.2531852032990535 +11 +-0.2826998537013644 +21 +0.07574919749967957 +31 +0.30841453414256254 +12 +-0.2534617548141387 +22 +0.1463362123712234 +32 +0.30841453414256254 +13 +-0.2534617548141387 +23 +0.1463362123712234 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.29267242474243715 +20 +-1.1102230246251565e-15 +30 +0.30841453414256254 +11 +-0.2825554318689639 +21 +0.07571049978631911 +31 +0.28255543186896687 +12 +-0.29258087504374125 +22 +-2.220446049250313e-15 +32 +0.2925808750437419 +13 +-0.29258087504374125 +23 +-2.220446049250313e-15 +33 +0.2925808750437419 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.2825554318689639 +20 +0.07571049978631911 +30 +0.28255543186896687 +11 +-0.29267242474243715 +21 +-1.1102230246251565e-15 +31 +0.30841453414256254 +12 +-0.2826998537013644 +22 +0.07574919749967957 +32 +0.30841453414256254 +13 +-0.2826998537013644 +23 +0.07574919749967957 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.1668511448333203 +20 +0.06753329419776749 +30 +1.2060268924650375 +11 +0.14584425706155324 +21 +0.06447473207281956 +31 +1.2072937903785521 +12 +0.14680251974877673 +22 +0.06216128129700765 +32 +1.2075983619512358 +13 +0.14680251974877673 +23 +0.06216128129700765 +33 +1.2075983619512358 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.1407842662509724 +20 +0.13046430599999836 +30 +1.1778735767177981 +11 +0.11937978943923483 +21 +0.12455561770440277 +31 +1.1824074727105631 +12 +0.12280916074947745 +22 +0.12008637400000183 +32 +1.1842586940664752 +13 +0.12280916074947745 +23 +0.12008637400000183 +33 +1.1842586940664752 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.1407842662509724 +20 +0.13046430599999947 +30 +0.8478281150218822 +11 +0.1668511448333203 +21 +0.06753329419776749 +31 +1.2060268924650375 +12 +0.16685114483332258 +22 +0.06753329419776638 +32 +0.8075348555246178 +13 +0.16685114483332258 +23 +0.06753329419776638 +33 +0.8075348555246178 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.1668511448333203 +20 +0.06753329419776749 +30 +1.2060268924650375 +11 +0.1407842662509724 +21 +0.13046430599999947 +31 +0.8478281150218822 +12 +0.1407842662509724 +22 +0.13046430599999836 +32 +1.1778735767177981 +13 +0.1407842662509724 +23 +0.13046430599999836 +33 +1.1778735767177981 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.1668511448333203 +20 +0.06753329419776749 +30 +1.2060268924650375 +11 +0.12280916074947745 +21 +0.12008637400000183 +31 +1.1842586940664752 +12 +0.14584425706155324 +22 +0.06447473207281956 +32 +1.2072937903785521 +13 +0.14584425706155324 +23 +0.06447473207281956 +33 +1.2072937903785521 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.154986207684761 +20 +0.0 +30 +1.2157820498872123 +11 +0.14680251974877673 +21 +0.06216128129700765 +31 +1.0912264321828118 +12 +0.154986207684761 +22 +-2.220446049250313e-15 +32 +1.0912264321828118 +13 +0.154986207684761 +23 +-2.220446049250313e-15 +33 +1.0912264321828118 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.14680251974877673 +20 +0.06216128129700765 +30 +1.0912264321828118 +11 +0.154986207684761 +21 +0.0 +31 +1.2157820498872123 +12 +0.14680251974877673 +22 +0.06216128129700765 +32 +1.2075983619512358 +13 +0.14680251974877673 +23 +0.06216128129700765 +33 +1.2075983619512358 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.1407842662509724 +20 +0.13046430599999836 +30 +1.1778735767177981 +11 +0.08492812760476576 +21 +0.16945389754362716 +31 +1.147955810876094 +12 +0.11937978943923483 +22 +0.12455561770440277 +32 +1.1824074727105631 +13 +0.11937978943923483 +23 +0.12455561770440277 +33 +1.1824074727105631 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.10572974783891176 +20 +0.1761482438273269 +30 +1.142819058305737 +11 +0.08492812760476465 +21 +0.17011466792000618 +31 +1.1474487839334422 +12 +0.08492812760476576 +22 +0.16945389754362716 +32 +1.147955810876094 +13 +0.08492812760476576 +23 +0.16945389754362716 +33 +1.147955810876094 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.08492812760476465 +20 +0.17011466792000618 +30 +1.1474487839334422 +11 +0.08492812760476576 +21 +0.16945389754362827 +31 +1.1363043595428541 +12 +0.08492812760476576 +22 +0.16945389754362716 +32 +1.147955810876094 +13 +0.08492812760476576 +23 +0.16945389754362716 +33 +1.147955810876094 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08492812760476576 +20 +0.16945389754362827 +30 +1.1363043595428541 +11 +0.08492812760476465 +21 +0.17011466792000618 +31 +1.1474487839334422 +12 +0.08492812760476576 +22 +0.17011466792000507 +32 +1.1359944433702325 +13 +0.08492812760476576 +23 +0.17011466792000507 +33 +1.1359944433702325 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.154986207684761 +20 +0.0 +30 +1.2157820498872123 +11 +0.16725381217609608 +21 +0.06447473207281734 +31 +1.2072937903785526 +12 +0.14680251974877673 +22 +0.06216128129700765 +32 +1.2075983619512358 +13 +0.14680251974877673 +23 +0.06216128129700765 +33 +1.2075983619512358 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.16725381217609608 +20 +0.06447473207281734 +30 +1.2072937903785526 +11 +0.154986207684761 +21 +0.0 +31 +1.2157820498872123 +12 +0.17574207168476186 +22 +0.0 +32 +1.2157820498872116 +13 +0.17574207168476186 +23 +0.0 +33 +1.2157820498872116 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08492812760476576 +20 +0.17011466792000507 +30 +1.1359944433702325 +11 +0.08492812760476465 +21 +0.16945389754362827 +31 +1.0912264321828118 +12 +0.08492812760476576 +22 +0.16945389754362827 +32 +1.1363043595428541 +13 +0.08492812760476576 +23 +0.16945389754362827 +33 +1.1363043595428541 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08492812760476465 +20 +0.16945389754362827 +30 +1.0912264321828118 +11 +0.08492812760476576 +21 +0.17011466792000507 +31 +1.1359944433702325 +12 +0.08492812760476576 +22 +0.17011466792000618 +32 +1.0912264321828118 +13 +0.08492812760476576 +23 +0.17011466792000618 +33 +1.0912264321828118 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.1668511448333203 +20 +0.06753329419776749 +30 +1.2060268924650375 +11 +0.1407842662509724 +21 +0.13046430599999836 +31 +1.1778735767177981 +12 +0.12280916074947745 +22 +0.12008637400000183 +32 +1.1842586940664752 +13 +0.12280916074947745 +23 +0.12008637400000183 +33 +1.1842586940664752 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.10572974783891176 +20 +0.1761482438273269 +30 +1.142819058305737 +11 +0.09931785063555398 +21 +0.1845043909507944 +31 +1.1319291153552398 +12 +0.09096170351208649 +22 +0.1761482438273269 +32 +1.1428190583057358 +13 +0.09096170351208649 +23 +0.1761482438273269 +33 +1.1428190583057358 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.1407842662509724 +20 +0.13046430599999947 +30 +0.8478281150218822 +11 +0.10572974783891176 +21 +0.1761482438273269 +31 +1.142819058305737 +12 +0.1407842662509724 +22 +0.13046430599999836 +32 +1.1778735767177981 +13 +0.1407842662509724 +23 +0.13046430599999836 +33 +1.1778735767177981 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.10572974783891176 +20 +0.1761482438273269 +30 +1.142819058305737 +11 +0.1407842662509724 +21 +0.13046430599999947 +31 +0.8478281150218822 +12 +0.09931785063555287 +22 +0.1845043909507933 +32 +0.9119254345200819 +13 +0.09931785063555287 +23 +0.1845043909507933 +33 +0.9119254345200819 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.10572974783891176 +20 +0.1761482438273269 +30 +1.142819058305737 +11 +0.09931785063555287 +21 +0.1845043909507933 +31 +0.9119254345200819 +12 +0.09931785063555171 +22 +0.1845043909507933 +32 +1.001863547806677 +13 +0.09931785063555171 +23 +0.1845043909507933 +33 +1.001863547806677 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.10572974783891176 +20 +0.1761482438273269 +30 +1.142819058305737 +11 +0.09931785063555171 +21 +0.1845043909507933 +31 +1.001863547806677 +12 +0.09931785063555398 +22 +0.1845043909507944 +32 +1.1319291153552398 +13 +0.09931785063555398 +23 +0.1845043909507944 +33 +1.1319291153552398 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.1378369198074263 +20 +0.08380615427022808 +30 +1.0912264321828118 +11 +0.14680251974877895 +21 +0.062161281297008764 +31 +1.0852016835471139 +12 +0.14680251974877673 +22 +0.06216128129700765 +32 +1.0912264321828118 +13 +0.14680251974877673 +23 +0.06216128129700765 +33 +1.0912264321828118 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.16725381217609608 +20 +0.06447473207281734 +30 +1.2072937903785526 +11 +0.1668511448333203 +21 +0.06753329419776749 +31 +1.2060268924650375 +12 +0.14680251974877673 +22 +0.06216128129700765 +32 +1.2075983619512358 +13 +0.14680251974877673 +23 +0.06216128129700765 +33 +1.2075983619512358 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.08492812760476465 +20 +0.16945389754362827 +30 +1.0912264321828118 +11 +0.08492812760476576 +21 +0.17011466792000507 +31 +1.0799005744368184 +12 +0.08492812760476687 +22 +0.16945389754362716 +32 +1.0811770847804012 +13 +0.08492812760476687 +23 +0.16945389754362716 +33 +1.0811770847804012 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08492812760476576 +20 +0.17011466792000507 +30 +1.0799005744368184 +11 +0.08492812760476465 +21 +0.16945389754362827 +31 +1.0912264321828118 +12 +0.08492812760476576 +22 +0.17011466792000618 +32 +1.0912264321828118 +13 +0.08492812760476576 +23 +0.17011466792000618 +33 +1.0912264321828118 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.1407842662509724 +20 +0.13046430599999836 +30 +1.1778735767177981 +11 +0.10572974783891176 +21 +0.1761482438273269 +31 +1.142819058305737 +12 +0.08492812760476576 +22 +0.16945389754362716 +32 +1.147955810876094 +13 +0.08492812760476576 +23 +0.16945389754362716 +33 +1.147955810876094 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.12777973751198096 +20 +0.10808634016714758 +30 +1.0912264321828118 +11 +0.1378369198074263 +21 +0.08380615427022808 +31 +1.0912264321828118 +12 +0.13165973447285034 +22 +0.09871919888224923 +32 +1.0953774080416923 +13 +0.13165973447285034 +23 +0.09871919888224923 +33 +1.0953774080416923 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.10572974783891176 +20 +0.1761482438273269 +30 +1.142819058305737 +11 +0.09096170351208649 +21 +0.1761482438273269 +31 +1.1428190583057358 +12 +0.08492812760476465 +22 +0.17011466792000618 +32 +1.1474487839334422 +13 +0.08492812760476465 +23 +0.17011466792000618 +33 +1.1474487839334422 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.12280916074947745 +20 +0.12008637400000183 +30 +1.1842586940664752 +11 +0.11359374946129114 +21 +0.1320961318119328 +31 +1.0912264321828118 +12 +0.12280916074947745 +22 +0.1200863739999985 +32 +1.0912264321828118 +13 +0.12280916074947745 +23 +0.1200863739999985 +33 +1.0912264321828118 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.11359374946129114 +20 +0.1320961318119328 +30 +1.0912264321828118 +11 +0.12280916074947745 +21 +0.12008637400000183 +31 +1.1842586940664752 +12 +0.11937978943923483 +22 +0.12455561770440277 +32 +1.1824074727105631 +13 +0.11937978943923483 +23 +0.12455561770440277 +33 +1.1824074727105631 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.11359374946129114 +20 +0.1320961318119328 +30 +1.0912264321828118 +11 +0.11937978943923483 +21 +0.12455561770440277 +31 +1.1824074727105631 +12 +0.08492812760476576 +22 +0.16945389754362716 +32 +1.147955810876094 +13 +0.08492812760476576 +23 +0.16945389754362716 +33 +1.147955810876094 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.11359374946129114 +20 +0.1320961318119328 +30 +1.0912264321828118 +11 +0.08492812760476576 +21 +0.16945389754362716 +31 +1.147955810876094 +12 +0.10766421335770565 +22 +0.13982365371130173 +32 +1.0946480508162637 +13 +0.10766421335770565 +23 +0.13982365371130173 +33 +1.0946480508162637 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.10766421335770565 +20 +0.13982365371130173 +30 +1.0946480508162637 +11 +0.08492812760476576 +21 +0.16945389754362716 +31 +1.147955810876094 +12 +0.10188925895154644 +22 +0.1473497208204092 +32 +1.091226432182813 +13 +0.10188925895154644 +23 +0.1473497208204092 +33 +1.091226432182813 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.10188925895154644 +20 +0.1473497208204092 +30 +1.091226432182813 +11 +0.08492812760476576 +21 +0.16945389754362716 +31 +1.147955810876094 +12 +0.08492812760476465 +22 +0.16945389754362827 +32 +1.0912264321828118 +13 +0.08492812760476465 +23 +0.16945389754362827 +33 +1.0912264321828118 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.08492812760476465 +20 +0.16945389754362827 +30 +1.0912264321828118 +11 +0.08492812760476576 +21 +0.16945389754362716 +31 +1.147955810876094 +12 +0.08492812760476576 +22 +0.16945389754362827 +32 +1.1363043595428541 +13 +0.08492812760476576 +23 +0.16945389754362827 +33 +1.1363043595428541 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.16685114483332258 +20 +0.06753329419776638 +30 +0.8075348555246178 +11 +0.17574207168476186 +21 +0.0 +31 +1.2157820498872116 +12 +0.17574207168476297 +22 +0.0 +32 +0.7937915750752708 +13 +0.17574207168476297 +23 +0.0 +33 +0.7937915750752708 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.17574207168476186 +20 +0.0 +30 +1.2157820498872116 +11 +0.16685114483332258 +21 +0.06753329419776638 +31 +0.8075348555246178 +12 +0.16725381217609608 +22 +0.06447473207281734 +32 +1.2072937903785526 +13 +0.16725381217609608 +23 +0.06447473207281734 +33 +1.2072937903785526 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.16725381217609608 +20 +0.06447473207281734 +30 +1.2072937903785526 +11 +0.16685114483332258 +21 +0.06753329419776638 +31 +0.8075348555246178 +12 +0.1668511448333203 +22 +0.06753329419776749 +32 +1.2060268924650375 +13 +0.1668511448333203 +23 +0.06753329419776749 +33 +1.2060268924650375 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.14819683336031747 +20 +0.051570417947724545 +30 +1.090997067383562 +11 +0.12709521825000325 +21 +0.09529669931084889 +31 +1.1119026978066777 +12 +0.1417562962576535 +22 +0.049329201434111514 +32 +1.1119026978066788 +13 +0.1417562962576535 +23 +0.049329201434111514 +33 +1.1119026978066788 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.12709521825000325 +20 +0.09529669931084889 +30 +1.1119026978066777 +11 +0.14819683336031747 +21 +0.051570417947724545 +31 +1.090997067383562 +12 +0.14680251974877895 +22 +0.062161281297008764 +32 +1.0852016835471139 +13 +0.14680251974877895 +23 +0.062161281297008764 +33 +1.0852016835471139 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.12709521825000325 +20 +0.09529669931084889 +30 +1.1119026978066777 +11 +0.14680251974877895 +21 +0.062161281297008764 +31 +1.0852016835471139 +12 +0.1378369198074263 +22 +0.08380615427022808 +32 +1.0912264321828118 +13 +0.1378369198074263 +23 +0.08380615427022808 +33 +1.0912264321828118 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.12709521825000325 +20 +0.09529669931084889 +30 +1.1119026978066777 +11 +0.1378369198074263 +21 +0.08380615427022808 +31 +1.0912264321828118 +12 +0.13165973447285034 +22 +0.09871919888224923 +32 +1.0953774080416923 +13 +0.13165973447285034 +23 +0.09871919888224923 +33 +1.0953774080416923 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08473014550000091 +20 +0.19059339862169328 +30 +0.9344745934705629 +11 +0.09931785063555171 +21 +0.1845043909507933 +31 +1.001863547806677 +12 +0.09931785063555287 +22 +0.1845043909507933 +32 +0.9119254345200819 +13 +0.09931785063555287 +23 +0.1845043909507933 +33 +0.9119254345200819 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.09931785063555171 +20 +0.1845043909507933 +30 +1.001863547806677 +11 +0.08473014550000091 +21 +0.19059339862169328 +31 +0.9344745934705629 +12 +0.08473014550000202 +22 +0.19059339862169217 +32 +1.001863547806677 +13 +0.08473014550000202 +23 +0.19059339862169217 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.09931785063555171 +20 +0.1845043909507933 +30 +1.001863547806677 +11 +0.08473014550000202 +21 +0.19059339862169217 +31 +1.001863547806677 +12 +0.09508647761767314 +22 +0.18027301793291245 +32 +1.0018635478066782 +13 +0.09508647761767314 +23 +0.18027301793291245 +33 +1.0018635478066782 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.08492812760476465 +20 +0.16945389754362827 +30 +1.0912264321828118 +11 +0.08492812760476687 +21 +0.16945389754362716 +31 +1.0811770847804012 +12 +0.10188925895154644 +22 +0.1473497208204092 +32 +1.091226432182813 +13 +0.10188925895154644 +23 +0.1473497208204092 +33 +1.091226432182813 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.14584425706155324 +20 +0.06447473207281956 +30 +1.2072937903785521 +11 +0.14680251974877673 +21 +0.06216128129700765 +31 +1.0912264321828118 +12 +0.14680251974877673 +22 +0.06216128129700765 +32 +1.2075983619512358 +13 +0.14680251974877673 +23 +0.06216128129700765 +33 +1.2075983619512358 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.14680251974877673 +20 +0.06216128129700765 +30 +1.0912264321828118 +11 +0.14584425706155324 +21 +0.06447473207281956 +31 +1.2072937903785521 +12 +0.1378369198074263 +22 +0.08380615427022808 +32 +1.0912264321828118 +13 +0.1378369198074263 +23 +0.08380615427022808 +33 +1.0912264321828118 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.1378369198074263 +20 +0.08380615427022808 +30 +1.0912264321828118 +11 +0.14584425706155324 +21 +0.06447473207281956 +31 +1.2072937903785521 +12 +0.12280916074947745 +22 +0.12008637400000183 +32 +1.1842586940664752 +13 +0.12280916074947745 +23 +0.12008637400000183 +33 +1.1842586940664752 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.1378369198074263 +20 +0.08380615427022808 +30 +1.0912264321828118 +11 +0.12280916074947745 +21 +0.12008637400000183 +31 +1.1842586940664752 +12 +0.13165973447285034 +22 +0.09871919888224923 +32 +1.0953774080416923 +13 +0.13165973447285034 +23 +0.09871919888224923 +33 +1.0953774080416923 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.13165973447285034 +20 +0.09871919888224923 +30 +1.0953774080416923 +11 +0.12280916074947745 +21 +0.12008637400000183 +31 +1.1842586940664752 +12 +0.12777973751198096 +22 +0.10808634016714758 +32 +1.0912264321828118 +13 +0.12777973751198096 +23 +0.10808634016714758 +33 +1.0912264321828118 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.12777973751198096 +20 +0.10808634016714758 +30 +1.0912264321828118 +11 +0.12280916074947745 +21 +0.12008637400000183 +31 +1.1842586940664752 +12 +0.12280916074947745 +22 +0.1200863739999985 +32 +1.0912264321828118 +13 +0.12280916074947745 +23 +0.1200863739999985 +33 +1.0912264321828118 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.11359374946129114 +20 +0.1320961318119328 +30 +1.0912264321828118 +11 +0.12280916074947745 +21 +0.1200863739999985 +31 +1.0859087104541831 +12 +0.12280916074947745 +22 +0.1200863739999985 +32 +1.0912264321828118 +13 +0.12280916074947745 +23 +0.1200863739999985 +33 +1.0912264321828118 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.0818430358036853 +20 +0.18409908604890202 +30 +1.0588240032604657 +11 +0.09508647761767314 +21 +0.18027301793291245 +31 +1.0018635478066782 +12 +0.08473014550000202 +22 +0.19059339862169217 +32 +1.001863547806677 +13 +0.08473014550000202 +23 +0.19059339862169217 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.09508647761767314 +20 +0.18027301793291245 +30 +1.0018635478066782 +11 +0.0818430358036853 +21 +0.18409908604890202 +31 +1.0588240032604657 +12 +0.0903926304890455 +22 +0.1755791708042826 +32 +1.0588240032604657 +13 +0.0903926304890455 +23 +0.1755791708042826 +33 +1.0588240032604657 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.10188925895154644 +20 +0.1473497208204092 +30 +1.091226432182813 +11 +0.11359374946129114 +21 +0.1320961318119328 +31 +1.0912264321828118 +12 +0.10766421335770565 +22 +0.13982365371130173 +32 +1.0946480508162637 +13 +0.10766421335770565 +23 +0.13982365371130173 +33 +1.0946480508162637 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.154986207684761 +20 +-2.220446049250313e-15 +30 +1.0912264321828118 +11 +0.14819683336031747 +21 +0.051570417947724545 +31 +1.090997067383562 +12 +0.154986207684761 +22 +-1.1102230246251565e-15 +32 +1.0861010545237688 +13 +0.154986207684761 +23 +-1.1102230246251565e-15 +33 +1.0861010545237688 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.14819683336031747 +20 +0.051570417947724545 +30 +1.090997067383562 +11 +0.154986207684761 +21 +-2.220446049250313e-15 +31 +1.0912264321828118 +12 +0.14680251974877673 +22 +0.06216128129700765 +32 +1.0912264321828118 +13 +0.14680251974877673 +23 +0.06216128129700765 +33 +1.0912264321828118 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.14819683336031747 +20 +0.051570417947724545 +30 +1.090997067383562 +11 +0.14680251974877673 +21 +0.06216128129700765 +31 +1.0912264321828118 +12 +0.14680251974877895 +22 +0.062161281297008764 +32 +1.0852016835471139 +13 +0.14680251974877895 +23 +0.062161281297008764 +33 +1.0852016835471139 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.12280916074947745 +20 +0.1200863739999985 +30 +1.0859087104541831 +11 +0.12777973751198096 +21 +0.10808634016714758 +31 +1.0912264321828118 +12 +0.12280916074947745 +22 +0.1200863739999985 +32 +1.0912264321828118 +13 +0.12280916074947745 +23 +0.1200863739999985 +33 +1.0912264321828118 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.031013385719354247 +20 +0.040277124310847456 +30 +1.2144428615824712 +11 +0.021929775349712632 +21 +0.049329201434111514 +31 +1.2144428615824712 +12 +2.942091015256665e-15 +22 +1.1657341758564144e-15 +32 +1.221941847806679 +13 +2.942091015256665e-15 +23 +1.1657341758564144e-15 +33 +1.221941847806679 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.03798348510426813 +20 +0.028480227726893792 +30 +1.2144428615824718 +11 +0.031013385719354247 +21 +0.040277124310847456 +31 +1.2144428615824712 +12 +2.942091015256665e-15 +22 +1.1657341758564144e-15 +32 +1.221941847806679 +13 +2.942091015256665e-15 +23 +1.1657341758564144e-15 +33 +1.221941847806679 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.031013385719354247 +20 +0.040277124310847456 +30 +1.2144428615824712 +11 +0.04236507275000306 +21 +0.09529669931084667 +31 +1.192456946428371 +12 +0.021929775349712632 +22 +0.049329201434111514 +32 +1.2144428615824712 +13 +0.021929775349712632 +23 +0.049329201434111514 +33 +1.2144428615824712 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.04236507275000306 +20 +0.09529669931084667 +30 +1.192456946428371 +11 +0.031013385719354247 +21 +0.040277124310847456 +31 +1.2144428615824712 +12 +0.05991326045397671 +22 +0.07780942916100303 +32 +1.192456946428371 +13 +0.05991326045397671 +23 +0.07780942916100303 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.05991326045397671 +20 +0.1347698846147916 +30 +1.157482406128686 +11 +0.10377281115339276 +21 +0.1347698846147916 +31 +1.1119026978066777 +12 +0.07337845846935548 +22 +0.16505872500000207 +32 +1.1119026978066777 +13 +0.07337845846935548 +23 +0.16505872500000207 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.10377281115339276 +20 +0.1347698846147916 +30 +1.1119026978066777 +11 +0.05991326045397671 +21 +0.1347698846147916 +31 +1.157482406128686 +12 +0.08473014550000313 +22 +0.11003915000000175 +32 +1.157482406128686 +13 +0.08473014550000313 +23 +0.11003915000000175 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.07337845846935548 +20 +0.16505872500000207 +30 +1.1119026978066777 +11 +0.0903926304890455 +21 +0.1755791708042826 +31 +1.0588240032604657 +12 +0.0818430358036853 +22 +0.18409908604890202 +32 +1.0588240032604657 +13 +0.0818430358036853 +23 +0.18409908604890202 +33 +1.0588240032604657 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.0903926304890455 +20 +0.1755791708042826 +30 +1.0588240032604657 +11 +0.07337845846935548 +21 +0.16505872500000207 +31 +1.1119026978066777 +12 +0.08492812760476576 +22 +0.17011466792000507 +32 +1.0799005744368184 +13 +0.08492812760476576 +23 +0.17011466792000507 +33 +1.0799005744368184 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.08492812760476576 +20 +0.17011466792000507 +30 +1.0799005744368184 +11 +0.07337845846935548 +21 +0.16505872500000207 +31 +1.1119026978066777 +12 +0.08492812760476687 +22 +0.16945389754362716 +32 +1.0811770847804012 +13 +0.08492812760476687 +23 +0.16945389754362716 +33 +1.0811770847804012 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.08492812760476687 +20 +0.16945389754362716 +30 +1.0811770847804012 +11 +0.07337845846935548 +21 +0.16505872500000207 +31 +1.1119026978066777 +12 +0.10188925895154644 +22 +0.1473497208204092 +32 +1.091226432182813 +13 +0.10188925895154644 +23 +0.1473497208204092 +33 +1.091226432182813 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.10188925895154644 +20 +0.1473497208204092 +30 +1.091226432182813 +11 +0.07337845846935548 +21 +0.16505872500000207 +31 +1.1119026978066777 +12 +0.10766421335770565 +22 +0.13982365371130173 +32 +1.0946480508162637 +13 +0.10766421335770565 +23 +0.13982365371130173 +33 +1.0946480508162637 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.10766421335770565 +20 +0.13982365371130173 +30 +1.0946480508162637 +11 +0.07337845846935548 +21 +0.16505872500000207 +31 +1.1119026978066777 +12 +0.10377281115339276 +22 +0.1347698846147916 +32 +1.1119026978066777 +13 +0.10377281115339276 +23 +0.1347698846147916 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.13165973447285034 +20 +0.09871919888224923 +30 +1.0953774080416923 +11 +0.10377281115339276 +21 +0.1347698846147916 +31 +1.1119026978066777 +12 +0.12709521825000325 +22 +0.09529669931084889 +32 +1.1119026978066777 +13 +0.12709521825000325 +23 +0.09529669931084889 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.10377281115339276 +20 +0.1347698846147916 +30 +1.1119026978066777 +11 +0.13165973447285034 +21 +0.09871919888224923 +31 +1.0953774080416923 +12 +0.12777973751198096 +22 +0.10808634016714758 +32 +1.0912264321828118 +13 +0.12777973751198096 +23 +0.10808634016714758 +33 +1.0912264321828118 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.10377281115339276 +20 +0.1347698846147916 +30 +1.1119026978066777 +11 +0.12777973751198096 +21 +0.10808634016714758 +31 +1.0912264321828118 +12 +0.12280916074947745 +22 +0.1200863739999985 +32 +1.0859087104541831 +13 +0.12280916074947745 +23 +0.1200863739999985 +33 +1.0859087104541831 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.10377281115339276 +20 +0.1347698846147916 +30 +1.1119026978066777 +11 +0.12280916074947745 +21 +0.1200863739999985 +31 +1.0859087104541831 +12 +0.11359374946129114 +22 +0.1320961318119328 +32 +1.0912264321828118 +13 +0.11359374946129114 +23 +0.1320961318119328 +33 +1.0912264321828118 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.10377281115339276 +20 +0.1347698846147916 +30 +1.1119026978066777 +11 +0.11359374946129114 +21 +0.1320961318119328 +31 +1.0912264321828118 +12 +0.10766421335770565 +22 +0.13982365371130173 +32 +1.0946480508162637 +13 +0.10766421335770565 +23 +0.13982365371130173 +33 +1.0946480508162637 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.29267242474244115 +30 +0.30841453414256254 +11 +0.07279039008472937 +21 +0.28136529499842167 +31 +0.010230022180818192 +12 +2.942091015256665e-15 +22 +0.29088918200000213 +32 +-1.1189627002750058e-15 +13 +2.942091015256665e-15 +23 +0.29088918200000213 +33 +-1.1189627002750058e-15 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.05991326045397671 +20 +0.07780942916100303 +30 +1.192456946428371 +11 +0.05991326045397671 +21 +0.1347698846147916 +31 +1.157482406128686 +12 +0.04236507275000306 +22 +0.09529669931084667 +32 +1.192456946428371 +13 +0.04236507275000306 +23 +0.09529669931084667 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.05991326045397671 +20 +0.1347698846147916 +30 +1.157482406128686 +11 +0.05991326045397671 +21 +0.07780942916100303 +31 +1.192456946428371 +12 +0.08473014550000313 +22 +0.11003915000000175 +32 +1.157482406128686 +13 +0.08473014550000313 +23 +0.11003915000000175 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.07337845846935437 +20 +0.05501957500000143 +30 +1.1924569464283716 +11 +0.08473014550000313 +21 +0.11003915000000175 +31 +1.157482406128686 +12 +0.05991326045397671 +22 +0.07780942916100303 +32 +1.192456946428371 +13 +0.05991326045397671 +23 +0.07780942916100303 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08473014550000313 +20 +0.11003915000000175 +30 +1.157482406128686 +11 +0.07337845846935437 +21 +0.05501957500000143 +31 +1.1924569464283716 +12 +0.10377281115339276 +22 +0.07780942916100636 +32 +1.1574824061286866 +13 +0.10377281115339276 +23 +0.07780942916100636 +33 +1.1574824061286866 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.12709521825000325 +20 +0.09529669931084889 +30 +1.1119026978066777 +11 +0.08473014550000313 +21 +0.11003915000000175 +31 +1.157482406128686 +12 +0.10377281115339276 +22 +0.07780942916100636 +32 +1.1574824061286866 +13 +0.10377281115339276 +23 +0.07780942916100636 +33 +1.1574824061286866 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08473014550000313 +20 +0.11003915000000175 +30 +1.157482406128686 +11 +0.12709521825000325 +21 +0.09529669931084889 +31 +1.1119026978066777 +12 +0.10377281115339276 +22 +0.1347698846147916 +32 +1.1119026978066777 +13 +0.10377281115339276 +23 +0.1347698846147916 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.03798348510426813 +20 +0.028480227726893792 +30 +1.2144428615824718 +11 +0.05991326045397671 +21 +0.07780942916100303 +31 +1.192456946428371 +12 +0.031013385719354247 +22 +0.040277124310847456 +32 +1.2144428615824712 +13 +0.031013385719354247 +23 +0.040277124310847456 +33 +1.2144428615824712 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.05991326045397671 +20 +0.07780942916100303 +30 +1.192456946428371 +11 +0.03798348510426813 +21 +0.028480227726893792 +31 +1.2144428615824718 +12 +0.07337845846935437 +22 +0.05501957500000143 +32 +1.1924569464283716 +13 +0.07337845846935437 +23 +0.05501957500000143 +33 +1.1924569464283716 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.042365072750004173 +20 +0.01474245068915514 +30 +1.2144428615824718 +11 +0.03798348510426813 +21 +0.028480227726893792 +31 +1.2144428615824718 +12 +2.942091015256665e-15 +22 +1.1657341758564144e-15 +32 +1.221941847806679 +13 +2.942091015256665e-15 +23 +1.1657341758564144e-15 +33 +1.221941847806679 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.042365072750004173 +20 +0.01474245068915514 +30 +1.2144428615824718 +11 +0.07337845846935437 +21 +0.05501957500000143 +31 +1.1924569464283716 +12 +0.03798348510426813 +22 +0.028480227726893792 +32 +1.2144428615824718 +13 +0.03798348510426813 +23 +0.028480227726893792 +33 +1.2144428615824718 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.07337845846935437 +20 +0.05501957500000143 +30 +1.1924569464283716 +11 +0.042365072750004173 +21 +0.01474245068915514 +31 +1.2144428615824718 +12 +0.08184303580368191 +22 +0.028480227726896012 +32 +1.1924569464283705 +13 +0.08184303580368191 +23 +0.028480227726896012 +33 +1.1924569464283705 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08184303580368191 +20 +0.028480227726896012 +30 +1.1924569464283705 +11 +0.10377281115339276 +21 +0.07780942916100636 +31 +1.1574824061286866 +12 +0.07337845846935437 +22 +0.05501957500000143 +32 +1.1924569464283716 +13 +0.07337845846935437 +23 +0.05501957500000143 +33 +1.1924569464283716 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.10377281115339276 +20 +0.07780942916100636 +30 +1.1574824061286866 +11 +0.08184303580368191 +21 +0.028480227726896012 +31 +1.1924569464283705 +12 +0.11574353121935221 +22 +0.04027712431084857 +32 +1.1574824061286866 +13 +0.11574353121935221 +23 +0.04027712431084857 +33 +1.1574824061286866 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.1417562962576535 +20 +0.049329201434111514 +30 +1.1119026978066788 +11 +0.10377281115339276 +21 +0.07780942916100636 +31 +1.1574824061286866 +12 +0.11574353121935221 +22 +0.04027712431084857 +32 +1.1574824061286866 +13 +0.11574353121935221 +23 +0.04027712431084857 +33 +1.1574824061286866 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.10377281115339276 +20 +0.07780942916100636 +30 +1.1574824061286866 +11 +0.1417562962576535 +21 +0.049329201434111514 +31 +1.1119026978066788 +12 +0.12709521825000325 +22 +0.09529669931084889 +32 +1.1119026978066777 +13 +0.12709521825000325 +23 +0.09529669931084889 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.043859550699416716 +20 +1.1657341758564144e-15 +30 +1.2144428615824712 +11 +0.042365072750004173 +21 +0.01474245068915514 +31 +1.2144428615824718 +12 +2.942091015256665e-15 +22 +1.1657341758564144e-15 +32 +1.221941847806679 +13 +2.942091015256665e-15 +23 +1.1657341758564144e-15 +33 +1.221941847806679 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.043859550699416716 +20 +1.1657341758564144e-15 +30 +1.2144428615824712 +11 +0.08184303580368191 +21 +0.028480227726896012 +31 +1.1924569464283705 +12 +0.042365072750004173 +22 +0.01474245068915514 +32 +1.2144428615824718 +13 +0.042365072750004173 +23 +0.01474245068915514 +33 +1.2144428615824718 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08184303580368191 +20 +0.028480227726896012 +30 +1.1924569464283705 +11 +0.043859550699416716 +21 +1.1657341758564144e-15 +31 +1.2144428615824712 +12 +0.08473014550000202 +22 +2.275957200481571e-15 +32 +1.192456946428371 +13 +0.08473014550000202 +23 +2.275957200481571e-15 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08473014550000202 +20 +2.275957200481571e-15 +30 +1.192456946428371 +11 +0.11574353121935221 +21 +0.04027712431084857 +31 +1.1574824061286866 +12 +0.08184303580368191 +22 +0.028480227726896012 +32 +1.1924569464283705 +13 +0.08184303580368191 +23 +0.028480227726896012 +33 +1.1924569464283705 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.11574353121935221 +20 +0.04027712431084857 +30 +1.1574824061286866 +11 +0.08473014550000202 +21 +2.275957200481571e-15 +31 +1.192456946428371 +12 +0.11982652090794826 +22 +2.275957200481571e-15 +32 +1.157482406128686 +13 +0.11982652090794826 +23 +2.275957200481571e-15 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.1417562962576535 +20 +0.049329201434111514 +30 +1.1119026978066788 +11 +0.11982652090794826 +21 +2.275957200481571e-15 +31 +1.157482406128686 +12 +0.14675691693870468 +22 +1.1657341758564144e-15 +32 +1.1119026978066777 +13 +0.14675691693870468 +23 +1.1657341758564144e-15 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.11982652090794826 +20 +2.275957200481571e-15 +30 +1.157482406128686 +11 +0.1417562962576535 +21 +0.049329201434111514 +31 +1.1119026978066788 +12 +0.11574353121935221 +22 +0.04027712431084857 +32 +1.1574824061286866 +13 +0.11574353121935221 +23 +0.04027712431084857 +33 +1.1574824061286866 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.14819683336031747 +20 +0.051570417947724545 +30 +1.090997067383562 +11 +0.14675691693870468 +21 +1.1657341758564144e-15 +31 +1.1119026978066777 +12 +0.154986207684761 +22 +-1.1102230246251565e-15 +32 +1.0861010545237688 +13 +0.154986207684761 +23 +-1.1102230246251565e-15 +33 +1.0861010545237688 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.14675691693870468 +20 +1.1657341758564144e-15 +30 +1.1119026978066777 +11 +0.14819683336031747 +21 +0.051570417947724545 +31 +1.090997067383562 +12 +0.1417562962576535 +22 +0.049329201434111514 +32 +1.1119026978066788 +13 +0.1417562962576535 +23 +0.049329201434111514 +33 +1.1119026978066788 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.04113427580894241 +20 +0.21304527383546001 +30 +1.0018635478066782 +11 +0.043859550699415606 +21 +0.21257931377579353 +31 +1.001863547806677 +12 +0.043859550699414496 +22 +0.21257931377579464 +32 +0.9976509142143398 +13 +0.043859550699414496 +23 +0.21257931377579464 +33 +0.9976509142143398 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.042365072750004173 +20 +0.20533584931084842 +30 +1.0588240032604646 +11 +0.08473014550000202 +21 +0.19059339862169217 +31 +1.001863547806677 +12 +0.043859550699415606 +22 +0.21257931377579353 +32 +1.001863547806677 +13 +0.043859550699415606 +23 +0.21257931377579353 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08473014550000202 +20 +0.19059339862169217 +30 +1.001863547806677 +11 +0.042365072750004173 +21 +0.20533584931084842 +31 +1.0588240032604646 +12 +0.0818430358036853 +22 +0.18409908604890202 +32 +1.0588240032604657 +13 +0.0818430358036853 +23 +0.18409908604890202 +33 +1.0588240032604657 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.03798348510426813 +20 +0.18409908604890313 +30 +1.1119026978066788 +11 +0.0818430358036853 +21 +0.18409908604890202 +31 +1.0588240032604657 +12 +0.042365072750004173 +22 +0.20533584931084842 +32 +1.0588240032604646 +13 +0.042365072750004173 +23 +0.20533584931084842 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.0818430358036853 +20 +0.18409908604890202 +30 +1.0588240032604657 +11 +0.03798348510426813 +21 +0.18409908604890313 +31 +1.1119026978066788 +12 +0.07337845846935548 +22 +0.16505872500000207 +32 +1.1119026978066777 +13 +0.07337845846935548 +23 +0.16505872500000207 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.03798348510426813 +20 +0.18409908604890313 +30 +1.1119026978066788 +11 +0.05991326045397671 +21 +0.1347698846147916 +31 +1.157482406128686 +12 +0.07337845846935548 +22 +0.16505872500000207 +32 +1.1119026978066777 +13 +0.07337845846935548 +23 +0.16505872500000207 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.05991326045397671 +20 +0.1347698846147916 +30 +1.157482406128686 +11 +0.03798348510426813 +21 +0.18409908604890313 +31 +1.1119026978066788 +12 +0.031013385719353137 +22 +0.1503162743108481 +32 +1.157482406128686 +13 +0.031013385719353137 +23 +0.1503162743108481 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.04236507275000306 +20 +0.09529669931084667 +30 +1.192456946428371 +11 +0.031013385719353137 +21 +0.1503162743108481 +31 +1.157482406128686 +12 +0.021929775349711467 +22 +0.10628965688789677 +32 +1.192456946428371 +13 +0.021929775349711467 +23 +0.10628965688789677 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.031013385719353137 +20 +0.1503162743108481 +30 +1.157482406128686 +11 +0.04236507275000306 +21 +0.09529669931084667 +31 +1.192456946428371 +12 +0.05991326045397671 +22 +0.1347698846147916 +32 +1.157482406128686 +13 +0.05991326045397671 +23 +0.1347698846147916 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.021929775349712632 +20 +0.049329201434111514 +30 +1.2144428615824712 +11 +0.021929775349711467 +21 +0.10628965688789677 +31 +1.192456946428371 +12 +0.011351687030651703 +22 +0.05501957500000032 +32 +1.2144428615824712 +13 +0.011351687030651703 +23 +0.05501957500000032 +33 +1.2144428615824712 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.021929775349711467 +20 +0.10628965688789677 +30 +1.192456946428371 +11 +0.021929775349712632 +21 +0.049329201434111514 +31 +1.2144428615824712 +12 +0.04236507275000306 +22 +0.09529669931084667 +32 +1.192456946428371 +13 +0.04236507275000306 +23 +0.09529669931084667 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.021929775349712632 +20 +0.049329201434111514 +30 +1.2144428615824712 +11 +0.011351687030651703 +21 +0.05501957500000032 +31 +1.2144428615824712 +12 +2.942091015256665e-15 +22 +1.1657341758564144e-15 +32 +1.221941847806679 +13 +2.942091015256665e-15 +23 +1.1657341758564144e-15 +33 +1.221941847806679 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.21257931377579575 +30 +1.0588240032604646 +11 +0.04113427580894241 +21 +0.21304527383546001 +31 +1.0018635478066782 +12 +1.7763568394002505e-15 +22 +0.22007830000000128 +32 +1.001863547806677 +13 +1.7763568394002505e-15 +23 +0.22007830000000128 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.04113427580894241 +20 +0.21304527383546001 +30 +1.0018635478066782 +11 +0.042365072750004173 +21 +0.20533584931084842 +31 +1.0588240032604646 +12 +0.043859550699415606 +22 +0.21257931377579353 +32 +1.001863547806677 +13 +0.043859550699415606 +23 +0.21257931377579353 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.042365072750004173 +20 +0.20533584931084842 +30 +1.0588240032604646 +11 +0.04113427580894241 +21 +0.21304527383546001 +31 +1.0018635478066782 +12 +2.942091015256665e-15 +22 +0.21257931377579575 +32 +1.0588240032604646 +13 +2.942091015256665e-15 +23 +0.21257931377579575 +33 +1.0588240032604646 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.19059339862169555 +30 +1.1119026978066777 +11 +0.042365072750004173 +21 +0.20533584931084842 +31 +1.0588240032604646 +12 +2.942091015256665e-15 +22 +0.21257931377579575 +32 +1.0588240032604646 +13 +2.942091015256665e-15 +23 +0.21257931377579575 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.042365072750004173 +20 +0.20533584931084842 +30 +1.0588240032604646 +11 +2.942091015256665e-15 +21 +0.19059339862169555 +31 +1.1119026978066777 +12 +0.03798348510426813 +22 +0.18409908604890313 +32 +1.1119026978066788 +13 +0.03798348510426813 +23 +0.18409908604890313 +33 +1.1119026978066788 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +1.7763568394002505e-15 +20 +0.15561885832200822 +30 +1.157482406128686 +11 +0.03798348510426813 +21 +0.18409908604890313 +31 +1.1119026978066788 +12 +2.942091015256665e-15 +22 +0.19059339862169555 +32 +1.1119026978066777 +13 +2.942091015256665e-15 +23 +0.19059339862169555 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.03798348510426813 +20 +0.18409908604890313 +30 +1.1119026978066788 +11 +1.7763568394002505e-15 +21 +0.15561885832200822 +31 +1.157482406128686 +12 +0.031013385719353137 +22 +0.1503162743108481 +32 +1.157482406128686 +13 +0.031013385719353137 +23 +0.1503162743108481 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.11003915000000064 +30 +1.1924569464283716 +11 +0.031013385719353137 +21 +0.1503162743108481 +31 +1.157482406128686 +12 +1.7763568394002505e-15 +22 +0.15561885832200822 +32 +1.157482406128686 +13 +1.7763568394002505e-15 +23 +0.15561885832200822 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.031013385719353137 +20 +0.1503162743108481 +30 +1.157482406128686 +11 +2.942091015256665e-15 +21 +0.11003915000000064 +31 +1.1924569464283716 +12 +0.021929775349711467 +22 +0.10628965688789677 +32 +1.192456946428371 +13 +0.021929775349711467 +23 +0.10628965688789677 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.011351687030651703 +20 +0.05501957500000032 +30 +1.2144428615824712 +11 +2.942091015256665e-15 +21 +0.11003915000000064 +31 +1.1924569464283716 +12 +1.7763568394002505e-15 +22 +0.05696045545378753 +32 +1.2144428615824712 +13 +1.7763568394002505e-15 +23 +0.05696045545378753 +33 +1.2144428615824712 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.11003915000000064 +30 +1.1924569464283716 +11 +0.011351687030651703 +21 +0.05501957500000032 +31 +1.2144428615824712 +12 +0.021929775349711467 +22 +0.10628965688789677 +32 +1.192456946428371 +13 +0.021929775349711467 +23 +0.10628965688789677 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.011351687030651703 +20 +0.05501957500000032 +30 +1.2144428615824712 +11 +1.7763568394002505e-15 +21 +0.05696045545378753 +31 +1.2144428615824712 +12 +2.942091015256665e-15 +22 +1.1657341758564144e-15 +32 +1.221941847806679 +13 +2.942091015256665e-15 +23 +1.1657341758564144e-15 +33 +1.221941847806679 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +1.1657341758564144e-15 +30 +1.221941847806679 +11 +1.7763568394002505e-15 +21 +0.05696045545378753 +31 +1.2144428615824712 +12 +-0.014742450689149977 +22 +0.05501957500000032 +32 +1.2144428615824718 +13 +-0.014742450689149977 +23 +0.05501957500000032 +33 +1.2144428615824718 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +-0.11003914999999548 +20 +0.19059339862169328 +30 +1.0018635478066782 +11 +-0.055019574999997406 +21 +0.20533584931084842 +31 +1.0588240032604657 +12 +-0.056960455453783476 +22 +0.21257931377579353 +32 +1.001863547806677 +13 +-0.056960455453783476 +23 +0.21257931377579353 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.055019574999997406 +20 +0.20533584931084842 +30 +1.0588240032604657 +11 +-0.11003914999999548 +21 +0.19059339862169328 +31 +1.0018635478066782 +12 +-0.10628965688789382 +22 +0.18409908604890313 +32 +1.0588240032604646 +13 +-0.10628965688789382 +23 +0.18409908604890313 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.09529669931084372 +20 +0.16505872500000096 +30 +1.1119026978066777 +11 +-0.055019574999997406 +21 +0.20533584931084842 +31 +1.0588240032604657 +12 +-0.10628965688789382 +22 +0.18409908604890313 +32 +1.0588240032604646 +13 +-0.10628965688789382 +23 +0.18409908604890313 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.055019574999997406 +20 +0.20533584931084842 +30 +1.0588240032604657 +11 +-0.09529669931084372 +21 +0.16505872500000096 +31 +1.1119026978066777 +12 +-0.049329201434107434 +22 +0.18409908604890313 +32 +1.1119026978066777 +13 +-0.049329201434107434 +23 +0.18409908604890313 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.0778094291610012 +20 +0.13476988461479278 +30 +1.157482406128686 +11 +-0.049329201434107434 +21 +0.18409908604890313 +31 +1.1119026978066777 +12 +-0.09529669931084372 +22 +0.16505872500000096 +32 +1.1119026978066777 +13 +-0.09529669931084372 +23 +0.16505872500000096 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.049329201434107434 +20 +0.18409908604890313 +30 +1.1119026978066777 +11 +-0.0778094291610012 +21 +0.13476988461479278 +31 +1.157482406128686 +12 +-0.040277124310843404 +22 +0.1503162743108481 +32 +1.157482406128686 +13 +-0.040277124310843404 +23 +0.1503162743108481 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.055019574999996296 +20 +0.09529669931084778 +30 +1.192456946428371 +11 +-0.040277124310843404 +21 +0.1503162743108481 +31 +1.157482406128686 +12 +-0.0778094291610012 +22 +0.13476988461479278 +32 +1.157482406128686 +13 +-0.0778094291610012 +23 +0.13476988461479278 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.040277124310843404 +20 +0.1503162743108481 +30 +1.157482406128686 +11 +-0.055019574999996296 +21 +0.09529669931084778 +31 +1.192456946428371 +12 +-0.028480227726888574 +22 +0.10628965688789788 +32 +1.192456946428371 +13 +-0.028480227726888574 +23 +0.10628965688789788 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.02848022772688974 +20 +0.049329201434111514 +30 +1.2144428615824712 +11 +-0.028480227726888574 +21 +0.10628965688789788 +31 +1.192456946428371 +12 +-0.055019574999996296 +22 +0.09529669931084778 +32 +1.192456946428371 +13 +-0.055019574999996296 +23 +0.09529669931084778 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.028480227726888574 +20 +0.10628965688789788 +30 +1.192456946428371 +11 +-0.02848022772688974 +21 +0.049329201434111514 +31 +1.2144428615824712 +12 +-0.014742450689149977 +22 +0.05501957500000032 +32 +1.2144428615824718 +13 +-0.014742450689149977 +23 +0.05501957500000032 +33 +1.2144428615824718 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +1.1657341758564144e-15 +30 +1.221941847806679 +11 +-0.014742450689149977 +21 +0.05501957500000032 +31 +1.2144428615824718 +12 +-0.02848022772688974 +22 +0.049329201434111514 +32 +1.2144428615824712 +13 +-0.02848022772688974 +23 +0.049329201434111514 +33 +1.2144428615824712 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.20538343774009993 +20 +1.1657341758564144e-15 +30 +0.7479729991936949 +11 +0.16685114483332258 +21 +0.06753329419776638 +31 +0.8075348555246178 +12 +0.17574207168476297 +22 +0.0 +32 +0.7937915750752708 +13 +0.17574207168476297 +23 +0.0 +33 +0.7937915750752708 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.16685114483332258 +20 +0.06753329419776638 +30 +0.8075348555246178 +11 +0.20538343774009993 +21 +1.1657341758564144e-15 +31 +0.7479729991936949 +12 +0.19765914773897608 +22 +0.05953197480025596 +32 +0.7599129336382517 +13 +0.19765914773897608 +23 +0.05953197480025596 +33 +0.7599129336382517 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.16685114483332258 +20 +0.06753329419776638 +30 +0.8075348555246178 +11 +0.19765914773897608 +21 +0.05953197480025596 +31 +0.7599129336382517 +12 +0.1752009048041535 +22 +0.11429416310676693 +32 +0.7946280917100798 +13 +0.1752009048041535 +23 +0.11429416310676693 +33 +0.7946280917100798 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.16685114483332258 +20 +0.06753329419776638 +30 +0.8075348555246178 +11 +0.1752009048041535 +21 +0.11429416310676693 +31 +0.7946280917100798 +12 +0.1407842662509724 +22 +0.13046430599999947 +32 +0.8478281150218822 +13 +0.1407842662509724 +23 +0.13046430599999947 +33 +0.8478281150218822 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.1407842662509724 +20 +0.13046430599999947 +30 +0.8478281150218822 +11 +0.1752009048041535 +21 +0.11429416310676693 +31 +0.7946280917100798 +12 +0.14004304520099842 +22 +0.16005831690802014 +32 +0.8489738683201561 +13 +0.14004304520099842 +23 +0.16005831690802014 +33 +0.8489738683201561 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.1407842662509724 +20 +0.13046430599999947 +30 +0.8478281150218822 +11 +0.14004304520099842 +21 +0.16005831690802014 +31 +0.8489738683201561 +12 +0.09931785063555287 +22 +0.1845043909507933 +32 +0.9119254345200819 +13 +0.09931785063555287 +23 +0.1845043909507933 +33 +0.9119254345200819 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.09931785063555287 +20 +0.1845043909507933 +30 +0.9119254345200819 +11 +0.14004304520099842 +21 +0.16005831690802014 +31 +0.8489738683201561 +12 +0.09524177069161455 +22 +0.193567791051381 +32 +0.9182260948156299 +13 +0.09524177069161455 +23 +0.193567791051381 +33 +0.9182260948156299 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.09931785063555287 +20 +0.1845043909507933 +30 +0.9119254345200819 +11 +0.09524177069161455 +21 +0.193567791051381 +31 +0.9182260948156299 +12 +0.08473014550000091 +22 +0.19059339862169328 +32 +0.9344745934705629 +13 +0.08473014550000091 +23 +0.19059339862169328 +33 +0.9344745934705629 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.08473014550000091 +20 +0.19059339862169328 +30 +0.9344745934705629 +11 +0.09524177069161455 +21 +0.193567791051381 +31 +0.9182260948156299 +12 +0.043859550699414496 +22 +0.21257931377579464 +32 +0.9976509142143398 +13 +0.043859550699414496 +23 +0.21257931377579464 +33 +0.9976509142143398 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.043859550699414496 +20 +0.21257931377579464 +30 +0.9976509142143398 +11 +0.09524177069161455 +21 +0.193567791051381 +31 +0.9182260948156299 +12 +0.044467883797984775 +22 +0.21278370795076884 +32 +0.9967105744140091 +13 +0.044467883797984775 +23 +0.21278370795076884 +33 +0.9967105744140091 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.043859550699414496 +20 +0.21257931377579464 +30 +0.9976509142143398 +11 +0.044467883797984775 +21 +0.21278370795076884 +31 +0.9967105744140091 +12 +0.04113427580894241 +22 +0.21304527383546001 +32 +1.0018635478066782 +13 +0.04113427580894241 +23 +0.21304527383546001 +33 +1.0018635478066782 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.1503162743108418 +20 +0.1503162743108492 +30 +1.0588240032604646 +11 +-0.11003914999999548 +21 +0.19059339862169328 +31 +1.0018635478066782 +12 +-0.15561885832200195 +22 +0.1556188583220094 +32 +1.001863547806677 +13 +-0.15561885832200195 +23 +0.1556188583220094 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.11003914999999548 +20 +0.19059339862169328 +30 +1.0018635478066782 +11 +-0.1503162743108418 +21 +0.1503162743108492 +31 +1.0588240032604646 +12 +-0.10628965688789382 +22 +0.18409908604890313 +32 +1.0588240032604646 +13 +-0.10628965688789382 +23 +0.18409908604890313 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.13476988461478534 +20 +0.13476988461479278 +30 +1.1119026978066777 +11 +-0.10628965688789382 +21 +0.18409908604890313 +31 +1.0588240032604646 +12 +-0.1503162743108418 +22 +0.1503162743108492 +32 +1.0588240032604646 +13 +-0.1503162743108418 +23 +0.1503162743108492 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.10628965688789382 +20 +0.18409908604890313 +30 +1.0588240032604646 +11 +-0.13476988461478534 +21 +0.13476988461479278 +31 +1.1119026978066777 +12 +-0.09529669931084372 +22 +0.16505872500000096 +32 +1.1119026978066777 +13 +-0.09529669931084372 +23 +0.16505872500000096 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.11003914999999548 +20 +0.11003915000000175 +30 +1.157482406128686 +11 +-0.09529669931084372 +21 +0.16505872500000096 +31 +1.1119026978066777 +12 +-0.13476988461478534 +22 +0.13476988461479278 +32 +1.1119026978066777 +13 +-0.13476988461478534 +23 +0.13476988461479278 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.09529669931084372 +20 +0.16505872500000096 +30 +1.1119026978066777 +11 +-0.11003914999999548 +21 +0.11003915000000175 +31 +1.157482406128686 +12 +-0.0778094291610012 +22 +0.13476988461479278 +32 +1.157482406128686 +13 +-0.0778094291610012 +23 +0.13476988461479278 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.07780942916099784 +20 +0.07780942916100525 +30 +1.192456946428371 +11 +-0.0778094291610012 +21 +0.13476988461479278 +31 +1.157482406128686 +12 +-0.11003914999999548 +22 +0.11003915000000175 +32 +1.157482406128686 +13 +-0.11003914999999548 +23 +0.11003915000000175 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.0778094291610012 +20 +0.13476988461479278 +30 +1.157482406128686 +11 +-0.07780942916099784 +21 +0.07780942916100525 +31 +1.192456946428371 +12 +-0.055019574999996296 +22 +0.09529669931084778 +32 +1.192456946428371 +13 +-0.055019574999996296 +23 +0.09529669931084778 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.040277124310841184 +20 +0.04027712431084857 +30 +1.2144428615824712 +11 +-0.055019574999996296 +21 +0.09529669931084778 +31 +1.192456946428371 +12 +-0.07780942916099784 +22 +0.07780942916100525 +32 +1.192456946428371 +13 +-0.07780942916099784 +23 +0.07780942916100525 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.055019574999996296 +20 +0.09529669931084778 +30 +1.192456946428371 +11 +-0.040277124310841184 +21 +0.04027712431084857 +31 +1.2144428615824712 +12 +-0.02848022772688974 +22 +0.049329201434111514 +32 +1.2144428615824712 +13 +-0.02848022772688974 +23 +0.049329201434111514 +33 +1.2144428615824712 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +1.1657341758564144e-15 +30 +1.221941847806679 +11 +-0.02848022772688974 +21 +0.049329201434111514 +31 +1.2144428615824712 +12 +-0.040277124310841184 +22 +0.04027712431084857 +32 +1.2144428615824712 +13 +-0.040277124310841184 +23 +0.04027712431084857 +33 +1.2144428615824712 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +-0.1503162743108418 +20 +0.1503162743108492 +30 +1.0588240032604646 +11 +-0.190593398621687 +21 +0.11003915000000292 +31 +1.001863547806677 +12 +-0.1840990860488957 +22 +0.10628965688789899 +32 +1.0588240032604646 +13 +-0.1840990860488957 +23 +0.10628965688789899 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.190593398621687 +20 +0.11003915000000292 +30 +1.001863547806677 +11 +-0.1503162743108418 +21 +0.1503162743108492 +31 +1.0588240032604646 +12 +-0.15561885832200195 +22 +0.1556188583220094 +32 +1.001863547806677 +13 +-0.15561885832200195 +23 +0.1556188583220094 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.13476988461478534 +20 +0.13476988461479278 +30 +1.1119026978066777 +11 +-0.1840990860488957 +21 +0.10628965688789899 +31 +1.0588240032604646 +12 +-0.1650587249999958 +22 +0.09529669931084889 +32 +1.1119026978066788 +13 +-0.1650587249999958 +23 +0.09529669931084889 +33 +1.1119026978066788 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.1840990860488957 +20 +0.10628965688789899 +30 +1.0588240032604646 +11 +-0.13476988461478534 +21 +0.13476988461479278 +31 +1.1119026978066777 +12 +-0.1503162743108418 +22 +0.1503162743108492 +32 +1.0588240032604646 +13 +-0.1503162743108418 +23 +0.1503162743108492 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.11003914999999548 +20 +0.11003915000000175 +30 +1.157482406128686 +11 +-0.1650587249999958 +21 +0.09529669931084889 +31 +1.1119026978066788 +12 +-0.13476988461478534 +22 +0.07780942916100525 +32 +1.157482406128686 +13 +-0.13476988461478534 +23 +0.07780942916100525 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.1650587249999958 +20 +0.09529669931084889 +30 +1.1119026978066788 +11 +-0.11003914999999548 +21 +0.11003915000000175 +31 +1.157482406128686 +12 +-0.13476988461478534 +22 +0.13476988461479278 +32 +1.1119026978066777 +13 +-0.13476988461478534 +23 +0.13476988461479278 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.09529669931084037 +20 +0.05501957500000143 +30 +1.1924569464283716 +11 +-0.11003914999999548 +21 +0.11003915000000175 +31 +1.157482406128686 +12 +-0.13476988461478534 +22 +0.07780942916100525 +32 +1.157482406128686 +13 +-0.13476988461478534 +23 +0.07780942916100525 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.11003914999999548 +20 +0.11003915000000175 +30 +1.157482406128686 +11 +-0.09529669931084037 +21 +0.05501957500000143 +31 +1.1924569464283716 +12 +-0.07780942916099784 +22 +0.07780942916100525 +32 +1.192456946428371 +13 +-0.07780942916099784 +23 +0.07780942916100525 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.04932920143410521 +20 +0.028480227726896012 +30 +1.2144428615824718 +11 +-0.07780942916099784 +21 +0.07780942916100525 +31 +1.192456946428371 +12 +-0.09529669931084037 +22 +0.05501957500000143 +32 +1.1924569464283716 +13 +-0.09529669931084037 +23 +0.05501957500000143 +33 +1.1924569464283716 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.07780942916099784 +20 +0.07780942916100525 +30 +1.192456946428371 +11 +-0.04932920143410521 +21 +0.028480227726896012 +31 +1.2144428615824718 +12 +-0.040277124310841184 +22 +0.04027712431084857 +32 +1.2144428615824712 +13 +-0.040277124310841184 +23 +0.04027712431084857 +33 +1.2144428615824712 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +1.1657341758564144e-15 +30 +1.221941847806679 +11 +-0.040277124310841184 +21 +0.04027712431084857 +31 +1.2144428615824712 +12 +-0.04932920143410521 +22 +0.028480227726896012 +32 +1.2144428615824718 +13 +-0.04932920143410521 +23 +0.028480227726896012 +33 +1.2144428615824718 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +-0.1840990860488957 +20 +0.10628965688789899 +30 +1.0588240032604646 +11 +-0.21257931377578831 +21 +0.05696045545378753 +31 +1.0018635478066782 +12 +-0.20533584931084325 +22 +0.05501957500000143 +32 +1.0588240032604646 +13 +-0.20533584931084325 +23 +0.05501957500000143 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.21257931377578831 +20 +0.05696045545378753 +30 +1.0018635478066782 +11 +-0.1840990860488957 +21 +0.10628965688789899 +31 +1.0588240032604646 +12 +-0.190593398621687 +22 +0.11003915000000292 +32 +1.001863547806677 +13 +-0.190593398621687 +23 +0.11003915000000292 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.1650587249999958 +20 +0.09529669931084889 +30 +1.1119026978066788 +11 +-0.20533584931084325 +21 +0.05501957500000143 +31 +1.0588240032604646 +12 +-0.18409908604889683 +22 +0.049329201434111514 +32 +1.1119026978066777 +13 +-0.18409908604889683 +23 +0.049329201434111514 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.20533584931084325 +20 +0.05501957500000143 +30 +1.0588240032604646 +11 +-0.1650587249999958 +21 +0.09529669931084889 +31 +1.1119026978066788 +12 +-0.1840990860488957 +22 +0.10628965688789899 +32 +1.0588240032604646 +13 +-0.1840990860488957 +23 +0.10628965688789899 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.13476988461478534 +20 +0.07780942916100525 +30 +1.157482406128686 +11 +-0.18409908604889683 +21 +0.049329201434111514 +31 +1.1119026978066777 +12 +-0.15031627431084293 +22 +0.040277124310846346 +32 +1.157482406128686 +13 +-0.15031627431084293 +23 +0.040277124310846346 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.18409908604889683 +20 +0.049329201434111514 +30 +1.1119026978066777 +11 +-0.13476988461478534 +21 +0.07780942916100525 +31 +1.157482406128686 +12 +-0.1650587249999958 +22 +0.09529669931084889 +32 +1.1119026978066788 +13 +-0.1650587249999958 +23 +0.09529669931084889 +33 +1.1119026978066788 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.10628965688789271 +20 +0.028480227726893792 +30 +1.192456946428371 +11 +-0.13476988461478534 +21 +0.07780942916100525 +31 +1.157482406128686 +12 +-0.15031627431084293 +22 +0.040277124310846346 +32 +1.157482406128686 +13 +-0.15031627431084293 +23 +0.040277124310846346 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.13476988461478534 +20 +0.07780942916100525 +30 +1.157482406128686 +11 +-0.10628965688789271 +21 +0.028480227726893792 +31 +1.192456946428371 +12 +-0.09529669931084037 +22 +0.05501957500000143 +32 +1.1924569464283716 +13 +-0.09529669931084037 +23 +0.05501957500000143 +33 +1.1924569464283716 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.055019574999996296 +20 +0.01474245068915292 +30 +1.2144428615824712 +11 +-0.09529669931084037 +21 +0.05501957500000143 +31 +1.1924569464283716 +12 +-0.10628965688789271 +22 +0.028480227726893792 +32 +1.192456946428371 +13 +-0.10628965688789271 +23 +0.028480227726893792 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.09529669931084037 +20 +0.05501957500000143 +30 +1.1924569464283716 +11 +-0.055019574999996296 +21 +0.01474245068915292 +31 +1.2144428615824712 +12 +-0.04932920143410521 +22 +0.028480227726896012 +32 +1.2144428615824718 +13 +-0.04932920143410521 +23 +0.028480227726896012 +33 +1.2144428615824718 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +1.1657341758564144e-15 +30 +1.221941847806679 +11 +-0.04932920143410521 +21 +0.028480227726896012 +31 +1.2144428615824718 +12 +-0.055019574999996296 +22 +0.01474245068915292 +32 +1.2144428615824712 +13 +-0.055019574999996296 +23 +0.01474245068915292 +33 +1.2144428615824712 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +-0.20533584931084325 +20 +0.05501957500000143 +30 +1.0588240032604646 +11 +-0.22007829999999612 +21 +-2.220446049250313e-15 +31 +1.0018635478066782 +12 +-0.21257931377578945 +22 +-2.220446049250313e-15 +32 +1.0588240032604646 +13 +-0.21257931377578945 +23 +-2.220446049250313e-15 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.22007829999999612 +20 +-2.220446049250313e-15 +30 +1.0018635478066782 +11 +-0.20533584931084325 +21 +0.05501957500000143 +31 +1.0588240032604646 +12 +-0.21257931377578831 +22 +0.05696045545378753 +32 +1.0018635478066782 +13 +-0.21257931377578831 +23 +0.05696045545378753 +33 +1.0018635478066782 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.18409908604889683 +20 +0.049329201434111514 +30 +1.1119026978066777 +11 +-0.21257931377578945 +21 +-2.220446049250313e-15 +31 +1.0588240032604646 +12 +-0.19059339862168925 +22 +-3.3306690738754696e-15 +32 +1.1119026978066788 +13 +-0.19059339862168925 +23 +-3.3306690738754696e-15 +33 +1.1119026978066788 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.21257931377578945 +20 +-2.220446049250313e-15 +30 +1.0588240032604646 +11 +-0.18409908604889683 +21 +0.049329201434111514 +31 +1.1119026978066777 +12 +-0.20533584931084325 +22 +0.05501957500000143 +32 +1.0588240032604646 +13 +-0.20533584931084325 +23 +0.05501957500000143 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.1556188583220042 +20 +-2.220446049250313e-15 +30 +1.1574824061286855 +11 +-0.18409908604889683 +21 +0.049329201434111514 +31 +1.1119026978066777 +12 +-0.19059339862168925 +22 +-3.3306690738754696e-15 +32 +1.1119026978066788 +13 +-0.19059339862168925 +23 +-3.3306690738754696e-15 +33 +1.1119026978066788 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.18409908604889683 +20 +0.049329201434111514 +30 +1.1119026978066777 +11 +-0.1556188583220042 +21 +-2.220446049250313e-15 +31 +1.1574824061286855 +12 +-0.15031627431084293 +22 +0.040277124310846346 +32 +1.157482406128686 +13 +-0.15031627431084293 +23 +0.040277124310846346 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.11003914999999659 +20 +-2.220446049250313e-15 +30 +1.1924569464283716 +11 +-0.15031627431084293 +21 +0.040277124310846346 +31 +1.157482406128686 +12 +-0.1556188583220042 +22 +-2.220446049250313e-15 +32 +1.1574824061286855 +13 +-0.1556188583220042 +23 +-2.220446049250313e-15 +33 +1.1574824061286855 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.15031627431084293 +20 +0.040277124310846346 +30 +1.157482406128686 +11 +-0.11003914999999659 +21 +-2.220446049250313e-15 +31 +1.1924569464283716 +12 +-0.10628965688789271 +22 +0.028480227726893792 +32 +1.192456946428371 +13 +-0.10628965688789271 +23 +0.028480227726893792 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.05696045545378234 +20 +-3.3306690738754696e-15 +30 +1.2144428615824718 +11 +-0.10628965688789271 +21 +0.028480227726893792 +31 +1.192456946428371 +12 +-0.11003914999999659 +22 +-2.220446049250313e-15 +32 +1.1924569464283716 +13 +-0.11003914999999659 +23 +-2.220446049250313e-15 +33 +1.1924569464283716 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.10628965688789271 +20 +0.028480227726893792 +30 +1.192456946428371 +11 +-0.05696045545378234 +21 +-3.3306690738754696e-15 +31 +1.2144428615824718 +12 +-0.055019574999996296 +22 +0.01474245068915292 +32 +1.2144428615824712 +13 +-0.055019574999996296 +23 +0.01474245068915292 +33 +1.2144428615824712 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +1.1657341758564144e-15 +30 +1.221941847806679 +11 +-0.055019574999996296 +21 +0.01474245068915292 +31 +1.2144428615824712 +12 +-0.05696045545378234 +22 +-3.3306690738754696e-15 +32 +1.2144428615824718 +13 +-0.05696045545378234 +23 +-3.3306690738754696e-15 +33 +1.2144428615824718 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.043859550699414496 +20 +0.21257931377579464 +30 +0.9976509142143398 +11 +0.08473014550000202 +21 +0.19059339862169217 +31 +1.001863547806677 +12 +0.08473014550000091 +22 +0.19059339862169328 +32 +0.9344745934705629 +13 +0.08473014550000091 +23 +0.19059339862169328 +33 +0.9344745934705629 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.08473014550000202 +20 +0.19059339862169217 +30 +1.001863547806677 +11 +0.043859550699414496 +21 +0.21257931377579464 +31 +0.9976509142143398 +12 +0.043859550699415606 +22 +0.21257931377579353 +32 +1.001863547806677 +13 +0.043859550699415606 +23 +0.21257931377579353 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +1.7763568394002505e-15 +20 +0.22007830000000128 +30 +1.001863547806677 +11 +0.044467883797984775 +21 +0.21278370795076884 +31 +0.9967105744140091 +12 +0.07586512499733417 +22 +0.2233328844240816 +32 +0.7307557071160136 +13 +0.07586512499733417 +23 +0.2233328844240816 +33 +0.7307557071160136 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.044467883797984775 +20 +0.21278370795076884 +30 +0.9967105744140091 +11 +1.7763568394002505e-15 +21 +0.22007830000000128 +31 +1.001863547806677 +12 +0.04113427580894241 +22 +0.21304527383546001 +32 +1.0018635478066782 +13 +0.04113427580894241 +23 +0.21304527383546001 +33 +1.0018635478066782 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.29267242474244115 +30 +0.30841453414256254 +11 +0.0752960226550266 +21 +0.28014261634080284 +31 +0.010582165873702443 +12 +0.07279039008472937 +22 +0.28136529499842167 +32 +0.010230022180818192 +13 +0.07279039008472937 +23 +0.28136529499842167 +33 +0.010230022180818192 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.0752960226550266 +20 +0.28014261634080284 +30 +0.010582165873702443 +11 +2.942091015256665e-15 +21 +0.29267242474244115 +31 +0.30841453414256254 +12 +0.07586512499733417 +22 +0.2233328844240816 +32 +0.7307557071160136 +13 +0.07586512499733417 +23 +0.2233328844240816 +33 +0.7307557071160136 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +1.7763568394002505e-15 +20 +0.22007830000000128 +30 +1.001863547806677 +11 +0.07586512499733417 +21 +0.2233328844240816 +31 +0.7307557071160136 +12 +2.942091015256665e-15 +22 +0.29267242474244115 +32 +0.30841453414256254 +13 +2.942091015256665e-15 +23 +0.29267242474244115 +33 +0.30841453414256254 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +-0.11003914999999548 +20 +0.19059339862169328 +30 +1.0018635478066782 +11 +-0.07574919749967438 +21 +0.2826998537013695 +31 +0.30841453414256254 +12 +-0.1463362123712171 +22 +0.253461754814145 +32 +0.30841453414256254 +13 +-0.1463362123712171 +23 +0.253461754814145 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.07574919749967438 +20 +0.2826998537013695 +30 +0.30841453414256254 +11 +-0.11003914999999548 +21 +0.19059339862169328 +31 +1.0018635478066782 +12 +-0.056960455453783476 +22 +0.21257931377579353 +32 +1.001863547806677 +13 +-0.056960455453783476 +23 +0.21257931377579353 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.20568971316600607 +20 +0.20717595716186143 +30 +0.20568971316600676 +11 +-0.1463362123712171 +21 +0.253461754814145 +31 +0.30841453414256254 +12 +-0.14586628805175494 +22 +0.25264782201712543 +32 +0.14586628805175564 +13 +-0.14586628805175494 +23 +0.25264782201712543 +33 +0.14586628805175564 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.1463362123712171 +20 +0.253461754814145 +30 +0.30841453414256254 +11 +-0.20568971316600607 +21 +0.20717595716186143 +31 +0.20568971316600676 +12 +-0.20653412136710422 +22 +0.2065341213671094 +32 +0.20653412136710492 +13 +-0.20653412136710422 +23 +0.2065341213671094 +33 +0.20653412136710492 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +-0.1463362123712171 +20 +0.253461754814145 +30 +0.30841453414256254 +11 +-0.20653412136710422 +21 +0.2065341213671094 +31 +0.20653412136710492 +12 +-0.20695065620168485 +22 +0.2069506562016934 +32 +0.30841453414256254 +13 +-0.20695065620168485 +23 +0.2069506562016934 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.15561885832200195 +20 +0.1556188583220094 +30 +1.001863547806677 +11 +-0.1463362123712171 +21 +0.253461754814145 +31 +0.30841453414256254 +12 +-0.20695065620168485 +22 +0.2069506562016934 +32 +0.30841453414256254 +13 +-0.20695065620168485 +23 +0.2069506562016934 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.1463362123712171 +20 +0.253461754814145 +30 +0.30841453414256254 +11 +-0.15561885832200195 +21 +0.1556188583220094 +31 +1.001863547806677 +12 +-0.11003914999999548 +22 +0.19059339862169328 +32 +1.0018635478066782 +13 +-0.11003914999999548 +23 +0.19059339862169328 +33 +1.0018635478066782 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.15561885832200195 +20 +0.1556188583220094 +30 +1.001863547806677 +11 +-0.2534617548141387 +21 +0.1463362123712234 +31 +0.30841453414256254 +12 +-0.190593398621687 +22 +0.11003915000000292 +32 +1.001863547806677 +13 +-0.190593398621687 +23 +0.11003915000000292 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.2534617548141387 +20 +0.1463362123712234 +30 +0.30841453414256254 +11 +-0.15561885832200195 +21 +0.1556188583220094 +31 +1.001863547806677 +12 +-0.20695065620168485 +22 +0.2069506562016934 +32 +0.30841453414256254 +13 +-0.20695065620168485 +23 +0.2069506562016934 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.190593398621687 +20 +0.11003915000000292 +30 +1.001863547806677 +11 +-0.2826998537013644 +21 +0.07574919749967957 +31 +0.30841453414256254 +12 +-0.21257931377578831 +22 +0.05696045545378753 +32 +1.0018635478066782 +13 +-0.21257931377578831 +23 +0.05696045545378753 +33 +1.0018635478066782 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.2826998537013644 +20 +0.07574919749967957 +30 +0.30841453414256254 +11 +-0.190593398621687 +21 +0.11003915000000292 +31 +1.001863547806677 +12 +-0.2534617548141387 +22 +0.1463362123712234 +32 +0.30841453414256254 +13 +-0.2534617548141387 +23 +0.1463362123712234 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.21257931377578831 +20 +0.05696045545378753 +30 +1.0018635478066782 +11 +-0.29267242474243715 +21 +-1.1102230246251565e-15 +31 +0.30841453414256254 +12 +-0.22007829999999612 +22 +-2.220446049250313e-15 +32 +1.0018635478066782 +13 +-0.22007829999999612 +23 +-2.220446049250313e-15 +33 +1.0018635478066782 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.29267242474243715 +20 +-1.1102230246251565e-15 +30 +0.30841453414256254 +11 +-0.21257931377578831 +21 +0.05696045545378753 +31 +1.0018635478066782 +12 +-0.2826998537013644 +22 +0.07574919749967957 +32 +0.30841453414256254 +13 +-0.2826998537013644 +23 +0.07574919749967957 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.07586512499733417 +20 +0.2233328844240816 +30 +0.7307557071160136 +11 +0.14352399544263056 +21 +0.2511284049735225 +31 +0.02017098211932512 +12 +0.0752960226550266 +22 +0.28014261634080284 +32 +0.010582165873702443 +13 +0.0752960226550266 +23 +0.28014261634080284 +33 +0.010582165873702443 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +-0.07540049589488734 +20 +0.2813984815956233 +30 +0.07540049589488913 +11 +2.942091015256665e-15 +21 +0.29267242474244115 +31 +0.30841453414256254 +12 +2.942091015256665e-15 +22 +0.29088918200000213 +32 +-1.1189627002750058e-15 +13 +2.942091015256665e-15 +23 +0.29088918200000213 +33 +-1.1189627002750058e-15 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.29267242474244115 +30 +0.30841453414256254 +11 +-0.07540049589488734 +21 +0.2813984815956233 +31 +0.07540049589488913 +12 +-0.07574919749967438 +22 +0.2826998537013695 +32 +0.30841453414256254 +13 +-0.07574919749967438 +23 +0.2826998537013695 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.028480227726888574 +20 +0.10628965688789788 +30 +1.192456946428371 +11 +1.7763568394002505e-15 +21 +0.15561885832200822 +31 +1.157482406128686 +12 +-0.040277124310843404 +22 +0.1503162743108481 +32 +1.157482406128686 +13 +-0.040277124310843404 +23 +0.1503162743108481 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +1.7763568394002505e-15 +20 +0.15561885832200822 +30 +1.157482406128686 +11 +-0.028480227726888574 +21 +0.10628965688789788 +31 +1.192456946428371 +12 +2.942091015256665e-15 +22 +0.11003915000000064 +32 +1.1924569464283716 +13 +2.942091015256665e-15 +23 +0.11003915000000064 +33 +1.1924569464283716 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.2859865540554998 +20 +0.003291402957666445 +30 +0.04019278902061723 +11 +0.20781952412910853 +21 +1.1657341758564144e-15 +31 +0.7307557071160136 +12 +0.2863149648021954 +22 +1.1657341758564144e-15 +32 +0.04023894414108302 +13 +0.2863149648021954 +23 +1.1657341758564144e-15 +33 +0.04023894414108302 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.20781952412910853 +20 +1.1657341758564144e-15 +30 +0.7307557071160136 +11 +0.2859865540554998 +21 +0.003291402957666445 +31 +0.04019278902061723 +12 +0.20175320916481837 +22 +0.059841866024748225 +32 +0.7307557071160136 +13 +0.20175320916481837 +23 +0.059841866024748225 +33 +0.7307557071160136 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.056960455453783476 +20 +0.21257931377579353 +30 +1.001863547806677 +11 +2.942091015256665e-15 +21 +0.29267242474244115 +31 +0.30841453414256254 +12 +-0.07574919749967438 +22 +0.2826998537013695 +32 +0.30841453414256254 +13 +-0.07574919749967438 +23 +0.2826998537013695 +33 +0.30841453414256254 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.29267242474244115 +30 +0.30841453414256254 +11 +-0.056960455453783476 +21 +0.21257931377579353 +31 +1.001863547806677 +12 +1.7763568394002505e-15 +22 +0.22007830000000128 +32 +1.001863547806677 +13 +1.7763568394002505e-15 +23 +0.22007830000000128 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.07586512499733417 +20 +0.2233328844240816 +30 +0.7307557071160136 +11 +0.14470316953883317 +21 +0.2504791096276532 +31 +0.020336704231065143 +12 +0.14352399544263056 +22 +0.2511284049735225 +32 +0.02017098211932512 +13 +0.14352399544263056 +23 +0.2511284049735225 +33 +0.02017098211932512 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.14470316953883317 +20 +0.2504791096276532 +30 +0.020336704231065143 +11 +0.07586512499733417 +21 +0.2233328844240816 +31 +0.7307557071160136 +12 +0.11880320614369011 +22 +0.20023478630317332 +32 +0.7307557071160136 +13 +0.11880320614369011 +23 +0.20023478630317332 +33 +0.7307557071160136 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.24866776335898266 +20 +0.144017558640957 +30 +0.03494797502604473 +11 +0.15567497232576927 +21 +0.1634910183993356 +31 +0.7307557071160147 +12 +0.18396767361172195 +22 +0.11560560777326617 +32 +0.7307557071160136 +13 +0.18396767361172195 +23 +0.11560560777326617 +33 +0.7307557071160136 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.15567497232576927 +20 +0.1634910183993356 +30 +0.7307557071160147 +11 +0.24866776335898266 +21 +0.144017558640957 +31 +0.03494797502604473 +12 +0.24733927091273722 +22 +0.14630304025430108 +32 +0.03476126758875187 +13 +0.24733927091273722 +23 +0.14630304025430108 +33 +0.03476126758875187 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.27676048551116517 +20 +0.07446552246557753 +30 +0.03889614964637553 +11 +0.18396767361172195 +21 +0.11560560777326617 +31 +0.7307557071160136 +12 +0.20175320916481837 +22 +0.059841866024748225 +32 +0.7307557071160136 +13 +0.20175320916481837 +23 +0.059841866024748225 +33 +0.7307557071160136 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.18396767361172195 +20 +0.11560560777326617 +30 +0.7307557071160136 +11 +0.27676048551116517 +21 +0.07446552246557753 +31 +0.03889614964637553 +12 +0.27583114835190015 +22 +0.0774264694728452 +32 +0.03876553982628998 +13 +0.27583114835190015 +23 +0.0774264694728452 +33 +0.03876553982628998 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.24866776335898266 +20 +0.144017558640957 +30 +0.03494797502604473 +11 +0.18396767361172195 +21 +0.11560560777326617 +31 +0.7307557071160136 +12 +0.27583114835190015 +22 +0.0774264694728452 +32 +0.03876553982628998 +13 +0.27583114835190015 +23 +0.0774264694728452 +33 +0.03876553982628998 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.11880320614369011 +20 +0.20023478630317332 +30 +0.7307557071160136 +11 +0.20373004107196863 +21 +0.2040362885325907 +31 +0.028632390026202197 +12 +0.20230908016629684 +22 +0.2054774695577018 +32 +0.02843268699444177 +13 +0.20230908016629684 +23 +0.2054774695577018 +33 +0.02843268699444177 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.20373004107196863 +20 +0.2040362885325907 +30 +0.028632390026202197 +11 +0.11880320614369011 +21 +0.20023478630317332 +31 +0.7307557071160136 +12 +0.15567497232576927 +22 +0.1634910183993356 +32 +0.7307557071160147 +13 +0.15567497232576927 +23 +0.1634910183993356 +33 +0.7307557071160147 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.040277124310843404 +20 +0.1503162743108481 +30 +1.157482406128686 +11 +2.942091015256665e-15 +21 +0.19059339862169555 +31 +1.1119026978066777 +12 +-0.049329201434107434 +22 +0.18409908604890313 +32 +1.1119026978066777 +13 +-0.049329201434107434 +23 +0.18409908604890313 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.19059339862169555 +30 +1.1119026978066777 +11 +-0.040277124310843404 +21 +0.1503162743108481 +31 +1.157482406128686 +12 +1.7763568394002505e-15 +22 +0.15561885832200822 +32 +1.157482406128686 +13 +1.7763568394002505e-15 +23 +0.15561885832200822 +33 +1.157482406128686 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.11880320614369011 +20 +0.20023478630317332 +30 +0.7307557071160136 +11 +0.20230908016629684 +21 +0.2054774695577018 +31 +0.02843268699444177 +12 +0.14470316953883317 +22 +0.2504791096276532 +32 +0.020336704231065143 +13 +0.14470316953883317 +23 +0.2504791096276532 +33 +0.020336704231065143 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +0.21604855191382222 +20 +0.18772809764161968 +30 +0.030363643822208155 +11 +0.15567497232576927 +21 +0.1634910183993356 +31 +0.7307557071160147 +12 +0.24733927091273722 +22 +0.14630304025430108 +32 +0.03476126758875187 +13 +0.24733927091273722 +23 +0.14630304025430108 +33 +0.03476126758875187 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.15567497232576927 +20 +0.1634910183993356 +30 +0.7307557071160147 +11 +0.21604855191382222 +21 +0.18772809764161968 +31 +0.030363643822208155 +12 +0.20373004107196863 +22 +0.2040362885325907 +32 +0.028632390026202197 +13 +0.20373004107196863 +23 +0.2040362885325907 +33 +0.028632390026202197 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.055019574999997406 +20 +0.20533584931084842 +30 +1.0588240032604657 +11 +2.942091015256665e-15 +21 +0.19059339862169555 +31 +1.1119026978066777 +12 +2.942091015256665e-15 +22 +0.21257931377579575 +32 +1.0588240032604646 +13 +2.942091015256665e-15 +23 +0.21257931377579575 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.19059339862169555 +30 +1.1119026978066777 +11 +-0.055019574999997406 +21 +0.20533584931084842 +31 +1.0588240032604657 +12 +-0.049329201434107434 +22 +0.18409908604890313 +32 +1.1119026978066777 +13 +-0.049329201434107434 +23 +0.18409908604890313 +33 +1.1119026978066777 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.27676048551116517 +20 +0.07446552246557753 +30 +0.03889614964637553 +11 +0.20175320916481837 +21 +0.059841866024748225 +31 +0.7307557071160136 +12 +0.2859865540554998 +22 +0.003291402957666445 +32 +0.04019278902061723 +13 +0.2859865540554998 +23 +0.003291402957666445 +33 +0.04019278902061723 +70 +0 + 0 +3DFACE + 8 +finger distal +10 +-0.014742450689149977 +20 +0.05501957500000032 +30 +1.2144428615824718 +11 +2.942091015256665e-15 +21 +0.11003915000000064 +31 +1.1924569464283716 +12 +-0.028480227726888574 +22 +0.10628965688789788 +32 +1.192456946428371 +13 +-0.028480227726888574 +23 +0.10628965688789788 +33 +1.192456946428371 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.11003915000000064 +30 +1.1924569464283716 +11 +-0.014742450689149977 +21 +0.05501957500000032 +31 +1.2144428615824718 +12 +1.7763568394002505e-15 +22 +0.05696045545378753 +32 +1.2144428615824712 +13 +1.7763568394002505e-15 +23 +0.05696045545378753 +33 +1.2144428615824712 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.055019574999997406 +20 +0.20533584931084842 +30 +1.0588240032604657 +11 +1.7763568394002505e-15 +21 +0.22007830000000128 +31 +1.001863547806677 +12 +-0.056960455453783476 +22 +0.21257931377579353 +32 +1.001863547806677 +13 +-0.056960455453783476 +23 +0.21257931377579353 +33 +1.001863547806677 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +1.7763568394002505e-15 +20 +0.22007830000000128 +30 +1.001863547806677 +11 +-0.055019574999997406 +21 +0.20533584931084842 +31 +1.0588240032604657 +12 +2.942091015256665e-15 +22 +0.21257931377579575 +32 +1.0588240032604646 +13 +2.942091015256665e-15 +23 +0.21257931377579575 +33 +1.0588240032604646 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.2825554318689639 +20 +0.07571049978631911 +30 +0.28255543186896687 +11 +-0.15510247388785312 +21 +-1.1102230246251565e-15 +31 +0.1551024738878516 +12 +-0.29258087504374125 +22 +-2.220446049250313e-15 +32 +0.2925808750437419 +13 +-0.29258087504374125 +23 +-2.220446049250313e-15 +33 +0.2925808750437419 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +-0.15510247388785312 +20 +-1.1102230246251565e-15 +30 +0.1551024738878516 +11 +-0.2825554318689639 +21 +0.07571049978631911 +31 +0.28255543186896687 +12 +-0.15510247388785312 +22 +0.15899592086427927 +32 +0.1551024738878538 +13 +-0.15510247388785312 +23 +0.15899592086427927 +33 +0.1551024738878538 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +-0.15510247388785312 +20 +0.15899592086427927 +30 +0.1551024738878538 +11 +-0.2825554318689639 +21 +0.07571049978631911 +31 +0.28255543186896687 +12 +-0.2531852032990528 +22 +0.1461765452795445 +32 +0.2531852032990535 +13 +-0.2531852032990528 +23 +0.1461765452795445 +33 +0.2531852032990535 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +-0.15510247388785312 +20 +0.15899592086427927 +30 +0.1551024738878538 +11 +-0.2531852032990528 +21 +0.1461765452795445 +31 +0.2531852032990535 +12 +-0.20653412136710422 +22 +0.2065341213671094 +32 +0.20653412136710492 +13 +-0.20653412136710422 +23 +0.2065341213671094 +33 +0.20653412136710492 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +-0.15510247388785312 +20 +0.15899592086427927 +30 +0.1551024738878538 +11 +-0.20653412136710422 +21 +0.2065341213671094 +31 +0.20653412136710492 +12 +2.942091015256665e-15 +22 +0.15899592086427927 +32 +-1.1189627002750058e-15 +13 +2.942091015256665e-15 +23 +0.15899592086427927 +33 +-1.1189627002750058e-15 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.15899592086427927 +30 +-1.1189627002750058e-15 +11 +-0.20653412136710422 +21 +0.2065341213671094 +31 +0.20653412136710492 +12 +2.942091015256665e-15 +22 +0.29088918200000213 +32 +-1.1189627002750058e-15 +13 +2.942091015256665e-15 +23 +0.29088918200000213 +33 +-1.1189627002750058e-15 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.29088918200000213 +30 +-1.1189627002750058e-15 +11 +-0.20653412136710422 +21 +0.2065341213671094 +31 +0.20653412136710492 +12 +-0.20568971316600607 +22 +0.20717595716186143 +32 +0.20568971316600676 +13 +-0.20568971316600607 +23 +0.20717595716186143 +33 +0.20568971316600676 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.29088918200000213 +30 +-1.1189627002750058e-15 +11 +-0.20568971316600607 +21 +0.20717595716186143 +31 +0.20568971316600676 +12 +-0.14586628805175494 +22 +0.25264782201712543 +32 +0.14586628805175564 +13 +-0.14586628805175494 +23 +0.25264782201712543 +33 +0.14586628805175564 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.29088918200000213 +30 +-1.1189627002750058e-15 +11 +-0.14586628805175494 +21 +0.25264782201712543 +31 +0.14586628805175564 +12 +-0.07540049589488734 +22 +0.2813984815956233 +32 +0.07540049589488913 +13 +-0.07540049589488734 +23 +0.2813984815956233 +33 +0.07540049589488913 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.07279039008472937 +20 +0.28136529499842167 +30 +0.010230022180818192 +11 +2.942091015256665e-15 +21 +0.15899592086427927 +31 +-1.1189627002750058e-15 +12 +2.942091015256665e-15 +22 +0.29088918200000213 +32 +-1.1189627002750058e-15 +13 +2.942091015256665e-15 +23 +0.29088918200000213 +33 +-1.1189627002750058e-15 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +2.942091015256665e-15 +20 +0.15899592086427927 +30 +-1.1189627002750058e-15 +11 +0.07279039008472937 +21 +0.28136529499842167 +31 +0.010230022180818192 +12 +0.2165682094492326 +22 +0.15899592086427927 +32 +0.030436676925993323 +13 +0.2165682094492326 +23 +0.15899592086427927 +33 +0.030436676925993323 +70 +3 + 0 +3DFACE + 8 +finger distal +10 +0.2165682094492326 +20 +0.15899592086427927 +30 +0.030436676925993323 +11 +0.07279039008472937 +21 +0.28136529499842167 +31 +0.010230022180818192 +12 +0.0752960226550266 +22 +0.28014261634080284 +32 +0.010582165873702443 +13 +0.0752960226550266 +23 +0.28014261634080284 +33 +0.010582165873702443 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.2165682094492326 +20 +0.15899592086427927 +30 +0.030436676925993323 +11 +0.0752960226550266 +21 +0.28014261634080284 +31 +0.010582165873702443 +12 +0.14352399544263056 +22 +0.2511284049735225 +32 +0.02017098211932512 +13 +0.14352399544263056 +23 +0.2511284049735225 +33 +0.02017098211932512 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.2165682094492326 +20 +0.15899592086427927 +30 +0.030436676925993323 +11 +0.14352399544263056 +21 +0.2511284049735225 +31 +0.02017098211932512 +12 +0.14470316953883317 +22 +0.2504791096276532 +32 +0.020336704231065143 +13 +0.14470316953883317 +23 +0.2504791096276532 +33 +0.020336704231065143 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.2165682094492326 +20 +0.15899592086427927 +30 +0.030436676925993323 +11 +0.14470316953883317 +21 +0.2504791096276532 +31 +0.020336704231065143 +12 +0.20230908016629684 +22 +0.2054774695577018 +32 +0.02843268699444177 +13 +0.20230908016629684 +23 +0.2054774695577018 +33 +0.02843268699444177 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.2165682094492326 +20 +0.15899592086427927 +30 +0.030436676925993323 +11 +0.20230908016629684 +21 +0.2054774695577018 +31 +0.02843268699444177 +12 +0.20373004107196863 +22 +0.2040362885325907 +32 +0.028632390026202197 +13 +0.20373004107196863 +23 +0.2040362885325907 +33 +0.028632390026202197 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.2165682094492326 +20 +0.15899592086427927 +30 +0.030436676925993323 +11 +0.20373004107196863 +21 +0.2040362885325907 +31 +0.028632390026202197 +12 +0.21604855191382222 +22 +0.18772809764161968 +32 +0.030363643822208155 +13 +0.21604855191382222 +23 +0.18772809764161968 +33 +0.030363643822208155 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.2165682094492326 +20 +0.15899592086427927 +30 +0.030436676925993323 +11 +0.21604855191382222 +21 +0.18772809764161968 +31 +0.030363643822208155 +12 +0.24733927091273722 +22 +0.14630304025430108 +32 +0.03476126758875187 +13 +0.24733927091273722 +23 +0.14630304025430108 +33 +0.03476126758875187 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.2165682094492326 +20 +0.15899592086427927 +30 +0.030436676925993323 +11 +0.2863149648021954 +21 +1.1657341758564144e-15 +31 +0.04023894414108302 +12 +0.21656820944923139 +22 +-1.5654144647214707e-14 +32 +0.0304366769259978 +13 +0.21656820944923139 +23 +-1.5654144647214707e-14 +33 +0.0304366769259978 +70 +1 + 0 +3DFACE + 8 +finger distal +10 +0.2863149648021954 +20 +1.1657341758564144e-15 +30 +0.04023894414108302 +11 +0.2165682094492326 +21 +0.15899592086427927 +31 +0.030436676925993323 +12 +0.24733927091273722 +22 +0.14630304025430108 +32 +0.03476126758875187 +13 +0.24733927091273722 +23 +0.14630304025430108 +33 +0.03476126758875187 +70 +15 + 0 +3DFACE + 8 +finger distal +10 +0.2863149648021954 +20 +1.1657341758564144e-15 +30 +0.04023894414108302 +11 +0.24733927091273722 +21 +0.14630304025430108 +31 +0.03476126758875187 +12 +0.24866776335898266 +22 +0.144017558640957 +32 +0.03494797502604473 +13 +0.24866776335898266 +23 +0.144017558640957 +33 +0.03494797502604473 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.2863149648021954 +20 +1.1657341758564144e-15 +30 +0.04023894414108302 +11 +0.24866776335898266 +21 +0.144017558640957 +31 +0.03494797502604473 +12 +0.27583114835190015 +22 +0.0774264694728452 +32 +0.03876553982628998 +13 +0.27583114835190015 +23 +0.0774264694728452 +33 +0.03876553982628998 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.2863149648021954 +20 +1.1657341758564144e-15 +30 +0.04023894414108302 +11 +0.27583114835190015 +21 +0.0774264694728452 +31 +0.03876553982628998 +12 +0.27676048551116517 +22 +0.07446552246557753 +32 +0.03889614964637553 +13 +0.27676048551116517 +23 +0.07446552246557753 +33 +0.03889614964637553 +70 +13 + 0 +3DFACE + 8 +finger distal +10 +0.2863149648021954 +20 +1.1657341758564144e-15 +30 +0.04023894414108302 +11 +0.27676048551116517 +21 +0.07446552246557753 +31 +0.03889614964637553 +12 +0.2859865540554998 +22 +0.003291402957666445 +32 +0.04019278902061723 +13 +0.2859865540554998 +23 +0.003291402957666445 +33 +0.04019278902061723 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.34414271161815124 +20 +1.3322676295501878e-14 +30 +1.4038444237044558 +11 +-0.3085499141622408 +21 +0.2146021186099738 +31 +1.3179158093635974 +12 +-0.308549914162242 +22 +6.6058269965196814e-15 +32 +1.3179158093635963 +13 +-0.308549914162242 +23 +6.6058269965196814e-15 +33 +1.3179158093635963 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3085499141622408 +20 +0.2146021186099738 +30 +1.3179158093635974 +11 +-0.34414271161815124 +21 +1.3322676295501878e-14 +31 +1.4038444237044558 +12 +-0.3441427116181524 +22 +0.21460211860998057 +32 +1.4038444237044547 +13 +-0.3441427116181524 +23 +0.21460211860998057 +33 +1.4038444237044547 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.09221276165913117 +20 +6.6058269965196814e-15 +30 +1.8401998969817372 +11 +-8.1601392309949e-15 +21 +0.21460211860997835 +31 +1.852339937363593 +12 +-9.270362255620057e-15 +22 +4.3298697960381105e-15 +32 +1.8523399373635918 +13 +-9.270362255620057e-15 +23 +4.3298697960381105e-15 +33 +1.8523399373635918 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-8.1601392309949e-15 +20 +0.21460211860997835 +30 +1.852339937363593 +11 +0.09221276165913117 +21 +6.6058269965196814e-15 +31 +1.8401998969817372 +12 +0.09221276165912784 +22 +0.21460211860997835 +32 +1.8401998969817395 +13 +0.09221276165912784 +23 +0.21460211860997835 +33 +1.8401998969817395 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2519299499590142 +20 +6.6058269965196814e-15 +30 +1.7479871353226024 +11 +-0.178141376000007 +21 +0.2146021186099828 +31 +1.8046070995258234 +12 +-0.25192994995901646 +22 +0.21460211860997158 +32 +1.7479871353226013 +13 +-0.25192994995901646 +23 +0.21460211860997158 +33 +1.7479871353226013 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.178141376000007 +20 +0.2146021186099828 +30 +1.8046070995258234 +11 +-0.2519299499590142 +21 +6.6058269965196814e-15 +31 +1.7479871353226024 +12 +-0.178141376000007 +22 +1.3322676295501878e-14 +32 +1.8046070995258212 +13 +-0.178141376000007 +23 +1.3322676295501878e-14 +33 +1.8046070995258212 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2519299499589991 +20 +4.3298697960381105e-15 +30 +1.7479871353225969 +11 +0.17814137599999302 +21 +0.21460211860997835 +31 +1.8046070995258234 +12 +0.1781413759999908 +22 +2.1094237467877974e-15 +32 +1.8046070995258223 +13 +0.1781413759999908 +23 +2.1094237467877974e-15 +33 +1.8046070995258223 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.17814137599999302 +20 +0.21460211860997835 +30 +1.8046070995258234 +11 +0.2519299499589991 +21 +4.3298697960381105e-15 +31 +1.7479871353225969 +12 +0.2519299499590002 +22 +0.2146021186099738 +32 +1.7479871353226013 +13 +0.2519299499590002 +23 +0.2146021186099738 +33 +1.7479871353226013 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.308549914162242 +20 +1.3322676295501878e-14 +30 +1.6741985613635963 +11 +-0.3441427116181479 +21 +0.21460211860997602 +31 +1.5882699470227322 +12 +-0.34414271161815574 +22 +2.1094237467877974e-15 +32 +1.5882699470227366 +13 +-0.34414271161815574 +23 +2.1094237467877974e-15 +33 +1.5882699470227366 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3441427116181479 +20 +0.21460211860997602 +30 +1.5882699470227322 +11 +-0.308549914162242 +21 +1.3322676295501878e-14 +31 +1.6741985613635963 +12 +-0.3085499141622374 +22 +0.2146021186099828 +32 +1.6741985613635952 +13 +-0.3085499141622374 +23 +0.2146021186099828 +33 +1.6741985613635952 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.09221276165914405 +20 +6.6058269965196814e-15 +30 +1.8401998969817417 +11 +-0.178141376000007 +21 +0.2146021186099828 +31 +1.8046070995258234 +12 +-0.178141376000007 +22 +1.3322676295501878e-14 +32 +1.8046070995258212 +13 +-0.178141376000007 +23 +1.3322676295501878e-14 +33 +1.8046070995258212 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.178141376000007 +20 +0.2146021186099828 +30 +1.8046070995258234 +11 +-0.09221276165914405 +21 +6.6058269965196814e-15 +31 +1.8401998969817417 +12 +-0.09221276165914855 +22 +0.21460211860997835 +32 +1.8401998969817361 +13 +-0.09221276165914855 +23 +0.21460211860997835 +33 +1.8401998969817361 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.30854991416222566 +20 +0.21460211860997158 +30 +1.6741985613635975 +11 +0.2519299499589991 +21 +4.3298697960381105e-15 +31 +1.7479871353225969 +12 +0.3085499141622211 +22 +4.3298697960381105e-15 +32 +1.6741985613635941 +13 +0.3085499141622211 +23 +4.3298697960381105e-15 +33 +1.6741985613635941 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2519299499589991 +20 +4.3298697960381105e-15 +30 +1.7479871353225969 +11 +0.30854991416222566 +21 +0.21460211860997158 +31 +1.6741985613635975 +12 +0.2519299499590002 +22 +0.2146021186099738 +32 +1.7479871353226013 +13 +0.2519299499590002 +23 +0.2146021186099738 +33 +1.7479871353226013 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3562827519999896 +20 +0.2146021186099738 +30 +1.496057185363593 +11 +0.3441427116181349 +21 +6.6058269965196814e-15 +31 +1.58826994702273 +12 +0.3562827519999907 +22 +2.1094237467877974e-15 +32 +1.496057185363593 +13 +0.3562827519999907 +23 +2.1094237467877974e-15 +33 +1.496057185363593 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3441427116181349 +20 +6.6058269965196814e-15 +30 +1.58826994702273 +11 +0.3562827519999896 +21 +0.2146021186099738 +31 +1.496057185363593 +12 +0.3441427116181349 +22 +0.2146021186099738 +32 +1.5882699470227333 +13 +0.3441427116181349 +23 +0.2146021186099738 +33 +1.5882699470227333 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3562827520000115 +20 +0.21460211860998057 +30 +1.496057185363594 +11 +-0.34414271161815124 +21 +1.3322676295501878e-14 +31 +1.4038444237044558 +12 +-0.35628275200000925 +22 +8.826273045769994e-15 +32 +1.496057185363594 +13 +-0.35628275200000925 +23 +8.826273045769994e-15 +33 +1.496057185363594 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.34414271161815124 +20 +1.3322676295501878e-14 +30 +1.4038444237044558 +11 +-0.3562827520000115 +21 +0.21460211860998057 +31 +1.496057185363594 +12 +-0.3441427116181524 +22 +0.21460211860998057 +32 +1.4038444237044547 +13 +-0.3441427116181524 +23 +0.21460211860998057 +33 +1.4038444237044547 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3085499141622408 +20 +0.2146021186099738 +30 +1.3179158093635974 +11 +-0.25192994995901313 +21 +1.1046719095020308e-14 +31 +1.2441272354045858 +12 +-0.308549914162242 +22 +6.6058269965196814e-15 +32 +1.3179158093635963 +13 +-0.308549914162242 +23 +6.6058269965196814e-15 +33 +1.3179158093635963 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.25192994995901313 +20 +1.1046719095020308e-14 +30 +1.2441272354045858 +11 +-0.3085499141622408 +21 +0.2146021186099738 +31 +1.3179158093635974 +12 +-0.2519299499590154 +22 +0.2146021186099828 +32 +1.244127235404588 +13 +-0.2519299499590154 +23 +0.2146021186099828 +33 +1.244127235404588 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3441427116181349 +20 +6.6058269965196814e-15 +30 +1.58826994702273 +11 +0.30854991416222566 +21 +0.21460211860997158 +31 +1.6741985613635975 +12 +0.3085499141622211 +22 +4.3298697960381105e-15 +32 +1.6741985613635941 +13 +0.3085499141622211 +23 +4.3298697960381105e-15 +33 +1.6741985613635941 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.30854991416222566 +20 +0.21460211860997158 +30 +1.6741985613635975 +11 +0.3441427116181349 +21 +6.6058269965196814e-15 +31 +1.58826994702273 +12 +0.3441427116181349 +22 +0.2146021186099738 +32 +1.5882699470227333 +13 +0.3441427116181349 +23 +0.2146021186099738 +33 +1.5882699470227333 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.09221276165913117 +20 +6.6058269965196814e-15 +30 +1.8401998969817372 +11 +0.17814137599999302 +21 +0.21460211860997835 +31 +1.8046070995258234 +12 +0.09221276165912784 +22 +0.21460211860997835 +32 +1.8401998969817395 +13 +0.09221276165912784 +23 +0.21460211860997835 +33 +1.8401998969817395 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.17814137599999302 +20 +0.21460211860997835 +30 +1.8046070995258234 +11 +0.09221276165913117 +21 +6.6058269965196814e-15 +31 +1.8401998969817372 +12 +0.1781413759999908 +22 +2.1094237467877974e-15 +32 +1.8046070995258223 +13 +0.1781413759999908 +23 +2.1094237467877974e-15 +33 +1.8046070995258223 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.25192994995901646 +20 +0.21460211860997158 +30 +1.7479871353226013 +11 +-0.308549914162242 +21 +1.3322676295501878e-14 +31 +1.6741985613635963 +12 +-0.2519299499590142 +22 +6.6058269965196814e-15 +32 +1.7479871353226024 +13 +-0.2519299499590142 +23 +6.6058269965196814e-15 +33 +1.7479871353226024 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.308549914162242 +20 +1.3322676295501878e-14 +30 +1.6741985613635963 +11 +-0.25192994995901646 +21 +0.21460211860997158 +31 +1.7479871353226013 +12 +-0.3085499141622374 +22 +0.2146021186099828 +32 +1.6741985613635952 +13 +-0.3085499141622374 +23 +0.2146021186099828 +33 +1.6741985613635952 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.09221276165914405 +20 +6.6058269965196814e-15 +30 +1.8401998969817417 +11 +-8.1601392309949e-15 +21 +0.21460211860997835 +31 +1.852339937363593 +12 +-0.09221276165914855 +22 +0.21460211860997835 +32 +1.8401998969817361 +13 +-0.09221276165914855 +23 +0.21460211860997835 +33 +1.8401998969817361 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-8.1601392309949e-15 +20 +0.21460211860997835 +30 +1.852339937363593 +11 +-0.09221276165914405 +21 +6.6058269965196814e-15 +31 +1.8401998969817417 +12 +-9.270362255620057e-15 +22 +4.3298697960381105e-15 +32 +1.8523399373635918 +13 +-9.270362255620057e-15 +23 +4.3298697960381105e-15 +33 +1.8523399373635918 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3441427116181479 +20 +0.21460211860997602 +30 +1.5882699470227322 +11 +-0.35628275200000925 +21 +8.826273045769994e-15 +31 +1.496057185363594 +12 +-0.34414271161815574 +22 +2.1094237467877974e-15 +32 +1.5882699470227366 +13 +-0.34414271161815574 +23 +2.1094237467877974e-15 +33 +1.5882699470227366 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.35628275200000925 +20 +8.826273045769994e-15 +30 +1.496057185363594 +11 +-0.3441427116181479 +21 +0.21460211860997602 +31 +1.5882699470227322 +12 +-0.3562827520000115 +22 +0.21460211860998057 +32 +1.496057185363594 +13 +-0.3562827520000115 +23 +0.21460211860998057 +33 +1.496057185363594 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3085499141622408 +20 +0.2146021186099738 +30 +1.3179158093635974 +11 +-6.994405055138486e-15 +21 +0.21460211860998057 +31 +1.496057185363593 +12 +-0.2519299499590154 +22 +0.2146021186099828 +32 +1.244127235404588 +13 +-0.2519299499590154 +23 +0.2146021186099828 +33 +1.244127235404588 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-6.994405055138486e-15 +20 +0.21460211860998057 +30 +1.496057185363593 +11 +-0.3085499141622408 +21 +0.2146021186099738 +31 +1.3179158093635974 +12 +-0.3441427116181524 +22 +0.21460211860998057 +32 +1.4038444237044547 +13 +-0.3441427116181524 +23 +0.21460211860998057 +33 +1.4038444237044547 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-6.994405055138486e-15 +20 +0.21460211860998057 +30 +1.496057185363593 +11 +-0.3441427116181524 +21 +0.21460211860998057 +31 +1.4038444237044547 +12 +-0.3562827520000115 +22 +0.21460211860998057 +32 +1.496057185363594 +13 +-0.3562827520000115 +23 +0.21460211860998057 +33 +1.496057185363594 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-6.994405055138486e-15 +20 +0.21460211860998057 +30 +1.496057185363593 +11 +-0.3562827520000115 +21 +0.21460211860998057 +31 +1.496057185363594 +12 +0.3562827519999896 +22 +0.2146021186099738 +32 +1.496057185363593 +13 +0.3562827519999896 +23 +0.2146021186099738 +33 +1.496057185363593 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3562827519999896 +20 +0.2146021186099738 +30 +1.496057185363593 +11 +-0.3562827520000115 +21 +0.21460211860998057 +31 +1.496057185363594 +12 +0.3441427116181349 +22 +0.2146021186099738 +32 +1.5882699470227333 +13 +0.3441427116181349 +23 +0.2146021186099738 +33 +1.5882699470227333 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3441427116181349 +20 +0.2146021186099738 +30 +1.5882699470227333 +11 +-0.3562827520000115 +21 +0.21460211860998057 +31 +1.496057185363594 +12 +-0.3441427116181479 +22 +0.21460211860997602 +32 +1.5882699470227322 +13 +-0.3441427116181479 +23 +0.21460211860997602 +33 +1.5882699470227322 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3441427116181349 +20 +0.2146021186099738 +30 +1.5882699470227333 +11 +-0.3441427116181479 +21 +0.21460211860997602 +31 +1.5882699470227322 +12 +-0.3085499141622374 +22 +0.2146021186099828 +32 +1.6741985613635952 +13 +-0.3085499141622374 +23 +0.2146021186099828 +33 +1.6741985613635952 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3441427116181349 +20 +0.2146021186099738 +30 +1.5882699470227333 +11 +-0.3085499141622374 +21 +0.2146021186099828 +31 +1.6741985613635952 +12 +0.30854991416222566 +22 +0.21460211860997158 +32 +1.6741985613635975 +13 +0.30854991416222566 +23 +0.21460211860997158 +33 +1.6741985613635975 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.30854991416222566 +20 +0.21460211860997158 +30 +1.6741985613635975 +11 +-0.3085499141622374 +21 +0.2146021186099828 +31 +1.6741985613635952 +12 +-0.25192994995901646 +22 +0.21460211860997158 +32 +1.7479871353226013 +13 +-0.25192994995901646 +23 +0.21460211860997158 +33 +1.7479871353226013 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.30854991416222566 +20 +0.21460211860997158 +30 +1.6741985613635975 +11 +-0.25192994995901646 +21 +0.21460211860997158 +31 +1.7479871353226013 +12 +0.2519299499590002 +22 +0.2146021186099738 +32 +1.7479871353226013 +13 +0.2519299499590002 +23 +0.2146021186099738 +33 +1.7479871353226013 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2519299499590002 +20 +0.2146021186099738 +30 +1.7479871353226013 +11 +-0.25192994995901646 +21 +0.21460211860997158 +31 +1.7479871353226013 +12 +-0.178141376000007 +22 +0.2146021186099828 +32 +1.8046070995258234 +13 +-0.178141376000007 +23 +0.2146021186099828 +33 +1.8046070995258234 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2519299499590002 +20 +0.2146021186099738 +30 +1.7479871353226013 +11 +-0.178141376000007 +21 +0.2146021186099828 +31 +1.8046070995258234 +12 +0.17814137599999302 +22 +0.21460211860997835 +32 +1.8046070995258234 +13 +0.17814137599999302 +23 +0.21460211860997835 +33 +1.8046070995258234 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.17814137599999302 +20 +0.21460211860997835 +30 +1.8046070995258234 +11 +-0.178141376000007 +21 +0.2146021186099828 +31 +1.8046070995258234 +12 +-0.09221276165914855 +22 +0.21460211860997835 +32 +1.8401998969817361 +13 +-0.09221276165914855 +23 +0.21460211860997835 +33 +1.8401998969817361 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.17814137599999302 +20 +0.21460211860997835 +30 +1.8046070995258234 +11 +-0.09221276165914855 +21 +0.21460211860997835 +31 +1.8401998969817361 +12 +0.09221276165912784 +22 +0.21460211860997835 +32 +1.8401998969817395 +13 +0.09221276165912784 +23 +0.21460211860997835 +33 +1.8401998969817395 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.09221276165912784 +20 +0.21460211860997835 +30 +1.8401998969817395 +11 +-0.09221276165914855 +21 +0.21460211860997835 +31 +1.8401998969817361 +12 +-8.1601392309949e-15 +22 +0.21460211860997835 +32 +1.852339937363593 +13 +-8.1601392309949e-15 +23 +0.21460211860997835 +33 +1.852339937363593 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.25192994995901313 +20 +1.1046719095020308e-14 +30 +1.2441272354045858 +11 +-0.3915991037039563 +21 +0.10492866359423814 +31 +1.1044580816596459 +12 +-0.4043499632637243 +22 +4.3298697960381105e-15 +32 +1.091707222099877 +13 +-0.4043499632637243 +23 +4.3298697960381105e-15 +33 +1.091707222099877 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3915991037039563 +20 +0.10492866359423814 +30 +1.1044580816596459 +11 +-0.25192994995901313 +21 +1.1046719095020308e-14 +31 +1.2441272354045858 +12 +-0.35382596178106146 +22 +0.20428151428057906 +32 +1.1422312235825385 +13 +-0.35382596178106146 +23 +0.20428151428057906 +33 +1.1422312235825385 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.35382596178106146 +20 +0.20428151428057906 +30 +1.1422312235825385 +11 +-0.25192994995901313 +21 +1.1046719095020308e-14 +31 +1.2441272354045858 +12 +-0.2925129368815464 +22 +0.292512936881548 +32 +1.2035442484820547 +13 +-0.2925129368815464 +23 +0.292512936881548 +33 +1.2035442484820547 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2925129368815464 +20 +0.292512936881548 +30 +1.2035442484820547 +11 +-0.25192994995901313 +21 +1.1046719095020308e-14 +31 +1.2441272354045858 +12 +-0.2519299499590154 +22 +0.2146021186099828 +32 +1.244127235404588 +13 +-0.2519299499590154 +23 +0.2146021186099828 +33 +1.244127235404588 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2519299499590154 +20 +0.2146021186099828 +30 +1.244127235404588 +11 +-0.21026701806260537 +21 +0.36419315844043 +31 +1.285790167300998 +12 +-0.2925129368815464 +22 +0.292512936881548 +32 +1.2035442484820547 +13 +-0.2925129368815464 +23 +0.292512936881548 +33 +1.2035442484820547 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.21026701806260537 +20 +0.36419315844043 +30 +1.285790167300998 +11 +-0.2519299499590154 +21 +0.2146021186099828 +31 +1.244127235404588 +12 +-6.994405055138486e-15 +22 +0.21460211860998057 +32 +1.496057185363593 +13 +-6.994405055138486e-15 +23 +0.21460211860998057 +33 +1.496057185363593 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.21026701806260537 +20 +0.36419315844043 +30 +1.285790167300998 +11 +-6.994405055138486e-15 +21 +0.21460211860998057 +31 +1.496057185363593 +12 +-0.11098494793676095 +22 +0.4142014645753518 +32 +1.3850722374268436 +13 +-0.11098494793676095 +23 +0.4142014645753518 +33 +1.3850722374268436 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.11098494793676095 +20 +0.4142014645753518 +30 +1.3850722374268436 +11 +-6.994405055138486e-15 +21 +0.21460211860998057 +31 +1.496057185363593 +12 +-4.773959005888173e-15 +22 +0.43806765680044213 +32 +1.4960571853635918 +13 +-4.773959005888173e-15 +23 +0.43806765680044213 +33 +1.4960571853635918 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3562827519999896 +20 +0.2146021186099738 +30 +1.496057185363593 +11 +-4.773959005888173e-15 +21 +0.43806765680044213 +31 +1.4960571853635918 +12 +-6.994405055138486e-15 +22 +0.21460211860998057 +32 +1.496057185363593 +13 +-6.994405055138486e-15 +23 +0.21460211860998057 +33 +1.496057185363593 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-4.773959005888173e-15 +20 +0.43806765680044213 +30 +1.4960571853635918 +11 +0.3562827519999896 +21 +0.2146021186099738 +31 +1.496057185363593 +12 +0.11338025262337792 +22 +0.4231408633654873 +32 +1.4960571853635918 +13 +0.11338025262337792 +23 +0.4231408633654873 +33 +1.4960571853635918 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.11338025262337792 +20 +0.4231408633654873 +30 +1.4960571853635918 +11 +0.3562827519999896 +21 +0.2146021186099738 +31 +1.496057185363593 +12 +0.2190338284002119 +22 +0.3793777193655077 +32 +1.4960571853635918 +13 +0.2190338284002119 +23 +0.3793777193655077 +33 +1.4960571853635918 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2190338284002119 +20 +0.3793777193655077 +30 +1.4960571853635918 +11 +0.3562827519999896 +21 +0.2146021186099738 +31 +1.496057185363593 +12 +0.30976061074207994 +22 +0.30976061074210015 +32 +1.496057185363593 +13 +0.30976061074207994 +23 +0.30976061074210015 +33 +1.496057185363593 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.30976061074207994 +20 +0.30976061074210015 +30 +1.496057185363593 +11 +0.3562827519999896 +21 +0.2146021186099738 +31 +1.496057185363593 +12 +0.379377719365492 +22 +0.21903382840022767 +32 +1.4960571853635962 +13 +0.379377719365492 +23 +0.21903382840022767 +33 +1.4960571853635962 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.379377719365492 +20 +0.21903382840022767 +30 +1.4960571853635962 +11 +0.3562827519999896 +21 +0.2146021186099738 +31 +1.496057185363593 +12 +0.3562827519999907 +22 +2.1094237467877974e-15 +32 +1.496057185363593 +13 +0.3562827519999907 +23 +2.1094237467877974e-15 +33 +1.496057185363593 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.379377719365492 +20 +0.21903382840022767 +30 +1.4960571853635962 +11 +0.3562827519999907 +21 +2.1094237467877974e-15 +31 +1.496057185363593 +12 +0.438067656800432 +22 +8.826273045769994e-15 +32 +1.496057185363593 +13 +0.438067656800432 +23 +8.826273045769994e-15 +33 +1.496057185363593 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.379377719365492 +20 +0.21903382840022767 +30 +1.4960571853635962 +11 +0.438067656800432 +21 +8.826273045769994e-15 +31 +1.496057185363593 +12 +0.42314086336547163 +22 +0.11338025262340279 +32 +1.496057185363593 +13 +0.42314086336547163 +23 +0.11338025262340279 +33 +1.496057185363593 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-4.773959005888173e-15 +20 +0.43806765680044213 +30 +1.4960571853635918 +11 +0.09941181811875976 +21 +0.3710099560920558 +31 +0.7938622211774832 +12 +-9.325873406851315e-15 +22 +0.3840977702370938 +32 +0.7938622211774821 +13 +-9.325873406851315e-15 +23 +0.3840977702370938 +33 +0.7938622211774821 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.09941181811875976 +20 +0.3710099560920558 +30 +0.7938622211774832 +11 +-4.773959005888173e-15 +21 +0.43806765680044213 +31 +1.4960571853635918 +12 +0.11338025262337792 +22 +0.4231408633654873 +32 +1.4960571853635918 +13 +0.11338025262337792 +23 +0.4231408633654873 +33 +1.4960571853635918 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.09941181811875976 +20 +0.3710099560920558 +30 +0.7938622211774832 +11 +0.2190338284002119 +21 +0.3793777193655077 +31 +1.4960571853635918 +12 +0.1920488851185299 +22 +0.3326384265622784 +32 +0.7938622211774822 +13 +0.1920488851185299 +23 +0.3326384265622784 +33 +0.7938622211774822 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2190338284002119 +20 +0.3793777193655077 +30 +1.4960571853635918 +11 +0.09941181811875976 +21 +0.3710099560920558 +31 +0.7938622211774832 +12 +0.11338025262337792 +22 +0.4231408633654873 +32 +1.4960571853635918 +13 +0.11338025262337792 +23 +0.4231408633654873 +33 +1.4960571853635918 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2190338284002119 +20 +0.3793777193655077 +30 +1.4960571853635918 +11 +0.2715981379732598 +21 +0.2715981379732778 +31 +0.7938622211774844 +12 +0.1920488851185299 +22 +0.3326384265622784 +32 +0.7938622211774822 +13 +0.1920488851185299 +23 +0.3326384265622784 +33 +0.7938622211774822 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2715981379732598 +20 +0.2715981379732778 +30 +0.7938622211774844 +11 +0.2190338284002119 +21 +0.3793777193655077 +31 +1.4960571853635918 +12 +0.30976061074207994 +22 +0.30976061074210015 +32 +1.496057185363593 +13 +0.30976061074207994 +23 +0.30976061074210015 +33 +1.496057185363593 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2715981379732598 +20 +0.2715981379732778 +30 +0.7938622211774844 +11 +0.379377719365492 +21 +0.21903382840022767 +31 +1.4960571853635962 +12 +0.33263842656225817 +22 +0.19204888511854235 +32 +0.7938622211774866 +13 +0.33263842656225817 +23 +0.19204888511854235 +33 +0.7938622211774866 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.379377719365492 +20 +0.21903382840022767 +30 +1.4960571853635962 +11 +0.2715981379732598 +21 +0.2715981379732778 +31 +0.7938622211774844 +12 +0.30976061074207994 +22 +0.30976061074210015 +32 +1.496057185363593 +13 +0.30976061074207994 +23 +0.30976061074210015 +33 +1.496057185363593 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3710099560920289 +20 +0.09941181811878463 +30 +0.7938622211774811 +11 +0.438067656800432 +21 +8.826273045769994e-15 +31 +1.496057185363593 +12 +0.38409777023706804 +22 +8.826273045769994e-15 +32 +0.7938622211774833 +13 +0.38409777023706804 +23 +8.826273045769994e-15 +33 +0.7938622211774833 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.438067656800432 +20 +8.826273045769994e-15 +30 +1.496057185363593 +11 +0.3710099560920289 +21 +0.09941181811878463 +31 +0.7938622211774811 +12 +0.42314086336547163 +22 +0.11338025262340279 +32 +1.496057185363593 +13 +0.42314086336547163 +23 +0.11338025262340279 +33 +1.496057185363593 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.33263842656225817 +20 +0.19204888511854235 +30 +0.7938622211774866 +11 +0.42314086336547163 +21 +0.11338025262340279 +31 +1.496057185363593 +12 +0.3710099560920289 +22 +0.09941181811878463 +32 +0.7938622211774811 +13 +0.3710099560920289 +23 +0.09941181811878463 +33 +0.7938622211774811 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.42314086336547163 +20 +0.11338025262340279 +30 +1.496057185363593 +11 +0.33263842656225817 +21 +0.19204888511854235 +31 +0.7938622211774866 +12 +0.379377719365492 +22 +0.21903382840022767 +32 +1.4960571853635962 +13 +0.379377719365492 +23 +0.21903382840022767 +33 +1.4960571853635962 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3326384265622745 +20 +0.19204888511855134 +30 +0.7938622211774865 +11 +-0.37100995609204745 +21 +0.09941181811877786 +31 +0.7938622211774832 +12 +-0.3915991037039563 +22 +0.10492866359423814 +32 +1.1044580816596459 +13 +-0.3915991037039563 +23 +0.10492866359423814 +33 +1.1044580816596459 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.35382596178106146 +20 +0.20428151428057906 +30 +1.1422312235825385 +11 +-0.3326384265622745 +21 +0.19204888511855134 +31 +0.7938622211774865 +12 +-0.3915991037039563 +22 +0.10492866359423814 +32 +1.1044580816596459 +13 +-0.3915991037039563 +23 +0.10492866359423814 +33 +1.1044580816596459 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2925129368815464 +20 +0.292512936881548 +30 +1.2035442484820547 +11 +-0.19204888511855078 +21 +0.3326384265622738 +31 +0.7938622211774832 +12 +-0.2715981379732795 +22 +0.27159813797327326 +32 +0.793862221177481 +13 +-0.2715981379732795 +23 +0.27159813797327326 +33 +0.793862221177481 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.21026701806260537 +20 +0.36419315844043 +30 +1.285790167300998 +11 +-0.19204888511855078 +21 +0.3326384265622738 +31 +0.7938622211774832 +12 +-0.2925129368815464 +22 +0.292512936881548 +32 +1.2035442484820547 +13 +-0.2925129368815464 +23 +0.292512936881548 +33 +1.2035442484820547 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.11098494793676095 +20 +0.4142014645753518 +30 +1.3850722374268436 +11 +-9.325873406851315e-15 +21 +0.3840977702370938 +31 +0.7938622211774821 +12 +-0.09941181811877842 +22 +0.371009956092049 +32 +0.7938622211774821 +13 +-0.09941181811877842 +23 +0.371009956092049 +33 +0.7938622211774821 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-4.773959005888173e-15 +20 +0.43806765680044213 +30 +1.4960571853635918 +11 +-9.325873406851315e-15 +21 +0.3840977702370938 +31 +0.7938622211774821 +12 +-0.11098494793676095 +22 +0.4142014645753518 +32 +1.3850722374268436 +13 +-0.11098494793676095 +23 +0.4142014645753518 +33 +1.3850722374268436 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2715981379732795 +20 +0.27159813797327326 +30 +0.793862221177481 +11 +-0.3326384265622745 +21 +0.19204888511855134 +31 +0.7938622211774865 +12 +-0.35382596178106146 +22 +0.20428151428057906 +32 +1.1422312235825385 +13 +-0.35382596178106146 +23 +0.20428151428057906 +33 +1.1422312235825385 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2925129368815464 +20 +0.292512936881548 +30 +1.2035442484820547 +11 +-0.2715981379732795 +21 +0.27159813797327326 +31 +0.793862221177481 +12 +-0.35382596178106146 +22 +0.20428151428057906 +32 +1.1422312235825385 +13 +-0.35382596178106146 +23 +0.20428151428057906 +33 +1.1422312235825385 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3915991037039563 +20 +0.10492866359423814 +30 +1.1044580816596459 +11 +-0.3840977702370878 +21 +1.1046719095020308e-14 +31 +0.7938622211774798 +12 +-0.4043499632637243 +22 +4.3298697960381105e-15 +32 +1.091707222099877 +13 +-0.4043499632637243 +23 +4.3298697960381105e-15 +33 +1.091707222099877 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3915991037039563 +20 +0.10492866359423814 +30 +1.1044580816596459 +11 +-0.37100995609204745 +21 +0.09941181811877786 +31 +0.7938622211774832 +12 +-0.3840977702370878 +22 +1.1046719095020308e-14 +32 +0.7938622211774798 +13 +-0.3840977702370878 +23 +1.1046719095020308e-14 +33 +0.7938622211774798 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.21026701806260537 +20 +0.36419315844043 +30 +1.285790167300998 +11 +-0.09941181811877842 +21 +0.371009956092049 +31 +0.7938622211774821 +12 +-0.19204888511855078 +22 +0.3326384265622738 +32 +0.7938622211774832 +13 +-0.19204888511855078 +23 +0.3326384265622738 +33 +0.7938622211774832 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.11098494793676095 +20 +0.4142014645753518 +30 +1.3850722374268436 +11 +-0.09941181811877842 +21 +0.371009956092049 +31 +0.7938622211774821 +12 +-0.21026701806260537 +22 +0.36419315844043 +32 +1.285790167300998 +13 +-0.21026701806260537 +23 +0.36419315844043 +33 +1.285790167300998 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2715981379732795 +20 +0.27159813797327326 +30 +0.793862221177481 +11 +-0.38998682518333744 +21 +0.22515899850000798 +31 +-1.1116135775444189e-15 +12 +-0.3326384265622745 +22 +0.19204888511855134 +32 +0.7938622211774865 +13 +-0.3326384265622745 +23 +0.19204888511855134 +33 +0.7938622211774865 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.38998682518333744 +20 +0.22515899850000798 +30 +-1.1116135775444189e-15 +11 +-0.2715981379732795 +21 +0.27159813797327326 +31 +0.793862221177481 +12 +-0.3184229093690556 +22 +0.31842290936904827 +32 +1.132572953045013e-15 +13 +-0.3184229093690556 +23 +0.31842290936904827 +33 +1.132572953045013e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-9.325873406851315e-15 +20 +0.3840977702370938 +30 +0.7938622211774821 +11 +0.11655087397601116 +21 +0.4349737833450753 +31 +1.1690664734545857e-15 +12 +-7.049916206369744e-15 +22 +0.45031799700000497 +32 +1.159449649898216e-15 +13 +-7.049916206369744e-15 +23 +0.45031799700000497 +33 +1.159449649898216e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.11655087397601116 +20 +0.4349737833450753 +30 +1.1690664734545857e-15 +11 +-9.325873406851315e-15 +21 +0.3840977702370938 +31 +0.7938622211774821 +12 +0.09941181811875976 +22 +0.3710099560920558 +32 +0.7938622211774832 +13 +0.09941181811875976 +23 +0.3710099560920558 +33 +0.7938622211774832 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.1920488851185299 +20 +0.3326384265622784 +30 +0.7938622211774822 +11 +0.31842290936903583 +21 +0.3184229093690527 +31 +-3.290439660368124e-15 +12 +0.22515899849998888 +22 +0.3899868251833378 +32 +-3.297929346592473e-15 +13 +0.22515899849998888 +23 +0.3899868251833378 +33 +-3.297929346592473e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.31842290936903583 +20 +0.3184229093690527 +30 +-3.290439660368124e-15 +11 +0.1920488851185299 +21 +0.3326384265622784 +31 +0.7938622211774822 +12 +0.2715981379732598 +22 +0.2715981379732778 +32 +0.7938622211774844 +13 +0.2715981379732598 +23 +0.2715981379732778 +33 +0.7938622211774844 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3326384265622745 +20 +0.19204888511855134 +30 +0.7938622211774865 +11 +-0.4349737833450727 +21 +0.11655087397603592 +31 +-1.1157228913145438e-15 +12 +-0.37100995609204745 +22 +0.09941181811877786 +32 +0.7938622211774832 +13 +-0.37100995609204745 +23 +0.09941181811877786 +33 +0.7938622211774832 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.4349737833450727 +20 +0.11655087397603592 +30 +-1.1157228913145438e-15 +11 +-0.3326384265622745 +21 +0.19204888511855134 +31 +0.7938622211774865 +12 +-0.38998682518333744 +22 +0.22515899850000798 +32 +-1.1116135775444189e-15 +13 +-0.38998682518333744 +23 +0.22515899850000798 +33 +-1.1116135775444189e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.450317996999995 +20 +1.1046719095020308e-14 +30 +-3.2806012647849043e-15 +11 +0.3710099560920289 +21 +0.09941181811878463 +31 +0.7938622211774811 +12 +0.38409777023706804 +22 +8.826273045769994e-15 +32 +0.7938622211774833 +13 +0.38409777023706804 +23 +8.826273045769994e-15 +33 +0.7938622211774833 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3710099560920289 +20 +0.09941181811878463 +30 +0.7938622211774811 +11 +0.450317996999995 +21 +1.1046719095020308e-14 +31 +-3.2806012647849043e-15 +12 +0.434973783345053 +22 +0.11655087397603137 +32 +-4.400432685469344e-15 +13 +0.434973783345053 +23 +0.11655087397603137 +33 +-4.400432685469344e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.09941181811877842 +20 +0.371009956092049 +30 +0.7938622211774821 +11 +-7.049916206369744e-15 +21 +0.45031799700000497 +31 +1.159449649898216e-15 +12 +-0.11655087397602859 +22 +0.4349737833450731 +32 +-2.2071617463537632e-15 +13 +-0.11655087397602859 +23 +0.4349737833450731 +33 +-2.2071617463537632e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +0.45031799700000497 +30 +1.159449649898216e-15 +11 +-0.09941181811877842 +21 +0.371009956092049 +31 +0.7938622211774821 +12 +-9.325873406851315e-15 +22 +0.3840977702370938 +32 +0.7938622211774821 +13 +-9.325873406851315e-15 +23 +0.3840977702370938 +33 +0.7938622211774821 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2251589985000131 +20 +0.38998682518332894 +30 +-1.0973661868614674e-15 +11 +-0.09941181811877842 +21 +0.371009956092049 +31 +0.7938622211774821 +12 +-0.11655087397602859 +22 +0.4349737833450731 +32 +-2.2071617463537632e-15 +13 +-0.11655087397602859 +23 +0.4349737833450731 +33 +-2.2071617463537632e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.09941181811877842 +20 +0.371009956092049 +30 +0.7938622211774821 +11 +-0.2251589985000131 +21 +0.38998682518332894 +31 +-1.0973661868614674e-15 +12 +-0.19204888511855078 +22 +0.3326384265622738 +32 +0.7938622211774832 +13 +-0.19204888511855078 +23 +0.3326384265622738 +33 +0.7938622211774832 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.11655087397601116 +20 +0.4349737833450753 +30 +1.1690664734545857e-15 +11 +0.1920488851185299 +21 +0.3326384265622784 +31 +0.7938622211774822 +12 +0.22515899849998888 +22 +0.3899868251833378 +32 +-3.297929346592473e-15 +13 +0.22515899849998888 +23 +0.3899868251833378 +33 +-3.297929346592473e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.1920488851185299 +20 +0.3326384265622784 +30 +0.7938622211774822 +11 +0.11655087397601116 +21 +0.4349737833450753 +31 +1.1690664734545857e-15 +12 +0.09941181811875976 +22 +0.3710099560920558 +32 +0.7938622211774832 +13 +0.09941181811875976 +23 +0.3710099560920558 +33 +0.7938622211774832 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.434973783345053 +20 +0.11655087397603137 +30 +-4.400432685469344e-15 +11 +0.33263842656225817 +21 +0.19204888511854235 +31 +0.7938622211774866 +12 +0.3710099560920289 +22 +0.09941181811878463 +32 +0.7938622211774811 +13 +0.3710099560920289 +23 +0.09941181811878463 +33 +0.7938622211774811 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.33263842656225817 +20 +0.19204888511854235 +30 +0.7938622211774866 +11 +0.434973783345053 +21 +0.11655087397603137 +31 +-4.400432685469344e-15 +12 +0.38998682518331773 +22 +0.22515899850001475 +32 +7.206242211372932e-17 +13 +0.38998682518331773 +23 +0.22515899850001475 +33 +7.206242211372932e-17 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3184229093690556 +20 +0.31842290936904827 +30 +1.132572953045013e-15 +11 +-0.19204888511855078 +21 +0.3326384265622738 +31 +0.7938622211774832 +12 +-0.2251589985000131 +22 +0.38998682518332894 +32 +-1.0973661868614674e-15 +13 +-0.2251589985000131 +23 +0.38998682518332894 +33 +-1.0973661868614674e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.19204888511855078 +20 +0.3326384265622738 +30 +0.7938622211774832 +11 +-0.3184229093690556 +21 +0.31842290936904827 +31 +1.132572953045013e-15 +12 +-0.2715981379732795 +22 +0.27159813797327326 +32 +0.793862221177481 +13 +-0.2715981379732795 +23 +0.27159813797327326 +33 +0.793862221177481 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3840977702370878 +20 +1.1046719095020308e-14 +30 +0.7938622211774798 +11 +-0.4349737833450727 +21 +0.11655087397603592 +31 +-1.1157228913145438e-15 +12 +-0.4503179970000113 +22 +8.826273045769994e-15 +32 +-4.474288446697922e-15 +13 +-0.4503179970000113 +23 +8.826273045769994e-15 +33 +-4.474288446697922e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.4349737833450727 +20 +0.11655087397603592 +30 +-1.1157228913145438e-15 +11 +-0.3840977702370878 +21 +1.1046719095020308e-14 +31 +0.7938622211774798 +12 +-0.37100995609204745 +22 +0.09941181811877786 +32 +0.7938622211774832 +13 +-0.37100995609204745 +23 +0.09941181811877786 +33 +0.7938622211774832 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.38998682518331773 +20 +0.22515899850001475 +30 +7.206242211372932e-17 +11 +0.2715981379732598 +21 +0.2715981379732778 +31 +0.7938622211774844 +12 +0.33263842656225817 +22 +0.19204888511854235 +32 +0.7938622211774866 +13 +0.33263842656225817 +23 +0.19204888511854235 +33 +0.7938622211774866 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2715981379732598 +20 +0.2715981379732778 +30 +0.7938622211774844 +11 +0.38998682518331773 +21 +0.22515899850001475 +31 +7.206242211372932e-17 +12 +0.31842290936903583 +22 +0.3184229093690527 +32 +-3.290439660368124e-15 +13 +0.31842290936903583 +23 +0.3184229093690527 +33 +-3.290439660368124e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.0922127616591244 +20 +8.826273045769994e-15 +30 +-0.3441427116181453 +11 +-8.215650382226158e-15 +21 +1.1046719095020308e-14 +31 +-0.3562827520000011 +12 +0.08907068799998896 +22 +0.02386641891889696 +32 +-0.3441427116181431 +13 +0.08907068799998896 +23 +0.02386641891889696 +33 +-0.3441427116181431 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.17207135580906174 +20 +0.04610638082957619 +30 +-0.308549914162236 +11 +0.0922127616591244 +21 +8.826273045769994e-15 +31 +-0.3441427116181453 +12 +0.08907068799998896 +22 +0.02386641891889696 +32 +-0.3441427116181431 +13 +0.08907068799998896 +23 +0.02386641891889696 +33 +-0.3441427116181431 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.0922127616591244 +20 +8.826273045769994e-15 +30 +-0.3441427116181453 +11 +0.17207135580906174 +21 +0.04610638082957619 +31 +-0.308549914162236 +12 +0.1781413759999918 +22 +1.3322676295501878e-14 +32 +-0.308549914162236 +13 +0.1781413759999918 +23 +1.3322676295501878e-14 +33 +-0.308549914162236 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.24334564508110312 +20 +0.06520426908112564 +30 +-0.2519299499590094 +11 +0.1781413759999918 +21 +1.3322676295501878e-14 +31 +-0.308549914162236 +12 +0.17207135580906174 +22 +0.04610638082957619 +32 +-0.308549914162236 +13 +0.17207135580906174 +23 +0.04610638082957619 +33 +-0.308549914162236 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.1781413759999918 +20 +1.3322676295501878e-14 +30 +-0.308549914162236 +11 +0.24334564508110312 +21 +0.06520426908112564 +31 +-0.2519299499590094 +12 +0.25192994995899787 +22 +8.826273045769994e-15 +32 +-0.2519299499590072 +13 +0.25192994995899787 +23 +8.826273045769994e-15 +33 +-0.2519299499590072 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.25192994995899787 +20 +8.826273045769994e-15 +30 +-0.2519299499590072 +11 +0.2980363307885686 +21 +0.07985859414994045 +31 +-0.17814137600000218 +12 +0.3085499141622233 +22 +6.6058269965196814e-15 +32 +-0.17814137600000665 +13 +0.3085499141622233 +23 +6.6058269965196814e-15 +33 +-0.17814137600000665 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2980363307885686 +20 +0.07985859414994045 +30 +-0.17814137600000218 +11 +0.25192994995899787 +21 +8.826273045769994e-15 +31 +-0.2519299499590072 +12 +0.24334564508110312 +22 +0.06520426908112564 +32 +-0.2519299499590094 +13 +0.24334564508110312 +23 +0.06520426908112564 +33 +-0.2519299499590094 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2980363307885686 +20 +0.07985859414994045 +30 +-0.17814137600000218 +11 +0.34414271161813936 +21 +1.3322676295501878e-14 +31 +-0.0922127616591381 +12 +0.3085499141622233 +22 +6.6058269965196814e-15 +32 +-0.17814137600000665 +13 +0.3085499141622233 +23 +6.6058269965196814e-15 +33 +-0.17814137600000665 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.34414271161813936 +20 +1.3322676295501878e-14 +30 +-0.0922127616591381 +11 +0.2980363307885686 +21 +0.07985859414994045 +31 +-0.17814137600000218 +12 +0.3324163330811115 +22 +0.08907068800001161 +32 +-0.0922127616591392 +13 +0.3324163330811115 +23 +0.08907068800001161 +33 +-0.0922127616591392 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.34414271161813936 +20 +1.3322676295501878e-14 +30 +-0.0922127616591381 +11 +0.34414271161813714 +21 +0.0922127616591436 +31 +-1.0511651486801586e-15 +12 +0.3562827519999918 +22 +4.3298697960381105e-15 +32 +-1.0504778341596352e-15 +13 +0.3562827519999918 +23 +4.3298697960381105e-15 +33 +-1.0504778341596352e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.34414271161813714 +20 +0.0922127616591436 +30 +-1.0511651486801586e-15 +11 +0.34414271161813936 +21 +1.3322676295501878e-14 +31 +-0.0922127616591381 +12 +0.3324163330811115 +22 +0.08907068800001161 +32 +-0.0922127616591392 +13 +0.3324163330811115 +23 +0.08907068800001161 +33 +-0.0922127616591392 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.08907068799998896 +20 +0.02386641891889696 +30 +-0.3441427116181431 +11 +-8.215650382226158e-15 +21 +1.1046719095020308e-14 +31 +-0.3562827520000011 +12 +0.07985859414992125 +22 +0.04610638082956947 +32 +-0.3441427116181476 +13 +0.07985859414992125 +23 +0.04610638082956947 +33 +-0.3441427116181476 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.15427495708110595 +20 +0.08907068800000262 +30 +-0.3085499141622349 +11 +0.08907068799998896 +21 +0.02386641891889696 +31 +-0.3441427116181431 +12 +0.07985859414992125 +22 +0.04610638082956947 +32 +-0.3441427116181476 +13 +0.07985859414992125 +23 +0.04610638082956947 +33 +-0.3441427116181476 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.08907068799998896 +20 +0.02386641891889696 +30 +-0.3441427116181431 +11 +0.15427495708110595 +21 +0.08907068800000262 +31 +-0.3085499141622349 +12 +0.17207135580906174 +22 +0.04610638082957619 +32 +-0.308549914162236 +13 +0.17207135580906174 +23 +0.04610638082957619 +33 +-0.308549914162236 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2181777366386336 +20 +0.1259649749795123 +30 +-0.251929949959006 +11 +0.17207135580906174 +21 +0.04610638082957619 +31 +-0.308549914162236 +12 +0.15427495708110595 +22 +0.08907068800000262 +32 +-0.3085499141622349 +13 +0.15427495708110595 +23 +0.08907068800000262 +33 +-0.3085499141622349 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.17207135580906174 +20 +0.04610638082957619 +30 +-0.308549914162236 +11 +0.2181777366386336 +21 +0.1259649749795123 +31 +-0.251929949959006 +12 +0.24334564508110312 +22 +0.06520426908112564 +32 +-0.2519299499590094 +13 +0.24334564508110312 +23 +0.06520426908112564 +33 +-0.2519299499590094 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2181777366386336 +20 +0.1259649749795123 +30 +-0.251929949959006 +11 +0.2980363307885686 +21 +0.07985859414994045 +31 +-0.17814137600000218 +12 +0.24334564508110312 +22 +0.06520426908112564 +32 +-0.2519299499590094 +13 +0.24334564508110312 +23 +0.06520426908112564 +33 +-0.2519299499590094 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2980363307885686 +20 +0.07985859414994045 +30 +-0.17814137600000218 +11 +0.2181777366386336 +21 +0.1259649749795123 +31 +-0.251929949959006 +12 +0.26721206399999353 +22 +0.15427495708112848 +32 +-0.1781413760000044 +13 +0.26721206399999353 +23 +0.15427495708112848 +33 +-0.1781413760000044 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.26721206399999353 +20 +0.15427495708112848 +30 +-0.1781413760000044 +11 +0.3324163330811115 +21 +0.08907068800001161 +31 +-0.0922127616591392 +12 +0.2980363307885686 +22 +0.07985859414994045 +32 +-0.17814137600000218 +13 +0.2980363307885686 +23 +0.07985859414994045 +33 +-0.17814137600000218 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3324163330811115 +20 +0.08907068800001161 +30 +-0.0922127616591392 +11 +0.26721206399999353 +21 +0.15427495708112848 +31 +-0.1781413760000044 +12 +0.2980363307885675 +22 +0.17207135580907973 +32 +-0.0922127616591381 +13 +0.2980363307885675 +23 +0.17207135580907973 +33 +-0.0922127616591381 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2980363307885675 +20 +0.17207135580907973 +30 +-0.0922127616591381 +11 +0.34414271161813714 +21 +0.0922127616591436 +31 +-1.0511651486801586e-15 +12 +0.3324163330811115 +22 +0.08907068800001161 +32 +-0.0922127616591392 +13 +0.3324163330811115 +23 +0.08907068800001161 +33 +-0.0922127616591392 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.34414271161813714 +20 +0.0922127616591436 +30 +-1.0511651486801586e-15 +11 +0.2980363307885675 +21 +0.17207135580907973 +31 +-0.0922127616591381 +12 +0.30854991416222677 +22 +0.17814137600001212 +32 +-3.291745508012748e-15 +13 +0.30854991416222677 +23 +0.17814137600001212 +33 +-3.291745508012748e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.07985859414992125 +20 +0.04610638082956947 +30 +-0.3441427116181476 +11 +-8.215650382226158e-15 +21 +1.1046719095020308e-14 +31 +-0.3562827520000011 +12 +0.06520426908110866 +22 +0.06520426908112797 +32 +-0.3441427116181431 +13 +0.06520426908110866 +23 +0.06520426908112797 +33 +-0.3441427116181431 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.12596497497949322 +20 +0.1259649749795123 +30 +-0.30854991416223376 +11 +0.07985859414992125 +21 +0.04610638082956947 +31 +-0.3441427116181476 +12 +0.06520426908110866 +22 +0.06520426908112797 +32 +-0.3441427116181431 +13 +0.06520426908110866 +23 +0.06520426908112797 +33 +-0.3441427116181431 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.07985859414992125 +20 +0.04610638082956947 +30 +-0.3441427116181476 +11 +0.12596497497949322 +21 +0.1259649749795123 +31 +-0.30854991416223376 +12 +0.15427495708110595 +22 +0.08907068800000262 +32 +-0.3085499141622349 +13 +0.15427495708110595 +23 +0.08907068800000262 +33 +-0.3085499141622349 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.17814137599999402 +20 +0.17814137600000535 +30 +-0.2519299499590083 +11 +0.15427495708110595 +21 +0.08907068800000262 +31 +-0.3085499141622349 +12 +0.12596497497949322 +22 +0.1259649749795123 +32 +-0.30854991416223376 +13 +0.12596497497949322 +23 +0.1259649749795123 +33 +-0.30854991416223376 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.15427495708110595 +20 +0.08907068800000262 +30 +-0.3085499141622349 +11 +0.17814137599999402 +21 +0.17814137600000535 +31 +-0.2519299499590083 +12 +0.2181777366386336 +22 +0.1259649749795123 +32 +-0.251929949959006 +13 +0.2181777366386336 +23 +0.1259649749795123 +33 +-0.251929949959006 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.17814137599999402 +20 +0.17814137600000535 +30 +-0.2519299499590083 +11 +0.26721206399999353 +21 +0.15427495708112848 +31 +-0.1781413760000044 +12 +0.2181777366386336 +22 +0.1259649749795123 +32 +-0.251929949959006 +13 +0.2181777366386336 +23 +0.1259649749795123 +33 +-0.251929949959006 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.26721206399999353 +20 +0.15427495708112848 +30 +-0.1781413760000044 +11 +0.17814137599999402 +21 +0.17814137600000535 +31 +-0.2519299499590083 +12 +0.2181777366386336 +22 +0.2181777366386538 +32 +-0.17814137600000107 +13 +0.2181777366386336 +23 +0.2181777366386538 +33 +-0.17814137600000107 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2181777366386336 +20 +0.2181777366386538 +30 +-0.17814137600000107 +11 +0.2980363307885675 +21 +0.17207135580907973 +31 +-0.0922127616591381 +12 +0.26721206399999353 +22 +0.15427495708112848 +32 +-0.1781413760000044 +13 +0.26721206399999353 +23 +0.15427495708112848 +33 +-0.1781413760000044 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2980363307885675 +20 +0.17207135580907973 +30 +-0.0922127616591381 +11 +0.2181777366386336 +21 +0.2181777366386538 +31 +-0.17814137600000107 +12 +0.24334564508110534 +22 +0.24334564508112222 +32 +-0.09221276165913922 +13 +0.24334564508110534 +23 +0.24334564508112222 +33 +-0.09221276165913922 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.24334564508110534 +20 +0.24334564508112222 +30 +-0.09221276165913922 +11 +0.30854991416222677 +21 +0.17814137600001212 +31 +-3.291745508012748e-15 +12 +0.2980363307885675 +22 +0.17207135580907973 +32 +-0.0922127616591381 +13 +0.2980363307885675 +23 +0.17207135580907973 +33 +-0.0922127616591381 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.30854991416222677 +20 +0.17814137600001212 +30 +-3.291745508012748e-15 +11 +0.24334564508110534 +21 +0.24334564508112222 +31 +-0.09221276165913922 +12 +0.25192994995899565 +22 +0.2519299499590114 +32 +1.1796636210961499e-15 +13 +0.25192994995899565 +23 +0.2519299499590114 +33 +1.1796636210961499e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.06520426908110866 +20 +0.06520426908112797 +30 +-0.3441427116181431 +11 +-8.215650382226158e-15 +21 +1.1046719095020308e-14 +31 +-0.3562827520000011 +12 +0.04610638082956259 +22 +0.07985859414994045 +32 +-0.34414271161814086 +13 +0.04610638082956259 +23 +0.07985859414994045 +33 +-0.34414271161814086 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.08907068799999018 +20 +0.1542749570811307 +30 +-0.30854991416223265 +11 +0.06520426908110866 +21 +0.06520426908112797 +31 +-0.3441427116181431 +12 +0.04610638082956259 +22 +0.07985859414994045 +32 +-0.34414271161814086 +13 +0.04610638082956259 +23 +0.07985859414994045 +33 +-0.34414271161814086 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.06520426908110866 +20 +0.06520426908112797 +30 +-0.3441427116181431 +11 +0.08907068799999018 +21 +0.1542749570811307 +31 +-0.30854991416223265 +12 +0.12596497497949322 +22 +0.1259649749795123 +32 +-0.30854991416223376 +13 +0.12596497497949322 +23 +0.1259649749795123 +33 +-0.30854991416223376 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.12596497497949433 +20 +0.2181777366386516 +30 +-0.251929949959006 +11 +0.12596497497949322 +21 +0.1259649749795123 +31 +-0.30854991416223376 +12 +0.08907068799999018 +22 +0.1542749570811307 +32 +-0.30854991416223265 +13 +0.08907068799999018 +23 +0.1542749570811307 +33 +-0.30854991416223265 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.12596497497949322 +20 +0.1259649749795123 +30 +-0.30854991416223376 +11 +0.12596497497949433 +21 +0.2181777366386516 +31 +-0.251929949959006 +12 +0.17814137599999402 +22 +0.17814137600000535 +32 +-0.2519299499590083 +13 +0.17814137599999402 +23 +0.17814137600000535 +33 +-0.2519299499590083 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.12596497497949433 +20 +0.2181777366386516 +30 +-0.251929949959006 +11 +0.2181777366386336 +21 +0.2181777366386538 +31 +-0.17814137600000107 +12 +0.17814137599999402 +22 +0.17814137600000535 +32 +-0.2519299499590083 +13 +0.17814137599999402 +23 +0.17814137600000535 +33 +-0.2519299499590083 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2181777366386336 +20 +0.2181777366386538 +30 +-0.17814137600000107 +11 +0.12596497497949433 +21 +0.2181777366386516 +31 +-0.251929949959006 +12 +0.15427495708110595 +22 +0.26721206400000586 +32 +-0.1781413760000033 +13 +0.15427495708110595 +23 +0.26721206400000586 +33 +-0.1781413760000033 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.17207135580906951 +20 +0.2980363307885766 +30 +-0.09221276165913922 +11 +0.2181777366386336 +21 +0.2181777366386538 +31 +-0.17814137600000107 +12 +0.15427495708110595 +22 +0.26721206400000586 +32 +-0.1781413760000033 +13 +0.15427495708110595 +23 +0.26721206400000586 +33 +-0.1781413760000033 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.2181777366386336 +20 +0.2181777366386538 +30 +-0.17814137600000107 +11 +0.17207135580906951 +21 +0.2980363307885766 +31 +-0.09221276165913922 +12 +0.24334564508110534 +22 +0.24334564508112222 +32 +-0.09221276165913922 +13 +0.24334564508110534 +23 +0.24334564508112222 +33 +-0.09221276165913922 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.1781413759999918 +20 +0.30854991416223687 +30 +-1.064187472047551e-15 +11 +0.24334564508110534 +21 +0.24334564508112222 +31 +-0.09221276165913922 +12 +0.17207135580906951 +22 +0.2980363307885766 +32 +-0.09221276165913922 +13 +0.17207135580906951 +23 +0.2980363307885766 +33 +-0.09221276165913922 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.24334564508110534 +20 +0.24334564508112222 +30 +-0.09221276165913922 +11 +0.1781413759999918 +21 +0.30854991416223687 +31 +-1.064187472047551e-15 +12 +0.25192994995899565 +22 +0.2519299499590114 +32 +1.1796636210961499e-15 +13 +0.25192994995899565 +23 +0.2519299499590114 +33 +1.1796636210961499e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.04610638082956259 +20 +0.07985859414994045 +30 +-0.34414271161814086 +11 +-8.215650382226158e-15 +21 +1.1046719095020308e-14 +31 +-0.3562827520000011 +12 +0.023866418918875476 +22 +0.0890706880000004 +32 +-0.3441427116181442 +13 +0.023866418918875476 +23 +0.0890706880000004 +33 +-0.3441427116181442 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.04610638082956142 +20 +0.1720713558090775 +30 +-0.30854991416223154 +11 +0.04610638082956259 +21 +0.07985859414994045 +31 +-0.34414271161814086 +12 +0.023866418918875476 +22 +0.0890706880000004 +32 +-0.3441427116181442 +13 +0.023866418918875476 +23 +0.0890706880000004 +33 +-0.3441427116181442 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.04610638082956259 +20 +0.07985859414994045 +30 +-0.34414271161814086 +11 +0.04610638082956142 +21 +0.1720713558090775 +31 +-0.30854991416223154 +12 +0.08907068799999018 +22 +0.1542749570811307 +32 +-0.30854991416223265 +13 +0.08907068799999018 +23 +0.1542749570811307 +33 +-0.30854991416223265 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.06520426908110644 +20 +0.24334564508112 +30 +-0.2519299499590083 +11 +0.08907068799999018 +21 +0.1542749570811307 +31 +-0.30854991416223265 +12 +0.04610638082956142 +22 +0.1720713558090775 +32 +-0.30854991416223154 +13 +0.04610638082956142 +23 +0.1720713558090775 +33 +-0.30854991416223154 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.08907068799999018 +20 +0.1542749570811307 +30 +-0.30854991416223265 +11 +0.06520426908110644 +21 +0.24334564508112 +31 +-0.2519299499590083 +12 +0.12596497497949433 +22 +0.2181777366386516 +32 +-0.251929949959006 +13 +0.12596497497949433 +23 +0.2181777366386516 +33 +-0.251929949959006 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.07985859414992247 +20 +0.29803633078857883 +30 +-0.1781413760000033 +11 +0.12596497497949433 +21 +0.2181777366386516 +31 +-0.251929949959006 +12 +0.06520426908110644 +22 +0.24334564508112 +32 +-0.2519299499590083 +13 +0.06520426908110644 +23 +0.24334564508112 +33 +-0.2519299499590083 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.12596497497949433 +20 +0.2181777366386516 +30 +-0.251929949959006 +11 +0.07985859414992247 +21 +0.29803633078857883 +31 +-0.1781413760000033 +12 +0.15427495708110595 +22 +0.26721206400000586 +32 +-0.1781413760000033 +13 +0.15427495708110595 +23 +0.26721206400000586 +33 +-0.1781413760000033 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.08907068799998785 +20 +0.3324163330811273 +30 +-0.09221276165914372 +11 +0.15427495708110595 +21 +0.26721206400000586 +31 +-0.1781413760000033 +12 +0.07985859414992247 +22 +0.29803633078857883 +32 +-0.1781413760000033 +13 +0.07985859414992247 +23 +0.29803633078857883 +33 +-0.1781413760000033 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.15427495708110595 +20 +0.26721206400000586 +30 +-0.1781413760000033 +11 +0.08907068799998785 +21 +0.3324163330811273 +31 +-0.09221276165914372 +12 +0.17207135580906951 +22 +0.2980363307885766 +32 +-0.09221276165913922 +13 +0.17207135580906951 +23 +0.2980363307885766 +33 +-0.09221276165913922 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.09221276165912884 +20 +0.34414271161815735 +30 +4.776934118879337e-17 +11 +0.17207135580906951 +21 +0.2980363307885766 +31 +-0.09221276165913922 +12 +0.08907068799998785 +22 +0.3324163330811273 +32 +-0.09221276165914372 +13 +0.08907068799998785 +23 +0.3324163330811273 +33 +-0.09221276165914372 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.17207135580906951 +20 +0.2980363307885766 +30 +-0.09221276165913922 +11 +0.09221276165912884 +21 +0.34414271161815735 +31 +4.776934118879337e-17 +12 +0.1781413759999918 +22 +0.30854991416223687 +32 +-1.064187472047551e-15 +13 +0.1781413759999918 +23 +0.30854991416223687 +33 +-1.064187472047551e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.023866418918875476 +20 +0.0890706880000004 +30 +-0.3441427116181442 +11 +-8.215650382226158e-15 +21 +1.1046719095020308e-14 +31 +-0.3562827520000011 +12 +-1.1546319456101628e-14 +22 +0.09221276165914805 +32 +-0.3441427116181453 +13 +-1.1546319456101628e-14 +23 +0.09221276165914805 +33 +-0.3441427116181453 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +0.17814137600000535 +30 +-0.30854991416222927 +11 +0.023866418918875476 +21 +0.0890706880000004 +31 +-0.3441427116181442 +12 +-1.1546319456101628e-14 +22 +0.09221276165914805 +32 +-0.3441427116181453 +13 +-1.1546319456101628e-14 +23 +0.09221276165914805 +33 +-0.3441427116181453 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.023866418918875476 +20 +0.0890706880000004 +30 +-0.3441427116181442 +11 +-7.049916206369744e-15 +21 +0.17814137600000535 +31 +-0.30854991416222927 +12 +0.04610638082956142 +22 +0.1720713558090775 +32 +-0.30854991416223154 +13 +0.04610638082956142 +23 +0.1720713558090775 +33 +-0.30854991416223154 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.06520426908110644 +20 +0.24334564508112 +30 +-0.2519299499590083 +11 +-7.049916206369744e-15 +21 +0.17814137600000535 +31 +-0.30854991416222927 +12 +-1.0436096431476471e-14 +22 +0.2519299499590092 +32 +-0.2519299499590072 +13 +-1.0436096431476471e-14 +23 +0.2519299499590092 +33 +-0.2519299499590072 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +0.17814137600000535 +30 +-0.30854991416222927 +11 +0.06520426908110644 +21 +0.24334564508112 +31 +-0.2519299499590083 +12 +0.04610638082956142 +22 +0.1720713558090775 +32 +-0.30854991416223154 +13 +0.04610638082956142 +23 +0.1720713558090775 +33 +-0.30854991416223154 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-1.0436096431476471e-14 +20 +0.2519299499590092 +30 +-0.2519299499590072 +11 +0.07985859414992247 +21 +0.29803633078857883 +31 +-0.1781413760000033 +12 +0.06520426908110644 +22 +0.24334564508112 +32 +-0.2519299499590083 +13 +0.06520426908110644 +23 +0.24334564508112 +33 +-0.2519299499590083 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.07985859414992247 +20 +0.29803633078857883 +30 +-0.1781413760000033 +11 +-1.0436096431476471e-14 +21 +0.2519299499590092 +31 +-0.2519299499590072 +12 +-7.049916206369744e-15 +22 +0.30854991416224353 +32 +-0.17814137600000332 +13 +-7.049916206369744e-15 +23 +0.30854991416224353 +33 +-0.17814137600000332 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-1.1546319456101628e-14 +20 +0.3441427116181529 +30 +-0.09221276165914259 +11 +0.07985859414992247 +21 +0.29803633078857883 +31 +-0.1781413760000033 +12 +-7.049916206369744e-15 +22 +0.30854991416224353 +32 +-0.17814137600000332 +13 +-7.049916206369744e-15 +23 +0.30854991416224353 +33 +-0.17814137600000332 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.07985859414992247 +20 +0.29803633078857883 +30 +-0.1781413760000033 +11 +-1.1546319456101628e-14 +21 +0.3441427116181529 +31 +-0.09221276165914259 +12 +0.08907068799998785 +22 +0.3324163330811273 +32 +-0.09221276165914372 +13 +0.08907068799998785 +23 +0.3324163330811273 +33 +-0.09221276165914372 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-1.1546319456101628e-14 +20 +0.3441427116181529 +30 +-0.09221276165914259 +11 +0.09221276165912884 +21 +0.34414271161815735 +31 +4.776934118879337e-17 +12 +0.08907068799998785 +22 +0.3324163330811273 +32 +-0.09221276165914372 +13 +0.08907068799998785 +23 +0.3324163330811273 +33 +-0.09221276165914372 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.09221276165912884 +20 +0.34414271161815735 +30 +4.776934118879337e-17 +11 +-1.1546319456101628e-14 +21 +0.3441427116181529 +31 +-0.09221276165914259 +12 +-7.049916206369744e-15 +22 +0.35628275200001536 +32 +-1.0788020009459382e-15 +13 +-7.049916206369744e-15 +23 +0.35628275200001536 +33 +-1.0788020009459382e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-8.215650382226158e-15 +20 +1.1046719095020308e-14 +30 +-0.3562827520000011 +11 +-0.02386641891888963 +21 +0.08907068800000262 +31 +-0.3441427116181476 +12 +-1.1546319456101628e-14 +22 +0.09221276165914805 +32 +-0.3441427116181453 +13 +-1.1546319456101628e-14 +23 +0.09221276165914805 +33 +-0.3441427116181453 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +0.17814137600000535 +30 +-0.30854991416222927 +11 +-0.02386641891888963 +21 +0.08907068800000262 +31 +-0.3441427116181476 +12 +-0.04610638082957336 +22 +0.17207135580908417 +32 +-0.3085499141622349 +13 +-0.04610638082957336 +23 +0.17207135580908417 +33 +-0.3085499141622349 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.02386641891888963 +20 +0.08907068800000262 +30 +-0.3441427116181476 +11 +-7.049916206369744e-15 +21 +0.17814137600000535 +31 +-0.30854991416222927 +12 +-1.1546319456101628e-14 +22 +0.09221276165914805 +32 +-0.3441427116181453 +13 +-1.1546319456101628e-14 +23 +0.09221276165914805 +33 +-0.3441427116181453 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-1.0436096431476471e-14 +20 +0.2519299499590092 +30 +-0.2519299499590072 +11 +-0.04610638082957336 +21 +0.17207135580908417 +31 +-0.3085499141622349 +12 +-0.06520426908112398 +22 +0.243345645081129 +32 +-0.251929949959006 +13 +-0.06520426908112398 +23 +0.243345645081129 +33 +-0.251929949959006 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.04610638082957336 +20 +0.17207135580908417 +30 +-0.3085499141622349 +11 +-1.0436096431476471e-14 +21 +0.2519299499590092 +31 +-0.2519299499590072 +12 +-7.049916206369744e-15 +22 +0.17814137600000535 +32 +-0.30854991416222927 +13 +-7.049916206369744e-15 +23 +0.17814137600000535 +33 +-0.30854991416222927 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.06520426908112398 +20 +0.243345645081129 +30 +-0.251929949959006 +11 +-7.049916206369744e-15 +21 +0.30854991416224353 +31 +-0.17814137600000332 +12 +-1.0436096431476471e-14 +22 +0.2519299499590092 +32 +-0.2519299499590072 +13 +-1.0436096431476471e-14 +23 +0.2519299499590092 +33 +-0.2519299499590072 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +0.30854991416224353 +30 +-0.17814137600000332 +11 +-0.06520426908112398 +21 +0.243345645081129 +31 +-0.251929949959006 +12 +-0.07985859414994106 +22 +0.2980363307885855 +32 +-0.17814137600000443 +13 +-0.07985859414994106 +23 +0.2980363307885855 +33 +-0.17814137600000443 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.08907068800001211 +20 +0.3324163330811183 +30 +-0.09221276165914037 +11 +-7.049916206369744e-15 +21 +0.30854991416224353 +31 +-0.17814137600000332 +12 +-0.07985859414994106 +22 +0.2980363307885855 +32 +-0.17814137600000443 +13 +-0.07985859414994106 +23 +0.2980363307885855 +33 +-0.17814137600000443 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +0.30854991416224353 +30 +-0.17814137600000332 +11 +-0.08907068800001211 +21 +0.3324163330811183 +31 +-0.09221276165914037 +12 +-1.1546319456101628e-14 +22 +0.3441427116181529 +32 +-0.09221276165914259 +13 +-1.1546319456101628e-14 +23 +0.3441427116181529 +33 +-0.09221276165914259 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.08907068800001211 +20 +0.3324163330811183 +30 +-0.09221276165914037 +11 +-7.049916206369744e-15 +21 +0.35628275200001536 +31 +-1.0788020009459382e-15 +12 +-1.1546319456101628e-14 +22 +0.3441427116181529 +32 +-0.09221276165914259 +13 +-1.1546319456101628e-14 +23 +0.3441427116181529 +33 +-0.09221276165914259 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +0.35628275200001536 +30 +-1.0788020009459382e-15 +11 +-0.08907068800001211 +21 +0.3324163330811183 +31 +-0.09221276165914037 +12 +-0.0922127616591486 +22 +0.34414271161815735 +32 +-2.205457581532869e-15 +13 +-0.0922127616591486 +23 +0.34414271161815735 +33 +-2.205457581532869e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-8.215650382226158e-15 +20 +1.1046719095020308e-14 +30 +-0.3562827520000011 +11 +-0.04610638082957785 +21 +0.079858594149945 +31 +-0.34414271161814647 +12 +-0.02386641891888963 +22 +0.08907068800000262 +32 +-0.3441427116181476 +13 +-0.02386641891888963 +23 +0.08907068800000262 +33 +-0.3441427116181476 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.04610638082957336 +20 +0.17207135580908417 +30 +-0.3085499141622349 +11 +-0.04610638082957785 +21 +0.079858594149945 +31 +-0.34414271161814647 +12 +-0.08907068800000761 +22 +0.15427495708112615 +32 +-0.30854991416222927 +13 +-0.08907068800000761 +23 +0.15427495708112615 +33 +-0.30854991416222927 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.04610638082957785 +20 +0.079858594149945 +30 +-0.34414271161814647 +11 +-0.04610638082957336 +21 +0.17207135580908417 +31 +-0.3085499141622349 +12 +-0.02386641891888963 +22 +0.08907068800000262 +32 +-0.3441427116181476 +13 +-0.02386641891888963 +23 +0.08907068800000262 +33 +-0.3441427116181476 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.06520426908112398 +20 +0.243345645081129 +30 +-0.251929949959006 +11 +-0.08907068800000761 +21 +0.15427495708112615 +31 +-0.30854991416222927 +12 +-0.12596497497951514 +22 +0.21817773663864937 +32 +-0.2519299499590072 +13 +-0.12596497497951514 +23 +0.21817773663864937 +33 +-0.2519299499590072 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.08907068800000761 +20 +0.15427495708112615 +30 +-0.30854991416222927 +11 +-0.06520426908112398 +21 +0.243345645081129 +31 +-0.251929949959006 +12 +-0.04610638082957336 +22 +0.17207135580908417 +32 +-0.3085499141622349 +13 +-0.04610638082957336 +23 +0.17207135580908417 +33 +-0.3085499141622349 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.15427495708112787 +20 +0.2672120640000014 +30 +-0.17814137599999996 +11 +-0.06520426908112398 +21 +0.243345645081129 +31 +-0.251929949959006 +12 +-0.12596497497951514 +22 +0.21817773663864937 +32 +-0.2519299499590072 +13 +-0.12596497497951514 +23 +0.21817773663864937 +33 +-0.2519299499590072 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.06520426908112398 +20 +0.243345645081129 +30 +-0.251929949959006 +11 +-0.15427495708112787 +21 +0.2672120640000014 +31 +-0.17814137599999996 +12 +-0.07985859414994106 +22 +0.2980363307885855 +32 +-0.17814137600000443 +13 +-0.07985859414994106 +23 +0.2980363307885855 +33 +-0.17814137600000443 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.15427495708112787 +20 +0.2672120640000014 +30 +-0.17814137599999996 +11 +-0.08907068800001211 +21 +0.3324163330811183 +31 +-0.09221276165914037 +12 +-0.07985859414994106 +22 +0.2980363307885855 +32 +-0.17814137600000443 +13 +-0.07985859414994106 +23 +0.2980363307885855 +33 +-0.17814137600000443 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.08907068800001211 +20 +0.3324163330811183 +30 +-0.09221276165914037 +11 +-0.15427495708112787 +21 +0.2672120640000014 +31 +-0.17814137599999996 +12 +-0.17207135580907917 +22 +0.2980363307885855 +32 +-0.0922127616591415 +13 +-0.17207135580907917 +23 +0.2980363307885855 +33 +-0.0922127616591415 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.17814137600000818 +20 +0.30854991416224353 +30 +-6.688561244316844e-15 +11 +-0.08907068800001211 +21 +0.3324163330811183 +31 +-0.09221276165914037 +12 +-0.17207135580907917 +22 +0.2980363307885855 +32 +-0.0922127616591415 +13 +-0.17207135580907917 +23 +0.2980363307885855 +33 +-0.0922127616591415 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.08907068800001211 +20 +0.3324163330811183 +30 +-0.09221276165914037 +11 +-0.17814137600000818 +21 +0.30854991416224353 +31 +-6.688561244316844e-15 +12 +-0.0922127616591486 +22 +0.34414271161815735 +32 +-2.205457581532869e-15 +13 +-0.0922127616591486 +23 +0.34414271161815735 +33 +-2.205457581532869e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-8.215650382226158e-15 +20 +1.1046719095020308e-14 +30 +-0.3562827520000011 +11 +-0.06520426908112176 +21 +0.06520426908111898 +31 +-0.3441427116181431 +12 +-0.04610638082957785 +22 +0.079858594149945 +32 +-0.34414271161814647 +13 +-0.04610638082957785 +23 +0.079858594149945 +33 +-0.34414271161814647 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.08907068800000761 +20 +0.15427495708112615 +30 +-0.30854991416222927 +11 +-0.06520426908112176 +21 +0.06520426908111898 +31 +-0.3441427116181431 +12 +-0.1259649749795107 +22 +0.12596497497950565 +32 +-0.30854991416223826 +13 +-0.1259649749795107 +23 +0.12596497497950565 +33 +-0.30854991416223826 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.06520426908112176 +20 +0.06520426908111898 +30 +-0.3441427116181431 +11 +-0.08907068800000761 +21 +0.15427495708112615 +31 +-0.30854991416222927 +12 +-0.04610638082957785 +22 +0.079858594149945 +32 +-0.34414271161814647 +13 +-0.04610638082957785 +23 +0.079858594149945 +33 +-0.34414271161814647 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.12596497497951514 +20 +0.21817773663864937 +30 +-0.2519299499590072 +11 +-0.1259649749795107 +21 +0.12596497497950565 +31 +-0.30854991416223826 +12 +-0.17814137600001045 +22 +0.1781413760000099 +32 +-0.25192994995900836 +13 +-0.17814137600001045 +23 +0.1781413760000099 +33 +-0.25192994995900836 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.1259649749795107 +20 +0.12596497497950565 +30 +-0.30854991416223826 +11 +-0.12596497497951514 +21 +0.21817773663864937 +31 +-0.2519299499590072 +12 +-0.08907068800000761 +22 +0.15427495708112615 +32 +-0.30854991416222927 +13 +-0.08907068800000761 +23 +0.15427495708112615 +33 +-0.30854991416222927 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.21817773663864884 +20 +0.2181777366386538 +30 +-0.17814137600000332 +11 +-0.12596497497951514 +21 +0.21817773663864937 +31 +-0.2519299499590072 +12 +-0.17814137600001045 +22 +0.1781413760000099 +32 +-0.25192994995900836 +13 +-0.17814137600001045 +23 +0.1781413760000099 +33 +-0.25192994995900836 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.12596497497951514 +20 +0.21817773663864937 +30 +-0.2519299499590072 +11 +-0.21817773663864884 +21 +0.2181777366386538 +31 +-0.17814137600000332 +12 +-0.15427495708112787 +22 +0.2672120640000014 +32 +-0.17814137599999996 +13 +-0.15427495708112787 +23 +0.2672120640000014 +33 +-0.17814137599999996 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.24334564508112175 +20 +0.24334564508111778 +30 +-0.09221276165914039 +11 +-0.15427495708112787 +21 +0.2672120640000014 +31 +-0.17814137599999996 +12 +-0.21817773663864884 +22 +0.2181777366386538 +32 +-0.17814137600000332 +13 +-0.21817773663864884 +23 +0.2181777366386538 +33 +-0.17814137600000332 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.15427495708112787 +20 +0.2672120640000014 +30 +-0.17814137599999996 +11 +-0.24334564508112175 +21 +0.24334564508111778 +31 +-0.09221276165914039 +12 +-0.17207135580907917 +22 +0.2980363307885855 +32 +-0.0922127616591415 +13 +-0.17207135580907917 +23 +0.2980363307885855 +33 +-0.0922127616591415 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.24334564508112175 +20 +0.24334564508111778 +30 +-0.09221276165914039 +11 +-0.17814137600000818 +21 +0.30854991416224353 +31 +-6.688561244316844e-15 +12 +-0.17207135580907917 +22 +0.2980363307885855 +32 +-0.0922127616591415 +13 +-0.17207135580907917 +23 +0.2980363307885855 +33 +-0.0922127616591415 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.17814137600000818 +20 +0.30854991416224353 +30 +-6.688561244316844e-15 +11 +-0.24334564508112175 +21 +0.24334564508111778 +31 +-0.09221276165914039 +12 +-0.2519299499590143 +22 +0.2519299499590092 +32 +-3.337991716009964e-15 +13 +-0.2519299499590143 +23 +0.2519299499590092 +33 +-3.337991716009964e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-8.215650382226158e-15 +20 +1.1046719095020308e-14 +30 +-0.3562827520000011 +11 +-0.0798585941499399 +21 +0.04610638082957841 +31 +-0.3441427116181442 +12 +-0.06520426908112176 +22 +0.06520426908111898 +32 +-0.3441427116181431 +13 +-0.06520426908112176 +23 +0.06520426908111898 +33 +-0.3441427116181431 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.1259649749795107 +20 +0.12596497497950565 +30 +-0.30854991416223826 +11 +-0.0798585941499399 +21 +0.04610638082957841 +31 +-0.3441427116181442 +12 +-0.15427495708112454 +22 +0.08907068800001161 +32 +-0.3085499141622316 +13 +-0.15427495708112454 +23 +0.08907068800001161 +33 +-0.3085499141622316 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.0798585941499399 +20 +0.04610638082957841 +30 +-0.3441427116181442 +11 +-0.1259649749795107 +21 +0.12596497497950565 +31 +-0.30854991416223826 +12 +-0.06520426908112176 +22 +0.06520426908111898 +32 +-0.3441427116181431 +13 +-0.06520426908112176 +23 +0.06520426908111898 +33 +-0.3441427116181431 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.17814137600001045 +20 +0.1781413760000099 +30 +-0.25192994995900836 +11 +-0.15427495708112454 +21 +0.08907068800001161 +31 +-0.3085499141622316 +12 +-0.2181777366386477 +22 +0.12596497497951464 +32 +-0.2519299499590061 +13 +-0.2181777366386477 +23 +0.12596497497951464 +33 +-0.2519299499590061 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.15427495708112454 +20 +0.08907068800001161 +30 +-0.3085499141622316 +11 +-0.17814137600001045 +21 +0.1781413760000099 +31 +-0.25192994995900836 +12 +-0.1259649749795107 +22 +0.12596497497950565 +32 +-0.30854991416223826 +13 +-0.1259649749795107 +23 +0.12596497497950565 +33 +-0.30854991416223826 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.26721206400000763 +20 +0.15427495708112615 +30 +-0.17814137599999885 +11 +-0.17814137600001045 +21 +0.1781413760000099 +31 +-0.25192994995900836 +12 +-0.2181777366386477 +22 +0.12596497497951464 +32 +-0.2519299499590061 +13 +-0.2181777366386477 +23 +0.12596497497951464 +33 +-0.2519299499590061 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.17814137600001045 +20 +0.1781413760000099 +30 +-0.25192994995900836 +11 +-0.26721206400000763 +21 +0.15427495708112615 +31 +-0.17814137599999885 +12 +-0.21817773663864884 +22 +0.2181777366386538 +32 +-0.17814137600000332 +13 +-0.21817773663864884 +23 +0.2181777366386538 +33 +-0.17814137600000332 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.29803633078858505 +20 +0.17207135580907973 +30 +-0.09221276165914039 +11 +-0.21817773663864884 +21 +0.2181777366386538 +31 +-0.17814137600000332 +12 +-0.26721206400000763 +22 +0.15427495708112615 +32 +-0.17814137599999885 +13 +-0.26721206400000763 +23 +0.15427495708112615 +33 +-0.17814137599999885 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.21817773663864884 +20 +0.2181777366386538 +30 +-0.17814137600000332 +11 +-0.29803633078858505 +21 +0.17207135580907973 +31 +-0.09221276165914039 +12 +-0.24334564508112175 +22 +0.24334564508111778 +32 +-0.09221276165914039 +13 +-0.24334564508112175 +23 +0.24334564508111778 +33 +-0.09221276165914039 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.30854991416224087 +20 +0.17814137600001434 +30 +-1.1050199985371004e-15 +11 +-0.24334564508112175 +21 +0.24334564508111778 +31 +-0.09221276165914039 +12 +-0.29803633078858505 +22 +0.17207135580907973 +32 +-0.09221276165914039 +13 +-0.29803633078858505 +23 +0.17207135580907973 +33 +-0.09221276165914039 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.24334564508112175 +20 +0.24334564508111778 +30 +-0.09221276165914039 +11 +-0.30854991416224087 +21 +0.17814137600001434 +31 +-1.1050199985371004e-15 +12 +-0.2519299499590143 +22 +0.2519299499590092 +32 +-3.337991716009964e-15 +13 +-0.2519299499590143 +23 +0.2519299499590092 +33 +-3.337991716009964e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-8.215650382226158e-15 +20 +1.1046719095020308e-14 +30 +-0.3562827520000011 +11 +-0.08907068800000317 +21 +0.023866418918890242 +31 +-0.3441427116181431 +12 +-0.0798585941499399 +22 +0.04610638082957841 +32 +-0.3441427116181442 +13 +-0.0798585941499399 +23 +0.04610638082957841 +33 +-0.3441427116181442 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.15427495708112454 +20 +0.08907068800001161 +30 +-0.3085499141622316 +11 +-0.08907068800000317 +21 +0.023866418918890242 +31 +-0.3441427116181431 +12 +-0.17207135580908034 +22 +0.04610638082957169 +32 +-0.30854991416223604 +13 +-0.17207135580908034 +23 +0.04610638082957169 +33 +-0.30854991416223604 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.08907068800000317 +20 +0.023866418918890242 +30 +-0.3441427116181431 +11 +-0.15427495708112454 +21 +0.08907068800001161 +31 +-0.3085499141622316 +12 +-0.0798585941499399 +22 +0.04610638082957841 +32 +-0.3441427116181442 +13 +-0.0798585941499399 +23 +0.04610638082957841 +33 +-0.3441427116181442 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2181777366386477 +20 +0.12596497497951464 +30 +-0.2519299499590061 +11 +-0.17207135580908034 +21 +0.04610638082957169 +31 +-0.30854991416223604 +12 +-0.24334564508112397 +22 +0.06520426908111898 +32 +-0.251929949959005 +13 +-0.24334564508112397 +23 +0.06520426908111898 +33 +-0.251929949959005 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.17207135580908034 +20 +0.04610638082957169 +30 +-0.30854991416223604 +11 +-0.2181777366386477 +21 +0.12596497497951464 +31 +-0.2519299499590061 +12 +-0.15427495708112454 +22 +0.08907068800001161 +32 +-0.3085499141622316 +13 +-0.15427495708112454 +23 +0.08907068800001161 +33 +-0.3085499141622316 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.29803633078858727 +20 +0.079858594149945 +30 +-0.1781413760000011 +11 +-0.2181777366386477 +21 +0.12596497497951464 +31 +-0.2519299499590061 +12 +-0.24334564508112397 +22 +0.06520426908111898 +32 +-0.251929949959005 +13 +-0.24334564508112397 +23 +0.06520426908111898 +33 +-0.251929949959005 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2181777366386477 +20 +0.12596497497951464 +30 +-0.2519299499590061 +11 +-0.29803633078858727 +21 +0.079858594149945 +31 +-0.1781413760000011 +12 +-0.26721206400000763 +22 +0.15427495708112615 +32 +-0.17814137599999885 +13 +-0.26721206400000763 +23 +0.15427495708112615 +33 +-0.17814137599999885 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3324163330811223 +20 +0.08907068800000706 +30 +-0.09221276165914039 +11 +-0.26721206400000763 +21 +0.15427495708112615 +31 +-0.17814137599999885 +12 +-0.29803633078858727 +22 +0.079858594149945 +32 +-0.1781413760000011 +13 +-0.29803633078858727 +23 +0.079858594149945 +33 +-0.1781413760000011 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.26721206400000763 +20 +0.15427495708112615 +30 +-0.17814137599999885 +11 +-0.3324163330811223 +21 +0.08907068800000706 +31 +-0.09221276165914039 +12 +-0.29803633078858505 +22 +0.17207135580907973 +32 +-0.09221276165914039 +13 +-0.29803633078858505 +23 +0.17207135580907973 +33 +-0.09221276165914039 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3441427116181502 +20 +0.09221276165915027 +30 +-1.1082712068578987e-15 +11 +-0.29803633078858505 +21 +0.17207135580907973 +31 +-0.09221276165914039 +12 +-0.3324163330811223 +22 +0.08907068800000706 +32 +-0.09221276165914039 +13 +-0.3324163330811223 +23 +0.08907068800000706 +33 +-0.09221276165914039 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.29803633078858505 +20 +0.17207135580907973 +30 +-0.09221276165914039 +11 +-0.3441427116181502 +21 +0.09221276165915027 +31 +-1.1082712068578987e-15 +12 +-0.30854991416224087 +22 +0.17814137600001434 +32 +-1.1050199985371004e-15 +13 +-0.30854991416224087 +23 +0.17814137600001434 +33 +-1.1050199985371004e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-8.215650382226158e-15 +20 +1.1046719095020308e-14 +30 +-0.3562827520000011 +11 +-0.09221276165914521 +21 +8.826273045769994e-15 +31 +-0.34414271161814647 +12 +-0.08907068800000317 +22 +0.023866418918890242 +32 +-0.3441427116181431 +13 +-0.08907068800000317 +23 +0.023866418918890242 +33 +-0.3441427116181431 +70 +0 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.17207135580908034 +20 +0.04610638082957169 +30 +-0.30854991416223604 +11 +-0.09221276165914521 +21 +8.826273045769994e-15 +31 +-0.34414271161814647 +12 +-0.17814137600000707 +22 +1.3322676295501878e-14 +32 +-0.30854991416223604 +13 +-0.17814137600000707 +23 +1.3322676295501878e-14 +33 +-0.30854991416223604 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.09221276165914521 +20 +8.826273045769994e-15 +30 +-0.34414271161814647 +11 +-0.17207135580908034 +21 +0.04610638082957169 +31 +-0.30854991416223604 +12 +-0.08907068800000317 +22 +0.023866418918890242 +32 +-0.3441427116181431 +13 +-0.08907068800000317 +23 +0.023866418918890242 +33 +-0.3441427116181431 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.24334564508112397 +20 +0.06520426908111898 +30 +-0.251929949959005 +11 +-0.17814137600000707 +21 +1.3322676295501878e-14 +31 +-0.30854991416223604 +12 +-0.2519299499590165 +22 +1.3322676295501878e-14 +32 +-0.251929949959005 +13 +-0.2519299499590165 +23 +1.3322676295501878e-14 +33 +-0.251929949959005 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.17814137600000707 +20 +1.3322676295501878e-14 +30 +-0.30854991416223604 +11 +-0.24334564508112397 +21 +0.06520426908111898 +31 +-0.251929949959005 +12 +-0.17207135580908034 +22 +0.04610638082957169 +32 +-0.30854991416223604 +13 +-0.17207135580908034 +23 +0.04610638082957169 +33 +-0.30854991416223604 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.29803633078858727 +20 +0.079858594149945 +30 +-0.1781413760000011 +11 +-0.2519299499590165 +21 +1.3322676295501878e-14 +31 +-0.251929949959005 +12 +-0.30854991416223865 +22 +6.6058269965196814e-15 +32 +-0.178141376 +13 +-0.30854991416223865 +23 +6.6058269965196814e-15 +33 +-0.178141376 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2519299499590165 +20 +1.3322676295501878e-14 +30 +-0.251929949959005 +11 +-0.29803633078858727 +21 +0.079858594149945 +31 +-0.1781413760000011 +12 +-0.24334564508112397 +22 +0.06520426908111898 +32 +-0.251929949959005 +13 +-0.24334564508112397 +23 +0.06520426908111898 +33 +-0.251929949959005 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3441427116181536 +20 +1.3322676295501878e-14 +30 +-0.09221276165913815 +11 +-0.29803633078858727 +21 +0.079858594149945 +31 +-0.1781413760000011 +12 +-0.30854991416223865 +22 +6.6058269965196814e-15 +32 +-0.178141376 +13 +-0.30854991416223865 +23 +6.6058269965196814e-15 +33 +-0.178141376 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.29803633078858727 +20 +0.079858594149945 +30 +-0.1781413760000011 +11 +-0.3441427116181536 +21 +1.3322676295501878e-14 +31 +-0.09221276165913815 +12 +-0.3324163330811223 +22 +0.08907068800000706 +32 +-0.09221276165914039 +13 +-0.3324163330811223 +23 +0.08907068800000706 +33 +-0.09221276165914039 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3441427116181502 +20 +0.09221276165915027 +30 +-1.1082712068578987e-15 +11 +-0.3441427116181536 +21 +1.3322676295501878e-14 +31 +-0.09221276165913815 +12 +-0.35628275200001047 +22 +1.3322676295501878e-14 +32 +1.1283270246018505e-15 +13 +-0.35628275200001047 +23 +1.3322676295501878e-14 +33 +1.1283270246018505e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3441427116181536 +20 +1.3322676295501878e-14 +30 +-0.09221276165913815 +11 +-0.3441427116181502 +21 +0.09221276165915027 +31 +-1.1082712068578987e-15 +12 +-0.3324163330811223 +22 +0.08907068800000706 +32 +-0.09221276165914039 +13 +-0.3324163330811223 +23 +0.08907068800000706 +33 +-0.09221276165914039 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.4349737833450727 +20 +0.11655087397603592 +30 +-1.1157228913145438e-15 +11 +-0.35628275200001047 +21 +1.3322676295501878e-14 +31 +1.1283270246018505e-15 +12 +-0.4503179970000113 +22 +8.826273045769994e-15 +32 +-4.474288446697922e-15 +13 +-0.4503179970000113 +23 +8.826273045769994e-15 +33 +-4.474288446697922e-15 +70 +1 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.35628275200001047 +20 +1.3322676295501878e-14 +30 +1.1283270246018505e-15 +11 +-0.4349737833450727 +21 +0.11655087397603592 +31 +-1.1157228913145438e-15 +12 +-0.38998682518333744 +22 +0.22515899850000798 +32 +-1.1116135775444189e-15 +13 +-0.38998682518333744 +23 +0.22515899850000798 +33 +-1.1116135775444189e-15 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.35628275200001047 +20 +1.3322676295501878e-14 +30 +1.1283270246018505e-15 +11 +-0.38998682518333744 +21 +0.22515899850000798 +31 +-1.1116135775444189e-15 +12 +-0.3184229093690556 +22 +0.31842290936904827 +32 +1.132572953045013e-15 +13 +-0.3184229093690556 +23 +0.31842290936904827 +33 +1.132572953045013e-15 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.35628275200001047 +20 +1.3322676295501878e-14 +30 +1.1283270246018505e-15 +11 +-0.3184229093690556 +21 +0.31842290936904827 +31 +1.132572953045013e-15 +12 +-0.3441427116181502 +22 +0.09221276165915027 +32 +-1.1082712068578987e-15 +13 +-0.3441427116181502 +23 +0.09221276165915027 +33 +-1.1082712068578987e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.3441427116181502 +20 +0.09221276165915027 +30 +-1.1082712068578987e-15 +11 +-0.3184229093690556 +21 +0.31842290936904827 +31 +1.132572953045013e-15 +12 +-0.30854991416224087 +22 +0.17814137600001434 +32 +-1.1050199985371004e-15 +13 +-0.30854991416224087 +23 +0.17814137600001434 +33 +-1.1050199985371004e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.30854991416224087 +20 +0.17814137600001434 +30 +-1.1050199985371004e-15 +11 +-0.3184229093690556 +21 +0.31842290936904827 +31 +1.132572953045013e-15 +12 +-0.2251589985000131 +22 +0.38998682518332894 +32 +-1.0973661868614674e-15 +13 +-0.2251589985000131 +23 +0.38998682518332894 +33 +-1.0973661868614674e-15 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.30854991416224087 +20 +0.17814137600001434 +30 +-1.1050199985371004e-15 +11 +-0.2251589985000131 +21 +0.38998682518332894 +31 +-1.0973661868614674e-15 +12 +-0.2519299499590143 +22 +0.2519299499590092 +32 +-3.337991716009964e-15 +13 +-0.2519299499590143 +23 +0.2519299499590092 +33 +-3.337991716009964e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.2519299499590143 +20 +0.2519299499590092 +30 +-3.337991716009964e-15 +11 +-0.2251589985000131 +21 +0.38998682518332894 +31 +-1.0973661868614674e-15 +12 +-0.17814137600000818 +22 +0.30854991416224353 +32 +-6.688561244316844e-15 +13 +-0.17814137600000818 +23 +0.30854991416224353 +33 +-6.688561244316844e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.17814137600000818 +20 +0.30854991416224353 +30 +-6.688561244316844e-15 +11 +-0.2251589985000131 +21 +0.38998682518332894 +31 +-1.0973661868614674e-15 +12 +-0.11655087397602859 +22 +0.4349737833450731 +32 +-2.2071617463537632e-15 +13 +-0.11655087397602859 +23 +0.4349737833450731 +33 +-2.2071617463537632e-15 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.17814137600000818 +20 +0.30854991416224353 +30 +-6.688561244316844e-15 +11 +-0.11655087397602859 +21 +0.4349737833450731 +31 +-2.2071617463537632e-15 +12 +-0.0922127616591486 +22 +0.34414271161815735 +32 +-2.205457581532869e-15 +13 +-0.0922127616591486 +23 +0.34414271161815735 +33 +-2.205457581532869e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.0922127616591486 +20 +0.34414271161815735 +30 +-2.205457581532869e-15 +11 +-0.11655087397602859 +21 +0.4349737833450731 +31 +-2.2071617463537632e-15 +12 +-7.049916206369744e-15 +22 +0.45031799700000497 +32 +1.159449649898216e-15 +13 +-7.049916206369744e-15 +23 +0.45031799700000497 +33 +1.159449649898216e-15 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-0.0922127616591486 +20 +0.34414271161815735 +30 +-2.205457581532869e-15 +11 +-7.049916206369744e-15 +21 +0.45031799700000497 +31 +1.159449649898216e-15 +12 +-7.049916206369744e-15 +22 +0.35628275200001536 +32 +-1.0788020009459382e-15 +13 +-7.049916206369744e-15 +23 +0.35628275200001536 +33 +-1.0788020009459382e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +0.35628275200001536 +30 +-1.0788020009459382e-15 +11 +-7.049916206369744e-15 +21 +0.45031799700000497 +31 +1.159449649898216e-15 +12 +0.11655087397601116 +22 +0.4349737833450753 +32 +1.1690664734545857e-15 +13 +0.11655087397601116 +23 +0.4349737833450753 +33 +1.1690664734545857e-15 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +0.35628275200001536 +30 +-1.0788020009459382e-15 +11 +0.11655087397601116 +21 +0.4349737833450753 +31 +1.1690664734545857e-15 +12 +0.09221276165912884 +22 +0.34414271161815735 +32 +4.776934118879337e-17 +13 +0.09221276165912884 +23 +0.34414271161815735 +33 +4.776934118879337e-17 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.09221276165912884 +20 +0.34414271161815735 +30 +4.776934118879337e-17 +11 +0.11655087397601116 +21 +0.4349737833450753 +31 +1.1690664734545857e-15 +12 +0.1781413759999918 +22 +0.30854991416223687 +32 +-1.064187472047551e-15 +13 +0.1781413759999918 +23 +0.30854991416223687 +33 +-1.064187472047551e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.1781413759999918 +20 +0.30854991416223687 +30 +-1.064187472047551e-15 +11 +0.11655087397601116 +21 +0.4349737833450753 +31 +1.1690664734545857e-15 +12 +0.22515899849998888 +22 +0.3899868251833378 +32 +-3.297929346592473e-15 +13 +0.22515899849998888 +23 +0.3899868251833378 +33 +-3.297929346592473e-15 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.1781413759999918 +20 +0.30854991416223687 +30 +-1.064187472047551e-15 +11 +0.22515899849998888 +21 +0.3899868251833378 +31 +-3.297929346592473e-15 +12 +0.25192994995899565 +22 +0.2519299499590114 +32 +1.1796636210961499e-15 +13 +0.25192994995899565 +23 +0.2519299499590114 +33 +1.1796636210961499e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.25192994995899565 +20 +0.2519299499590114 +30 +1.1796636210961499e-15 +11 +0.22515899849998888 +21 +0.3899868251833378 +31 +-3.297929346592473e-15 +12 +0.31842290936903583 +22 +0.3184229093690527 +32 +-3.290439660368124e-15 +13 +0.31842290936903583 +23 +0.3184229093690527 +33 +-3.290439660368124e-15 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.25192994995899565 +20 +0.2519299499590114 +30 +1.1796636210961499e-15 +11 +0.31842290936903583 +21 +0.3184229093690527 +31 +-3.290439660368124e-15 +12 +0.30854991416222677 +22 +0.17814137600001212 +32 +-3.291745508012748e-15 +13 +0.30854991416222677 +23 +0.17814137600001212 +33 +-3.291745508012748e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.30854991416222677 +20 +0.17814137600001212 +30 +-3.291745508012748e-15 +11 +0.31842290936903583 +21 +0.3184229093690527 +31 +-3.290439660368124e-15 +12 +0.34414271161813714 +22 +0.0922127616591436 +32 +-1.0511651486801586e-15 +13 +0.34414271161813714 +23 +0.0922127616591436 +33 +-1.0511651486801586e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.34414271161813714 +20 +0.0922127616591436 +30 +-1.0511651486801586e-15 +11 +0.31842290936903583 +21 +0.3184229093690527 +31 +-3.290439660368124e-15 +12 +0.38998682518331773 +22 +0.22515899850001475 +32 +7.206242211372932e-17 +13 +0.38998682518331773 +23 +0.22515899850001475 +33 +7.206242211372932e-17 +70 +13 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.34414271161813714 +20 +0.0922127616591436 +30 +-1.0511651486801586e-15 +11 +0.38998682518331773 +21 +0.22515899850001475 +31 +7.206242211372932e-17 +12 +0.3562827519999918 +22 +4.3298697960381105e-15 +32 +-1.0504778341596352e-15 +13 +0.3562827519999918 +23 +4.3298697960381105e-15 +33 +-1.0504778341596352e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.3562827519999918 +20 +4.3298697960381105e-15 +30 +-1.0504778341596352e-15 +11 +0.38998682518331773 +21 +0.22515899850001475 +31 +7.206242211372932e-17 +12 +0.450317996999995 +22 +1.1046719095020308e-14 +32 +-3.2806012647849043e-15 +13 +0.450317996999995 +23 +1.1046719095020308e-14 +33 +-3.2806012647849043e-15 +70 +3 + 0 +3DFACE + 8 +thumb metacarpal +10 +0.450317996999995 +20 +1.1046719095020308e-14 +30 +-3.2806012647849043e-15 +11 +0.38998682518331773 +21 +0.22515899850001475 +31 +7.206242211372932e-17 +12 +0.434973783345053 +22 +0.11655087397603137 +32 +-4.400432685469344e-15 +13 +0.434973783345053 +23 +0.11655087397603137 +33 +-4.400432685469344e-15 +70 +1 + 0 +LINE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +1.3322676295501878e-14 +30 +-1.0800381050538982e-15 +11 +-0.03937000000001045 +21 +1.1046719095020308e-14 +31 +-2.2022672779789954e-15 + 0 +LINE + 8 +thumb metacarpal +10 +-1.0436096431476471e-14 +20 +8.826273045769994e-15 +30 +-0.039400000000002454 +11 +-7.049916206369744e-15 +21 +1.3322676295501878e-14 +31 +-1.0800381050538982e-15 + 0 +LINE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +1.3322676295501878e-14 +30 +-1.0800381050538982e-15 +11 +-7.049916206369744e-15 +21 +1.3322676295501878e-14 +31 +0.03939999999999806 + 0 +LINE + 8 +thumb metacarpal +10 +-7.049916206369744e-15 +20 +1.3322676295501878e-14 +30 +-1.0800381050538982e-15 +11 +-1.0436096431476471e-14 +21 +0.03936999999999541 +31 +-2.198864213202406e-15 + 0 +LINE + 8 +thumb metacarpal +10 +0.03936999999998847 +20 +2.1094237467877974e-15 +30 +4.21910678711987e-17 +11 +-7.049916206369744e-15 +21 +1.3322676295501878e-14 +31 +-1.0800381050538982e-15 + 0 +3DFACE + 8 +thumb proximal +10 +-0.35328475047387764 +20 +0.09466236358770014 +30 +0.3532847504738821 +11 +-0.3554382812124002 +21 +0.07106866747815194 +31 +0.3554382812124069 +12 +-0.3358093605615792 +22 +0.08997984697328248 +32 +0.4416633977968423 +13 +-0.3358093605615792 +23 +0.08997984697328248 +33 +0.4416633977968423 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +0.17382771607408792 +20 +0.3010784360039525 +30 +0.44166339779684116 +11 +0.3097606107421021 +21 +0.309760610742088 +31 +-1.1769864756914841e-14 +12 +0.2190338284002274 +22 +0.37937771936549897 +32 +-1.1771797019837378e-14 +13 +0.2190338284002274 +23 +0.37937771936549897 +33 +-1.1771797019837378e-14 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +-0.17382771607406877 +20 +0.3010784360039503 +30 +0.4416633977968423 +11 +-0.13135838013328194 +21 +0.3868373733924963 +31 +0.13135838013328868 +12 +-0.1986964122260401 +22 +0.3441522812571604 +32 +0.19869641222604567 +13 +-0.1986964122260401 +23 +0.3441522812571604 +33 +0.19869641222604567 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +0.3793777193655142 +20 +0.21903382840021673 +30 +-1.3445790633259696e-14 +11 +0.3010784360039633 +21 +0.17382771607407282 +31 +0.44166339779684116 +12 +0.4231408633654961 +22 +0.11338025262338508 +32 +-1.1764414107035652e-14 +13 +0.4231408633654961 +23 +0.11338025262338508 +33 +-1.1764414107035652e-14 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +-0.08997984697327954 +20 +0.3358093605615809 +30 +0.44166339779684116 +11 +1.071365218763276e-14 +21 +0.4380676568004345 +31 +-1.2892388693108735e-14 +12 +-0.1076753495876358 +22 +0.40184987538383093 +32 +0.10767534958764315 +13 +-0.1076753495876358 +23 +0.40184987538383093 +33 +0.10767534958764315 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +0.08997984697329425 +20 +0.335809360561582 +30 +0.4416633977968423 +11 +0.2190338284002274 +21 +0.37937771936549897 +31 +-1.1771797019837378e-14 +12 +0.11338025262340018 +22 +0.42314086336547535 +32 +-1.1213530340952345e-14 +13 +0.11338025262340018 +23 +0.42314086336547535 +33 +-1.1213530340952345e-14 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +-0.27059219435790804 +20 +0.2705921943579131 +30 +0.2705921943579153 +11 +-0.2912967185332681 +21 +0.23670677844559634 +31 +0.29129671853327366 +12 +-0.24582951358828664 +22 +0.24582951358829058 +32 +0.44166339779684116 +13 +-0.24582951358828664 +23 +0.24582951358829058 +33 +0.44166339779684116 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +-0.24582951358828664 +20 +0.24582951358829058 +30 +0.44166339779684116 +11 +-0.2331808958459863 +21 +0.30886952145483487 +31 +0.2331808958459941 +12 +-0.27059219435790804 +22 +0.2705921943579131 +32 +0.2705921943579153 +13 +-0.27059219435790804 +23 +0.2705921943579131 +33 +0.2705921943579153 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3222486125544444 +20 +0.18605032320429132 +30 +0.3222486125544489 +11 +-0.331519017082783 +21 +0.15875300428965727 +31 +0.33151901708278747 +12 +-0.30107843600394635 +22 +0.17382771607406827 +32 +0.44166339779684116 +13 +-0.30107843600394635 +23 +0.17382771607406827 +33 +0.44166339779684116 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +0.4231408633654961 +20 +0.11338025262338508 +30 +-1.1764414107035652e-14 +11 +0.3358093605615961 +21 +0.08997984697328582 +31 +0.44166339779684116 +12 +0.43806765680045084 +22 +-2.220446049250313e-15 +32 +-5.71640170110588e-16 +13 +0.43806765680045084 +23 +-2.220446049250313e-15 +33 +-5.71640170110588e-16 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +0.3097606107421021 +20 +0.309760610742088 +30 +-1.1769864756914841e-14 +11 +0.24582951358830357 +21 +0.2458295135882939 +31 +0.44166339779684116 +12 +0.3793777193655142 +22 +0.21903382840021673 +32 +-1.3445790633259696e-14 +13 +0.3793777193655142 +23 +0.21903382840021673 +33 +-1.3445790633259696e-14 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +8.493206138382448e-15 +20 +0.3476554321481467 +30 +0.44166339779684116 +11 +0.11338025262340018 +21 +0.42314086336547535 +31 +-1.1213530340952345e-14 +12 +1.071365218763276e-14 +22 +0.4380676568004345 +32 +-1.2892388693108735e-14 +13 +1.071365218763276e-14 +23 +0.4380676568004345 +33 +-1.2892388693108735e-14 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +-0.17382771607406877 +20 +0.3010784360039503 +30 +0.4416633977968423 +11 +-0.0899798469732796 +21 +0.3358093605615798 +31 +0.768373308495885 +12 +-0.08997984697327954 +22 +0.3358093605615809 +32 +0.44166339779684116 +13 +-0.08997984697327954 +23 +0.3358093605615809 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.0899798469732796 +20 +0.3358093605615798 +30 +0.768373308495885 +11 +-0.17382771607406877 +21 +0.3010784360039503 +31 +0.4416633977968423 +12 +-0.17382771607407105 +22 +0.3010784360039514 +32 +0.7683733084958873 +13 +-0.17382771607407105 +23 +0.3010784360039514 +33 +0.7683733084958873 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.08997984697329425 +20 +0.335809360561582 +30 +0.4416633977968423 +11 +0.1738277160740857 +21 +0.3010784360039536 +31 +0.7683733084958873 +12 +0.17382771607408792 +22 +0.3010784360039525 +32 +0.44166339779684116 +13 +0.17382771607408792 +23 +0.3010784360039525 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.1738277160740857 +20 +0.3010784360039536 +30 +0.7683733084958873 +11 +0.08997984697329425 +21 +0.335809360561582 +31 +0.4416633977968423 +12 +0.08997984697329425 +22 +0.3358093605615809 +32 +0.7683733084958861 +13 +0.08997984697329425 +23 +0.3358093605615809 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.11108623083123143 +20 +0.4145794574834358 +30 +1.2100367062927357 +11 +0.1738277160740857 +21 +0.3010784360039536 +31 +0.7683733084958873 +12 +0.08997984697329425 +22 +0.3358093605615809 +32 +0.7683733084958861 +13 +0.08997984697329425 +23 +0.3358093605615809 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.1738277160740857 +20 +0.3010784360039536 +30 +0.7683733084958873 +11 +0.11108623083123143 +21 +0.4145794574834358 +31 +1.2100367062927357 +12 +0.21460211860998019 +22 +0.3717017728443855 +32 +1.210036706292738 +13 +0.21460211860998019 +23 +0.3717017728443855 +33 +1.210036706292738 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.30107843600394635 +20 +0.17382771607406938 +30 +0.7683733084958861 +11 +-0.24582951358828664 +21 +0.24582951358829058 +31 +0.44166339779684116 +12 +-0.30107843600394635 +22 +0.17382771607406827 +32 +0.44166339779684116 +13 +-0.30107843600394635 +23 +0.17382771607406827 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.24582951358828664 +20 +0.24582951358829058 +30 +0.44166339779684116 +11 +-0.30107843600394635 +21 +0.17382771607406938 +31 +0.7683733084958861 +12 +-0.24582951358828667 +22 +0.24582951358829058 +32 +0.7683733084958861 +13 +-0.24582951358828667 +23 +0.24582951358829058 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.0899798469732796 +20 +0.3358093605615798 +30 +0.768373308495885 +11 +8.493206138382448e-15 +21 +0.3476554321481467 +31 +0.44166339779684116 +12 +-0.08997984697327954 +22 +0.3358093605615809 +32 +0.44166339779684116 +13 +-0.08997984697327954 +23 +0.3358093605615809 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +8.493206138382448e-15 +20 +0.3476554321481467 +30 +0.44166339779684116 +11 +-0.0899798469732796 +21 +0.3358093605615798 +31 +0.768373308495885 +12 +8.43769498715119e-15 +22 +0.3476554321481467 +32 +0.7683733084958861 +13 +8.43769498715119e-15 +23 +0.3476554321481467 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.24582951358830357 +20 +0.2458295135882939 +30 +0.44166339779684116 +11 +0.3010784360039655 +21 +0.17382771607407282 +31 +0.7683733084958861 +12 +0.3010784360039633 +22 +0.17382771607407282 +32 +0.44166339779684116 +13 +0.3010784360039633 +23 +0.17382771607407282 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3010784360039655 +20 +0.17382771607407282 +30 +0.7683733084958861 +11 +0.24582951358830357 +21 +0.2458295135882939 +31 +0.44166339779684116 +12 +0.2458295135883058 +22 +0.2458295135882928 +32 +0.7683733084958873 +13 +0.2458295135883058 +23 +0.2458295135882928 +33 +0.7683733084958873 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.2458295135883058 +20 +0.2458295135882928 +30 +0.7683733084958873 +11 +0.3717017728444028 +21 +0.2146021186099673 +31 +1.2100367062927369 +12 +0.3010784360039655 +22 +0.17382771607407282 +32 +0.7683733084958861 +13 +0.3010784360039655 +23 +0.17382771607407282 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3717017728444028 +20 +0.2146021186099673 +30 +1.2100367062927369 +11 +0.2458295135883058 +21 +0.2458295135882928 +31 +0.7683733084958873 +12 +0.30349322665223116 +22 +0.30349322665221606 +32 +1.2100367062927357 +13 +0.30349322665223116 +23 +0.30349322665221606 +33 +1.2100367062927357 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.24582951358828667 +20 +0.24582951358829058 +30 +0.7683733084958861 +11 +-0.17382771607406877 +21 +0.3010784360039503 +31 +0.4416633977968423 +12 +-0.24582951358828664 +22 +0.24582951358829058 +32 +0.44166339779684116 +13 +-0.24582951358828664 +23 +0.24582951358829058 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.17382771607406877 +20 +0.3010784360039503 +30 +0.4416633977968423 +11 +-0.24582951358828667 +21 +0.24582951358829058 +31 +0.7683733084958861 +12 +-0.17382771607407105 +22 +0.3010784360039514 +32 +0.7683733084958873 +13 +-0.17382771607407105 +23 +0.3010784360039514 +33 +0.7683733084958873 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +8.43769498715119e-15 +20 +0.3476554321481467 +30 +0.7683733084958861 +11 +0.08997984697329425 +21 +0.335809360561582 +31 +0.4416633977968423 +12 +8.493206138382448e-15 +22 +0.3476554321481467 +32 +0.44166339779684116 +13 +8.493206138382448e-15 +23 +0.3476554321481467 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.08997984697329425 +20 +0.335809360561582 +30 +0.4416633977968423 +11 +8.43769498715119e-15 +21 +0.3476554321481467 +31 +0.7683733084958861 +12 +0.08997984697329425 +22 +0.3358093605615809 +32 +0.7683733084958861 +13 +0.08997984697329425 +23 +0.3358093605615809 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +1.0658141036401503e-14 +20 +0.4292042372199358 +30 +1.2100367062927369 +11 +0.08997984697329425 +21 +0.3358093605615809 +31 +0.7683733084958861 +12 +8.43769498715119e-15 +22 +0.3476554321481467 +32 +0.7683733084958861 +13 +8.43769498715119e-15 +23 +0.3476554321481467 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.08997984697329425 +20 +0.3358093605615809 +30 +0.7683733084958861 +11 +1.0658141036401503e-14 +21 +0.4292042372199358 +31 +1.2100367062927369 +12 +0.11108623083123143 +22 +0.4145794574834358 +32 +1.2100367062927357 +13 +0.11108623083123143 +23 +0.4145794574834358 +33 +1.2100367062927357 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.30107843600394635 +20 +0.17382771607406938 +30 +0.7683733084958861 +11 +-0.3358093605615792 +21 +0.08997984697328248 +31 +0.4416633977968423 +12 +-0.3358093605615814 +22 +0.08997984697328248 +32 +0.7683733084958861 +13 +-0.3358093605615814 +23 +0.08997984697328248 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3358093605615792 +20 +0.08997984697328248 +30 +0.4416633977968423 +11 +-0.30107843600394635 +21 +0.17382771607406938 +31 +0.7683733084958861 +12 +-0.30107843600394635 +22 +0.17382771607406827 +32 +0.44166339779684116 +13 +-0.30107843600394635 +23 +0.17382771607406827 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.1738277160740857 +20 +0.3010784360039536 +30 +0.7683733084958873 +11 +0.24582951358830357 +21 +0.2458295135882939 +31 +0.44166339779684116 +12 +0.17382771607408792 +22 +0.3010784360039525 +32 +0.44166339779684116 +13 +0.17382771607408792 +23 +0.3010784360039525 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.24582951358830357 +20 +0.2458295135882939 +30 +0.44166339779684116 +11 +0.1738277160740857 +21 +0.3010784360039536 +31 +0.7683733084958873 +12 +0.2458295135883058 +22 +0.2458295135882928 +32 +0.7683733084958873 +13 +0.2458295135883058 +23 +0.2458295135882928 +33 +0.7683733084958873 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.21460211860998019 +20 +0.3717017728443855 +30 +1.210036706292738 +11 +0.2458295135883058 +21 +0.2458295135882928 +31 +0.7683733084958873 +12 +0.1738277160740857 +22 +0.3010784360039536 +32 +0.7683733084958873 +13 +0.1738277160740857 +23 +0.3010784360039536 +33 +0.7683733084958873 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.2458295135883058 +20 +0.2458295135882928 +30 +0.7683733084958873 +11 +0.21460211860998019 +21 +0.3717017728443855 +31 +1.210036706292738 +12 +0.30349322665223116 +22 +0.30349322665221606 +32 +1.2100367062927357 +13 +0.30349322665223116 +23 +0.30349322665221606 +33 +1.2100367062927357 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3358093605615814 +20 +0.08997984697328248 +30 +0.7683733084958861 +11 +-0.3476554321481416 +21 +-5.6066262743570405e-15 +31 +0.4670991950407831 +12 +-0.3476554321481416 +22 +-7.827072323607354e-15 +32 +0.7683733084958861 +13 +-0.3476554321481416 +23 +-7.827072323607354e-15 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3476554321481416 +20 +-5.6066262743570405e-15 +30 +0.4670991950407831 +11 +-0.3358093605615814 +21 +0.08997984697328248 +31 +0.7683733084958861 +12 +-0.3476554321481416 +22 +-5.6066262743570405e-15 +32 +0.4416633977968423 +13 +-0.3476554321481416 +23 +-5.6066262743570405e-15 +33 +0.4416633977968423 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3476554321481416 +20 +-5.6066262743570405e-15 +30 +0.4416633977968423 +11 +-0.3358093605615814 +21 +0.08997984697328248 +31 +0.7683733084958861 +12 +-0.3358093605615792 +22 +0.08997984697328248 +32 +0.4416633977968423 +13 +-0.3358093605615792 +23 +0.08997984697328248 +33 +0.4416633977968423 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3010784360039633 +20 +0.17382771607407282 +30 +0.44166339779684116 +11 +0.3358093605615983 +21 +0.08997984697328582 +31 +0.7683733084958873 +12 +0.3358093605615961 +22 +0.08997984697328582 +32 +0.44166339779684116 +13 +0.3358093605615961 +23 +0.08997984697328582 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3358093605615983 +20 +0.08997984697328582 +30 +0.7683733084958873 +11 +0.3010784360039633 +21 +0.17382771607407282 +31 +0.44166339779684116 +12 +0.3010784360039655 +22 +0.17382771607407282 +32 +0.7683733084958861 +13 +0.3010784360039655 +23 +0.17382771607407282 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3010784360039655 +20 +0.17382771607407282 +30 +0.7683733084958861 +11 +0.41457945748344976 +21 +0.11108623083121855 +31 +1.2100367062927369 +12 +0.3358093605615983 +22 +0.08997984697328582 +32 +0.7683733084958873 +13 +0.3358093605615983 +23 +0.08997984697328582 +33 +0.7683733084958873 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.41457945748344976 +20 +0.11108623083121855 +30 +1.2100367062927369 +11 +0.3010784360039655 +21 +0.17382771607407282 +31 +0.7683733084958861 +12 +0.3717017728444028 +22 +0.2146021186099673 +32 +1.2100367062927369 +13 +0.3717017728444028 +23 +0.2146021186099673 +33 +1.2100367062927369 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.34765543214816524 +20 +-2.220446049250313e-15 +30 +0.4416633977968546 +11 +0.3358093605615983 +21 +0.08997984697328582 +31 +0.7683733084958873 +12 +0.34765543214816524 +22 +-3.3306690738754696e-15 +32 +0.7683733084958906 +13 +0.34765543214816524 +23 +-3.3306690738754696e-15 +33 +0.7683733084958906 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3358093605615983 +20 +0.08997984697328582 +30 +0.7683733084958873 +11 +0.34765543214816524 +21 +-2.220446049250313e-15 +31 +0.4416633977968546 +12 +0.3358093605615961 +22 +0.08997984697328582 +32 +0.44166339779684116 +13 +0.3358093605615961 +23 +0.08997984697328582 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3358093605615983 +20 +0.08997984697328582 +30 +0.7683733084958873 +11 +0.429204237219952 +21 +-1.1102230246251565e-15 +31 +1.210036706292738 +12 +0.34765543214816524 +22 +-3.3306690738754696e-15 +32 +0.7683733084958906 +13 +0.34765543214816524 +23 +-3.3306690738754696e-15 +33 +0.7683733084958906 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.429204237219952 +20 +-1.1102230246251565e-15 +30 +1.210036706292738 +11 +0.3358093605615983 +21 +0.08997984697328582 +31 +0.7683733084958873 +12 +0.41457945748344976 +22 +0.11108623083121855 +32 +1.2100367062927369 +13 +0.41457945748344976 +23 +0.11108623083121855 +33 +1.2100367062927369 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3010784360039633 +20 +0.17382771607407282 +30 +0.44166339779684116 +11 +0.3358093605615961 +21 +0.08997984697328582 +31 +0.44166339779684116 +12 +0.4231408633654961 +22 +0.11338025262338508 +32 +-1.1764414107035652e-14 +13 +0.4231408633654961 +23 +0.11338025262338508 +33 +-1.1764414107035652e-14 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +0.08997984697329425 +20 +0.335809360561582 +30 +0.4416633977968423 +11 +0.11338025262340018 +21 +0.42314086336547535 +31 +-1.1213530340952345e-14 +12 +8.493206138382448e-15 +22 +0.3476554321481467 +32 +0.44166339779684116 +13 +8.493206138382448e-15 +23 +0.3476554321481467 +33 +0.44166339779684116 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3358093605615792 +20 +0.08997984697328248 +30 +0.4416633977968423 +11 +-0.3632432353943587 +21 +-4.496403249731884e-15 +31 +0.3632432353943699 +12 +-0.3476554321481416 +22 +-5.6066262743570405e-15 +32 +0.4416633977968423 +13 +-0.3476554321481416 +23 +-5.6066262743570405e-15 +33 +0.4416633977968423 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3632432353943587 +20 +-4.496403249731884e-15 +30 +0.3632432353943699 +11 +-0.3358093605615792 +21 +0.08997984697328248 +31 +0.4416633977968423 +12 +-0.3554382812124002 +22 +0.07106866747815194 +32 +0.3554382812124069 +13 +-0.3554382812124002 +23 +0.07106866747815194 +33 +0.3554382812124069 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.24582951358828664 +20 +0.24582951358829058 +30 +0.44166339779684116 +11 +-0.3222486125544444 +21 +0.18605032320429132 +31 +0.3222486125544489 +12 +-0.30107843600394635 +22 +0.17382771607406827 +32 +0.44166339779684116 +13 +-0.30107843600394635 +23 +0.17382771607406827 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3222486125544444 +20 +0.18605032320429132 +30 +0.3222486125544489 +11 +-0.24582951358828664 +21 +0.24582951358829058 +31 +0.44166339779684116 +12 +-0.2959784921776627 +22 +0.2290444991387141 +32 +0.2959784921776672 +13 +-0.2959784921776627 +23 +0.2290444991387141 +33 +0.2959784921776672 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +-0.2959784921776627 +20 +0.2290444991387141 +30 +0.2959784921776672 +11 +-0.24582951358828664 +21 +0.24582951358829058 +31 +0.44166339779684116 +12 +-0.2912967185332681 +22 +0.23670677844559634 +32 +0.29129671853327366 +13 +-0.2912967185332681 +23 +0.23670677844559634 +33 +0.29129671853327366 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.2331808958459863 +20 +0.30886952145483487 +30 +0.2331808958459941 +11 +-0.17382771607406877 +21 +0.3010784360039503 +31 +0.4416633977968423 +12 +-0.1986964122260401 +22 +0.3441522812571604 +32 +0.19869641222604567 +13 +-0.1986964122260401 +23 +0.3441522812571604 +33 +0.19869641222604567 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.17382771607406877 +20 +0.3010784360039503 +30 +0.4416633977968423 +11 +-0.2331808958459863 +21 +0.30886952145483487 +31 +0.2331808958459941 +12 +-0.24582951358828664 +22 +0.24582951358829058 +32 +0.44166339779684116 +13 +-0.24582951358828664 +23 +0.24582951358829058 +33 +0.44166339779684116 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.30107843600394635 +20 +0.17382771607406827 +30 +0.44166339779684116 +11 +-0.35328475047387764 +21 +0.09466236358770014 +31 +0.3532847504738821 +12 +-0.3358093605615792 +22 +0.08997984697328248 +32 +0.4416633977968423 +13 +-0.3358093605615792 +23 +0.08997984697328248 +33 +0.4416633977968423 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.35328475047387764 +20 +0.09466236358770014 +30 +0.3532847504738821 +11 +-0.30107843600394635 +21 +0.17382771607406827 +31 +0.44166339779684116 +12 +-0.331519017082783 +22 +0.15875300428965727 +32 +0.33151901708278747 +13 +-0.331519017082783 +23 +0.15875300428965727 +33 +0.33151901708278747 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +8.493206138382448e-15 +20 +0.3476554321481467 +30 +0.44166339779684116 +11 +1.071365218763276e-14 +21 +0.4380676568004345 +31 +-1.2892388693108735e-14 +12 +-0.08997984697327954 +22 +0.3358093605615809 +32 +0.44166339779684116 +13 +-0.08997984697327954 +23 +0.3358093605615809 +33 +0.44166339779684116 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +0.08997984697329425 +20 +0.335809360561582 +30 +0.4416633977968423 +11 +0.17382771607408792 +21 +0.3010784360039525 +31 +0.44166339779684116 +12 +0.2190338284002274 +22 +0.37937771936549897 +32 +-1.1771797019837378e-14 +13 +0.2190338284002274 +23 +0.37937771936549897 +33 +-1.1771797019837378e-14 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +0.24582951358830357 +20 +0.2458295135882939 +30 +0.44166339779684116 +11 +0.3010784360039633 +21 +0.17382771607407282 +31 +0.44166339779684116 +12 +0.3793777193655142 +22 +0.21903382840021673 +32 +-1.3445790633259696e-14 +13 +0.3793777193655142 +23 +0.21903382840021673 +33 +-1.3445790633259696e-14 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +0.24582951358830357 +20 +0.2458295135882939 +30 +0.44166339779684116 +11 +0.3097606107421021 +21 +0.309760610742088 +31 +-1.1769864756914841e-14 +12 +0.17382771607408792 +22 +0.3010784360039525 +32 +0.44166339779684116 +13 +0.17382771607408792 +23 +0.3010784360039525 +33 +0.44166339779684116 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +-0.13135838013328194 +20 +0.3868373733924963 +30 +0.13135838013328868 +11 +-0.08997984697327954 +21 +0.3358093605615809 +31 +0.44166339779684116 +12 +-0.1076753495876358 +22 +0.40184987538383093 +32 +0.10767534958764315 +13 +-0.1076753495876358 +23 +0.40184987538383093 +33 +0.10767534958764315 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.08997984697327954 +20 +0.3358093605615809 +30 +0.44166339779684116 +11 +-0.13135838013328194 +21 +0.3868373733924963 +31 +0.13135838013328868 +12 +-0.17382771607406877 +22 +0.3010784360039503 +32 +0.4416633977968423 +13 +-0.17382771607406877 +23 +0.3010784360039503 +33 +0.4416633977968423 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3358093605615961 +20 +0.08997984697328582 +30 +0.44166339779684116 +11 +0.34765543214816524 +21 +-2.220446049250313e-15 +31 +0.4416633977968546 +12 +0.43806765680045084 +22 +-2.220446049250313e-15 +32 +-5.71640170110588e-16 +13 +0.43806765680045084 +23 +-2.220446049250313e-15 +33 +-5.71640170110588e-16 +70 +0 + 0 +3DFACE + 8 +thumb proximal +10 +1.071365218763276e-14 +20 +0.4380676568004345 +30 +-1.2892388693108735e-14 +11 +0.3562827520000152 +21 +0.21460211860996398 +31 +9.493067727034111e-15 +12 +1.7763568394002505e-15 +22 +0.21460211860996398 +32 +-1.1370779255784436e-15 +13 +1.7763568394002505e-15 +23 +0.21460211860996398 +33 +-1.1370779255784436e-15 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3562827520000152 +20 +0.21460211860996398 +30 +9.493067727034111e-15 +11 +1.071365218763276e-14 +21 +0.4380676568004345 +31 +-1.2892388693108735e-14 +12 +0.11338025262340018 +22 +0.42314086336547535 +32 +-1.1213530340952345e-14 +13 +0.11338025262340018 +23 +0.42314086336547535 +33 +-1.1213530340952345e-14 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.3562827520000152 +20 +0.21460211860996398 +30 +9.493067727034111e-15 +11 +0.11338025262340018 +21 +0.42314086336547535 +31 +-1.1213530340952345e-14 +12 +0.2190338284002274 +22 +0.37937771936549897 +32 +-1.1771797019837378e-14 +13 +0.2190338284002274 +23 +0.37937771936549897 +33 +-1.1771797019837378e-14 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.3562827520000152 +20 +0.21460211860996398 +30 +9.493067727034111e-15 +11 +0.2190338284002274 +21 +0.37937771936549897 +31 +-1.1771797019837378e-14 +12 +0.3097606107421021 +22 +0.309760610742088 +32 +-1.1769864756914841e-14 +13 +0.3097606107421021 +23 +0.309760610742088 +33 +-1.1769864756914841e-14 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.3562827520000152 +20 +0.21460211860996398 +30 +9.493067727034111e-15 +11 +0.3097606107421021 +21 +0.309760610742088 +31 +-1.1769864756914841e-14 +12 +0.3793777193655142 +22 +0.21903382840021673 +32 +-1.3445790633259696e-14 +13 +0.3793777193655142 +23 +0.21903382840021673 +33 +-1.3445790633259696e-14 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.3562827520000152 +20 +0.21460211860996398 +30 +9.493067727034111e-15 +11 +0.3793777193655142 +21 +0.21903382840021673 +31 +-1.3445790633259696e-14 +12 +0.3562827520000152 +22 +-4.496403249731884e-15 +32 +1.0058505482501966e-14 +13 +0.3562827520000152 +23 +-4.496403249731884e-15 +33 +1.0058505482501966e-14 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +0.3562827520000152 +20 +-4.496403249731884e-15 +30 +1.0058505482501966e-14 +11 +0.3793777193655142 +21 +0.21903382840021673 +31 +-1.3445790633259696e-14 +12 +0.43806765680045084 +22 +-2.220446049250313e-15 +32 +-5.71640170110588e-16 +13 +0.43806765680045084 +23 +-2.220446049250313e-15 +33 +-5.71640170110588e-16 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +0.43806765680045084 +20 +-2.220446049250313e-15 +30 +-5.71640170110588e-16 +11 +0.3793777193655142 +21 +0.21903382840021673 +31 +-1.3445790633259696e-14 +12 +0.4231408633654961 +22 +0.11338025262338508 +32 +-1.1764414107035652e-14 +13 +0.4231408633654961 +23 +0.11338025262338508 +33 +-1.1764414107035652e-14 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3554382812124002 +20 +0.07106866747815194 +30 +0.3554382812124069 +11 +-0.2519299499589987 +21 +-3.3306690738754696e-15 +31 +0.25192994995900597 +12 +-0.3632432353943587 +22 +-4.496403249731884e-15 +32 +0.3632432353943699 +13 +-0.3632432353943587 +23 +-4.496403249731884e-15 +33 +0.3632432353943699 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.2519299499589987 +20 +-3.3306690738754696e-15 +30 +0.25192994995900597 +11 +-0.3554382812124002 +21 +0.07106866747815194 +31 +0.3554382812124069 +12 +-0.25192994995899876 +22 +0.21460211860996398 +32 +0.2519299499590065 +13 +-0.25192994995899876 +23 +0.21460211860996398 +33 +0.2519299499590065 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +-0.25192994995899876 +20 +0.21460211860996398 +30 +0.2519299499590065 +11 +-0.3554382812124002 +21 +0.07106866747815194 +31 +0.3554382812124069 +12 +-0.35328475047387764 +22 +0.09466236358770014 +32 +0.3532847504738821 +13 +-0.35328475047387764 +23 +0.09466236358770014 +33 +0.3532847504738821 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +-0.25192994995899876 +20 +0.21460211860996398 +30 +0.2519299499590065 +11 +-0.35328475047387764 +21 +0.09466236358770014 +31 +0.3532847504738821 +12 +-0.331519017082783 +22 +0.15875300428965727 +32 +0.33151901708278747 +13 +-0.331519017082783 +23 +0.15875300428965727 +33 +0.33151901708278747 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +-0.25192994995899876 +20 +0.21460211860996398 +30 +0.2519299499590065 +11 +-0.331519017082783 +21 +0.15875300428965727 +31 +0.33151901708278747 +12 +-0.3222486125544444 +22 +0.18605032320429132 +32 +0.3222486125544489 +13 +-0.3222486125544444 +23 +0.18605032320429132 +33 +0.3222486125544489 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +-0.25192994995899876 +20 +0.21460211860996398 +30 +0.2519299499590065 +11 +-0.3222486125544444 +21 +0.18605032320429132 +31 +0.3222486125544489 +12 +-0.2959784921776627 +22 +0.2290444991387141 +32 +0.2959784921776672 +13 +-0.2959784921776627 +23 +0.2290444991387141 +33 +0.2959784921776672 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +-0.25192994995899876 +20 +0.21460211860996398 +30 +0.2519299499590065 +11 +-0.2959784921776627 +21 +0.2290444991387141 +31 +0.2959784921776672 +12 +1.7763568394002505e-15 +22 +0.21460211860996398 +32 +-1.1370779255784436e-15 +13 +1.7763568394002505e-15 +23 +0.21460211860996398 +33 +-1.1370779255784436e-15 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +1.7763568394002505e-15 +20 +0.21460211860996398 +30 +-1.1370779255784436e-15 +11 +-0.2959784921776627 +21 +0.2290444991387141 +31 +0.2959784921776672 +12 +1.071365218763276e-14 +22 +0.4380676568004345 +32 +-1.2892388693108735e-14 +13 +1.071365218763276e-14 +23 +0.4380676568004345 +33 +-1.2892388693108735e-14 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +1.071365218763276e-14 +20 +0.4380676568004345 +30 +-1.2892388693108735e-14 +11 +-0.2959784921776627 +21 +0.2290444991387141 +31 +0.2959784921776672 +12 +-0.2912967185332681 +22 +0.23670677844559634 +32 +0.29129671853327366 +13 +-0.2912967185332681 +23 +0.23670677844559634 +33 +0.29129671853327366 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +1.071365218763276e-14 +20 +0.4380676568004345 +30 +-1.2892388693108735e-14 +11 +-0.2912967185332681 +21 +0.23670677844559634 +31 +0.29129671853327366 +12 +-0.27059219435790804 +22 +0.2705921943579131 +32 +0.2705921943579153 +13 +-0.27059219435790804 +23 +0.2705921943579131 +33 +0.2705921943579153 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +1.071365218763276e-14 +20 +0.4380676568004345 +30 +-1.2892388693108735e-14 +11 +-0.27059219435790804 +21 +0.2705921943579131 +31 +0.2705921943579153 +12 +-0.2331808958459863 +22 +0.30886952145483487 +32 +0.2331808958459941 +13 +-0.2331808958459863 +23 +0.30886952145483487 +33 +0.2331808958459941 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +1.071365218763276e-14 +20 +0.4380676568004345 +30 +-1.2892388693108735e-14 +11 +-0.2331808958459863 +21 +0.30886952145483487 +31 +0.2331808958459941 +12 +-0.1986964122260401 +22 +0.3441522812571604 +32 +0.19869641222604567 +13 +-0.1986964122260401 +23 +0.3441522812571604 +33 +0.19869641222604567 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +1.071365218763276e-14 +20 +0.4380676568004345 +30 +-1.2892388693108735e-14 +11 +-0.1986964122260401 +21 +0.3441522812571604 +31 +0.19869641222604567 +12 +-0.13135838013328194 +22 +0.3868373733924963 +32 +0.13135838013328868 +13 +-0.13135838013328194 +23 +0.3868373733924963 +33 +0.13135838013328868 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +1.071365218763276e-14 +20 +0.4380676568004345 +30 +-1.2892388693108735e-14 +11 +-0.13135838013328194 +21 +0.3868373733924963 +31 +0.13135838013328868 +12 +-0.1076753495876358 +22 +0.40184987538383093 +32 +0.10767534958764315 +13 +-0.1076753495876358 +23 +0.40184987538383093 +33 +0.10767534958764315 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.30854991416221755 +20 +0.2146021186099651 +30 +1.031895330292737 +11 +1.5154544286133387e-14 +21 +0.2146021186099651 +31 +1.210036706292738 +12 +-0.25192994995899204 +22 +0.2146021186099651 +32 +0.9581067563337309 +13 +-0.25192994995899204 +23 +0.2146021186099651 +33 +0.9581067563337309 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +1.5154544286133387e-14 +20 +0.2146021186099651 +30 +1.210036706292738 +11 +-0.30854991416221755 +21 +0.2146021186099651 +31 +1.031895330292737 +12 +-0.3441427116181268 +22 +0.21460211860996398 +32 +1.1178239446335976 +13 +-0.3441427116181268 +23 +0.21460211860996398 +33 +1.1178239446335976 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +1.5154544286133387e-14 +20 +0.2146021186099651 +30 +1.210036706292738 +11 +-0.3441427116181268 +21 +0.21460211860996398 +31 +1.1178239446335976 +12 +-0.3562827519999848 +22 +0.2146021186099651 +32 +1.210036706292738 +13 +-0.3562827519999848 +23 +0.2146021186099651 +33 +1.210036706292738 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +1.5154544286133387e-14 +20 +0.2146021186099651 +30 +1.210036706292738 +11 +-0.3562827519999848 +21 +0.2146021186099651 +31 +1.210036706292738 +12 +-0.34414271161812904 +22 +0.21460211860996398 +32 +1.3022494679518728 +13 +-0.34414271161812904 +23 +0.21460211860996398 +33 +1.3022494679518728 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +1.5154544286133387e-14 +20 +0.2146021186099651 +30 +1.210036706292738 +11 +0.34414271161815474 +21 +0.2146021186099651 +31 +1.3022494679518728 +12 +0.35628275200001275 +22 +0.21460211860996398 +32 +1.2100367062927357 +13 +0.35628275200001275 +23 +0.21460211860996398 +33 +1.2100367062927357 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.34414271161815474 +20 +0.2146021186099651 +30 +1.3022494679518728 +11 +1.5154544286133387e-14 +21 +0.2146021186099651 +31 +1.210036706292738 +12 +-0.34414271161812904 +22 +0.21460211860996398 +32 +1.3022494679518728 +13 +-0.34414271161812904 +23 +0.21460211860996398 +33 +1.3022494679518728 +70 +15 + 0 +3DFACE + 8 +thumb proximal +10 +0.34414271161815474 +20 +0.2146021186099651 +30 +1.3022494679518728 +11 +-0.34414271161812904 +21 +0.21460211860996398 +31 +1.3022494679518728 +12 +-0.31759179099011564 +22 +0.2146021186099651 +32 +1.3663490606255126 +13 +-0.31759179099011564 +23 +0.2146021186099651 +33 +1.3663490606255126 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.34414271161815474 +20 +0.2146021186099651 +30 +1.3022494679518728 +11 +-0.31759179099011564 +21 +0.2146021186099651 +31 +1.3663490606255126 +12 +0.3085499141622455 +22 +0.2146021186099651 +32 +1.3881780822927345 +13 +0.3085499141622455 +23 +0.2146021186099651 +33 +1.3881780822927345 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +0.3085499141622455 +20 +0.2146021186099651 +30 +1.3881780822927345 +11 +-0.31759179099011564 +21 +0.2146021186099651 +31 +1.3663490606255126 +12 +-0.30854991416221755 +22 +0.21460211860996398 +32 +1.3881780822927345 +13 +-0.30854991416221755 +23 +0.21460211860996398 +33 +1.3881780822927345 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.3085499141622455 +20 +0.2146021186099651 +30 +1.3881780822927345 +11 +-0.30854991416221755 +21 +0.21460211860996398 +31 +1.3881780822927345 +12 +-0.2519299499589899 +22 +0.21460211860996398 +32 +1.4619666562517406 +13 +-0.2519299499589899 +23 +0.21460211860996398 +33 +1.4619666562517406 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.3085499141622455 +20 +0.2146021186099651 +30 +1.3881780822927345 +11 +-0.2519299499589899 +21 +0.21460211860996398 +31 +1.4619666562517406 +12 +0.2519299499590178 +22 +0.2146021186099651 +32 +1.4619666562517417 +13 +0.2519299499590178 +23 +0.2146021186099651 +33 +1.4619666562517417 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +0.2519299499590178 +20 +0.2146021186099651 +30 +1.4619666562517417 +11 +-0.2519299499589899 +21 +0.21460211860996398 +31 +1.4619666562517406 +12 +-0.17814137599998603 +22 +0.2146021186099651 +32 +1.5185866204549672 +13 +-0.17814137599998603 +23 +0.2146021186099651 +33 +1.5185866204549672 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.2519299499590178 +20 +0.2146021186099651 +30 +1.4619666562517417 +11 +-0.17814137599998603 +21 +0.2146021186099651 +31 +1.5185866204549672 +12 +0.17814137600001173 +22 +0.21460211860996287 +32 +1.5185866204549672 +13 +0.17814137600001173 +23 +0.21460211860996287 +33 +1.5185866204549672 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +0.17814137600001173 +20 +0.21460211860996287 +30 +1.5185866204549672 +11 +-0.17814137599998603 +21 +0.2146021186099651 +31 +1.5185866204549672 +12 +-0.09221276165912418 +22 +0.2146021186099651 +32 +1.5541794179108777 +13 +-0.09221276165912418 +23 +0.2146021186099651 +33 +1.5541794179108777 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.17814137600001173 +20 +0.21460211860996287 +30 +1.5185866204549672 +11 +-0.09221276165912418 +21 +0.2146021186099651 +31 +1.5541794179108777 +12 +0.0922127616591521 +22 +0.21460211860996398 +32 +1.5541794179108777 +13 +0.0922127616591521 +23 +0.21460211860996398 +33 +1.5541794179108777 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +0.0922127616591521 +20 +0.21460211860996398 +30 +1.5541794179108777 +11 +-0.09221276165912418 +21 +0.2146021186099651 +31 +1.5541794179108777 +12 +1.2823075934420558e-14 +22 +0.2146021186099651 +32 +1.5663194582927344 +13 +1.2823075934420558e-14 +23 +0.2146021186099651 +33 +1.5663194582927344 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3562827520000105 +20 +-4.496403249731884e-15 +30 +1.2100367062927357 +11 +0.34414271161815474 +21 +0.2146021186099651 +31 +1.3022494679518728 +12 +0.34414271161815474 +22 +-5.6066262743570405e-15 +32 +1.3022494679518728 +13 +0.34414271161815474 +23 +-5.6066262743570405e-15 +33 +1.3022494679518728 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.34414271161815474 +20 +0.2146021186099651 +30 +1.3022494679518728 +11 +0.3562827520000105 +21 +-4.496403249731884e-15 +31 +1.2100367062927357 +12 +0.35628275200001275 +22 +0.21460211860996398 +32 +1.2100367062927357 +13 +0.35628275200001275 +23 +0.21460211860996398 +33 +1.2100367062927357 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.34414271161815474 +20 +0.2146021186099651 +30 +1.3022494679518728 +11 +0.30854991416224326 +21 +-4.496403249731884e-15 +31 +1.3881780822927368 +12 +0.34414271161815474 +22 +-5.6066262743570405e-15 +32 +1.3022494679518728 +13 +0.34414271161815474 +23 +-5.6066262743570405e-15 +33 +1.3022494679518728 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.30854991416224326 +20 +-4.496403249731884e-15 +30 +1.3881780822927368 +11 +0.34414271161815474 +21 +0.2146021186099651 +31 +1.3022494679518728 +12 +0.3085499141622455 +22 +0.2146021186099651 +32 +1.3881780822927345 +13 +0.3085499141622455 +23 +0.2146021186099651 +33 +1.3881780822927345 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.3085499141622455 +20 +0.2146021186099651 +30 +1.3881780822927345 +11 +0.2519299499590178 +21 +-4.496403249731884e-15 +31 +1.4619666562517417 +12 +0.30854991416224326 +22 +-4.496403249731884e-15 +32 +1.3881780822927368 +13 +0.30854991416224326 +23 +-4.496403249731884e-15 +33 +1.3881780822927368 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.2519299499590178 +20 +-4.496403249731884e-15 +30 +1.4619666562517417 +11 +0.3085499141622455 +21 +0.2146021186099651 +31 +1.3881780822927345 +12 +0.2519299499590178 +22 +0.2146021186099651 +32 +1.4619666562517417 +13 +0.2519299499590178 +23 +0.2146021186099651 +33 +1.4619666562517417 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.2519299499590178 +20 +-4.496403249731884e-15 +30 +1.4619666562517417 +11 +0.17814137600001173 +21 +0.21460211860996287 +31 +1.5185866204549672 +12 +0.17814137600001173 +22 +-4.496403249731884e-15 +32 +1.518586620454966 +13 +0.17814137600001173 +23 +-4.496403249731884e-15 +33 +1.518586620454966 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.17814137600001173 +20 +0.21460211860996287 +30 +1.5185866204549672 +11 +0.2519299499590178 +21 +-4.496403249731884e-15 +31 +1.4619666562517417 +12 +0.2519299499590178 +22 +0.2146021186099651 +32 +1.4619666562517417 +13 +0.2519299499590178 +23 +0.2146021186099651 +33 +1.4619666562517417 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.17814137600001173 +20 +-4.496403249731884e-15 +30 +1.518586620454966 +11 +0.0922127616591521 +21 +0.21460211860996398 +31 +1.5541794179108777 +12 +0.0922127616591521 +22 +-4.496403249731884e-15 +32 +1.5541794179108777 +13 +0.0922127616591521 +23 +-4.496403249731884e-15 +33 +1.5541794179108777 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.0922127616591521 +20 +0.21460211860996398 +30 +1.5541794179108777 +11 +0.17814137600001173 +21 +-4.496403249731884e-15 +31 +1.518586620454966 +12 +0.17814137600001173 +22 +0.21460211860996287 +32 +1.5185866204549672 +13 +0.17814137600001173 +23 +0.21460211860996287 +33 +1.5185866204549672 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.0922127616591521 +20 +-4.496403249731884e-15 +30 +1.5541794179108777 +11 +1.2823075934420558e-14 +21 +0.2146021186099651 +31 +1.5663194582927344 +12 +1.2823075934420558e-14 +22 +-5.6066262743570405e-15 +32 +1.5663194582927333 +13 +1.2823075934420558e-14 +23 +-5.6066262743570405e-15 +33 +1.5663194582927333 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +1.2823075934420558e-14 +20 +0.2146021186099651 +30 +1.5663194582927344 +11 +0.0922127616591521 +21 +-4.496403249731884e-15 +31 +1.5541794179108777 +12 +0.0922127616591521 +22 +0.21460211860996398 +32 +1.5541794179108777 +13 +0.0922127616591521 +23 +0.21460211860996398 +33 +1.5541794179108777 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +1.2823075934420558e-14 +20 +-5.6066262743570405e-15 +30 +1.5663194582927333 +11 +-0.09221276165912418 +21 +0.2146021186099651 +31 +1.5541794179108777 +12 +-0.09221276165912418 +22 +-4.496403249731884e-15 +32 +1.5541794179108777 +13 +-0.09221276165912418 +23 +-4.496403249731884e-15 +33 +1.5541794179108777 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.09221276165912418 +20 +0.2146021186099651 +30 +1.5541794179108777 +11 +1.2823075934420558e-14 +21 +-5.6066262743570405e-15 +31 +1.5663194582927333 +12 +1.2823075934420558e-14 +22 +0.2146021186099651 +32 +1.5663194582927344 +13 +1.2823075934420558e-14 +23 +0.2146021186099651 +33 +1.5663194582927344 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.09221276165912418 +20 +-4.496403249731884e-15 +30 +1.5541794179108777 +11 +-0.17814137599998603 +21 +0.2146021186099651 +31 +1.5185866204549672 +12 +-0.17814137599998603 +22 +-3.3306690738754696e-15 +32 +1.5185866204549672 +13 +-0.17814137599998603 +23 +-3.3306690738754696e-15 +33 +1.5185866204549672 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.17814137599998603 +20 +0.2146021186099651 +30 +1.5185866204549672 +11 +-0.09221276165912418 +21 +-4.496403249731884e-15 +31 +1.5541794179108777 +12 +-0.09221276165912418 +22 +0.2146021186099651 +32 +1.5541794179108777 +13 +-0.09221276165912418 +23 +0.2146021186099651 +33 +1.5541794179108777 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.17814137599998603 +20 +-3.3306690738754696e-15 +30 +1.5185866204549672 +11 +-0.2519299499589899 +21 +0.19495730511311 +31 +1.4619666562517406 +12 +-0.2519299499589898 +22 +-5.6066262743570405e-15 +32 +1.4619666562517406 +13 +-0.2519299499589898 +23 +-5.6066262743570405e-15 +33 +1.4619666562517406 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.2519299499589899 +20 +0.19495730511311 +30 +1.4619666562517406 +11 +-0.17814137599998603 +21 +-3.3306690738754696e-15 +31 +1.5185866204549672 +12 +-0.2519299499589899 +22 +0.21460211860996398 +32 +1.4619666562517406 +13 +-0.2519299499589899 +23 +0.21460211860996398 +33 +1.4619666562517406 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +-0.2519299499589899 +20 +0.21460211860996398 +30 +1.4619666562517406 +11 +-0.17814137599998603 +21 +-3.3306690738754696e-15 +31 +1.5185866204549672 +12 +-0.17814137599998603 +22 +0.2146021186099651 +32 +1.5185866204549672 +13 +-0.17814137599998603 +23 +0.2146021186099651 +33 +1.5185866204549672 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.2519299499589899 +20 +0.19495730511311 +30 +1.4619666562517406 +11 +-0.30854991416221755 +21 +-4.496403249731884e-15 +31 +1.3881780822927345 +12 +-0.2519299499589898 +22 +-5.6066262743570405e-15 +32 +1.4619666562517406 +13 +-0.2519299499589898 +23 +-5.6066262743570405e-15 +33 +1.4619666562517406 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.30854991416221755 +20 +-4.496403249731884e-15 +30 +1.3881780822927345 +11 +-0.2519299499589899 +21 +0.19495730511311 +31 +1.4619666562517406 +12 +-0.30854991416221755 +22 +0.21460211860996398 +32 +1.3881780822927345 +13 +-0.30854991416221755 +23 +0.21460211860996398 +33 +1.3881780822927345 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +-0.30854991416221755 +20 +0.21460211860996398 +30 +1.3881780822927345 +11 +-0.2519299499589899 +21 +0.19495730511311 +31 +1.4619666562517406 +12 +-0.2519299499589899 +22 +0.21460211860996398 +32 +1.4619666562517406 +13 +-0.2519299499589899 +23 +0.21460211860996398 +33 +1.4619666562517406 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.30854991416221755 +20 +0.21460211860996398 +30 +1.3881780822927345 +11 +-0.31759179099011786 +21 +-4.496403249731884e-15 +31 +1.3663490606255115 +12 +-0.30854991416221755 +22 +-4.496403249731884e-15 +32 +1.3881780822927345 +13 +-0.30854991416221755 +23 +-4.496403249731884e-15 +33 +1.3881780822927345 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.31759179099011786 +20 +-4.496403249731884e-15 +30 +1.3663490606255115 +11 +-0.34414271161812904 +21 +0.21460211860996398 +31 +1.3022494679518728 +12 +-0.3441427116181268 +22 +-5.6066262743570405e-15 +32 +1.3022494679518728 +13 +-0.3441427116181268 +23 +-5.6066262743570405e-15 +33 +1.3022494679518728 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.34414271161812904 +20 +0.21460211860996398 +30 +1.3022494679518728 +11 +-0.31759179099011786 +21 +-4.496403249731884e-15 +31 +1.3663490606255115 +12 +-0.30854991416221755 +22 +0.21460211860996398 +32 +1.3881780822927345 +13 +-0.30854991416221755 +23 +0.21460211860996398 +33 +1.3881780822927345 +70 +15 + 0 +3DFACE + 8 +thumb proximal +10 +-0.34414271161812904 +20 +0.21460211860996398 +30 +1.3022494679518728 +11 +-0.30854991416221755 +21 +0.21460211860996398 +31 +1.3881780822927345 +12 +-0.31759179099011564 +22 +0.2146021186099651 +32 +1.3663490606255126 +13 +-0.31759179099011564 +23 +0.2146021186099651 +33 +1.3663490606255126 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.32045933822158423 +20 +0.1850172851865613 +30 +0.8895773680711375 +11 +-0.24582951358828667 +21 +0.24582951358829058 +31 +0.7683733084958861 +12 +-0.30107843600394635 +22 +0.17382771607406938 +32 +0.7683733084958861 +13 +-0.30107843600394635 +23 +0.17382771607406938 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.24582951358828667 +20 +0.24582951358829058 +30 +0.7683733084958861 +11 +-0.32045933822158423 +21 +0.1850172851865613 +31 +0.8895773680711375 +12 +-0.29397599311384076 +22 +0.22749485479893866 +32 +0.9160607131788822 +13 +-0.29397599311384076 +23 +0.22749485479893866 +33 +0.9160607131788822 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +-0.24582951358828667 +20 +0.24582951358829058 +30 +0.7683733084958861 +11 +-0.29397599311384076 +21 +0.22749485479893866 +31 +0.9160607131788822 +12 +-0.26844496678834595 +22 +0.26844496678835666 +32 +0.9415917395043769 +13 +-0.26844496678834595 +23 +0.26844496678835666 +33 +0.9415917395043769 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.26844496678834595 +20 +0.26844496678835666 +30 +0.9415917395043769 +11 +-0.17382771607407105 +21 +0.3010784360039514 +31 +0.7683733084958873 +12 +-0.24582951358828667 +22 +0.24582951358829058 +32 +0.7683733084958861 +13 +-0.24582951358828667 +23 +0.24582951358829058 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.17382771607407105 +20 +0.3010784360039514 +30 +0.7683733084958873 +11 +-0.26844496678834595 +21 +0.26844496678835666 +31 +0.9415917395043769 +12 +-0.19646449928738383 +22 +0.3402864946493293 +32 +1.013572207005339 +13 +-0.19646449928738383 +23 +0.3402864946493293 +33 +1.013572207005339 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.17382771607407105 +20 +0.3010784360039514 +30 +0.7683733084958873 +11 +-0.10601971888034317 +21 +0.39567097746564023 +31 +1.1040169874123784 +12 +-0.0899798469732796 +22 +0.3358093605615798 +32 +0.768373308495885 +13 +-0.0899798469732796 +23 +0.3358093605615798 +33 +0.768373308495885 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.10601971888034317 +20 +0.39567097746564023 +30 +1.1040169874123784 +11 +-0.17382771607407105 +21 +0.3010784360039514 +31 +0.7683733084958873 +12 +-0.19646449928738383 +22 +0.3402864946493293 +32 +1.013572207005339 +13 +-0.19646449928738383 +23 +0.3402864946493293 +33 +1.013572207005339 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3518308750436484 +20 +0.09427279884027734 +30 +0.8582058312490733 +11 +-0.30107843600394635 +21 +0.17382771607406938 +31 +0.7683733084958861 +12 +-0.3358093605615814 +22 +0.08997984697328248 +32 +0.7683733084958861 +13 +-0.3358093605615814 +23 +0.08997984697328248 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.30107843600394635 +20 +0.17382771607406938 +30 +0.7683733084958861 +11 +-0.3518308750436484 +21 +0.09427279884027734 +31 +0.8582058312490733 +12 +-0.32045933822158423 +22 +0.1850172851865613 +32 +0.8895773680711375 +13 +-0.32045933822158423 +23 +0.1850172851865613 +33 +0.8895773680711375 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3623076845685704 +20 +-4.496403249731884e-15 +30 +0.8477290217241491 +11 +-0.3358093605615814 +21 +0.08997984697328248 +31 +0.7683733084958861 +12 +-0.3476554321481416 +22 +-7.827072323607354e-15 +32 +0.7683733084958861 +13 +-0.3476554321481416 +23 +-7.827072323607354e-15 +33 +0.7683733084958861 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3358093605615814 +20 +0.08997984697328248 +30 +0.7683733084958861 +11 +-0.3623076845685704 +21 +-4.496403249731884e-15 +31 +0.8477290217241491 +12 +-0.3518308750436484 +22 +0.09427279884027734 +32 +0.8582058312490733 +13 +-0.3518308750436484 +23 +0.09427279884027734 +33 +0.8582058312490733 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.10601971888034317 +20 +0.39567097746564023 +30 +1.1040169874123784 +11 +8.43769498715119e-15 +21 +0.3476554321481467 +31 +0.7683733084958861 +12 +-0.0899798469732796 +22 +0.3358093605615798 +32 +0.768373308495885 +13 +-0.0899798469732796 +23 +0.3358093605615798 +33 +0.768373308495885 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +8.43769498715119e-15 +20 +0.3476554321481467 +30 +0.7683733084958861 +11 +-0.10601971888034317 +21 +0.39567097746564023 +31 +1.1040169874123784 +12 +1.0658141036401503e-14 +22 +0.4292042372199358 +32 +1.2100367062927369 +13 +1.0658141036401503e-14 +23 +0.4292042372199358 +33 +1.2100367062927369 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3441427116181268 +20 +0.21460211860996398 +30 +1.1178239446335976 +11 +-0.3085499141622175 +21 +-4.496403249731884e-15 +31 +1.0318953302927392 +12 +-0.34414271161812904 +22 +-5.6066262743570405e-15 +32 +1.1178239446335965 +13 +-0.34414271161812904 +23 +-5.6066262743570405e-15 +33 +1.1178239446335965 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3085499141622175 +20 +-4.496403249731884e-15 +30 +1.0318953302927392 +11 +-0.3441427116181268 +21 +0.21460211860996398 +31 +1.1178239446335976 +12 +-0.30854991416221755 +22 +0.2146021186099651 +32 +1.031895330292737 +13 +-0.30854991416221755 +23 +0.2146021186099651 +33 +1.031895330292737 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.34414271161812904 +20 +0.21460211860996398 +30 +1.3022494679518728 +11 +-0.3562827519999848 +21 +-4.496403249731884e-15 +31 +1.2100367062927357 +12 +-0.3441427116181268 +22 +-5.6066262743570405e-15 +32 +1.3022494679518728 +13 +-0.3441427116181268 +23 +-5.6066262743570405e-15 +33 +1.3022494679518728 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3562827519999848 +20 +-4.496403249731884e-15 +30 +1.2100367062927357 +11 +-0.34414271161812904 +21 +0.21460211860996398 +31 +1.3022494679518728 +12 +-0.3562827519999848 +22 +0.2146021186099651 +32 +1.210036706292738 +13 +-0.3562827519999848 +23 +0.2146021186099651 +33 +1.210036706292738 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3562827519999848 +20 +-4.496403249731884e-15 +30 +1.2100367062927357 +11 +-0.3441427116181268 +21 +0.21460211860996398 +31 +1.1178239446335976 +12 +-0.34414271161812904 +22 +-5.6066262743570405e-15 +32 +1.1178239446335965 +13 +-0.34414271161812904 +23 +-5.6066262743570405e-15 +33 +1.1178239446335965 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3441427116181268 +20 +0.21460211860996398 +30 +1.1178239446335976 +11 +-0.3562827519999848 +21 +-4.496403249731884e-15 +31 +1.2100367062927357 +12 +-0.3562827519999848 +22 +0.2146021186099651 +32 +1.210036706292738 +13 +-0.3562827519999848 +23 +0.2146021186099651 +33 +1.210036706292738 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3085499141622175 +20 +-4.496403249731884e-15 +30 +1.0318953302927392 +11 +-0.25192994995899204 +21 +0.19495730511311 +31 +0.9581067563337331 +12 +-0.25192994995898976 +22 +-5.6066262743570405e-15 +32 +0.958106756333732 +13 +-0.25192994995898976 +23 +-5.6066262743570405e-15 +33 +0.958106756333732 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.25192994995899204 +20 +0.19495730511311 +30 +0.9581067563337331 +11 +-0.3085499141622175 +21 +-4.496403249731884e-15 +31 +1.0318953302927392 +12 +-0.30854991416221755 +22 +0.2146021186099651 +32 +1.031895330292737 +13 +-0.30854991416221755 +23 +0.2146021186099651 +33 +1.031895330292737 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +-0.25192994995899204 +20 +0.19495730511311 +30 +0.9581067563337331 +11 +-0.30854991416221755 +21 +0.2146021186099651 +31 +1.031895330292737 +12 +-0.25192994995899204 +22 +0.2146021186099651 +32 +0.9581067563337309 +13 +-0.25192994995899204 +23 +0.2146021186099651 +33 +0.9581067563337309 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +1.0658141036401503e-14 +20 +0.4292042372199358 +30 +1.2100367062927369 +11 +-0.25192994995899204 +21 +0.2146021186099651 +31 +0.9581067563337309 +12 +1.5154544286133387e-14 +22 +0.2146021186099651 +32 +1.210036706292738 +13 +1.5154544286133387e-14 +23 +0.2146021186099651 +33 +1.210036706292738 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.25192994995899204 +20 +0.2146021186099651 +30 +0.9581067563337309 +11 +1.0658141036401503e-14 +21 +0.4292042372199358 +31 +1.2100367062927369 +12 +-0.29397599311384076 +22 +0.22749485479893866 +32 +0.9160607131788822 +13 +-0.29397599311384076 +23 +0.22749485479893866 +33 +0.9160607131788822 +70 +15 + 0 +3DFACE + 8 +thumb proximal +10 +-0.29397599311384076 +20 +0.22749485479893866 +30 +0.9160607131788822 +11 +1.0658141036401503e-14 +21 +0.4292042372199358 +31 +1.2100367062927369 +12 +-0.26844496678834595 +22 +0.26844496678835666 +32 +0.9415917395043769 +13 +-0.26844496678834595 +23 +0.26844496678835666 +33 +0.9415917395043769 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +-0.26844496678834595 +20 +0.26844496678835666 +30 +0.9415917395043769 +11 +1.0658141036401503e-14 +21 +0.4292042372199358 +31 +1.2100367062927369 +12 +-0.19646449928738383 +22 +0.3402864946493293 +32 +1.013572207005339 +13 +-0.19646449928738383 +23 +0.3402864946493293 +33 +1.013572207005339 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +-0.19646449928738383 +20 +0.3402864946493293 +30 +1.013572207005339 +11 +1.0658141036401503e-14 +21 +0.4292042372199358 +31 +1.2100367062927369 +12 +-0.10601971888034317 +22 +0.39567097746564023 +32 +1.1040169874123784 +13 +-0.10601971888034317 +23 +0.39567097746564023 +33 +1.1040169874123784 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.25192994995899204 +20 +0.19495730511311 +30 +0.9581067563337331 +11 +-0.3623076845685704 +21 +-4.496403249731884e-15 +31 +0.8477290217241491 +12 +-0.25192994995898976 +22 +-5.6066262743570405e-15 +32 +0.958106756333732 +13 +-0.25192994995898976 +23 +-5.6066262743570405e-15 +33 +0.958106756333732 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3623076845685704 +20 +-4.496403249731884e-15 +30 +0.8477290217241491 +11 +-0.25192994995899204 +21 +0.19495730511311 +31 +0.9581067563337331 +12 +-0.3518308750436484 +22 +0.09427279884027734 +32 +0.8582058312490733 +13 +-0.3518308750436484 +23 +0.09427279884027734 +33 +0.8582058312490733 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +-0.3518308750436484 +20 +0.09427279884027734 +30 +0.8582058312490733 +11 +-0.25192994995899204 +21 +0.19495730511311 +31 +0.9581067563337331 +12 +-0.32045933822158423 +22 +0.1850172851865613 +32 +0.8895773680711375 +13 +-0.32045933822158423 +23 +0.1850172851865613 +33 +0.8895773680711375 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +-0.32045933822158423 +20 +0.1850172851865613 +30 +0.8895773680711375 +11 +-0.25192994995899204 +21 +0.19495730511311 +31 +0.9581067563337331 +12 +-0.29397599311384076 +22 +0.22749485479893866 +32 +0.9160607131788822 +13 +-0.29397599311384076 +23 +0.22749485479893866 +33 +0.9160607131788822 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +-0.29397599311384076 +20 +0.22749485479893866 +30 +0.9160607131788822 +11 +-0.25192994995899204 +21 +0.19495730511311 +31 +0.9581067563337331 +12 +-0.25192994995899204 +22 +0.2146021186099651 +32 +0.9581067563337309 +13 +-0.25192994995899204 +23 +0.2146021186099651 +33 +0.9581067563337309 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.429204237219952 +20 +-1.1102230246251565e-15 +30 +1.210036706292738 +11 +0.35628275200001275 +21 +0.21460211860996398 +31 +1.2100367062927357 +12 +0.3562827520000105 +22 +-4.496403249731884e-15 +32 +1.2100367062927357 +13 +0.3562827520000105 +23 +-4.496403249731884e-15 +33 +1.2100367062927357 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.35628275200001275 +20 +0.21460211860996398 +30 +1.2100367062927357 +11 +0.429204237219952 +21 +-1.1102230246251565e-15 +31 +1.210036706292738 +12 +0.3717017728444028 +22 +0.2146021186099673 +32 +1.2100367062927369 +13 +0.3717017728444028 +23 +0.2146021186099673 +33 +1.2100367062927369 +70 +15 + 0 +3DFACE + 8 +thumb proximal +10 +0.3717017728444028 +20 +0.2146021186099673 +30 +1.2100367062927369 +11 +0.429204237219952 +21 +-1.1102230246251565e-15 +31 +1.210036706292738 +12 +0.41457945748344976 +22 +0.11108623083121855 +32 +1.2100367062927369 +13 +0.41457945748344976 +23 +0.11108623083121855 +33 +1.2100367062927369 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +1.5154544286133387e-14 +20 +0.2146021186099651 +30 +1.210036706292738 +11 +0.11108623083123143 +21 +0.4145794574834358 +31 +1.2100367062927357 +12 +1.0658141036401503e-14 +22 +0.4292042372199358 +32 +1.2100367062927369 +13 +1.0658141036401503e-14 +23 +0.4292042372199358 +33 +1.2100367062927369 +70 +1 + 0 +3DFACE + 8 +thumb proximal +10 +0.11108623083123143 +20 +0.4145794574834358 +30 +1.2100367062927357 +11 +1.5154544286133387e-14 +21 +0.2146021186099651 +31 +1.210036706292738 +12 +0.35628275200001275 +22 +0.21460211860996398 +32 +1.2100367062927357 +13 +0.35628275200001275 +23 +0.21460211860996398 +33 +1.2100367062927357 +70 +13 + 0 +3DFACE + 8 +thumb proximal +10 +0.11108623083123143 +20 +0.4145794574834358 +30 +1.2100367062927357 +11 +0.35628275200001275 +21 +0.21460211860996398 +31 +1.2100367062927357 +12 +0.21460211860998019 +22 +0.3717017728443855 +32 +1.210036706292738 +13 +0.21460211860998019 +23 +0.3717017728443855 +33 +1.210036706292738 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +0.21460211860998019 +20 +0.3717017728443855 +30 +1.210036706292738 +11 +0.35628275200001275 +21 +0.21460211860996398 +31 +1.2100367062927357 +12 +0.30349322665223116 +22 +0.30349322665221606 +32 +1.2100367062927357 +13 +0.30349322665223116 +23 +0.30349322665221606 +33 +1.2100367062927357 +70 +3 + 0 +3DFACE + 8 +thumb proximal +10 +0.30349322665223116 +20 +0.30349322665221606 +30 +1.2100367062927357 +11 +0.35628275200001275 +21 +0.21460211860996398 +31 +1.2100367062927357 +12 +0.3717017728444028 +22 +0.2146021186099673 +32 +1.2100367062927369 +13 +0.3717017728444028 +23 +0.2146021186099673 +33 +1.2100367062927369 +70 +3 + 0 +LINE + 8 +palm +10 +-1.2556460136349066 +20 +0.1897458358697347 +30 +-0.029987258687020634 +11 +-1.2556460136349066 +21 +-0.07243340606868914 +31 +-0.02998725868702173 + 0 +LINE + 8 +palm +10 +-1.222231336631785 +20 +0.3432508349117811 +30 +-0.029987258687021765 +11 +-1.2235069381440584 +21 +0.3503683787193038 +31 +-0.029987259376548173 + 0 +LINE + 8 +palm +10 +-1.195492940329603 +20 +0.41164114523825557 +30 +-0.029987258687021765 +11 +-1.1969713685029186 +21 +0.41362328422976613 +31 +-0.029987259178884056 + 0 +3DFACE + 8 +palm +10 +-1.7521367490001787 +20 +-0.37669237145944223 +30 +1.970411275796931 +11 +-1.65545853255605 +21 +-0.333700440955652 +31 +1.421192459110173 +12 +-1.625486635239021 +22 +-0.37669239221898876 +32 +1.4294077340431905 +13 +-1.625486635239021 +23 +-0.37669239221898876 +33 +1.4294077340431905 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.65545853255605 +20 +-0.333700440955652 +30 +1.421192459110173 +11 +-1.7521367490001787 +21 +-0.37669237145944223 +31 +1.970411275796931 +12 +-1.7828563212734383 +22 +-0.33370042007355216 +32 +1.9653897982274613 +13 +-1.7828563212734383 +23 +-0.33370042007355216 +33 +1.9653897982274613 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.8720848207106824 +20 +0.03421035611087325 +30 +2.573160274089795 +11 +1.895235130253219 +21 +-0.07232523842382649 +31 +2.815815258934461 +12 +1.8676957602144741 +22 +-0.07591452217505529 +32 +2.573406522256996 +13 +1.8676957602144741 +23 +-0.07591452217505529 +33 +2.573406522256996 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.895235130253219 +20 +-0.07232523842382649 +30 +2.815815258934461 +11 +1.8720848207106824 +21 +0.03421035611087325 +31 +2.573160274089795 +12 +1.8996241907494322 +22 +0.03905660376695963 +32 +2.81556901076726 +13 +1.8996241907494322 +23 +0.03905660376695963 +33 +2.81556901076726 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.6406857800208818 +20 +-0.1001033428773545 +30 +1.0873129661577854 +11 +0.7645649784997064 +21 +-0.31369755519895914 +31 +1.2062883608730788 +12 +0.7770026636877001 +22 +-0.30666149106830126 +32 +1.2221262601239269 +13 +0.7770026636877001 +23 +-0.30666149106830126 +33 +1.2221262601239269 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.6406857800208818 +20 +-0.1001033428773545 +30 +1.0873129661577854 +11 +0.7514924403831034 +21 +-0.31812034010292306 +31 +1.1900482958506116 +12 +0.7645649784997064 +22 +-0.31369755519895914 +32 +1.2062883608730788 +13 +0.7645649784997064 +23 +-0.31369755519895914 +33 +1.2062883608730788 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.6406857800208818 +20 +-0.1001033428773545 +30 +1.0873129661577854 +11 +0.7770026636877001 +21 +-0.30666149106830126 +31 +1.2221262601239269 +12 +0.7820181234396306 +22 +-0.3025385423088175 +32 +1.2286885607611746 +13 +0.7820181234396306 +23 +-0.3025385423088175 +33 +1.2286885607611746 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.9177662874185963 +20 +0.038991896669782256 +30 +2.7096710661911403 +11 +-1.8422019120038722 +21 +0.1503741409608912 +31 +1.9556890484864835 +12 +-1.8465420087821003 +22 +0.03899188499522588 +32 +1.9549796114620632 +13 +-1.8465420087821003 +23 +0.03899188499522588 +33 +1.9549796114620632 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8422019120038722 +20 +0.1503741409608912 +30 +1.9556890484864835 +11 +-1.9177662874185963 +21 +0.038991896669782256 +31 +2.7096710661911403 +12 +-1.9133981428935987 +22 +0.15037415263084852 +32 +2.7100833096854653 +13 +-1.9133981428935987 +23 +0.15037415263084852 +33 +2.7100833096854653 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7696706587222877 +20 +-0.35198670100650886 +30 +2.7811361899186524 +11 +1.767439146332895 +21 +0.42996788604843883 +31 +2.78121228382332 +12 +1.7674390181608894 +22 +-0.3519867006406931 +32 +2.7812122838233124 +13 +1.7674390181608894 +23 +-0.3519867006406931 +33 +2.7812122838233124 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.767439146332895 +20 +0.42996788604843883 +30 +2.78121228382332 +11 +1.7696706587222877 +21 +-0.35198670100650886 +31 +2.7811361899186524 +12 +1.7696707868944743 +22 +0.4299678831142456 +32 +2.7811361899186586 +13 +1.7696707868944743 +23 +0.4299678831142456 +33 +2.7811361899186586 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.4498747685188131 +20 +0.11569951797502342 +30 +1.4551784474179665 +11 +0.8335540250022027 +21 +-0.39135639924089705 +31 +1.9429380045111706 +12 +1.3505091197150552 +22 +0.11569951797502342 +32 +1.3688012067183613 +13 +1.3505091197150552 +23 +0.11569951797502342 +33 +1.3688012067183613 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8335540250022027 +20 +-0.39135639924089705 +30 +1.9429380045111706 +11 +1.4498747685188131 +21 +0.11569951797502342 +31 +1.4551784474179665 +12 +0.9532716741633414 +22 +-0.39135639924089705 +32 +2.0470069692094945 +13 +0.9532716741633414 +23 +-0.39135639924089705 +33 +2.0470069692094945 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.9133981428935987 +20 +0.15037415263084852 +30 +2.7100833096854653 +11 +-1.8294774286062707 +21 +0.2541658788276129 +31 +1.9577690125989091 +12 +-1.8422019120038722 +22 +0.1503741409608912 +32 +1.9556890484864835 +13 +-1.8422019120038722 +23 +0.1503741409608912 +33 +1.9556890484864835 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8294774286062707 +20 +0.2541658788276129 +30 +1.9577690125989091 +11 +-1.9133981428935987 +21 +0.15037415263084852 +31 +2.7100833096854653 +12 +-1.900591427663335 +22 +0.25416589048409133 +32 +2.71129194645555 +13 +-1.900591427663335 +23 +0.25416589048409133 +33 +2.71129194645555 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.5675027400274082 +20 +0.4189168127655707 +30 +3.5817379898496142 +11 +0.500176829057992 +21 +0.4693394935974071 +31 +3.6177054584397785 +12 +0.5001768207931099 +22 +0.41891698771371944 +32 +3.617705458439768 +13 +0.5001768207931099 +23 +0.41891698771371944 +33 +3.617705458439768 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.500176829057992 +20 +0.4693394935974071 +30 +3.6177054584397785 +11 +1.5675027400274082 +21 +0.4189168127655707 +31 +3.5817379898496142 +12 +1.567502748292268 +22 +0.4693393186492294 +32 +3.5817379898496267 +13 +1.567502748292268 +23 +0.4693393186492294 +33 +3.5817379898496267 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5511466302233783 +20 +-0.35198650127506403 +30 +2.822685108166137 +11 +1.7679994781424735 +21 +-0.3519867007325644 +31 +2.786145599142259 +12 +1.7674390181608894 +22 +-0.3519867006406931 +32 +2.7812122838233124 +13 +1.7674390181608894 +23 +-0.3519867006406931 +33 +2.7812122838233124 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7679994781424735 +20 +-0.3519867007325644 +30 +2.786145599142259 +11 +0.5511466302233783 +21 +-0.35198650127506403 +31 +2.822685108166137 +12 +1.5675026165657096 +22 +-0.3519866678686142 +32 +3.387140392775377 +13 +1.5675026165657096 +23 +-0.3519866678686142 +33 +3.387140392775377 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.5675026165657096 +20 +-0.3519866678686142 +30 +3.387140392775377 +11 +0.5511466302233783 +21 +-0.35198650127506403 +31 +2.822685108166137 +12 +0.5001766973314854 +22 +-0.351986492920461 +32 +3.4231078613655503 +13 +0.5001766973314854 +23 +-0.351986492920461 +33 +3.4231078613655503 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.4736623158196023 +20 +0.41891731125080267 +30 +3.1019128637859286 +11 +-1.3438353594874726 +21 +0.42997289595543453 +31 +2.3082689981735225 +12 +-0.4070164569928685 +22 +0.42997157245158046 +32 +2.665229116319892 +13 +-0.4070164569928685 +23 +0.42997157245158046 +33 +2.665229116319892 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.900591427663335 +20 +0.25416589048409133 +30 +2.71129194645555 +11 +-1.8092357111046038 +21 +0.34329386318366695 +31 +1.9610777576823957 +12 +-1.8294774286062707 +22 +0.2541658788276129 +32 +1.9577690125989091 +13 +-1.8294774286062707 +23 +0.2541658788276129 +33 +1.9577690125989091 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8092357111046038 +20 +0.34329386318366695 +30 +1.9610777576823957 +11 +-1.900591427663335 +21 +0.25416589048409133 +31 +2.71129194645555 +12 +-1.8802188982066015 +22 +0.3432938748187082 +32 +2.713214609902885 +13 +-1.8802188982066015 +23 +0.3432938748187082 +33 +2.713214609902885 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8802188982066015 +20 +0.3432938748187082 +30 +2.713214609902885 +11 +-1.7828561990955638 +21 +0.4116841691862121 +31 +1.9653897982274586 +12 +-1.8092357111046038 +22 +0.34329386318366695 +32 +1.9610777576823957 +13 +-1.8092357111046038 +23 +0.34329386318366695 +33 +1.9610777576823957 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7828561990955638 +20 +0.4116841691862121 +30 +1.9653897982274586 +11 +-1.8802188982066015 +21 +0.3432938748187082 +31 +2.713214609902885 +12 +-1.853668908738655 +22 +0.4116841807933129 +32 +2.7157202736909 +13 +-1.853668908738655 +23 +0.4116841807933129 +33 +2.7157202736909 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7681256490688513 +20 +0.42988342156321946 +30 +2.787255060548812 +11 +0.5511467583958203 +21 +0.4299694852427818 +31 +2.8226851081661346 +12 +1.767439146332895 +22 +0.42996788604843883 +32 +2.78121228382332 +13 +1.767439146332895 +23 +0.42996788604843883 +33 +2.78121228382332 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5511467583958203 +20 +0.4299694852427818 +30 +2.8226851081661346 +11 +1.7681256490688513 +21 +0.42988342156321946 +31 +2.787255060548812 +12 +1.5675027400274082 +22 +0.4189168127655707 +32 +3.5817379898496142 +13 +1.5675027400274082 +23 +0.4189168127655707 +33 +3.5817379898496142 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.9133981794075132 +20 +-0.07239036072325872 +30 +2.710083309685462 +11 +-1.8465420087821003 +21 +0.03899188499522588 +31 +1.9549796114620632 +12 +-1.842201948517798 +22 +-0.07239037239321611 +32 +1.95568904848648 +13 +-1.842201948517798 +23 +-0.07239037239321611 +33 +1.95568904848648 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8465420087821003 +20 +0.03899188499522588 +30 +1.9549796114620632 +11 +-1.9133981794075132 +21 +-0.07239036072325872 +31 +2.710083309685462 +12 +-1.9177662874185963 +22 +0.038991896669782256 +32 +2.7096710661911403 +13 +-1.9177662874185963 +23 +0.038991896669782256 +33 +2.7096710661911403 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.853668908738655 +20 +0.4116841807933129 +30 +2.7157202736909 +11 +-1.752136612728405 +21 +0.4546761105014804 +31 +1.970411275796935 +12 +-1.7828561990955638 +22 +0.4116841691862121 +32 +1.9653897982274586 +13 +-1.7828561990955638 +23 +0.4116841691862121 +33 +1.9653897982274586 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.752136612728405 +20 +0.4546761105014804 +30 +1.970411275796935 +11 +-1.853668908738655 +21 +0.4116841807933129 +31 +2.7157202736909 +12 +-1.8227507971658294 +22 +0.45467612207602603 +32 +2.7186381809732287 +13 +-1.8227507971658294 +23 +0.45467612207602603 +33 +2.7186381809732287 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.867776432678417 +20 +0.1443314410364377 +30 +2.5734019981594765 +11 +1.8996241907494322 +21 +0.03905660376695963 +31 +2.81556901076726 +12 +1.8720848207106824 +22 +0.03421035611087325 +32 +2.573160274089795 +13 +1.8720848207106824 +23 +0.03421035611087325 +33 +2.573160274089795 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.8996241907494322 +20 +0.03905660376695963 +30 +2.81556901076726 +11 +1.867776432678417 +21 +0.1443314410364377 +31 +2.5734019981594765 +12 +1.895315802717162 +22 +0.15043460930003982 +32 +2.8158107348369414 +13 +1.895315802717162 +23 +0.15043460930003982 +33 +2.8158107348369414 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7191705821264176 +20 +-0.3913561291414933 +30 +1.975799984992849 +11 +-1.8227509334375986 +21 +-0.3766923598848876 +31 +2.718638180973225 +12 +-1.7521367490001787 +22 +-0.37669237145944223 +32 +1.970411275796931 +13 +-1.7521367490001787 +23 +-0.37669237145944223 +33 +1.970411275796931 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8227509334375986 +20 +-0.3766923598848876 +30 +2.718638180973225 +11 +-1.7191705821264176 +21 +-0.3913561291414933 +31 +1.975799984992849 +12 +-1.7895717227761132 +22 +-0.3913561176018615 +32 +2.721769481190653 +13 +-1.7895717227761132 +23 +-0.3913561176018615 +33 +2.721769481190653 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7828563212734383 +20 +-0.33370042007355216 +30 +1.9653897982274613 +11 +-1.6811959791046571 +21 +-0.2653101264104666 +31 +1.4141378425934237 +12 +-1.65545853255605 +22 +-0.333700440955652 +32 +1.421192459110173 +13 +-1.65545853255605 +23 +-0.333700440955652 +33 +1.421192459110173 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.6811959791046571 +20 +-0.2653101264104666 +30 +1.4141378425934237 +11 +-1.7828563212734383 +21 +-0.33370042007355216 +31 +1.9653897982274613 +12 +-1.8092358108624627 +22 +-0.2653101054231194 +32 +1.9610777576823943 +13 +-1.8092358108624627 +23 +-0.2653101054231194 +33 +1.9610777576823943 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8092358108624627 +20 +-0.2653101054231194 +30 +1.9610777576823943 +11 +-1.7009450104355979 +21 +-0.17618213549941947 +31 +1.4087246449502893 +12 +-1.6811959791046571 +22 +-0.2653101264104666 +32 +1.4141378425934237 +13 +-1.6811959791046571 +23 +-0.2653101264104666 +33 +1.4141378425934237 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7009450104355979 +20 +-0.17618213549941947 +30 +1.4087246449502893 +11 +-1.8092358108624627 +21 +-0.2653101054231194 +31 +1.9610777576823943 +12 +-1.8294774991457239 +22 +-0.17618211443133014 +32 +1.957769012598909 +13 +-1.8294774991457239 +23 +-0.17618211443133014 +33 +1.957769012598909 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.842201948517798 +20 +-0.07239037239321611 +30 +1.95568904848648 +11 +-1.7175941910489623 +21 +0.038991863859061116 +31 +1.404161108238109 +12 +-1.7133597627005268 +22 +-0.07239039351207949 +32 +1.405321766654406 +13 +-1.7133597627005268 +23 +-0.07239039351207949 +33 +1.405321766654406 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7175941910489623 +20 +0.038991863859061116 +30 +1.404161108238109 +11 +-1.842201948517798 +21 +-0.07239037239321611 +31 +1.95568904848648 +12 +-1.8465420087821003 +22 +0.03899188499522588 +32 +1.9549796114620632 +13 +-1.8465420087821003 +23 +0.03899188499522588 +33 +1.9549796114620632 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.2542185240067691 +20 +0.11569951797501443 +30 +1.2790087735671853 +11 +0.6053747201073587 +21 +-0.3913563992408814 +31 +1.7225878111309507 +12 +1.1611202966523455 +22 +0.11569951797501443 +32 +1.1859105462127746 +13 +1.1611202966523455 +23 +0.11569951797501443 +33 +1.1859105462127746 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.6053747201073587 +20 +-0.3913563992408814 +30 +1.7225878111309507 +11 +1.2542185240067691 +21 +0.11569951797501443 +31 +1.2790087735671853 +12 +0.7175412590885892 +22 +-0.3913563992408904 +32 +1.8347543501121704 +13 +0.7175412590885892 +23 +-0.3913563992408904 +33 +1.8347543501121704 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8465420087821003 +20 +0.03899188499522588 +30 +1.9549796114620632 +11 +-1.7133597261865965 +21 +0.15037411984202997 +31 +1.4053217666544113 +12 +-1.7175941910489623 +22 +0.038991863859061116 +32 +1.404161108238109 +13 +-1.7175941910489623 +23 +0.038991863859061116 +33 +1.404161108238109 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7133597261865965 +20 +0.15037411984202997 +30 +1.4053217666544113 +11 +-1.8465420087821003 +21 +0.03899188499522588 +31 +1.9549796114620632 +12 +-1.8422019120038722 +22 +0.1503741409608912 +32 +1.9556890484864835 +13 +-1.8422019120038722 +23 +0.1503741409608912 +33 +1.9556890484864835 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8422019120038722 +20 +0.1503741409608912 +30 +1.9556890484864835 +11 +-1.70094493989614 +21 +0.2541658577595415 +31 +1.4087246449502895 +12 +-1.7133597261865965 +22 +0.15037411984202997 +32 +1.4053217666544113 +13 +-1.7133597261865965 +23 +0.15037411984202997 +33 +1.4053217666544113 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.70094493989614 +20 +0.2541658577595415 +30 +1.4087246449502895 +11 +-1.8422019120038722 +21 +0.1503741409608912 +31 +1.9556890484864835 +12 +-1.8294774286062707 +22 +0.2541658788276129 +32 +1.9577690125989091 +13 +-1.8294774286062707 +23 +0.2541658788276129 +33 +1.9577690125989091 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8294774286062707 +20 +0.2541658788276129 +30 +1.9577690125989091 +11 +-1.6811958793467983 +21 +0.34329384219633086 +31 +1.4141378425934268 +12 +-1.70094493989614 +22 +0.2541658577595415 +32 +1.4087246449502895 +13 +-1.70094493989614 +23 +0.2541658577595415 +33 +1.4087246449502895 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.6811958793467983 +20 +0.34329384219633086 +30 +1.4141378425934268 +11 +-1.8294774286062707 +21 +0.2541658788276129 +31 +1.9577690125989091 +12 +-1.8092357111046038 +22 +0.34329386318366695 +32 +1.9610777576823957 +13 +-1.8092357111046038 +23 +0.34329386318366695 +33 +1.9610777576823957 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5001768207931099 +20 +0.41891698771371944 +30 +3.617705458439768 +11 +0.5511467583958203 +21 +0.4299694852427818 +31 +2.8226851081661346 +12 +1.5675027400274082 +22 +0.4189168127655707 +32 +3.5817379898496142 +13 +1.5675027400274082 +23 +0.4189168127655707 +33 +3.5817379898496142 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.8092357111046038 +20 +0.34329386318366695 +30 +1.9610777576823957 +11 +-1.6554584103781642 +21 +0.4116841483041124 +31 +1.4211924591101657 +12 +-1.6811958793467983 +22 +0.34329384219633086 +32 +1.4141378425934268 +13 +-1.6811958793467983 +23 +0.34329384219633086 +33 +1.4141378425934268 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.6554584103781642 +20 +0.4116841483041124 +30 +1.4211924591101657 +11 +-1.8092357111046038 +21 +0.34329386318366695 +31 +1.9610777576823957 +12 +-1.7828561990955638 +22 +0.4116841691862121 +32 +1.9653897982274586 +13 +-1.7828561990955638 +23 +0.4116841691862121 +33 +1.9653897982274586 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8227507971658294 +20 +0.45467612207602603 +30 +2.7186381809732287 +11 +-1.7191704410475133 +21 +0.4693398573763592 +31 +1.9757999849928503 +12 +-1.752136612728405 +22 +0.4546761105014804 +32 +1.970411275796935 +13 +-1.752136612728405 +23 +0.4546761105014804 +33 +1.970411275796935 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7191704410475133 +20 +0.4693398573763592 +30 +1.9757999849928503 +11 +-1.8227507971658294 +21 +0.45467612207602603 +31 +2.7186381809732287 +12 +-1.7895715816972064 +22 +0.4693398689159888 +32 +2.721769481190647 +13 +-1.7895715816972064 +23 +0.4693398689159888 +33 +2.721769481190647 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7828561990955638 +20 +0.4116841691862121 +30 +1.9653897982274586 +11 +-1.6254864989672675 +21 +0.4546760897419495 +31 +1.4294077340431952 +12 +-1.6554584103781642 +22 +0.4116841483041124 +32 +1.4211924591101657 +13 +-1.6554584103781642 +23 +0.4116841483041124 +33 +1.4211924591101657 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.6254864989672675 +20 +0.4546760897419495 +30 +1.4294077340431952 +11 +-1.7828561990955638 +21 +0.4116841691862121 +31 +1.9653897982274586 +12 +-1.752136612728405 +22 +0.4546761105014804 +32 +1.970411275796935 +13 +-1.752136612728405 +23 +0.4546761105014804 +33 +1.970411275796935 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.752136612728405 +20 +0.4546761105014804 +30 +1.970411275796935 +11 +-1.5933226813458456 +21 +0.4693398367483087 +31 +1.438223809982218 +12 +-1.6254864989672675 +22 +0.4546760897419495 +32 +1.4294077340431952 +13 +-1.6254864989672675 +23 +0.4546760897419495 +33 +1.4294077340431952 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.5933226813458456 +20 +0.4693398367483087 +30 +1.438223809982218 +11 +-1.752136612728405 +21 +0.4546761105014804 +31 +1.970411275796935 +12 +-1.7191704410475133 +22 +0.4693398573763592 +32 +1.9757999849928503 +13 +-1.7191704410475133 +23 +0.4693398573763592 +33 +1.9757999849928503 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.5933228224247524 +20 +-0.39135614976952593 +30 +1.4382238099822164 +11 +-1.7521367490001787 +21 +-0.37669237145944223 +31 +1.970411275796931 +12 +-1.625486635239021 +22 +-0.37669239221898876 +32 +1.4294077340431905 +13 +-1.625486635239021 +23 +-0.37669239221898876 +33 +1.4294077340431905 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7521367490001787 +20 +-0.37669237145944223 +30 +1.970411275796931 +11 +-1.5933228224247524 +21 +-0.39135614976952593 +31 +1.4382238099822164 +12 +-1.7191705821264176 +22 +-0.3913561291414933 +32 +1.975799984992849 +13 +-1.7191705821264176 +23 +-0.3913561291414933 +33 +1.975799984992849 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.4203314900532422 +20 +-0.08234123267425719 +30 +0.7240449027265381 +11 +0.5387999844805174 +21 +-0.27694418478557103 +31 +0.8016767522160716 +12 +0.45563534442351883 +22 +-0.09635017693496095 +32 +0.8188769122878267 +13 +0.45563534442351883 +23 +-0.09635017693496095 +33 +0.8188769122878267 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.45563534442351883 +20 +-0.09635017693496095 +30 +0.8188769122878267 +11 +0.5387999844805174 +21 +-0.27694418478557103 +31 +0.8016767522160716 +12 +0.5928956312949423 +22 +-0.2929528290576049 +32 +0.9561792041941095 +13 +0.5928956312949423 +23 +-0.2929528290576049 +33 +0.9561792041941095 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.3966753060057868 +20 +-0.07337409647306103 +30 +0.659508580082581 +11 +0.5387999844805174 +21 +-0.27694418478557103 +31 +0.8016767522160716 +12 +0.4203314900532422 +22 +-0.08234123267425719 +32 +0.7240449027265381 +13 +0.4203314900532422 +23 +-0.08234123267425719 +33 +0.7240449027265381 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.9017668660717575 +20 +-0.028687052013650738 +30 +1.2298393668802003 +11 +1.0500873483302444 +21 +0.11569952969883424 +31 +1.0651855328987245 +12 +1.0713278635011771 +22 +0.11569951797501443 +32 +1.0896199505044737 +13 +1.0713278635011771 +23 +0.11569951797501443 +33 +1.0896199505044737 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.4971910657083536 +20 +-0.39135639924089705 +30 +1.606575045217334 +11 +0.9017668660717575 +21 +-0.028687052013650738 +31 +1.2298393668802003 +12 +1.0713278635011771 +22 +0.11569951797501443 +32 +1.0896199505044737 +13 +1.0713278635011771 +23 +0.11569951797501443 +33 +1.0896199505044737 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001768207931099 +20 +0.41891698771371944 +30 +3.617705458439768 +11 +-0.4070164569928685 +21 +0.42997157245158046 +31 +2.665229116319892 +12 +0.5511467583958203 +22 +0.4299694852427818 +32 +2.8226851081661346 +13 +0.5511467583958203 +23 +0.4299694852427818 +33 +2.8226851081661346 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.4971910657083536 +20 +-0.39135639924089705 +30 +1.606575045217334 +11 +0.8687347277652708 +21 +-0.044300385349433036 +31 +1.2280956329668686 +12 +0.9017668660717575 +22 +-0.028687052013650738 +32 +1.2298393668802003 +13 +0.9017668660717575 +23 +-0.028687052013650738 +33 +1.2298393668802003 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.4971910657083536 +20 +-0.39135639924089705 +30 +1.606575045217334 +11 +0.39312210101004275 +21 +-0.3913563992408881 +31 +1.4868573960561888 +12 +0.7584040700658974 +22 +-0.07895235839940429 +32 +1.1802472966562991 +13 +0.7584040700658974 +23 +-0.07895235839940429 +33 +1.1802472966562991 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.1068452790069585 +20 +-0.3913563992408881 +30 +1.1069552218670458 +11 +0.02045058279261691 +21 +-0.39135639924089705 +31 +0.9739190561071899 +12 +0.4203314900532422 +22 +-0.08234123267425719 +32 +0.7240449027265381 +13 +0.4203314900532422 +23 +-0.08234123267425719 +33 +0.7240449027265381 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.39312210101004275 +20 +-0.3913563992408881 +30 +1.4868573960561888 +11 +0.29329461801529333 +21 +-0.39135639924089705 +31 +1.3635807211619237 +12 +0.6437434044296662 +22 +-0.09951752352774346 +32 +1.0897797118446357 +13 +0.6437434044296662 +23 +-0.09951752352774346 +33 +1.0897797118446357 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.8488303158904233 +20 +-0.21621663583415707 +30 +1.2727812042605189 +11 +0.6406857800208818 +21 +-0.1001033428773545 +31 +1.0873129661577854 +12 +0.84796506596995 +22 +-0.21887684142438632 +32 +1.272402865095184 +13 +0.84796506596995 +23 +-0.21887684142438632 +33 +1.272402865095184 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.29329461801529333 +20 +-0.39135639924089705 +30 +1.3635807211619237 +11 +0.1978302411349111 +21 +-0.39135639924089705 +31 +1.2368952141735952 +12 +0.5513988760171851 +22 +-0.10471927211351728 +32 +0.9800110958759284 +13 +0.5513988760171851 +23 +-0.10471927211351728 +33 +0.9800110958759284 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.06124858887884144 +20 +-0.39135639924089705 +30 +0.8379488009693535 +11 +0.3650671801086316 +21 +-0.01768427529481076 +31 +0.4316438776974501 +12 +0.3817497804163781 +22 +-0.05607568881768277 +32 +0.5821837592203328 +13 +0.3817497804163781 +23 +-0.05607568881768277 +33 +0.5821837592203328 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.06124858887884144 +20 +-0.39135639924089705 +30 +0.8379488009693535 +11 +-0.13815269815152909 +21 +-0.39135639924089705 +31 +0.6992101152648077 +12 +0.3650671801086316 +22 +-0.01768427529481076 +32 +0.4316438776974501 +13 +0.3650671801086316 +23 +-0.01768427529481076 +33 +0.4316438776974501 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001768207931099 +20 +0.41891698771371944 +30 +3.617705458439768 +11 +-0.4974273518417929 +21 +0.41891715123359774 +31 +3.4602494443357763 +12 +-0.4070164569928685 +22 +0.42997157245158046 +32 +2.665229116319892 +13 +-0.4070164569928685 +23 +0.42997157245158046 +33 +2.665229116319892 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026101124707 +20 +-0.39135666786861645 +30 +3.387140392775373 +11 +0.5001766973314854 +21 +-0.351986492920461 +31 +3.4231078613655503 +12 +0.5001766908782079 +22 +-0.39135649292046104 +32 +3.4231078613655503 +13 +0.5001766908782079 +23 +-0.39135649292046104 +33 +3.4231078613655503 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5001766973314854 +20 +-0.351986492920461 +30 +3.4231078613655503 +11 +1.5675026101124707 +21 +-0.39135666786861645 +31 +3.387140392775373 +12 +1.5675026165657096 +22 +-0.3519866678686142 +32 +3.387140392775377 +13 +1.5675026165657096 +23 +-0.3519866678686142 +33 +3.387140392775377 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.13815269815152909 +20 +-0.39135639924089705 +30 +0.6992101152648077 +11 +0.37878877702084046 +21 +0.038393783699848194 +31 +0.2706184438630661 +12 +0.3650671801086316 +22 +-0.01768427529481076 +32 +0.4316438776974501 +13 +0.3650671801086316 +23 +-0.01768427529481076 +33 +0.4316438776974501 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.13815269815152909 +20 +-0.39135639924089705 +30 +0.6992101152648077 +11 +-0.21016804921447574 +21 +-0.39135639924089705 +31 +0.5578720307110291 +12 +0.37878877702084046 +22 +0.038393783699848194 +32 +0.2706184438630661 +13 +0.37878877702084046 +23 +0.038393783699848194 +33 +0.2706184438630661 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5495724628831538 +20 +-0.10484745230472176 +30 +0.977734224044443 +11 +0.1978302411349111 +21 +-0.39135639924089705 +31 +1.2368952141735952 +12 +0.47725266850529624 +22 +-0.09848891117181602 +32 +0.8571105745168952 +13 +0.47725266850529624 +23 +-0.09848891117181602 +33 +0.8571105745168952 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.1978302411349111 +20 +-0.39135639924089705 +30 +1.2368952141735952 +11 +0.5495724628831538 +21 +-0.10484745230472176 +31 +0.977734224044443 +12 +0.5513988760171851 +22 +-0.10471927211351728 +32 +0.9800110958759284 +13 +0.5513988760171851 +23 +-0.10471927211351728 +33 +0.9800110958759284 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.1978302411349111 +20 +-0.39135639924089705 +30 +1.2368952141735952 +11 +0.1068452790069585 +21 +-0.3913563992408881 +31 +1.1069552218670458 +12 +0.47725266850529624 +22 +-0.09848891117181602 +32 +0.8571105745168952 +13 +0.47725266850529624 +23 +-0.09848891117181602 +33 +0.8571105745168952 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.40683149306505695 +20 +0.08212027273578515 +30 +0.1742805040831692 +11 +0.4285775499251552 +21 +0.11569951797502342 +31 +0.0998712621479301 +12 +0.4353642452976316 +22 +0.11569951797503464 +32 +0.11442537734154945 +13 +0.4353642452976316 +23 +0.11569951797503464 +33 +0.11442537734154945 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.21016804921447574 +20 +-0.39135639924089705 +30 +0.5578720307110291 +11 +-0.27720690245551616 +21 +-0.3913563992408904 +31 +0.4141067459925812 +12 +0.4285775499251552 +22 +0.11569951797502342 +32 +0.0998712621479301 +13 +0.4285775499251552 +23 +0.11569951797502342 +33 +0.0998712621479301 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.02045058279261691 +20 +-0.39135639924089705 +30 +0.9739190561071899 +11 +-0.06124858887884144 +21 +-0.39135639924089705 +31 +0.8379488009693535 +12 +0.3817497804163781 +22 +-0.05607568881768277 +32 +0.5821837592203328 +13 +0.3817497804163781 +23 +-0.05607568881768277 +33 +0.5821837592203328 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.552194408681052 +20 +0.11569951797501443 +30 +1.538035258303604 +11 +0.9532716741633414 +21 +-0.39135639924089705 +31 +2.0470069692094945 +12 +1.4498747685188131 +22 +0.11569951797502342 +32 +1.4551784474179665 +13 +1.4498747685188131 +23 +0.11569951797502342 +33 +1.4551784474179665 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.9532716741633414 +20 +-0.39135639924089705 +30 +2.0470069692094945 +11 +1.552194408681052 +21 +0.11569951797501443 +31 +1.538035258303604 +12 +1.076548349057601 +22 +-0.39135639924089705 +32 +2.146834452204238 +13 +1.076548349057601 +23 +-0.39135639924089705 +33 +2.146834452204238 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.84796506596995 +20 +-0.21887684142438632 +30 +1.272402865095184 +11 +0.6406857800208818 +21 +-0.1001033428773545 +31 +1.0873129661577854 +12 +0.8396041535634804 +22 +-0.23777977037520193 +32 +1.2678971062030804 +13 +0.8396041535634804 +23 +-0.23777977037520193 +33 +1.2678971062030804 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.8396041535634804 +20 +-0.23777977037520193 +30 +1.2678971062030804 +11 +0.6406857800208818 +21 +-0.1001033428773545 +31 +1.0873129661577854 +12 +0.82950587120676 +22 +-0.25533499270842597 +32 +1.2617959663934535 +13 +0.82950587120676 +23 +-0.25533499270842597 +33 +1.2617959663934535 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.82950587120676 +20 +-0.25533499270842597 +30 +1.2617959663934535 +11 +0.6406857800208818 +21 +-0.1001033428773545 +31 +1.0873129661577854 +12 +0.8178385648700359 +22 +-0.27124984964993776 +32 +1.2542011562606892 +13 +0.8178385648700359 +23 +-0.27124984964993776 +33 +1.2542011562606892 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.8178385648700359 +20 +-0.27124984964993776 +30 +1.2542011562606892 +11 +0.6406857800208818 +21 +-0.1001033428773545 +31 +1.0873129661577854 +12 +0.8047967373346043 +22 +-0.2852590285516704 +32 +1.245239287008058 +13 +0.8047967373346043 +23 +-0.2852590285516704 +33 +1.245239287008058 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.8047967373346043 +20 +-0.2852590285516704 +30 +1.245239287008058 +11 +0.6406857800208818 +21 +-0.1001033428773545 +31 +1.0873129661577854 +12 +0.7905978056850744 +22 +-0.2971289858534024 +32 +1.2350597597436686 +13 +0.7905978056850744 +23 +-0.2971289858534024 +33 +1.2350597597436686 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.7905978056850744 +20 +-0.2971289858534024 +30 +1.2350597597436686 +11 +0.6406857800208818 +21 +-0.1001033428773545 +31 +1.0873129661577854 +12 +0.7820181234396306 +22 +-0.3025385423088175 +32 +1.2286885607611746 +13 +0.7820181234396306 +23 +-0.3025385423088175 +33 +1.2286885607611746 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.45563534442351883 +20 +-0.09635017693496095 +30 +0.8188769122878267 +11 +0.5928956312949423 +21 +-0.2929528290576049 +31 +0.9561792041941095 +12 +0.47725266850529624 +22 +-0.09848891117181602 +32 +0.8571105745168952 +13 +0.47725266850529624 +23 +-0.09848891117181602 +33 +0.8571105745168952 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.538904362268551 +20 +-0.10552659486033339 +30 +0.9648346235437796 +11 +0.5928956312949423 +21 +-0.2929528290576049 +31 +0.9561792041941095 +12 +0.6829285253868831 +22 +-0.3118173806673699 +32 +1.1089028616100112 +13 +0.6829285253868831 +23 +-0.3118173806673699 +33 +1.1089028616100112 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940743769374797 +20 +0.11569951797502342 +30 +1.5695940780014193 +11 +1.076548349057601 +21 +-0.39135639924089705 +31 +2.146834452204238 +12 +1.552194408681052 +22 +0.11569951797501443 +32 +1.538035258303604 +13 +1.552194408681052 +23 +0.11569951797501443 +33 +1.538035258303604 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.076548349057601 +20 +-0.39135639924089705 +30 +2.146834452204238 +11 +1.5940743769374797 +21 +0.11569951797502342 +31 +1.5695940780014193 +12 +1.6208444899815906 +22 +0.07494508113197806 +32 +1.667507102739093 +13 +1.6208444899815906 +23 +0.07494508113197806 +33 +1.667507102739093 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.076548349057601 +20 +-0.39135639924089705 +30 +2.146834452204238 +11 +1.6208444899815906 +21 +0.07494508113197806 +31 +1.667507102739093 +12 +1.2032338560459321 +22 +-0.39135639924089705 +32 +2.2422988290846195 +13 +1.2032338560459321 +23 +-0.39135639924089705 +33 +2.2422988290846195 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.36578346365589165 +20 +-0.037793429241581966 +30 +0.49733142365469324 +11 +0.5243281138766716 +21 +-0.2648824105028663 +31 +0.6559245924507474 +12 +0.3817497804163781 +22 +-0.05607568881768277 +32 +0.5821837592203328 +13 +0.3817497804163781 +23 +-0.05607568881768277 +33 +0.5821837592203328 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.4974273518417929 +20 +0.41891715123359774 +30 +3.4602494443357763 +11 +-1.4736623158196023 +21 +0.41891731125080267 +31 +3.1019128637859286 +12 +-0.4070164569928685 +22 +0.42997157245158046 +32 +2.665229116319892 +13 +-0.4070164569928685 +23 +0.42997157245158046 +33 +2.665229116319892 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.1611202966523455 +20 +0.11569951797501443 +30 +1.1859105462127746 +11 +0.4971910657083536 +21 +-0.39135639924089705 +31 +1.606575045217334 +12 +1.0713278635011771 +22 +0.11569951797501443 +32 +1.0896199505044737 +13 +1.0713278635011771 +23 +0.11569951797501443 +33 +1.0896199505044737 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.4971910657083536 +20 +-0.39135639924089705 +30 +1.606575045217334 +11 +1.1611202966523455 +21 +0.11569951797501443 +31 +1.1859105462127746 +12 +0.6053747201073587 +22 +-0.3913563992408814 +32 +1.7225878111309507 +13 +0.6053747201073587 +23 +-0.3913563992408814 +33 +1.7225878111309507 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.3817497804163781 +20 +-0.05607568881768277 +30 +0.5821837592203328 +11 +0.5243281138766716 +21 +-0.2648824105028663 +31 +0.6559245924507474 +12 +0.3966753060057868 +22 +-0.07337409647306103 +32 +0.659508580082581 +13 +0.3966753060057868 +23 +-0.07337409647306103 +33 +0.659508580082581 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.6903109494372404 +20 +-0.09112388712480801 +30 +1.1269513721715114 +11 +0.7556951133309526 +21 +-0.07922417161832584 +31 +1.1782818075904975 +12 +0.7589811239628956 +22 +-0.07796090531019828 +32 +1.1798646699340118 +13 +0.7589811239628956 +23 +-0.07796090531019828 +33 +1.1798646699340118 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7556951133309526 +20 +-0.07922417161832584 +30 +1.1782818075904975 +11 +0.6903109494372404 +21 +-0.09112388712480801 +31 +1.1269513721715114 +12 +0.7535113909177122 +22 +-0.07968804570622262 +32 +1.177433109344653 +13 +0.7535113909177122 +23 +-0.07968804570622262 +33 +1.177433109344653 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.3966753060057868 +20 +-0.07337409647306103 +30 +0.659508580082581 +11 +0.5243281138766716 +21 +-0.2648824105028663 +31 +0.6559245924507474 +12 +0.5387999844805174 +22 +-0.27694418478557103 +32 +0.8016767522160716 +13 +0.5387999844805174 +23 +-0.27694418478557103 +33 +0.8016767522160716 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.8294774991457239 +20 +-0.17618211443133014 +30 +1.957769012598909 +11 +-1.7133597627005268 +21 +-0.07239039351207949 +31 +1.405321766654406 +12 +-1.7009450104355979 +22 +-0.17618213549941947 +32 +1.4087246449502893 +13 +-1.7009450104355979 +23 +-0.17618213549941947 +33 +1.4087246449502893 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7133597627005268 +20 +-0.07239039351207949 +30 +1.405321766654406 +11 +-1.8294774991457239 +21 +-0.17618211443133014 +31 +1.957769012598909 +12 +-1.842201948517798 +22 +-0.07239037239321611 +32 +1.95568904848648 +13 +-1.842201948517798 +23 +-0.07239037239321611 +33 +1.95568904848648 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.36578346365589165 +20 +-0.037793429241581966 +30 +0.49733142365469324 +11 +0.550466253549162 +21 +-0.25758949619382754 +31 +0.5288554937193 +12 +0.5243281138766716 +22 +-0.2648824105028663 +32 +0.6559245924507474 +13 +0.5243281138766716 +23 +-0.2648824105028663 +33 +0.6559245924507474 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.6406857800208818 +20 +-0.1001033428773545 +30 +1.0873129661577854 +11 +0.6829285253868831 +21 +-0.3118173806673699 +31 +1.1089028616100112 +12 +0.7243214720116329 +22 +-0.31887594209924797 +32 +1.1574467960018582 +13 +0.7243214720116329 +23 +-0.31887594209924797 +33 +1.1574467960018582 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.9133981794075132 +20 +-0.07239036072325872 +30 +2.710083309685462 +11 +-1.9133981428935987 +21 +0.15037415263084852 +31 +2.7100833096854653 +12 +-1.9177662874185963 +22 +0.038991896669782256 +32 +2.7096710661911403 +13 +-1.9177662874185963 +23 +0.038991896669782256 +33 +2.7096710661911403 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.9133981428935987 +20 +0.15037415263084852 +30 +2.7100833096854653 +11 +-1.9133981794075132 +21 +-0.07239036072325872 +31 +2.710083309685462 +12 +-1.900591498202793 +22 +-0.17618210277485175 +32 +2.7112919464555496 +13 +-1.900591498202793 +23 +-0.17618210277485175 +33 +2.7112919464555496 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.9133981428935987 +20 +0.15037415263084852 +30 +2.7100833096854653 +11 +-1.900591498202793 +21 +-0.17618210277485175 +31 +2.7112919464555496 +12 +-1.900591427663335 +22 +0.25416589048409133 +32 +2.71129194645555 +13 +-1.900591427663335 +23 +0.25416589048409133 +33 +2.71129194645555 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.900591427663335 +20 +0.25416589048409133 +30 +2.71129194645555 +11 +-1.900591498202793 +21 +-0.17618210277485175 +31 +2.7112919464555496 +12 +-1.8802189979644603 +22 +-0.265310093788087 +32 +2.713214609902889 +13 +-1.8802189979644603 +23 +-0.265310093788087 +33 +2.713214609902889 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.900591427663335 +20 +0.25416589048409133 +30 +2.71129194645555 +11 +-1.8802189979644603 +21 +-0.265310093788087 +31 +2.713214609902889 +12 +-1.8802188982066015 +22 +0.3432938748187082 +32 +2.713214609902885 +13 +-1.8802188982066015 +23 +0.3432938748187082 +33 +2.713214609902885 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.8802188982066015 +20 +0.3432938748187082 +30 +2.713214609902885 +11 +-1.8802189979644603 +21 +-0.265310093788087 +31 +2.713214609902889 +12 +-1.8536690309165451 +22 +-0.3337004084664514 +32 +2.7157202736909 +13 +-1.8536690309165451 +23 +-0.3337004084664514 +33 +2.7157202736909 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.8802188982066015 +20 +0.3432938748187082 +30 +2.713214609902885 +11 +-1.8536690309165451 +21 +-0.3337004084664514 +31 +2.7157202736909 +12 +-1.853668908738655 +22 +0.4116841807933129 +32 +2.7157202736909 +13 +-1.853668908738655 +23 +0.4116841807933129 +33 +2.7157202736909 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.853668908738655 +20 +0.4116841807933129 +30 +2.7157202736909 +11 +-1.8536690309165451 +21 +-0.3337004084664514 +31 +2.7157202736909 +12 +-1.8227509334375986 +22 +-0.3766923598848876 +32 +2.718638180973225 +13 +-1.8227509334375986 +23 +-0.3766923598848876 +33 +2.718638180973225 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.853668908738655 +20 +0.4116841807933129 +30 +2.7157202736909 +11 +-1.8227509334375986 +21 +-0.3766923598848876 +31 +2.718638180973225 +12 +-1.8227507971658294 +22 +0.45467612207602603 +32 +2.7186381809732287 +13 +-1.8227507971658294 +23 +0.45467612207602603 +33 +2.7186381809732287 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.8227507971658294 +20 +0.45467612207602603 +30 +2.7186381809732287 +11 +-1.8227509334375986 +21 +-0.3766923598848876 +31 +2.718638180973225 +12 +-1.7895717227761132 +22 +-0.3913561176018615 +32 +2.721769481190653 +13 +-1.7895717227761132 +23 +-0.3913561176018615 +33 +2.721769481190653 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.8227507971658294 +20 +0.45467612207602603 +30 +2.7186381809732287 +11 +-1.7895717227761132 +21 +-0.3913561176018615 +31 +2.721769481190653 +12 +-1.7895717163228786 +22 +-0.3519861176018548 +32 +2.721769481190651 +13 +-1.7895717163228786 +23 +-0.3519861176018548 +33 +2.721769481190651 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.8227507971658294 +20 +0.45467612207602603 +30 +2.7186381809732287 +11 +-1.7895717163228786 +21 +-0.3519861176018548 +31 +2.721769481190651 +12 +-1.7895715899620932 +22 +0.41891736303231675 +32 +2.7217694811906528 +13 +-1.7895715899620932 +23 +0.41891736303231675 +33 +2.7217694811906528 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.8227507971658294 +20 +0.45467612207602603 +30 +2.7186381809732287 +11 +-1.7895715899620932 +21 +0.41891736303231675 +31 +2.7217694811906528 +12 +-1.7895715816972064 +22 +0.4693398689159888 +32 +2.721769481190647 +13 +-1.7895715816972064 +23 +0.4693398689159888 +33 +2.721769481190647 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.6406857800208818 +20 +-0.1001033428773545 +30 +1.0873129661577854 +11 +0.7243214720116329 +21 +-0.31887594209924797 +31 +1.1574467960018582 +12 +0.7380029783911015 +22 +-0.3198561146257471 +32 +1.1736767991681007 +13 +0.7380029783911015 +23 +-0.3198561146257471 +33 +1.1736767991681007 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.8536690309165451 +20 +-0.3337004084664514 +30 +2.7157202736909 +11 +-1.8092358108624627 +21 +-0.2653101054231194 +31 +1.9610777576823943 +12 +-1.7828563212734383 +22 +-0.33370042007355216 +32 +1.9653897982274613 +13 +-1.7828563212734383 +23 +-0.33370042007355216 +33 +1.9653897982274613 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8092358108624627 +20 +-0.2653101054231194 +30 +1.9610777576823943 +11 +-1.8536690309165451 +21 +-0.3337004084664514 +31 +2.7157202736909 +12 +-1.8802189979644603 +22 +-0.265310093788087 +32 +2.713214609902889 +13 +-1.8802189979644603 +23 +-0.265310093788087 +33 +2.713214609902889 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.6406857800208818 +20 +-0.1001033428773545 +30 +1.0873129661577854 +11 +0.7380029783911015 +21 +-0.3198561146257471 +31 +1.1736767991681007 +12 +0.7514924403831034 +22 +-0.31812034010292306 +32 +1.1900482958506116 +13 +0.7514924403831034 +23 +-0.31812034010292306 +33 +1.1900482958506116 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.8802189979644603 +20 +-0.265310093788087 +30 +2.713214609902889 +11 +-1.8294774991457239 +21 +-0.17618211443133014 +31 +1.957769012598909 +12 +-1.8092358108624627 +22 +-0.2653101054231194 +32 +1.9610777576823943 +13 +-1.8092358108624627 +23 +-0.2653101054231194 +33 +1.9610777576823943 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8294774991457239 +20 +-0.17618211443133014 +30 +1.957769012598909 +11 +-1.8802189979644603 +21 +-0.265310093788087 +31 +2.713214609902889 +12 +-1.900591498202793 +22 +-0.17618210277485175 +32 +2.7112919464555496 +13 +-1.900591498202793 +23 +-0.17618210277485175 +33 +2.7112919464555496 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.900591498202793 +20 +-0.17618210277485175 +30 +2.7112919464555496 +11 +-1.842201948517798 +21 +-0.07239037239321611 +31 +1.95568904848648 +12 +-1.8294774991457239 +22 +-0.17618211443133014 +32 +1.957769012598909 +13 +-1.8294774991457239 +23 +-0.17618211443133014 +33 +1.957769012598909 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.842201948517798 +20 +-0.07239037239321611 +30 +1.95568904848648 +11 +-1.900591498202793 +21 +-0.17618210277485175 +31 +2.7112919464555496 +12 +-1.9133981794075132 +22 +-0.07239036072325872 +32 +2.710083309685462 +13 +-1.9133981794075132 +23 +-0.07239036072325872 +33 +2.710083309685462 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.8227509334375986 +20 +-0.3766923598848876 +30 +2.718638180973225 +11 +-1.7828563212734383 +21 +-0.33370042007355216 +31 +1.9653897982274613 +12 +-1.7521367490001787 +22 +-0.37669237145944223 +32 +1.970411275796931 +13 +-1.7521367490001787 +23 +-0.37669237145944223 +33 +1.970411275796931 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7828563212734383 +20 +-0.33370042007355216 +30 +1.9653897982274613 +11 +-1.8227509334375986 +21 +-0.3766923598848876 +31 +2.718638180973225 +12 +-1.8536690309165451 +22 +-0.3337004084664514 +32 +2.7157202736909 +13 +-1.8536690309165451 +23 +-0.3337004084664514 +33 +2.7157202736909 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.886816064498108 +20 +-0.07019890877981821 +30 +1.24618250303494 +11 +0.8687347277652708 +21 +-0.044300385349433036 +31 +1.2280956329668686 +12 +0.7626223302383062 +22 +-0.07769244209007636 +32 +1.1819181088261714 +13 +0.7626223302383062 +23 +-0.07769244209007636 +33 +1.1819181088261714 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.8651868766935726 +20 +-0.17830415189829452 +30 +1.2693730886615773 +11 +0.7535113909177122 +21 +-0.07968804570622262 +31 +1.177433109344653 +12 +0.8574638271061679 +22 +-0.19894064093252234 +32 +1.2718639004818764 +13 +0.8574638271061679 +23 +-0.19894064093252234 +33 +1.2718639004818764 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.8574638271061679 +20 +-0.19894064093252234 +30 +1.2718639004818764 +11 +0.7535113909177122 +21 +-0.07968804570622262 +31 +1.177433109344653 +12 +0.8488303158904233 +22 +-0.21621663583415707 +32 +1.2727812042605189 +13 +0.8488303158904233 +23 +-0.21621663583415707 +33 +1.2727812042605189 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.550466253549162 +20 +-0.25758949619382754 +30 +0.5288554937193 +11 +0.3919244872289036 +21 +0.06457671434803919 +31 +0.2055519607021757 +12 +0.6154331324746154 +22 +-0.25556244191651595 +32 +0.4291290051087077 +13 +0.6154331324746154 +23 +-0.25556244191651595 +33 +0.4291290051087077 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.550466253549162 +20 +-0.25758949619382754 +30 +0.5288554937193 +11 +0.37878877702084046 +21 +0.038393783699848194 +31 +0.2706184438630661 +12 +0.3919244872289036 +22 +0.06457671434803919 +32 +0.2055519607021757 +13 +0.3919244872289036 +23 +0.06457671434803919 +33 +0.2055519607021757 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.550466253549162 +20 +-0.25758949619382754 +30 +0.5288554937193 +11 +0.3644662888731871 +21 +0.008824680721530365 +31 +0.34279860846433485 +12 +0.37878877702084046 +22 +0.038393783699848194 +32 +0.2706184438630661 +13 +0.37878877702084046 +23 +0.038393783699848194 +33 +0.2706184438630661 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7118929082438779 +20 +-0.24734376719524606 +30 +2.311349794128884 +11 +1.4662100141123353 +21 +-0.39135639924083887 +31 +2.419678487426912 +12 +1.6812373623290522 +22 +-0.12503999284416611 +32 +2.075562797387576 +13 +1.6812373623290522 +23 +-0.12503999284416611 +33 +2.075562797387576 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.4662100141123353 +20 +-0.39135639924083887 +30 +2.419678487426912 +11 +1.7118929082438779 +21 +-0.24734376719524606 +31 +2.311349794128884 +12 +1.6021802692501754 +22 +-0.3913563992408456 +32 +2.5013776590983654 +13 +1.6021802692501754 +23 +-0.3913563992408456 +33 +2.5013776590983654 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7290602943681443 +20 +-0.3176883359983307 +30 +2.443392671427686 +11 +1.6021802692501754 +21 +-0.3913563992408456 +31 +2.5013776590983654 +12 +1.7118929082438779 +22 +-0.24734376719524606 +32 +2.311349794128884 +13 +1.7118929082438779 +23 +-0.24734376719524606 +33 +2.311349794128884 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.6021802692501754 +20 +-0.3913563992408456 +30 +2.5013776590983654 +11 +1.7290602943681443 +21 +-0.3176883359983307 +31 +2.443392671427686 +12 +1.7437745197997272 +22 +-0.3873643428597891 +32 +2.572911231993639 +13 +1.7437745197997272 +23 +-0.3873643428597891 +33 +2.572911231993639 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.6021802692501754 +20 +-0.3913563992408456 +30 +2.5013776590983654 +11 +1.7437745197997272 +21 +-0.3873643428597891 +31 +2.572911231993639 +12 +1.7409189549547188 +22 +-0.39135639924089705 +32 +2.578281768371061 +13 +1.7409189549547188 +23 +-0.39135639924089705 +33 +2.578281768371061 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.6812373623290522 +20 +-0.12503999284416611 +30 +2.075562797387576 +11 +1.3331738483524822 +21 +-0.39135639924089705 +31 +2.3332837912125775 +12 +1.6530814000858174 +22 +-0.015885077497869327 +32 +1.8590013414803237 +13 +1.6530814000858174 +23 +-0.015885077497869327 +33 +1.8590013414803237 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.3331738483524822 +20 +-0.39135639924089705 +30 +2.3332837912125775 +11 +1.6812373623290522 +21 +-0.12503999284416611 +31 +2.075562797387576 +12 +1.4662100141123353 +22 +-0.39135639924083887 +32 +2.419678487426912 +13 +1.4662100141123353 +23 +-0.39135639924083887 +33 +2.419678487426912 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.634839673189293 +20 +0.05269022449133848 +30 +1.7186951844850438 +11 +1.2032338560459321 +21 +-0.39135639924089705 +31 +2.2422988290846195 +12 +1.6208444899815906 +22 +0.07494508113197806 +32 +1.667507102739093 +13 +1.6208444899815906 +23 +0.07494508113197806 +33 +1.667507102739093 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.2032338560459321 +20 +-0.39135639924089705 +30 +2.2422988290846195 +11 +1.634839673189293 +21 +0.05269022449133848 +31 +1.7186951844850438 +12 +1.6530814000858174 +22 +-0.015885077497869327 +32 +1.8590013414803237 +13 +1.6530814000858174 +23 +-0.015885077497869327 +33 +1.8590013414803237 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.2032338560459321 +20 +-0.39135639924089705 +30 +2.2422988290846195 +11 +1.6530814000858174 +21 +-0.015885077497869327 +31 +1.8590013414803237 +12 +1.3331738483524822 +22 +-0.39135639924089705 +32 +2.3332837912125775 +13 +1.3331738483524822 +23 +-0.39135639924089705 +33 +2.3332837912125775 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.772154666688709 +20 +-0.3913567014136412 +30 +2.822720712115689 +11 +1.7926934652283346 +21 +-0.3519867047802352 +31 +3.166557627574764 +12 +1.7926934587751069 +22 +-0.3913567047802016 +32 +3.1665576275747647 +13 +1.7926934587751069 +23 +-0.3913567047802016 +33 +3.1665576275747647 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7926934652283346 +20 +-0.3519867047802352 +30 +3.166557627574764 +11 +1.772154666688709 +21 +-0.3913567014136412 +31 +2.822720712115689 +12 +1.7721546731419455 +22 +-0.3519867014136748 +32 +2.8227207121156908 +13 +1.7721546731419455 +23 +-0.3519867014136748 +33 +2.8227207121156908 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7674390181608894 +20 +-0.3519867006406931 +30 +2.7812122838233124 +11 +0.5511467583958203 +21 +0.4299694852427818 +31 +2.8226851081661346 +12 +0.5511466302233783 +22 +-0.35198650127506403 +32 +2.822685108166137 +13 +0.5511466302233783 +23 +-0.35198650127506403 +33 +2.822685108166137 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5511467583958203 +20 +0.4299694852427818 +30 +2.8226851081661346 +11 +1.7674390181608894 +21 +-0.3519867006406931 +31 +2.7812122838233124 +12 +1.767439146332895 +22 +0.42996788604843883 +32 +2.78121228382332 +13 +1.767439146332895 +23 +0.42996788604843883 +33 +2.78121228382332 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7679994781424735 +20 +-0.3519867007325644 +30 +2.786145599142259 +11 +1.7721548011833212 +21 +0.429174626495198 +31 +2.82272071211574 +12 +1.7721546731419455 +22 +-0.3519867014136748 +32 +2.8227207121156908 +13 +1.7721546731419455 +23 +-0.3519867014136748 +33 +2.8227207121156908 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7721548011833212 +20 +0.429174626495198 +30 +2.82272071211574 +11 +1.7679994781424735 +21 +-0.3519867007325644 +31 +2.786145599142259 +12 +1.7674390181608894 +22 +-0.3519867006406931 +32 +2.7812122838233124 +13 +1.7674390181608894 +23 +-0.3519867006406931 +33 +2.7812122838233124 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.7721548011833212 +20 +0.429174626495198 +30 +2.82272071211574 +11 +1.7674390181608894 +21 +-0.3519867006406931 +31 +2.7812122838233124 +12 +1.767439146332895 +22 +0.42996788604843883 +32 +2.78121228382332 +13 +1.767439146332895 +23 +0.42996788604843883 +33 +2.78121228382332 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.7721548011833212 +20 +0.429174626495198 +30 +2.82272071211574 +11 +1.767439146332895 +21 +0.42996788604843883 +31 +2.78121228382332 +12 +1.7681256490688513 +22 +0.42988342156321946 +32 +2.787255060548812 +13 +1.7681256490688513 +23 +0.42988342156321946 +33 +2.787255060548812 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7604022996639854 +20 +0.4693398641347575 +30 +2.906434883050858 +11 +-1.7895715899620932 +21 +0.41891736303231675 +31 +2.7217694811906528 +12 +-1.7604023079288675 +22 +0.418917358251119 +32 +2.9064348830508573 +13 +-1.7604023079288675 +23 +0.418917358251119 +33 +2.9064348830508573 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7895715899620932 +20 +0.41891736303231675 +30 +2.7217694811906528 +11 +-1.7604022996639854 +21 +0.4693398641347575 +31 +2.906434883050858 +12 +-1.7895715816972064 +22 +0.4693398689159888 +32 +2.721769481190647 +13 +-1.7895715816972064 +23 +0.4693398689159888 +33 +2.721769481190647 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.8042763848132697 +20 +0.4693392798390309 +30 +3.3604633371264394 +11 +1.7721548077676246 +21 +0.4693392851041711 +31 +2.8227207121156974 +12 +1.2851012666870065 +22 +0.5693393649383878 +32 +2.603406296512527 +13 +1.2851012666870065 +23 +0.5693393649383878 +33 +2.603406296512527 +70 +0 + 0 +LINE + 8 +palm +10 +1.7681256490688513 +20 +0.42988342156321946 +30 +2.787255060548812 +11 +1.7696707868944743 +21 +0.4299678831142456 +31 +2.7811361899186586 + 0 +3DFACE + 8 +palm +10 +-1.2344292513491493 +20 +0.5693397779211644 +30 +2.1309506849853554 +11 +-1.5933226813458456 +21 +0.4693398367483087 +31 +1.438223809982218 +12 +-1.7191704438325688 +22 +0.4523487095976748 +32 +1.9757999849928511 +13 +-1.7191704438325688 +23 +0.4523487095976748 +33 +1.9757999849928511 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.2851012666870065 +20 +0.5693393649383878 +30 +2.603406296512527 +11 +1.7446154379169838 +21 +0.46077168557314707 +31 +2.580311975438233 +12 +1.7290604211742295 +22 +0.45593246326086423 +32 +2.4433926714277017 +13 +1.7290604211742295 +23 +0.45593246326086423 +33 +2.4433926714277017 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7446154379169838 +20 +0.46077168557314707 +30 +2.580311975438233 +11 +1.2851012666870065 +21 +0.5693393649383878 +31 +2.603406296512527 +12 +1.7721548077676246 +22 +0.4693392851041711 +32 +2.8227207121156974 +13 +1.7721548077676246 +23 +0.4693392851041711 +33 +2.8227207121156974 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8543131342530239 +20 +0.11569941919431881 +30 +0.11448043149811093 +11 +0.9877718590248896 +21 +-0.28063215797614327 +31 +0.3500300359004508 +12 +0.7110686274472025 +22 +0.11569944251109132 +32 +0.07324212630582012 +13 +0.7110686274472025 +23 +0.11569944251109132 +33 +0.07324212630582012 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.9877718590248896 +20 +-0.28063215797614327 +30 +0.3500300359004508 +11 +0.8543131342530239 +21 +0.11569941919431881 +31 +0.11448043149811093 +12 +1.1427716320422368 +22 +-0.29746965530859 +32 +0.4030272047057251 +13 +1.1427716320422368 +23 +-0.29746965530859 +33 +0.4030272047057251 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.1213215446161924 +20 +0.11569939211025415 +30 +0.2942344834828935 +11 +1.4027036824022836 +21 +-0.2851219813292338 +31 +0.5760050453303628 +12 +1.401838376859889 +22 +-0.28609456039556413 +32 +0.5748371607993987 +13 +1.401838376859889 +23 +-0.28609456039556413 +33 +0.5748371607993987 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.4027036824022836 +20 +-0.2851219813292338 +30 +0.5760050453303628 +11 +1.1213215446161924 +21 +0.11569939211025415 +31 +0.2942344834828935 +12 +1.4120521182246126 +22 +-0.27111364899581186 +32 +0.5891009093839078 +13 +1.4120521182246126 +23 +-0.27111364899581186 +33 +0.5891009093839078 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.4120521182246126 +20 +-0.27111364899581186 +30 +0.5891009093839078 +11 +1.1213215446161924 +21 +0.11569939211025415 +31 +0.2942344834828935 +12 +1.4200331617217834 +22 +-0.2551996369886165 +32 +0.6008217350052182 +13 +1.4200331617217834 +23 +-0.2551996369886165 +33 +0.6008217350052182 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.4200331617217834 +20 +-0.2551996369886165 +30 +0.6008217350052182 +11 +1.1213215446161924 +21 +0.11569939211025415 +31 +0.2942344834828935 +12 +1.4265137628895357 +22 +-0.23764524386994787 +32 +0.6109721272062122 +13 +1.4265137628895357 +23 +-0.23764524386994787 +33 +0.6109721272062122 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.4265137628895357 +20 +-0.23764524386994787 +30 +0.6109721272062122 +11 +1.1213215446161924 +21 +0.11569939211025415 +31 +0.2942344834828935 +12 +1.4313858852268917 +22 +-0.2187431145903824 +32 +0.6193828713063506 +13 +1.4313858852268917 +23 +-0.2187431145903824 +33 +0.6193828713063506 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.4313858852268917 +20 +-0.2187431145903824 +30 +0.6193828713063506 +11 +1.1213215446161924 +21 +0.11569939211025415 +31 +0.2942344834828935 +12 +1.4345683067862047 +22 +-0.19880836187696824 +32 +0.6259137538687718 +13 +1.4345683067862047 +23 +-0.19880836187696824 +33 +0.6259137538687718 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.4345683067862047 +20 +-0.19880836187696824 +30 +0.6259137538687718 +11 +1.1213215446161924 +21 +0.11569939211025415 +31 +0.2942344834828935 +12 +1.4356492647298522 +22 +-0.1833147696377279 +32 +0.6293241728716591 +13 +1.4356492647298522 +23 +-0.1833147696377279 +33 +0.6293241728716591 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.4356492647298522 +20 +-0.1833147696377279 +30 +0.6293241728716591 +11 +1.1213215446161924 +21 +0.11569939211025415 +31 +0.2942344834828935 +12 +1.226889266259492 +22 +0.11569939018870201 +32 +0.4205002886903231 +13 +1.226889266259492 +23 +0.11569939018870201 +33 +0.4205002886903231 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7721548077676246 +20 +0.4693392851041711 +30 +2.8227207121156974 +11 +1.7776419675782986 +21 +0.44515366198423323 +31 +2.578459014679979 +12 +1.7446154379169838 +22 +0.46077168557314707 +32 +2.580311975438233 +13 +1.7446154379169838 +23 +0.46077168557314707 +33 +2.580311975438233 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.1213215446161924 +20 +0.11569939211025415 +30 +0.2942344834828935 +11 +1.296235511599156 +21 +-0.31685524573416857 +31 +0.491941973587031 +12 +0.9942427643243386 +22 +0.11569940200353146 +32 +0.18985680907938893 +13 +0.9942427643243386 +23 +0.11569940200353146 +33 +0.18985680907938893 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.296235511599156 +20 +-0.31685524573416857 +30 +0.491941973587031 +11 +1.1213215446161924 +21 +0.11569939211025415 +31 +0.2942344834828935 +12 +1.401838376859889 +22 +-0.28609456039556413 +32 +0.5748371607993987 +13 +1.401838376859889 +23 +-0.28609456039556413 +33 +0.5748371607993987 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.296235511599156 +20 +-0.31685524573416857 +30 +0.491941973587031 +11 +1.401838376859889 +21 +-0.28609456039556413 +31 +0.5748371607993987 +12 +1.3091840178343996 +22 +-0.3187418848047469 +32 +0.5028130849064316 +13 +1.3091840178343996 +23 +-0.3187418848047469 +33 +0.5028130849064316 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.3091840178343996 +20 +-0.3187418848047469 +30 +0.5028130849064316 +11 +1.401838376859889 +21 +-0.28609456039556413 +31 +0.5748371607993987 +12 +1.3253750619465394 +22 +-0.31972148211599355 +32 +0.5162341750882068 +13 +1.3253750619465394 +23 +-0.31972148211599355 +33 +0.5162341750882068 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.3253750619465394 +20 +-0.31972148211599355 +30 +0.5162341750882068 +11 +1.401838376859889 +21 +-0.28609456039556413 +31 +0.5748371607993987 +12 +1.3417030991986116 +22 +-0.31798505695875007 +32 +0.5294284687339447 +13 +1.3417030991986116 +23 +-0.31798505695875007 +33 +0.5294284687339447 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.3417030991986116 +20 +-0.31798505695875007 +30 +0.5294284687339447 +11 +1.401838376859889 +21 +-0.28609456039556413 +31 +0.5748371607993987 +12 +1.3578959289156283 +22 +-0.3135615568476812 +32 +0.5421760070341798 +13 +1.3578959289156283 +23 +-0.3135615568476812 +33 +0.5421760070341798 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.3578959289156283 +20 +-0.3135615568476812 +30 +0.5421760070341798 +11 +1.401838376859889 +21 +-0.28609456039556413 +31 +0.5748371607993987 +12 +1.3736836044342169 +22 +-0.30652472486030197 +32 +0.5542642789274219 +13 +1.3736836044342169 +23 +-0.30652472486030197 +33 +0.5542642789274219 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.3736836044342169 +20 +-0.30652472486030197 +30 +0.5542642789274219 +11 +1.401838376859889 +21 +-0.28609456039556413 +31 +0.5748371607993987 +12 +1.3888029333164453 +22 +-0.2969918702840594 +32 +0.5654917638195733 +13 +1.3888029333164453 +23 +-0.2969918702840594 +33 +0.5654917638195733 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7721548077676246 +20 +0.4693392851041711 +30 +2.8227207121156974 +11 +1.805181337617048 +21 +0.4546904111007235 +31 +2.820867751357442 +12 +1.7776419675782986 +22 +0.44515366198423323 +32 +2.578459014679979 +13 +1.7776419675782986 +23 +0.44515366198423323 +33 +2.578459014679979 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.7191704410475133 +20 +0.4693398573763592 +30 +1.9757999849928503 +11 +-1.7191704438325688 +21 +0.4523487095976748 +31 +1.9757999849928511 +12 +-1.5933226813458456 +22 +0.4693398367483087 +32 +1.438223809982218 +13 +-1.5933226813458456 +23 +0.4693398367483087 +33 +1.438223809982218 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.7895715816972064 +20 +0.4693398689159888 +30 +2.721769481190647 +11 +-1.7191704438325688 +21 +0.4523487095976748 +31 +1.9757999849928511 +12 +-1.7191704410475133 +22 +0.4693398573763592 +32 +1.9757999849928503 +13 +-1.7191704410475133 +23 +0.4693398573763592 +33 +1.9757999849928503 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.593322815971511 +20 +-0.3519861497695237 +30 +1.4382238099822156 +11 +-1.7191705821264176 +21 +-0.3913561291414933 +31 +1.975799984992849 +12 +-1.5933228224247524 +22 +-0.39135614976952593 +32 +1.4382238099822164 +13 +-1.5933228224247524 +23 +-0.39135614976952593 +33 +1.4382238099822164 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7191705821264176 +20 +-0.3913561291414933 +30 +1.975799984992849 +11 +-1.593322815971511 +21 +-0.3519861497695237 +31 +1.4382238099822156 +12 +-1.7191705756731808 +22 +-0.3519861291414911 +32 +1.975799984992848 +13 +-1.7191705756731808 +23 +-0.3519861291414911 +33 +1.975799984992848 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.7191705756731808 +20 +-0.3519861291414911 +30 +1.975799984992848 +11 +-1.593322815971511 +21 +-0.3519861497695237 +31 +1.4382238099822156 +12 +-1.5933226896107346 +22 +0.4189173308646478 +32 +1.4382238099822138 +13 +-1.5933226896107346 +23 +0.4189173308646478 +33 +1.4382238099822138 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.7191705756731808 +20 +-0.3519861291414911 +30 +1.975799984992848 +11 +-1.5933226896107346 +21 +0.4189173308646478 +31 +1.4382238099822138 +12 +-1.7191704493123976 +22 +0.41891735149268716 +32 +1.9757999849928494 +13 +-1.7191704493123976 +23 +0.41891735149268716 +33 +1.9757999849928494 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.7191704493123976 +20 +0.41891735149268716 +30 +1.9757999849928494 +11 +-1.5933226896107346 +21 +0.4189173308646478 +31 +1.4382238099822138 +12 +-1.5933226813458456 +22 +0.4693398367483087 +32 +1.438223809982218 +13 +-1.5933226813458456 +23 +0.4693398367483087 +33 +1.438223809982218 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.7191704493123976 +20 +0.41891735149268716 +30 +1.9757999849928494 +11 +-1.5933226813458456 +21 +0.4693398367483087 +31 +1.438223809982218 +12 +-1.7191704438325688 +22 +0.4523487095976748 +32 +1.9757999849928511 +13 +-1.7191704438325688 +23 +0.4523487095976748 +33 +1.9757999849928511 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.3037516634831137 +20 +0.11569939636982962 +30 +0.5600494187408283 +11 +1.3606638328112888 +21 +0.09565654957220543 +31 +0.7173692551580161 +12 +1.4074552186633607 +22 +-0.03283878934796741 +32 +0.6637847097679882 +13 +1.4074552186633607 +23 +-0.03283878934796741 +33 +0.6637847097679882 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.3606638328112888 +20 +0.09565654957220543 +30 +0.7173692551580161 +11 +1.3037516634831137 +21 +0.11569939636982962 +31 +0.5600494187408283 +12 +1.3466706909373627 +22 +0.11569941023242802 +32 +0.703371831037376 +13 +1.3466706909373627 +23 +0.11569941023242802 +33 +0.703371831037376 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.4736624457345466 +20 +-0.3913561693833688 +30 +2.907315266711703 +11 +-1.7895717163228786 +21 +-0.3519861176018548 +31 +2.721769481190651 +12 +-1.7895717227761132 +22 +-0.3913561176018615 +32 +2.721769481190653 +13 +-1.7895717227761132 +23 +-0.3913561176018615 +33 +2.721769481190653 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7895717163228786 +20 +-0.3519861176018548 +30 +2.721769481190651 +11 +-1.4736624457345466 +21 +-0.3913561693833688 +31 +2.907315266711703 +12 +-1.4736624392813298 +22 +-0.3519861693833375 +32 +2.907315266711701 +13 +-1.4736624392813298 +23 +-0.3519861693833375 +33 +2.907315266711701 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.4265137628895357 +20 +-0.23764524386994787 +30 +0.6109721272062122 +11 +0.84796506596995 +21 +-0.21887684142438632 +31 +1.272402865095184 +12 +0.8396041535634804 +22 +-0.23777977037520193 +32 +1.2678971062030804 +13 +0.8396041535634804 +23 +-0.23777977037520193 +33 +1.2678971062030804 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.84796506596995 +20 +-0.21887684142438632 +30 +1.272402865095184 +11 +1.4265137628895357 +21 +-0.23764524386994787 +31 +0.6109721272062122 +12 +1.4313858852268917 +22 +-0.2187431145903824 +32 +0.6193828713063506 +13 +1.4313858852268917 +23 +-0.2187431145903824 +33 +0.6193828713063506 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.4313858852268917 +20 +-0.2187431145903824 +30 +0.6193828713063506 +11 +0.8488303158904233 +21 +-0.21621663583415707 +31 +1.2727812042605189 +12 +0.84796506596995 +22 +-0.21887684142438632 +32 +1.272402865095184 +13 +0.84796506596995 +23 +-0.21887684142438632 +33 +1.272402865095184 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8488303158904233 +20 +-0.21621663583415707 +30 +1.2727812042605189 +11 +1.4313858852268917 +21 +-0.2187431145903824 +31 +0.6193828713063506 +12 +1.4345683067862047 +22 +-0.19880836187696824 +32 +0.6259137538687718 +13 +1.4345683067862047 +23 +-0.19880836187696824 +33 +0.6259137538687718 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.8488303158904233 +20 +-0.21621663583415707 +30 +1.2727812042605189 +11 +1.4345683067862047 +21 +-0.19880836187696824 +31 +0.6259137538687718 +12 +0.8574638271061679 +22 +-0.19894064093252234 +32 +1.2718639004818764 +13 +0.8574638271061679 +23 +-0.19894064093252234 +33 +1.2718639004818764 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7191705756731808 +20 +-0.3519861291414911 +30 +1.975799984992848 +11 +-1.7895717227761132 +21 +-0.3913561176018615 +31 +2.721769481190653 +12 +-1.7191705821264176 +22 +-0.3913561291414933 +32 +1.975799984992849 +13 +-1.7191705821264176 +23 +-0.3913561291414933 +33 +1.975799984992849 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7895717227761132 +20 +-0.3913561176018615 +30 +2.721769481190653 +11 +-1.7191705756731808 +21 +-0.3519861291414911 +31 +1.975799984992848 +12 +-1.7895717163228786 +22 +-0.3519861176018548 +32 +2.721769481190651 +13 +-1.7895717163228786 +23 +-0.3519861176018548 +33 +2.721769481190651 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.7895717163228786 +20 +-0.3519861176018548 +30 +2.721769481190651 +11 +-1.7191705756731808 +21 +-0.3519861291414911 +31 +1.975799984992848 +12 +-1.7191704493123976 +22 +0.41891735149268716 +32 +1.9757999849928494 +13 +-1.7191704493123976 +23 +0.41891735149268716 +33 +1.9757999849928494 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.7895717163228786 +20 +-0.3519861176018548 +30 +2.721769481190651 +11 +-1.7191704493123976 +21 +0.41891735149268716 +31 +1.9757999849928494 +12 +-1.7895715899620932 +22 +0.41891736303231675 +32 +2.7217694811906528 +13 +-1.7895715899620932 +23 +0.41891736303231675 +33 +2.7217694811906528 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.7895715899620932 +20 +0.41891736303231675 +30 +2.7217694811906528 +11 +-1.7191704493123976 +21 +0.41891735149268716 +31 +1.9757999849928494 +12 +-1.7191704438325688 +22 +0.4523487095976748 +32 +1.9757999849928511 +13 +-1.7191704438325688 +23 +0.4523487095976748 +33 +1.9757999849928511 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.7895715899620932 +20 +0.41891736303231675 +30 +2.7217694811906528 +11 +-1.7191704438325688 +21 +0.4523487095976748 +31 +1.9757999849928511 +12 +-1.7895715816972064 +22 +0.4693398689159888 +32 +2.721769481190647 +13 +-1.7895715816972064 +23 +0.4693398689159888 +33 +2.721769481190647 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.3417030991986116 +20 +-0.31798505695875007 +30 +0.5294284687339447 +11 +0.7380029783911015 +21 +-0.3198561146257471 +31 +1.1736767991681007 +12 +1.3253750619465394 +22 +-0.31972148211599355 +32 +0.5162341750882068 +13 +1.3253750619465394 +23 +-0.31972148211599355 +33 +0.5162341750882068 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7380029783911015 +20 +-0.3198561146257471 +30 +1.1736767991681007 +11 +1.3417030991986116 +21 +-0.31798505695875007 +31 +0.5294284687339447 +12 +0.7514924403831034 +22 +-0.31812034010292306 +32 +1.1900482958506116 +13 +0.7514924403831034 +23 +-0.31812034010292306 +33 +1.1900482958506116 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.401838376859889 +20 +-0.28609456039556413 +30 +0.5748371607993987 +11 +0.7905978056850744 +21 +-0.2971289858534024 +31 +1.2350597597436686 +12 +1.3888029333164453 +22 +-0.2969918702840594 +32 +0.5654917638195733 +13 +1.3888029333164453 +23 +-0.2969918702840594 +33 +0.5654917638195733 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7905978056850744 +20 +-0.2971289858534024 +30 +1.2350597597436686 +11 +1.401838376859889 +21 +-0.28609456039556413 +31 +0.5748371607993987 +12 +1.4027036824022836 +22 +-0.2851219813292338 +32 +0.5760050453303628 +13 +1.4027036824022836 +23 +-0.2851219813292338 +33 +0.5760050453303628 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.7905978056850744 +20 +-0.2971289858534024 +30 +1.2350597597436686 +11 +1.4027036824022836 +21 +-0.2851219813292338 +31 +0.5760050453303628 +12 +0.8047967373346043 +22 +-0.2852590285516704 +32 +1.245239287008058 +13 +0.8047967373346043 +23 +-0.2852590285516704 +33 +1.245239287008058 +70 +1 + 0 +LINE + 8 +palm +10 +1.7290604211742295 +20 +0.45593246326086423 +30 +2.4433926714277017 +11 +1.7290602943681443 +21 +-0.3176883359983307 +31 +2.443392671427686 + 0 +3DFACE + 8 +palm +10 +1.3253750619465394 +20 +-0.31972148211599355 +30 +0.5162341750882068 +11 +0.7243214720116329 +21 +-0.31887594209924797 +31 +1.1574467960018582 +12 +1.3091840178343996 +22 +-0.3187418848047469 +32 +0.5028130849064316 +13 +1.3091840178343996 +23 +-0.3187418848047469 +33 +0.5028130849064316 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7243214720116329 +20 +-0.31887594209924797 +30 +1.1574467960018582 +11 +1.3253750619465394 +21 +-0.31972148211599355 +31 +0.5162341750882068 +12 +0.7380029783911015 +22 +-0.3198561146257471 +32 +1.1736767991681007 +13 +0.7380029783911015 +23 +-0.3198561146257471 +33 +1.1736767991681007 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.3736836044342169 +20 +-0.30652472486030197 +30 +0.5542642789274219 +11 +0.7645649784997064 +21 +-0.31369755519895914 +31 +1.2062883608730788 +12 +1.3578959289156283 +22 +-0.3135615568476812 +32 +0.5421760070341798 +13 +1.3578959289156283 +23 +-0.3135615568476812 +33 +0.5421760070341798 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7645649784997064 +20 +-0.31369755519895914 +30 +1.2062883608730788 +11 +1.3736836044342169 +21 +-0.30652472486030197 +31 +0.5542642789274219 +12 +0.7770026636877001 +22 +-0.30666149106830126 +32 +1.2221262601239269 +13 +0.7770026636877001 +23 +-0.30666149106830126 +33 +1.2221262601239269 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5742711203227493 +20 +0.11569947036484796 +30 +0.06895221585191834 +11 +0.7148013652171186 +21 +-0.2589393880700495 +31 +0.36354132201196915 +12 +0.45324313692173157 +22 +0.11569950085740732 +32 +0.10190305044442108 +13 +0.45324313692173157 +23 +0.11569950085740732 +33 +0.10190305044442108 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7148013652171186 +20 +-0.2589393880700495 +30 +0.36354132201196915 +11 +0.5742711203227493 +21 +0.11569947036484796 +31 +0.06895221585191834 +12 +0.8417991709290595 +22 +-0.2674902013547584 +32 +0.33656213664331786 +13 +0.8417991709290595 +23 +-0.2674902013547584 +33 +0.33656213664331786 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.3479240404844608 +20 +0.11569941449928345 +30 +0.7318177742169286 +11 +1.3606638328112888 +21 +0.09565654957220543 +31 +0.7173692551580161 +12 +1.3466706909373627 +22 +0.11569941023242802 +32 +0.703371831037376 +13 +1.3466706909373627 +23 +0.11569941023242802 +33 +0.703371831037376 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.226889266259492 +20 +0.11569939018870201 +30 +0.4205002886903231 +11 +1.435174589712788 +21 +-0.17817350408840257 +31 +0.6313887032404708 +12 +1.4356492647298522 +22 +-0.1833147696377279 +32 +0.6293241728716591 +13 +1.4356492647298522 +23 +-0.1833147696377279 +33 +0.6293241728716591 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.435174589712788 +20 +-0.17817350408840257 +30 +0.6313887032404708 +11 +1.226889266259492 +21 +0.11569939018870201 +31 +0.4205002886903231 +12 +1.4074552186633607 +22 +-0.03283878934796741 +32 +0.6637847097679882 +13 +1.4074552186633607 +23 +-0.03283878934796741 +33 +0.6637847097679882 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.4074552186633607 +20 +-0.03283878934796741 +30 +0.6637847097679882 +11 +1.226889266259492 +21 +0.11569939018870201 +31 +0.4205002886903231 +12 +1.3037516634831137 +22 +0.11569939636982962 +32 +0.5600494187408283 +13 +1.3037516634831137 +23 +0.11569939636982962 +33 +0.5600494187408283 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.3578959289156283 +20 +-0.3135615568476812 +30 +0.5421760070341798 +11 +0.7514924403831034 +21 +-0.31812034010292306 +31 +1.1900482958506116 +12 +1.3417030991986116 +22 +-0.31798505695875007 +32 +0.5294284687339447 +13 +1.3417030991986116 +23 +-0.31798505695875007 +33 +0.5294284687339447 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7514924403831034 +20 +-0.31812034010292306 +30 +1.1900482958506116 +11 +1.3578959289156283 +21 +-0.3135615568476812 +31 +0.5421760070341798 +12 +0.7645649784997064 +22 +-0.31369755519895914 +32 +1.2062883608730788 +13 +0.7645649784997064 +23 +-0.31369755519895914 +33 +1.2062883608730788 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.9942427643243386 +20 +0.11569940200353146 +30 +0.18985680907938893 +11 +1.1427716320422368 +21 +-0.29746965530859 +31 +0.4030272047057251 +12 +0.8543131342530239 +22 +0.11569941919431881 +32 +0.11448043149811093 +13 +0.8543131342530239 +23 +0.11569941919431881 +33 +0.11448043149811093 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.1427716320422368 +20 +-0.29746965530859 +30 +0.4030272047057251 +11 +0.9942427643243386 +21 +0.11569940200353146 +31 +0.18985680907938893 +12 +1.296235511599156 +22 +-0.31685524573416857 +32 +0.491941973587031 +13 +1.296235511599156 +23 +-0.31685524573416857 +33 +0.491941973587031 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.4200331617217834 +20 +-0.2551996369886165 +30 +0.6008217350052182 +11 +0.8178385648700359 +21 +-0.27124984964993776 +31 +1.2542011562606892 +12 +1.4120521182246126 +22 +-0.27111364899581186 +32 +0.5891009093839078 +13 +1.4120521182246126 +23 +-0.27111364899581186 +33 +0.5891009093839078 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8178385648700359 +20 +-0.27124984964993776 +30 +1.2542011562606892 +11 +1.4200331617217834 +21 +-0.2551996369886165 +31 +0.6008217350052182 +12 +0.82950587120676 +22 +-0.25533499270842597 +32 +1.2617959663934535 +13 +0.82950587120676 +23 +-0.25533499270842597 +33 +1.2617959663934535 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.886816064498108 +20 +-0.07019890877981821 +30 +1.24618250303494 +11 +0.7584040700658974 +21 +-0.07895235839940429 +31 +1.1802472966562991 +12 +0.8651868766935726 +22 +-0.17830415189829452 +32 +1.2693730886615773 +13 +0.8651868766935726 +23 +-0.17830415189829452 +33 +1.2693730886615773 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.435174589712788 +20 +-0.17817350408840257 +30 +0.6313887032404708 +11 +0.886816064498108 +21 +-0.07019890877981821 +31 +1.24618250303494 +12 +0.8651868766935726 +22 +-0.17830415189829452 +32 +1.2693730886615773 +13 +0.8651868766935726 +23 +-0.17830415189829452 +33 +1.2693730886615773 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.886816064498108 +20 +-0.07019890877981821 +30 +1.24618250303494 +11 +1.435174589712788 +21 +-0.17817350408840257 +31 +0.6313887032404708 +12 +1.4074552186633607 +22 +-0.03283878934796741 +32 +0.6637847097679882 +13 +1.4074552186633607 +23 +-0.03283878934796741 +33 +0.6637847097679882 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.886816064498108 +20 +-0.07019890877981821 +30 +1.24618250303494 +11 +1.4074552186633607 +21 +-0.03283878934796741 +31 +0.6637847097679882 +12 +0.9017668660717575 +22 +-0.028687052013650738 +32 +1.2298393668802003 +13 +0.9017668660717575 +23 +-0.028687052013650738 +33 +1.2298393668802003 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.9017668660717575 +20 +-0.028687052013650738 +30 +1.2298393668802003 +11 +1.4074552186633607 +21 +-0.03283878934796741 +31 +0.6637847097679882 +12 +1.3606638328112888 +22 +0.09565654957220543 +32 +0.7173692551580161 +13 +1.3606638328112888 +23 +0.09565654957220543 +33 +0.7173692551580161 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.9017668660717575 +20 +-0.028687052013650738 +30 +1.2298393668802003 +11 +1.3606638328112888 +21 +0.09565654957220543 +31 +0.7173692551580161 +12 +1.0500873483302444 +22 +0.11569952969883424 +32 +1.0651855328987245 +13 +1.0500873483302444 +23 +0.11569952969883424 +33 +1.0651855328987245 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.0500873483302444 +20 +0.11569952969883424 +30 +1.0651855328987245 +11 +1.3606638328112888 +21 +0.09565654957220543 +31 +0.7173692551580161 +12 +1.3479240404844608 +22 +0.11569941449928345 +32 +0.7318177742169286 +13 +1.3479240404844608 +23 +0.11569941449928345 +33 +0.7318177742169286 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7895717163228786 +20 +-0.3519861176018548 +30 +2.721769481190651 +11 +-1.3438354876604606 +21 +-0.3519861906636493 +31 +2.3082689981735207 +12 +-1.7532288757978818 +22 +-0.35198612355890113 +32 +2.1850363490651508 +13 +-1.7532288757978818 +23 +-0.35198612355890113 +33 +2.1850363490651508 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.3438354876604606 +20 +-0.3519861906636493 +30 +2.3082689981735207 +11 +-1.7895717163228786 +21 +-0.3519861176018548 +31 +2.721769481190651 +12 +-1.4736624392813298 +22 +-0.3519861693833375 +32 +2.907315266711701 +13 +-1.4736624392813298 +23 +-0.3519861693833375 +33 +2.907315266711701 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.29329461801529333 +20 +-0.39135639924089705 +30 +1.3635807211619237 +11 +0.5551727011859529 +21 +-0.10458326330281831 +31 +0.9844541997546986 +12 +0.6406857800208818 +22 +-0.1001033428773545 +32 +1.0873129661577854 +13 +0.6406857800208818 +23 +-0.1001033428773545 +33 +1.0873129661577854 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.9877718590248896 +20 +-0.28063215797614327 +30 +0.3500300359004508 +11 +0.7148013652171186 +21 +-0.2589393880700495 +31 +0.36354132201196915 +12 +0.8417991709290595 +22 +-0.2674902013547584 +32 +0.33656213664331786 +13 +0.8417991709290595 +23 +-0.2674902013547584 +33 +0.33656213664331786 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7148013652171186 +20 +-0.2589393880700495 +30 +0.36354132201196915 +11 +0.9877718590248896 +21 +-0.28063215797614327 +31 +0.3500300359004508 +12 +1.1427716320422368 +22 +-0.29746965530859 +32 +0.4030272047057251 +13 +1.1427716320422368 +23 +-0.29746965530859 +33 +0.4030272047057251 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.7148013652171186 +20 +-0.2589393880700495 +30 +0.36354132201196915 +11 +1.1427716320422368 +21 +-0.29746965530859 +31 +0.4030272047057251 +12 +0.6154331324746154 +22 +-0.25556244191651595 +32 +0.4291290051087077 +13 +0.6154331324746154 +23 +-0.25556244191651595 +33 +0.4291290051087077 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.6154331324746154 +20 +-0.25556244191651595 +30 +0.4291290051087077 +11 +1.1427716320422368 +21 +-0.29746965530859 +31 +0.4030272047057251 +12 +1.296235511599156 +22 +-0.31685524573416857 +32 +0.491941973587031 +13 +1.296235511599156 +23 +-0.31685524573416857 +33 +0.491941973587031 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.6154331324746154 +20 +-0.25556244191651595 +30 +0.4291290051087077 +11 +1.296235511599156 +21 +-0.31685524573416857 +31 +0.491941973587031 +12 +0.550466253549162 +22 +-0.25758949619382754 +32 +0.5288554937193 +13 +0.550466253549162 +23 +-0.25758949619382754 +33 +0.5288554937193 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.550466253549162 +20 +-0.25758949619382754 +30 +0.5288554937193 +11 +1.296235511599156 +21 +-0.31685524573416857 +31 +0.491941973587031 +12 +1.3091840178343996 +22 +-0.3187418848047469 +32 +0.5028130849064316 +13 +1.3091840178343996 +23 +-0.3187418848047469 +33 +0.5028130849064316 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.550466253549162 +20 +-0.25758949619382754 +30 +0.5288554937193 +11 +1.3091840178343996 +21 +-0.3187418848047469 +31 +0.5028130849064316 +12 +0.7243214720116329 +22 +-0.31887594209924797 +32 +1.1574467960018582 +13 +0.7243214720116329 +23 +-0.31887594209924797 +33 +1.1574467960018582 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.550466253549162 +20 +-0.25758949619382754 +30 +0.5288554937193 +11 +0.7243214720116329 +21 +-0.31887594209924797 +31 +1.1574467960018582 +12 +0.5243281138766716 +22 +-0.2648824105028663 +32 +0.6559245924507474 +13 +0.5243281138766716 +23 +-0.2648824105028663 +33 +0.6559245924507474 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.5243281138766716 +20 +-0.2648824105028663 +30 +0.6559245924507474 +11 +0.7243214720116329 +21 +-0.31887594209924797 +31 +1.1574467960018582 +12 +0.5387999844805174 +22 +-0.27694418478557103 +32 +0.8016767522160716 +13 +0.5387999844805174 +23 +-0.27694418478557103 +33 +0.8016767522160716 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.5387999844805174 +20 +-0.27694418478557103 +30 +0.8016767522160716 +11 +0.7243214720116329 +21 +-0.31887594209924797 +31 +1.1574467960018582 +12 +0.5928956312949423 +22 +-0.2929528290576049 +32 +0.9561792041941095 +13 +0.5928956312949423 +23 +-0.2929528290576049 +33 +0.9561792041941095 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.5928956312949423 +20 +-0.2929528290576049 +30 +0.9561792041941095 +11 +0.7243214720116329 +21 +-0.31887594209924797 +31 +1.1574467960018582 +12 +0.6829285253868831 +22 +-0.3118173806673699 +32 +1.1089028616100112 +13 +0.6829285253868831 +23 +-0.3118173806673699 +33 +1.1089028616100112 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.8676957602144741 +20 +-0.07591452217505529 +30 +2.573406522256996 +11 +1.882447728448143 +21 +-0.1761204287941148 +31 +2.8165326979329053 +12 +1.8549083584093868 +22 +-0.17853836535603948 +32 +2.5741239612554403 +13 +1.8549083584093868 +23 +-0.17853836535603948 +33 +2.5741239612554403 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.882447728448143 +20 +-0.1761204287941148 +30 +2.8165326979329053 +11 +1.8676957602144741 +21 +-0.07591452217505529 +31 +2.573406522256996 +12 +1.895235130253219 +22 +-0.07232523842382649 +32 +2.815815258934461 +13 +1.895235130253219 +23 +-0.07232523842382649 +33 +2.815815258934461 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.9017668660717575 +20 +-0.028687052013650738 +30 +1.2298393668802003 +11 +0.8687347277652708 +21 +-0.044300385349433036 +31 +1.2280956329668686 +12 +0.886816064498108 +22 +-0.07019890877981821 +32 +1.24618250303494 +13 +0.886816064498108 +23 +-0.07019890877981821 +33 +1.24618250303494 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.4120521182246126 +20 +-0.27111364899581186 +30 +0.5891009093839078 +11 +0.8047967373346043 +21 +-0.2852590285516704 +31 +1.245239287008058 +12 +1.4027036824022836 +22 +-0.2851219813292338 +32 +0.5760050453303628 +13 +1.4027036824022836 +23 +-0.2851219813292338 +33 +0.5760050453303628 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8047967373346043 +20 +-0.2852590285516704 +30 +1.245239287008058 +11 +1.4120521182246126 +21 +-0.27111364899581186 +31 +0.5891009093839078 +12 +0.8178385648700359 +22 +-0.27124984964993776 +32 +1.2542011562606892 +13 +0.8178385648700359 +23 +-0.27124984964993776 +33 +1.2542011562606892 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.6675651975985641 +20 +0.05980434249020211 +30 +1.716859107888579 +11 +1.6208444899815906 +21 +0.07494508113197806 +31 +1.667507102739093 +12 +1.5940743769374797 +22 +0.11569951797502342 +32 +1.5695940780014193 +13 +1.5940743769374797 +23 +0.11569951797502342 +33 +1.5695940780014193 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.4345683067862047 +20 +-0.19880836187696824 +30 +0.6259137538687718 +11 +0.8651868766935726 +21 +-0.17830415189829452 +31 +1.2693730886615773 +12 +0.8574638271061679 +22 +-0.19894064093252234 +32 +1.2718639004818764 +13 +0.8574638271061679 +23 +-0.19894064093252234 +33 +1.2718639004818764 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8651868766935726 +20 +-0.17830415189829452 +30 +1.2693730886615773 +11 +1.4345683067862047 +21 +-0.19880836187696824 +31 +0.6259137538687718 +12 +1.4356492647298522 +22 +-0.1833147696377279 +32 +0.6293241728716591 +13 +1.4356492647298522 +23 +-0.1833147696377279 +33 +0.6293241728716591 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.8651868766935726 +20 +-0.17830415189829452 +30 +1.2693730886615773 +11 +1.4356492647298522 +21 +-0.1833147696377279 +31 +0.6293241728716591 +12 +1.435174589712788 +22 +-0.17817350408840257 +32 +0.6313887032404708 +13 +1.435174589712788 +23 +-0.17817350408840257 +33 +0.6313887032404708 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.4736623158196023 +20 +0.41891731125080267 +30 +3.1019128637859286 +11 +-1.7604022996639854 +21 +0.4693398641347575 +31 +2.906434883050858 +12 +-1.7604023079288675 +22 +0.418917358251119 +32 +2.9064348830508573 +13 +-1.7604023079288675 +23 +0.418917358251119 +33 +2.9064348830508573 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7604022996639854 +20 +0.4693398641347575 +30 +2.906434883050858 +11 +-1.4736623158196023 +21 +0.41891731125080267 +31 +3.1019128637859286 +12 +-1.4736623075547448 +22 +0.4693398171344658 +32 +3.1019128637859295 +13 +-1.4736623075547448 +23 +0.4693398171344658 +33 +3.1019128637859295 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7110686274472025 +20 +0.11569944251109132 +30 +0.07324212630582012 +11 +0.8417991709290595 +21 +-0.2674902013547584 +31 +0.33656213664331786 +12 +0.5742711203227493 +22 +0.11569947036484796 +32 +0.06895221585191834 +13 +0.5742711203227493 +23 +0.11569947036484796 +33 +0.06895221585191834 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8417991709290595 +20 +-0.2674902013547584 +30 +0.33656213664331786 +11 +0.7110686274472025 +21 +0.11569944251109132 +31 +0.07324212630582012 +12 +0.9877718590248896 +22 +-0.28063215797614327 +32 +0.3500300359004508 +13 +0.9877718590248896 +23 +-0.28063215797614327 +33 +0.3500300359004508 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.4200331617217834 +20 +-0.2551996369886165 +30 +0.6008217350052182 +11 +0.8396041535634804 +21 +-0.23777977037520193 +31 +1.2678971062030804 +12 +0.82950587120676 +22 +-0.25533499270842597 +32 +1.2617959663934535 +13 +0.82950587120676 +23 +-0.25533499270842597 +33 +1.2617959663934535 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8396041535634804 +20 +-0.23777977037520193 +30 +1.2678971062030804 +11 +1.4200331617217834 +21 +-0.2551996369886165 +31 +0.6008217350052182 +12 +1.4265137628895357 +22 +-0.23764524386994787 +32 +0.6109721272062122 +13 +1.4265137628895357 +23 +-0.23764524386994787 +33 +0.6109721272062122 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.3438354876604606 +20 +-0.3519861906636493 +30 +2.3082689981735207 +11 +-1.7532287476248738 +21 +0.42997336695883304 +31 +2.1850363490651525 +12 +-1.7532288757978818 +22 +-0.35198612355890113 +32 +2.1850363490651508 +13 +-1.7532288757978818 +23 +-0.35198612355890113 +33 +2.1850363490651508 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7532287476248738 +20 +0.42997336695883304 +30 +2.1850363490651525 +11 +-1.3438354876604606 +21 +-0.3519861906636493 +31 +2.3082689981735207 +12 +-1.3438353594874726 +22 +0.42997289595543453 +32 +2.3082689981735225 +13 +-1.3438353594874726 +23 +0.42997289595543453 +33 +2.3082689981735225 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.3888029333164453 +20 +-0.2969918702840594 +30 +0.5654917638195733 +11 +0.7770026636877001 +21 +-0.30666149106830126 +31 +1.2221262601239269 +12 +1.3736836044342169 +22 +-0.30652472486030197 +32 +0.5542642789274219 +13 +1.3736836044342169 +23 +-0.30652472486030197 +33 +0.5542642789274219 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7770026636877001 +20 +-0.30666149106830126 +30 +1.2221262601239269 +11 +1.3888029333164453 +21 +-0.2969918702840594 +31 +0.5654917638195733 +12 +0.7905978056850744 +22 +-0.2971289858534024 +32 +1.2350597597436686 +13 +0.7905978056850744 +23 +-0.2971289858534024 +33 +1.2350597597436686 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.7770026636877001 +20 +-0.30666149106830126 +30 +1.2221262601239269 +11 +0.7905978056850744 +21 +-0.2971289858534024 +31 +1.2350597597436686 +12 +0.7820181234396306 +22 +-0.3025385423088175 +32 +1.2286885607611746 +13 +0.7820181234396306 +23 +-0.3025385423088175 +33 +1.2286885607611746 +70 +1 + 0 +LINE + 8 +palm +10 +1.6348397414833575 +20 +0.4693393076118373 +30 +1.7186951844850427 +11 +1.634839673189293 +21 +0.05269022449133848 +31 +1.7186951844850438 + 0 +3DFACE + 8 +palm +10 +0.6656080837778451 +20 +-0.09556715674214389 +30 +1.1072238076213345 +11 +0.39312210101004275 +21 +-0.3913563992408881 +31 +1.4868573960561888 +12 +0.6454971629912596 +22 +-0.09918946164044506 +32 +1.0911506801973632 +13 +0.6454971629912596 +23 +-0.09918946164044506 +33 +1.0911506801973632 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.39312210101004275 +20 +-0.3913563992408881 +30 +1.4868573960561888 +11 +0.6656080837778451 +21 +-0.09556715674214389 +31 +1.1072238076213345 +12 +0.6738975482255489 +22 +-0.09407408897106695 +32 +1.113848945264622 +13 +0.6738975482255489 +23 +-0.09407408897106695 +33 +1.113848945264622 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.804880263882849 +20 +-0.37666065849100255 +30 +2.8208846355192323 +11 +1.7446152966499613 +21 +-0.3913456583466878 +31 +2.580311975438275 +12 +1.7773408938440884 +22 +-0.37681546288299567 +32 +2.578475898841768 +13 +1.7773408938440884 +23 +-0.37681546288299567 +33 +2.578475898841768 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7446152966499613 +20 +-0.3913456583466878 +30 +2.580311975438275 +11 +1.804880263882849 +21 +-0.37666065849100255 +31 +2.8208846355192323 +12 +1.772154666688709 +22 +-0.3913567014136412 +32 +2.822720712115689 +13 +1.772154666688709 +23 +-0.3913567014136412 +33 +2.822720712115689 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.2851012666870065 +20 +0.5693393649383878 +30 +2.603406296512527 +11 +1.6348397414833575 +21 +0.4693393076118373 +31 +1.7186951844850427 +12 +1.5940745180163998 +22 +0.4698512386274375 +32 +1.569594078001374 +13 +1.5940745180163998 +23 +0.4698512386274375 +33 +1.569594078001374 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.7589811239628956 +20 +-0.07796090531019828 +30 +1.1798646699340118 +11 +0.7556951133309526 +21 +-0.07922417161832584 +31 +1.1782818075904975 +12 +0.7584040700658974 +22 +-0.07895235839940429 +32 +1.1802472966562991 +13 +0.7584040700658974 +23 +-0.07895235839940429 +33 +1.1802472966562991 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.546029358796021 +20 +-0.10514823446237304 +30 +0.9734561491256183 +11 +0.538904362268551 +21 +-0.10552659486033339 +31 +0.9648346235437796 +12 +0.6829285253868831 +22 +-0.3118173806673699 +32 +1.1089028616100112 +13 +0.6829285253868831 +23 +-0.3118173806673699 +33 +1.1089028616100112 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.02045058279261691 +20 +-0.39135639924089705 +30 +0.9739190561071899 +11 +0.3966753060057868 +21 +-0.07337409647306103 +31 +0.659508580082581 +12 +0.4203314900532422 +22 +-0.08234123267425719 +32 +0.7240449027265381 +13 +0.4203314900532422 +23 +-0.08234123267425719 +33 +0.7240449027265381 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.21016804921447574 +20 +-0.39135639924089705 +30 +0.5578720307110291 +11 +0.4285775499251552 +21 +0.11569951797502342 +31 +0.0998712621479301 +12 +0.40683149306505695 +22 +0.08212027273578515 +32 +0.1742805040831692 +13 +0.40683149306505695 +23 +0.08212027273578515 +33 +0.1742805040831692 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.21016804921447574 +20 +-0.39135639924089705 +30 +0.5578720307110291 +11 +0.40683149306505695 +21 +0.08212027273578515 +31 +0.1742805040831692 +12 +0.37878877702084046 +22 +0.038393783699848194 +32 +0.2706184438630661 +13 +0.37878877702084046 +23 +0.038393783699848194 +33 +0.2706184438630661 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.7626223302383062 +20 +-0.07769244209007636 +30 +1.1819181088261714 +11 +0.7584040700658974 +21 +-0.07895235839940429 +31 +1.1802472966562991 +12 +0.7589811239628956 +22 +-0.07796090531019828 +32 +1.1798646699340118 +13 +0.7589811239628956 +23 +-0.07796090531019828 +33 +1.1798646699340118 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.29329461801529333 +20 +-0.39135639924089705 +30 +1.3635807211619237 +11 +0.6406857800208818 +21 +-0.1001033428773545 +31 +1.0873129661577854 +12 +0.6437434044296662 +22 +-0.09951752352774346 +32 +1.0897797118446357 +13 +0.6437434044296662 +23 +-0.09951752352774346 +33 +1.0897797118446357 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.1068452790069585 +20 +-0.3913563992408881 +30 +1.1069552218670458 +11 +0.4203314900532422 +21 +-0.08234123267425719 +31 +0.7240449027265381 +12 +0.45563534442351883 +22 +-0.09635017693496095 +32 +0.8188769122878267 +13 +0.45563534442351883 +23 +-0.09635017693496095 +33 +0.8188769122878267 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.634839673189293 +20 +0.05269022449133848 +30 +1.7186951844850438 +11 +1.6208444899815906 +21 +0.07494508113197806 +31 +1.667507102739093 +12 +1.6675651975985641 +22 +0.05980434249020211 +32 +1.716859107888579 +13 +1.6675651975985641 +23 +0.05980434249020211 +33 +1.716859107888579 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.6903109494372404 +20 +-0.09112388712480801 +30 +1.1269513721715114 +11 +0.7556951133309526 +21 +-0.07922417161832584 +31 +1.1782818075904975 +12 +0.7535113909177122 +22 +-0.07968804570622262 +32 +1.177433109344653 +13 +0.7535113909177122 +23 +-0.07968804570622262 +33 +1.177433109344653 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7556951133309526 +20 +-0.07922417161832584 +30 +1.1782818075904975 +11 +0.6903109494372404 +21 +-0.09112388712480801 +31 +1.1269513721715114 +12 +0.7589811239628956 +22 +-0.07796090531019828 +32 +1.1798646699340118 +13 +0.7589811239628956 +23 +-0.07796090531019828 +33 +1.1798646699340118 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.7556951133309526 +20 +-0.07922417161832584 +30 +1.1782818075904975 +11 +0.7589811239628956 +21 +-0.07796090531019828 +31 +1.1798646699340118 +12 +0.7584040700658974 +22 +-0.07895235839940429 +32 +1.1802472966562991 +13 +0.7584040700658974 +23 +-0.07895235839940429 +33 +1.1802472966562991 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.8081372379406215 +20 +-0.33429615364499293 +30 +2.5767480636693016 +11 +1.804880263882849 +21 +-0.37666065849100255 +31 +2.8208846355192323 +12 +1.7773408938440884 +22 +-0.37681546288299567 +32 +2.578475898841768 +13 +1.7773408938440884 +23 +-0.37681546288299567 +33 +2.578475898841768 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8676957602144741 +20 +-0.07591452217505529 +30 +2.573406522256996 +11 +1.8549083584093868 +21 +-0.17853836535603948 +31 +2.5741239612554403 +12 +1.8393533418547328 +22 +-0.12422716055224386 +32 +2.4372046572449104 +13 +1.8393533418547328 +23 +-0.12422716055224386 +33 +2.4372046572449104 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8720848207106824 +20 +0.03421035611087325 +30 +2.573160274089795 +11 +1.8676957602144741 +21 +-0.07591452217505529 +31 +2.573406522256996 +12 +1.8521407436598245 +22 +-0.030932757660463273 +32 +2.436487218246467 +13 +1.8521407436598245 +23 +-0.030932757660463273 +33 +2.436487218246467 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8565298041560327 +20 +0.06918076805400641 +30 +2.4362409700792664 +11 +1.8720848207106824 +21 +0.03421035611087325 +31 +2.573160274089795 +12 +1.8521407436598245 +22 +-0.030932757660463273 +32 +2.436487218246467 +13 +1.8521407436598245 +23 +-0.030932757660463273 +33 +2.436487218246467 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7451326621638448 +20 +0.15688264207656666 +30 +1.71250717030225 +11 +1.8190390390415143 +21 +-0.20434458124056845 +31 +2.4383443947924617 +12 +1.7248183593506174 +22 +0.11373378942971202 +32 +1.7136469078498038 +13 +1.7248183593506174 +23 +0.11373378942971202 +33 +1.7136469078498038 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8621334256349 +20 +-0.2652554966498969 +30 +2.8176724354804583 +11 +1.8356766079793665 +21 +-0.3336560344194598 +31 +2.8191568003467666 +12 +1.834594055596155 +22 +-0.2666675281131681 +32 +2.575263698802992 +13 +1.834594055596155 +23 +-0.2666675281131681 +33 +2.575263698802992 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.834594055596155 +20 +-0.2666675281131681 +30 +2.575263698802992 +11 +1.8356766079793665 +21 +-0.3336560344194598 +31 +2.8191568003467666 +12 +1.8081372379406215 +22 +-0.33429615364499293 +32 +2.5767480636693016 +13 +1.8081372379406215 +23 +-0.33429615364499293 +33 +2.5767480636693016 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8623538269052708 +20 +0.34333572521797184 +30 +2.817660075416184 +11 +1.8826035756809005 +21 +0.2542185511592471 +31 +2.8165239580476373 +12 +1.8348144568665077 +22 +0.3350556335425835 +32 +2.575251338738716 +13 +1.8348144568665077 +23 +0.3350556335425835 +33 +2.575251338738716 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8359465433048274 +20 +0.4117129433371637 +30 +2.8191416624214285 +11 +1.8623538269052708 +21 +0.34333572521797184 +31 +2.817660075416184 +12 +1.8084071732660914 +22 +0.4026612025904063 +32 +2.576732925743964 +13 +1.8084071732660914 +23 +0.4026612025904063 +33 +2.576732925743964 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.805181337617048 +20 +0.4546904111007235 +30 +2.820867751357442 +11 +1.8359465433048274 +21 +0.4117129433371637 +31 +2.8191416624214285 +12 +1.7776419675782986 +22 +0.44515366198423323 +32 +2.578459014679979 +13 +1.7776419675782986 +23 +0.44515366198423323 +33 +2.578459014679979 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.882447728448143 +20 +-0.1761204287941148 +30 +2.8165326979329053 +11 +1.8621334256349 +21 +-0.2652554966498969 +31 +2.8176724354804583 +12 +1.8549083584093868 +22 +-0.17853836535603948 +32 +2.5741239612554403 +13 +1.8549083584093868 +23 +-0.17853836535603948 +33 +2.5741239612554403 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8522214161237673 +20 +0.16929084525907834 +30 +2.4364826941489497 +11 +1.867776432678417 +21 +0.1443314410364377 +31 +2.5734019981594765 +12 +1.8565298041560327 +22 +0.06918076805400641 +32 +2.4362409700792664 +13 +1.8565298041560327 +23 +0.06918076805400641 +33 +2.4362409700792664 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7248183593506174 +20 +0.11373378942971202 +30 +1.7136469078498038 +11 +1.8190390390415143 +21 +-0.20434458124056845 +31 +2.4383443947924617 +12 +1.792582221385972 +22 +-0.26582514990585526 +32 +2.4398287596587718 +13 +1.792582221385972 +23 +-0.26582514990585526 +33 +2.4398287596587718 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.867776432678417 +20 +0.1443314410364377 +30 +2.5734019981594765 +11 +1.8720848207106824 +21 +0.03421035611087325 +31 +2.573160274089795 +12 +1.8565298041560327 +22 +0.06918076805400641 +32 +2.4362409700792664 +13 +1.8565298041560327 +23 +0.06918076805400641 +33 +2.4362409700792664 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7776419675782986 +20 +0.44515366198423323 +30 +2.578459014679979 +11 +1.8359465433048274 +21 +0.4117129433371637 +31 +2.8191416624214285 +12 +1.8084071732660914 +22 +0.4026612025904063 +32 +2.576732925743964 +13 +1.8084071732660914 +23 +0.4026612025904063 +33 +2.576732925743964 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8084071732660914 +20 +0.4026612025904063 +30 +2.576732925743964 +11 +1.8623538269052708 +21 +0.34333572521797184 +31 +2.817660075416184 +12 +1.8348144568665077 +22 +0.3350556335425835 +32 +2.575251338738716 +13 +1.8348144568665077 +23 +0.3350556335425835 +33 +2.575251338738716 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8549083584093868 +20 +-0.17853836535603948 +30 +2.5741239612554403 +11 +1.8621334256349 +21 +-0.2652554966498969 +31 +2.8176724354804583 +12 +1.834594055596155 +22 +-0.2666675281131681 +32 +2.575263698802992 +13 +1.834594055596155 +23 +-0.2666675281131681 +33 +2.575263698802992 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8348144568665077 +20 +0.3350556335425835 +30 +2.575251338738716 +11 +1.8826035756809005 +21 +0.2542185511592471 +31 +2.8165239580476373 +12 +1.8550642056421511 +22 +0.24694416264779395 +32 +2.57411522137017 +13 +1.8550642056421511 +23 +0.24694416264779395 +33 +2.57411522137017 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8356766079793665 +20 +-0.3336560344194598 +30 +2.8191568003467666 +11 +1.804880263882849 +21 +-0.37666065849100255 +31 +2.8208846355192323 +12 +1.8081372379406215 +22 +-0.33429615364499293 +32 +2.5767480636693016 +13 +1.8081372379406215 +23 +-0.33429615364499293 +33 +2.5767480636693016 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.02045058279261691 +20 +-0.39135639924089705 +30 +0.9739190561071899 +11 +0.3817497804163781 +21 +-0.05607568881768277 +31 +0.5821837592203328 +12 +0.3966753060057868 +22 +-0.07337409647306103 +32 +0.659508580082581 +13 +0.3966753060057868 +23 +-0.07337409647306103 +33 +0.659508580082581 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.1068452790069585 +20 +-0.3913563992408881 +30 +1.1069552218670458 +11 +0.45563534442351883 +21 +-0.09635017693496095 +31 +0.8188769122878267 +12 +0.47725266850529624 +22 +-0.09848891117181602 +32 +0.8571105745168952 +13 +0.47725266850529624 +23 +-0.09848891117181602 +33 +0.8571105745168952 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.39312210101004275 +20 +-0.3913563992408881 +30 +1.4868573960561888 +11 +0.6437434044296662 +21 +-0.09951752352774346 +31 +1.0897797118446357 +12 +0.6454971629912596 +22 +-0.09918946164044506 +32 +1.0911506801973632 +13 +0.6454971629912596 +23 +-0.09918946164044506 +33 +1.0911506801973632 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.29329461801529333 +20 +-0.39135639924089705 +30 +1.3635807211619237 +11 +0.5513988760171851 +21 +-0.10471927211351728 +31 +0.9800110958759284 +12 +0.5551727011859529 +22 +-0.10458326330281831 +32 +0.9844541997546986 +13 +0.5551727011859529 +23 +-0.10458326330281831 +33 +0.9844541997546986 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.39312210101004275 +20 +-0.3913563992408881 +30 +1.4868573960561888 +11 +0.6738975482255489 +21 +-0.09407408897106695 +31 +1.113848945264622 +12 +0.6903109494372404 +22 +-0.09112388712480801 +32 +1.1269513721715114 +13 +0.6903109494372404 +23 +-0.09112388712480801 +33 +1.1269513721715114 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7776419675782986 +20 +0.44515366198423323 +30 +2.578459014679979 +11 +1.8084071732660914 +21 +0.4026612025904063 +31 +2.576732925743964 +12 +1.7928521567114306 +22 +0.40413608303543147 +32 +2.439813621733438 +13 +1.7928521567114306 +23 +0.40413608303543147 +33 +2.439813621733438 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.762086951023649 +20 +0.4427655915752502 +30 +2.4415397106694483 +11 +1.6678662713327677 +21 +0.4622480233280828 +31 +1.7168422237267897 +12 +1.6348397414833575 +22 +0.4693393076118373 +32 +1.7186951844850427 +13 +1.6348397414833575 +23 +0.4693393076118373 +33 +1.7186951844850427 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7045232859296717 +20 +0.38133522453188085 +30 +1.563397323933316 +11 +1.7172355129659331 +21 +0.3386311081408655 +31 +1.5626841007226204 +12 +1.2712475811496826 +22 +0.3809548188019898 +32 +-0.021329497427587985 +13 +1.2712475811496826 +23 +0.3809548188019898 +33 +-0.021329497427587985 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7215439009982167 +20 +0.29280225228437573 +30 +1.5624423766529374 +11 +1.7171548405019925 +21 +0.24697181775326893 +31 +1.562688624820141 +12 +1.2841162643931592 +22 +0.24722978915362082 +32 +-0.021329497427588023 +13 +1.2841162643931592 +23 +0.24722978915362082 +33 +-0.021329497427588023 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7617858772894388 +20 +-0.30447906739496566 +30 +2.441556594831235 +11 +1.8081372379406215 +21 +-0.33429615364499293 +31 +2.5767480636693016 +12 +1.7773408938440884 +22 +-0.37681546288299567 +32 +2.578475898841768 +13 +1.7773408938440884 +23 +-0.37681546288299567 +33 +2.578475898841768 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8192594403118558 +20 +0.3426764748101059 +30 +2.438332034728192 +11 +1.8348144568665077 +21 +0.3350556335425835 +31 +2.575251338738716 +12 +1.8395091890875015 +22 +0.262575137633017 +32 +2.437195917359645 +13 +1.8395091890875015 +23 +0.262575137633017 +33 +2.437195917359645 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.72503876062097 +20 +0.4083430109881152 +30 +1.7136345477855313 +11 +1.8395091890875015 +21 +0.262575137633017 +31 +2.437195917359645 +12 +1.745288509396618 +22 +0.3652028204405948 +32 +1.7124984304169848 +13 +1.745288509396618 +23 +0.3652028204405948 +33 +1.7124984304169848 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6348397414833575 +20 +0.4693393076118373 +30 +1.7186951844850427 +11 +1.6678662713327677 +21 +0.4622480233280828 +31 +1.7168422237267897 +12 +1.5940745180163998 +22 +0.4698512386274375 +32 +1.569594078001374 +13 +1.5940745180163998 +23 +0.4698512386274375 +33 +1.569594078001374 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7290602943681443 +20 +-0.3176883359983307 +30 +2.443392671427686 +11 +1.634839673189293 +21 +0.05269022449133848 +31 +1.7186951844850438 +12 +1.6675651975985641 +22 +0.05980434249020211 +32 +1.716859107888579 +13 +1.6675651975985641 +23 +0.05980434249020211 +33 +1.716859107888579 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7579200639689365 +20 +0.20712822423046562 +30 +1.7117897313038086 +11 +1.8393533418547328 +21 +-0.12422716055224386 +31 +2.4372046572449104 +12 +1.7451326621638448 +22 +0.15688264207656666 +32 +1.71250717030225 +13 +1.7451326621638448 +23 +0.15688264207656666 +33 +1.71250717030225 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7776419675782986 +20 +0.44515366198423323 +30 +2.578459014679979 +11 +1.7928521567114306 +21 +0.40413608303543147 +31 +2.439813621733438 +12 +1.762086951023649 +22 +0.4427655915752502 +32 +2.4415397106694483 +13 +1.762086951023649 +23 +0.4427655915752502 +33 +2.4415397106694483 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.3505091197150552 +20 +0.11569951797502342 +30 +1.3688012067183613 +11 +0.7175412590885892 +21 +-0.3913563992408904 +31 +1.8347543501121704 +12 +1.2542185240067691 +22 +0.11569951797501443 +32 +1.2790087735671853 +13 +1.2542185240067691 +23 +0.11569951797501443 +33 +1.2790087735671853 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7175412590885892 +20 +-0.3913563992408904 +30 +1.8347543501121704 +11 +1.3505091197150552 +21 +0.11569951797502342 +31 +1.3688012067183613 +12 +0.8335540250022027 +22 +-0.39135639924089705 +32 +1.9429380045111706 +13 +0.8335540250022027 +23 +-0.39135639924089705 +33 +1.9429380045111706 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7623091244651496 +20 +0.26104638250238477 +30 +1.7115434831366068 +11 +1.8521407436598245 +21 +-0.030932757660463273 +31 +2.436487218246467 +12 +1.7579200639689365 +22 +0.20712822423046562 +32 +1.7117897313038086 +13 +1.7579200639689365 +23 +0.20712822423046562 +33 +1.7117897313038086 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.72503876062097 +20 +0.4083430109881152 +30 +1.7136345477855313 +11 +1.8192594403118558 +21 +0.3426764748101059 +31 +2.438332034728192 +12 +1.8395091890875015 +22 +0.262575137633017 +32 +2.437195917359645 +13 +1.8395091890875015 +23 +0.262575137633017 +33 +2.437195917359645 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6271010478658303 +20 +0.4638236469862328 +30 +1.567741117243121 +11 +1.6578662535535986 +21 +0.4461396512477167 +31 +1.566015028307111 +12 +1.2238034110911722 +22 +0.4454575748968931 +32 +-0.021329497427587968 +13 +1.2238034110911722 +23 +0.4454575748968931 +33 +-0.021329497427587968 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7171548405019925 +20 +0.24697181775326893 +30 +1.562688624820141 +11 +1.7579200639689365 +21 +0.20712822423046562 +31 +1.7117897313038086 +12 +1.7043674386969119 +22 +0.20426307292245227 +32 +1.5634060638185832 +13 +1.7043674386969119 +23 +0.20426307292245227 +33 +1.5634060638185832 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7043674386969119 +20 +0.20426307292245227 +30 +1.5634060638185832 +11 +1.6840531358836734 +21 +0.16758654817261043 +31 +1.564545801366135 +12 +1.2504634291176997 +22 +0.16751202849710456 +32 +-0.02132949742758803 +13 +1.2504634291176997 +23 +0.16751202849710456 +33 +-0.02132949742758803 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7290604211742295 +20 +0.45593246326086423 +30 +2.4433926714277017 +11 +1.762086951023649 +21 +0.4427655915752502 +31 +2.4415397106694483 +12 +1.6348397414833575 +22 +0.4693393076118373 +32 +1.7186951844850427 +13 +1.6348397414833575 +23 +0.4693393076118373 +33 +1.7186951844850427 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6575963182281532 +20 +0.13944168805466128 +30 +1.566030166232445 +11 +1.7248183593506174 +21 +0.11373378942971202 +31 +1.7136469078498038 +12 +1.6983615416950928 +22 +0.08062218929093451 +32 +1.715131272716112 +13 +1.6983615416950928 +23 +0.08062218929093451 +33 +1.715131272716112 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7045232859296717 +20 +0.38133522453188085 +30 +1.563397323933316 +11 +1.745288509396618 +21 +0.3652028204405948 +31 +1.7124984304169848 +12 +1.7580007364328771 +22 +0.3149626835100081 +32 +1.7117852072062885 +13 +1.7580007364328771 +23 +0.3149626835100081 +33 +1.7117852072062885 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6267999741316135 +20 +0.12174651827402361 +30 +1.5677580014049102 +11 +1.2236774151144043 +21 +0.13952109683086134 +31 +-0.021329497427588037 +12 +1.6575963182281532 +22 +0.13944168805466128 +32 +1.566030166232445 +13 +1.6575963182281532 +23 +0.13944168805466128 +33 +1.566030166232445 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7045232859296717 +20 +0.38133522453188085 +30 +1.563397323933316 +11 +1.7580007364328771 +21 +0.3149626835100081 +31 +1.7117852072062885 +12 +1.7172355129659331 +22 +0.3386311081408655 +32 +1.5626841007226204 +13 +1.7172355129659331 +23 +0.3386311081408655 +33 +1.5626841007226204 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6842735371540238 +20 +0.4180043864972566 +30 +1.5645334413018623 +11 +1.7045232859296717 +21 +0.38133522453188085 +31 +1.563397323933316 +12 +1.2507989254112186 +22 +0.4173719437487061 +32 +-0.021329497427587975 +13 +1.2507989254112186 +23 +0.4173719437487061 +33 +-0.021329497427587975 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7043674386969119 +20 +0.20426307292245227 +30 +1.5634060638185832 +11 +1.7451326621638448 +21 +0.15688264207656666 +31 +1.71250717030225 +12 +1.6840531358836734 +22 +0.16758654817261043 +32 +1.564545801366135 +13 +1.6840531358836734 +23 +0.16758654817261043 +33 +1.564545801366135 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7172355129659331 +20 +0.3386311081408655 +30 +1.5626841007226204 +11 +1.7215439009982167 +21 +0.29280225228437573 +31 +1.5624423766529374 +12 +1.2841736058160016 +22 +0.3381150408717304 +32 +-0.021329497427588 +13 +1.2841736058160016 +23 +0.3381150408717304 +33 +-0.021329497427588 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7579200639689365 +20 +0.20712822423046562 +30 +1.7117897313038086 +11 +1.7451326621638448 +21 +0.15688264207656666 +31 +1.71250717030225 +12 +1.7043674386969119 +22 +0.20426307292245227 +32 +1.5634060638185832 +13 +1.7043674386969119 +23 +0.20426307292245227 +33 +1.5634060638185832 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8395091890875015 +20 +0.262575137633017 +30 +2.437195917359645 +11 +1.8550642056421511 +21 +0.24694416264779395 +31 +2.57411522137017 +12 +1.8522214161237673 +22 +0.16929084525907834 +32 +2.4364826941489497 +13 +1.8522214161237673 +23 +0.16929084525907834 +33 +2.4364826941489497 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8348144568665077 +20 +0.3350556335425835 +30 +2.575251338738716 +11 +1.8550642056421511 +21 +0.24694416264779395 +31 +2.57411522137017 +12 +1.8395091890875015 +22 +0.262575137633017 +32 +2.437195917359645 +13 +1.8395091890875015 +23 +0.262575137633017 +33 +2.437195917359645 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7172355129659331 +20 +0.3386311081408655 +30 +1.5626841007226204 +11 +1.7580007364328771 +21 +0.3149626835100081 +31 +1.7117852072062885 +12 +1.7215439009982167 +22 +0.29280225228437573 +32 +1.5624423766529374 +13 +1.7215439009982167 +23 +0.29280225228437573 +33 +1.5624423766529374 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6578662535535986 +20 +0.4461396512477167 +30 +1.566015028307111 +11 +1.698631477020556 +21 +0.4414433224592369 +31 +1.715116134790779 +12 +1.72503876062097 +22 +0.4083430109881152 +32 +1.7136345477855313 +13 +1.72503876062097 +23 +0.4083430109881152 +33 +1.7136345477855313 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8084071732660914 +20 +0.4026612025904063 +30 +2.576732925743964 +11 +1.8348144568665077 +21 +0.3350556335425835 +31 +2.575251338738716 +12 +1.8192594403118558 +22 +0.3426764748101059 +32 +2.438332034728192 +13 +1.8192594403118558 +23 +0.3426764748101059 +33 +2.438332034728192 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7215439009982167 +20 +0.29280225228437573 +30 +1.5624423766529374 +11 +1.7623091244651496 +21 +0.26104638250238477 +31 +1.7115434831366068 +12 +1.7579200639689365 +22 +0.20712822423046562 +32 +1.7117897313038086 +13 +1.7579200639689365 +23 +0.20712822423046562 +33 +1.7117897313038086 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7579200639689365 +20 +0.20712822423046562 +30 +1.7117897313038086 +11 +1.8521407436598245 +21 +-0.030932757660463273 +31 +2.436487218246467 +12 +1.8393533418547328 +22 +-0.12422716055224386 +32 +2.4372046572449104 +13 +1.8393533418547328 +23 +-0.12422716055224386 +33 +2.4372046572449104 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6840531358836734 +20 +0.16758654817261043 +30 +1.564545801366135 +11 +1.7451326621638448 +21 +0.15688264207656666 +31 +1.71250717030225 +12 +1.7248183593506174 +22 +0.11373378942971202 +32 +1.7136469078498038 +13 +1.7248183593506174 +23 +0.11373378942971202 +33 +1.7136469078498038 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7446152966499613 +20 +-0.3913456583466878 +30 +2.580311975438275 +11 +1.7437745197997272 +21 +-0.3873643428597891 +31 +2.572911231993639 +12 +1.7409189549547188 +22 +-0.39135639924089705 +32 +2.578281768371061 +13 +1.7409189549547188 +23 +-0.39135639924089705 +33 +2.578281768371061 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7215439009982167 +20 +0.29280225228437573 +30 +1.5624423766529374 +11 +1.7579200639689365 +21 +0.20712822423046562 +31 +1.7117897313038086 +12 +1.7171548405019925 +22 +0.24697181775326893 +32 +1.562688624820141 +13 +1.7171548405019925 +23 +0.24697181775326893 +33 +1.562688624820141 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.762086951023649 +20 +0.4427655915752502 +30 +2.4415397106694483 +11 +1.698631477020556 +21 +0.4414433224592369 +31 +1.715116134790779 +12 +1.6678662713327677 +22 +0.4622480233280828 +32 +1.7168422237267897 +13 +1.6678662713327677 +23 +0.4622480233280828 +33 +1.7168422237267897 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8549083584093868 +20 +-0.17853836535603948 +30 +2.5741239612554403 +11 +1.834594055596155 +21 +-0.2666675281131681 +31 +2.575263698802992 +12 +1.8190390390415143 +22 +-0.20434458124056845 +32 +2.4383443947924617 +13 +1.8190390390415143 +23 +-0.20434458124056845 +33 +2.4383443947924617 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7446152966499613 +20 +-0.3913456583466878 +30 +2.580311975438275 +11 +1.7617858772894388 +21 +-0.30447906739496566 +31 +2.441556594831235 +12 +1.7773408938440884 +22 +-0.37681546288299567 +32 +2.578475898841768 +13 +1.7773408938440884 +23 +-0.37681546288299567 +33 +2.578475898841768 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7580007364328771 +20 +0.3149626835100081 +30 +1.7117852072062885 +11 +1.8565298041560327 +21 +0.06918076805400641 +31 +2.4362409700792664 +12 +1.7623091244651496 +22 +0.26104638250238477 +32 +1.7115434831366068 +13 +1.7623091244651496 +23 +0.26104638250238477 +33 +1.7115434831366068 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6678662713327677 +20 +0.4622480233280828 +30 +1.7168422237267897 +11 +1.6578662535535986 +21 +0.4461396512477167 +31 +1.566015028307111 +12 +1.6271010478658303 +22 +0.4638236469862328 +32 +1.567741117243121 +13 +1.6271010478658303 +23 +0.4638236469862328 +33 +1.567741117243121 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7580007364328771 +20 +0.3149626835100081 +30 +1.7117852072062885 +11 +1.7623091244651496 +21 +0.26104638250238477 +31 +1.7115434831366068 +12 +1.7215439009982167 +22 +0.29280225228437573 +32 +1.5624423766529374 +13 +1.7215439009982167 +23 +0.29280225228437573 +33 +1.5624423766529374 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6840531358836734 +20 +0.16758654817261043 +30 +1.564545801366135 +11 +1.7248183593506174 +21 +0.11373378942971202 +31 +1.7136469078498038 +12 +1.6575963182281532 +22 +0.13944168805466128 +32 +1.566030166232445 +13 +1.6575963182281532 +23 +0.13944168805466128 +33 +1.566030166232445 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7776419675782986 +20 +0.44515366198423323 +30 +2.578459014679979 +11 +1.762086951023649 +21 +0.4427655915752502 +31 +2.4415397106694483 +12 +1.7290604211742295 +22 +0.45593246326086423 +32 +2.4433926714277017 +13 +1.7290604211742295 +23 +0.45593246326086423 +33 +2.4433926714277017 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.7895715899620932 +20 +0.41891736303231675 +30 +2.7217694811906528 +11 +-1.7532287476248738 +21 +0.42997336695883304 +31 +2.1850363490651525 +12 +-1.3438353594874726 +22 +0.42997289595543453 +32 +2.3082689981735225 +13 +-1.3438353594874726 +23 +0.42997289595543453 +33 +2.3082689981735225 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6578662535535986 +20 +0.4461396512477167 +30 +1.566015028307111 +11 +1.6842735371540238 +21 +0.4180043864972566 +31 +1.5645334413018623 +12 +1.2238034110911722 +22 +0.4454575748968931 +32 +-0.021329497427587968 +13 +1.2238034110911722 +23 +0.4454575748968931 +33 +-0.021329497427587968 +70 +0 + 0 +LINE + 8 +palm +10 +1.7696706587222877 +20 +-0.35198670100650886 +30 +2.7811361899186524 +11 +1.7679994781424735 +21 +-0.3519867007325644 +31 +2.786145599142259 + 0 +3DFACE + 8 +palm +10 +1.745288509396618 +20 +0.3652028204405948 +30 +1.7124984304169848 +11 +1.8522214161237673 +21 +0.16929084525907834 +31 +2.4364826941489497 +12 +1.7580007364328771 +22 +0.3149626835100081 +32 +1.7117852072062885 +13 +1.7580007364328771 +23 +0.3149626835100081 +33 +1.7117852072062885 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7721548011833212 +20 +0.429174626495198 +30 +2.82272071211574 +11 +1.8042763848132697 +21 +0.4693392798390309 +31 +3.3604633371264394 +12 +1.8042763765484142 +22 +0.4189167739554035 +32 +3.3604633371264274 +13 +1.8042763765484142 +23 +0.4189167739554035 +33 +3.3604633371264274 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.8042763848132697 +20 +0.4693392798390309 +30 +3.3604633371264394 +11 +1.7721548011833212 +21 +0.429174626495198 +31 +2.82272071211574 +12 +1.7721548077676246 +22 +0.4693392851041711 +32 +2.8227207121156974 +13 +1.7721548077676246 +23 +0.4693392851041711 +33 +2.8227207121156974 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7446154379169838 +20 +0.46077168557314707 +30 +2.580311975438233 +11 +1.7776419675782986 +21 +0.44515366198423323 +31 +2.578459014679979 +12 +1.7290604211742295 +22 +0.45593246326086423 +32 +2.4433926714277017 +13 +1.7290604211742295 +23 +0.45593246326086423 +33 +2.4433926714277017 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940743769374797 +20 +0.11569951797502342 +30 +1.5695940780014193 +11 +1.1922941387017831 +21 +0.12173074383943339 +31 +-0.021329497427588044 +12 +1.6267999741316135 +22 +0.12174651827402361 +32 +1.5677580014049102 +13 +1.6267999741316135 +23 +0.12174651827402361 +33 +1.5677580014049102 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026165657096 +20 +-0.3519866678686142 +30 +3.387140392775377 +11 +1.7721546731419455 +21 +-0.3519867014136748 +31 +2.8227207121156908 +12 +1.7679994781424735 +22 +-0.3519867007325644 +32 +2.786145599142259 +13 +1.7679994781424735 +23 +-0.3519867007325644 +33 +2.786145599142259 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7721546731419455 +20 +-0.3519867014136748 +30 +2.8227207121156908 +11 +1.5675026165657096 +21 +-0.3519866678686142 +31 +3.387140392775377 +12 +1.7926934652283346 +22 +-0.3519867047802352 +32 +3.166557627574764 +13 +1.7926934652283346 +23 +-0.3519867047802352 +33 +3.166557627574764 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.8190390390415143 +20 +-0.20434458124056845 +30 +2.4383443947924617 +11 +1.834594055596155 +21 +-0.2666675281131681 +31 +2.575263698802992 +12 +1.792582221385972 +22 +-0.26582514990585526 +32 +2.4398287596587718 +13 +1.792582221385972 +23 +-0.26582514990585526 +33 +2.4398287596587718 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.698631477020556 +20 +0.4414433224592369 +30 +1.715116134790779 +11 +1.7928521567114306 +21 +0.40413608303543147 +31 +2.439813621733438 +12 +1.8192594403118558 +22 +0.3426764748101059 +32 +2.438332034728192 +13 +1.8192594403118558 +23 +0.3426764748101059 +33 +2.438332034728192 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.792582221385972 +20 +-0.26582514990585526 +30 +2.4398287596587718 +11 +1.834594055596155 +21 +-0.2666675281131681 +31 +2.575263698802992 +12 +1.8081372379406215 +22 +-0.33429615364499293 +32 +2.5767480636693016 +13 +1.8081372379406215 +23 +-0.33429615364499293 +33 +2.5767480636693016 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.49742734357691054 +20 +0.46933965711727876 +30 +3.460249444335772 +11 +-0.433275824211661 +21 +0.6693396466020395 +31 +2.4623092723969795 +12 +-1.4736623075547448 +22 +0.4693398171344658 +32 +3.1019128637859295 +13 +-1.4736623075547448 +23 +0.4693398171344658 +33 +3.1019128637859295 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001768207931099 +20 +0.41891698771371944 +30 +3.617705458439768 +11 +-0.49742734357691054 +21 +0.46933965711727876 +31 +3.460249444335772 +12 +-0.4974273518417929 +22 +0.41891715123359774 +32 +3.4602494443357763 +13 +-0.4974273518417929 +23 +0.41891715123359774 +33 +3.4602494443357763 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.49742734357691054 +20 +0.46933965711727876 +30 +3.460249444335772 +11 +0.5001768207931099 +21 +0.41891698771371944 +31 +3.617705458439768 +12 +0.0013747427405363943 +22 +0.46933957535736426 +32 +3.53897745138778 +13 +0.0013747427405363943 +23 +0.46933957535736426 +33 +3.53897745138778 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.0013747427405363943 +20 +0.46933957535736426 +30 +3.53897745138778 +11 +0.5001768207931099 +21 +0.41891698771371944 +31 +3.617705458439768 +12 +0.500176829057992 +22 +0.4693394935974071 +32 +3.6177054584397785 +13 +0.500176829057992 +23 +0.4693394935974071 +33 +3.6177054584397785 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.0013747427405363943 +20 +0.46933957535736426 +30 +3.53897745138778 +11 +0.005897113385843644 +21 +0.6693395746160492 +31 +2.540767132815593 +12 +-0.49742734357691054 +22 +0.46933965711727876 +32 +3.460249444335772 +13 +-0.49742734357691054 +23 +0.46933965711727876 +33 +3.460249444335772 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8042763765484142 +20 +0.4189167739554035 +30 +3.3604633371264274 +11 +1.567502748292268 +21 +0.4693393186492294 +31 +3.5817379898496267 +12 +1.5675027400274082 +22 +0.4189168127655707 +32 +3.5817379898496142 +13 +1.5675027400274082 +23 +0.4189168127655707 +33 +3.5817379898496142 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.567502748292268 +20 +0.4693393186492294 +30 +3.5817379898496267 +11 +1.8042763765484142 +21 +0.4189167739554035 +31 +3.3604633371264274 +12 +1.8042763848132697 +22 +0.4693392798390309 +32 +3.3604633371264394 +13 +1.8042763848132697 +23 +0.4693392798390309 +33 +3.3604633371264394 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7604022996639854 +20 +0.4693398641347575 +30 +2.906434883050858 +11 +-1.2344292513491493 +21 +0.5693397779211644 +31 +2.1309506849853554 +12 +-1.7895715816972064 +22 +0.4693398689159888 +32 +2.721769481190647 +13 +-1.7895715816972064 +23 +0.4693398689159888 +33 +2.721769481190647 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.500176829057992 +20 +0.4693394935974071 +30 +3.6177054584397785 +11 +1.567502748292268 +21 +0.4693393186492294 +31 +3.5817379898496267 +12 +0.4450700509834469 +22 +0.6693395026301509 +32 +2.619224993234204 +13 +0.4450700509834469 +23 +0.6693395026301509 +33 +2.619224993234204 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.4974274817566946 +20 +-0.39135632940056486 +30 +3.2656518472615215 +11 +-1.4736624392813298 +21 +-0.3519861693833375 +31 +2.907315266711701 +12 +-1.4736624457345466 +22 +-0.3913561693833688 +32 +2.907315266711703 +13 +-1.4736624457345466 +23 +-0.3913561693833688 +33 +2.907315266711703 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.4736624392813298 +20 +-0.3519861693833375 +30 +2.907315266711701 +11 +-0.4974274817566946 +21 +-0.39135632940056486 +31 +3.2656518472615215 +12 +-0.497427475303424 +22 +-0.3519863294005559 +32 +3.2656518472615206 +13 +-0.497427475303424 +23 +-0.3519863294005559 +33 +3.2656518472615206 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5511466302233783 +20 +-0.35198650127506403 +30 +2.822685108166137 +11 +-0.4070164569928685 +21 +0.42997157245158046 +31 +2.665229116319892 +12 +-0.4070165851656482 +22 +-0.35198634422005987 +32 +2.665229116319886 +13 +-0.4070165851656482 +23 +-0.35198634422005987 +33 +2.665229116319886 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.4070164569928685 +20 +0.42997157245158046 +30 +2.665229116319892 +11 +0.5511466302233783 +21 +-0.35198650127506403 +31 +2.822685108166137 +12 +0.5511467583958203 +22 +0.4299694852427818 +32 +2.8226851081661346 +13 +0.5511467583958203 +23 +0.4299694852427818 +33 +2.8226851081661346 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.792582221385972 +20 +-0.26582514990585526 +30 +2.4398287596587718 +11 +1.8081372379406215 +21 +-0.33429615364499293 +31 +2.5767480636693016 +12 +1.7617858772894388 +22 +-0.30447906739496566 +32 +2.441556594831235 +13 +1.7617858772894388 +23 +-0.30447906739496566 +33 +2.441556594831235 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.7604023079288675 +20 +0.418917358251119 +30 +2.9064348830508573 +11 +-1.7895715899620932 +21 +0.41891736303231675 +31 +2.7217694811906528 +12 +-1.3438353594874726 +22 +0.42997289595543453 +32 +2.3082689981735225 +13 +-1.3438353594874726 +23 +0.42997289595543453 +33 +2.3082689981735225 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.7895715816972064 +20 +0.4693398689159888 +30 +2.721769481190647 +11 +-1.2344292513491493 +21 +0.5693397779211644 +31 +2.1309506849853554 +12 +-1.7191704438325688 +22 +0.4523487095976748 +32 +1.9757999849928511 +13 +-1.7191704438325688 +23 +0.4523487095976748 +33 +1.9757999849928511 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.2851012666870065 +20 +0.5693393649383878 +30 +2.603406296512527 +11 +1.7290604211742295 +21 +0.45593246326086423 +31 +2.4433926714277017 +12 +1.6348397414833575 +22 +0.4693393076118373 +32 +1.7186951844850427 +13 +1.6348397414833575 +23 +0.4693393076118373 +33 +1.7186951844850427 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.4736623075547448 +20 +0.4693398171344658 +30 +3.1019128637859295 +11 +-0.433275824211661 +21 +0.6693396466020395 +31 +2.4623092723969795 +12 +-1.2344292513491493 +22 +0.5693397779211644 +32 +2.1309506849853554 +13 +-1.2344292513491493 +23 +0.5693397779211644 +33 +2.1309506849853554 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.500176829057992 +20 +0.4693394935974071 +30 +3.6177054584397785 +11 +0.005897113385843644 +21 +0.6693395746160492 +31 +2.540767132815593 +12 +0.0013747427405363943 +22 +0.46933957535736426 +32 +3.53897745138778 +13 +0.0013747427405363943 +23 +0.46933957535736426 +33 +3.53897745138778 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.4736623158196023 +20 +0.41891731125080267 +30 +3.1019128637859286 +11 +-1.7604023079288675 +21 +0.418917358251119 +31 +2.9064348830508573 +12 +-1.3438353594874726 +22 +0.42997289595543453 +32 +2.3082689981735225 +13 +-1.3438353594874726 +23 +0.42997289595543453 +33 +2.3082689981735225 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.4736624392813298 +20 +-0.3519861693833375 +30 +2.907315266711701 +11 +-0.4070165851656482 +21 +-0.35198634422005987 +31 +2.665229116319886 +12 +-1.3438354876604606 +22 +-0.3519861906636493 +32 +2.3082689981735207 +13 +-1.3438354876604606 +23 +-0.3519861906636493 +33 +2.3082689981735207 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.4070165851656482 +20 +-0.35198634422005987 +30 +2.665229116319886 +11 +-1.4736624392813298 +21 +-0.3519861693833375 +31 +2.907315266711701 +12 +-0.497427475303424 +22 +-0.3519863294005559 +32 +3.2656518472615206 +13 +-0.497427475303424 +23 +-0.3519863294005559 +33 +3.2656518472615206 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.49742734357691054 +20 +0.46933965711727876 +30 +3.460249444335772 +11 +0.005897113385843644 +21 +0.6693395746160492 +31 +2.540767132815593 +12 +-0.433275824211661 +22 +0.6693396466020395 +32 +2.4623092723969795 +13 +-0.433275824211661 +23 +0.6693396466020395 +33 +2.4623092723969795 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.47725266850529624 +20 +-0.09848891117181602 +30 +0.8571105745168952 +11 +0.5928956312949423 +21 +-0.2929528290576049 +31 +0.9561792041941095 +12 +0.538904362268551 +22 +-0.10552659486033339 +32 +0.9648346235437796 +13 +0.538904362268551 +23 +-0.10552659486033339 +33 +0.9648346235437796 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.497427475303424 +20 +-0.3519863294005559 +30 +3.2656518472615206 +11 +0.5511466302233783 +21 +-0.35198650127506403 +31 +2.822685108166137 +12 +-0.4070165851656482 +22 +-0.35198634422005987 +32 +2.665229116319886 +13 +-0.4070165851656482 +23 +-0.35198634422005987 +33 +2.665229116319886 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5511466302233783 +20 +-0.35198650127506403 +30 +2.822685108166137 +11 +-0.497427475303424 +21 +-0.3519863294005559 +31 +3.2656518472615206 +12 +0.5001766973314854 +22 +-0.351986492920461 +32 +3.4231078613655503 +13 +0.5001766973314854 +23 +-0.351986492920461 +33 +3.4231078613655503 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.772154666688709 +20 +-0.3913567014136412 +30 +2.822720712115689 +11 +1.7696706522690528 +21 +-0.39135670100649095 +31 +2.781136189918648 +12 +1.7446152966499613 +22 +-0.3913456583466878 +32 +2.580311975438275 +13 +1.7446152966499613 +23 +-0.3913456583466878 +33 +2.580311975438275 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7623091244651496 +20 +0.26104638250238477 +30 +1.7115434831366068 +11 +1.8565298041560327 +21 +0.06918076805400641 +31 +2.4362409700792664 +12 +1.8521407436598245 +22 +-0.030932757660463273 +32 +2.436487218246467 +13 +1.8521407436598245 +23 +-0.030932757660463273 +33 +2.436487218246467 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.567502748292268 +20 +0.4693393186492294 +30 +3.5817379898496267 +11 +1.2851012666870065 +21 +0.5693393649383878 +31 +2.603406296512527 +12 +0.4450700509834469 +22 +0.6693395026301509 +32 +2.619224993234204 +13 +0.4450700509834469 +23 +0.6693395026301509 +33 +2.619224993234204 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7926934587751069 +20 +-0.3913567047802016 +30 +3.1665576275747647 +11 +1.5675026165657096 +21 +-0.3519866678686142 +31 +3.387140392775377 +12 +1.5675026101124707 +22 +-0.39135666786861645 +32 +3.387140392775373 +13 +1.5675026101124707 +23 +-0.39135666786861645 +33 +3.387140392775373 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.5675026165657096 +20 +-0.3519866678686142 +30 +3.387140392775377 +11 +1.7926934587751069 +21 +-0.3913567047802016 +31 +3.1665576275747647 +12 +1.7926934652283346 +22 +-0.3519867047802352 +32 +3.166557627574764 +13 +1.7926934652283346 +23 +-0.3519867047802352 +33 +3.166557627574764 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.500176829057992 +20 +0.4693394935974071 +30 +3.6177054584397785 +11 +0.4450700509834469 +21 +0.6693395026301509 +31 +2.619224993234204 +12 +0.005897113385843644 +22 +0.6693395746160492 +32 +2.540767132815593 +13 +0.005897113385843644 +23 +0.6693395746160492 +33 +2.540767132815593 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.7532287476248738 +20 +0.42997336695883304 +30 +2.1850363490651525 +11 +-1.7895717163228786 +21 +-0.3519861176018548 +31 +2.721769481190651 +12 +-1.7532288757978818 +22 +-0.35198612355890113 +32 +2.1850363490651508 +13 +-1.7532288757978818 +23 +-0.35198612355890113 +33 +2.1850363490651508 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7895717163228786 +20 +-0.3519861176018548 +30 +2.721769481190651 +11 +-1.7532287476248738 +21 +0.42997336695883304 +31 +2.1850363490651525 +12 +-1.7895715899620932 +22 +0.41891736303231675 +32 +2.7217694811906528 +13 +-1.7895715899620932 +23 +0.41891736303231675 +33 +2.7217694811906528 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.4736623075547448 +20 +0.4693398171344658 +30 +3.1019128637859295 +11 +-1.2344292513491493 +21 +0.5693397779211644 +31 +2.1309506849853554 +12 +-1.7604022996639854 +22 +0.4693398641347575 +32 +2.906434883050858 +13 +-1.7604022996639854 +23 +0.4693398641347575 +33 +2.906434883050858 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7617858772894388 +20 +-0.30447906739496566 +30 +2.441556594831235 +11 +1.7437745197997272 +21 +-0.3873643428597891 +31 +2.572911231993639 +12 +1.7290602943681443 +22 +-0.3176883359983307 +32 +2.443392671427686 +13 +1.7290602943681443 +23 +-0.3176883359983307 +33 +2.443392671427686 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7437745197997272 +20 +-0.3873643428597891 +30 +2.572911231993639 +11 +1.7617858772894388 +21 +-0.30447906739496566 +31 +2.441556594831235 +12 +1.7446152966499613 +22 +-0.3913456583466878 +32 +2.580311975438275 +13 +1.7446152966499613 +23 +-0.3913456583466878 +33 +2.580311975438275 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.6840531358836734 +20 +0.16758654817261043 +30 +1.564545801366135 +11 +1.6575963182281532 +21 +0.13944168805466128 +31 +1.566030166232445 +12 +1.2236774151144043 +22 +0.13952109683086134 +32 +-0.021329497427588037 +13 +1.2236774151144043 +23 +0.13952109683086134 +33 +-0.021329497427588037 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7721548011833212 +20 +0.429174626495198 +30 +2.82272071211574 +11 +1.5675027400274082 +21 +0.4189168127655707 +31 +3.5817379898496142 +12 +1.7681256490688513 +22 +0.42988342156321946 +32 +2.787255060548812 +13 +1.7681256490688513 +23 +0.42988342156321946 +33 +2.787255060548812 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.5675027400274082 +20 +0.4189168127655707 +30 +3.5817379898496142 +11 +1.7721548011833212 +21 +0.429174626495198 +31 +2.82272071211574 +12 +1.8042763765484142 +22 +0.4189167739554035 +32 +3.3604633371264274 +13 +1.8042763765484142 +23 +0.4189167739554035 +33 +3.3604633371264274 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.567502748292268 +20 +0.4693393186492294 +30 +3.5817379898496267 +11 +1.8042763848132697 +21 +0.4693392798390309 +31 +3.3604633371264394 +12 +1.2851012666870065 +22 +0.5693393649383878 +32 +2.603406296512527 +13 +1.2851012666870065 +23 +0.5693393649383878 +33 +2.603406296512527 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6983615416950928 +20 +0.08062218929093451 +30 +1.715131272716112 +11 +1.6267999741316135 +21 +0.12174651827402361 +31 +1.5677580014049102 +12 +1.6575963182281532 +22 +0.13944168805466128 +32 +1.566030166232445 +13 +1.6575963182281532 +23 +0.13944168805466128 +33 +1.566030166232445 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.4974273518417929 +20 +0.41891715123359774 +30 +3.4602494443357763 +11 +-1.4736623075547448 +21 +0.4693398171344658 +31 +3.1019128637859295 +12 +-1.4736623158196023 +22 +0.41891731125080267 +32 +3.1019128637859286 +13 +-1.4736623158196023 +23 +0.41891731125080267 +33 +3.1019128637859286 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.4736623075547448 +20 +0.4693398171344658 +30 +3.1019128637859295 +11 +-0.4974273518417929 +21 +0.41891715123359774 +31 +3.4602494443357763 +12 +-0.49742734357691054 +22 +0.46933965711727876 +32 +3.460249444335772 +13 +-0.49742734357691054 +23 +0.46933965711727876 +33 +3.460249444335772 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.745288509396618 +20 +0.3652028204405948 +30 +1.7124984304169848 +11 +1.8395091890875015 +21 +0.262575137633017 +31 +2.437195917359645 +12 +1.8522214161237673 +22 +0.16929084525907834 +32 +2.4364826941489497 +13 +1.8522214161237673 +23 +0.16929084525907834 +33 +2.4364826941489497 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6842735371540238 +20 +0.4180043864972566 +30 +1.5645334413018623 +11 +1.72503876062097 +21 +0.4083430109881152 +31 +1.7136345477855313 +12 +1.7045232859296717 +22 +0.38133522453188085 +32 +1.563397323933316 +13 +1.7045232859296717 +23 +0.38133522453188085 +33 +1.563397323933316 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.4070165851656482 +20 +-0.35198634422005987 +30 +2.665229116319886 +11 +-1.3438353594874726 +21 +0.42997289595543453 +31 +2.3082689981735225 +12 +-1.3438354876604606 +22 +-0.3519861906636493 +32 +2.3082689981735207 +13 +-1.3438354876604606 +23 +-0.3519861906636493 +33 +2.3082689981735207 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.3438353594874726 +20 +0.42997289595543453 +30 +2.3082689981735225 +11 +-0.4070165851656482 +21 +-0.35198634422005987 +31 +2.665229116319886 +12 +-0.4070164569928685 +22 +0.42997157245158046 +32 +2.665229116319892 +13 +-0.4070164569928685 +23 +0.42997157245158046 +33 +2.665229116319892 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7928521567114306 +20 +0.40413608303543147 +30 +2.439813621733438 +11 +1.8084071732660914 +21 +0.4026612025904063 +31 +2.576732925743964 +12 +1.8192594403118558 +22 +0.3426764748101059 +32 +2.438332034728192 +13 +1.8192594403118558 +23 +0.3426764748101059 +33 +2.438332034728192 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6678662713327677 +20 +0.4622480233280828 +30 +1.7168422237267897 +11 +1.698631477020556 +21 +0.4414433224592369 +31 +1.715116134790779 +12 +1.6578662535535986 +22 +0.4461396512477167 +32 +1.566015028307111 +13 +1.6578662535535986 +23 +0.4461396512477167 +33 +1.566015028307111 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +-0.497427475303424 +21 +-0.3519863294005559 +31 +3.2656518472615206 +12 +-0.4974274817566946 +22 +-0.39135632940056486 +32 +3.2656518472615215 +13 +-0.4974274817566946 +23 +-0.39135632940056486 +33 +3.2656518472615215 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.497427475303424 +20 +-0.3519863294005559 +30 +3.2656518472615206 +11 +0.5001766908782079 +21 +-0.39135649292046104 +31 +3.4231078613655503 +12 +0.5001766973314854 +22 +-0.351986492920461 +32 +3.4231078613655503 +13 +0.5001766973314854 +23 +-0.351986492920461 +33 +3.4231078613655503 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.698631477020556 +20 +0.4414433224592369 +30 +1.715116134790779 +11 +1.8192594403118558 +21 +0.3426764748101059 +31 +2.438332034728192 +12 +1.72503876062097 +22 +0.4083430109881152 +32 +1.7136345477855313 +13 +1.72503876062097 +23 +0.4083430109881152 +33 +1.7136345477855313 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6267999741316135 +20 +0.12174651827402361 +30 +1.5677580014049102 +11 +1.1922941387017831 +21 +0.12173074383943339 +31 +-0.021329497427588044 +12 +1.2236774151144043 +22 +0.13952109683086134 +32 +-0.021329497427588037 +13 +1.2236774151144043 +23 +0.13952109683086134 +33 +-0.021329497427588037 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8550642056421511 +20 +0.24694416264779395 +30 +2.57411522137017 +11 +1.895315802717162 +21 +0.15043460930003982 +31 +2.8158107348369414 +12 +1.867776432678417 +22 +0.1443314410364377 +32 +2.5734019981594765 +13 +1.867776432678417 +23 +0.1443314410364377 +33 +2.5734019981594765 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.895315802717162 +20 +0.15043460930003982 +30 +2.8158107348369414 +11 +1.8550642056421511 +21 +0.24694416264779395 +31 +2.57411522137017 +12 +1.8826035756809005 +22 +0.2542185511592471 +32 +2.8165239580476373 +13 +1.8826035756809005 +23 +0.2542185511592471 +33 +2.8165239580476373 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.6678662713327677 +20 +0.4622480233280828 +30 +1.7168422237267897 +11 +1.6271010478658303 +21 +0.4638236469862328 +31 +1.567741117243121 +12 +1.5940745180163998 +22 +0.4698512386274375 +32 +1.569594078001374 +13 +1.5940745180163998 +23 +0.4698512386274375 +33 +1.569594078001374 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6675651975985641 +20 +0.05980434249020211 +30 +1.716859107888579 +11 +1.5940743769374797 +21 +0.11569951797502342 +31 +1.5695940780014193 +12 +1.6267999741316135 +22 +0.12174651827402361 +32 +1.5677580014049102 +13 +1.6267999741316135 +23 +0.12174651827402361 +33 +1.5677580014049102 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8393533418547328 +20 +-0.12422716055224386 +30 +2.4372046572449104 +11 +1.8549083584093868 +21 +-0.17853836535603948 +31 +2.5741239612554403 +12 +1.8190390390415143 +22 +-0.20434458124056845 +32 +2.4383443947924617 +13 +1.8190390390415143 +23 +-0.20434458124056845 +33 +2.4383443947924617 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7290602943681443 +20 +-0.3176883359983307 +30 +2.443392671427686 +11 +1.6675651975985641 +21 +0.05980434249020211 +31 +1.716859107888579 +12 +1.7617858772894388 +22 +-0.30447906739496566 +32 +2.441556594831235 +13 +1.7617858772894388 +23 +-0.30447906739496566 +33 +2.441556594831235 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.804880263882849 +20 +-0.37666065849100255 +30 +2.8208846355192323 +11 +1.7721546731419455 +21 +-0.3519867014136748 +31 +2.8227207121156908 +12 +1.772154666688709 +22 +-0.3913567014136412 +32 +2.822720712115689 +13 +1.772154666688709 +23 +-0.3913567014136412 +33 +2.822720712115689 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7721546731419455 +20 +-0.3519867014136748 +30 +2.8227207121156908 +11 +1.804880263882849 +21 +-0.37666065849100255 +31 +2.8208846355192323 +12 +1.7721548011833212 +22 +0.429174626495198 +32 +2.82272071211574 +13 +1.7721548011833212 +23 +0.429174626495198 +33 +2.82272071211574 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.7721548011833212 +20 +0.429174626495198 +30 +2.82272071211574 +11 +1.804880263882849 +21 +-0.37666065849100255 +31 +2.8208846355192323 +12 +1.7721548077676246 +22 +0.4693392851041711 +32 +2.8227207121156974 +13 +1.7721548077676246 +23 +0.4693392851041711 +33 +2.8227207121156974 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.7721548077676246 +20 +0.4693392851041711 +30 +2.8227207121156974 +11 +1.804880263882849 +21 +-0.37666065849100255 +31 +2.8208846355192323 +12 +1.805181337617048 +22 +0.4546904111007235 +32 +2.820867751357442 +13 +1.805181337617048 +23 +0.4546904111007235 +33 +2.820867751357442 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.805181337617048 +20 +0.4546904111007235 +30 +2.820867751357442 +11 +1.804880263882849 +21 +-0.37666065849100255 +31 +2.8208846355192323 +12 +1.8356766079793665 +22 +-0.3336560344194598 +32 +2.8191568003467666 +13 +1.8356766079793665 +23 +-0.3336560344194598 +33 +2.8191568003467666 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.805181337617048 +20 +0.4546904111007235 +30 +2.820867751357442 +11 +1.8356766079793665 +21 +-0.3336560344194598 +31 +2.8191568003467666 +12 +1.8359465433048274 +22 +0.4117129433371637 +32 +2.8191416624214285 +13 +1.8359465433048274 +23 +0.4117129433371637 +33 +2.8191416624214285 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.8359465433048274 +20 +0.4117129433371637 +30 +2.8191416624214285 +11 +1.8356766079793665 +21 +-0.3336560344194598 +31 +2.8191568003467666 +12 +1.8621334256349 +22 +-0.2652554966498969 +32 +2.8176724354804583 +13 +1.8621334256349 +23 +-0.2652554966498969 +33 +2.8176724354804583 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.8359465433048274 +20 +0.4117129433371637 +30 +2.8191416624214285 +11 +1.8621334256349 +21 +-0.2652554966498969 +31 +2.8176724354804583 +12 +1.8623538269052708 +22 +0.34333572521797184 +32 +2.817660075416184 +13 +1.8623538269052708 +23 +0.34333572521797184 +33 +2.817660075416184 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.8623538269052708 +20 +0.34333572521797184 +30 +2.817660075416184 +11 +1.8621334256349 +21 +-0.2652554966498969 +31 +2.8176724354804583 +12 +1.882447728448143 +22 +-0.1761204287941148 +32 +2.8165326979329053 +13 +1.882447728448143 +23 +-0.1761204287941148 +33 +2.8165326979329053 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.8623538269052708 +20 +0.34333572521797184 +30 +2.817660075416184 +11 +1.882447728448143 +21 +-0.1761204287941148 +31 +2.8165326979329053 +12 +1.8826035756809005 +22 +0.2542185511592471 +32 +2.8165239580476373 +13 +1.8826035756809005 +23 +0.2542185511592471 +33 +2.8165239580476373 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.8826035756809005 +20 +0.2542185511592471 +30 +2.8165239580476373 +11 +1.882447728448143 +21 +-0.1761204287941148 +31 +2.8165326979329053 +12 +1.895235130253219 +22 +-0.07232523842382649 +32 +2.815815258934461 +13 +1.895235130253219 +23 +-0.07232523842382649 +33 +2.815815258934461 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.8826035756809005 +20 +0.2542185511592471 +30 +2.8165239580476373 +11 +1.895235130253219 +21 +-0.07232523842382649 +31 +2.815815258934461 +12 +1.895315802717162 +22 +0.15043460930003982 +32 +2.8158107348369414 +13 +1.895315802717162 +23 +0.15043460930003982 +33 +2.8158107348369414 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.895315802717162 +20 +0.15043460930003982 +30 +2.8158107348369414 +11 +1.895235130253219 +21 +-0.07232523842382649 +31 +2.815815258934461 +12 +1.8996241907494322 +22 +0.03905660376695963 +32 +2.81556901076726 +13 +1.8996241907494322 +23 +0.03905660376695963 +33 +2.81556901076726 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.8521407436598245 +20 +-0.030932757660463273 +30 +2.436487218246467 +11 +1.8676957602144741 +21 +-0.07591452217505529 +31 +2.573406522256996 +12 +1.8393533418547328 +22 +-0.12422716055224386 +32 +2.4372046572449104 +13 +1.8393533418547328 +23 +-0.12422716055224386 +33 +2.4372046572449104 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7451326621638448 +20 +0.15688264207656666 +30 +1.71250717030225 +11 +1.8393533418547328 +21 +-0.12422716055224386 +31 +2.4372046572449104 +12 +1.8190390390415143 +22 +-0.20434458124056845 +32 +2.4383443947924617 +13 +1.8190390390415143 +23 +-0.20434458124056845 +33 +2.4383443947924617 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.72503876062097 +20 +0.4083430109881152 +30 +1.7136345477855313 +11 +1.745288509396618 +21 +0.3652028204405948 +31 +1.7124984304169848 +12 +1.7045232859296717 +22 +0.38133522453188085 +32 +1.563397323933316 +13 +1.7045232859296717 +23 +0.38133522453188085 +33 +1.563397323933316 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7248183593506174 +20 +0.11373378942971202 +30 +1.7136469078498038 +11 +1.792582221385972 +21 +-0.26582514990585526 +31 +2.4398287596587718 +12 +1.6983615416950928 +22 +0.08062218929093451 +32 +1.715131272716112 +13 +1.6983615416950928 +23 +0.08062218929093451 +33 +1.715131272716112 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6675651975985641 +20 +0.05980434249020211 +30 +1.716859107888579 +11 +1.6267999741316135 +21 +0.12174651827402361 +31 +1.5677580014049102 +12 +1.6983615416950928 +22 +0.08062218929093451 +32 +1.715131272716112 +13 +1.6983615416950928 +23 +0.08062218929093451 +33 +1.715131272716112 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.792582221385972 +20 +-0.26582514990585526 +30 +2.4398287596587718 +11 +1.6675651975985641 +21 +0.05980434249020211 +31 +1.716859107888579 +12 +1.6983615416950928 +22 +0.08062218929093451 +32 +1.715131272716112 +13 +1.6983615416950928 +23 +0.08062218929093451 +33 +1.715131272716112 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7580007364328771 +20 +0.3149626835100081 +30 +1.7117852072062885 +11 +1.8522214161237673 +21 +0.16929084525907834 +31 +2.4364826941489497 +12 +1.8565298041560327 +22 +0.06918076805400641 +32 +2.4362409700792664 +13 +1.8565298041560327 +23 +0.06918076805400641 +33 +2.4362409700792664 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7171548405019925 +20 +0.24697181775326893 +30 +1.562688624820141 +11 +1.7043674386969119 +21 +0.20426307292245227 +31 +1.5634060638185832 +12 +1.271159922480886 +22 +0.20436827456875706 +32 +-0.02132949742758802 +13 +1.271159922480886 +23 +0.20436827456875706 +33 +-0.02132949742758802 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940745180163998 +20 +0.4698512386274375 +30 +1.569594078001374 +11 +1.6271010478658303 +21 +0.4638236469862328 +31 +1.567741117243121 +12 +1.1923382645753737 +22 +0.4633074583588208 +32 +-0.021329497427587964 +13 +1.1923382645753737 +23 +0.4633074583588208 +33 +-0.021329497427587964 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.762086951023649 +20 +0.4427655915752502 +30 +2.4415397106694483 +11 +1.7928521567114306 +21 +0.40413608303543147 +31 +2.439813621733438 +12 +1.698631477020556 +22 +0.4414433224592369 +32 +1.715116134790779 +13 +1.698631477020556 +23 +0.4414433224592369 +33 +1.715116134790779 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6675651975985641 +20 +0.05980434249020211 +30 +1.716859107888579 +11 +1.792582221385972 +21 +-0.26582514990585526 +31 +2.4398287596587718 +12 +1.7617858772894388 +22 +-0.30447906739496566 +32 +2.441556594831235 +13 +1.7617858772894388 +23 +-0.30447906739496566 +33 +2.441556594831235 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.2841736058160016 +20 +0.3381150408717304 +30 +-0.021329497427588 +11 +1.7215439009982167 +21 +0.29280225228437573 +31 +1.5624423766529374 +12 +1.288529285669313 +22 +0.2925487173065494 +32 +-0.02132949742758801 +13 +1.288529285669313 +23 +0.2925487173065494 +33 +-0.02132949742758801 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.8550642056421511 +20 +0.24694416264779395 +30 +2.57411522137017 +11 +1.867776432678417 +21 +0.1443314410364377 +31 +2.5734019981594765 +12 +1.8522214161237673 +22 +0.16929084525907834 +32 +2.4364826941489497 +13 +1.8522214161237673 +23 +0.16929084525907834 +33 +2.4364826941489497 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6578662535535986 +20 +0.4461396512477167 +30 +1.566015028307111 +11 +1.72503876062097 +21 +0.4083430109881152 +31 +1.7136345477855313 +12 +1.6842735371540238 +22 +0.4180043864972566 +32 +1.5645334413018623 +13 +1.6842735371540238 +23 +0.4180043864972566 +33 +1.5645334413018623 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7721548011833212 +20 +0.429174626495198 +30 +2.82272071211574 +11 +1.7696706587222877 +21 +-0.35198670100650886 +31 +2.7811361899186524 +12 +1.7721546731419455 +22 +-0.3519867014136748 +32 +2.8227207121156908 +13 +1.7721546731419455 +23 +-0.3519867014136748 +33 +2.8227207121156908 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.7696706587222877 +20 +-0.35198670100650886 +30 +2.7811361899186524 +11 +1.7721548011833212 +21 +0.429174626495198 +31 +2.82272071211574 +12 +1.7696707868944743 +22 +0.4299678831142456 +32 +2.7811361899186586 +13 +1.7696707868944743 +23 +0.4299678831142456 +33 +2.7811361899186586 +70 +1 + 0 +LINE + 8 +palm +10 +-1.2436067112524003 +20 +0.2718065911365386 +30 +-0.029987259526271456 +11 +-1.2556460136349066 +21 +-0.07243340606868914 +31 +-0.02998725868702173 + 0 +LINE + 8 +palm +10 +-1.2436067112524003 +20 +0.2718065911365386 +30 +-0.029987259526271456 +11 +-1.2427484297297295 +21 +0.25543757582213467 +31 +-0.029987258687021207 + 0 +LINE + 8 +palm +10 +-1.2235069381440584 +20 +0.3503683787193038 +30 +-0.029987259376548173 +11 +-1.2427484297297295 +21 +-0.13681041743678712 +31 +-0.029987258687023982 + 0 +LINE + 8 +palm +10 +-1.222231336631785 +20 +0.35348859913790154 +30 +-0.02998725936704609 +11 +-1.222231336631785 +21 +0.3432508349117811 +31 +-0.029987258687021765 + 0 +LINE + 8 +palm +10 +-1.1969713685029186 +20 +0.41362328422976613 +30 +-0.029987259178884056 +11 +-1.222231336631785 +21 +-0.2653531336950365 +31 +-0.029987258687020638 + 0 +LINE + 8 +palm +10 +-1.195492940329603 +20 +0.415575439582175 +30 +-0.02998725916787122 +11 +-1.195492940329603 +21 +0.41164114523825557 +31 +-0.029987258687021765 + 0 +LINE + 8 +palm +10 +-1.165880854722602 +20 +0.454676014406754 +30 +-0.029987259207558653 +11 +-1.195492940329603 +21 +-0.3337434440215132 +31 +-0.02998725868702064 + 0 +LINE + 8 +palm +10 +-1.1643554183438858 +20 +0.45594782017314683 +30 +-0.029987258687021203 +11 +-1.1643554183438858 +21 +-0.3767353903721002 +31 +-0.029987258687024003 + 0 +LINE + 8 +palm +10 +-1.1628506272117831 +20 +0.455947742071513 +30 +-0.029987258924717694 +11 +-1.1309407413407597 +21 +-0.3913562255597655 +31 +-0.029987258687019288 + 0 +LINE + 8 +palm +10 +-1.1309407413407642 +20 +0.4692968438672974 +30 +-0.02998725868702286 +11 +-1.1309407413407597 +21 +-0.3913562255597655 +31 +-0.029987258687019288 + 0 +LINE + 8 +palm +10 +-0.4032641176830618 +20 +0.4693396416827257 +30 +-0.029987253266541992 +11 +-1.1309407413407597 +21 +-0.3913562255597655 +31 +-0.029987258687019288 + 0 +LINE + 8 +palm +10 +-0.37798921673072106 +20 +0.4693396375398492 +30 +-0.029987253078268685 +11 +-0.578414963340186 +21 +-0.3913991426505551 +31 +-0.029987258687020648 + 0 +LINE + 8 +palm +10 +-0.3181654135425569 +20 +0.469339627733974 +30 +-0.029987252632639818 +11 +0.19808200538601128 +21 +0.02515989535827129 +31 +-0.029987258687020648 + 0 +LINE + 8 +palm +10 +0.0293145314722294 +20 +0.4693395707776401 +30 +-0.029987250044254076 +11 +0.19808200538601128 +21 +0.02515989535827129 +31 +-0.029987258687020648 + 0 +LINE + 8 +palm +10 +0.3767943786960426 +20 +0.4693395138213242 +30 +-0.02998724745586906 +11 +0.19808200538601128 +21 +0.02515989535827129 +31 +-0.029987258687020648 + 0 +LINE + 8 +palm +10 +0.3915316238299338 +20 +0.46933951140570074 +30 +-0.029987247346090977 +11 +0.3743671955219494 +21 +0.18194276692314504 +31 +-0.02998724746310961 + 0 +LINE + 8 +palm +10 +0.4066861946168403 +20 +0.4693395089216774 +30 +-0.029987247233204176 +11 +0.506526774807132 +21 +0.1156567745653565 +31 +-0.029987258687019527 + 0 +LINE + 8 +palm +10 +1.084906037085234 +20 +0.4693394175246698 +30 +-0.030006963059664236 +11 +0.506526774807132 +21 +0.1156567745653565 +31 +-0.029987258687019527 + 0 +LINE + 8 +palm +10 +1.084906037085234 +20 +0.4693394175246698 +30 +-0.030006963059664236 +11 +0.5115493143264411 +21 +0.1156567745653565 +31 +-0.030341524099559827 + 0 +LINE + 8 +palm +10 +1.1567373502034217 +20 +0.4692968438672974 +30 +-0.02998725868702286 +11 +1.1567374333163143 +21 +0.11569931667688083 +31 +-0.02998722460508882 + 0 +LINE + 8 +palm +10 +1.1864341863376306 +20 +0.46400963388634264 +30 +-0.029987241424839453 +11 +1.1567374333163143 +21 +0.11569931667688083 +31 +-0.02998722460508882 + 0 +LINE + 8 +palm +10 +1.1901520272065478 +20 +0.46327184729102877 +30 +-0.029987258687019527 +11 +1.1899268475563274 +21 +0.12173065789656323 +31 +-0.029987224110628933 + 0 +LINE + 8 +palm +10 +1.2177122174997808 +20 +0.44780696387981456 +30 +-0.029987241191849277 +11 +1.1899268475563274 +21 +0.12173065789656323 +31 +-0.029987224110628933 + 0 +LINE + 8 +palm +10 +1.2212895491922697 +20 +0.44560745112211575 +30 +-0.02998725868702176 +11 +1.2212895491922697 +21 +0.14066089589484243 +31 +-0.0299872586870184 + 0 +LINE + 8 +palm +10 +1.244617565209668 +20 +0.4214437739510256 +30 +-0.029987240991429867 +11 +1.2212895491922697 +21 +0.14066089589484243 +31 +-0.0299872586870184 + 0 +LINE + 8 +palm +10 +1.2480279454944514 +20 +0.41882218335197685 +30 +-0.029987258687019527 +11 +1.2480279454944514 +21 +0.1687608922492878 +31 +-0.02998725868702061 + 0 +LINE + 8 +palm +10 +1.2653645159926572 +20 +0.38721437027285777 +30 +-0.029987240836885698 +11 +1.2480279454944514 +21 +0.1687608922492878 +31 +-0.02998725868702061 + 0 +LINE + 8 +palm +10 +1.2685450385923984 +20 +0.3822015551261153 +30 +-0.029987258687019524 +11 +1.2685450385923984 +21 +0.20538152047514935 +31 +-0.029987258687019524 + 0 +LINE + 8 +palm +10 +1.2786478123579077 +20 +0.3485813374478923 +30 +-0.029987240737938237 +11 +1.2685450385923984 +21 +0.20538152047514935 +31 +-0.029987258687019524 + 0 +LINE + 8 +palm +10 +1.2818066242190442 +20 +0.3381122202086604 +30 +-0.02998722274179697 +11 +1.281442622497562 +21 +0.24802714527727066 +31 +-0.029987258687018955 + 0 +LINE + 8 +palm +10 +-1.2427484297297295 +20 +0.25543757582213467 +30 +-0.029987258687021207 +11 +-1.2427484297297295 +21 +-0.13681041743678712 +31 +-0.029987258687023982 + 0 +LINE + 8 +palm +10 +-1.222231336631785 +20 +0.3432508349117811 +30 +-0.029987258687021765 +11 +-1.222231336631785 +21 +-0.2653531336950365 +31 +-0.029987258687020638 + 0 +LINE + 8 +palm +10 +-1.195492940329603 +20 +0.41164114523825557 +30 +-0.029987258687021765 +11 +-1.195492940329603 +21 +-0.3337434440215132 +31 +-0.02998725868702064 + 0 +LINE + 8 +palm +10 +0.506526774807132 +20 +0.1156567745653565 +30 +-0.029987258687019527 +11 +0.7277978491178414 +21 +0.46933945628743545 +31 +-0.029987230995450295 + 0 +3DFACE + 8 +palm +10 +-1.4736624457345466 +20 +-0.3913561693833688 +30 +2.907315266711703 +11 +-1.7895717227761132 +21 +-0.3913561176018615 +31 +2.721769481190653 +12 +-1.7191705821264176 +22 +-0.3913561291414933 +32 +1.975799984992849 +13 +-1.7191705821264176 +23 +-0.3913561291414933 +33 +1.975799984992849 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.4736624457345466 +20 +-0.3913561693833688 +30 +2.907315266711703 +11 +-1.7191705821264176 +21 +-0.3913561291414933 +31 +1.975799984992849 +12 +-1.5933228224247524 +22 +-0.39135614976952593 +32 +1.4382238099822164 +13 +-1.5933228224247524 +23 +-0.39135614976952593 +33 +1.4382238099822164 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.4974274817566946 +20 +-0.39135632940056486 +30 +3.2656518472615215 +11 +-0.583012265025729 +21 +-0.39135631537214516 +31 +-0.02132949742758821 +12 +-0.5782022063428369 +22 +-0.39139903017862127 +32 +-0.02132949742758821 +13 +-0.5782022063428369 +23 +-0.39139903017862127 +33 +-0.02132949742758821 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +-0.44530211084188664 +21 +-0.39135639947577183 +31 +-0.02132949742758821 +12 +-0.39603457201367 +22 +-0.3913563992408881 +32 +0.11999794324711321 +13 +-0.39603457201367 +23 +-0.3913563992408881 +33 +0.11999794324711321 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +-0.33918758135853855 +21 +-0.3913563992408814 +31 +0.26808941696355065 +12 +-0.27720690245551616 +22 +-0.3913563992408904 +32 +0.4141067459925812 +13 +-0.27720690245551616 +23 +-0.3913563992408904 +33 +0.4141067459925812 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +-0.27720690245551616 +21 +-0.3913563992408904 +31 +0.4141067459925812 +12 +-0.21016804921447574 +22 +-0.39135639924089705 +32 +0.5578720307110291 +13 +-0.21016804921447574 +23 +-0.39135639924089705 +33 +0.5578720307110291 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +-0.21016804921447574 +21 +-0.39135639924089705 +31 +0.5578720307110291 +12 +-0.13815269815152909 +22 +-0.39135639924089705 +32 +0.6992101152648077 +13 +-0.13815269815152909 +23 +-0.39135639924089705 +33 +0.6992101152648077 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +-0.13815269815152909 +21 +-0.39135639924089705 +31 +0.6992101152648077 +12 +-0.06124858887884144 +22 +-0.39135639924089705 +32 +0.8379488009693535 +13 +-0.06124858887884144 +23 +-0.39135639924089705 +33 +0.8379488009693535 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +-0.06124858887884144 +21 +-0.39135639924089705 +31 +0.8379488009693535 +12 +0.02045058279261691 +22 +-0.39135639924089705 +32 +0.9739190561071899 +13 +0.02045058279261691 +23 +-0.39135639924089705 +33 +0.9739190561071899 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +0.02045058279261691 +21 +-0.39135639924089705 +31 +0.9739190561071899 +12 +0.1068452790069585 +22 +-0.3913563992408881 +32 +1.1069552218670458 +13 +0.1068452790069585 +23 +-0.3913563992408881 +33 +1.1069552218670458 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +0.1068452790069585 +21 +-0.3913563992408881 +31 +1.1069552218670458 +12 +0.1978302411349111 +22 +-0.39135639924089705 +32 +1.2368952141735952 +13 +0.1978302411349111 +23 +-0.39135639924089705 +33 +1.2368952141735952 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +0.1978302411349111 +21 +-0.39135639924089705 +31 +1.2368952141735952 +12 +0.29329461801529333 +22 +-0.39135639924089705 +32 +1.3635807211619237 +13 +0.29329461801529333 +23 +-0.39135639924089705 +33 +1.3635807211619237 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +0.29329461801529333 +21 +-0.39135639924089705 +31 +1.3635807211619237 +12 +0.39312210101004275 +22 +-0.3913563992408881 +32 +1.4868573960561888 +13 +0.39312210101004275 +23 +-0.3913563992408881 +33 +1.4868573960561888 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +0.39312210101004275 +21 +-0.3913563992408881 +31 +1.4868573960561888 +12 +0.4971910657083536 +22 +-0.39135639924089705 +32 +1.606575045217334 +13 +0.4971910657083536 +23 +-0.39135639924089705 +33 +1.606575045217334 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +0.4971910657083536 +21 +-0.39135639924089705 +31 +1.606575045217334 +12 +0.6053747201073587 +22 +-0.3913563992408814 +32 +1.7225878111309507 +13 +0.6053747201073587 +23 +-0.3913563992408814 +33 +1.7225878111309507 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +0.6053747201073587 +21 +-0.3913563992408814 +31 +1.7225878111309507 +12 +1.5675026101124707 +22 +-0.39135666786861645 +32 +3.387140392775373 +13 +1.5675026101124707 +23 +-0.39135666786861645 +33 +3.387140392775373 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026101124707 +20 +-0.39135666786861645 +30 +3.387140392775373 +11 +0.6053747201073587 +21 +-0.3913563992408814 +31 +1.7225878111309507 +12 +0.7175412590885892 +22 +-0.3913563992408904 +32 +1.8347543501121704 +13 +0.7175412590885892 +23 +-0.3913563992408904 +33 +1.8347543501121704 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026101124707 +20 +-0.39135666786861645 +30 +3.387140392775373 +11 +0.7175412590885892 +21 +-0.3913563992408904 +31 +1.8347543501121704 +12 +0.8335540250022027 +22 +-0.39135639924089705 +32 +1.9429380045111706 +13 +0.8335540250022027 +23 +-0.39135639924089705 +33 +1.9429380045111706 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026101124707 +20 +-0.39135666786861645 +30 +3.387140392775373 +11 +0.8335540250022027 +21 +-0.39135639924089705 +31 +1.9429380045111706 +12 +0.9532716741633414 +22 +-0.39135639924089705 +32 +2.0470069692094945 +13 +0.9532716741633414 +23 +-0.39135639924089705 +33 +2.0470069692094945 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026101124707 +20 +-0.39135666786861645 +30 +3.387140392775373 +11 +0.9532716741633414 +21 +-0.39135639924089705 +31 +2.0470069692094945 +12 +1.076548349057601 +22 +-0.39135639924089705 +32 +2.146834452204238 +13 +1.076548349057601 +23 +-0.39135639924089705 +33 +2.146834452204238 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026101124707 +20 +-0.39135666786861645 +30 +3.387140392775373 +11 +1.076548349057601 +21 +-0.39135639924089705 +31 +2.146834452204238 +12 +1.2032338560459321 +22 +-0.39135639924089705 +32 +2.2422988290846195 +13 +1.2032338560459321 +23 +-0.39135639924089705 +33 +2.2422988290846195 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026101124707 +20 +-0.39135666786861645 +30 +3.387140392775373 +11 +1.2032338560459321 +21 +-0.39135639924089705 +31 +2.2422988290846195 +12 +1.3331738483524822 +22 +-0.39135639924089705 +32 +2.3332837912125775 +13 +1.3331738483524822 +23 +-0.39135639924089705 +33 +2.3332837912125775 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026101124707 +20 +-0.39135666786861645 +30 +3.387140392775373 +11 +1.3331738483524822 +21 +-0.39135639924089705 +31 +2.3332837912125775 +12 +1.4662100141123353 +22 +-0.39135639924083887 +32 +2.419678487426912 +13 +1.4662100141123353 +23 +-0.39135639924083887 +33 +2.419678487426912 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026101124707 +20 +-0.39135666786861645 +30 +3.387140392775373 +11 +1.4662100141123353 +21 +-0.39135639924083887 +31 +2.419678487426912 +12 +1.6021802692501754 +22 +-0.3913563992408456 +32 +2.5013776590983654 +13 +1.6021802692501754 +23 +-0.3913563992408456 +33 +2.5013776590983654 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5675026101124707 +20 +-0.39135666786861645 +30 +3.387140392775373 +11 +1.6021802692501754 +21 +-0.3913563992408456 +31 +2.5013776590983654 +12 +1.7926934587751069 +22 +-0.3913567047802016 +32 +3.1665576275747647 +13 +1.7926934587751069 +23 +-0.3913567047802016 +33 +3.1665576275747647 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7926934587751069 +20 +-0.3913567047802016 +30 +3.1665576275747647 +11 +1.6021802692501754 +21 +-0.3913563992408456 +31 +2.5013776590983654 +12 +1.7409189549547188 +22 +-0.39135639924089705 +32 +2.578281768371061 +13 +1.7409189549547188 +23 +-0.39135639924089705 +33 +2.578281768371061 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7926934587751069 +20 +-0.3913567047802016 +30 +3.1665576275747647 +11 +1.7409189549547188 +21 +-0.39135639924089705 +31 +2.578281768371061 +12 +1.7446152966499613 +22 +-0.3913456583466878 +32 +2.580311975438275 +13 +1.7446152966499613 +23 +-0.3913456583466878 +33 +2.580311975438275 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7926934587751069 +20 +-0.3913567047802016 +30 +3.1665576275747647 +11 +1.7446152966499613 +21 +-0.3913456583466878 +31 +2.580311975438275 +12 +1.772154666688709 +22 +-0.3913567014136412 +32 +2.822720712115689 +13 +1.772154666688709 +23 +-0.3913567014136412 +33 +2.822720712115689 +70 +0 + 0 +LINE + 8 +palm +10 +-1.1309407413407597 +20 +-0.3913562255597655 +30 +-0.029987258687019288 +11 +-1.1319509208062501 +21 +-0.3913562253941859 +31 +-0.02132949742758821 + 0 +LINE + 8 +palm +10 +-1.1309407413407597 +20 +-0.3913562255597655 +30 +-0.029987258687019288 +11 +-1.1292764794541248 +21 +-0.3913562258325619 +31 +-0.02132949742758821 + 0 +LINE + 8 +palm +10 +-0.5832376912892054 +20 +-0.39135631533519477 +30 +-0.029987250527314598 +11 +-0.583012265025729 +21 +-0.39135631537214516 +31 +-0.02132949742758821 + 0 +LINE + 8 +palm +10 +-0.578414963340186 +20 +-0.3913991426505551 +30 +-0.029987258687020648 +11 +-0.5782022063428369 +21 +-0.39139903017862127 +31 +-0.02132949742758821 + 0 +3DFACE + 8 +palm +10 +1.2238034110911722 +20 +0.4454575748968931 +30 +-0.021329497427587968 +11 +1.6842735371540238 +21 +0.4180043864972566 +31 +1.5645334413018623 +12 +1.2507989254112186 +22 +0.4173719437487061 +32 +-0.021329497427587975 +13 +1.2507989254112186 +23 +0.4173719437487061 +33 +-0.021329497427587975 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.4450700509834469 +20 +0.6693395026301509 +30 +2.619224993234204 +11 +0.37701750679978363 +21 +0.4699931231781628 +31 +-0.02132949742758796 +12 +0.30393240840636637 +22 +0.46999313439481716 +32 +-0.02132949742758796 +13 +0.30393240840636637 +23 +0.46999313439481716 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.4450700509834469 +20 +0.6693395026301509 +30 +2.619224993234204 +11 +0.3917065899222034 +21 +0.46999312076217903 +31 +-0.02132949742758796 +12 +0.37701750679978363 +22 +0.4699931231781628 +32 +-0.02132949742758796 +13 +0.37701750679978363 +23 +0.4699931231781628 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.4450700509834469 +20 +0.6693395026301509 +30 +2.619224993234204 +11 +0.3943443042278616 +21 +0.4699505935168484 +31 +-0.02132949742758796 +12 +0.3917065899222034 +22 +0.46999312076217903 +32 +-0.02132949742758796 +13 +0.3917065899222034 +23 +0.46999312076217903 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.4450700509834469 +20 +0.6693395026301509 +30 +2.619224993234204 +11 +0.40681163485900584 +21 +0.46999311827777523 +31 +-0.02132949742758796 +12 +0.3943443042278616 +22 +0.4699505935168484 +32 +-0.02132949742758796 +13 +0.3943443042278616 +23 +0.4699505935168484 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6840531358836734 +20 +0.16758654817261043 +30 +1.564545801366135 +11 +1.2236774151144043 +21 +0.13952109683086134 +31 +-0.021329497427588037 +12 +1.2504634291176997 +22 +0.16751202849710456 +32 +-0.02132949742758803 +13 +1.2504634291176997 +23 +0.16751202849710456 +33 +-0.02132949742758803 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6271010478658303 +20 +0.4638236469862328 +30 +1.567741117243121 +11 +1.219930606861509 +21 +0.4478937548149552 +31 +-0.021329497427587968 +12 +1.1923382645753737 +22 +0.4633074583588208 +32 +-0.021329497427587964 +13 +1.1923382645753737 +23 +0.4633074583588208 +33 +-0.021329497427587964 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.6271010478658303 +20 +0.4638236469862328 +30 +1.567741117243121 +11 +1.2238034110911722 +21 +0.4454575748968931 +31 +-0.021329497427587968 +12 +1.219930606861509 +22 +0.4478937548149552 +32 +-0.021329497427587968 +13 +1.219930606861509 +23 +0.4478937548149552 +33 +-0.021329497427587968 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.005897113385843644 +20 +0.6693395746160492 +30 +2.540767132815593 +11 +0.02923566660125987 +21 +0.4700131281459 +31 +-0.02132949742758796 +12 +0.012874725889247651 +22 +0.46997054580095277 +32 +-0.02132949742758796 +13 +0.012874725889247651 +23 +0.46997054580095277 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.2851012666870065 +20 +0.5693393649383878 +30 +2.603406296512527 +11 +1.0865919747182853 +21 +0.469670439906691 +31 +-0.02132949742758796 +12 +1.0855657084141692 +22 +0.4696689313614164 +32 +-0.02132949742758796 +13 +1.0855657084141692 +23 +0.4696689313614164 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.2851012666870065 +20 +0.5693393649383878 +30 +2.603406296512527 +11 +1.157159369973707 +21 +0.46962575188848055 +31 +-0.02132949742758796 +12 +1.0865919747182853 +22 +0.469670439906691 +32 +-0.02132949742758796 +13 +1.0865919747182853 +23 +0.469670439906691 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940745180163998 +20 +0.4698512386274375 +30 +1.569594078001374 +11 +1.1886405422082358 +21 +0.4640412516089145 +31 +-0.021329497427587964 +12 +1.1591044450812846 +22 +0.4692998445383917 +32 +-0.02132949742758796 +13 +1.1591044450812846 +23 +0.4692998445383917 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940745180163998 +20 +0.4698512386274375 +30 +1.569594078001374 +11 +1.1923382645753737 +21 +0.4633074583588208 +31 +-0.021329497427587964 +12 +1.1886405422082358 +22 +0.4640412516089145 +32 +-0.021329497427587964 +13 +1.1886405422082358 +23 +0.4640412516089145 +33 +-0.021329497427587964 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.2712475811496826 +20 +0.3809548188019898 +30 +-0.021329497427587985 +11 +1.7172355129659331 +21 +0.3386311081408655 +31 +1.5626841007226204 +12 +1.2841736058160016 +22 +0.3381150408717304 +32 +-0.021329497427588 +13 +1.2841736058160016 +23 +0.3381150408717304 +33 +-0.021329497427588 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.5933226813458456 +20 +0.4693398367483087 +30 +1.438223809982218 +11 +-1.168401397979206 +21 +0.45476248418163134 +31 +-0.021329497427587947 +12 +-1.6254864989672675 +22 +0.4546760897419495 +32 +1.4294077340431952 +13 +-1.6254864989672675 +23 +0.4546760897419495 +33 +1.4294077340431952 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.5933226813458456 +20 +0.4693398367483087 +30 +1.438223809982218 +11 +-1.1668849566578618 +21 +0.45602679034629234 +31 +-0.021329497427587964 +12 +-1.168401397979206 +22 +0.45476248418163134 +32 +-0.021329497427587947 +13 +-1.168401397979206 +23 +0.45476248418163134 +33 +-0.021329497427587947 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.5933226813458456 +20 +0.4693398367483087 +30 +1.438223809982218 +11 +-1.1336673196459368 +21 +0.4692970973881342 +31 +-0.02132949742758796 +12 +-1.1668849566578618 +22 +0.45602679034629234 +32 +-0.021329497427587964 +13 +-1.1668849566578618 +23 +0.45602679034629234 +33 +-0.021329497427587964 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.2841162643931592 +20 +0.24722978915362082 +30 +-0.021329497427588023 +11 +1.7171548405019925 +21 +0.24697181775326893 +31 +1.562688624820141 +12 +1.271159922480886 +22 +0.20436827456875706 +32 +-0.02132949742758802 +13 +1.271159922480886 +23 +0.20436827456875706 +33 +-0.02132949742758802 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.271159922480886 +20 +0.20436827456875706 +30 +-0.02132949742758802 +11 +1.7043674386969119 +21 +0.20426307292245227 +31 +1.5634060638185832 +12 +1.2504634291176997 +22 +0.16751202849710456 +32 +-0.02132949742758803 +13 +1.2504634291176997 +23 +0.16751202849710456 +33 +-0.02132949742758803 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.7215439009982167 +20 +0.29280225228437573 +30 +1.5624423766529374 +11 +1.2841162643931592 +21 +0.24722978915362082 +31 +-0.021329497427588023 +12 +1.288529285669313 +22 +0.2925487173065494 +32 +-0.02132949742758801 +13 +1.288529285669313 +23 +0.2925487173065494 +33 +-0.02132949742758801 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.2507989254112186 +20 +0.4173719437487061 +30 +-0.021329497427587975 +11 +1.7045232859296717 +21 +0.38133522453188085 +31 +1.563397323933316 +12 +1.2712475811496826 +22 +0.3809548188019898 +32 +-0.021329497427587985 +13 +1.2712475811496826 +23 +0.3809548188019898 +33 +-0.021329497427587985 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.36549624538853664 +20 +-0.027628056394505163 +30 +0.4636345688323606 +11 +0.3644662888731871 +21 +0.008824680721530365 +31 +0.34279860846433485 +12 +0.550466253549162 +22 +-0.25758949619382754 +32 +0.5288554937193 +13 +0.550466253549162 +23 +-0.25758949619382754 +33 +0.5288554937193 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.3644662888731871 +20 +0.008824680721530365 +30 +0.34279860846433485 +11 +0.36549624538853664 +21 +-0.027628056394505163 +31 +0.4636345688323606 +12 +0.36482121142358914 +22 +-0.0037369160378684096 +32 +0.3844386258749987 +13 +0.36482121142358914 +23 +-0.0037369160378684096 +33 +0.3844386258749987 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.36482121142358914 +20 +-0.0037369160378684096 +30 +0.3844386258749987 +11 +0.36549624538853664 +21 +-0.027628056394505163 +31 +0.4636345688323606 +12 +0.3650671801086316 +22 +-0.01768427529481076 +32 +0.4316438776974501 +13 +0.3650671801086316 +23 +-0.01768427529481076 +33 +0.4316438776974501 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.36549624538853664 +20 +-0.027628056394505163 +30 +0.4636345688323606 +11 +0.550466253549162 +21 +-0.25758949619382754 +31 +0.5288554937193 +12 +0.36578346365589165 +22 +-0.037793429241581966 +32 +0.49733142365469324 +13 +0.36578346365589165 +23 +-0.037793429241581966 +33 +0.49733142365469324 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.6406857800208818 +20 +-0.1001033428773545 +30 +1.0873129661577854 +11 +0.546029358796021 +21 +-0.10514823446237304 +31 +0.9734561491256183 +12 +0.6829285253868831 +22 +-0.3118173806673699 +32 +1.1089028616100112 +13 +0.6829285253868831 +23 +-0.3118173806673699 +33 +1.1089028616100112 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.546029358796021 +20 +-0.10514823446237304 +30 +0.9734561491256183 +11 +0.6406857800208818 +21 +-0.1001033428773545 +31 +1.0873129661577854 +12 +0.5551727011859529 +22 +-0.10458326330281831 +32 +0.9844541997546986 +13 +0.5551727011859529 +23 +-0.10458326330281831 +33 +0.9844541997546986 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.546029358796021 +20 +-0.10514823446237304 +30 +0.9734561491256183 +11 +0.5551727011859529 +21 +-0.10458326330281831 +31 +0.9844541997546986 +12 +0.5495724628831538 +22 +-0.10484745230472176 +32 +0.977734224044443 +13 +0.5495724628831538 +23 +-0.10484745230472176 +33 +0.977734224044443 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.5495724628831538 +20 +-0.10484745230472176 +30 +0.977734224044443 +11 +0.5551727011859529 +21 +-0.10458326330281831 +31 +0.9844541997546986 +12 +0.5513988760171851 +22 +-0.10471927211351728 +32 +0.9800110958759284 +13 +0.5513988760171851 +23 +-0.10471927211351728 +33 +0.9800110958759284 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.886816064498108 +20 +-0.07019890877981821 +30 +1.24618250303494 +11 +0.7589811239628956 +21 +-0.07796090531019828 +31 +1.1798646699340118 +12 +0.7584040700658974 +22 +-0.07895235839940429 +32 +1.1802472966562991 +13 +0.7584040700658974 +23 +-0.07895235839940429 +33 +1.1802472966562991 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7589811239628956 +20 +-0.07796090531019828 +30 +1.1798646699340118 +11 +0.886816064498108 +21 +-0.07019890877981821 +31 +1.24618250303494 +12 +0.7626223302383062 +22 +-0.07769244209007636 +32 +1.1819181088261714 +13 +0.7626223302383062 +23 +-0.07769244209007636 +33 +1.1819181088261714 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8651868766935726 +20 +-0.17830415189829452 +30 +1.2693730886615773 +11 +0.7556951133309526 +21 +-0.07922417161832584 +31 +1.1782818075904975 +12 +0.7535113909177122 +22 +-0.07968804570622262 +32 +1.177433109344653 +13 +0.7535113909177122 +23 +-0.07968804570622262 +33 +1.177433109344653 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7556951133309526 +20 +-0.07922417161832584 +30 +1.1782818075904975 +11 +0.8651868766935726 +21 +-0.17830415189829452 +31 +1.2693730886615773 +12 +0.7584040700658974 +22 +-0.07895235839940429 +32 +1.1802472966562991 +13 +0.7584040700658974 +23 +-0.07895235839940429 +33 +1.1802472966562991 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7556951133309526 +20 +-0.07922417161832584 +30 +1.1782818075904975 +11 +0.39312210101004275 +21 +-0.3913563992408881 +31 +1.4868573960561888 +12 +0.7535113909177122 +22 +-0.07968804570622262 +32 +1.177433109344653 +13 +0.7535113909177122 +23 +-0.07968804570622262 +33 +1.177433109344653 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.39312210101004275 +20 +-0.3913563992408881 +30 +1.4868573960561888 +11 +0.7556951133309526 +21 +-0.07922417161832584 +31 +1.1782818075904975 +12 +0.7584040700658974 +22 +-0.07895235839940429 +32 +1.1802472966562991 +13 +0.7584040700658974 +23 +-0.07895235839940429 +33 +1.1802472966562991 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.39312210101004275 +20 +-0.3913563992408881 +30 +1.4868573960561888 +11 +0.6903109494372404 +21 +-0.09112388712480801 +31 +1.1269513721715114 +12 +0.7535113909177122 +22 +-0.07968804570622262 +32 +1.177433109344653 +13 +0.7535113909177122 +23 +-0.07968804570622262 +33 +1.177433109344653 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.7626223302383062 +20 +-0.07769244209007636 +30 +1.1819181088261714 +11 +0.4971910657083536 +21 +-0.39135639924089705 +31 +1.606575045217334 +12 +0.7584040700658974 +22 +-0.07895235839940429 +32 +1.1802472966562991 +13 +0.7584040700658974 +23 +-0.07895235839940429 +33 +1.1802472966562991 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.4971910657083536 +20 +-0.39135639924089705 +30 +1.606575045217334 +11 +0.7626223302383062 +21 +-0.07769244209007636 +31 +1.1819181088261714 +12 +0.8687347277652708 +22 +-0.044300385349433036 +32 +1.2280956329668686 +13 +0.8687347277652708 +23 +-0.044300385349433036 +33 +1.2280956329668686 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.5933228224247524 +20 +-0.39135614976952593 +30 +1.4382238099822164 +11 +-1.625486635239021 +21 +-0.37669239221898876 +31 +1.4294077340431905 +12 +-1.1684015342793297 +22 +-0.37677893650277927 +32 +-0.02132949742758821 +13 +-1.1684015342793297 +23 +-0.37677893650277927 +33 +-0.02132949742758821 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.5933228224247524 +20 +-0.39135614976952593 +30 +1.4382238099822164 +11 +-1.1684015342793297 +21 +-0.37677893650277927 +31 +-0.02132949742758821 +12 +-1.1668849574897702 +22 +-0.37682160620781435 +32 +-0.02132949742758821 +13 +-1.1668849574897702 +23 +-0.37682160620781435 +33 +-0.02132949742758821 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.5933228224247524 +20 +-0.39135614976952593 +30 +1.4382238099822164 +11 +-1.1668849574897702 +21 +-0.37682160620781435 +31 +-0.02132949742758821 +12 +-1.1336673204778431 +22 +-0.39135622511284507 +32 +-0.02132949742758821 +13 +-1.1336673204778431 +23 +-0.39135622511284507 +33 +-0.02132949742758821 +70 +0 + 0 +LINE + 8 +palm +10 +-1.1643554183438858 +20 +-0.3767353903721002 +30 +-0.029987258687024003 +11 +-1.1668849574897702 +21 +-0.37682160620781435 +31 +-0.02132949742758821 + 0 +3DFACE + 8 +palm +10 +0.4353642452976316 +20 +0.11569951797503464 +30 +0.11442537734154945 +11 +0.4285775499251552 +21 +0.11569951797502342 +31 +0.0998712621479301 +12 +0.50132984375442 +22 +0.11565962429931465 +32 +-0.021329497427588065 +13 +0.50132984375442 +23 +0.11565962429931465 +33 +-0.021329497427588065 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5742711203227493 +20 +0.11569947036484796 +30 +0.06895221585191834 +11 +0.5124547865828502 +21 +0.11566051068828076 +31 +-0.021329497427588065 +12 +0.5172420255570696 +22 +0.11566064969066137 +32 +-0.021329497427588065 +13 +0.5172420255570696 +23 +0.11566064969066137 +33 +-0.021329497427588065 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5742711203227493 +20 +0.11569947036484796 +30 +0.06895221585191834 +11 +0.5259410929604285 +21 +0.11566090227696957 +31 +-0.021329497427588065 +12 +0.5300600388642229 +22 +0.11566051068827854 +32 +-0.021329497427588065 +13 +0.5300600388642229 +23 +0.11566051068827854 +33 +-0.021329497427588065 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.3037516634831137 +20 +0.11569939636982962 +30 +0.5600494187408283 +11 +1.226889266259492 +21 +0.11569939018870201 +31 +0.4205002886903231 +12 +1.158085651441559 +22 +0.11569931808967426 +32 +-0.021329497427588065 +13 +1.158085651441559 +23 +0.11569931808967426 +33 +-0.021329497427588065 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.3466706909373627 +20 +0.11569941023242802 +30 +0.703371831037376 +11 +1.3037516634831137 +21 +0.11569939636982962 +31 +0.5600494187408283 +12 +1.158085651441559 +22 +0.11569931808967426 +32 +-0.021329497427588065 +13 +1.158085651441559 +23 +0.11569931808967426 +33 +-0.021329497427588065 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940743769374797 +20 +0.11569951797502342 +30 +1.5695940780014193 +11 +1.3479240404844608 +21 +0.11569941449928345 +31 +0.7318177742169286 +12 +1.3466706909373627 +22 +0.11569941023242802 +32 +0.703371831037376 +13 +1.3466706909373627 +23 +0.11569941023242802 +33 +0.703371831037376 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940743769374797 +20 +0.11569951797502342 +30 +1.5695940780014193 +11 +1.3505091197150552 +21 +0.11569951797502342 +31 +1.3688012067183613 +12 +1.3479240404844608 +22 +0.11569941449928345 +32 +0.7318177742169286 +13 +1.3479240404844608 +23 +0.11569941449928345 +33 +0.7318177742169286 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940743769374797 +20 +0.11569951797502342 +30 +1.5695940780014193 +11 +1.4498747685188131 +21 +0.11569951797502342 +31 +1.4551784474179665 +12 +1.3505091197150552 +22 +0.11569951797502342 +32 +1.3688012067183613 +13 +1.3505091197150552 +23 +0.11569951797502342 +33 +1.3688012067183613 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940743769374797 +20 +0.11569951797502342 +30 +1.5695940780014193 +11 +1.552194408681052 +21 +0.11569951797501443 +31 +1.538035258303604 +12 +1.4498747685188131 +22 +0.11569951797502342 +32 +1.4551784474179665 +13 +1.4498747685188131 +23 +0.11569951797502342 +33 +1.4551784474179665 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.0713278635011771 +20 +0.11569951797501443 +30 +1.0896199505044737 +11 +1.0500873483302444 +21 +0.11569952969883424 +31 +1.0651855328987245 +12 +1.3479240404844608 +22 +0.11569941449928345 +32 +0.7318177742169286 +13 +1.3479240404844608 +23 +0.11569941449928345 +33 +0.7318177742169286 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.1611202966523455 +20 +0.11569951797501443 +30 +1.1859105462127746 +11 +1.0713278635011771 +21 +0.11569951797501443 +31 +1.0896199505044737 +12 +1.3479240404844608 +22 +0.11569941449928345 +32 +0.7318177742169286 +13 +1.3479240404844608 +23 +0.11569941449928345 +33 +0.7318177742169286 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.2542185240067691 +20 +0.11569951797501443 +30 +1.2790087735671853 +11 +1.1611202966523455 +21 +0.11569951797501443 +31 +1.1859105462127746 +12 +1.3479240404844608 +22 +0.11569941449928345 +32 +0.7318177742169286 +13 +1.3479240404844608 +23 +0.11569941449928345 +33 +0.7318177742169286 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.3505091197150552 +20 +0.11569951797502342 +30 +1.3688012067183613 +11 +1.2542185240067691 +21 +0.11569951797501443 +31 +1.2790087735671853 +12 +1.3479240404844608 +22 +0.11569941449928345 +32 +0.7318177742169286 +13 +1.3479240404844608 +23 +0.11569941449928345 +33 +0.7318177742169286 +70 +0 + 0 +LINE + 8 +palm +10 +0.506526774807132 +20 +0.1156567745653565 +30 +-0.029987258687019527 +11 +0.5124547865828502 +21 +0.11566051068828076 +31 +-0.021329497427588065 + 0 +LINE + 8 +palm +10 +0.5115493143264411 +20 +0.1156567745653565 +30 +-0.030341524099559827 +11 +0.5172420255570696 +21 +0.11566064969066137 +31 +-0.021329497427588065 + 0 +LINE + 8 +palm +10 +0.5207686193887258 +20 +0.1156567745653565 +30 +-0.03099180886072411 +11 +0.5259410929604285 +21 +0.11566090227696957 +31 +-0.021329497427588065 + 0 +LINE + 8 +palm +10 +0.5258203210477908 +20 +0.1156567745653565 +30 +-0.02998725868702064 +11 +0.5300600388642229 +21 +0.11566051068827854 +31 +-0.021329497427588065 + 0 +LINE + 8 +palm +10 +1.1567374333163143 +20 +0.11569931667688083 +30 +-0.02998722460508882 +11 +1.1193597020926875 +21 +0.1156993272304514 +31 +-0.021329497427588065 + 0 +LINE + 8 +palm +10 +1.1567374333163143 +20 +0.11569931667688083 +30 +-0.02998722460508882 +11 +1.1386136044693458 +21 +0.11569932282059703 +31 +-0.021329497427588065 + 0 +LINE + 8 +palm +10 +1.1567374333163143 +20 +0.11569931667688083 +30 +-0.02998722460508882 +11 +1.1503381943269562 +21 +0.11569932003715266 +31 +-0.021329497427588065 + 0 +LINE + 8 +palm +10 +1.1567374333163143 +20 +0.11569931667688083 +30 +-0.02998722460508882 +11 +1.155791719027395 +21 +0.11569931869118599 +31 +-0.021329497427588065 + 0 +3DFACE + 8 +palm +10 +0.8488303158904233 +20 +-0.21621663583415707 +30 +1.2727812042605189 +11 +0.6437434044296662 +21 +-0.09951752352774346 +31 +1.0897797118446357 +12 +0.6406857800208818 +22 +-0.1001033428773545 +32 +1.0873129661577854 +13 +0.6406857800208818 +23 +-0.1001033428773545 +33 +1.0873129661577854 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.6437434044296662 +20 +-0.09951752352774346 +30 +1.0897797118446357 +11 +0.8488303158904233 +21 +-0.21621663583415707 +31 +1.2727812042605189 +12 +0.6454971629912596 +22 +-0.09918946164044506 +32 +1.0911506801973632 +13 +0.6454971629912596 +23 +-0.09918946164044506 +33 +1.0911506801973632 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.6454971629912596 +20 +-0.09918946164044506 +30 +1.0911506801973632 +11 +0.8488303158904233 +21 +-0.21621663583415707 +31 +1.2727812042605189 +12 +0.6656080837778451 +22 +-0.09556715674214389 +32 +1.1072238076213345 +13 +0.6656080837778451 +23 +-0.09556715674214389 +33 +1.1072238076213345 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.6656080837778451 +20 +-0.09556715674214389 +30 +1.1072238076213345 +11 +0.8488303158904233 +21 +-0.21621663583415707 +31 +1.2727812042605189 +12 +0.6738975482255489 +22 +-0.09407408897106695 +32 +1.113848945264622 +13 +0.6738975482255489 +23 +-0.09407408897106695 +33 +1.113848945264622 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.6738975482255489 +20 +-0.09407408897106695 +30 +1.113848945264622 +11 +0.8488303158904233 +21 +-0.21621663583415707 +31 +1.2727812042605189 +12 +0.6903109494372404 +22 +-0.09112388712480801 +32 +1.1269513721715114 +13 +0.6903109494372404 +23 +-0.09112388712480801 +33 +1.1269513721715114 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8488303158904233 +20 +-0.21621663583415707 +30 +1.2727812042605189 +11 +0.7535113909177122 +21 +-0.07968804570622262 +31 +1.177433109344653 +12 +0.6903109494372404 +22 +-0.09112388712480801 +32 +1.1269513721715114 +13 +0.6903109494372404 +23 +-0.09112388712480801 +33 +1.1269513721715114 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.70094493989614 +20 +0.2541658577595415 +30 +1.4087246449502895 +11 +-1.250660927301903 +21 +0.2535397136991191 +31 +-0.021329497427588023 +12 +-1.7133597261865965 +22 +0.15037411984202997 +32 +1.4053217666544113 +13 +-1.7133597261865965 +23 +0.15037411984202997 +33 +1.4053217666544113 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.250660927301903 +20 +0.2535397136991191 +30 +-0.021329497427588023 +11 +-1.258406935484123 +21 +0.18950834630357194 +31 +-0.021329497427588044 +12 +-1.7133597261865965 +22 +0.15037411984202997 +32 +1.4053217666544113 +13 +-1.7133597261865965 +23 +0.15037411984202997 +33 +1.4053217666544113 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.258406935484123 +20 +0.18950834630357194 +30 +-0.021329497427588044 +11 +-1.2640660281999483 +21 +0.150374046197144 +31 +-0.021329497427588058 +12 +-1.7133597261865965 +22 +0.15037411984202997 +32 +1.4053217666544113 +13 +-1.7133597261865965 +23 +0.15037411984202997 +33 +1.4053217666544113 +70 +0 + 0 +LINE + 8 +palm +10 +-1.2556460136349066 +20 +0.1897458358697347 +30 +-0.029987258687020634 +11 +-1.258406935484123 +21 +0.18950834630357194 +31 +-0.021329497427588044 + 0 +LINE + 8 +palm +10 +0.9999663543403632 +20 +0.4155734604408693 +30 +-0.03009570209834563 +11 +1.1567374333163143 +21 +0.11569931667688083 +31 +-0.02998722460508882 + 0 +LINE + 8 +palm +10 +1.2177122174997808 +20 +0.44780696387981456 +30 +-0.029987241191849277 +11 +1.2212895491922697 +21 +0.14066089589484243 +31 +-0.0299872586870184 + 0 +LINE + 8 +palm +10 +1.1864341863376306 +20 +0.46400963388634264 +30 +-0.029987241424839453 +11 +1.1899268475563274 +21 +0.12173065789656323 +31 +-0.029987224110628933 + 0 +LINE + 8 +palm +10 +0.016046336604195188 +20 +-0.10354326518386514 +30 +-0.029987241599155137 +11 +0.19808200538601128 +21 +0.02515989535827129 +31 +-0.029987258687020648 + 0 +LINE + 8 +palm +10 +0.19808200538601128 +20 +0.02515989535827129 +30 +-0.029987258687020648 +11 +0.37380774416773943 +21 +0.11569951797501443 +31 +-0.029987236269210224 + 0 +LINE + 8 +palm +10 +0.3767943786960426 +20 +0.4693395138213242 +30 +-0.02998724745586906 +11 +0.3743671955219494 +21 +0.18194276692314504 +31 +-0.02998724746310961 + 0 +LINE + 8 +palm +10 +0.39417798635535983 +20 +0.4692968438672974 +30 +-0.02998725868702286 +11 +0.37380774416773943 +21 +0.11569951797501443 +31 +-0.029987236269210224 + 0 +LINE + 8 +palm +10 +0.37380774416773943 +20 +0.11569951797501443 +30 +-0.029987236269210224 +11 +0.4066861946168403 +21 +0.4693395089216774 +31 +-0.029987247233204176 + 0 +LINE + 8 +palm +10 +-0.37798921673072106 +20 +0.4693396375398492 +30 +-0.029987253078268685 +11 +-0.4476786151194132 +21 +-0.3913563992408948 +31 +-0.029987248507749635 + 0 +LINE + 8 +palm +10 +-0.37798921673072106 +20 +0.4693396375398492 +30 +-0.029987253078268685 +11 +0.016046336604195188 +21 +-0.10354326518386514 +31 +-0.029987241599155137 + 0 +LINE + 8 +palm +10 +-0.37798921673072106 +20 +0.4693396375398492 +30 +-0.029987253078268685 +11 +0.19808200538601128 +21 +0.02515989535827129 +31 +-0.029987258687020648 + 0 +LINE + 8 +palm +10 +-0.3683813774927045 +20 +0.4692968438672974 +30 +-0.02998725868702286 +11 +0.19808200538601128 +21 +0.02515989535827129 +31 +-0.029987258687020648 + 0 +LINE + 8 +palm +10 +0.3743671955219494 +20 +0.18194276692314504 +30 +-0.02998724746310961 +11 +0.3704083435673351 +21 +0.11565677456535195 +31 +-0.02998725868702064 + 0 +LINE + 8 +palm +10 +1.219930606861509 +20 +0.4478937548149552 +30 +-0.021329497427587968 +11 +1.2177122174997808 +21 +0.44780696387981456 +31 +-0.029987241191849277 + 0 +LINE + 8 +palm +10 +1.1886405422082358 +20 +0.4640412516089145 +30 +-0.021329497427587964 +11 +1.1864341863376306 +21 +0.46400963388634264 +31 +-0.029987241424839453 + 0 +LINE + 8 +palm +10 +-1.1668849566578618 +20 +0.45602679034629234 +30 +-0.021329497427587964 +11 +-1.1643554183438858 +21 +0.45594782017314683 +31 +-0.029987258687021203 + 0 +LINE + 8 +palm +10 +1.2212895491922697 +20 +0.14066089589484243 +30 +-0.0299872586870184 +11 +1.2211640983670373 +21 +0.1393678798698048 +31 +-0.029987223645254617 + 0 +LINE + 8 +palm +10 +0.3743671955219494 +20 +0.18194276692314504 +30 +-0.02998724746310961 +11 +0.37380774416773943 +21 +0.11569951797501443 +31 +-0.029987236269210224 + 0 +3DFACE + 8 +palm +10 +0.5742711203227493 +20 +0.11569947036484796 +30 +0.06895221585191834 +11 +0.5300600388642229 +21 +0.11566051068827854 +31 +-0.021329497427588065 +12 +1.1057685335055842 +22 +0.1156993301253959 +32 +-0.021329497427588065 +13 +1.1057685335055842 +23 +0.1156993301253959 +33 +-0.021329497427588065 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.005897113385843644 +20 +0.6693395746160492 +30 +2.540767132815593 +11 +0.30246749279966134 +21 +0.4700130823729538 +31 +-0.02132949742758796 +12 +0.02923566660125987 +22 +0.4700131281459 +32 +-0.02132949742758796 +13 +0.02923566660125987 +23 +0.4700131281459 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.4450700509834469 +20 +0.6693395026301509 +30 +2.619224993234204 +11 +0.7268738831455794 +21 +0.4699930645936956 +31 +-0.02132949742758796 +12 +0.40681163485900584 +22 +0.46999311827777523 +32 +-0.02132949742758796 +13 +0.40681163485900584 +23 +0.46999311827777523 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.2851012666870065 +20 +0.5693393649383878 +30 +2.603406296512527 +11 +1.0855657084141692 +21 +0.4696689313614164 +31 +-0.02132949742758796 +12 +0.7296300798328395 +22 +0.4696682231644226 +32 +-0.02132949742758796 +13 +0.7296300798328395 +23 +0.4696682231644226 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.4974274817566946 +20 +-0.39135632940056486 +30 +3.2656518472615215 +11 +-1.1292764794541248 +21 +-0.3913562258325619 +31 +-0.02132949742758821 +12 +-0.583012265025729 +22 +-0.39135631537214516 +32 +-0.02132949742758821 +13 +-0.583012265025729 +23 +-0.39135631537214516 +33 +-0.02132949742758821 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.433275824211661 +20 +0.6693396466020395 +30 +2.4623092723969795 +11 +-0.40336837254389635 +21 +0.47003440299726207 +31 +-0.02132949742758796 +12 +-0.7010674590880783 +22 +0.4700344517163295 +32 +-0.02132949742758796 +13 +-0.7010674590880783 +23 +0.4700344517163295 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.39603457201367 +20 +-0.3913563992408881 +30 +0.11999794324711321 +11 +-0.44530211084188664 +21 +-0.39135639947577183 +31 +-0.02132949742758821 +12 +-0.007740620010602495 +22 +-0.12015698930892682 +32 +-0.021329497427588134 +13 +-0.007740620010602495 +23 +-0.12015698930892682 +33 +-0.021329497427588134 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.005897113385843644 +20 +0.6693395746160492 +30 +2.540767132815593 +11 +0.012874725889247651 +21 +0.46997054580095277 +31 +-0.02132949742758796 +12 +-0.27212184387072247 +22 +0.47001317722134817 +32 +-0.02132949742758796 +13 +-0.27212184387072247 +23 +0.47001317722134817 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.433275824211661 +20 +0.6693396466020395 +30 +2.4623092723969795 +11 +-0.2736178696594298 +21 +0.4700343811409351 +31 +-0.02132949742758796 +12 +-0.40336837254389635 +22 +0.47003440299726207 +32 +-0.02132949742758796 +13 +-0.40336837254389635 +23 +0.47003440299726207 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +-0.4974274817566946 +20 +-0.39135632940056486 +30 +3.2656518472615215 +11 +-0.5782022063428369 +21 +-0.39139903017862127 +31 +-0.02132949742758821 +12 +-0.4478093070099276 +22 +-0.39135639905742076 +32 +-0.02132949742758821 +13 +-0.4478093070099276 +23 +-0.39135639905742076 +33 +-0.02132949742758821 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.2344292513491493 +20 +0.5693397779211644 +30 +2.1309506849853554 +11 +-0.7041341214652392 +21 +0.4697403390103124 +31 +-0.02132949742758796 +12 +-1.1313553663027527 +22 +0.46969766418759396 +32 +-0.02132949742758796 +13 +-1.1313553663027527 +23 +0.46969766418759396 +33 +-0.02132949742758796 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.5742711203227493 +20 +0.11569947036484796 +30 +0.06895221585191834 +11 +0.5172420255570696 +21 +0.11566064969066137 +31 +-0.021329497427588065 +12 +0.5259410929604285 +22 +0.11566090227696957 +32 +-0.021329497427588065 +13 +0.5259410929604285 +23 +0.11566090227696957 +33 +-0.021329497427588065 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940743769374797 +20 +0.11569951797502342 +30 +1.5695940780014193 +11 +1.159104517712921 +21 +0.11569931776640818 +31 +-0.021329497427588065 +12 +1.1922941387017831 +22 +0.12173074383943339 +32 +-0.021329497427588044 +13 +1.1922941387017831 +23 +0.12173074383943339 +33 +-0.021329497427588044 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.7589811239628956 +20 +-0.07796090531019828 +30 +1.1798646699340118 +11 +0.7556951133309526 +21 +-0.07922417161832584 +31 +1.1782818075904975 +12 +0.7584040700658974 +22 +-0.07895235839940429 +32 +1.1802472966562991 +13 +0.7584040700658974 +23 +-0.07895235839940429 +33 +1.1802472966562991 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.7584040700658974 +20 +-0.07895235839940429 +30 +1.1802472966562991 +11 +0.7589811239628956 +21 +-0.07796090531019828 +31 +1.1798646699340118 +12 +0.7556951133309526 +22 +-0.07922417161832584 +32 +1.1782818075904975 +13 +0.7556951133309526 +23 +-0.07922417161832584 +33 +1.1782818075904975 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.7626223302383062 +20 +-0.07769244209007636 +30 +1.1819181088261714 +11 +0.7589811239628956 +21 +-0.07796090531019828 +31 +1.1798646699340118 +12 +0.7584040700658974 +22 +-0.07895235839940429 +32 +1.1802472966562991 +13 +0.7584040700658974 +23 +-0.07895235839940429 +33 +1.1802472966562991 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.7626223302383062 +20 +-0.07769244209007636 +30 +1.1819181088261714 +11 +0.7589811239628956 +21 +-0.07796090531019828 +31 +1.1798646699340118 +12 +0.7584040700658974 +22 +-0.07895235839940429 +32 +1.1802472966562991 +13 +0.7584040700658974 +23 +-0.07895235839940429 +33 +1.1802472966562991 +70 +0 + 0 +3DFACE + 8 +palm +10 +-1.2640660281999483 +20 +0.150374046197144 +30 +-0.021329497427588058 +11 +-1.2640660647138675 +21 +-0.07239046715696767 +31 +-0.021329497427588117 +12 +-1.2686660179281843 +22 +0.03899179027408667 +32 +-0.021329497427588086 +13 +-1.2686660179281843 +23 +0.03899179027408667 +33 +-0.021329497427588086 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.2640660647138675 +20 +-0.07239046715696767 +30 +-0.021329497427588117 +11 +-1.2640660281999483 +21 +0.150374046197144 +31 +-0.021329497427588058 +12 +-1.2505796477668625 +22 +-0.1761822093199848 +32 +-0.021329497427588127 +13 +-1.2505796477668625 +23 +-0.1761822093199848 +33 +-0.021329497427588127 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.2505796477668625 +20 +-0.1761822093199848 +30 +-0.021329497427588127 +11 +-1.2640660281999483 +21 +0.150374046197144 +31 +-0.021329497427588058 +12 +-1.258406935484123 +22 +0.18950834630357194 +32 +-0.021329497427588044 +13 +-1.258406935484123 +23 +0.18950834630357194 +33 +-0.021329497427588044 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.2505796477668625 +20 +-0.1761822093199848 +30 +-0.021329497427588127 +11 +-1.258406935484123 +21 +0.18950834630357194 +31 +-0.021329497427588044 +12 +-1.250660927301903 +22 +0.2535397136991191 +32 +-0.021329497427588023 +13 +-1.250660927301903 +23 +0.2535397136991191 +33 +-0.021329497427588023 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.2505796477668625 +20 +-0.1761822093199848 +30 +-0.021329497427588127 +11 +-1.250660927301903 +21 +0.2535397136991191 +31 +-0.021329497427588023 +12 +-1.2291257442446226 +22 +0.34329376805461653 +32 +-0.021329497427588 +13 +-1.2291257442446226 +23 +0.34329376805461653 +33 +-0.021329497427588 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.2505796477668625 +20 +-0.1761822093199848 +30 +-0.021329497427588127 +11 +-1.2291257442446226 +21 +0.34329376805461653 +31 +-0.021329497427588 +12 +-1.2291258441147315 +22 +-0.26531020051043686 +32 +-0.021329497427588155 +13 +-1.2291258441147315 +23 +-0.26531020051043686 +33 +-0.021329497427588155 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.2291258441147315 +20 +-0.26531020051043686 +30 +-0.021329497427588155 +11 +-1.2291257442446226 +21 +0.34329376805461653 +31 +-0.021329497427588 +12 +-1.2011666950222017 +22 +-0.3337005154197999 +32 +-0.021329497427588197 +13 +-1.2011666950222017 +23 +-0.3337005154197999 +33 +-0.021329497427588197 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.2011666950222017 +20 +-0.3337005154197999 +30 +-0.021329497427588197 +11 +-1.2291257442446226 +21 +0.34329376805461653 +31 +-0.021329497427588 +12 +-1.2011665727838676 +22 +0.41168407379832106 +32 +-0.021329497427587975 +13 +-1.2011665727838676 +23 +0.41168407379832106 +33 +-0.021329497427587975 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.2011666950222017 +20 +-0.3337005154197999 +30 +-0.021329497427588197 +11 +-1.2011665727838676 +21 +0.41168407379832106 +31 +-0.021329497427587975 +12 +-1.1684015342793297 +22 +-0.37677893650277927 +32 +-0.02132949742758821 +13 +-1.1684015342793297 +23 +-0.37677893650277927 +33 +-0.02132949742758821 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.1684015342793297 +20 +-0.37677893650277927 +30 +-0.02132949742758821 +11 +-1.2011665727838676 +21 +0.41168407379832106 +31 +-0.021329497427587975 +12 +-1.168401397979206 +22 +0.45476248418163134 +32 +-0.021329497427587947 +13 +-1.168401397979206 +23 +0.45476248418163134 +33 +-0.021329497427587947 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.1684015342793297 +20 +-0.37677893650277927 +30 +-0.02132949742758821 +11 +-1.168401397979206 +21 +0.45476248418163134 +31 +-0.021329497427587947 +12 +-1.1668849574897702 +22 +-0.37682160620781435 +32 +-0.02132949742758821 +13 +-1.1668849574897702 +23 +-0.37682160620781435 +33 +-0.02132949742758821 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.1668849574897702 +20 +-0.37682160620781435 +30 +-0.02132949742758821 +11 +-1.168401397979206 +21 +0.45476248418163134 +31 +-0.021329497427587947 +12 +-1.1668849566578618 +22 +0.45602679034629234 +32 +-0.021329497427587964 +13 +-1.1668849566578618 +23 +0.45602679034629234 +33 +-0.021329497427587964 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.1668849574897702 +20 +-0.37682160620781435 +30 +-0.02132949742758821 +11 +-1.1668849566578618 +21 +0.45602679034629234 +31 +-0.021329497427587964 +12 +-1.1336673204778431 +22 +-0.39135622511284507 +32 +-0.02132949742758821 +13 +-1.1336673204778431 +23 +-0.39135622511284507 +33 +-0.02132949742758821 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.1336673204778431 +20 +-0.39135622511284507 +30 +-0.02132949742758821 +11 +-1.1668849566578618 +21 +0.45602679034629234 +31 +-0.021329497427587964 +12 +-1.1336673196459368 +22 +0.4692970973881342 +32 +-0.02132949742758796 +13 +-1.1336673196459368 +23 +0.4692970973881342 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.1336673204778431 +20 +-0.39135622511284507 +30 +-0.02132949742758821 +11 +-1.1336673196459368 +21 +0.4692970973881342 +31 +-0.02132949742758796 +12 +-1.1319509208062501 +22 +-0.3913562253941859 +32 +-0.02132949742758821 +13 +-1.1319509208062501 +23 +-0.3913562253941859 +33 +-0.02132949742758821 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.1319509208062501 +20 +-0.3913562253941859 +30 +-0.02132949742758821 +11 +-1.1336673196459368 +21 +0.4692970973881342 +31 +-0.02132949742758796 +12 +-1.1313553663027527 +22 +0.46969766418759396 +32 +-0.02132949742758796 +13 +-1.1313553663027527 +23 +0.46969766418759396 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.1319509208062501 +20 +-0.3913562253941859 +30 +-0.02132949742758821 +11 +-1.1313553663027527 +21 +0.46969766418759396 +31 +-0.02132949742758796 +12 +-1.1292764794541248 +22 +-0.3913562258325619 +32 +-0.02132949742758821 +13 +-1.1292764794541248 +23 +-0.3913562258325619 +33 +-0.02132949742758821 +70 +3 + 0 +3DFACE + 8 +palm +10 +-1.1292764794541248 +20 +-0.3913562258325619 +30 +-0.02132949742758821 +11 +-1.1313553663027527 +21 +0.46969766418759396 +31 +-0.02132949742758796 +12 +-0.7041341214652392 +22 +0.4697403390103124 +32 +-0.02132949742758796 +13 +-0.7041341214652392 +23 +0.4697403390103124 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +-1.1292764794541248 +20 +-0.3913562258325619 +30 +-0.02132949742758821 +11 +-0.7041341214652392 +21 +0.4697403390103124 +31 +-0.02132949742758796 +12 +-0.583012265025729 +22 +-0.39135631537214516 +32 +-0.02132949742758821 +13 +-0.583012265025729 +23 +-0.39135631537214516 +33 +-0.02132949742758821 +70 +3 + 0 +3DFACE + 8 +palm +10 +-0.583012265025729 +20 +-0.39135631537214516 +30 +-0.02132949742758821 +11 +-0.7041341214652392 +21 +0.4697403390103124 +31 +-0.02132949742758796 +12 +-0.7010674590880783 +22 +0.4700344517163295 +32 +-0.02132949742758796 +13 +-0.7010674590880783 +23 +0.4700344517163295 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +-0.583012265025729 +20 +-0.39135631537214516 +30 +-0.02132949742758821 +11 +-0.7010674590880783 +21 +0.4700344517163295 +31 +-0.02132949742758796 +12 +-0.40336837254389635 +22 +0.47003440299726207 +32 +-0.02132949742758796 +13 +-0.40336837254389635 +23 +0.47003440299726207 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +-0.583012265025729 +20 +-0.39135631537214516 +30 +-0.02132949742758821 +11 +-0.40336837254389635 +21 +0.47003440299726207 +31 +-0.02132949742758796 +12 +-0.5782022063428369 +22 +-0.39139903017862127 +32 +-0.02132949742758821 +13 +-0.5782022063428369 +23 +-0.39139903017862127 +33 +-0.02132949742758821 +70 +3 + 0 +3DFACE + 8 +palm +10 +-0.5782022063428369 +20 +-0.39139903017862127 +30 +-0.02132949742758821 +11 +-0.40336837254389635 +21 +0.47003440299726207 +31 +-0.02132949742758796 +12 +-0.4478093070099276 +22 +-0.39135639905742076 +32 +-0.02132949742758821 +13 +-0.4478093070099276 +23 +-0.39135639905742076 +33 +-0.02132949742758821 +70 +3 + 0 +3DFACE + 8 +palm +10 +-0.4478093070099276 +20 +-0.39135639905742076 +30 +-0.02132949742758821 +11 +-0.40336837254389635 +21 +0.47003440299726207 +31 +-0.02132949742758796 +12 +-0.44530211084188664 +22 +-0.39135639947577183 +32 +-0.02132949742758821 +13 +-0.44530211084188664 +23 +-0.39135639947577183 +33 +-0.02132949742758821 +70 +3 + 0 +3DFACE + 8 +palm +10 +-0.44530211084188664 +20 +-0.39135639947577183 +30 +-0.02132949742758821 +11 +-0.40336837254389635 +21 +0.47003440299726207 +31 +-0.02132949742758796 +12 +-0.007740620010602495 +22 +-0.12015698930892682 +32 +-0.021329497427588134 +13 +-0.007740620010602495 +23 +-0.12015698930892682 +33 +-0.021329497427588134 +70 +3 + 0 +3DFACE + 8 +palm +10 +-0.007740620010602495 +20 +-0.12015698930892682 +30 +-0.021329497427588134 +11 +-0.40336837254389635 +21 +0.47003440299726207 +31 +-0.02132949742758796 +12 +-0.2736178696594298 +22 +0.4700343811409351 +32 +-0.02132949742758796 +13 +-0.2736178696594298 +23 +0.4700343811409351 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +-0.007740620010602495 +20 +-0.12015698930892682 +30 +-0.021329497427588134 +11 +-0.2736178696594298 +21 +0.4700343811409351 +31 +-0.02132949742758796 +12 +-0.27212184387072247 +22 +0.47001317722134817 +32 +-0.02132949742758796 +13 +-0.27212184387072247 +23 +0.47001317722134817 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +-0.007740620010602495 +20 +-0.12015698930892682 +30 +-0.021329497427588134 +11 +-0.27212184387072247 +21 +0.47001317722134817 +31 +-0.02132949742758796 +12 +0.012874725889247651 +22 +0.46997054580095277 +32 +-0.02132949742758796 +13 +0.012874725889247651 +23 +0.46997054580095277 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +-0.007740620010602495 +20 +-0.12015698930892682 +30 +-0.021329497427588134 +11 +0.012874725889247651 +21 +0.46997054580095277 +31 +-0.02132949742758796 +12 +0.37713358643564576 +22 +0.11569951797501443 +32 +-0.021323120946165536 +13 +0.37713358643564576 +23 +0.11569951797501443 +33 +-0.021323120946165536 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.37713358643564576 +20 +0.11569951797501443 +30 +-0.021323120946165536 +11 +0.012874725889247651 +21 +0.46997054580095277 +31 +-0.02132949742758796 +12 +0.02923566660125987 +22 +0.4700131281459 +32 +-0.02132949742758796 +13 +0.02923566660125987 +23 +0.4700131281459 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.37713358643564576 +20 +0.11569951797501443 +30 +-0.021323120946165536 +11 +0.02923566660125987 +21 +0.4700131281459 +31 +-0.02132949742758796 +12 +0.30246749279966134 +22 +0.4700130823729538 +32 +-0.02132949742758796 +13 +0.30246749279966134 +23 +0.4700130823729538 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.37713358643564576 +20 +0.11569951797501443 +30 +-0.021323120946165536 +11 +0.30246749279966134 +21 +0.4700130823729538 +31 +-0.02132949742758796 +12 +0.30393240840636637 +22 +0.46999313439481716 +32 +-0.02132949742758796 +13 +0.30393240840636637 +23 +0.46999313439481716 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.37713358643564576 +20 +0.11569951797501443 +30 +-0.021323120946165536 +11 +0.30393240840636637 +21 +0.46999313439481716 +31 +-0.02132949742758796 +12 +0.37701750679978363 +22 +0.4699931231781628 +32 +-0.02132949742758796 +13 +0.37701750679978363 +23 +0.4699931231781628 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.37713358643564576 +20 +0.11569951797501443 +30 +-0.021323120946165536 +11 +0.37701750679978363 +21 +0.4699931231781628 +31 +-0.02132949742758796 +12 +0.3917065899222034 +22 +0.46999312076217903 +32 +-0.02132949742758796 +13 +0.3917065899222034 +23 +0.46999312076217903 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.37713358643564576 +20 +0.11569951797501443 +30 +-0.021323120946165536 +11 +0.3917065899222034 +21 +0.46999312076217903 +31 +-0.02132949742758796 +12 +0.50132984375442 +22 +0.11565962429931465 +32 +-0.021329497427588065 +13 +0.50132984375442 +23 +0.11565962429931465 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.50132984375442 +20 +0.11565962429931465 +30 +-0.021329497427588065 +11 +0.3917065899222034 +21 +0.46999312076217903 +31 +-0.02132949742758796 +12 +0.3943443042278616 +22 +0.4699505935168484 +32 +-0.02132949742758796 +13 +0.3943443042278616 +23 +0.4699505935168484 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.50132984375442 +20 +0.11565962429931465 +30 +-0.021329497427588065 +11 +0.3943443042278616 +21 +0.4699505935168484 +31 +-0.02132949742758796 +12 +0.40681163485900584 +22 +0.46999311827777523 +32 +-0.02132949742758796 +13 +0.40681163485900584 +23 +0.46999311827777523 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.50132984375442 +20 +0.11565962429931465 +30 +-0.021329497427588065 +11 +0.40681163485900584 +21 +0.46999311827777523 +31 +-0.02132949742758796 +12 +0.7268738831455794 +22 +0.4699930645936956 +32 +-0.02132949742758796 +13 +0.7268738831455794 +23 +0.4699930645936956 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +0.50132984375442 +20 +0.11565962429931465 +30 +-0.021329497427588065 +11 +0.7268738831455794 +21 +0.4699930645936956 +31 +-0.02132949742758796 +12 +0.5030290423438137 +22 +0.11565957927510673 +32 +-0.021329497427588065 +13 +0.5030290423438137 +23 +0.11565957927510673 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.5030290423438137 +20 +0.11565957927510673 +30 +-0.021329497427588065 +11 +0.7268738831455794 +21 +0.4699930645936956 +31 +-0.02132949742758796 +12 +0.5124547865828502 +22 +0.11566051068828076 +32 +-0.021329497427588065 +13 +0.5124547865828502 +23 +0.11566051068828076 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.5124547865828502 +20 +0.11566051068828076 +30 +-0.021329497427588065 +11 +0.7268738831455794 +21 +0.4699930645936956 +31 +-0.02132949742758796 +12 +0.5172420255570696 +22 +0.11566064969066137 +32 +-0.021329497427588065 +13 +0.5172420255570696 +23 +0.11566064969066137 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.5172420255570696 +20 +0.11566064969066137 +30 +-0.021329497427588065 +11 +0.7268738831455794 +21 +0.4699930645936956 +31 +-0.02132949742758796 +12 +0.5259410929604285 +22 +0.11566090227696957 +32 +-0.021329497427588065 +13 +0.5259410929604285 +23 +0.11566090227696957 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.5259410929604285 +20 +0.11566090227696957 +30 +-0.021329497427588065 +11 +0.7268738831455794 +21 +0.4699930645936956 +31 +-0.02132949742758796 +12 +0.5300600388642229 +22 +0.11566051068827854 +32 +-0.021329497427588065 +13 +0.5300600388642229 +23 +0.11566051068827854 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.5300600388642229 +20 +0.11566051068827854 +30 +-0.021329497427588065 +11 +0.7268738831455794 +21 +0.4699930645936956 +31 +-0.02132949742758796 +12 +1.1057685335055842 +22 +0.1156993301253959 +32 +-0.021329497427588065 +13 +1.1057685335055842 +23 +0.1156993301253959 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.1057685335055842 +20 +0.1156993301253959 +30 +-0.021329497427588065 +11 +0.7268738831455794 +21 +0.4699930645936956 +31 +-0.02132949742758796 +12 +0.7296300798328395 +22 +0.4696682231644226 +32 +-0.02132949742758796 +13 +0.7296300798328395 +23 +0.4696682231644226 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.1057685335055842 +20 +0.1156993301253959 +30 +-0.021329497427588065 +11 +0.7296300798328395 +21 +0.4696682231644226 +31 +-0.02132949742758796 +12 +1.0855657084141692 +22 +0.4696689313614164 +32 +-0.02132949742758796 +13 +1.0855657084141692 +23 +0.4696689313614164 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.1057685335055842 +20 +0.1156993301253959 +30 +-0.021329497427588065 +11 +1.0855657084141692 +21 +0.4696689313614164 +31 +-0.02132949742758796 +12 +1.0865919747182853 +22 +0.469670439906691 +32 +-0.02132949742758796 +13 +1.0865919747182853 +23 +0.469670439906691 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.1057685335055842 +20 +0.1156993301253959 +30 +-0.021329497427588065 +11 +1.0865919747182853 +21 +0.469670439906691 +31 +-0.02132949742758796 +12 +1.157159369973707 +22 +0.46962575188848055 +32 +-0.02132949742758796 +13 +1.157159369973707 +23 +0.46962575188848055 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.1057685335055842 +20 +0.1156993301253959 +30 +-0.021329497427588065 +11 +1.157159369973707 +21 +0.46962575188848055 +31 +-0.02132949742758796 +12 +1.1193597020926875 +22 +0.1156993272304514 +32 +-0.021329497427588065 +13 +1.1193597020926875 +23 +0.1156993272304514 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.1193597020926875 +20 +0.1156993272304514 +30 +-0.021329497427588065 +11 +1.157159369973707 +21 +0.46962575188848055 +31 +-0.02132949742758796 +12 +1.1386136044693458 +22 +0.11569932282059703 +32 +-0.021329497427588065 +13 +1.1386136044693458 +23 +0.11569932282059703 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.1386136044693458 +20 +0.11569932282059703 +30 +-0.021329497427588065 +11 +1.157159369973707 +21 +0.46962575188848055 +31 +-0.02132949742758796 +12 +1.1503381943269562 +22 +0.11569932003715266 +32 +-0.021329497427588065 +13 +1.1503381943269562 +23 +0.11569932003715266 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.1503381943269562 +20 +0.11569932003715266 +30 +-0.021329497427588065 +11 +1.157159369973707 +21 +0.46962575188848055 +31 +-0.02132949742758796 +12 +1.155791719027395 +22 +0.11569931869118599 +32 +-0.021329497427588065 +13 +1.155791719027395 +23 +0.11569931869118599 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.155791719027395 +20 +0.11569931869118599 +30 +-0.021329497427588065 +11 +1.157159369973707 +21 +0.46962575188848055 +31 +-0.02132949742758796 +12 +1.158085651441559 +22 +0.11569931808967426 +32 +-0.021329497427588065 +13 +1.158085651441559 +23 +0.11569931808967426 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.158085651441559 +20 +0.11569931808967426 +30 +-0.021329497427588065 +11 +1.157159369973707 +21 +0.46962575188848055 +31 +-0.02132949742758796 +12 +1.1591044450812846 +22 +0.4692998445383917 +32 +-0.02132949742758796 +13 +1.1591044450812846 +23 +0.4692998445383917 +33 +-0.02132949742758796 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.158085651441559 +20 +0.11569931808967426 +30 +-0.021329497427588065 +11 +1.1591044450812846 +21 +0.4692998445383917 +31 +-0.02132949742758796 +12 +1.159104517712921 +22 +0.11569931776640818 +32 +-0.021329497427588065 +13 +1.159104517712921 +23 +0.11569931776640818 +33 +-0.021329497427588065 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.159104517712921 +20 +0.11569931776640818 +30 +-0.021329497427588065 +11 +1.1591044450812846 +21 +0.4692998445383917 +31 +-0.02132949742758796 +12 +1.1886405422082358 +22 +0.4640412516089145 +32 +-0.021329497427587964 +13 +1.1886405422082358 +23 +0.4640412516089145 +33 +-0.021329497427587964 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.159104517712921 +20 +0.11569931776640818 +30 +-0.021329497427588065 +11 +1.1886405422082358 +21 +0.4640412516089145 +31 +-0.021329497427587964 +12 +1.1922941387017831 +22 +0.12173074383943339 +32 +-0.021329497427588044 +13 +1.1922941387017831 +23 +0.12173074383943339 +33 +-0.021329497427588044 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.1922941387017831 +20 +0.12173074383943339 +30 +-0.021329497427588044 +11 +1.1886405422082358 +21 +0.4640412516089145 +31 +-0.021329497427587964 +12 +1.1923382645753737 +22 +0.4633074583588208 +32 +-0.021329497427587964 +13 +1.1923382645753737 +23 +0.4633074583588208 +33 +-0.021329497427587964 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.1922941387017831 +20 +0.12173074383943339 +30 +-0.021329497427588044 +11 +1.1923382645753737 +21 +0.4633074583588208 +31 +-0.021329497427587964 +12 +1.2236774151144043 +22 +0.13952109683086134 +32 +-0.021329497427588037 +13 +1.2236774151144043 +23 +0.13952109683086134 +33 +-0.021329497427588037 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.2236774151144043 +20 +0.13952109683086134 +30 +-0.021329497427588037 +11 +1.1923382645753737 +21 +0.4633074583588208 +31 +-0.021329497427587964 +12 +1.219930606861509 +22 +0.4478937548149552 +32 +-0.021329497427587968 +13 +1.219930606861509 +23 +0.4478937548149552 +33 +-0.021329497427587968 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.2236774151144043 +20 +0.13952109683086134 +30 +-0.021329497427588037 +11 +1.219930606861509 +21 +0.4478937548149552 +31 +-0.021329497427587968 +12 +1.2238034110911722 +22 +0.4454575748968931 +32 +-0.021329497427587968 +13 +1.2238034110911722 +23 +0.4454575748968931 +33 +-0.021329497427587968 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.2236774151144043 +20 +0.13952109683086134 +30 +-0.021329497427588037 +11 +1.2238034110911722 +21 +0.4454575748968931 +31 +-0.021329497427587968 +12 +1.2504634291176997 +22 +0.16751202849710456 +32 +-0.02132949742758803 +13 +1.2504634291176997 +23 +0.16751202849710456 +33 +-0.02132949742758803 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.2504634291176997 +20 +0.16751202849710456 +30 +-0.02132949742758803 +11 +1.2238034110911722 +21 +0.4454575748968931 +31 +-0.021329497427587968 +12 +1.2507989254112186 +22 +0.4173719437487061 +32 +-0.021329497427587975 +13 +1.2507989254112186 +23 +0.4173719437487061 +33 +-0.021329497427587975 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.2504634291176997 +20 +0.16751202849710456 +30 +-0.02132949742758803 +11 +1.2507989254112186 +21 +0.4173719437487061 +31 +-0.021329497427587975 +12 +1.271159922480886 +22 +0.20436827456875706 +32 +-0.02132949742758802 +13 +1.271159922480886 +23 +0.20436827456875706 +33 +-0.02132949742758802 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.271159922480886 +20 +0.20436827456875706 +30 +-0.02132949742758802 +11 +1.2507989254112186 +21 +0.4173719437487061 +31 +-0.021329497427587975 +12 +1.2712475811496826 +22 +0.3809548188019898 +32 +-0.021329497427587985 +13 +1.2712475811496826 +23 +0.3809548188019898 +33 +-0.021329497427587985 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.271159922480886 +20 +0.20436827456875706 +30 +-0.02132949742758802 +11 +1.2712475811496826 +21 +0.3809548188019898 +31 +-0.021329497427587985 +12 +1.2841162643931592 +22 +0.24722978915362082 +32 +-0.021329497427588023 +13 +1.2841162643931592 +23 +0.24722978915362082 +33 +-0.021329497427588023 +70 +3 + 0 +3DFACE + 8 +palm +10 +1.2841162643931592 +20 +0.24722978915362082 +30 +-0.021329497427588023 +11 +1.2712475811496826 +21 +0.3809548188019898 +31 +-0.021329497427587985 +12 +1.2841736058160016 +22 +0.3381150408717304 +32 +-0.021329497427588 +13 +1.2841736058160016 +23 +0.3381150408717304 +33 +-0.021329497427588 +70 +13 + 0 +3DFACE + 8 +palm +10 +1.2841162643931592 +20 +0.24722978915362082 +30 +-0.021329497427588023 +11 +1.2841736058160016 +21 +0.3381150408717304 +31 +-0.021329497427588 +12 +1.288529285669313 +22 +0.2925487173065494 +32 +-0.02132949742758801 +13 +1.288529285669313 +23 +0.2925487173065494 +33 +-0.02132949742758801 +70 +1 + 0 +LINE + 8 +palm +10 +-0.40336837254389635 +20 +0.47003440299726207 +30 +-0.02132949742758796 +11 +-0.4032641176830618 +21 +0.4693396416827257 +31 +-0.029987253266541992 + 0 +LINE + 8 +palm +10 +0.012874725889247651 +20 +0.46997054580095277 +30 +-0.02132949742758796 +11 +0.012898304431331109 +21 +0.4692968438672974 +31 +-0.02998725868702286 + 0 +LINE + 8 +palm +10 +0.02923566660125987 +20 +0.4700131281459 +30 +-0.02132949742758796 +11 +0.0293145314722294 +21 +0.4693395707776401 +31 +-0.029987250044254076 + 0 +LINE + 8 +palm +10 +0.37701750679978363 +20 +0.4699931231781628 +30 +-0.02132949742758796 +11 +0.3767943786960426 +21 +0.4693395138213242 +31 +-0.02998724745586906 + 0 +LINE + 8 +palm +10 +0.3917065899222034 +20 +0.46999312076217903 +30 +-0.02132949742758796 +11 +0.3915316238299338 +21 +0.46933951140570074 +31 +-0.029987247346090977 + 0 +LINE + 8 +palm +10 +0.3943443042278616 +20 +0.4699505935168484 +30 +-0.02132949742758796 +11 +0.39417798635535983 +21 +0.4692968438672974 +31 +-0.02998725868702286 + 0 +LINE + 8 +palm +10 +0.40681163485900584 +20 +0.46999311827777523 +30 +-0.02132949742758796 +11 +0.4066861946168403 +21 +0.4693395089216774 +31 +-0.029987247233204176 + 0 +LINE + 8 +palm +10 +1.0855657084141692 +20 +0.4696689313614164 +30 +-0.02132949742758796 +11 +1.084906037085234 +21 +0.4693394175246698 +31 +-0.030006963059664236 + 0 +LINE + 8 +palm +10 +1.0865919747182853 +20 +0.469670439906691 +30 +-0.02132949742758796 +11 +1.0859329585250228 +21 +0.46933955647594505 +31 +-0.030043162032831975 + 0 +3DFACE + 8 +palm +10 +0.4285775499251552 +20 +0.11569951797502342 +30 +0.0998712621479301 +11 +0.37713358643564576 +21 +0.11569951797501443 +31 +-0.021323120946165536 +12 +0.50132984375442 +22 +0.11565962429931465 +32 +-0.021329497427588065 +13 +0.50132984375442 +23 +0.11565962429931465 +33 +-0.021329497427588065 +70 +0 + 0 +3DFACE + 8 +palm +10 +0.45324313692173157 +20 +0.11569950085740732 +30 +0.10190305044442108 +11 +0.50132984375442 +21 +0.11565962429931465 +31 +-0.021329497427588065 +12 +0.5030290423438137 +22 +0.11565957927510673 +32 +-0.021329497427588065 +13 +0.5030290423438137 +23 +0.11565957927510673 +33 +-0.021329497427588065 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.50132984375442 +20 +0.11565962429931465 +30 +-0.021329497427588065 +11 +0.45324313692173157 +21 +0.11569950085740732 +31 +0.10190305044442108 +12 +0.4353642452976316 +22 +0.11569951797503464 +32 +0.11442537734154945 +13 +0.4353642452976316 +23 +0.11569951797503464 +33 +0.11442537734154945 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7110686274472025 +20 +0.11569944251109132 +30 +0.07324212630582012 +11 +1.1057685335055842 +21 +0.1156993301253959 +31 +-0.021329497427588065 +12 +1.1193597020926875 +22 +0.1156993272304514 +32 +-0.021329497427588065 +13 +1.1193597020926875 +23 +0.1156993272304514 +33 +-0.021329497427588065 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.1057685335055842 +20 +0.1156993301253959 +30 +-0.021329497427588065 +11 +0.7110686274472025 +21 +0.11569944251109132 +31 +0.07324212630582012 +12 +0.5742711203227493 +22 +0.11569947036484796 +32 +0.06895221585191834 +13 +0.5742711203227493 +23 +0.11569947036484796 +33 +0.06895221585191834 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.8543131342530239 +20 +0.11569941919431881 +30 +0.11448043149811093 +11 +1.1193597020926875 +21 +0.1156993272304514 +31 +-0.021329497427588065 +12 +1.1386136044693458 +22 +0.11569932282059703 +32 +-0.021329497427588065 +13 +1.1386136044693458 +23 +0.11569932282059703 +33 +-0.021329497427588065 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.1193597020926875 +20 +0.1156993272304514 +30 +-0.021329497427588065 +11 +0.8543131342530239 +21 +0.11569941919431881 +31 +0.11448043149811093 +12 +0.7110686274472025 +22 +0.11569944251109132 +32 +0.07324212630582012 +13 +0.7110686274472025 +23 +0.11569944251109132 +33 +0.07324212630582012 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.9942427643243386 +20 +0.11569940200353146 +30 +0.18985680907938893 +11 +1.1386136044693458 +21 +0.11569932282059703 +31 +-0.021329497427588065 +12 +1.1503381943269562 +22 +0.11569932003715266 +32 +-0.021329497427588065 +13 +1.1503381943269562 +23 +0.11569932003715266 +33 +-0.021329497427588065 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.1386136044693458 +20 +0.11569932282059703 +30 +-0.021329497427588065 +11 +0.9942427643243386 +21 +0.11569940200353146 +31 +0.18985680907938893 +12 +0.8543131342530239 +22 +0.11569941919431881 +32 +0.11448043149811093 +13 +0.8543131342530239 +23 +0.11569941919431881 +33 +0.11448043149811093 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.5940743769374797 +20 +0.11569951797502342 +30 +1.5695940780014193 +11 +1.158085651441559 +21 +0.11569931808967426 +31 +-0.021329497427588065 +12 +1.159104517712921 +22 +0.11569931776640818 +32 +-0.021329497427588065 +13 +1.159104517712921 +23 +0.11569931776640818 +33 +-0.021329497427588065 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.158085651441559 +20 +0.11569931808967426 +30 +-0.021329497427588065 +11 +1.5940743769374797 +21 +0.11569951797502342 +31 +1.5695940780014193 +12 +1.3466706909373627 +22 +0.11569941023242802 +32 +0.703371831037376 +13 +1.3466706909373627 +23 +0.11569941023242802 +33 +0.703371831037376 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.37713358643564576 +20 +0.11569951797501443 +30 +-0.021323120946165536 +11 +-0.39603457201367 +21 +-0.3913563992408881 +31 +0.11999794324711321 +12 +-0.007740620010602495 +22 +-0.12015698930892682 +32 +-0.021329497427588134 +13 +-0.007740620010602495 +23 +-0.12015698930892682 +33 +-0.021329497427588134 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.39603457201367 +20 +-0.3913563992408881 +30 +0.11999794324711321 +11 +0.37713358643564576 +21 +0.11569951797501443 +31 +-0.021323120946165536 +12 +-0.33918758135853855 +22 +-0.3913563992408814 +32 +0.26808941696355065 +13 +-0.33918758135853855 +23 +-0.3913563992408814 +33 +0.26808941696355065 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.226889266259492 +20 +0.11569939018870201 +30 +0.4205002886903231 +11 +1.155791719027395 +21 +0.11569931869118599 +31 +-0.021329497427588065 +12 +1.158085651441559 +22 +0.11569931808967426 +32 +-0.021329497427588065 +13 +1.158085651441559 +23 +0.11569931808967426 +33 +-0.021329497427588065 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.155791719027395 +20 +0.11569931869118599 +30 +-0.021329497427588065 +11 +1.226889266259492 +21 +0.11569939018870201 +31 +0.4205002886903231 +12 +1.1213215446161924 +22 +0.11569939211025415 +32 +0.2942344834828935 +13 +1.1213215446161924 +23 +0.11569939211025415 +33 +0.2942344834828935 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +-0.4478093070099276 +21 +-0.39135639905742076 +31 +-0.02132949742758821 +12 +-0.44530211084188664 +22 +-0.39135639947577183 +32 +-0.02132949742758821 +13 +-0.44530211084188664 +23 +-0.39135639947577183 +33 +-0.02132949742758821 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.4478093070099276 +20 +-0.39135639905742076 +30 +-0.02132949742758821 +11 +0.5001766908782079 +21 +-0.39135649292046104 +31 +3.4231078613655503 +12 +-0.4974274817566946 +22 +-0.39135632940056486 +32 +3.2656518472615215 +13 +-0.4974274817566946 +23 +-0.39135632940056486 +33 +3.2656518472615215 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.1213215446161924 +20 +0.11569939211025415 +30 +0.2942344834828935 +11 +1.1503381943269562 +21 +0.11569932003715266 +31 +-0.021329497427588065 +12 +1.155791719027395 +22 +0.11569931869118599 +32 +-0.021329497427588065 +13 +1.155791719027395 +23 +0.11569931869118599 +33 +-0.021329497427588065 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.1503381943269562 +20 +0.11569932003715266 +30 +-0.021329497427588065 +11 +1.1213215446161924 +21 +0.11569939211025415 +31 +0.2942344834828935 +12 +0.9942427643243386 +22 +0.11569940200353146 +32 +0.18985680907938893 +13 +0.9942427643243386 +23 +0.11569940200353146 +33 +0.18985680907938893 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.4736624457345466 +20 +-0.3913561693833688 +30 +2.907315266711703 +11 +-1.1336673204778431 +21 +-0.39135622511284507 +31 +-0.02132949742758821 +12 +-1.1319509208062501 +22 +-0.3913562253941859 +32 +-0.02132949742758821 +13 +-1.1319509208062501 +23 +-0.3913562253941859 +33 +-0.02132949742758821 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.1336673204778431 +20 +-0.39135622511284507 +30 +-0.02132949742758821 +11 +-1.4736624457345466 +21 +-0.3913561693833688 +31 +2.907315266711703 +12 +-1.5933228224247524 +22 +-0.39135614976952593 +32 +1.4382238099822164 +13 +-1.5933228224247524 +23 +-0.39135614976952593 +33 +1.4382238099822164 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.4974274817566946 +20 +-0.39135632940056486 +30 +3.2656518472615215 +11 +-1.1319509208062501 +21 +-0.3913562253941859 +31 +-0.02132949742758821 +12 +-1.1292764794541248 +22 +-0.3913562258325619 +32 +-0.02132949742758821 +13 +-1.1292764794541248 +23 +-0.3913562258325619 +33 +-0.02132949742758821 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.1319509208062501 +20 +-0.3913562253941859 +30 +-0.02132949742758821 +11 +-0.4974274817566946 +21 +-0.39135632940056486 +31 +3.2656518472615215 +12 +-1.4736624457345466 +22 +-0.3913561693833688 +32 +2.907315266711703 +13 +-1.4736624457345466 +23 +-0.3913561693833688 +33 +2.907315266711703 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5742711203227493 +20 +0.11569947036484796 +30 +0.06895221585191834 +11 +0.5030290423438137 +21 +0.11565957927510673 +31 +-0.021329497427588065 +12 +0.5124547865828502 +22 +0.11566051068828076 +32 +-0.021329497427588065 +13 +0.5124547865828502 +23 +0.11566051068828076 +33 +-0.021329497427588065 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.5030290423438137 +20 +0.11565957927510673 +30 +-0.021329497427588065 +11 +0.5742711203227493 +21 +0.11569947036484796 +31 +0.06895221585191834 +12 +0.45324313692173157 +22 +0.11569950085740732 +32 +0.10190305044442108 +13 +0.45324313692173157 +23 +0.11569950085740732 +33 +0.10190305044442108 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.70094493989614 +20 +0.2541658577595415 +30 +1.4087246449502895 +11 +-1.2291257442446226 +21 +0.34329376805461653 +31 +-0.021329497427588 +12 +-1.250660927301903 +22 +0.2535397136991191 +32 +-0.021329497427588023 +13 +-1.250660927301903 +23 +0.2535397136991191 +33 +-0.021329497427588023 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.2291257442446226 +20 +0.34329376805461653 +30 +-0.021329497427588 +11 +-1.70094493989614 +21 +0.2541658577595415 +31 +1.4087246449502895 +12 +-1.6811958793467983 +22 +0.34329384219633086 +32 +1.4141378425934268 +13 +-1.6811958793467983 +23 +0.34329384219633086 +33 +1.4141378425934268 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.4285775499251552 +20 +0.11569951797502342 +30 +0.0998712621479301 +11 +-0.33918758135853855 +21 +-0.3913563992408814 +31 +0.26808941696355065 +12 +0.37713358643564576 +22 +0.11569951797501443 +32 +-0.021323120946165536 +13 +0.37713358643564576 +23 +0.11569951797501443 +33 +-0.021323120946165536 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.33918758135853855 +20 +-0.3913563992408814 +30 +0.26808941696355065 +11 +0.4285775499251552 +21 +0.11569951797502342 +31 +0.0998712621479301 +12 +-0.27720690245551616 +22 +-0.3913563992408904 +32 +0.4141067459925812 +13 +-0.27720690245551616 +23 +-0.3913563992408904 +33 +0.4141067459925812 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.625486635239021 +20 +-0.37669239221898876 +30 +1.4294077340431905 +11 +-1.2011666950222017 +21 +-0.3337005154197999 +31 +-0.021329497427588197 +12 +-1.1684015342793297 +22 +-0.37677893650277927 +32 +-0.02132949742758821 +13 +-1.1684015342793297 +23 +-0.37677893650277927 +33 +-0.02132949742758821 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.2011666950222017 +20 +-0.3337005154197999 +30 +-0.021329497427588197 +11 +-1.625486635239021 +21 +-0.37669239221898876 +31 +1.4294077340431905 +12 +-1.65545853255605 +22 +-0.333700440955652 +32 +1.421192459110173 +13 +-1.65545853255605 +23 +-0.333700440955652 +33 +1.421192459110173 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.65545853255605 +20 +-0.333700440955652 +30 +1.421192459110173 +11 +-1.2291258441147315 +21 +-0.26531020051043686 +31 +-0.021329497427588155 +12 +-1.2011666950222017 +22 +-0.3337005154197999 +32 +-0.021329497427588197 +13 +-1.2011666950222017 +23 +-0.3337005154197999 +33 +-0.021329497427588197 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.2291258441147315 +20 +-0.26531020051043686 +30 +-0.021329497427588155 +11 +-1.65545853255605 +21 +-0.333700440955652 +31 +1.421192459110173 +12 +-1.6811959791046571 +22 +-0.2653101264104666 +32 +1.4141378425934237 +13 +-1.6811959791046571 +23 +-0.2653101264104666 +33 +1.4141378425934237 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.6811959791046571 +20 +-0.2653101264104666 +30 +1.4141378425934237 +11 +-1.2505796477668625 +21 +-0.1761822093199848 +31 +-0.021329497427588127 +12 +-1.2291258441147315 +22 +-0.26531020051043686 +32 +-0.021329497427588155 +13 +-1.2291258441147315 +23 +-0.26531020051043686 +33 +-0.021329497427588155 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.2505796477668625 +20 +-0.1761822093199848 +30 +-0.021329497427588127 +11 +-1.6811959791046571 +21 +-0.2653101264104666 +31 +1.4141378425934237 +12 +-1.7009450104355979 +22 +-0.17618213549941947 +32 +1.4087246449502893 +13 +-1.7009450104355979 +23 +-0.17618213549941947 +33 +1.4087246449502893 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7009450104355979 +20 +-0.17618213549941947 +30 +1.4087246449502893 +11 +-1.2640660647138675 +21 +-0.07239046715696767 +31 +-0.021329497427588117 +12 +-1.2505796477668625 +22 +-0.1761822093199848 +32 +-0.021329497427588127 +13 +-1.2505796477668625 +23 +-0.1761822093199848 +33 +-0.021329497427588127 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.2640660647138675 +20 +-0.07239046715696767 +30 +-0.021329497427588117 +11 +-1.7009450104355979 +21 +-0.17618213549941947 +31 +1.4087246449502893 +12 +-1.7133597627005268 +22 +-0.07239039351207949 +32 +1.405321766654406 +13 +-1.7133597627005268 +23 +-0.07239039351207949 +33 +1.405321766654406 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7148013652171186 +20 +-0.2589393880700495 +30 +0.36354132201196915 +11 +0.4353642452976316 +21 +0.11569951797503464 +31 +0.11442537734154945 +12 +0.45324313692173157 +22 +0.11569950085740732 +32 +0.10190305044442108 +13 +0.45324313692173157 +23 +0.11569950085740732 +33 +0.10190305044442108 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.4353642452976316 +20 +0.11569951797503464 +30 +0.11442537734154945 +11 +0.7148013652171186 +21 +-0.2589393880700495 +31 +0.36354132201196915 +12 +0.40683149306505695 +22 +0.08212027273578515 +32 +0.1742805040831692 +13 +0.40683149306505695 +23 +0.08212027273578515 +33 +0.1742805040831692 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.40683149306505695 +20 +0.08212027273578515 +30 +0.1742805040831692 +11 +0.7148013652171186 +21 +-0.2589393880700495 +31 +0.36354132201196915 +12 +0.3919244872289036 +22 +0.06457671434803919 +32 +0.2055519607021757 +13 +0.3919244872289036 +23 +0.06457671434803919 +33 +0.2055519607021757 +70 +3 + 0 +3DFACE + 8 +palm +10 +0.3919244872289036 +20 +0.06457671434803919 +30 +0.2055519607021757 +11 +0.7148013652171186 +21 +-0.2589393880700495 +31 +0.36354132201196915 +12 +0.6154331324746154 +22 +-0.25556244191651595 +32 +0.4291290051087077 +13 +0.6154331324746154 +23 +-0.25556244191651595 +33 +0.4291290051087077 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.2851012666870065 +20 +0.5693393649383878 +30 +2.603406296512527 +11 +1.1591044450812846 +21 +0.4692998445383917 +31 +-0.02132949742758796 +12 +1.157159369973707 +22 +0.46962575188848055 +32 +-0.02132949742758796 +13 +1.157159369973707 +23 +0.46962575188848055 +33 +-0.02132949742758796 +70 +1 + 0 +3DFACE + 8 +palm +10 +1.1591044450812846 +20 +0.4692998445383917 +30 +-0.02132949742758796 +11 +1.2851012666870065 +21 +0.5693393649383878 +31 +2.603406296512527 +12 +1.5940745180163998 +22 +0.4698512386274375 +32 +1.569594078001374 +13 +1.5940745180163998 +23 +0.4698512386274375 +33 +1.569594078001374 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.4450700509834469 +20 +0.6693395026301509 +30 +2.619224993234204 +11 +0.7296300798328395 +21 +0.4696682231644226 +31 +-0.02132949742758796 +12 +0.7268738831455794 +22 +0.4699930645936956 +32 +-0.02132949742758796 +13 +0.7268738831455794 +23 +0.4699930645936956 +33 +-0.02132949742758796 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.7296300798328395 +20 +0.4696682231644226 +30 +-0.02132949742758796 +11 +0.4450700509834469 +21 +0.6693395026301509 +31 +2.619224993234204 +12 +1.2851012666870065 +22 +0.5693393649383878 +32 +2.603406296512527 +13 +1.2851012666870065 +23 +0.5693393649383878 +33 +2.603406296512527 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.005897113385843644 +20 +0.6693395746160492 +30 +2.540767132815593 +11 +0.30393240840636637 +21 +0.46999313439481716 +31 +-0.02132949742758796 +12 +0.30246749279966134 +22 +0.4700130823729538 +32 +-0.02132949742758796 +13 +0.30246749279966134 +23 +0.4700130823729538 +33 +-0.02132949742758796 +70 +1 + 0 +3DFACE + 8 +palm +10 +0.30393240840636637 +20 +0.46999313439481716 +30 +-0.02132949742758796 +11 +0.005897113385843644 +21 +0.6693395746160492 +31 +2.540767132815593 +12 +0.4450700509834469 +22 +0.6693395026301509 +32 +2.619224993234204 +13 +0.4450700509834469 +23 +0.6693395026301509 +33 +2.619224993234204 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7175941910489623 +20 +0.038991863859061116 +30 +1.404161108238109 +11 +-1.2640660281999483 +21 +0.150374046197144 +31 +-0.021329497427588058 +12 +-1.2686660179281843 +22 +0.03899179027408667 +32 +-0.021329497427588086 +13 +-1.2686660179281843 +23 +0.03899179027408667 +33 +-0.021329497427588086 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.2640660281999483 +20 +0.150374046197144 +30 +-0.021329497427588058 +11 +-1.7175941910489623 +21 +0.038991863859061116 +31 +1.404161108238109 +12 +-1.7133597261865965 +22 +0.15037411984202997 +32 +1.4053217666544113 +13 +-1.7133597261865965 +23 +0.15037411984202997 +33 +1.4053217666544113 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.7133597627005268 +20 +-0.07239039351207949 +30 +1.405321766654406 +11 +-1.2686660179281843 +21 +0.03899179027408667 +31 +-0.021329497427588086 +12 +-1.2640660647138675 +22 +-0.07239046715696767 +32 +-0.021329497427588117 +13 +-1.2640660647138675 +23 +-0.07239046715696767 +33 +-0.021329497427588117 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.2686660179281843 +20 +0.03899179027408667 +30 +-0.021329497427588086 +11 +-1.7133597627005268 +21 +-0.07239039351207949 +31 +1.405321766654406 +12 +-1.7175941910489623 +22 +0.038991863859061116 +32 +1.404161108238109 +13 +-1.7175941910489623 +23 +0.038991863859061116 +33 +1.404161108238109 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.433275824211661 +20 +0.6693396466020395 +30 +2.4623092723969795 +11 +-0.27212184387072247 +21 +0.47001317722134817 +31 +-0.02132949742758796 +12 +-0.2736178696594298 +22 +0.4700343811409351 +32 +-0.02132949742758796 +13 +-0.2736178696594298 +23 +0.4700343811409351 +33 +-0.02132949742758796 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.27212184387072247 +20 +0.47001317722134817 +30 +-0.02132949742758796 +11 +-0.433275824211661 +21 +0.6693396466020395 +31 +2.4623092723969795 +12 +0.005897113385843644 +22 +0.6693395746160492 +32 +2.540767132815593 +13 +0.005897113385843644 +23 +0.6693395746160492 +33 +2.540767132815593 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.2344292513491493 +20 +0.5693397779211644 +30 +2.1309506849853554 +11 +-0.7010674590880783 +21 +0.4700344517163295 +31 +-0.02132949742758796 +12 +-0.7041341214652392 +22 +0.4697403390103124 +32 +-0.02132949742758796 +13 +-0.7041341214652392 +23 +0.4697403390103124 +33 +-0.02132949742758796 +70 +1 + 0 +3DFACE + 8 +palm +10 +-0.7010674590880783 +20 +0.4700344517163295 +30 +-0.02132949742758796 +11 +-1.2344292513491493 +21 +0.5693397779211644 +31 +2.1309506849853554 +12 +-0.433275824211661 +22 +0.6693396466020395 +32 +2.4623092723969795 +13 +-0.433275824211661 +23 +0.6693396466020395 +33 +2.4623092723969795 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.5933226813458456 +20 +0.4693398367483087 +30 +1.438223809982218 +11 +-1.1313553663027527 +21 +0.46969766418759396 +31 +-0.02132949742758796 +12 +-1.1336673196459368 +22 +0.4692970973881342 +32 +-0.02132949742758796 +13 +-1.1336673196459368 +23 +0.4692970973881342 +33 +-0.02132949742758796 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.1313553663027527 +20 +0.46969766418759396 +30 +-0.02132949742758796 +11 +-1.5933226813458456 +21 +0.4693398367483087 +31 +1.438223809982218 +12 +-1.2344292513491493 +22 +0.5693397779211644 +32 +2.1309506849853554 +13 +-1.2344292513491493 +23 +0.5693397779211644 +33 +2.1309506849853554 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.6811958793467983 +20 +0.34329384219633086 +30 +1.4141378425934268 +11 +-1.2011665727838676 +21 +0.41168407379832106 +31 +-0.021329497427587975 +12 +-1.2291257442446226 +22 +0.34329376805461653 +32 +-0.021329497427588 +13 +-1.2291257442446226 +23 +0.34329376805461653 +33 +-0.021329497427588 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.2011665727838676 +20 +0.41168407379832106 +30 +-0.021329497427587975 +11 +-1.6811958793467983 +21 +0.34329384219633086 +31 +1.4141378425934268 +12 +-1.6554584103781642 +22 +0.4116841483041124 +32 +1.4211924591101657 +13 +-1.6554584103781642 +23 +0.4116841483041124 +33 +1.4211924591101657 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.6554584103781642 +20 +0.4116841483041124 +30 +1.4211924591101657 +11 +-1.168401397979206 +21 +0.45476248418163134 +31 +-0.021329497427587947 +12 +-1.2011665727838676 +22 +0.41168407379832106 +32 +-0.021329497427587975 +13 +-1.2011665727838676 +23 +0.41168407379832106 +33 +-0.021329497427587975 +70 +1 + 0 +3DFACE + 8 +palm +10 +-1.168401397979206 +20 +0.45476248418163134 +30 +-0.021329497427587947 +11 +-1.6554584103781642 +21 +0.4116841483041124 +31 +1.4211924591101657 +12 +-1.6254864989672675 +22 +0.4546760897419495 +32 +1.4294077340431952 +13 +-1.6254864989672675 +23 +0.4546760897419495 +33 +1.4294077340431952 +70 +1 + 0 +LINE + 8 +palm +10 +1.1567374333163143 +20 +0.11569931667688083 +30 +-0.02998722460508882 +11 +1.1057685335055842 +21 +0.1156993301253959 +31 +-0.021329497427588065 + 0 +LINE + 8 +palm +10 +-0.4476786151194132 +20 +-0.3913563992408948 +30 +-0.029987248507749635 +11 +-0.4478093070099276 +21 +-0.39135639905742076 +31 +-0.02132949742758821 + 0 +3DFACE + 8 +palm +10 +0.5001766908782079 +20 +-0.39135649292046104 +30 +3.4231078613655503 +11 +-0.39603457201367 +21 +-0.3913563992408881 +31 +0.11999794324711321 +12 +-0.33918758135853855 +22 +-0.3913563992408814 +32 +0.26808941696355065 +13 +-0.33918758135853855 +23 +-0.3913563992408814 +33 +0.26808941696355065 +70 +0 + 0 +3DFACE + 8 +palm +10 +1.5940743769374797 +20 +0.11569951797502342 +30 +1.5695940780014193 +11 +1.1922941387017831 +21 +0.12173074383943339 +31 +-0.021329497427588044 +12 +1.6267999741316135 +22 +0.12174651827402361 +32 +1.5677580014049102 +13 +1.6267999741316135 +23 +0.12174651827402361 +33 +1.5677580014049102 +70 +0 + 0 +ENDSEC + 0 +EOF diff --git a/hacks/glx/handsy.man b/hacks/glx/handsy.man new file mode 100644 index 0000000..c8143db --- /dev/null +++ b/hacks/glx/handsy.man @@ -0,0 +1,76 @@ +.TH XScreenSaver 1 "" "X Version 11" +.SH NAME +handsy - some hands. +.SH SYNOPSIS +.B handsy +[\-display \fIhost:display.screen\fP] +[\-visual \fIvisual\fP] +[\-window] +[\-root] +[\-delay \fInumber\fP] +[\-speed \fInumber\fP] +[\-count \fInumber\fP] +[\-no-wander] +[\-no-spin] +[\-no-front] +[\-wireframe] +[\-fps] +.SH DESCRIPTION +A set of robotic hands communicate non-verbally. +.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 hands. 1 - 50. Default: 2. +.TP 8 +.B \-wander | \-no-wander +Whether the hands should wander around the screen. +.TP 8 +.B \-spin | \-no-spin +Whether the object should spin. +.TP 8 +.B \-front | \-no-front +Whether to spin all the way around. Default: no. +.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 2018 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. diff --git a/hacks/glx/handsy_anim.h b/hacks/glx/handsy_anim.h new file mode 100644 index 0000000..f56ae36 --- /dev/null +++ b/hacks/glx/handsy_anim.h @@ -0,0 +1,805 @@ +/* handsy, Copyright (c) 2018 Jamie Zawinski <jwz@jwz.org> + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation. No representations are made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * Handsy's various animation key-frames. I made these by "hand" with -debug. + * + * I considered using the Leap Motion Controller API to snapshot real hands, + * but that device is crap at detecting poses with any precision. + */ + +#ifndef __HANDSY_ANIM__ +#define __HANDSY_ANIM__ + +/* For reference: + + hand { joint { thumb { distal, proximal, metacarpal, 0 } + index { distal, intermediate, proximal, metacarpal } + middle { distal, intermediate, proximal, metacarpal } + ring { distal, intermediate, proximal, metacarpal } + pinky { distal, intermediate, proximal, metacarpal }} + base { thumb, index, middle, ring, pinky } + wrist { Z, X, rot } + pos { X, Y, Z }} + duration, pause + pos[3], rot[3] + */ + +/**************************************************************************/ + +#define NNN 1.8 + +static const hand open_palm = { + {{ 0.20, 0.20, 0.20, 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 }, + True +}; + +static const hand closed_hand = { + {{ 0.86, 1.60, 0, 0 }, + { 1.60, 1.60, 1.60, 0 }, + { 1.60, 1.60, 1.60, 0 }, + { 1.60, 1.60, 1.60, 0 }, + { 1.60, 1.60, 1.60, 0 }}, + { -1.70, 0, 0, 0, 0 }, + { 0.78, 0, 0 }, + { 0, 0, 0 }, + True +}; + +static const hand closed_flat = { + {{ 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.68, 0, 0 }, + { 0, 0, -0.08 }, + True +}; + +static const hand open_wide = { + {{ 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }}, + { 0, -0.25, -0.08, 0.08, 0.25 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + True +}; + +static const hand_anim closed_flat_anim[] = { + { &closed_flat, NNN, 0, { 0, 0, 0 }, { 0, 0, 0 }}, + { 0, }}; + +static const hand_anim hidden_anim[] = { + { &closed_flat, NNN, 0, { 0, 0, -0.5 }, { 0, 0, 0 }}, + { 0, }}; + +static const hand_anim wave_anim[] = { + { &open_palm, NNN, 0.5, { -0.1, 0, 0 }, { 0, 0, 0 }}, + { &open_palm, 0.05, 0, { -0.1, 0, 0 }, { 0, -0.35, 0 }}, + { &open_palm, 0.10, 0, { -0.1, 0, 0 }, { 0, 0.90, 0 }}, + { &open_palm, 0.10, 0, { -0.1, 0, 0 }, { 0, -0.35, 0 }}, + { &open_palm, 0.10, 0, { -0.1, 0, 0 }, { 0, 0.90, 0 }}, + { &open_palm, 0.10, 0, { -0.1, 0, 0 }, { 0, -0.35, 0 }}, + { &open_palm, 0.10, 0, { -0.1, 0, 0 }, { 0, 0.90, 0 }}, + { &open_palm, 0.10, 0, { -0.1, 0, 0 }, { 0, -0.35, 0 }}, + { &open_palm, 0.10, 0, { -0.1, 0, 0 }, { 0, 0.90, 0 }}, + { &open_palm, 0.10, 0, { -0.1, 0, 0 }, { 0, -0.35, 0 }}, + { &open_palm, 0.10, 0, { -0.1, 0, 0 }, { 0, 0.90, 0 }}, + { &open_palm, 0.10, 0, { -0.1, 0, 0 }, { 0, -0.35, 0 }}, + { &open_palm, 0.05, 1, { -0.1, 0, 0 }, { 0, 0, 0 }}, + { 0, }}; + +static const hand_anim wave2_anim[] = { + { &open_palm, NNN, 0, { 0, 0, 0 }, { 0, 0, 0 }}, + { &open_palm, 0.2, 0, { 0, 0, 0 }, { 0, 0, 0 }}, + { &open_palm, 0.2, 0, { 0, 0, 0 }, { 1.3, 0, 0 }}, + { &open_palm, 0.2, 0, { 0, 0, 0 }, { 0, 0, 0 }}, + { &open_palm, 0.2, 0, { 0, 0, 0 }, { 1.3, 0, 0 }}, + { &open_palm, 0.2, 0, { 0, 0, 0 }, { 0, 0, 0 }}, + { &open_palm, 0.2, 0, { 0, 0, 0 }, { 1.3, 0, 0 }}, + { &open_palm, 0.2, 1, { 0, 0, 0 }, { 0, 0.0, 0 }}, + { 0, }}; + +static const hand_anim jazzhands_anim[] = { + { &open_palm, NNN, 0.5, { -0.1, 0, 0 }, { 0, 0, 0 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0 }, { 0, 0.35, -M_PI/4 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0.1 }, { 0, 0.90, 0 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0.2 }, { 0, 0.35, -M_PI/4 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0.3 }, { 0, 0.90, 0 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0.4 }, { 0, 0.35, -M_PI/4 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0.4 }, { 0, 0.90, 0 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0.4 }, { 0, 0.35, -M_PI/4 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0.4 }, { 0, 0.90, 0 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0.3 }, { 0, 0.35, -M_PI/4 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0.2 }, { 0, 0.90, 0 }}, + { &open_palm, 0.04, 0, { -0.1, 0, 0.1 }, { 0, 0.35, -M_PI/4 }}, + { &open_palm, 0.04, 1, { -0.1, 0, 0 }, { 0, 0.35, -M_PI/4 }}, + { 0, }}; + +/**************************************************************************/ + +static const hand hand_clap1 = { + {{ 0.20, 0.20, 0.20, 0 }, + { 0, -0.10, -0.10, 0 }, + { 0, -0.10, -0.10, 0 }, + { 0, -0.10, -0.10, 0 }, + { 0, -0.10, -0.10, 0 }}, + { 0, 0, 0, 0, 0 }, + { 0, 0.9, 0 }, + { 0, 0, 0 }, + True +}; + +static const hand_anim clap_anim[] = { + { &open_palm, NNN, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 0.05, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.1, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 0.05, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.1, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 0.05, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.1, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 0.05, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.1, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 0.05, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.1, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 0.05, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.1, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 0.05, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.1, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 0.05, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.1, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 0.05, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.1, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 0.05, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.1, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { 0, }}; + +static const hand_anim slow_clap_anim[] = { + { &open_palm, NNN, 1, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 1, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.4, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 1, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.4, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 1, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.4, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 1, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.4, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { &hand_clap1, 0.1, 1, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &open_palm, 0.4, 0, { -0.3, 0, 0 }, { 0, 0, -M_PI/2 }}, + { 0, }}; + +static const hand_anim pray_anim[] = { + { &hand_clap1, NNN, 0, { 0, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { &hand_clap1, 0.2, 2.5, { 0.28, 0, 0 }, { -0.5, -1.6, -1.7 }}, + { 0, }}; + + +/**************************************************************************/ + +static const hand middle_finger = { + {{ 0.70, 0.70, 0, 0 }, + { 1.60, 1.60, 1.60, 0 }, + { 0, 0, 0, 0 }, + { 1.40, 1.40, 1.40, 0 }, + { 1.60, 1.60, 1.60, 0 }}, + { 0, 0, 0, 0, 0 }, + { -0.04, 0.06, -2.90 }, + { 0, 0, 0 }, + True +}; + +static const hand_anim middle_anim[] = { + { &middle_finger, NNN, 1, { 0, 0, 0.0 }, { 0, 0, 0 }}, + { &middle_finger, 0.2, 0, { 0, 0, 0.3 }, { 0, 0.2, 0 }}, + { &middle_finger, 0.2, 0, { 0, 0, 0.0 }, { 0, 0, 0 }}, + { &middle_finger, 0.2, 0, { 0, 0, 0.3 }, { 0, -0.2, 0 }}, + { &middle_finger, 0.2, 0, { 0, 0, 0.0 }, { 0, 0, 0 }}, + { &middle_finger, 0.2, 0, { 0, 0, 0.3 }, { 0, 0.2, 0 }}, + { &middle_finger, 0.2, 0, { 0, 0, 0.0 }, { 0, 0, 0 }}, + { &middle_finger, 0.2, 0, { 0, 0, 0 }, { 0, 0, 0 }}, + { 0, }}; + +/**************************************************************************/ + +static const hand hand_ok = { + {{ 0.87, 0.32, 0.02, 0 }, + { 0.88, 0.91, 0.93, 0 }, + { 0, 0.32, 0.32, 0 }, + { 0, 0.02, 0.02, 0 }, + { -0.20, -0.20, -0.20, 0 }}, + { -0.92, -0.03, -0.06, 0.10, 0.25 }, + { -0.04, 0.06, -2.90 }, + { 0, 0, 0 }, + True +}; + +static const hand hand_pointing = { + {{ 0.87, 0.32, 0.02, 0 }, + { 0, 0, 0, 0 }, + { 0.8, 1.60, 1.60, 0 }, + { 0.8, 1.60, 1.60, 0 }, + { 0.8, 1.60, 1.60, 0 }}, + { 0, 0, 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + True +}; + +static const hand_anim ok_anim[] = { + { &hand_ok, NNN, 1, { 0, 0, 0 }, { 0, 0, M_PI/2 }}, + { 0, }}; + +static const hand_anim inout1_anim[] = { + { &hand_ok, NNN, 1, { 0.3, 0.34, 0.4 }, { M_PI/2, 0, M_PI }}, + { 0, }}; + +static const hand_anim inout2_anim[] = { + { &hand_pointing, NNN, 1, { -0.8, 0, 0.15 }, { 0, -M_PI/2, -M_PI }}, + { &hand_pointing, 0.2, 0, { -0.1, 0, 0.15 }, { 0, -M_PI/2, -M_PI }}, + { &hand_pointing, 0.2, 0, { -0.8, 0, 0.15 }, { 0, -M_PI/2, -M_PI }}, + { &hand_pointing, 0.2, 0, { -0.1, 0, 0.15 }, { 0, -M_PI/2, -M_PI }}, + { &hand_pointing, 0.2, 0, { -0.8, 0, 0.15 }, { 0, -M_PI/2, -M_PI }}, + { &hand_pointing, 0.2, 0, { -0.1, 0, 0.15 }, { 0, -M_PI/2, -M_PI }}, + { &hand_pointing, 0.2, 0, { -0.8, 0, 0.15 }, { 0, -M_PI/2, -M_PI }}, + { &hand_pointing, 0.2, 0, { -0.1, 0, 0.15 }, { 0, -M_PI/2, -M_PI }}, + { &hand_pointing, 0.2, 1, { -0.8, 0, 0.15 }, { 0, -M_PI/2, -M_PI }}, + { 0, }}; + + +/**************************************************************************/ + +static const hand tap0 = { + {{ 0, 0, 0, 0 }, + { 0.06, 0.06, 0.06, 0 }, + { 0.04, 0.04, 0.04, 0 }, + { 0.04, 0.04, 0.04, 0 }, + { 0.02, 0.02, 0.02, 0 }}, + { 0, -0.25, -0.06, 0.10, 0.25 }, + { 1.06, 0.10, 0 }, + { 0, -0.10, 0.04 }, + True +}; +static const hand tap1 = { + {{ 0, 0, 0, 0 }, + { 0.06, 0.06, 0.06, 0 }, + { 0.04, 0.04, 0.04, 0 }, + { 0.24, 0.24, 0.24, 0 }, + { 0.60, 0.60, 0.60, 0 }}, + { 0, -0.25, -0.06, 0.10, 0.25 }, + { 1.06, 0.10, 0 }, + { 0, -0.10, 0.04 }, + True +}; +static const hand tap2 = { + {{ 0, 0, 0, 0 }, + { 0.06, 0.06, 0.06, 0 }, + { 0.30, 0.30, 0.30, 0 }, + { 0.66, 0.66, 0.66, 0 }, + { 0.60, 0.60, 0.60, 0 }}, + { 0, -0.25, -0.06, 0.10, 0.25 }, + { 1.06, 0.10, 0 }, + { 0, -0.10, 0.04 }, + True +}; +static const hand tap3 = { + {{ 0, 0, 0, 0 }, + { 0.26, 0.26, 0.26, 0 }, + { 0.71, 0.71, 0.71, 0 }, + { 0.66, 0.66, 0.66, 0 }, + { 0.60, 0.60, 0.60, 0 }}, + { -0.10, -0.25, -0.06, 0.10, 0.25 }, + { 1.06, 0.10, 0 }, + { 0, -0.10, 0.04 }, + True +}; +static const hand tap4 = { + {{ 0, 0, 0, 0 }, + { 0.72, 0.72, 0.72, 0 }, + { 0.71, 0.71, 0.71, 0 }, + { 0.66, 0.66, 0.66, 0 }, + { 0.60, 0.60, 0.60, 0 }}, + { -0.20, -0.25, -0.06, 0.10, 0.25 }, + { 1.06, 0.10, 0 }, + { 0, -0.10, 0.04 }, + True +}; +static const hand tap5 = { + {{ 0, 0, 0, 0 }, + { 0.72, 0.72, 0.72, 0 }, + { 0.71, 0.71, 0.71, 0 }, + { 0.66, 0.66, 0.66, 0 }, + { 0.60, 0.60, 0.60, 0 }}, + { -0.50, -0.25, -0.06, 0.10, 0.25 }, + { 1.06, 0.10, 0 }, + { 0, -0.10, 0.04 }, + True +}; + +static const hand_anim tap_anim[] = { + { &tap5, NNN, 0.5, { 0, 1, -0.19 }, { 0, 0, 0 }}, + + { &tap0, 0.13, 0.8, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap1, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap2, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap3, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap4, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap5, 0.13, 0.8, { 0, 1, -0.19 }, { 0, 0, 0 }}, + + { &tap0, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap1, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap2, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap3, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap4, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap5, 0.13, 0.8, { 0, 1, -0.19 }, { 0, 0, 0 }}, + + { &tap0, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap1, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap2, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap3, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap4, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap5, 0.13, 0.8, { 0, 1, -0.19 }, { 0, 0, 0 }}, + + { &tap0, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap1, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap2, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap3, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap4, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap5, 0.13, 0.8, { 0, 1, -0.19 }, { 0, 0, 0 }}, + + { &tap0, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap1, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap2, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap3, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap4, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap5, 0.13, 0.8, { 0, 1, -0.19 }, { 0, 0, 0 }}, + + { &tap0, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap1, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap2, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap3, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap4, 0.13, 0, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { &tap5, 0.13, 0.8, { 0, 1, -0.19 }, { 0, 0, 0 }}, + { 0, }}; + + +/**************************************************************************/ + +static const hand hand_spock = { + {{ 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }}, + { 0.00, -0.13, -0.25, 0.25, 0.11 }, + { 0, 0.10, 0 }, + { 0, 0, 0 }, + True +}; + +static const hand_anim spock_anim[] = { + { &hand_spock, NNN, 1.5, { 0, 0, 0.1 }, { 0, 0, 0 } }, + { 0, }}; + +/**************************************************************************/ + +static const hand hand_horns = { + {{ 0, 1.30, 1.30, 0 }, + { 0, 0, 0, 0 }, + { 0.70, 1.60, 1.60, 0 }, + { 0.70, 1.60, 1.60, 0 }, + { 0, 0, 0, 0 }}, + { -1.50, -0.25, 0, 0, 0.25 }, + { 0, 0.10, 0 }, + { 0, 0, 0 }, + True +}; + +static const hand_anim horns_anim[] = { + { &hand_horns, NNN, 1.5, { 0, 0, 0.1 }, { 0, 0, 0 } }, + { &hand_horns, 0.3, 0, { 0, 0, 0.1 }, { 0.7, 0, 0 } }, + { &hand_horns, 0.3, 0, { 0, 0, 0.1 }, { 0, 0, 0 } }, + { &hand_horns, 0.3, 0, { 0, 0, 0.1 }, { 0.7, 0, 0 } }, + { &hand_horns, 0.3, 0.3, { 0, 0, 0.1 }, { 0, 0, 0 } }, + { 0, }}; + +/**************************************************************************/ + +static const hand_anim bs1_anim[] = { + { &hand_horns, NNN, 1, { 0.2, 0, 0 }, { 0, M_PI/4, M_PI/2 }}, + { 0, }}; + +static const hand_anim bs2_anim[] = { + { &closed_hand, NNN, 1, { 0.2, 0, 0 }, { M_PI/4, 0, M_PI/2 }}, + { &open_wide, 0.3, 0, { 0.2, 0, 0 }, { M_PI, 0, M_PI/2 }}, + { &closed_hand, 0.3, 0, { 0.2, 0, 0 }, { M_PI/4, 0, M_PI/2 }}, + { &open_wide, 0.3, 0, { 0.2, 0, 0 }, { M_PI, 0, M_PI/2 }}, + { &closed_hand, 0.3, 0, { 0.2, 0, 0 }, { M_PI/4, 0, M_PI/2 }}, + { &open_wide, 0.3, 0, { 0.2, 0, 0 }, { M_PI, 0, M_PI/2 }}, + { &closed_hand, 0.3, 1, { 0.2, 0, 0 }, { M_PI/4, 0, M_PI/2 }}, + { 0, }}; + +/**************************************************************************/ + +static const hand hand_v = { + {{ 0, 1.60, 1.60, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 1.60, 1.60, 1.60, 0 }, + { 1.60, 1.60, 1.60, 0 }}, + { -0.80, -0.22, 0.25, 0, 0 }, + { 0, 0, -M_PI }, + { 0, 0, 0 }, + True +}; + +static const hand_anim upyours_anim[] = { + { &hand_v, NNN, 1, { 0, 0, 0.0 }, { 0, 0, 0 }}, + { &hand_v, 0.2, 0, { 0, 0, 0.3 }, { 0, 0.2, 0 }}, + { &hand_v, 0.2, 0, { 0, 0, 0.0 }, { 0, 0, 0 }}, + { &hand_v, 0.2, 0, { 0, 0, 0.3 }, { 0, 0.2, 0 }}, + { &hand_v, 0.2, 1, { 0, 0, 0.0 }, { 0, 0, 0 }}, + { 0, }}; + +static const hand_anim peace_anim[] = { + { &hand_v, NNN, 0.0, { 0, 0, 0 }, { 0, 0, M_PI }}, + { &hand_v, 0.3, 0.2, { 0, 0, 0 }, { 0, -0.2, M_PI }}, + { &hand_v, 0.8, 2.2, { 0, 0, 0 }, { 0, 0.7, M_PI }}, + { 0, }}; + +static const hand_anim scissor1_anim[] = { + { &hand_v, NNN, 1, { -0.2, 0, 0 }, { M_PI, 0, M_PI }}, + { &hand_v, 0.5, 1, { -0.5, 0, 0 }, { M_PI/2, 0, M_PI/2 }}, + { &hand_v, 0.2, 0, { 0, 0, 0 }, { M_PI/2, 0, M_PI/2 }}, + { &hand_v, 0.2, 0, { -0.2, 0, 0 }, { M_PI/2, 0, M_PI/2 }}, + { &hand_v, 0.2, 0, { 0, 0, 0 }, { M_PI/2, 0, M_PI/2 }}, + { &hand_v, 0.2, 0, { -0.2, 0, 0 }, { M_PI/2, 0, M_PI/2 }}, + { &hand_v, 0.2, 0, { 0, 0, 0 }, { M_PI/2, 0, M_PI/2 }}, + { 0, }}; + +static const hand_anim scissor2_anim[] = { + { &hand_v, NNN, 1, { -0.2, 0, 0 }, { M_PI, 0, M_PI }}, + { &hand_v, 0.5, 1, { -0.5, 0.1, -0.05 }, { 0, -M_PI/2, -M_PI/2 }}, + { &hand_v, 0.2, 0, { 0, 0.1, -0.05 }, { 0, -M_PI/2, -M_PI/2 }}, + { &hand_v, 0.2, 0, { -0.2, 0.1, -0.05 }, { 0, -M_PI/2, -M_PI/2 }}, + { &hand_v, 0.2, 0, { 0, 0.1, -0.05 }, { 0, -M_PI/2, -M_PI/2 }}, + { &hand_v, 0.2, 0, { -0.2, 0.1, -0.05 }, { 0, -M_PI/2, -M_PI/2 }}, + { &hand_v, 0.2, 0, { 0, 0.1, -0.05 }, { 0, -M_PI/2, -M_PI/2 }}, + { 0, }}; + +/**************************************************************************/ + +static const hand hand_v2 = { + {{ 0, 1.60, 1.60, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 1.60, 1.60, 1.60, 0 }, + { 1.60, 1.60, 1.60, 0 }}, + { -0.80, -0.06, 0.09, 0, 0 }, + { 0, 0, -M_PI }, + { 0, 0, 0 }, + True +}; + +static const hand_anim eyeonu_anim[] = { + { &hand_v2, NNN, 1, { 0.3, -1.4, 1.0 }, { M_PI - 1.8, 0, M_PI }}, + { &hand_v2, 0.3, 0.3, { 0.3, 1.4, 0.5 }, { M_PI, 0, -M_PI }}, + { &hand_v2, 0.3, 1, { 0.3, -1.4, 1.0 }, { M_PI - 1.8, 0, M_PI }}, + { &hand_v2, 0.3, 0.3, { 0.3, 1.4, 0.5 }, { M_PI, 0, -M_PI }}, + { &hand_v2, 0.3, 1, { 0.3, -1.4, 1.0 }, { M_PI - 1.8, 0, M_PI }}, + { &hand_v2, 0.3, 0.3, { 0.3, 1.4, 0.5 }, { M_PI, 0, -M_PI }}, + { &hand_v2, 0.3, 1, { 0.3, -1.4, 1.0 }, { M_PI - 1.8, 0, M_PI }}, + { 0, }}; + +/**************************************************************************/ + +static const hand hand_trick1 = { + {{ 0.50, 1.60, 1.60, 0.00 }, + { 0, 1.60, 1.60, 0.00 }, + { 0.36, 0.36, 0.36, 0.00 }, + { 0, 0.16, 0.16, 0.00 }, + { 0.00, 0.00, 0.00, 0.00 }}, + { 0.00, 0.00, 0.00, 0.00, 0.00 }, + { 0.00, 0.00, 0.00 }, + { 0.00, 0.00, 0.00 }, + True +}; + + +static const hand hand_trick2 = { + {{ 1, 1.60, 1.60, 0.00 }, + { 0, 1.60, 1.60, 0.00 }, + { 0, 1.60, 1.60, 0.00 }, + { 0, 1.60, 1.60, 0.00 }, + { 0, 1.60, 1.60, 0.00 }}, + { 0.00, 0.00, 0.00, 0.00, 0.00 }, + { 0.00, 0.00, 0.00 }, + { 0.00, 0.00, 0.00 }, + True +}; + +static const hand_anim trick1_anim[] = { + { &hand_trick2, NNN, 1, { 0.24, 0, 0 }, { 0, M_PI/4, 0 }}, + { &hand_trick1, 0.5, 1, { 0.24, 0, 0 }, { 0, M_PI/4, 0 }}, + { &hand_trick1, 0.3, 0, { 0.24 - 0.4, 0, 0 }, { 0, M_PI/4, 0 }}, + { &hand_trick1, 0.3, 0, { 0.24, 0, 0 }, { 0, M_PI/4, 0 }}, + { &hand_trick1, 0.3, 0, { 0.24 - 0.4, 0, 0 }, { 0, M_PI/4, 0 }}, + { &hand_trick1, 0.3, 0, { 0.24, 0, 0 }, { 0, M_PI/4, 0 }}, + { &hand_trick1, 0.3, 0, { 0.24 - 0.4, 0, 0 }, { 0, M_PI/4, 0 }}, + { &hand_trick1, 0.3, 0, { 0.24, 0, 0 }, { 0, M_PI/4, 0 }}, + { &hand_trick1, 0.3, 1, { 0.24 - 0.4, 0, 0 }, { 0, M_PI/4, 0 }}, + { 0, }}; + +static const hand_anim trick2_anim[] = { + { &hand_trick2, NNN, 1, { 0.24, -0.07, 0.51 }, { 0, M_PI + M_PI/4, M_PI }}, + { &hand_trick2, 0.5, 1, { 0.24, -0.07, 0.51 }, { 0, M_PI + M_PI/4, M_PI }}, + { &hand_trick2, 0.3, 0, { 0.24 - 0.4, 0, 0.51 }, { 0, M_PI + M_PI/4, M_PI }}, + { &hand_trick2, 0.3, 0, { 0.24, -0.07, 0.51 }, { 0, M_PI + M_PI/4, M_PI }}, + { &hand_trick2, 0.3, 0, { 0.24 - 0.4, 0, 0.51 }, { 0, M_PI + M_PI/4, M_PI }}, + { &hand_trick2, 0.3, 0, { 0.24, -0.07, 0.51 }, { 0, M_PI + M_PI/4, M_PI }}, + { &hand_trick2, 0.3, 0, { 0.24 - 0.4, 0, 0.51 }, { 0, M_PI + M_PI/4, M_PI }}, + { &hand_trick2, 0.3, 0, { 0.24, -0.07, 0.51 }, { 0, M_PI + M_PI/4, M_PI }}, + { &hand_trick2, 0.3, 1, { 0.24 - 0.4, 0, 0.51 }, { 0, M_PI + M_PI/4, M_PI }}, + { 0, }}; + +/**************************************************************************/ + +static const hand thumbs_up = { + {{ 0.00, 0.00, 0.00, 0.00 }, + { 0.56, 1.60, 1.60, 0.00 }, + { 0.50, 1.60, 1.60, 0.00 }, + { 0.56, 1.60, 1.60, 0.00 }, + { 0.52, 1.60, 1.60, 0.00 }}, + { 0.00, 0.00, 0.00, 0.00, 0.00 }, + { M_PI, 1.52, 0.00 }, + { 0.00, 0.00, 0.00 }, + True +}; + +static const hand_anim thumbsup_anim[] = { + { &thumbs_up, NNN, 1, { 0, 0, 0 }, { 0, 0, 0 }}, + { &thumbs_up, 0.25, 0, { 0, 0, 0.25 }, { 0, 0, 0 }}, + { &thumbs_up, 0.25, 0, { 0, 0, 0 }, { 0, 0, 0 }}, + { &thumbs_up, 0.25, 0, { 0, 0, 0.25 }, { 0, 0, 0 }}, + { &thumbs_up, 0.25, 0, { 0, 0, 0 }, { 0, 0, 0 }}, + { &thumbs_up, 0.25, 0, { 0, 0, 0.25 }, { 0, 0, 0 }}, + { &thumbs_up, 0.25, 1, { 0, 0, 0 }, { 0, 0, 0 }}, + { 0, }}; + +static const hand_anim thumbsdn_anim[] = { + { &thumbs_up, NNN, 1, { 0, 0, 0 }, { 0, 0, 0 }}, + { &thumbs_up, 0.25, 0.3, { -0.1, 0, 0.75 }, { 0, -M_PI, 0 }}, + { &thumbs_up, 0.25, 0, { -0.1, 0, 0.50 }, { 0, -M_PI, 0 }}, + { &thumbs_up, 0.25, 0, { -0.1, 0, 0.75 }, { 0, -M_PI, 0 }}, + { &thumbs_up, 0.25, 0, { -0.1, 0, 0.50 }, { 0, -M_PI, 0 }}, + { &thumbs_up, 0.25, 0, { -0.1, 0, 0.75 }, { 0, -M_PI, 0 }}, + { &thumbs_up, 0.25, 1, { -0.1, 0, 0.50 }, { 0, -M_PI, 0 }}, + { 0, }}; + +/**************************************************************************/ + +static const hand_anim outtahere_anim[] = { + { &hand_pointing, NNN, 1, { 0, 0, 0 }, { M_PI, 0, 0 }}, + { &thumbs_up, 0.1, 0, { 0, -0.2, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 0, { 0, 0, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 0, { 0, -0.2, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 0, { 0, 0, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 0, { 0, -0.2, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 0, { 0, 0, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 1, { 0, -0.2, 0 }, { M_PI, 0, -M_PI/2 }}, + { 0, }}; + +static const hand_anim stahhhp_anim[] = { + { &hand_pointing, NNN, 1, { 0, 0, 0 }, { M_PI, 0, 0 }}, + { &open_palm, 0.2, 0.5, { -0.1, -0.2, 0 }, { 0, 0, 0 }}, + { &open_palm, 0.2, 0, { -0.1, -0.2, 0 }, { 0, -0.2, 0 }}, + { &open_palm, 0.2, 0, { -0.1, -0.2, 0 }, { 0, 0.2, 0 }}, + { &open_palm, 0.2, 0, { -0.1, -0.2, 0 }, { 0, -0.2, 0 }}, + { &open_palm, 0.2, 0, { -0.1, -0.2, 0 }, { 0, 0.2, 0 }}, + { &open_palm, 0.2, 0, { -0.1, -0.2, 0 }, { 0, -0.2, 0 }}, + { &open_palm, 0.2, 1, { -0.1, -0.2, 0 }, { 0, 0.2, 0 }}, + { &open_palm, 0.2, 0, { -0.1, -0.6, 0 }, { 0.2, 0.2, 0 }}, + { &open_palm, 0.2, 0, { -0.1, -0.2, 0 }, { 0.2, 0.2, 0 }}, + { &open_palm, 0.2, 0, { -0.1, -0.6, 0 }, { 0.2, 0.2, 0 }}, + { &open_palm, 0.2, 0, { -0.1, -0.2, 0 }, { 0.2, 0.2, 0 }}, + { &open_palm, 0.2, 0, { -0.1, -0.6, 0 }, { 0.2, 0.2, 0 }}, + { &open_palm, 0.2, 1, { -0.1, -0.2, 0 }, { 0.2, 0.2, 0 }}, + { 0, }}; + +static const hand_anim thisguy_anim[] = { + { &thumbs_up, NNN, 0.3, { 0, -0.2, 0 }, { M_PI, 0, 0 }}, + { &thumbs_up, 0.5, 0, { 0, 0, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 0, { 0, -0.2, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 0, { 0, 0, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 0, { 0, -0.2, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 0, { 0, 0, 0 }, { M_PI, 0, -M_PI/2 }}, + { &thumbs_up, 0.1, 1, { 0, -0.2, 0 }, { M_PI, 0, -M_PI/2 }}, + { 0, }}; + + +/**************************************************************************/ + +static const hand gun1 = { + {{ 0.00, 0.00, 0.00, 0.00 }, + { 0.00, 0.00, 0.00, 0.00 }, + { 0.80, 1.60, 1.60, 0.00 }, + { 0.80, 1.60, 1.60, 0.00 }, + { 0.80, 1.60, 1.60, 0.00 }}, + { 0.00, 0.00, 0.00, 0.00, 0.00 }, + { 1.50, 1.58, 0.00 }, + { 0.00, 0.00, 0.00 }, + True +}; + +static const hand gun2 = { + {{ 0.00, 0.84, 0.84, 0.00 }, + { 0.00, 0.00, 0.00, 0.00 }, + { 0.80, 1.60, 1.60, 0.00 }, + { 0.80, 1.60, 1.60, 0.00 }, + { 0.80, 1.60, 1.60, 0.00 }}, + { 0.00, 0.00, 0.00, 0.00, 0.00 }, + { 1.50, 1.58, 0.00 }, + { 0.00, 0.00, 0.00 }, + True +}; + +static const hand_anim gun_anim[] = { + { &gun1, NNN, 1, { 0, 0, 0 }, { 0, 0, 0 }}, + { &gun2, 0.1, 0, { 0, 0, 0 }, { 0, 0, -M_PI/5 }}, + { &gun1, 0.3, 0, { 0, 0, 0 }, { 0, 0, 0 }}, + { &gun2, 0.1, 0, { 0, 0, 0 }, { 0, 0, -M_PI/5 }}, + { &gun1, 0.3, 0, { 0, 0, 0 }, { 0, 0, 0 }}, + { &gun2, 0.1, 0, { 0, 0, 0 }, { 0, 0, -M_PI/5 }}, + { &gun1, 0.3, 1, { 0, 0, 0 }, { 0, 0, 0 }}, + { 0, }}; + + +/**************************************************************************/ + +#define RPS_SHAKE \ + { &closed_hand, 0.2, 0, { -0.4, 0.3, 0.3 }, { 0, 0, -M_PI/2 }}, \ + { &closed_hand, 0.2, 0, { -0.4, 0, 0 }, { M_PI, 0, -M_PI/2 }}, \ + { &closed_hand, 0.2, 0, { -0.4, 0.3, 0.3 }, { 0, 0, -M_PI/2 }}, \ + { &closed_hand, 0.2, 0, { -0.4, 0, 0 }, { M_PI, 0, -M_PI/2 }}, \ + { &closed_hand, 0.2, 0, { -0.4, 0.3, 0.3 }, { 0, 0, -M_PI/2 }}, \ + { &closed_hand, 0.2, 0, { -0.4, 0, 0 }, { M_PI, 0, -M_PI/2 }} +#define RPS_0 \ + { &open_palm, 0.2, 1, { -0.4, 0, 0 }, { 0, 0, 0 }} +#define RPS_R RPS_SHAKE, \ + { &closed_hand, 0.2, 1, { -0.4, 0, 0 }, { M_PI, 0, -M_PI/2 }} +#define RPS_P RPS_SHAKE, \ + { &open_palm, 0.2, 1, { -0.4, 0, 0 }, { M_PI/2, 0, -M_PI/2 }} +#define RPS_S RPS_SHAKE, \ + { &hand_v, 0.2, 1, { -0.4, 0, 0 }, { 0, -M_PI/2, 0 }} + +static const hand_anim rps1_anim[] = { + { &closed_hand, NNN, 1, { -0.4, 0, 0 }, { M_PI, 0, -M_PI/2 }}, + RPS_S, RPS_P, RPS_R, RPS_0, + RPS_S, RPS_P, RPS_R, RPS_0, + RPS_P, RPS_R, RPS_S, RPS_0, + RPS_R, RPS_S, RPS_P, RPS_0, + { 0, }}; + +static const hand_anim rps2_anim[] = { + { &closed_hand, NNN, 1, { -0.4, 0, 0 }, { M_PI, 0, -M_PI/2 }}, + RPS_R, RPS_P, RPS_P, RPS_0, + RPS_P, RPS_R, RPS_R, RPS_0, + RPS_S, RPS_P, RPS_R, RPS_0, + RPS_S, RPS_P, RPS_S, RPS_0, + { 0, }}; + + +/**************************************************************************/ + +static const hand walk1 = { + {{ 0.00, 0.00, 0.00, 0.00 }, + { -0.20, -0.20, -0.20, 0.00 }, + { 0.30, 0.24, 0.24, 0.00 }, + { 0.00, 1.60, 1.60, 0.00 }, + { 0.00, 1.50, 1.50, 0.00 }}, + { -1.16, -0.12, 0.10, 0.00, 0.00 }, + { 0.00, -0.04, 0.02 }, + { 0.00, 0.00, 0.60 }, + True +}; + +static const hand walk2 = { + {{ 0.00, 0.00, 0.00, 0.00 }, + { 0.30, 0.24, 0.24, 0.00 }, + { -0.20, -0.20, -0.20, 0.00 }, + { 0.00, 1.60, 1.60, 0.00 }, + { 0.00, 1.50, 1.50, 0.00 }}, + { -1.16, -0.12, 0.10, 0.00, 0.00 }, + { 0.00, 0.00, 0.00 }, + { 0.00, 0.00, 0.60 }, + True +}; + +static const hand_anim walk_anim[] = { + { &walk1, NNN, 0, { 0, 0.0, -0.03 }, { 0, M_PI, M_PI }}, + { &walk2, 0.3, 0, { 0, -0.1, -0.03 }, { 0, M_PI, M_PI }}, + { &walk1, 0.3, 0, { 0, -0.2, -0.03 }, { 0, M_PI, M_PI }}, + { &walk2, 0.3, 0, { 0, -0.3, -0.03 }, { 0, M_PI, M_PI }}, + { &walk1, 0.3, 0, { 0, -0.4, -0.03 }, { 0, M_PI, M_PI }}, + { &walk2, 0.3, 0, { 0, -0.5, -0.03 }, { 0, M_PI, M_PI }}, + { &walk1, 0.3, 0, { 0, -0.6, -0.03 }, { 0, M_PI, M_PI }}, + { &walk2, 0.3, 0, { 0, -0.7, -0.03 }, { 0, M_PI, M_PI }}, + { &walk1, 0.3, 0, { 0, -0.8, -0.03 }, { 0, M_PI, M_PI }}, + { &walk2, 0.3, 0, { 0, -0.9, -0.03 }, { 0, M_PI, M_PI }}, + { &walk1, 0.3, 0, { 0, -1.0, -0.03 }, { 0, M_PI, M_PI }}, + { &walk2, 0.3, 0, { 0, -1.1, -0.03 }, { 0, M_PI, M_PI }}, + { &walk1, 0.3, 0, { 0, -1.2, -0.03 }, { 0, M_PI, M_PI }}, + { &walk2, 0.3, 0, { 0, -1.3, -0.03 }, { 0, M_PI, M_PI }}, + { &walk1, 0.3, 0, { 0, -1.4, -0.03 }, { 0, M_PI, M_PI }}, + { &walk2, 0.3, 0, { 0, -1.5, -0.03 }, { 0, M_PI, M_PI }}, + { &walk1, 0.3, 0, { 0, -1.6, -0.03 }, { 0, M_PI, M_PI }}, + { &walk2, 0.3, 0, { 0, -1.7, -0.03 }, { 0, M_PI, M_PI }}, + { &walk1, 0.3, 0, { 0, -1.8, -0.03 }, { 0, M_PI, M_PI }}, + { &walk2, 0.3, 0, { 0, -1.9, -0.03 }, { 0, M_PI, M_PI }}, + { &walk1, 0.3, 0, { 0, -2.0, -0.03 }, { 0, M_PI, M_PI }}, + { 0, }}; + +/**************************************************************************/ + +static const hand_anim goatse_anim[] = { + { &open_palm, NNN, 1, { 0.31, 2, 0.5 }, { M_PI/2, -M_PI/2, 0 }}, + { &open_palm, 2, 0, { 0.31, 0, 0.5 }, { M_PI/2, -M_PI/2, 0 }}, + { &thumbs_up, 2, 1, { 0.31, 0, 0.5 }, { 0, -M_PI, 0 }}, + { &thumbs_up, 2, 1, { -0.4, 0, 0.5 }, { 0, -M_PI, 0 }}, + { &open_palm, 2, 1, { -0.4, 0.3, 0.5 }, { M_PI/2, -M_PI/2, 0 }}, + { 0, }}; + + +/**************************************************************************/ + +static const hand_anim_pair all_hand_anims[] = { + {{ middle_anim, middle_anim }, 0.2 }, + {{ tap_anim, tap_anim }, 0.7 }, + {{ tap_anim, tap_anim }, 0.7 }, + {{ tap_anim, tap_anim }, 0.7 }, + {{ spock_anim, hidden_anim}, 0 }, + {{ spock_anim, hidden_anim}, 0 }, + {{ horns_anim, horns_anim}, 0 }, + {{ horns_anim, horns_anim}, 0 }, + {{ bs1_anim, bs2_anim }, 0 }, + {{ upyours_anim, hidden_anim }, 0 }, + {{ peace_anim, hidden_anim }, 0 }, + {{ scissor1_anim, scissor2_anim }, 0 }, + {{ wave_anim, hidden_anim }, 0 }, + {{ wave2_anim, hidden_anim }, 0 }, + {{ jazzhands_anim, jazzhands_anim }, 0 }, + {{ ok_anim, ok_anim }, 0 }, + {{ inout1_anim, inout2_anim }, 0 }, + {{ clap_anim, clap_anim }, 0 }, + {{ slow_clap_anim, slow_clap_anim }, 0 }, + {{ pray_anim, pray_anim }, 0 }, + {{ eyeonu_anim, hidden_anim }, 0 }, + {{ trick1_anim, trick2_anim }, 0 }, + {{ thumbsup_anim, thumbsup_anim }, 0 }, + {{ thumbsdn_anim, thumbsdn_anim }, 0 }, + {{ thisguy_anim, thisguy_anim }, 0 }, + {{ outtahere_anim, hidden_anim }, 0 }, + {{ stahhhp_anim, stahhhp_anim }, 0 }, + {{ gun_anim, gun_anim }, 0.25 }, + {{ walk_anim, walk_anim }, 0.3 }, + {{ goatse_anim, goatse_anim }, 0 }, + {{ 0, }}}; + +#endif /* __HANDSY_ANIM__ */ diff --git a/hacks/glx/handsy_model.c b/hacks/glx/handsy_model.c new file mode 100644 index 0000000..e413ceb --- /dev/null +++ b/hacks/glx/handsy_model.c @@ -0,0 +1,6684 @@ +/* Generated from "handsy.dxf" on 25-Oct-2018. + Smoothed vertex normals at 28°. + Components: finger_distal, finger_intermediate, finger_metacarpal, + finger_proximal, palm, thumb_distal, thumb_metacarpal, thumb_proximal. + */ + +#include "gllist.h" + +static const float handsy_model_finger_distal_data[] = { + -0.707107,0.707107,0,0.095086,0.180273,1.001864, + -0.707107,0.707107,0,0.099318,0.184504,1.131929, + -0.707107,0.707107,0,0.099318,0.184504,1.001864, + -0.707107,0.707107,0,0.099318,0.184504,1.131929, + -0.707107,0.707107,0,0.095086,0.180273,1.001864, + -0.707107,0.707107,0,0.090393,0.175579,1.058824, + -0.707107,0.707107,0,0.099318,0.184504,1.131929, + -0.707107,0.707107,0,0.090393,0.175579,1.058824, + -0.707107,0.707107,0,0.084928,0.170115,1.079901, + -0.707107,0.707107,0,0.099318,0.184504,1.131929, + -0.707107,0.707107,0,0.084928,0.170115,1.079901, + -0.707107,0.707107,0,0.084928,0.170115,1.091226, + -0.707107,0.707107,0,0.099318,0.184504,1.131929, + -0.707107,0.707107,0,0.084928,0.170115,1.091226, + -0.707107,0.707107,0,0.084928,0.170115,1.135994, + -0.707107,0.707107,0,0.099318,0.184504,1.131929, + -0.707107,0.707107,0,0.084928,0.170115,1.135994, + -0.707107,0.707107,0,0.090962,0.176148,1.142819, + -0.707107,0.707107,0,0.090962,0.176148,1.142819, + -0.707107,0.707107,0,0.084928,0.170115,1.135994, + -0.707107,0.707107,0,0.084928,0.170115,1.147449, + 0.908054,0.402355,0.116396,0.183968,0.115606,0.730756, + 0.808758,0.575,0.123638,0.140043,0.160058,0.848974, + 0.91898,0.370926,0.13375,0.175201,0.114294,0.794628, + 0.808758,0.575,0.123638,0.140043,0.160058,0.848974, + 0.908054,0.402355,0.116396,0.183968,0.115606,0.730756, + 0.786413,0.608998,0.103325,0.155675,0.163491,0.730756, + 0.630687,0.768681,0.106602,0.095242,0.193568,0.918226, + 0.786413,0.608998,0.103325,0.155675,0.163491,0.730756, + 0.595396,0.798295,0.090708,0.118803,0.200235,0.730756, + 0.786413,0.608998,0.103325,0.155675,0.163491,0.730756, + 0.630687,0.768681,0.106602,0.095242,0.193568,0.918226, + 0.808758,0.575,0.123638,0.140043,0.160058,0.848974, + 0.973303,0.191501,0.126525,0.201753,0.059842,0.730756, + 0.91898,0.370926,0.13375,0.175201,0.114294,0.794628, + 0.969671,0.201527,0.138296,0.197659,0.059532,0.759913, + 0.91898,0.370926,0.13375,0.175201,0.114294,0.794628, + 0.973303,0.191501,0.126525,0.201753,0.059842,0.730756, + 0.908054,0.402355,0.116396,0.183968,0.115606,0.730756, + -0.842251,0.536837,0.049197,-0.253462,0.146336,0.308415, + -0.707095,0.707095,-0.005782,-0.206534,0.206534,0.206534, + -0.887099,0.461543,-0.005776,-0.253185,0.146177,0.253185, + -0.707095,0.707095,-0.005782,-0.206534,0.206534,0.206534, + -0.842251,0.536837,0.049197,-0.253462,0.146336,0.308415, + -0.706249,0.706249,0.049244,-0.206951,0.206951,0.308415, + 0.973303,0.191501,0.126525,0.201753,0.059842,0.730756, + 0.935393,0.051194,0.349884,0.205383,0,0.747973, + 0.987543,0.10011,0.121395,0.20782,0,0.730756, + 0.935393,0.051194,0.349884,0.205383,0,0.747973, + 0.973303,0.191501,0.126525,0.201753,0.059842,0.730756, + 0.9306,0.103399,0.35113,0.197659,0.059532,0.759913, + -0.461543,0.887099,-0.005776,-0.145866,0.252648,0.145866, + -0.300554,0.952495,0.049197,-0.075749,0.2827,0.308415, + -0.216218,0.976328,-0.005776,-0.0754,0.281398,0.0754, + -0.300554,0.952495,0.049197,-0.075749,0.2827,0.308415, + -0.461543,0.887099,-0.005776,-0.145866,0.252648,0.145866, + -0.547548,0.835754,0.041316,-0.146336,0.253462,0.308415, + 0.324287,0.942926,0.075685,0.044468,0.212784,0.996711, + 0.595396,0.798295,0.090708,0.118803,0.200235,0.730756, + 0.389382,0.917677,0.079062,0.075865,0.223333,0.730756, + 0.595396,0.798295,0.090708,0.118803,0.200235,0.730756, + 0.324287,0.942926,0.075685,0.044468,0.212784,0.996711, + 0.630687,0.768681,0.106602,0.095242,0.193568,0.918226, + -0.952495,0.300554,0.049197,-0.2827,0.075749,0.308415, + -0.887099,0.461543,-0.005776,-0.253185,0.146177,0.253185, + -0.976328,0.216218,-0.005776,-0.282555,0.07571,0.282555, + -0.887099,0.461543,-0.005776,-0.253185,0.146177,0.253185, + -0.952495,0.300554,0.049197,-0.2827,0.075749,0.308415, + -0.842251,0.536837,0.049197,-0.253462,0.146336,0.308415, + -0.990262,0.130371,0.048824,-0.292672,0,0.308415, + -0.976328,0.216218,-0.005776,-0.282555,0.07571,0.282555, + -0.991429,0.130524,-0.005732,-0.292581,0,0.292581, + -0.976328,0.216218,-0.005776,-0.282555,0.07571,0.282555, + -0.990262,0.130371,0.048824,-0.292672,0,0.308415, + -0.952495,0.300554,0.049197,-0.2827,0.075749,0.308415, + 0.020045,0.337373,0.941158,0.166851,0.067533,1.206027, + 0.019327,0.266418,0.963664,0.145844,0.064475,1.207294, + 0.003099,0.22022,0.975445,0.146803,0.062161,1.207598, + 0.035916,0.522579,0.851834,0.140784,0.130464,1.177874, + 0.036445,0.521909,0.852222,0.11938,0.124556,1.182407, + 0.04764,0.414629,0.908743,0.122809,0.120086,1.184259, + 0.866025,0.5,0,0.140784,0.130464,0.847828, + 0.95365,0.300918,0,0.166851,0.067533,1.206027, + 0.98084,0.194814,0,0.166851,0.067533,0.807535, + 0.95365,0.300918,0,0.166851,0.067533,1.206027, + 0.866025,0.5,0,0.140784,0.130464,0.847828, + 0.866025,0.5,0,0.140784,0.130464,1.177874, + 0.020045,0.337373,0.941158,0.166851,0.067533,1.206027, + 0.04764,0.414629,0.908743,0.122809,0.120086,1.184259, + 0.019327,0.266418,0.963664,0.145844,0.064475,1.207294, + -0.991445,-0.130526,0,0.154986,0,1.215782, + -0.970622,-0.24061,0,0.146803,0.062161,1.091226, + -0.991445,-0.130526,0,0.154986,0,1.091226, + -0.970622,-0.24061,0,0.146803,0.062161,1.091226, + -0.991445,-0.130526,0,0.154986,0,1.215782, + -0.965926,-0.258819,0,0.146803,0.062161,1.207598, + 0.035916,0.522579,0.851834,0.140784,0.130464,1.177874, + 0,0.608761,0.793353,0.084928,0.169454,1.147956, + 0.036445,0.521909,0.852222,0.11938,0.124556,1.182407, + 0,0.659134,0.752025,0.10573,0.176148,1.142819, + 0,0.608761,0.793353,0.084928,0.170115,1.147449, + 0,0.608761,0.793353,0.084928,0.169454,1.147956, + -1,0,0,0.084928,0.170115,1.147449, + -0.998017,0.062939,0,0.084928,0.169454,1.136304, + -0.992013,0.126132,0,0.084928,0.169454,1.147956, + -0.998017,0.062939,0,0.084928,0.169454,1.136304, + -1,0,0,0.084928,0.170115,1.147449, + -1,0,0,0.084928,0.170115,1.135994, + 0,0.130526,0.991445,0.154986,0,1.215782, + -0.009782,0.215043,0.976556,0.167254,0.064475,1.207294, + 0.003099,0.22022,0.975445,0.146803,0.062161,1.207598, + -0.009782,0.215043,0.976556,0.167254,0.064475,1.207294, + 0,0.130526,0.991445,0.154986,0,1.215782, + 0,0.130526,0.991445,0.175742,0,1.215782, + -1,0,0,0.084928,0.170115,1.135994, + -0.998734,0.050307,0,0.084928,0.169454,1.091226, + -0.998017,0.062939,0,0.084928,0.169454,1.136304, + -0.998734,0.050307,0,0.084928,0.169454,1.091226, + -1,0,0,0.084928,0.170115,1.135994, + -1,0,0,0.084928,0.170115,1.091226, + 0.020045,0.337373,0.941158,0.166851,0.067533,1.206027, + 0.035916,0.522579,0.851834,0.140784,0.130464,1.177874, + 0.04764,0.414629,0.908743,0.122809,0.120086,1.184259, + 0,0.659134,0.752025,0.10573,0.176148,1.142819, + 0,0.793353,0.608761,0.099318,0.184504,1.131929, + 0,0.707107,0.707107,0.090962,0.176148,1.142819, + 0.866025,0.5,0,0.140784,0.130464,0.847828, + 0.793353,0.608761,0,0.10573,0.176148,1.142819, + 0.866025,0.5,0,0.140784,0.130464,1.177874, + 0.793353,0.608761,0,0.10573,0.176148,1.142819, + 0.866025,0.5,0,0.140784,0.130464,0.847828, + 0.793353,0.608761,0,0.099318,0.184504,0.911925, + 0.793353,0.608761,0,0.10573,0.176148,1.142819, + 0.793353,0.608761,0,0.099318,0.184504,0.911925, + 0.793353,0.608761,0,0.099318,0.184504,1.001864, + 0.793353,0.608761,0,0.10573,0.176148,1.142819, + 0.793353,0.608761,0,0.099318,0.184504,1.001864, + 0.793353,0.608761,0,0.099318,0.184504,1.131929, + -0.92388,-0.382683,0,0.137837,0.083806,1.091226, + -0.965926,-0.258819,0,0.146803,0.062161,1.085202, + -0.970622,-0.24061,0,0.146803,0.062161,1.091226, + -0.009782,0.215043,0.976556,0.167254,0.064475,1.207294, + 0.020045,0.337373,0.941158,0.166851,0.067533,1.206027, + 0.003099,0.22022,0.975445,0.146803,0.062161,1.207598, + -0.998734,0.050307,0,0.084928,0.169454,1.091226, + -1,0,0,0.084928,0.170115,1.079901, + -1,0,0,0.084928,0.169454,1.081177, + -1,0,0,0.084928,0.170115,1.079901, + -0.998734,0.050307,0,0.084928,0.169454,1.091226, + -1,0,0,0.084928,0.170115,1.091226, + 0.035916,0.522579,0.851834,0.140784,0.130464,1.177874, + 0,0.659134,0.752025,0.10573,0.176148,1.142819, + 0,0.608761,0.793353,0.084928,0.169454,1.147956, + -0.92388,-0.382683,0,0.12778,0.108086,1.091226, + -0.92388,-0.382683,0,0.137837,0.083806,1.091226, + -0.92388,-0.382683,0,0.13166,0.098719,1.095377, + 0,0.659134,0.752025,0.10573,0.176148,1.142819, + 0,0.707107,0.707107,0.090962,0.176148,1.142819, + 0,0.608761,0.793353,0.084928,0.170115,1.147449, + -0.887114,-0.461551,0,0.122809,0.120086,1.184259, + -0.793353,-0.608761,0,0.113594,0.132096,1.091226, + -0.866025,-0.5,0,0.122809,0.120086,1.091226, + -0.793353,-0.608761,0,0.113594,0.132096,1.091226, + -0.887114,-0.461551,0,0.122809,0.120086,1.184259, + -0.793353,-0.608761,0,0.11938,0.124556,1.182407, + -0.793353,-0.608761,0,0.113594,0.132096,1.091226, + -0.793353,-0.608761,0,0.11938,0.124556,1.182407, + -0.793353,-0.608761,0,0.084928,0.169454,1.147956, + -0.793353,-0.608761,0,0.113594,0.132096,1.091226, + -0.793353,-0.608761,0,0.084928,0.169454,1.147956, + -0.793353,-0.608761,0,0.107664,0.139824,1.094648, + -0.793353,-0.608761,0,0.107664,0.139824,1.094648, + -0.793353,-0.608761,0,0.084928,0.169454,1.147956, + -0.793353,-0.608761,0,0.101889,0.14735,1.091226, + -0.793353,-0.608761,0,0.101889,0.14735,1.091226, + -0.793353,-0.608761,0,0.084928,0.169454,1.147956, + -0.793353,-0.608761,0,0.084928,0.169454,1.091226, + -0.998734,0.050307,0,0.084928,0.169454,1.091226, + -0.992013,0.126132,0,0.084928,0.169454,1.147956, + -0.998017,0.062939,0,0.084928,0.169454,1.136304, + 0.98084,0.194814,0,0.166851,0.067533,0.807535, + 0.991445,0.130526,0,0.175742,0,1.215782, + 0.991445,0.130526,0,0.175742,0,0.793792, + 0.991445,0.130526,0,0.175742,0,1.215782, + 0.98084,0.194814,0,0.166851,0.067533,0.807535, + 0.991445,0.130526,0,0.167254,0.064475,1.207294, + 0.991445,0.130526,0,0.167254,0.064475,1.207294, + 0.98084,0.194814,0,0.166851,0.067533,0.807535, + 0.95365,0.300918,0,0.166851,0.067533,1.206027, + 0.931595,0.193458,0.307742,0.148197,0.05157,1.090997, + 0.848153,0.348489,0.398988,0.127095,0.095297,1.111903, + 0.875474,0.181663,0.447821,0.141756,0.049329,1.111903, + 0.848153,0.348489,0.398988,0.127095,0.095297,1.111903, + 0.931595,0.193458,0.307742,0.148197,0.05157,1.090997, + 0.905776,0.288892,0.310019,0.146803,0.062161,1.085202, + 0.848153,0.348489,0.398988,0.127095,0.095297,1.111903, + 0.905776,0.288892,0.310019,0.146803,0.062161,1.085202, + 0.905776,0.288892,0.310019,0.137837,0.083806,1.091226, + 0.848153,0.348489,0.398988,0.127095,0.095297,1.111903, + 0.905776,0.288892,0.310019,0.137837,0.083806,1.091226, + 0.849124,0.419187,0.321357,0.13166,0.098719,1.095377, + 0.415157,0.90975,0,0.08473,0.190593,0.934475, + 0.385197,0.922834,0,0.099318,0.184504,1.001864, + 0.385197,0.922834,0,0.099318,0.184504,0.911925, + 0.385197,0.922834,0,0.099318,0.184504,1.001864, + 0.415157,0.90975,0,0.08473,0.190593,0.934475, + 0.500207,0.863755,0.061001,0.08473,0.190593,1.001864, + 0,0,1,0.099318,0.184504,1.001864, + 0,0,1,0.08473,0.190593,1.001864, + 0,0,1,0.095086,0.180273,1.001864, + -0.793353,-0.608761,0,0.084928,0.169454,1.091226, + -0.793353,-0.608761,0,0.084928,0.169454,1.081177, + -0.793353,-0.608761,0,0.101889,0.14735,1.091226, + -0.92388,-0.382683,0,0.145844,0.064475,1.207294, + -0.970622,-0.24061,0,0.146803,0.062161,1.091226, + -0.965926,-0.258819,0,0.146803,0.062161,1.207598, + -0.970622,-0.24061,0,0.146803,0.062161,1.091226, + -0.92388,-0.382683,0,0.145844,0.064475,1.207294, + -0.92388,-0.382683,0,0.137837,0.083806,1.091226, + -0.92388,-0.382683,0,0.137837,0.083806,1.091226, + -0.92388,-0.382683,0,0.145844,0.064475,1.207294, + -0.887114,-0.461551,0,0.122809,0.120086,1.184259, + -0.92388,-0.382683,0,0.137837,0.083806,1.091226, + -0.887114,-0.461551,0,0.122809,0.120086,1.184259, + -0.92388,-0.382683,0,0.13166,0.098719,1.095377, + -0.92388,-0.382683,0,0.13166,0.098719,1.095377, + -0.887114,-0.461551,0,0.122809,0.120086,1.184259, + -0.92388,-0.382683,0,0.12778,0.108086,1.091226, + -0.92388,-0.382683,0,0.12778,0.108086,1.091226, + -0.887114,-0.461551,0,0.122809,0.120086,1.184259, + -0.866025,-0.5,0,0.122809,0.120086,1.091226, + -0.793353,-0.608761,0,0.113594,0.132096,1.091226, + -0.866025,-0.5,0,0.122809,0.120086,1.085909, + -0.866025,-0.5,0,0.122809,0.120086,1.091226, + 0.579702,0.777975,0.242282,0.081843,0.184099,1.058824, + 0.701131,0.703574,0.115755,0.095086,0.180273,1.001864, + 0.500207,0.863755,0.061001,0.08473,0.190593,1.001864, + 0.701131,0.703574,0.115755,0.095086,0.180273,1.001864, + 0.579702,0.777975,0.242282,0.081843,0.184099,1.058824, + 0.679711,0.682079,0.269744,0.090393,0.175579,1.058824, + -0.793353,-0.608761,0,0.101889,0.14735,1.091226, + -0.793353,-0.608761,0,0.113594,0.132096,1.091226, + -0.793353,-0.608761,0,0.107664,0.139824,1.094648, + -0.991445,-0.130526,0,0.154986,0,1.091226, + -0.991445,-0.130526,0,0.148197,0.05157,1.090997, + -0.991445,-0.130526,0,0.154986,0,1.086101, + -0.991445,-0.130526,0,0.148197,0.05157,1.090997, + -0.991445,-0.130526,0,0.154986,0,1.091226, + -0.970622,-0.24061,0,0.146803,0.062161,1.091226, + -0.991445,-0.130526,0,0.148197,0.05157,1.090997, + -0.970622,-0.24061,0,0.146803,0.062161,1.091226, + -0.965926,-0.258819,0,0.146803,0.062161,1.085202, + -0.866025,-0.5,0,0.122809,0.120086,1.085909, + -0.92388,-0.382683,0,0.12778,0.108086,1.091226, + -0.866025,-0.5,0,0.122809,0.120086,1.091226, + 0.247221,0.204672,0.947096,0.031013,0.040277,1.214443, + 0.171497,0.24914,0.953162,0.02193,0.049329,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + 0.304882,0.147067,0.940967,0.037983,0.02848,1.214443, + 0.247221,0.204672,0.947096,0.031013,0.040277,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + 0.247221,0.204672,0.947096,0.031013,0.040277,1.214443, + 0.311652,0.426328,0.849187,0.042365,0.095297,1.192457, + 0.171497,0.24914,0.953162,0.02193,0.049329,1.214443, + 0.311652,0.426328,0.849187,0.042365,0.095297,1.192457, + 0.247221,0.204672,0.947096,0.031013,0.040277,1.214443, + 0.434893,0.342116,0.832961,0.059913,0.077809,1.192457, + 0.457499,0.59115,0.664256,0.059913,0.13477,1.157482, + 0.746149,0.525881,0.408303,0.103773,0.13477,1.111903, + 0.605362,0.686777,0.402336,0.073378,0.165059,1.111903, + 0.746149,0.525881,0.408303,0.103773,0.13477,1.111903, + 0.457499,0.59115,0.664256,0.059913,0.13477,1.157482, + 0.619313,0.438782,0.651092,0.08473,0.110039,1.157482, + 0.605362,0.686777,0.402336,0.073378,0.165059,1.111903, + 0.679711,0.682079,0.269744,0.090393,0.175579,1.058824, + 0.579702,0.777975,0.242282,0.081843,0.184099,1.058824, + 0.679711,0.682079,0.269744,0.090393,0.175579,1.058824, + 0.605362,0.686777,0.402336,0.073378,0.165059,1.111903, + 0.662732,0.66504,0.34425,0.084928,0.170115,1.079901, + 0.662732,0.66504,0.34425,0.084928,0.170115,1.079901, + 0.605362,0.686777,0.402336,0.073378,0.165059,1.111903, + 0.662732,0.66504,0.34425,0.084928,0.169454,1.081177, + 0.662732,0.66504,0.34425,0.084928,0.169454,1.081177, + 0.605362,0.686777,0.402336,0.073378,0.165059,1.111903, + 0.662732,0.66504,0.34425,0.101889,0.14735,1.091226, + 0.662732,0.66504,0.34425,0.101889,0.14735,1.091226, + 0.605362,0.686777,0.402336,0.073378,0.165059,1.111903, + 0.717843,0.607615,0.33986,0.107664,0.139824,1.094648, + 0.717843,0.607615,0.33986,0.107664,0.139824,1.094648, + 0.605362,0.686777,0.402336,0.073378,0.165059,1.111903, + 0.746149,0.525881,0.408303,0.103773,0.13477,1.111903, + 0.849124,0.419187,0.321357,0.13166,0.098719,1.095377, + 0.746149,0.525881,0.408303,0.103773,0.13477,1.111903, + 0.848153,0.348489,0.398988,0.127095,0.095297,1.111903, + 0.746149,0.525881,0.408303,0.103773,0.13477,1.111903, + 0.849124,0.419187,0.321357,0.13166,0.098719,1.095377, + 0.814338,0.481145,0.32458,0.12778,0.108086,1.091226, + 0.746149,0.525881,0.408303,0.103773,0.13477,1.111903, + 0.814338,0.481145,0.32458,0.12778,0.108086,1.091226, + 0.814338,0.481145,0.32458,0.122809,0.120086,1.085909, + 0.746149,0.525881,0.408303,0.103773,0.13477,1.111903, + 0.814338,0.481145,0.32458,0.122809,0.120086,1.085909, + 0.814338,0.481145,0.32458,0.113594,0.132096,1.091226, + 0.746149,0.525881,0.408303,0.103773,0.13477,1.111903, + 0.814338,0.481145,0.32458,0.113594,0.132096,1.091226, + 0.717843,0.607615,0.33986,0.107664,0.139824,1.094648, + 0.100924,0.993347,0.05547,0,0.292672,0.308415, + 0.283658,0.958361,0.032903,0.07279,0.281365,0.01023, + 0,0.999983,-0.005782,0,0.290889,0, + 0.434893,0.342116,0.832961,0.059913,0.077809,1.192457, + 0.457499,0.59115,0.664256,0.059913,0.13477,1.157482, + 0.311652,0.426328,0.849187,0.042365,0.095297,1.192457, + 0.457499,0.59115,0.664256,0.059913,0.13477,1.157482, + 0.434893,0.342116,0.832961,0.059913,0.077809,1.192457, + 0.619313,0.438782,0.651092,0.08473,0.110039,1.157482, + 0.524068,0.23846,0.817612,0.073378,0.05502,1.192457, + 0.619313,0.438782,0.651092,0.08473,0.110039,1.157482, + 0.434893,0.342116,0.832961,0.059913,0.077809,1.192457, + 0.619313,0.438782,0.651092,0.08473,0.110039,1.157482, + 0.524068,0.23846,0.817612,0.073378,0.05502,1.192457, + 0.720425,0.289908,0.630032,0.103773,0.077809,1.157482, + 0.848153,0.348489,0.398988,0.127095,0.095297,1.111903, + 0.619313,0.438782,0.651092,0.08473,0.110039,1.157482, + 0.720425,0.289908,0.630032,0.103773,0.077809,1.157482, + 0.619313,0.438782,0.651092,0.08473,0.110039,1.157482, + 0.848153,0.348489,0.398988,0.127095,0.095297,1.111903, + 0.746149,0.525881,0.408303,0.103773,0.13477,1.111903, + 0.304882,0.147067,0.940967,0.037983,0.02848,1.214443, + 0.434893,0.342116,0.832961,0.059913,0.077809,1.192457, + 0.247221,0.204672,0.947096,0.031013,0.040277,1.214443, + 0.434893,0.342116,0.832961,0.059913,0.077809,1.192457, + 0.304882,0.147067,0.940967,0.037983,0.02848,1.214443, + 0.524068,0.23846,0.817612,0.073378,0.05502,1.192457, + 0.341624,0.080671,0.936368,0.042365,0.014742,1.214443, + 0.304882,0.147067,0.940967,0.037983,0.02848,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + 0.341624,0.080671,0.936368,0.042365,0.014742,1.214443, + 0.524068,0.23846,0.817612,0.073378,0.05502,1.192457, + 0.304882,0.147067,0.940967,0.037983,0.02848,1.214443, + 0.524068,0.23846,0.817612,0.073378,0.05502,1.192457, + 0.341624,0.080671,0.936368,0.042365,0.014742,1.214443, + 0.577629,0.123653,0.806879,0.081843,0.02848,1.192457, + 0.577629,0.123653,0.806879,0.081843,0.02848,1.192457, + 0.720425,0.289908,0.630032,0.103773,0.077809,1.157482, + 0.524068,0.23846,0.817612,0.073378,0.05502,1.192457, + 0.720425,0.289908,0.630032,0.103773,0.077809,1.157482, + 0.577629,0.123653,0.806879,0.081843,0.02848,1.192457, + 0.757352,0.141892,0.637404,0.115744,0.040277,1.157482, + 0.875474,0.181663,0.447821,0.141756,0.049329,1.111903, + 0.720425,0.289908,0.630032,0.103773,0.077809,1.157482, + 0.757352,0.141892,0.637404,0.115744,0.040277,1.157482, + 0.720425,0.289908,0.630032,0.103773,0.077809,1.157482, + 0.875474,0.181663,0.447821,0.141756,0.049329,1.111903, + 0.848153,0.348489,0.398988,0.127095,0.095297,1.111903, + 0.376048,0.038121,0.925816,0.04386,0,1.214443, + 0.341624,0.080671,0.936368,0.042365,0.014742,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + 0.376048,0.038121,0.925816,0.04386,0,1.214443, + 0.577629,0.123653,0.806879,0.081843,0.02848,1.192457, + 0.341624,0.080671,0.936368,0.042365,0.014742,1.214443, + 0.577629,0.123653,0.806879,0.081843,0.02848,1.192457, + 0.376048,0.038121,0.925816,0.04386,0,1.214443, + 0.63304,0.064173,0.771454,0.08473,0,1.192457, + 0.63304,0.064173,0.771454,0.08473,0,1.192457, + 0.757352,0.141892,0.637404,0.115744,0.040277,1.157482, + 0.577629,0.123653,0.806879,0.081843,0.02848,1.192457, + 0.757352,0.141892,0.637404,0.115744,0.040277,1.157482, + 0.63304,0.064173,0.771454,0.08473,0,1.192457, + 0.81226,0.082341,0.577454,0.119827,0,1.157482, + 0.875474,0.181663,0.447821,0.141756,0.049329,1.111903, + 0.81226,0.082341,0.577454,0.119827,0,1.157482, + 0.923246,0.093592,0.372635,0.146757,0,1.111903, + 0.81226,0.082341,0.577454,0.119827,0,1.157482, + 0.875474,0.181663,0.447821,0.141756,0.049329,1.111903, + 0.757352,0.141892,0.637404,0.115744,0.040277,1.157482, + 0.931595,0.193458,0.307742,0.148197,0.05157,1.090997, + 0.923246,0.093592,0.372635,0.146757,0,1.111903, + 0.948303,0.096132,0.302456,0.154986,0,1.086101, + 0.923246,0.093592,0.372635,0.146757,0,1.111903, + 0.931595,0.193458,0.307742,0.148197,0.05157,1.090997, + 0.875474,0.181663,0.447821,0.141756,0.049329,1.111903, + 0.167861,0.981775,0.089114,0.041134,0.213045,1.001864, + 0.324762,0.943628,0.064002,0.04386,0.212579,1.001864, + 0.376389,0.926462,0,0.04386,0.212579,0.997651, + 0.295615,0.925472,0.236882,0.042365,0.205336,1.058824, + 0.500207,0.863755,0.061001,0.08473,0.190593,1.001864, + 0.324762,0.943628,0.064002,0.04386,0.212579,1.001864, + 0.500207,0.863755,0.061001,0.08473,0.190593,1.001864, + 0.295615,0.925472,0.236882,0.042365,0.205336,1.058824, + 0.579702,0.777975,0.242282,0.081843,0.184099,1.058824, + 0.301659,0.807294,0.507226,0.037983,0.184099,1.111903, + 0.579702,0.777975,0.242282,0.081843,0.184099,1.058824, + 0.295615,0.925472,0.236882,0.042365,0.205336,1.058824, + 0.579702,0.777975,0.242282,0.081843,0.184099,1.058824, + 0.301659,0.807294,0.507226,0.037983,0.184099,1.111903, + 0.605362,0.686777,0.402336,0.073378,0.165059,1.111903, + 0.301659,0.807294,0.507226,0.037983,0.184099,1.111903, + 0.457499,0.59115,0.664256,0.059913,0.13477,1.157482, + 0.605362,0.686777,0.402336,0.073378,0.165059,1.111903, + 0.457499,0.59115,0.664256,0.059913,0.13477,1.157482, + 0.301659,0.807294,0.507226,0.037983,0.184099,1.111903, + 0.223446,0.645606,0.73025,0.031013,0.150316,1.157482, + 0.311652,0.426328,0.849187,0.042365,0.095297,1.192457, + 0.223446,0.645606,0.73025,0.031013,0.150316,1.157482, + 0.171508,0.455084,0.873775,0.02193,0.10629,1.192457, + 0.223446,0.645606,0.73025,0.031013,0.150316,1.157482, + 0.311652,0.426328,0.849187,0.042365,0.095297,1.192457, + 0.457499,0.59115,0.664256,0.059913,0.13477,1.157482, + 0.171497,0.24914,0.953162,0.02193,0.049329,1.214443, + 0.171508,0.455084,0.873775,0.02193,0.10629,1.192457, + 0.082478,0.276507,0.957466,0.011352,0.05502,1.214443, + 0.171508,0.455084,0.873775,0.02193,0.10629,1.192457, + 0.171497,0.24914,0.953162,0.02193,0.049329,1.214443, + 0.311652,0.426328,0.849187,0.042365,0.095297,1.192457, + 0.171497,0.24914,0.953162,0.02193,0.049329,1.214443, + 0.082478,0.276507,0.957466,0.011352,0.05502,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + 0.048912,0.971204,0.233174,0,0.212579,1.058824, + 0.167861,0.981775,0.089114,0.041134,0.213045,1.001864, + 0.062068,0.99278,0.102645,0,0.220078,1.001864, + 0.167861,0.981775,0.089114,0.041134,0.213045,1.001864, + 0.295615,0.925472,0.236882,0.042365,0.205336,1.058824, + 0.324762,0.943628,0.064002,0.04386,0.212579,1.001864, + 0.295615,0.925472,0.236882,0.042365,0.205336,1.058824, + 0.167861,0.981775,0.089114,0.041134,0.213045,1.001864, + 0.048912,0.971204,0.233174,0,0.212579,1.058824, + -0.000403,0.875175,0.483806,0,0.190593,1.111903, + 0.295615,0.925472,0.236882,0.042365,0.205336,1.058824, + 0.048912,0.971204,0.233174,0,0.212579,1.058824, + 0.295615,0.925472,0.236882,0.042365,0.205336,1.058824, + -0.000403,0.875175,0.483806,0,0.190593,1.111903, + 0.301659,0.807294,0.507226,0.037983,0.184099,1.111903, + 0.018377,0.706803,0.707171,0,0.155619,1.157482, + 0.301659,0.807294,0.507226,0.037983,0.184099,1.111903, + -0.000403,0.875175,0.483806,0,0.190593,1.111903, + 0.301659,0.807294,0.507226,0.037983,0.184099,1.111903, + 0.018377,0.706803,0.707171,0,0.155619,1.157482, + 0.223446,0.645606,0.73025,0.031013,0.150316,1.157482, + 0.022695,0.483335,0.875141,0,0.110039,1.192457, + 0.223446,0.645606,0.73025,0.031013,0.150316,1.157482, + 0.018377,0.706803,0.707171,0,0.155619,1.157482, + 0.223446,0.645606,0.73025,0.031013,0.150316,1.157482, + 0.022695,0.483335,0.875141,0,0.110039,1.192457, + 0.171508,0.455084,0.873775,0.02193,0.10629,1.192457, + 0.082478,0.276507,0.957466,0.011352,0.05502,1.214443, + 0.022695,0.483335,0.875141,0,0.110039,1.192457, + 0.005074,0.25872,0.965939,0,0.05696,1.214443, + 0.022695,0.483335,0.875141,0,0.110039,1.192457, + 0.082478,0.276507,0.957466,0.011352,0.05502,1.214443, + 0.171508,0.455084,0.873775,0.02193,0.10629,1.192457, + 0.082478,0.276507,0.957466,0.011352,0.05502,1.214443, + 0.005074,0.25872,0.965939,0,0.05696,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + 0.012418,0.084509,0.996345,0,0,1.221942, + 0.005074,0.25872,0.965939,0,0.05696,1.214443, + -0.063714,0.27702,0.958749,-0.014742,0.05502,1.214443, + -0.48015,0.86905,0.119198,-0.110039,0.190593,1.001864, + -0.249995,0.932995,0.258889,-0.05502,0.205336,1.058824, + -0.231735,0.965999,0.114651,-0.05696,0.212579,1.001864, + -0.249995,0.932995,0.258889,-0.05502,0.205336,1.058824, + -0.48015,0.86905,0.119198,-0.110039,0.190593,1.001864, + -0.50048,0.817794,0.284135,-0.10629,0.184099,1.058824, + -0.430509,0.751368,0.500107,-0.095297,0.165059,1.111903, + -0.249995,0.932995,0.258889,-0.05502,0.205336,1.058824, + -0.50048,0.817794,0.284135,-0.10629,0.184099,1.058824, + -0.249995,0.932995,0.258889,-0.05502,0.205336,1.058824, + -0.430509,0.751368,0.500107,-0.095297,0.165059,1.111903, + -0.24095,0.817816,0.522609,-0.049329,0.184099,1.111903, + -0.349991,0.614303,0.707204,-0.077809,0.13477,1.157482, + -0.24095,0.817816,0.522609,-0.049329,0.184099,1.111903, + -0.430509,0.751368,0.500107,-0.095297,0.165059,1.111903, + -0.24095,0.817816,0.522609,-0.049329,0.184099,1.111903, + -0.349991,0.614303,0.707204,-0.077809,0.13477,1.157482, + -0.179072,0.683956,0.707204,-0.040277,0.150316,1.157482, + -0.245627,0.435403,0.866078,-0.05502,0.095297,1.192457, + -0.179072,0.683956,0.707204,-0.040277,0.150316,1.157482, + -0.349991,0.614303,0.707204,-0.077809,0.13477,1.157482, + -0.179072,0.683956,0.707204,-0.040277,0.150316,1.157482, + -0.245627,0.435403,0.866078,-0.05502,0.095297,1.192457, + -0.124567,0.48414,0.866078,-0.02848,0.10629,1.192457, + -0.133242,0.25109,0.958749,-0.02848,0.049329,1.214443, + -0.124567,0.48414,0.866078,-0.02848,0.10629,1.192457, + -0.245627,0.435403,0.866078,-0.05502,0.095297,1.192457, + -0.124567,0.48414,0.866078,-0.02848,0.10629,1.192457, + -0.133242,0.25109,0.958749,-0.02848,0.049329,1.214443, + -0.063714,0.27702,0.958749,-0.014742,0.05502,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + -0.063714,0.27702,0.958749,-0.014742,0.05502,1.214443, + -0.133242,0.25109,0.958749,-0.02848,0.049329,1.214443, + 0.935393,0.051194,0.349884,0.205383,0,0.747973, + 0.83962,0,0.543174,0.166851,0.067533,0.807535, + 0.83962,0,0.543174,0.175742,0,0.793792, + 0.83962,0,0.543174,0.166851,0.067533,0.807535, + 0.935393,0.051194,0.349884,0.205383,0,0.747973, + 0.90795,0.034033,0.417694,0.197659,0.059532,0.759913, + 0.83962,0,0.543174,0.166851,0.067533,0.807535, + 0.90795,0.034033,0.417694,0.197659,0.059532,0.759913, + 0.83962,0,0.543174,0.175201,0.114294,0.794628, + 0.83962,0,0.543174,0.166851,0.067533,0.807535, + 0.83962,0,0.543174,0.175201,0.114294,0.794628, + 0.83962,0,0.543174,0.140784,0.130464,0.847828, + 0.83962,0,0.543174,0.140784,0.130464,0.847828, + 0.83962,0,0.543174,0.175201,0.114294,0.794628, + 0.83962,0,0.543174,0.140043,0.160058,0.848974, + 0.83962,0,0.543174,0.140784,0.130464,0.847828, + 0.83962,0,0.543174,0.140043,0.160058,0.848974, + 0.83962,0,0.543174,0.099318,0.184504,0.911925, + 0.83962,0,0.543174,0.099318,0.184504,0.911925, + 0.83962,0,0.543174,0.140043,0.160058,0.848974, + 0.83962,0,0.543174,0.095242,0.193568,0.918226, + 0.83962,0,0.543174,0.099318,0.184504,0.911925, + 0.83962,0,0.543174,0.095242,0.193568,0.918226, + 0.83962,0,0.543174,0.08473,0.190593,0.934475, + 0.83962,0,0.543174,0.08473,0.190593,0.934475, + 0.83962,0,0.543174,0.095242,0.193568,0.918226, + 0.83962,0,0.543174,0.04386,0.212579,0.997651, + 0.83962,0,0.543174,0.04386,0.212579,0.997651, + 0.83962,0,0.543174,0.095242,0.193568,0.918226, + 0.83962,0,0.543174,0.044468,0.212784,0.996711, + 0.83962,0,0.543174,0.04386,0.212579,0.997651, + 0.83962,0,0.543174,0.044468,0.212784,0.996711, + 0.83962,0,0.543174,0.041134,0.213045,1.001864, + -0.69037,0.69037,0.216285,-0.150316,0.150316,1.058824, + -0.48015,0.86905,0.119198,-0.110039,0.190593,1.001864, + -0.702583,0.702583,0.112929,-0.155619,0.155619,1.001864, + -0.48015,0.86905,0.119198,-0.110039,0.190593,1.001864, + -0.69037,0.69037,0.216285,-0.150316,0.150316,1.058824, + -0.50048,0.817794,0.284135,-0.10629,0.184099,1.058824, + -0.627248,0.627248,0.46165,-0.13477,0.13477,1.111903, + -0.50048,0.817794,0.284135,-0.10629,0.184099,1.058824, + -0.69037,0.69037,0.216285,-0.150316,0.150316,1.058824, + -0.50048,0.817794,0.284135,-0.10629,0.184099,1.058824, + -0.627248,0.627248,0.46165,-0.13477,0.13477,1.111903, + -0.430509,0.751368,0.500107,-0.095297,0.165059,1.111903, + -0.517383,0.501035,0.693742,-0.110039,0.110039,1.157482, + -0.430509,0.751368,0.500107,-0.095297,0.165059,1.111903, + -0.627248,0.627248,0.46165,-0.13477,0.13477,1.111903, + -0.430509,0.751368,0.500107,-0.095297,0.165059,1.111903, + -0.517383,0.501035,0.693742,-0.110039,0.110039,1.157482, + -0.349991,0.614303,0.707204,-0.077809,0.13477,1.157482, + -0.349948,0.356994,0.866078,-0.077809,0.077809,1.192457, + -0.349991,0.614303,0.707204,-0.077809,0.13477,1.157482, + -0.517383,0.501035,0.693742,-0.110039,0.110039,1.157482, + -0.349991,0.614303,0.707204,-0.077809,0.13477,1.157482, + -0.349948,0.356994,0.866078,-0.077809,0.077809,1.192457, + -0.245627,0.435403,0.866078,-0.05502,0.095297,1.192457, + -0.193688,0.208049,0.958749,-0.040277,0.040277,1.214443, + -0.245627,0.435403,0.866078,-0.05502,0.095297,1.192457, + -0.349948,0.356994,0.866078,-0.077809,0.077809,1.192457, + -0.245627,0.435403,0.866078,-0.05502,0.095297,1.192457, + -0.193688,0.208049,0.958749,-0.040277,0.040277,1.214443, + -0.133242,0.25109,0.958749,-0.02848,0.049329,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + -0.133242,0.25109,0.958749,-0.02848,0.049329,1.214443, + -0.193688,0.208049,0.958749,-0.040277,0.040277,1.214443, + -0.69037,0.69037,0.216285,-0.150316,0.150316,1.058824, + -0.860077,0.496488,0.117332,-0.190593,0.110039,1.001864, + -0.837235,0.481678,0.258889,-0.184099,0.10629,1.058824, + -0.860077,0.496488,0.117332,-0.190593,0.110039,1.001864, + -0.69037,0.69037,0.216285,-0.150316,0.150316,1.058824, + -0.702583,0.702583,0.112929,-0.155619,0.155619,1.001864, + -0.627248,0.627248,0.46165,-0.13477,0.13477,1.111903, + -0.837235,0.481678,0.258889,-0.184099,0.10629,1.058824, + -0.751368,0.430509,0.500107,-0.165059,0.095297,1.111903, + -0.837235,0.481678,0.258889,-0.184099,0.10629,1.058824, + -0.627248,0.627248,0.46165,-0.13477,0.13477,1.111903, + -0.69037,0.69037,0.216285,-0.150316,0.150316,1.058824, + -0.517383,0.501035,0.693742,-0.110039,0.110039,1.157482, + -0.751368,0.430509,0.500107,-0.165059,0.095297,1.111903, + -0.627494,0.326475,0.70687,-0.13477,0.077809,1.157482, + -0.751368,0.430509,0.500107,-0.165059,0.095297,1.111903, + -0.517383,0.501035,0.693742,-0.110039,0.110039,1.157482, + -0.627248,0.627248,0.46165,-0.13477,0.13477,1.111903, + -0.430421,0.254256,0.866078,-0.095297,0.05502,1.192457, + -0.517383,0.501035,0.693742,-0.110039,0.110039,1.157482, + -0.627494,0.326475,0.70687,-0.13477,0.077809,1.157482, + -0.517383,0.501035,0.693742,-0.110039,0.110039,1.157482, + -0.430421,0.254256,0.866078,-0.095297,0.05502,1.192457, + -0.349948,0.356994,0.866078,-0.077809,0.077809,1.192457, + -0.240936,0.15083,0.958749,-0.049329,0.02848,1.214443, + -0.349948,0.356994,0.866078,-0.077809,0.077809,1.192457, + -0.430421,0.254256,0.866078,-0.095297,0.05502,1.192457, + -0.349948,0.356994,0.866078,-0.077809,0.077809,1.192457, + -0.240936,0.15083,0.958749,-0.049329,0.02848,1.214443, + -0.193688,0.208049,0.958749,-0.040277,0.040277,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + -0.193688,0.208049,0.958749,-0.040277,0.040277,1.214443, + -0.240936,0.15083,0.958749,-0.049329,0.02848,1.214443, + -0.837235,0.481678,0.258889,-0.184099,0.10629,1.058824, + -0.959271,0.256966,0.117332,-0.212579,0.05696,1.001864, + -0.933374,0.248573,0.258889,-0.205336,0.05502,1.058824, + -0.959271,0.256966,0.117332,-0.212579,0.05696,1.001864, + -0.837235,0.481678,0.258889,-0.184099,0.10629,1.058824, + -0.860077,0.496488,0.117332,-0.190593,0.110039,1.001864, + -0.751368,0.430509,0.500107,-0.165059,0.095297,1.111903, + -0.933374,0.248573,0.258889,-0.205336,0.05502,1.058824, + -0.831628,0.204716,0.516223,-0.184099,0.049329,1.111903, + -0.933374,0.248573,0.258889,-0.205336,0.05502,1.058824, + -0.751368,0.430509,0.500107,-0.165059,0.095297,1.111903, + -0.837235,0.481678,0.258889,-0.184099,0.10629,1.058824, + -0.627494,0.326475,0.70687,-0.13477,0.077809,1.157482, + -0.831628,0.204716,0.516223,-0.184099,0.049329,1.111903, + -0.668799,0.16246,0.725476,-0.150316,0.040277,1.157482, + -0.831628,0.204716,0.516223,-0.184099,0.049329,1.111903, + -0.627494,0.326475,0.70687,-0.13477,0.077809,1.157482, + -0.751368,0.430509,0.500107,-0.165059,0.095297,1.111903, + -0.481561,0.134192,0.866078,-0.10629,0.02848,1.192457, + -0.627494,0.326475,0.70687,-0.13477,0.077809,1.157482, + -0.668799,0.16246,0.725476,-0.150316,0.040277,1.157482, + -0.627494,0.326475,0.70687,-0.13477,0.077809,1.157482, + -0.481561,0.134192,0.866078,-0.10629,0.02848,1.192457, + -0.430421,0.254256,0.866078,-0.095297,0.05502,1.192457, + -0.271764,0.083332,0.958749,-0.05502,0.014742,1.214443, + -0.430421,0.254256,0.866078,-0.095297,0.05502,1.192457, + -0.481561,0.134192,0.866078,-0.10629,0.02848,1.192457, + -0.430421,0.254256,0.866078,-0.095297,0.05502,1.192457, + -0.271764,0.083332,0.958749,-0.05502,0.014742,1.214443, + -0.240936,0.15083,0.958749,-0.049329,0.02848,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + -0.240936,0.15083,0.958749,-0.049329,0.02848,1.214443, + -0.271764,0.083332,0.958749,-0.05502,0.014742,1.214443, + -0.933374,0.248573,0.258889,-0.205336,0.05502,1.058824, + -0.984196,0.129572,0.120707,-0.220078,0,1.001864, + -0.946203,0.12457,0.298635,-0.212579,0,1.058824, + -0.984196,0.129572,0.120707,-0.220078,0,1.001864, + -0.933374,0.248573,0.258889,-0.205336,0.05502,1.058824, + -0.959271,0.256966,0.117332,-0.212579,0.05696,1.001864, + -0.831628,0.204716,0.516223,-0.184099,0.049329,1.111903, + -0.946203,0.12457,0.298635,-0.212579,0,1.058824, + -0.860389,0.113272,0.496891,-0.190593,0,1.111903, + -0.946203,0.12457,0.298635,-0.212579,0,1.058824, + -0.831628,0.204716,0.516223,-0.184099,0.049329,1.111903, + -0.933374,0.248573,0.258889,-0.205336,0.05502,1.058824, + -0.73389,0.096619,0.672361,-0.155619,0,1.157482, + -0.831628,0.204716,0.516223,-0.184099,0.049329,1.111903, + -0.860389,0.113272,0.496891,-0.190593,0,1.111903, + -0.831628,0.204716,0.516223,-0.184099,0.049329,1.111903, + -0.73389,0.096619,0.672361,-0.155619,0,1.157482, + -0.668799,0.16246,0.725476,-0.150316,0.040277,1.157482, + -0.536052,0.070573,0.84123,-0.110039,0,1.192457, + -0.668799,0.16246,0.725476,-0.150316,0.040277,1.157482, + -0.73389,0.096619,0.672361,-0.155619,0,1.157482, + -0.668799,0.16246,0.725476,-0.150316,0.040277,1.157482, + -0.536052,0.070573,0.84123,-0.110039,0,1.192457, + -0.481561,0.134192,0.866078,-0.10629,0.02848,1.192457, + -0.30062,0.039577,0.952922,-0.05696,0,1.214443, + -0.481561,0.134192,0.866078,-0.10629,0.02848,1.192457, + -0.536052,0.070573,0.84123,-0.110039,0,1.192457, + -0.481561,0.134192,0.866078,-0.10629,0.02848,1.192457, + -0.30062,0.039577,0.952922,-0.05696,0,1.214443, + -0.271764,0.083332,0.958749,-0.05502,0.014742,1.214443, + 0.012418,0.084509,0.996345,0,0,1.221942, + -0.271764,0.083332,0.958749,-0.05502,0.014742,1.214443, + -0.30062,0.039577,0.952922,-0.05696,0,1.214443, + 0.376389,0.926462,0,0.04386,0.212579,0.997651, + 0.500207,0.863755,0.061001,0.08473,0.190593,1.001864, + 0.415157,0.90975,0,0.08473,0.190593,0.934475, + 0.500207,0.863755,0.061001,0.08473,0.190593,1.001864, + 0.376389,0.926462,0,0.04386,0.212579,0.997651, + 0.324762,0.943628,0.064002,0.04386,0.212579,1.001864, + 0.062068,0.99278,0.102645,0,0.220078,1.001864, + 0.324287,0.942926,0.075685,0.044468,0.212784,0.996711, + 0.389382,0.917677,0.079062,0.075865,0.223333,0.730756, + 0.324287,0.942926,0.075685,0.044468,0.212784,0.996711, + 0.062068,0.99278,0.102645,0,0.220078,1.001864, + 0.167861,0.981775,0.089114,0.041134,0.213045,1.001864, + 0.3285,0.942649,0.059162,0,0.292672,0.308415, + 0.413623,0.907654,0.071272,0.075296,0.280143,0.010582, + 0.283658,0.958361,0.032903,0.07279,0.281365,0.01023, + 0.413623,0.907654,0.071272,0.075296,0.280143,0.010582, + 0.3285,0.942649,0.059162,0,0.292672,0.308415, + 0.389382,0.917677,0.079062,0.075865,0.223333,0.730756, + 0.062068,0.99278,0.102645,0,0.220078,1.001864, + 0.389382,0.917677,0.079062,0.075865,0.223333,0.730756, + 0.100924,0.993347,0.05547,0,0.292672,0.308415, + -0.48015,0.86905,0.119198,-0.110039,0.190593,1.001864, + -0.300554,0.952495,0.049197,-0.075749,0.2827,0.308415, + -0.547548,0.835754,0.041316,-0.146336,0.253462,0.308415, + -0.300554,0.952495,0.049197,-0.075749,0.2827,0.308415, + -0.48015,0.86905,0.119198,-0.110039,0.190593,1.001864, + -0.231735,0.965999,0.114651,-0.05696,0.212579,1.001864, + -0.608751,0.79334,-0.005732,-0.20569,0.207176,0.20569, + -0.547548,0.835754,0.041316,-0.146336,0.253462,0.308415, + -0.461543,0.887099,-0.005776,-0.145866,0.252648,0.145866, + -0.547548,0.835754,0.041316,-0.146336,0.253462,0.308415, + -0.608751,0.79334,-0.005732,-0.20569,0.207176,0.20569, + -0.707095,0.707095,-0.005782,-0.206534,0.206534,0.206534, + -0.547548,0.835754,0.041316,-0.146336,0.253462,0.308415, + -0.707095,0.707095,-0.005782,-0.206534,0.206534,0.206534, + -0.706249,0.706249,0.049244,-0.206951,0.206951,0.308415, + -0.702583,0.702583,0.112929,-0.155619,0.155619,1.001864, + -0.547548,0.835754,0.041316,-0.146336,0.253462,0.308415, + -0.706249,0.706249,0.049244,-0.206951,0.206951,0.308415, + -0.547548,0.835754,0.041316,-0.146336,0.253462,0.308415, + -0.702583,0.702583,0.112929,-0.155619,0.155619,1.001864, + -0.48015,0.86905,0.119198,-0.110039,0.190593,1.001864, + -0.702583,0.702583,0.112929,-0.155619,0.155619,1.001864, + -0.842251,0.536837,0.049197,-0.253462,0.146336,0.308415, + -0.860077,0.496488,0.117332,-0.190593,0.110039,1.001864, + -0.842251,0.536837,0.049197,-0.253462,0.146336,0.308415, + -0.702583,0.702583,0.112929,-0.155619,0.155619,1.001864, + -0.706249,0.706249,0.049244,-0.206951,0.206951,0.308415, + -0.860077,0.496488,0.117332,-0.190593,0.110039,1.001864, + -0.952495,0.300554,0.049197,-0.2827,0.075749,0.308415, + -0.959271,0.256966,0.117332,-0.212579,0.05696,1.001864, + -0.952495,0.300554,0.049197,-0.2827,0.075749,0.308415, + -0.860077,0.496488,0.117332,-0.190593,0.110039,1.001864, + -0.842251,0.536837,0.049197,-0.253462,0.146336,0.308415, + -0.959271,0.256966,0.117332,-0.212579,0.05696,1.001864, + -0.990262,0.130371,0.048824,-0.292672,0,0.308415, + -0.984196,0.129572,0.120707,-0.220078,0,1.001864, + -0.990262,0.130371,0.048824,-0.292672,0,0.308415, + -0.959271,0.256966,0.117332,-0.212579,0.05696,1.001864, + -0.952495,0.300554,0.049197,-0.2827,0.075749,0.308415, + 0.389382,0.917677,0.079062,0.075865,0.223333,0.730756, + 0.427508,0.900816,0.075942,0.143524,0.251128,0.020171, + 0.413623,0.907654,0.071272,0.075296,0.280143,0.010582, + -0.216218,0.976328,-0.005776,-0.0754,0.281398,0.0754, + -0.013108,0.99872,0.048851,0,0.292672,0.308415, + 0,0.999983,-0.005782,0,0.290889,0, + -0.013108,0.99872,0.048851,0,0.292672,0.308415, + -0.216218,0.976328,-0.005776,-0.0754,0.281398,0.0754, + -0.300554,0.952495,0.049197,-0.075749,0.2827,0.308415, + -0.124567,0.48414,0.866078,-0.02848,0.10629,1.192457, + 0.018377,0.706803,0.707171,0,0.155619,1.157482, + -0.179072,0.683956,0.707204,-0.040277,0.150316,1.157482, + 0.018377,0.706803,0.707171,0,0.155619,1.157482, + -0.124567,0.48414,0.866078,-0.02848,0.10629,1.192457, + 0.022695,0.483335,0.875141,0,0.110039,1.192457, + 0.987655,0.110069,0.111458,0.285987,0.003291,0.040193, + 0.987543,0.10011,0.121395,0.20782,0,0.730756, + 0.988599,0.100217,0.11238,0.286315,0,0.040239, + 0.987543,0.10011,0.121395,0.20782,0,0.730756, + 0.987655,0.110069,0.111458,0.285987,0.003291,0.040193, + 0.973303,0.191501,0.126525,0.201753,0.059842,0.730756, + -0.231735,0.965999,0.114651,-0.05696,0.212579,1.001864, + -0.013108,0.99872,0.048851,0,0.292672,0.308415, + -0.300554,0.952495,0.049197,-0.075749,0.2827,0.308415, + -0.013108,0.99872,0.048851,0,0.292672,0.308415, + -0.231735,0.965999,0.114651,-0.05696,0.212579,1.001864, + 0.062068,0.99278,0.102645,0,0.220078,1.001864, + 0.389382,0.917677,0.079062,0.075865,0.223333,0.730756, + 0.518618,0.851337,0.079118,0.144703,0.250479,0.020337, + 0.427508,0.900816,0.075942,0.143524,0.251128,0.020171, + 0.518618,0.851337,0.079118,0.144703,0.250479,0.020337, + 0.389382,0.917677,0.079062,0.075865,0.223333,0.730756, + 0.595396,0.798295,0.090708,0.118803,0.200235,0.730756, + 0.879378,0.465339,0.100771,0.248668,0.144018,0.034948, + 0.786413,0.608998,0.103325,0.155675,0.163491,0.730756, + 0.908054,0.402355,0.116396,0.183968,0.115606,0.730756, + 0.786413,0.608998,0.103325,0.155675,0.163491,0.730756, + 0.879378,0.465339,0.100771,0.248668,0.144018,0.034948, + 0.824908,0.557247,0.094881,0.247339,0.146303,0.034761, + 0.963188,0.245466,0.109611,0.27676,0.074466,0.038896, + 0.908054,0.402355,0.116396,0.183968,0.115606,0.730756, + 0.973303,0.191501,0.126525,0.201753,0.059842,0.730756, + 0.908054,0.402355,0.116396,0.183968,0.115606,0.730756, + 0.963188,0.245466,0.109611,0.27676,0.074466,0.038896, + 0.933915,0.341689,0.105128,0.275831,0.077426,0.038766, + 0.879378,0.465339,0.100771,0.248668,0.144018,0.034948, + 0.908054,0.402355,0.116396,0.183968,0.115606,0.730756, + 0.933915,0.341689,0.105128,0.275831,0.077426,0.038766, + 0.595396,0.798295,0.090708,0.118803,0.200235,0.730756, + 0.733544,0.673775,0.089114,0.20373,0.204036,0.028632, + 0.656362,0.749796,0.083638,0.202309,0.205477,0.028433, + 0.733544,0.673775,0.089114,0.20373,0.204036,0.028632, + 0.595396,0.798295,0.090708,0.118803,0.200235,0.730756, + 0.786413,0.608998,0.103325,0.155675,0.163491,0.730756, + -0.179072,0.683956,0.707204,-0.040277,0.150316,1.157482, + -0.000403,0.875175,0.483806,0,0.190593,1.111903, + -0.24095,0.817816,0.522609,-0.049329,0.184099,1.111903, + -0.000403,0.875175,0.483806,0,0.190593,1.111903, + -0.179072,0.683956,0.707204,-0.040277,0.150316,1.157482, + 0.018377,0.706803,0.707171,0,0.155619,1.157482, + 0.595396,0.798295,0.090708,0.118803,0.200235,0.730756, + 0.656362,0.749796,0.083638,0.202309,0.205477,0.028433, + 0.518618,0.851337,0.079118,0.144703,0.250479,0.020337, + 0.790198,0.60634,0.089097,0.216049,0.187728,0.030364, + 0.786413,0.608998,0.103325,0.155675,0.163491,0.730756, + 0.824908,0.557247,0.094881,0.247339,0.146303,0.034761, + 0.786413,0.608998,0.103325,0.155675,0.163491,0.730756, + 0.790198,0.60634,0.089097,0.216049,0.187728,0.030364, + 0.733544,0.673775,0.089114,0.20373,0.204036,0.028632, + -0.249995,0.932995,0.258889,-0.05502,0.205336,1.058824, + -0.000403,0.875175,0.483806,0,0.190593,1.111903, + 0.048912,0.971204,0.233174,0,0.212579,1.058824, + -0.000403,0.875175,0.483806,0,0.190593,1.111903, + -0.249995,0.932995,0.258889,-0.05502,0.205336,1.058824, + -0.24095,0.817816,0.522609,-0.049329,0.184099,1.111903, + 0.963188,0.245466,0.109611,0.27676,0.074466,0.038896, + 0.973303,0.191501,0.126525,0.201753,0.059842,0.730756, + 0.987655,0.110069,0.111458,0.285987,0.003291,0.040193, + -0.063714,0.27702,0.958749,-0.014742,0.05502,1.214443, + 0.022695,0.483335,0.875141,0,0.110039,1.192457, + -0.124567,0.48414,0.866078,-0.02848,0.10629,1.192457, + 0.022695,0.483335,0.875141,0,0.110039,1.192457, + -0.063714,0.27702,0.958749,-0.014742,0.05502,1.214443, + 0.005074,0.25872,0.965939,0,0.05696,1.214443, + -0.249995,0.932995,0.258889,-0.05502,0.205336,1.058824, + 0.062068,0.99278,0.102645,0,0.220078,1.001864, + -0.231735,0.965999,0.114651,-0.05696,0.212579,1.001864, + 0.062068,0.99278,0.102645,0,0.220078,1.001864, + -0.249995,0.932995,0.258889,-0.05502,0.205336,1.058824, + 0.048912,0.971204,0.233174,0,0.212579,1.058824, + -0.707107,0,-0.707107,-0.282555,0.07571,0.282555, + -0.707107,0,-0.707107,-0.155102,0,0.155102, + -0.707107,0,-0.707107,-0.292581,0,0.292581, + -0.707107,0,-0.707107,-0.155102,0,0.155102, + -0.707107,0,-0.707107,-0.282555,0.07571,0.282555, + -0.707107,0,-0.707107,-0.155102,0.158996,0.155102, + -0.707107,0,-0.707107,-0.155102,0.158996,0.155102, + -0.707107,0,-0.707107,-0.282555,0.07571,0.282555, + -0.707107,0,-0.707107,-0.253185,0.146177,0.253185, + -0.707107,0,-0.707107,-0.155102,0.158996,0.155102, + -0.707107,0,-0.707107,-0.253185,0.146177,0.253185, + -0.707107,0,-0.707107,-0.206534,0.206534,0.206534, + -0.707107,0,-0.707107,-0.155102,0.158996,0.155102, + -0.707107,0,-0.707107,-0.206534,0.206534,0.206534, + -0.707107,0,-0.707107,0,0.158996,0, + -0.707107,0,-0.707107,0,0.158996,0, + -0.707107,0,-0.707107,-0.206534,0.206534,0.206534, + -0.707107,0,-0.707107,0,0.290889,0, + -0.707107,0,-0.707107,0,0.290889,0, + -0.707107,0,-0.707107,-0.206534,0.206534,0.206534, + -0.707107,0,-0.707107,-0.20569,0.207176,0.20569, + -0.707107,0,-0.707107,0,0.290889,0, + -0.707107,0,-0.707107,-0.20569,0.207176,0.20569, + -0.707107,0,-0.707107,-0.145866,0.252648,0.145866, + -0.707107,0,-0.707107,0,0.290889,0, + -0.707107,0,-0.707107,-0.145866,0.252648,0.145866, + -0.707107,0,-0.707107,-0.0754,0.281398,0.0754, + 0.139173,0,-0.990268,0.07279,0.281365,0.01023, + 0.139173,0,-0.990268,0,0.158996,0, + 0.139173,0,-0.990268,0,0.290889,0, + 0.139173,0,-0.990268,0,0.158996,0, + 0.139173,0,-0.990268,0.07279,0.281365,0.01023, + 0.139173,0,-0.990268,0.216568,0.158996,0.030437, + 0.139173,0,-0.990268,0.216568,0.158996,0.030437, + 0.139173,0,-0.990268,0.07279,0.281365,0.01023, + 0.139173,0,-0.990268,0.075296,0.280143,0.010582, + 0.139173,0,-0.990268,0.216568,0.158996,0.030437, + 0.139173,0,-0.990268,0.075296,0.280143,0.010582, + 0.139173,0,-0.990268,0.143524,0.251128,0.020171, + 0.139173,0,-0.990268,0.216568,0.158996,0.030437, + 0.139173,0,-0.990268,0.143524,0.251128,0.020171, + 0.139173,0,-0.990268,0.144703,0.250479,0.020337, + 0.139173,0,-0.990268,0.216568,0.158996,0.030437, + 0.139173,0,-0.990268,0.144703,0.250479,0.020337, + 0.139173,0,-0.990268,0.202309,0.205477,0.028433, + 0.139173,0,-0.990268,0.216568,0.158996,0.030437, + 0.139173,0,-0.990268,0.202309,0.205477,0.028433, + 0.139173,0,-0.990268,0.20373,0.204036,0.028632, + 0.139173,0,-0.990268,0.216568,0.158996,0.030437, + 0.139173,0,-0.990268,0.20373,0.204036,0.028632, + 0.139173,0,-0.990268,0.216049,0.187728,0.030364, + 0.139173,0,-0.990268,0.216568,0.158996,0.030437, + 0.139173,0,-0.990268,0.216049,0.187728,0.030364, + 0.139173,0,-0.990268,0.247339,0.146303,0.034761, + 0.139173,0,-0.990268,0.216568,0.158996,0.030437, + 0.139173,0,-0.990268,0.286315,0,0.040239, + 0.139173,0,-0.990268,0.216568,0,0.030437, + 0.139173,0,-0.990268,0.286315,0,0.040239, + 0.139173,0,-0.990268,0.216568,0.158996,0.030437, + 0.139173,0,-0.990268,0.247339,0.146303,0.034761, + 0.139173,0,-0.990268,0.286315,0,0.040239, + 0.139173,0,-0.990268,0.247339,0.146303,0.034761, + 0.139173,0,-0.990268,0.248668,0.144018,0.034948, + 0.139173,0,-0.990268,0.286315,0,0.040239, + 0.139173,0,-0.990268,0.248668,0.144018,0.034948, + 0.139173,0,-0.990268,0.275831,0.077426,0.038766, + 0.139173,0,-0.990268,0.286315,0,0.040239, + 0.139173,0,-0.990268,0.275831,0.077426,0.038766, + 0.139173,0,-0.990268,0.27676,0.074466,0.038896, + 0.139173,0,-0.990268,0.286315,0,0.040239, + 0.139173,0,-0.990268,0.27676,0.074466,0.038896, + 0.139173,0,-0.990268,0.285987,0.003291,0.040193 +}; +static const struct gllist handsy_model_finger_distal_frame = { + GL_N3F_V3F, GL_TRIANGLES, 876, handsy_model_finger_distal_data, 0 +}; +const struct gllist *handsy_model_finger_distal = &handsy_model_finger_distal_frame; + +static const float handsy_model_finger_intermediate_data[] = { + 0,1,0,-0.191233,0.158996,0.888552, + 0,1,0,0,0.158996,1.000796, + 0,1,0,-0.156938,0.158996,0.843858, + 0,1,0,0,0.158996,1.000796, + 0,1,0,-0.191233,0.158996,0.888552, + 0,1,0,-0.213293,0.158996,0.941808, + 0,1,0,0,0.158996,1.000796, + 0,1,0,-0.213293,0.158996,0.941808, + 0,1,0,-0.220817,0.158996,0.99896, + 0,1,0,0,0.158996,1.000796, + 0,1,0,-0.220817,0.158996,0.99896, + 0,1,0,-0.213293,0.158996,1.056112, + 0,1,0,0,0.158996,1.000796, + 0,1,0,-0.213293,0.158996,1.056112, + 0,1,0,0.220575,0.158996,1.000796, + 0,1,0,0.220575,0.158996,1.000796, + 0,1,0,-0.213293,0.158996,1.056112, + 0,1,0,0.213293,0.158996,1.056112, + 0,1,0,0.213293,0.158996,1.056112, + 0,1,0,-0.213293,0.158996,1.056112, + 0,1,0,-0.191233,0.158996,1.109368, + 0,1,0,0.213293,0.158996,1.056112, + 0,1,0,-0.191233,0.158996,1.109368, + 0,1,0,0.191233,0.158996,1.109368, + 0,1,0,0.191233,0.158996,1.109368, + 0,1,0,-0.191233,0.158996,1.109368, + 0,1,0,-0.156141,0.158996,1.155101, + 0,1,0,0.191233,0.158996,1.109368, + 0,1,0,-0.156141,0.158996,1.155101, + 0,1,0,0.156141,0.158996,1.155101, + 0,1,0,0.156141,0.158996,1.155101, + 0,1,0,-0.156141,0.158996,1.155101, + 0,1,0,-0.155102,0.158996,1.155898, + 0,1,0,0.156141,0.158996,1.155101, + 0,1,0,-0.155102,0.158996,1.155898, + 0,1,0,0.110408,0.158996,1.190193, + 0,1,0,0.110408,0.158996,1.190193, + 0,1,0,-0.155102,0.158996,1.155898, + 0,1,0,-0.110408,0.158996,1.190193, + 0,1,0,0.110408,0.158996,1.190193, + 0,1,0,-0.110408,0.158996,1.190193, + 0,1,0,-0.057152,0.158996,1.212253, + 0,1,0,0.110408,0.158996,1.190193, + 0,1,0,-0.057152,0.158996,1.212253, + 0,1,0,0.057152,0.158996,1.212253, + 0,1,0,0.057152,0.158996,1.212253, + 0,1,0,-0.057152,0.158996,1.212253, + 0,1,0,0,0.158996,1.219777, + 0,1,0,0.220575,0.158996,1.000796, + 0,1,0,0.216568,0.158996,0.970359, + 0,1,0,0,0.158996,1.000796, + -0.707107,0,0.707107,-0.156938,0,0.843858, + -0.707107,0,0.707107,-0.293114,0.07854,0.707681, + -0.707107,0,0.707107,-0.303917,0,0.696878, + -0.707107,0,0.707107,-0.293114,0.07854,0.707681, + -0.707107,0,0.707107,-0.156938,0,0.843858, + -0.707107,0,0.707107,-0.26163,0.151052,0.739165, + -0.707107,0,0.707107,-0.26163,0.151052,0.739165, + -0.707107,0,0.707107,-0.156938,0,0.843858, + -0.707107,0,0.707107,-0.212119,0.212119,0.788676, + -0.707107,0,0.707107,-0.212119,0.212119,0.788676, + -0.707107,0,0.707107,-0.156938,0,0.843858, + -0.707107,0,0.707107,-0.156938,0.158996,0.843858, + -0.707107,0,0.707107,-0.212119,0.212119,0.788676, + -0.707107,0,0.707107,-0.156938,0.158996,0.843858, + -0.707107,0,0.707107,-0.14863,0.257435,0.852165, + -0.707107,0,0.707107,-0.14863,0.257435,0.852165, + -0.707107,0,0.707107,-0.156938,0.158996,0.843858, + -0.707107,0,0.707107,0,0.158996,1.000796, + -0.707107,0,0.707107,-0.14863,0.257435,0.852165, + -0.707107,0,0.707107,0,0.158996,1.000796, + -0.707107,0,0.707107,-0.076132,0.28413,0.924663, + -0.707107,0,0.707107,-0.076132,0.28413,0.924663, + -0.707107,0,0.707107,0,0.158996,1.000796, + -0.707107,0,0.707107,0,0.290889,1.000796, + -0.97545,0.216024,0.042787,-0.293114,0.07854,0.707681, + -0.990551,0.130408,0.042462,-0.32007,0,0.32007, + -0.990551,0.130408,0.042462,-0.303917,0,0.696878, + -0.990551,0.130408,0.042462,-0.32007,0,0.32007, + -0.97545,0.216024,0.042787,-0.293114,0.07854,0.707681, + -0.952777,0.300643,0.042787,-0.309598,0.082956,0.309598, + -0.461128,0.886301,0.042787,-0.163393,0.283005,0.163393, + -0.300643,0.952777,0.042787,-0.076132,0.28413,0.924663, + -0.216024,0.97545,0.042787,-0.085443,0.318879,0.085443, + -0.300643,0.952777,0.042787,-0.076132,0.28413,0.924663, + -0.461128,0.886301,0.042787,-0.163393,0.283005,0.163393, + -0.536995,0.842499,0.042787,-0.14863,0.257435,0.852165, + -0.886301,0.461128,0.042787,-0.26163,0.151052,0.739165, + -0.952777,0.300643,0.042787,-0.309598,0.082956,0.309598, + -0.97545,0.216024,0.042787,-0.293114,0.07854,0.707681, + -0.952777,0.300643,0.042787,-0.309598,0.082956,0.309598, + -0.886301,0.461128,0.042787,-0.26163,0.151052,0.739165, + -0.842499,0.536995,0.042787,-0.278724,0.160921,0.278724, + -0.736753,0.674807,0.042787,-0.212119,0.212119,0.788676, + -0.842499,0.536995,0.042787,-0.278724,0.160921,0.278724, + -0.886301,0.461128,0.042787,-0.26163,0.151052,0.739165, + -0.842499,0.536995,0.042787,-0.278724,0.160921,0.278724, + -0.736753,0.674807,0.042787,-0.212119,0.212119,0.788676, + -0.674807,0.736753,0.042787,-0.229082,0.229082,0.229082, + -0.707107,0,-0.707107,-0.309598,0.082956,0.309598, + -0.707107,0,-0.707107,-0.188122,0,0.188122, + -0.707107,0,-0.707107,-0.32007,0,0.32007, + -0.707107,0,-0.707107,-0.188122,0,0.188122, + -0.707107,0,-0.707107,-0.309598,0.082956,0.309598, + -0.707107,0,-0.707107,-0.188122,0.191561,0.188122, + -0.707107,0,-0.707107,-0.188122,0.191561,0.188122, + -0.707107,0,-0.707107,-0.309598,0.082956,0.309598, + -0.707107,0,-0.707107,-0.278724,0.160921,0.278724, + -0.707107,0,-0.707107,-0.188122,0.191561,0.188122, + -0.707107,0,-0.707107,-0.278724,0.160921,0.278724, + -0.707107,0,-0.707107,-0.229082,0.229082,0.229082, + -0.707107,0,-0.707107,-0.188122,0.191561,0.188122, + -0.707107,0,-0.707107,-0.229082,0.229082,0.229082, + -0.707107,0,-0.707107,0,0.191561,0, + -0.707107,0,-0.707107,0,0.191561,0, + -0.707107,0,-0.707107,-0.229082,0.229082,0.229082, + -0.707107,0,-0.707107,0,0.333791,0, + -0.707107,0,-0.707107,0,0.333791,0, + -0.707107,0,-0.707107,-0.229082,0.229082,0.229082, + -0.707107,0,-0.707107,-0.163393,0.283005,0.163393, + -0.707107,0,-0.707107,0,0.333791,0, + -0.707107,0,-0.707107,-0.163393,0.283005,0.163393, + -0.707107,0,-0.707107,-0.085443,0.318879,0.085443, + -0.674807,0.736753,0.042787,-0.229082,0.229082,0.229082, + -0.536995,0.842499,0.042787,-0.14863,0.257435,0.852165, + -0.461128,0.886301,0.042787,-0.163393,0.283005,0.163393, + -0.536995,0.842499,0.042787,-0.14863,0.257435,0.852165, + -0.674807,0.736753,0.042787,-0.229082,0.229082,0.229082, + -0.736753,0.674807,0.042787,-0.212119,0.212119,0.788676, + -0.843272,0,-0.537487,-0.191233,0.158996,0.888552, + -0.793353,0,-0.608761,-0.156938,0,0.843858, + -0.887114,0,-0.461551,-0.191233,0,0.888552, + -0.793353,0,-0.608761,-0.156938,0,0.843858, + -0.843272,0,-0.537487,-0.191233,0.158996,0.888552, + -0.793353,0,-0.608761,-0.156938,0.158996,0.843858, + -0.522622,0,0.852565,-0.110408,0,1.190193, + -0.258819,0,0.965926,-0.057152,0.158996,1.212253, + -0.5,0,0.866025,-0.110408,0.158996,1.190193, + -0.258819,0,0.965926,-0.057152,0.158996,1.212253, + -0.522622,0,0.852565,-0.110408,0,1.190193, + -0.258819,0,0.965926,-0.057152,0,1.212253, + -1,0,0,-0.220817,0.158996,0.99896, + -0.976344,0,-0.216222,-0.213293,0,0.941808, + -1,0,0,-0.220817,0,0.99896, + -0.976344,0,-0.216222,-0.213293,0,0.941808, + -1,0,0,-0.220817,0.158996,0.99896, + -0.95365,0,-0.300918,-0.213293,0.158996,0.941808, + -0.95365,0,-0.300918,-0.213293,0.158996,0.941808, + -0.887114,0,-0.461551,-0.191233,0,0.888552, + -0.976344,0,-0.216222,-0.213293,0,0.941808, + -0.887114,0,-0.461551,-0.191233,0,0.888552, + -0.95365,0,-0.300918,-0.213293,0.158996,0.941808, + -0.843272,0,-0.537487,-0.191233,0.158996,0.888552, + -0.976344,0,0.216222,-0.213293,0.158996,1.056112, + -0.991445,0,0.130526,-0.220575,0,1.000796, + -0.95365,0,0.300918,-0.213293,0,1.056112, + -0.991445,0,0.130526,-0.220575,0,1.000796, + -1,0,0,-0.220817,0.158996,0.99896, + -1,0,0,-0.220817,0,0.99896, + -1,0,0,-0.220817,0.158996,0.99896, + -0.991445,0,0.130526,-0.220575,0,1.000796, + -0.976344,0,0.216222,-0.213293,0.158996,1.056112, + -0.707107,0,0.707107,-0.156141,0.158996,1.155101, + -0.843272,0,0.537487,-0.191233,0,1.109368, + -0.707107,0,0.707107,-0.156141,0,1.155101, + -0.843272,0,0.537487,-0.191233,0,1.109368, + -0.707107,0,0.707107,-0.156141,0.158996,1.155101, + -0.887114,0,0.461551,-0.191233,0.158996,1.109368, + -0.522622,0,0.852565,-0.110408,0,1.190193, + -0.707107,0,0.707107,-0.156141,0.158996,1.155101, + -0.707107,0,0.707107,-0.156141,0,1.155101, + -0.707107,0,0.707107,-0.156141,0.158996,1.155101, + -0.522622,0,0.852565,-0.110408,0,1.190193, + -0.608761,0,0.793353,-0.155102,0.158996,1.155898, + -0.608761,0,0.793353,-0.155102,0.158996,1.155898, + -0.522622,0,0.852565,-0.110408,0,1.190193, + -0.5,0,0.866025,-0.110408,0.158996,1.190193, + -0.887114,0,0.461551,-0.191233,0.158996,1.109368, + -0.95365,0,0.300918,-0.213293,0,1.056112, + -0.843272,0,0.537487,-0.191233,0,1.109368, + -0.95365,0,0.300918,-0.213293,0,1.056112, + -0.887114,0,0.461551,-0.191233,0.158996,1.109368, + -0.976344,0,0.216222,-0.213293,0.158996,1.056112, + 0.95365,0,0.300918,0.213293,0.158996,1.056112, + 0.887114,0,0.461551,0.191233,0,1.109368, + 0.976344,0,0.216222,0.213293,0,1.056112, + 0.887114,0,0.461551,0.191233,0,1.109368, + 0.95365,0,0.300918,0.213293,0.158996,1.056112, + 0.843272,0,0.537487,0.191233,0.158996,1.109368, + 0,0,1,0,0,1.219777, + 0.258819,0,0.965926,0.057152,0.158996,1.212253, + 0,0,1,0,0.158996,1.219777, + 0.258819,0,0.965926,0.057152,0.158996,1.212253, + 0,0,1,0,0,1.219777, + 0.258819,0,0.965926,0.057152,0,1.212253, + 0.461551,0,0.887114,0.110408,0,1.190193, + 0.258819,0,0.965926,0.057152,0.158996,1.212253, + 0.258819,0,0.965926,0.057152,0,1.212253, + 0.258819,0,0.965926,0.057152,0.158996,1.212253, + 0.461551,0,0.887114,0.110408,0,1.190193, + 0.537487,0,0.843272,0.110408,0.158996,1.190193, + 1,0,0,0.220575,0.158996,1.000796, + 0.976344,0,0.216222,0.213293,0,1.056112, + 1,0,0,0.220575,0,1.000796, + 0.976344,0,0.216222,0.213293,0,1.056112, + 1,0,0,0.220575,0.158996,1.000796, + 0.95365,0,0.300918,0.213293,0.158996,1.056112, + 0,0,1,0,0,1.219777, + -0.258819,0,0.965926,-0.057152,0.158996,1.212253, + -0.258819,0,0.965926,-0.057152,0,1.212253, + -0.258819,0,0.965926,-0.057152,0.158996,1.212253, + 0,0,1,0,0,1.219777, + 0,0,1,0,0.158996,1.219777, + 0.707107,0,0.707107,0.156141,0,1.155101, + 0.537487,0,0.843272,0.110408,0.158996,1.190193, + 0.461551,0,0.887114,0.110408,0,1.190193, + 0.537487,0,0.843272,0.110408,0.158996,1.190193, + 0.707107,0,0.707107,0.156141,0,1.155101, + 0.707107,0,0.707107,0.156141,0.158996,1.155101, + 0.843272,0,0.537487,0.191233,0.158996,1.109368, + 0.707107,0,0.707107,0.156141,0,1.155101, + 0.887114,0,0.461551,0.191233,0,1.109368, + 0.707107,0,0.707107,0.156141,0,1.155101, + 0.843272,0,0.537487,0.191233,0.158996,1.109368, + 0.707107,0,0.707107,0.156141,0.158996,1.155101, + 0.139173,0,-0.990268,0,0.333791,0, + 0.139173,0,-0.990268,0.261211,0.191561,0.036711, + 0.139173,0,-0.990268,0,0.191561,0, + 0.139173,0,-0.990268,0.261211,0.191561,0.036711, + 0.139173,0,-0.990268,0,0.333791,0, + 0.139173,0,-0.990268,0.086257,0.321915,0.012123, + 0.139173,0,-0.990268,0.261211,0.191561,0.036711, + 0.139173,0,-0.990268,0.086257,0.321915,0.012123, + 0.139173,0,-0.990268,0.166394,0.288203,0.023385, + 0.139173,0,-0.990268,0.261211,0.191561,0.036711, + 0.139173,0,-0.990268,0.166394,0.288203,0.023385, + 0.139173,0,-0.990268,0.235024,0.235024,0.033031, + 0.139173,0,-0.990268,0.261211,0.191561,0.036711, + 0.139173,0,-0.990268,0.235024,0.235024,0.033031, + 0.139173,0,-0.990268,0.249144,0.216485,0.035015, + 0.139173,0,-0.990268,0.261211,0.191561,0.036711, + 0.139173,0,-0.990268,0.249144,0.216485,0.035015, + 0.139173,0,-0.990268,0.287571,0.166029,0.040415, + 0.139173,0,-0.990268,0.261211,0.191561,0.036711, + 0.139173,0,-0.990268,0.287571,0.166029,0.040415, + 0.139173,0,-0.990268,0.261211,0,0.036711, + 0.139173,0,-0.990268,0.261211,0,0.036711, + 0.139173,0,-0.990268,0.287571,0.166029,0.040415, + 0.139173,0,-0.990268,0.331792,0,0.04663, + 0.139173,0,-0.990268,0.331792,0,0.04663, + 0.139173,0,-0.990268,0.287571,0.166029,0.040415, + 0.139173,0,-0.990268,0.320552,0.085892,0.045051, + 0.300643,0.952777,0.042787,0.075405,0.281416,0.990198, + 0.461128,0.886301,0.042787,0.166394,0.288203,0.023385, + 0.216024,0.97545,0.042787,0.086257,0.321915,0.012123, + 0.461128,0.886301,0.042787,0.166394,0.288203,0.023385, + 0.300643,0.952777,0.042787,0.075405,0.281416,0.990198, + 0.536995,0.842499,0.042787,0.145884,0.252679,0.980293, + 0.842499,0.536995,0.042787,0.287571,0.166029,0.040415, + 0.751338,0.658532,0.042736,0.20657,0.20657,0.971764, + 0.886301,0.461128,0.042787,0.253239,0.146207,0.965205, + 0.751338,0.658532,0.042736,0.20657,0.20657,0.971764, + 0.842499,0.536995,0.042787,0.287571,0.166029,0.040415, + 0.792638,0.608212,0.042462,0.249144,0.216485,0.035015, + 0.751338,0.658532,0.042736,0.20657,0.20657,0.971764, + 0.792638,0.608212,0.042462,0.249144,0.216485,0.035015, + 0.674807,0.736753,0.042787,0.235024,0.235024,0.033031, + 0.990551,0.130408,0.042462,0.331792,0,0.04663, + 0.97545,0.216024,0.042787,0.282622,0.075728,0.961076, + 0.990551,0.130408,0.042462,0.292652,0,0.959666, + 0.97545,0.216024,0.042787,0.282622,0.075728,0.961076, + 0.990551,0.130408,0.042462,0.331792,0,0.04663, + 0.952777,0.300643,0.042787,0.320552,0.085892,0.045051, + 0.536995,0.842499,0.042787,0.145884,0.252679,0.980293, + 0.674807,0.736753,0.042787,0.235024,0.235024,0.033031, + 0.461128,0.886301,0.042787,0.166394,0.288203,0.023385, + 0.674807,0.736753,0.042787,0.235024,0.235024,0.033031, + 0.536995,0.842499,0.042787,0.145884,0.252679,0.980293, + 0.751338,0.658532,0.042736,0.20657,0.20657,0.971764, + 0.952777,0.300643,0.042787,0.320552,0.085892,0.045051, + 0.886301,0.461128,0.042787,0.253239,0.146207,0.965205, + 0.97545,0.216024,0.042787,0.282622,0.075728,0.961076, + 0.886301,0.461128,0.042787,0.253239,0.146207,0.965205, + 0.952777,0.300643,0.042787,0.320552,0.085892,0.045051, + 0.842499,0.536995,0.042787,0.287571,0.166029,0.040415, + 0.991445,0,-0.130526,0.216568,0,0.970359, + 1,0,0,0.220575,0.158996,1.000796, + 1,0,0,0.220575,0,1.000796, + 1,0,0,0.220575,0.158996,1.000796, + 0.991445,0,-0.130526,0.216568,0,0.970359, + 0.991445,0,-0.130526,0.216568,0.158996,0.970359, + 0.139173,0,0.990268,0.292652,0,0.959666, + 0.139173,0,0.990268,0.216568,0.158996,0.970359, + 0.139173,0,0.990268,0.216568,0,0.970359, + 0.139173,0,0.990268,0.216568,0.158996,0.970359, + 0.139173,0,0.990268,0.292652,0,0.959666, + 0.139173,0,0.990268,0.253239,0.146207,0.965205, + 0.139173,0,0.990268,0.253239,0.146207,0.965205, + 0.139173,0,0.990268,0.292652,0,0.959666, + 0.139173,0,0.990268,0.282622,0.075728,0.961076, + 0.139173,0,0.990268,0.216568,0.158996,0.970359, + 0.139173,0,0.990268,0,0.290889,1.000796, + 0.139173,0,0.990268,0,0.158996,1.000796, + 0.139173,0,0.990268,0,0.290889,1.000796, + 0.139173,0,0.990268,0.216568,0.158996,0.970359, + 0.139173,0,0.990268,0.075405,0.281416,0.990198, + 0.139173,0,0.990268,0.075405,0.281416,0.990198, + 0.139173,0,0.990268,0.216568,0.158996,0.970359, + 0.139173,0,0.990268,0.145884,0.252679,0.980293, + 0.139173,0,0.990268,0.145884,0.252679,0.980293, + 0.139173,0,0.990268,0.216568,0.158996,0.970359, + 0.139173,0,0.990268,0.20657,0.20657,0.971764, + 0.139173,0,0.990268,0.20657,0.20657,0.971764, + 0.139173,0,0.990268,0.216568,0.158996,0.970359, + 0.139173,0,0.990268,0.253239,0.146207,0.965205, + 0,0.999082,0.042828,0,0.290889,1.000796, + 0.216024,0.97545,0.042787,0.086257,0.321915,0.012123, + 0,0.999082,0.042828,0,0.333791,0, + 0.216024,0.97545,0.042787,0.086257,0.321915,0.012123, + 0,0.999082,0.042828,0,0.290889,1.000796, + 0.300643,0.952777,0.042787,0.075405,0.281416,0.990198, + -0.216024,0.97545,0.042787,-0.085443,0.318879,0.085443, + 0,0.999082,0.042828,0,0.290889,1.000796, + 0,0.999082,0.042828,0,0.333791,0, + 0,0.999082,0.042828,0,0.290889,1.000796, + -0.216024,0.97545,0.042787,-0.085443,0.318879,0.085443, + -0.300643,0.952777,0.042787,-0.076132,0.28413,0.924663 +}; +static const struct gllist handsy_model_finger_intermediate_frame = { + GL_N3F_V3F, GL_TRIANGLES, 327, handsy_model_finger_intermediate_data, 0 +}; +const struct gllist *handsy_model_finger_intermediate = &handsy_model_finger_intermediate_frame; + +static const float handsy_model_finger_metacarpal_data[] = { + -0.271764,0.083332,0.958749,-0.068185,0.017822,1.409438, + -0.430421,0.254256,0.866078,-0.116874,0.066511,1.38286, + -0.481561,0.134192,0.866078,-0.130163,0.034429,1.38286, + -0.430421,0.254256,0.866078,-0.116874,0.066511,1.38286, + -0.271764,0.083332,0.958749,-0.068185,0.017822,1.409438, + -0.240936,0.15083,0.958749,-0.061306,0.034429,1.409438, + 0,0.084475,0.996426,-0.001674,0,1.418503, + -0.193688,0.208049,0.958749,-0.050363,0.04869,1.409438, + -0.240936,0.15083,0.958749,-0.061306,0.034429,1.409438, + 0.240936,0.15083,0.958749,0.057958,0.034429,1.409438, + 0.349948,0.356994,0.866078,0.092387,0.094061,1.38286, + 0.193688,0.208049,0.958749,0.047016,0.04869,1.409438, + 0.349948,0.356994,0.866078,0.092387,0.094061,1.38286, + 0.240936,0.15083,0.958749,0.057958,0.034429,1.409438, + 0.430421,0.254256,0.866078,0.113527,0.066511,1.38286, + -0.95365,0.300918,0,-0.258653,0.068857,1.152459, + -0.858616,0.495722,-0.130526,-0.229963,0.131803,1.133935, + -0.962321,0.238552,-0.130504,-0.257428,0.068529,1.142828, + -0.858616,0.495722,-0.130526,-0.229963,0.131803,1.133935, + -0.95365,0.300918,0,-0.258653,0.068857,1.152459, + -0.843272,0.537487,0,-0.232075,0.133022,1.152459, + -0.687753,0.714118,-0.130504,-0.187366,0.185692,1.126361, + -0.537487,0.843272,0,-0.134696,0.230401,1.152459, + -0.45761,0.879539,-0.130403,-0.132598,0.226768,1.120589, + -0.537487,0.843272,0,-0.134696,0.230401,1.152459, + -0.687753,0.714118,-0.130504,-0.187366,0.185692,1.126361, + -0.707107,0.707107,0,-0.189796,0.188122,1.152459, + -0.62945,0.60815,0.48368,-0.164592,0.162918,1.285481, + -0.837235,0.481678,0.258889,-0.224224,0.12849,1.221316, + -0.768392,0.399782,0.499749,-0.201207,0.115201,1.285481, + -0.837235,0.481678,0.258889,-0.224224,0.12849,1.221316, + -0.62945,0.60815,0.48368,-0.164592,0.162918,1.285481, + -0.69037,0.69037,0.216285,-0.183386,0.181712,1.221316, + -0.843272,0.537487,0,-0.232075,0.133022,1.152459, + -0.687753,0.714118,-0.130504,-0.187366,0.185692,1.126361, + -0.858616,0.495722,-0.130526,-0.229963,0.131803,1.133935, + -0.687753,0.714118,-0.130504,-0.187366,0.185692,1.126361, + -0.843272,0.537487,0,-0.232075,0.133022,1.152459, + -0.707107,0.707107,0,-0.189796,0.188122,1.152459, + 0.063714,0.27702,0.958749,0.016148,0.066511,1.409438, + 0,0.258748,0.965945,-0.001674,0.068857,1.409438, + 0,0.084475,0.996426,-0.001674,0,1.418503, + -0.481561,0.134192,0.866078,-0.130163,0.034429,1.38286, + -0.610252,0.357007,0.707204,-0.164592,0.094061,1.340581, + -0.681859,0.186897,0.707204,-0.183386,0.04869,1.340581, + -0.610252,0.357007,0.707204,-0.164592,0.094061,1.340581, + -0.481561,0.134192,0.866078,-0.130163,0.034429,1.38286, + -0.430421,0.254256,0.866078,-0.116874,0.066511,1.38286, + -0.638521,0.571249,-0.515718,-0.164592,0.162918,1.019437, + -0.669251,0.426569,-0.608393,-0.174654,0.09987,0.979478, + -0.768392,0.399782,-0.499749,-0.201207,0.115201,1.019437, + -0.669251,0.426569,-0.608393,-0.174654,0.09987,0.979478, + -0.638521,0.571249,-0.515718,-0.164592,0.162918,1.019437, + -0.631406,0.484495,-0.605468,-0.164437,0.125955,0.989696, + -0.631406,0.484495,-0.605468,-0.164437,0.125955,0.989696, + -0.638521,0.571249,-0.515718,-0.164592,0.162918,1.019437, + -0.560986,0.560986,-0.608761,-0.154077,0.152403,1.000056, + -0.73389,0.096619,0.672361,-0.189796,0,1.340581, + -0.845681,0.187285,0.499749,-0.224224,0.059632,1.285481, + -0.860389,0.113272,0.496891,-0.232075,0,1.285481, + -0.845681,0.187285,0.499749,-0.224224,0.059632,1.285481, + -0.73389,0.096619,0.672361,-0.189796,0,1.340581, + -0.681859,0.186897,0.707204,-0.183386,0.04869,1.340581, + -0.850426,0.467839,-0.240631,-0.224224,0.12849,1.083601, + -0.638521,0.571249,-0.515718,-0.164592,0.162918,1.019437, + -0.768392,0.399782,-0.499749,-0.201207,0.115201,1.019437, + -0.638521,0.571249,-0.515718,-0.164592,0.162918,1.019437, + -0.850426,0.467839,-0.240631,-0.224224,0.12849,1.083601, + -0.684559,0.681437,-0.258889,-0.183386,0.181712,1.083601, + 0,0.084475,0.996426,-0.001674,0,1.418503, + -0.133242,0.25109,0.958749,-0.036102,0.059632,1.409438, + -0.193688,0.208049,0.958749,-0.050363,0.04869,1.409438, + 0.298349,0.945507,-0.130403,0.066855,0.255755,1.142828, + 0.461551,0.887114,0,0.131348,0.230401,1.152459, + 0.518154,0.845276,-0.130482,0.130129,0.228289,1.133935, + 0.461551,0.887114,0,0.131348,0.230401,1.152459, + 0.298349,0.945507,-0.130403,0.066855,0.255755,1.142828, + 0.233224,0.972067,0.026312,0.067184,0.256979,1.152459, + 0.001472,0.965906,0.258889,-0.001674,0.256979,1.221316, + 0.233224,0.972067,0.026312,0.067184,0.256979,1.152459, + -0.014612,0.998932,-0.043837,-0.001674,0.266045,1.152459, + 0.233224,0.972067,0.026312,0.067184,0.256979,1.152459, + 0.001472,0.965906,0.258889,-0.001674,0.256979,1.221316, + 0.251417,0.932613,0.258889,0.064837,0.248223,1.221316, + 0.179072,0.683956,0.707204,0.047016,0.181712,1.340581, + 0.017501,0.856275,0.516223,-0.001674,0.230401,1.285481, + 0,0.67533,0.737516,-0.001674,0.188122,1.340581, + 0.017501,0.856275,0.516223,-0.001674,0.230401,1.285481, + 0.179072,0.683956,0.707204,0.047016,0.181712,1.340581, + 0.260647,0.826023,0.499749,0.057958,0.222551,1.285481, + 0.124567,0.48414,0.866078,0.032755,0.12849,1.38286, + 0,0.67533,0.737516,-0.001674,0.188122,1.340581, + 0,0.461451,0.887166,-0.001674,0.133022,1.38286, + 0,0.67533,0.737516,-0.001674,0.188122,1.340581, + 0.124567,0.48414,0.866078,0.032755,0.12849,1.38286, + 0.179072,0.683956,0.707204,0.047016,0.181712,1.340581, + 0.063714,0.27702,0.958749,0.016148,0.066511,1.409438, + 0,0.461451,0.887166,-0.001674,0.133022,1.38286, + 0,0.258748,0.965945,-0.001674,0.068857,1.409438, + 0,0.461451,0.887166,-0.001674,0.133022,1.38286, + 0.063714,0.27702,0.958749,0.016148,0.066511,1.409438, + 0.124567,0.48414,0.866078,0.032755,0.12849,1.38286, + 0.017501,0.856275,0.516223,-0.001674,0.230401,1.285481, + 0.251417,0.932613,0.258889,0.064837,0.248223,1.221316, + 0.001472,0.965906,0.258889,-0.001674,0.256979,1.221316, + 0.251417,0.932613,0.258889,0.064837,0.248223,1.221316, + 0.017501,0.856275,0.516223,-0.001674,0.230401,1.285481, + 0.260647,0.826023,0.499749,0.057958,0.222551,1.285481, + 0.133242,0.25109,0.958749,0.032755,0.059632,1.409438, + 0.063714,0.27702,0.958749,0.016148,0.066511,1.409438, + 0,0.084475,0.996426,-0.001674,0,1.418503, + -0.610252,0.357007,0.707204,-0.164592,0.094061,1.340581, + -0.62945,0.60815,0.48368,-0.164592,0.162918,1.285481, + -0.768392,0.399782,0.499749,-0.201207,0.115201,1.285481, + -0.62945,0.60815,0.48368,-0.164592,0.162918,1.285481, + -0.610252,0.357007,0.707204,-0.164592,0.094061,1.340581, + -0.497058,0.502787,0.707204,-0.134696,0.133022,1.340581, + -0.540992,0.705035,-0.458534,-0.134696,0.185858,1.019437, + -0.560986,0.560986,-0.608761,-0.154077,0.152403,1.000056, + -0.638521,0.571249,-0.515718,-0.164592,0.162918,1.019437, + 0.251417,0.932613,0.258889,0.064837,0.248223,1.221316, + 0.461551,0.887114,0,0.131348,0.230401,1.152459, + 0.233224,0.972067,0.026312,0.067184,0.256979,1.152459, + 0.461551,0.887114,0,0.131348,0.230401,1.152459, + 0.251417,0.932613,0.258889,0.064837,0.248223,1.221316, + 0.484228,0.835763,0.258889,0.126816,0.222551,1.221316, + 0.260647,0.826023,0.499749,0.057958,0.222551,1.285481, + 0.484228,0.835763,0.258889,0.126816,0.222551,1.221316, + 0.251417,0.932613,0.258889,0.064837,0.248223,1.221316, + 0.484228,0.835763,0.258889,0.126816,0.222551,1.221316, + 0.260647,0.826023,0.499749,0.057958,0.222551,1.285481, + 0.465556,0.730417,0.499749,0.113527,0.199533,1.285481, + -0.684559,0.681437,-0.258889,-0.183386,0.181712,1.083601, + -0.540992,0.705035,-0.458534,-0.134696,0.185858,1.019437, + -0.638521,0.571249,-0.515718,-0.164592,0.162918,1.019437, + -0.540992,0.705035,-0.458534,-0.134696,0.185858,1.019437, + -0.684559,0.681437,-0.258889,-0.183386,0.181712,1.083601, + -0.496644,0.779191,-0.382369,-0.119932,0.204829,1.0342, + -0.496644,0.779191,-0.382369,-0.119932,0.204829,1.0342, + -0.684559,0.681437,-0.258889,-0.183386,0.181712,1.083601, + -0.508803,0.828671,-0.233292,-0.130163,0.222551,1.083601, + -0.30062,0.039577,0.952922,-0.070531,0,1.409438, + -0.481561,0.134192,0.866078,-0.130163,0.034429,1.38286, + -0.536052,0.070573,0.84123,-0.134696,0,1.38286, + -0.481561,0.134192,0.866078,-0.130163,0.034429,1.38286, + -0.30062,0.039577,0.952922,-0.070531,0,1.409438, + -0.271764,0.083332,0.958749,-0.068185,0.017822,1.409438, + 0.349991,0.614303,0.707204,0.092387,0.162918,1.340581, + 0.260647,0.826023,0.499749,0.057958,0.222551,1.285481, + 0.179072,0.683956,0.707204,0.047016,0.181712,1.340581, + 0.260647,0.826023,0.499749,0.057958,0.222551,1.285481, + 0.349991,0.614303,0.707204,0.092387,0.162918,1.340581, + 0.465556,0.730417,0.499749,0.113527,0.199533,1.285481, + 0.245627,0.435403,0.866078,0.064837,0.115201,1.38286, + 0.179072,0.683956,0.707204,0.047016,0.181712,1.340581, + 0.124567,0.48414,0.866078,0.032755,0.12849,1.38286, + 0.179072,0.683956,0.707204,0.047016,0.181712,1.340581, + 0.245627,0.435403,0.866078,0.064837,0.115201,1.38286, + 0.349991,0.614303,0.707204,0.092387,0.162918,1.340581, + 0,0.084475,0.996426,-0.001674,0,1.418503, + -0.240936,0.15083,0.958749,-0.061306,0.034429,1.409438, + -0.271764,0.083332,0.958749,-0.068185,0.017822,1.409438, + -0.837235,0.481678,0.258889,-0.224224,0.12849,1.221316, + -0.95365,0.300918,0,-0.258653,0.068857,1.152459, + -0.933374,0.248573,0.258889,-0.249897,0.066511,1.221316, + -0.95365,0.300918,0,-0.258653,0.068857,1.152459, + -0.837235,0.481678,0.258889,-0.224224,0.12849,1.221316, + -0.843272,0.537487,0,-0.232075,0.133022,1.152459, + -0.179072,0.683956,0.707204,-0.050363,0.181712,1.340581, + 0.017501,0.856275,0.516223,-0.001674,0.230401,1.285481, + -0.221372,0.83719,0.500107,-0.061306,0.222551,1.285481, + 0.017501,0.856275,0.516223,-0.001674,0.230401,1.285481, + -0.179072,0.683956,0.707204,-0.050363,0.181712,1.340581, + 0,0.67533,0.737516,-0.001674,0.188122,1.340581, + -0.193688,0.208049,0.958749,-0.050363,0.04869,1.409438, + -0.245627,0.435403,0.866078,-0.068185,0.115201,1.38286, + -0.349948,0.356994,0.866078,-0.095735,0.094061,1.38286, + -0.245627,0.435403,0.866078,-0.068185,0.115201,1.38286, + -0.193688,0.208049,0.958749,-0.050363,0.04869,1.409438, + -0.133242,0.25109,0.958749,-0.036102,0.059632,1.409438, + 0.193688,0.208049,0.958749,0.047016,0.04869,1.409438, + 0.133242,0.25109,0.958749,0.032755,0.059632,1.409438, + 0,0.084475,0.996426,-0.001674,0,1.418503, + -0.62945,0.60815,0.48368,-0.164592,0.162918,1.285481, + -0.481678,0.837235,0.258889,-0.130163,0.222551,1.221316, + -0.69037,0.69037,0.216285,-0.183386,0.181712,1.221316, + -0.481678,0.837235,0.258889,-0.130163,0.222551,1.221316, + -0.62945,0.60815,0.48368,-0.164592,0.162918,1.285481, + -0.430509,0.751368,0.500107,-0.116874,0.199533,1.285481, + 0.30062,0.039577,0.952922,0.067184,0,1.409438, + 0.481561,0.134192,0.866078,0.126816,0.034429,1.38286, + 0.271764,0.083332,0.958749,0.064837,0.017822,1.409438, + 0.481561,0.134192,0.866078,0.126816,0.034429,1.38286, + 0.30062,0.039577,0.952922,0.067184,0,1.409438, + 0.536052,0.070573,0.84123,0.131348,0,1.38286, + 0.73389,0.096619,0.672361,0.186448,0,1.340581, + 0.828725,0.200239,0.522609,0.220877,0.059632,1.285481, + 0.681859,0.186897,0.707204,0.180038,0.04869,1.340581, + 0.828725,0.200239,0.522609,0.220877,0.059632,1.285481, + 0.73389,0.096619,0.672361,0.186448,0,1.340581, + 0.881074,0.115996,0.458534,0.228728,0,1.285481, + 0.610252,0.357007,0.707204,0.161245,0.094061,1.340581, + 0.638738,0.585034,0.499749,0.161245,0.162918,1.285481, + 0.497058,0.502787,0.707204,0.131348,0.133022,1.340581, + 0.638738,0.585034,0.499749,0.161245,0.162918,1.285481, + 0.610252,0.357007,0.707204,0.161245,0.094061,1.340581, + 0.768392,0.399782,0.499749,0.19786,0.115201,1.285481, + 0.960718,0.276888,0.018801,0.255305,0.068857,1.152459, + 0.968364,0.127487,0.21452,0.255305,0,1.221316, + 0.98934,0.130249,-0.065125,0.264371,0,1.152459, + 0.968364,0.127487,0.21452,0.255305,0,1.221316, + 0.960718,0.276888,0.018801,0.255305,0.068857,1.152459, + 0.921136,0.246818,0.30098,0.246549,0.066511,1.221316, + 0.430421,0.254256,0.866078,0.113527,0.066511,1.38286, + 0.497058,0.502787,0.707204,0.131348,0.133022,1.340581, + 0.349948,0.356994,0.866078,0.092387,0.094061,1.38286, + 0.497058,0.502787,0.707204,0.131348,0.133022,1.340581, + 0.430421,0.254256,0.866078,0.113527,0.066511,1.38286, + 0.610252,0.357007,0.707204,0.161245,0.094061,1.340581, + 0.271764,0.083332,0.958749,0.064837,0.017822,1.409438, + 0.240936,0.15083,0.958749,0.057958,0.034429,1.409438, + 0,0.084475,0.996426,-0.001674,0,1.418503, + 0.193688,0.208049,0.958749,0.047016,0.04869,1.409438, + 0.245627,0.435403,0.866078,0.064837,0.115201,1.38286, + 0.133242,0.25109,0.958749,0.032755,0.059632,1.409438, + 0.245627,0.435403,0.866078,0.064837,0.115201,1.38286, + 0.193688,0.208049,0.958749,0.047016,0.04869,1.409438, + 0.349948,0.356994,0.866078,0.092387,0.094061,1.38286, + 0.536052,0.070573,0.84123,0.131348,0,1.38286, + 0.681859,0.186897,0.707204,0.180038,0.04869,1.340581, + 0.481561,0.134192,0.866078,0.126816,0.034429,1.38286, + 0.681859,0.186897,0.707204,0.180038,0.04869,1.340581, + 0.536052,0.070573,0.84123,0.131348,0,1.38286, + 0.73389,0.096619,0.672361,0.186448,0,1.340581, + 0.240936,0.15083,0.958749,0.057958,0.034429,1.409438, + 0.193688,0.208049,0.958749,0.047016,0.04869,1.409438, + 0,0.084475,0.996426,-0.001674,0,1.418503, + 0.465556,0.730417,0.499749,0.113527,0.199533,1.285481, + 0.684039,0.681958,0.258889,0.180038,0.181712,1.221316, + 0.484228,0.835763,0.258889,0.126816,0.222551,1.221316, + 0.684039,0.681958,0.258889,0.180038,0.181712,1.221316, + 0.465556,0.730417,0.499749,0.113527,0.199533,1.285481, + 0.638738,0.585034,0.499749,0.161245,0.162918,1.285481, + 0.921136,0.246818,0.30098,0.246549,0.066511,1.221316, + 0.768392,0.399782,0.499749,0.19786,0.115201,1.285481, + 0.828725,0.200239,0.522609,0.220877,0.059632,1.285481, + 0.768392,0.399782,0.499749,0.19786,0.115201,1.285481, + 0.921136,0.246818,0.30098,0.246549,0.066511,1.221316, + 0.837235,0.481678,0.258889,0.220877,0.12849,1.221316, + 0.133242,0.25109,0.958749,0.032755,0.059632,1.409438, + 0.124567,0.48414,0.866078,0.032755,0.12849,1.38286, + 0.063714,0.27702,0.958749,0.016148,0.066511,1.409438, + 0.124567,0.48414,0.866078,0.032755,0.12849,1.38286, + 0.133242,0.25109,0.958749,0.032755,0.059632,1.409438, + 0.245627,0.435403,0.866078,0.064837,0.115201,1.38286, + -0.845681,0.187285,-0.499749,-0.224224,0.059632,1.019437, + -0.789061,0.103882,-0.605468,-0.189796,0,0.964337, + -0.860389,0.113272,-0.496891,-0.232075,0,1.019437, + -0.789061,0.103882,-0.605468,-0.189796,0,0.964337, + -0.845681,0.187285,-0.499749,-0.224224,0.059632,1.019437, + -0.756851,0.23882,-0.608393,-0.186114,0.049421,0.968018, + -0.958191,0.126148,-0.256821,-0.258653,0,1.083601, + -0.845681,0.187285,-0.499749,-0.224224,0.059632,1.019437, + -0.860389,0.113272,-0.496891,-0.232075,0,1.019437, + -0.845681,0.187285,-0.499749,-0.224224,0.059632,1.019437, + -0.958191,0.126148,-0.256821,-0.258653,0,1.083601, + -0.919462,0.271766,-0.284135,-0.249897,0.066511,1.083601, + -0.845681,0.187285,0.499749,-0.224224,0.059632,1.285481, + -0.946203,0.12457,0.298635,-0.258653,0,1.221316, + -0.860389,0.113272,0.496891,-0.232075,0,1.285481, + -0.946203,0.12457,0.298635,-0.258653,0,1.221316, + -0.845681,0.187285,0.499749,-0.224224,0.059632,1.285481, + -0.933374,0.248573,0.258889,-0.249897,0.066511,1.221316, + -0.45761,0.879539,-0.130403,-0.132598,0.226768,1.120589, + -0.300918,0.95365,0,-0.070531,0.256979,1.152459, + -0.23131,0.96409,-0.130482,-0.069322,0.252467,1.116977, + -0.300918,0.95365,0,-0.070531,0.256979,1.152459, + -0.45761,0.879539,-0.130403,-0.132598,0.226768,1.120589, + -0.537487,0.843272,0,-0.134696,0.230401,1.152459, + -0.768392,0.399782,0.499749,-0.201207,0.115201,1.285481, + -0.933374,0.248573,0.258889,-0.249897,0.066511,1.221316, + -0.845681,0.187285,0.499749,-0.224224,0.059632,1.285481, + -0.933374,0.248573,0.258889,-0.249897,0.066511,1.221316, + -0.768392,0.399782,0.499749,-0.201207,0.115201,1.285481, + -0.837235,0.481678,0.258889,-0.224224,0.12849,1.221316, + -0.681859,0.186897,0.707204,-0.183386,0.04869,1.340581, + -0.768392,0.399782,0.499749,-0.201207,0.115201,1.285481, + -0.845681,0.187285,0.499749,-0.224224,0.059632,1.285481, + -0.768392,0.399782,0.499749,-0.201207,0.115201,1.285481, + -0.681859,0.186897,0.707204,-0.183386,0.04869,1.340581, + -0.610252,0.357007,0.707204,-0.164592,0.094061,1.340581, + -0.497058,0.502787,0.707204,-0.134696,0.133022,1.340581, + -0.430509,0.751368,0.500107,-0.116874,0.199533,1.285481, + -0.62945,0.60815,0.48368,-0.164592,0.162918,1.285481, + -0.430509,0.751368,0.500107,-0.116874,0.199533,1.285481, + -0.497058,0.502787,0.707204,-0.134696,0.133022,1.340581, + -0.349991,0.614303,0.707204,-0.095735,0.162918,1.340581, + -0.69037,0.69037,0.216285,-0.183386,0.181712,1.221316, + -0.537487,0.843272,0,-0.134696,0.230401,1.152459, + -0.707107,0.707107,0,-0.189796,0.188122,1.152459, + -0.537487,0.843272,0,-0.134696,0.230401,1.152459, + -0.69037,0.69037,0.216285,-0.183386,0.181712,1.221316, + -0.481678,0.837235,0.258889,-0.130163,0.222551,1.221316, + -0.349948,0.356994,0.866078,-0.095735,0.094061,1.38286, + -0.349991,0.614303,0.707204,-0.095735,0.162918,1.340581, + -0.497058,0.502787,0.707204,-0.134696,0.133022,1.340581, + -0.349991,0.614303,0.707204,-0.095735,0.162918,1.340581, + -0.349948,0.356994,0.866078,-0.095735,0.094061,1.38286, + -0.245627,0.435403,0.866078,-0.068185,0.115201,1.38286, + -0.768392,0.399782,-0.499749,-0.201207,0.115201,1.019437, + -0.756851,0.23882,-0.608393,-0.186114,0.049421,0.968018, + -0.845681,0.187285,-0.499749,-0.224224,0.059632,1.019437, + -0.756851,0.23882,-0.608393,-0.186114,0.049421,0.968018, + -0.768392,0.399782,-0.499749,-0.201207,0.115201,1.019437, + -0.669251,0.426569,-0.608393,-0.174654,0.09987,0.979478, + -0.240936,0.15083,0.958749,-0.061306,0.034429,1.409438, + -0.349948,0.356994,0.866078,-0.095735,0.094061,1.38286, + -0.430421,0.254256,0.866078,-0.116874,0.066511,1.38286, + -0.349948,0.356994,0.866078,-0.095735,0.094061,1.38286, + -0.240936,0.15083,0.958749,-0.061306,0.034429,1.409438, + -0.193688,0.208049,0.958749,-0.050363,0.04869,1.409438, + -0.430421,0.254256,0.866078,-0.116874,0.066511,1.38286, + -0.497058,0.502787,0.707204,-0.134696,0.133022,1.340581, + -0.610252,0.357007,0.707204,-0.164592,0.094061,1.340581, + -0.497058,0.502787,0.707204,-0.134696,0.133022,1.340581, + -0.430421,0.254256,0.866078,-0.116874,0.066511,1.38286, + -0.349948,0.356994,0.866078,-0.095735,0.094061,1.38286, + -0.919462,0.271766,-0.284135,-0.249897,0.066511,1.083601, + -0.768392,0.399782,-0.499749,-0.201207,0.115201,1.019437, + -0.845681,0.187285,-0.499749,-0.224224,0.059632,1.019437, + -0.768392,0.399782,-0.499749,-0.201207,0.115201,1.019437, + -0.919462,0.271766,-0.284135,-0.249897,0.066511,1.083601, + -0.850426,0.467839,-0.240631,-0.224224,0.12849,1.083601, + -0.536052,0.070573,0.84123,-0.134696,0,1.38286, + -0.681859,0.186897,0.707204,-0.183386,0.04869,1.340581, + -0.73389,0.096619,0.672361,-0.189796,0,1.340581, + -0.681859,0.186897,0.707204,-0.183386,0.04869,1.340581, + -0.536052,0.070573,0.84123,-0.134696,0,1.38286, + -0.481561,0.134192,0.866078,-0.130163,0.034429,1.38286, + -0.69037,0.69037,0.216285,-0.183386,0.181712,1.221316, + -0.843272,0.537487,0,-0.232075,0.133022,1.152459, + -0.837235,0.481678,0.258889,-0.224224,0.12849,1.221316, + -0.843272,0.537487,0,-0.232075,0.133022,1.152459, + -0.69037,0.69037,0.216285,-0.183386,0.181712,1.221316, + -0.707107,0.707107,0,-0.189796,0.188122,1.152459, + -0.124567,0.48414,0.866078,-0.036102,0.12849,1.38286, + 0,0.67533,0.737516,-0.001674,0.188122,1.340581, + -0.179072,0.683956,0.707204,-0.050363,0.181712,1.340581, + 0,0.67533,0.737516,-0.001674,0.188122,1.340581, + -0.124567,0.48414,0.866078,-0.036102,0.12849,1.38286, + 0,0.461451,0.887166,-0.001674,0.133022,1.38286, + -0.221372,0.83719,0.500107,-0.061306,0.222551,1.285481, + 0.001472,0.965906,0.258889,-0.001674,0.256979,1.221316, + -0.248573,0.933374,0.258889,-0.068185,0.248223,1.221316, + 0.001472,0.965906,0.258889,-0.001674,0.256979,1.221316, + -0.221372,0.83719,0.500107,-0.061306,0.222551,1.285481, + 0.017501,0.856275,0.516223,-0.001674,0.230401,1.285481, + -0.248573,0.933374,0.258889,-0.068185,0.248223,1.221316, + -0.014612,0.998932,-0.043837,-0.001674,0.266045,1.152459, + -0.300918,0.95365,0,-0.070531,0.256979,1.152459, + -0.014612,0.998932,-0.043837,-0.001674,0.266045,1.152459, + -0.248573,0.933374,0.258889,-0.068185,0.248223,1.221316, + 0.001472,0.965906,0.258889,-0.001674,0.256979,1.221316, + -0.133242,0.25109,0.958749,-0.036102,0.059632,1.409438, + -0.124567,0.48414,0.866078,-0.036102,0.12849,1.38286, + -0.245627,0.435403,0.866078,-0.068185,0.115201,1.38286, + -0.124567,0.48414,0.866078,-0.036102,0.12849,1.38286, + -0.133242,0.25109,0.958749,-0.036102,0.059632,1.409438, + -0.063714,0.27702,0.958749,-0.019495,0.066511,1.409438, + -0.245627,0.435403,0.866078,-0.068185,0.115201,1.38286, + -0.179072,0.683956,0.707204,-0.050363,0.181712,1.340581, + -0.349991,0.614303,0.707204,-0.095735,0.162918,1.340581, + -0.179072,0.683956,0.707204,-0.050363,0.181712,1.340581, + -0.245627,0.435403,0.866078,-0.068185,0.115201,1.38286, + -0.124567,0.48414,0.866078,-0.036102,0.12849,1.38286, + -0.349991,0.614303,0.707204,-0.095735,0.162918,1.340581, + -0.221372,0.83719,0.500107,-0.061306,0.222551,1.285481, + -0.430509,0.751368,0.500107,-0.116874,0.199533,1.285481, + -0.221372,0.83719,0.500107,-0.061306,0.222551,1.285481, + -0.349991,0.614303,0.707204,-0.095735,0.162918,1.340581, + -0.179072,0.683956,0.707204,-0.050363,0.181712,1.340581, + 0,0.084475,0.996426,-0.001674,0,1.418503, + 0,0.258748,0.965945,-0.001674,0.068857,1.409438, + -0.063714,0.27702,0.958749,-0.019495,0.066511,1.409438, + 0,0.084475,0.996426,-0.001674,0,1.418503, + -0.063714,0.27702,0.958749,-0.019495,0.066511,1.409438, + -0.133242,0.25109,0.958749,-0.036102,0.059632,1.409438, + -0.373774,0.902371,-0.21452,-0.070531,0.247251,1.083601, + -0.496644,0.779191,-0.382369,-0.119932,0.204829,1.0342, + -0.508803,0.828671,-0.233292,-0.130163,0.222551,1.083601, + 0,0.084475,0.996426,-0.001674,0,1.418503, + -0.271764,0.083332,0.958749,-0.068185,0.017822,1.409438, + -0.30062,0.039577,0.952922,-0.070531,0,1.409438, + -0.23131,0.96409,-0.130482,-0.069322,0.252467,1.116977, + -0.014612,0.998932,-0.043837,-0.001674,0.266045,1.152459, + -0.129428,0.983106,-0.129428,-0.03773,0.256551,1.116403, + -0.014612,0.998932,-0.043837,-0.001674,0.266045,1.152459, + -0.23131,0.96409,-0.130482,-0.069322,0.252467,1.116977, + -0.300918,0.95365,0,-0.070531,0.256979,1.152459, + -0.430509,0.751368,0.500107,-0.116874,0.199533,1.285481, + -0.248573,0.933374,0.258889,-0.068185,0.248223,1.221316, + -0.481678,0.837235,0.258889,-0.130163,0.222551,1.221316, + -0.248573,0.933374,0.258889,-0.068185,0.248223,1.221316, + -0.430509,0.751368,0.500107,-0.116874,0.199533,1.285481, + -0.221372,0.83719,0.500107,-0.061306,0.222551,1.285481, + -0.481678,0.837235,0.258889,-0.130163,0.222551,1.221316, + -0.300918,0.95365,0,-0.070531,0.256979,1.152459, + -0.537487,0.843272,0,-0.134696,0.230401,1.152459, + -0.300918,0.95365,0,-0.070531,0.256979,1.152459, + -0.481678,0.837235,0.258889,-0.130163,0.222551,1.221316, + -0.248573,0.933374,0.258889,-0.068185,0.248223,1.221316, + 0.484228,0.835763,0.258889,0.126816,0.222551,1.221316, + 0.675426,0.737428,0,0.186448,0.188122,1.152459, + 0.461551,0.887114,0,0.131348,0.230401,1.152459, + 0.675426,0.737428,0,0.186448,0.188122,1.152459, + 0.484228,0.835763,0.258889,0.126816,0.222551,1.221316, + 0.684039,0.681958,0.258889,0.180038,0.181712,1.221316, + 0.960718,0.276888,0.018801,0.255305,0.068857,1.152459, + 0.98934,0.130249,-0.065125,0.264371,0,1.152459, + 0.950582,0.281725,-0.130482,0.254081,0.068529,1.142828, + 0.30062,0.039577,0.952922,0.067184,0,1.409438, + 0.271764,0.083332,0.958749,0.064837,0.017822,1.409438, + 0,0.084475,0.996426,-0.001674,0,1.418503, + 0.719272,0.682366,-0.130482,0.184019,0.185692,1.126361, + 0.843272,0.537487,0,0.228728,0.133022,1.152459, + 0.871372,0.472954,-0.130482,0.226616,0.131803,1.133935, + 0.843272,0.537487,0,0.228728,0.133022,1.152459, + 0.719272,0.682366,-0.130482,0.184019,0.185692,1.126361, + 0.675426,0.737428,0,0.186448,0.188122,1.152459, + 0.233224,0.972067,0.026312,0.067184,0.256979,1.152459, + 0.298349,0.945507,-0.130403,0.066855,0.255755,1.142828, + -0.014612,0.998932,-0.043837,-0.001674,0.266045,1.152459, + -0.063714,0.27702,0.958749,-0.019495,0.066511,1.409438, + 0,0.461451,0.887166,-0.001674,0.133022,1.38286, + -0.124567,0.48414,0.866078,-0.036102,0.12849,1.38286, + 0,0.461451,0.887166,-0.001674,0.133022,1.38286, + -0.063714,0.27702,0.958749,-0.019495,0.066511,1.409438, + 0,0.258748,0.965945,-0.001674,0.068857,1.409438, + 0.518154,0.845276,-0.130482,0.130129,0.228289,1.133935, + 0.675426,0.737428,0,0.186448,0.188122,1.152459, + 0.719272,0.682366,-0.130482,0.184019,0.185692,1.126361, + 0.675426,0.737428,0,0.186448,0.188122,1.152459, + 0.518154,0.845276,-0.130482,0.130129,0.228289,1.133935, + 0.461551,0.887114,0,0.131348,0.230401,1.152459, + 0.843272,0.537487,0,0.228728,0.133022,1.152459, + 0.684039,0.681958,0.258889,0.180038,0.181712,1.221316, + 0.837235,0.481678,0.258889,0.220877,0.12849,1.221316, + 0.684039,0.681958,0.258889,0.180038,0.181712,1.221316, + 0.843272,0.537487,0,0.228728,0.133022,1.152459, + 0.675426,0.737428,0,0.186448,0.188122,1.152459, + 0.349948,0.356994,0.866078,0.092387,0.094061,1.38286, + 0.349991,0.614303,0.707204,0.092387,0.162918,1.340581, + 0.245627,0.435403,0.866078,0.064837,0.115201,1.38286, + 0.349991,0.614303,0.707204,0.092387,0.162918,1.340581, + 0.349948,0.356994,0.866078,0.092387,0.094061,1.38286, + 0.497058,0.502787,0.707204,0.131348,0.133022,1.340581, + 0.837235,0.481678,0.258889,0.220877,0.12849,1.221316, + 0.638738,0.585034,0.499749,0.161245,0.162918,1.285481, + 0.768392,0.399782,0.499749,0.19786,0.115201,1.285481, + 0.638738,0.585034,0.499749,0.161245,0.162918,1.285481, + 0.837235,0.481678,0.258889,0.220877,0.12849,1.221316, + 0.684039,0.681958,0.258889,0.180038,0.181712,1.221316, + 0.960718,0.276888,0.018801,0.255305,0.068857,1.152459, + 0.837235,0.481678,0.258889,0.220877,0.12849,1.221316, + 0.921136,0.246818,0.30098,0.246549,0.066511,1.221316, + 0.837235,0.481678,0.258889,0.220877,0.12849,1.221316, + 0.960718,0.276888,0.018801,0.255305,0.068857,1.152459, + 0.843272,0.537487,0,0.228728,0.133022,1.152459, + 0.871372,0.472954,-0.130482,0.226616,0.131803,1.133935, + 0.960718,0.276888,0.018801,0.255305,0.068857,1.152459, + 0.950582,0.281725,-0.130482,0.254081,0.068529,1.142828, + 0.960718,0.276888,0.018801,0.255305,0.068857,1.152459, + 0.871372,0.472954,-0.130482,0.226616,0.131803,1.133935, + 0.843272,0.537487,0,0.228728,0.133022,1.152459, + 0.681859,0.186897,0.707204,0.180038,0.04869,1.340581, + 0.768392,0.399782,0.499749,0.19786,0.115201,1.285481, + 0.610252,0.357007,0.707204,0.161245,0.094061,1.340581, + 0.768392,0.399782,0.499749,0.19786,0.115201,1.285481, + 0.681859,0.186897,0.707204,0.180038,0.04869,1.340581, + 0.828725,0.200239,0.522609,0.220877,0.059632,1.285481, + 0.497058,0.502787,0.707204,0.131348,0.133022,1.340581, + 0.465556,0.730417,0.499749,0.113527,0.199533,1.285481, + 0.349991,0.614303,0.707204,0.092387,0.162918,1.340581, + 0.465556,0.730417,0.499749,0.113527,0.199533,1.285481, + 0.497058,0.502787,0.707204,0.131348,0.133022,1.340581, + 0.638738,0.585034,0.499749,0.161245,0.162918,1.285481, + 0.481561,0.134192,0.866078,0.126816,0.034429,1.38286, + 0.610252,0.357007,0.707204,0.161245,0.094061,1.340581, + 0.430421,0.254256,0.866078,0.113527,0.066511,1.38286, + 0.610252,0.357007,0.707204,0.161245,0.094061,1.340581, + 0.481561,0.134192,0.866078,0.126816,0.034429,1.38286, + 0.681859,0.186897,0.707204,0.180038,0.04869,1.340581, + 0.271764,0.083332,0.958749,0.064837,0.017822,1.409438, + 0.430421,0.254256,0.866078,0.113527,0.066511,1.38286, + 0.240936,0.15083,0.958749,0.057958,0.034429,1.409438, + 0.430421,0.254256,0.866078,0.113527,0.066511,1.38286, + 0.271764,0.083332,0.958749,0.064837,0.017822,1.409438, + 0.481561,0.134192,0.866078,0.126816,0.034429,1.38286, + 0.921136,0.246818,0.30098,0.246549,0.066511,1.221316, + 0.881074,0.115996,0.458534,0.228728,0,1.285481, + 0.968364,0.127487,0.21452,0.255305,0,1.221316, + 0.881074,0.115996,0.458534,0.228728,0,1.285481, + 0.921136,0.246818,0.30098,0.246549,0.066511,1.221316, + 0.828725,0.200239,0.522609,0.220877,0.059632,1.285481, + 0,0,-1,-0.309053,0.082357,-0.029987, + 0,0,-1,-0.001696,0,-0.029987, + 0,0,-1,-0.319896,0,-0.029987, + 0,0,-1,-0.001696,0,-0.029987, + 0,0,-1,-0.309053,0.082357,-0.029987, + 0,0,-1,-0.277265,0.1591,-0.029987, + 0,0,-1,-0.001696,0,-0.029987, + 0,0,-1,-0.277265,0.1591,-0.029987, + 0,0,-1,-0.226697,0.225002,-0.029987, + 0,0,-1,-0.001696,0,-0.029987, + 0,0,-1,-0.226697,0.225002,-0.029987, + 0,0,-1,-0.160795,0.275569,-0.029987, + 0,0,-1,-0.001696,0,-0.029987, + 0,0,-1,-0.160795,0.275569,-0.029987, + 0,0,-1,-0.084051,0.307358,-0.029987, + 0,0,-1,-0.001696,0,-0.029987, + 0,0,-1,-0.084051,0.307358,-0.029987, + 0,0,-1,-0.001695,0.3182,-0.029987, + 0,0,-1,-0.001696,0,-0.029987, + 0,0,-1,-0.001695,0.3182,-0.029987, + 0,0,-1,-0.00158,0,-0.029987, + 0,0,-1,-0.00158,0,-0.029987, + 0,0,-1,-0.001695,0.3182,-0.029987, + 0,0,-1,0.080661,0.307357,-0.029987, + 0,0,-1,-0.00158,0,-0.029987, + 0,0,-1,0.080661,0.307357,-0.029987, + 0,0,-1,0,0,-0.029987, + 0,0,-1,0,0,-0.029987, + 0,0,-1,0.080661,0.307357,-0.029987, + 0,0,-1,0.316504,0,-0.029987, + 0,0,-1,0.316504,0,-0.029987, + 0,0,-1,0.080661,0.307357,-0.029987, + 0,0,-1,0.157405,0.275569,-0.029987, + 0,0,-1,0.316504,0,-0.029987, + 0,0,-1,0.157405,0.275569,-0.029987, + 0,0,-1,0.223306,0.225001,-0.029987, + 0,0,-1,0.316504,0,-0.029987, + 0,0,-1,0.223306,0.225001,-0.029987, + 0,0,-1,0.273874,0.1591,-0.029987, + 0,0,-1,0.316504,0,-0.029987, + 0,0,-1,0.273874,0.1591,-0.029987, + 0,0,-1,0.305662,0.082356,-0.029987, + -0.933374,0.248573,0.258889,-0.249897,0.066511,1.221316, + -0.991445,0.130526,0,-0.267718,0,1.152459, + -0.946203,0.12457,0.298635,-0.258653,0,1.221316, + -0.991445,0.130526,0,-0.267718,0,1.152459, + -0.933374,0.248573,0.258889,-0.249897,0.066511,1.221316, + -0.95365,0.300918,0,-0.258653,0.068857,1.152459, + -0.95365,0.300918,0,-0.258653,0.068857,1.152459, + -0.962321,0.238552,-0.130504,-0.257428,0.068529,1.142828, + -0.991445,0.130526,0,-0.267718,0,1.152459, + 0.298349,0.945507,-0.130403,0.066855,0.255755,1.142828, + 0.45761,0.879539,-0.130403,0.129251,0.226768,1.120589, + 0.214376,0.968007,-0.130403,0.065975,0.252467,1.116977, + 0.45761,0.879539,-0.130403,0.129251,0.226768,1.120589, + 0.298349,0.945507,-0.130403,0.066855,0.255755,1.142828, + 0.518154,0.845276,-0.130482,0.130129,0.228289,1.133935, + 0.518154,0.845276,-0.130482,0.130129,0.228289,1.133935, + 0.719272,0.682366,-0.130482,0.184019,0.185692,1.126361, + 0.45761,0.879539,-0.130403,0.129251,0.226768,1.120589, + -0.014612,0.998932,-0.043837,-0.001674,0.266045,1.152459, + 0,0.991445,-0.130526,-0.001674,0.261211,1.115748, + -0.129428,0.983106,-0.129428,-0.03773,0.256551,1.116403, + -0.014612,0.998932,-0.043837,-0.001674,0.266045,1.152459, + 0.214376,0.968007,-0.130403,0.065975,0.252467,1.116977, + 0,0.991445,-0.130526,-0.001674,0.261211,1.115748, + 0.214376,0.968007,-0.130403,0.065975,0.252467,1.116977, + -0.014612,0.998932,-0.043837,-0.001674,0.266045,1.152459, + 0.298349,0.945507,-0.130403,0.066855,0.255755,1.142828, + 0.719272,0.682366,-0.130482,0.184019,0.185692,1.126361, + 0.871372,0.472954,-0.130482,0.226616,0.131803,1.133935, + 0.879539,0.45761,-0.130403,0.225094,0.130924,1.120589, + -0.479491,0.867789,-0.130504,-0.13228,0.226216,1.115748, + -0.373774,0.902371,-0.21452,-0.070531,0.247251,1.083601, + -0.508803,0.828671,-0.233292,-0.130163,0.222551,1.083601, + -0.373774,0.902371,-0.21452,-0.070531,0.247251,1.083601, + -0.479491,0.867789,-0.130504,-0.13228,0.226216,1.115748, + -0.298349,0.945507,-0.130403,-0.068262,0.248511,1.08587, + -0.298349,0.945507,-0.130403,-0.068262,0.248511,1.08587, + -0.479491,0.867789,-0.130504,-0.13228,0.226216,1.115748, + -0.281725,0.950582,-0.130482,-0.06928,0.252311,1.115748, + -0.281725,0.950582,-0.130482,-0.06928,0.252311,1.115748, + -0.479491,0.867789,-0.130504,-0.13228,0.226216,1.115748, + -0.45761,0.879539,-0.130403,-0.132598,0.226768,1.120589, + -0.281725,0.950582,-0.130482,-0.06928,0.252311,1.115748, + -0.45761,0.879539,-0.130403,-0.132598,0.226768,1.120589, + -0.23131,0.96409,-0.130482,-0.069322,0.252467,1.116977, + -0.603641,0.78668,-0.129428,-0.186378,0.184704,1.115748, + -0.508803,0.828671,-0.233292,-0.130163,0.222551,1.083601, + -0.684559,0.681437,-0.258889,-0.183386,0.181712,1.083601, + -0.508803,0.828671,-0.233292,-0.130163,0.222551,1.083601, + -0.603641,0.78668,-0.129428,-0.186378,0.184704,1.115748, + -0.479491,0.867789,-0.130504,-0.13228,0.226216,1.115748, + -0.479491,0.867789,-0.130504,-0.13228,0.226216,1.115748, + -0.603641,0.78668,-0.129428,-0.186378,0.184704,1.115748, + -0.687753,0.714118,-0.130504,-0.187366,0.185692,1.126361, + -0.479491,0.867789,-0.130504,-0.13228,0.226216,1.115748, + -0.687753,0.714118,-0.130504,-0.187366,0.185692,1.126361, + -0.45761,0.879539,-0.130403,-0.132598,0.226768,1.120589, + -0.916109,0.379465,-0.129428,-0.253985,0.067606,1.115748, + -0.850426,0.467839,-0.240631,-0.224224,0.12849,1.083601, + -0.919462,0.271766,-0.284135,-0.249897,0.066511,1.083601, + -0.850426,0.467839,-0.240631,-0.224224,0.12849,1.083601, + -0.916109,0.379465,-0.129428,-0.253985,0.067606,1.115748, + -0.962321,0.238552,-0.130504,-0.257428,0.068529,1.142828, + -0.850426,0.467839,-0.240631,-0.224224,0.12849,1.083601, + -0.962321,0.238552,-0.130504,-0.257428,0.068529,1.142828, + -0.858616,0.495722,-0.130526,-0.229963,0.131803,1.133935, + -0.431564,-0.902025,0.010166,-0.224224,0.12849,1.083601, + -0.431564,-0.902025,0.010166,-0.229963,0.131803,1.133935, + -0.431564,-0.902025,0.010166,-0.22789,0.130606,1.115748, + -0.962321,0.238552,-0.130504,-0.257428,0.068529,1.142828, + -0.983106,0.129428,-0.129428,-0.262885,0,1.115748, + -0.991445,0.130526,0,-0.267718,0,1.152459, + -0.983106,0.129428,-0.129428,-0.262885,0,1.115748, + -0.962321,0.238552,-0.130504,-0.257428,0.068529,1.142828, + -0.958191,0.126148,-0.256821,-0.258653,0,1.083601, + -0.958191,0.126148,-0.256821,-0.258653,0,1.083601, + -0.962321,0.238552,-0.130504,-0.257428,0.068529,1.142828, + -0.919462,0.271766,-0.284135,-0.249897,0.066511,1.083601, + -0.302618,-0.953093,-0.006007,-0.249897,0.066511,1.083601, + -0.302618,-0.953093,-0.006007,-0.257428,0.068529,1.142828, + -0.302618,-0.953093,-0.006007,-0.253985,0.067606,1.115748, + 0.139173,0,0.990268,0.225094,0.130924,1.120589, + 0.116285,0.023258,0.992944,0.262631,0.264326,1.115313, + 0.046579,0.093184,0.994559,0.184019,0.185692,1.126361, + 0.116285,0.023258,0.992944,0.262631,0.264326,1.115313, + 0.139173,0,0.990268,0.225094,0.130924,1.120589, + 0.139173,0,0.990268,0.250793,0.067648,1.116977, + 0.116285,0.023258,0.992944,0.262631,0.264326,1.115313, + 0.139173,0,0.990268,0.250793,0.067648,1.116977, + 0.139173,0,0.990268,0.259538,0,1.115748, + 0.116285,0.023258,0.992944,0.262631,0.264326,1.115313, + 0.139173,0,0.990268,0.259538,0,1.115748, + 0.139173,0,0.990268,0.371895,0,1.099957, + 0.116285,0.023258,0.992944,0.262631,0.264326,1.115313, + 0.139173,0,0.990268,0.371895,0,1.099957, + 0.139173,0,0.990268,0.321932,0.186846,1.106979, + 0.139173,0,0.990268,0.321932,0.186846,1.106979, + 0.139173,0,0.990268,0.371895,0,1.099957, + 0.139173,0,0.990268,0.35919,0.096699,1.101743, + -0.78668,0.603641,-0.129428,-0.22789,0.130606,1.115748, + -0.684559,0.681437,-0.258889,-0.183386,0.181712,1.083601, + -0.850426,0.467839,-0.240631,-0.224224,0.12849,1.083601, + -0.684559,0.681437,-0.258889,-0.183386,0.181712,1.083601, + -0.78668,0.603641,-0.129428,-0.22789,0.130606,1.115748, + -0.858616,0.495722,-0.130526,-0.229963,0.131803,1.133935, + -0.684559,0.681437,-0.258889,-0.183386,0.181712,1.083601, + -0.858616,0.495722,-0.130526,-0.229963,0.131803,1.133935, + -0.687753,0.714118,-0.130504,-0.187366,0.185692,1.126361, + -0.593496,-0.804597,0.019678,-0.183386,0.181712,1.083601, + -0.593496,-0.804597,0.019678,-0.187366,0.185692,1.126361, + -0.593496,-0.804597,0.019678,-0.186378,0.184704,1.115748, + 0.968007,0.214376,-0.130403,0.250793,0.067648,1.116977, + 0.98934,0.130249,-0.065125,0.264371,0,1.152459, + 0.983106,0.129428,-0.129428,0.259538,0,1.115748, + 0.98934,0.130249,-0.065125,0.264371,0,1.152459, + 0.968007,0.214376,-0.130403,0.250793,0.067648,1.116977, + 0.950582,0.281725,-0.130482,0.254081,0.068529,1.142828, + -0.707107,0,0.707107,-0.189796,0,0.964337, + -0.707107,0,0.707107,-0.358292,0.09555,0.795841, + -0.707107,0,0.707107,-0.370691,0,0.783442, + -0.707107,0,0.707107,-0.358292,0.09555,0.795841, + -0.707107,0,0.707107,-0.189796,0,0.964337, + -0.707107,0,0.707107,-0.321869,0.184852,0.832264, + -0.707107,0,0.707107,-0.321869,0.184852,0.832264, + -0.707107,0,0.707107,-0.189796,0,0.964337, + -0.707107,0,0.707107,-0.291911,0.224602,0.862221, + -0.707107,0,0.707107,-0.291911,0.224602,0.862221, + -0.707107,0,0.707107,-0.189796,0,0.964337, + -0.707107,0,0.707107,-0.263713,0.262018,0.89042, + -0.707107,0,0.707107,-0.263713,0.262018,0.89042, + -0.707107,0,0.707107,-0.189796,0,0.964337, + -0.707107,0,0.707107,-0.187523,0.321863,0.96661, + -0.707107,0,0.707107,-0.187523,0.321863,0.96661, + -0.707107,0,0.707107,-0.189796,0,0.964337, + -0.707107,0,0.707107,-0.186114,0.049421,0.968018, + -0.707107,0,0.707107,-0.187523,0.321863,0.96661, + -0.707107,0,0.707107,-0.186114,0.049421,0.968018, + -0.707107,0,0.707107,-0.174654,0.09987,0.979478, + -0.707107,0,0.707107,-0.187523,0.321863,0.96661, + -0.707107,0,0.707107,-0.174654,0.09987,0.979478, + -0.707116,-0.000005,0.707098,-0.098222,0.360243,1.055911, + -0.707116,-0.000005,0.707098,-0.098222,0.360243,1.055911, + -0.707107,0,0.707107,-0.174654,0.09987,0.979478, + -0.707107,0,0.707107,-0.164437,0.125955,0.989696, + -0.707116,-0.000005,0.707098,-0.098222,0.360243,1.055911, + -0.707107,0,0.707107,-0.164437,0.125955,0.989696, + -0.707107,0,0.707107,-0.154077,0.152403,1.000056, + -0.707116,-0.000005,0.707098,-0.098222,0.360243,1.055911, + -0.707107,0,0.707107,-0.154077,0.152403,1.000056, + -0.707107,0,0.707107,-0.134696,0.185858,1.019437, + -0.707116,-0.000005,0.707098,-0.098222,0.360243,1.055911, + -0.707107,0,0.707107,-0.134696,0.185858,1.019437, + -0.707107,0,0.707107,-0.119932,0.204829,1.0342, + -0.707116,-0.000005,0.707098,-0.098222,0.360243,1.055911, + -0.707107,0,0.707107,-0.119932,0.204829,1.0342, + -0.707123,-0.000029,0.70709,-0.070531,0.247251,1.083601, + -0.707116,-0.000005,0.707098,-0.098222,0.360243,1.055911, + -0.707123,-0.000029,0.70709,-0.070531,0.247251,1.083601, + -0.707121,-0.000046,0.707093,-0.053235,0.366819,1.100906, + -0.707121,-0.000046,0.707093,-0.053235,0.366819,1.100906, + -0.707123,-0.000029,0.70709,-0.070531,0.247251,1.083601, + -0.707096,-0.000054,0.707118,-0.068262,0.248511,1.08587, + -0.707121,-0.000046,0.707093,-0.053235,0.366819,1.100906, + -0.707096,-0.000054,0.707118,-0.068262,0.248511,1.08587, + -0.7071,-0.000053,0.707114,-0.03773,0.256551,1.116403, + 0.879539,0.45761,-0.130403,0.225094,0.130924,1.120589, + 0.950582,0.281725,-0.130482,0.254081,0.068529,1.142828, + 0.968007,0.214376,-0.130403,0.250793,0.067648,1.116977, + 0.950582,0.281725,-0.130482,0.254081,0.068529,1.142828, + 0.879539,0.45761,-0.130403,0.225094,0.130924,1.120589, + 0.871372,0.472954,-0.130482,0.226616,0.131803,1.133935, + -0.281725,0.950582,-0.130482,-0.06928,0.252311,1.115748, + -0.129428,0.983106,-0.129428,-0.03773,0.256551,1.116403, + -0.298349,0.945507,-0.130403,-0.068262,0.248511,1.08587, + -0.129428,0.983106,-0.129428,-0.03773,0.256551,1.116403, + -0.281725,0.950582,-0.130482,-0.06928,0.252311,1.115748, + -0.23131,0.96409,-0.130482,-0.069322,0.252467,1.116977, + 0,0.139173,0.990268,-0.03773,0.256551,1.116403, + 0,0.139173,0.990268,-0.001695,0.373591,1.099954, + 0,0.139173,0.990268,-0.053235,0.366819,1.100906, + 0,0.139173,0.990268,-0.001695,0.373591,1.099954, + 0,0.139173,0.990268,-0.03773,0.256551,1.116403, + 0,0.139173,0.990268,-0.001674,0.261211,1.115748, + 0,0.139173,0.990268,-0.001695,0.373591,1.099954, + 0,0.139173,0.990268,-0.001674,0.261211,1.115748, + 0,0.139173,0.990268,0.095004,0.360886,1.10174, + 0,0.139173,0.990268,0.095004,0.360886,1.10174, + 0,0.139173,0.990268,-0.001674,0.261211,1.115748, + 0,0.139173,0.990268,0.065975,0.252467,1.116977, + 0,0.139173,0.990268,0.095004,0.360886,1.10174, + 0,0.139173,0.990268,0.065975,0.252467,1.116977, + 0,0.139173,0.990268,0.129251,0.226768,1.120589, + 0,0.139173,0.990268,0.095004,0.360886,1.10174, + 0,0.139173,0.990268,0.129251,0.226768,1.120589, + -0.000013,0.139173,0.990268,0.185151,0.323627,1.106976, + -0.000013,0.139173,0.990268,0.185151,0.323627,1.106976, + 0,0.139173,0.990268,0.129251,0.226768,1.120589, + 0.046579,0.093184,0.994559,0.184019,0.185692,1.126361, + -0.000013,0.139173,0.990268,0.185151,0.323627,1.106976, + 0.046579,0.093184,0.994559,0.184019,0.185692,1.126361, + 0.116285,0.023258,0.992944,0.262631,0.264326,1.115313, + -0.97404,0.217777,-0.061794,-0.309053,0.082357,-0.029987, + -0.98955,0.130278,-0.061793,-0.319896,0,-0.029987, + -0.989173,0.133263,-0.061463,-0.370691,0,0.783442, + -0.949542,0.307659,-0.060957,-0.358292,0.09555,0.795841, + -0.97404,0.217777,-0.061794,-0.309053,0.082357,-0.029987, + -0.989173,0.133263,-0.061463,-0.370691,0,0.783442, + -0.660522,0.748734,-0.055749,-0.263713,0.262018,0.89042, + -0.528009,0.847482,-0.054603,-0.160795,0.275569,-0.029987, + -0.742333,0.667567,-0.057413,-0.226697,0.225002,-0.029987, + -0.442076,0.895438,-0.052531,-0.187523,0.321863,0.96661, + -0.528009,0.847482,-0.054603,-0.160795,0.275569,-0.029987, + -0.660522,0.748734,-0.055749,-0.263713,0.262018,0.89042, + -0.442076,0.895438,-0.052531,-0.187523,0.321863,0.96661, + -0.290009,0.955643,-0.051395,-0.084051,0.307358,-0.029987, + -0.528009,0.847482,-0.054603,-0.160795,0.275569,-0.029987, + -0.182842,0.982288,-0.040983,-0.098222,0.360243,1.055911, + -0.290009,0.955643,-0.051395,-0.084051,0.307358,-0.029987, + -0.442076,0.895438,-0.052531,-0.187523,0.321863,0.96661, + -0.882868,0.465741,-0.060243,-0.277265,0.1591,-0.029987, + -0.97404,0.217777,-0.061794,-0.309053,0.082357,-0.029987, + -0.949542,0.307659,-0.060957,-0.358292,0.09555,0.795841, + -0.834162,0.548386,-0.058709,-0.321869,0.184852,0.832264, + -0.882868,0.465741,-0.060243,-0.277265,0.1591,-0.029987, + -0.949542,0.307659,-0.060957,-0.358292,0.09555,0.795841, + 0.706271,0.706269,-0.048625,0.223306,0.225001,-0.029987, + 0.841431,0.538172,-0.048629,0.321932,0.186846,1.106979, + 0.885777,0.461542,-0.048757,0.273874,0.1591,-0.029987, + 0.706276,0.706273,-0.048501,0.262631,0.264326,1.115313, + 0.841431,0.538172,-0.048629,0.321932,0.186846,1.106979, + 0.706271,0.706269,-0.048625,0.223306,0.225001,-0.029987, + -0.742333,0.667567,-0.057413,-0.226697,0.225002,-0.029987, + -0.882868,0.465741,-0.060243,-0.277265,0.1591,-0.029987, + -0.834162,0.548386,-0.058709,-0.321869,0.184852,0.832264, + 0.538174,0.84143,-0.048629,0.185151,0.323627,1.106976, + 0.706271,0.706269,-0.048625,0.223306,0.225001,-0.029987, + 0.461545,0.885776,-0.048757,0.157405,0.275569,-0.029987, + 0.706276,0.706273,-0.048501,0.262631,0.264326,1.115313, + 0.706271,0.706269,-0.048625,0.223306,0.225001,-0.029987, + 0.538174,0.84143,-0.048629,0.185151,0.323627,1.106976, + -0.182842,0.982288,-0.040983,-0.098222,0.360243,1.055911, + -0.038606,0.998033,-0.04939,-0.001695,0.3182,-0.029987, + -0.290009,0.955643,-0.051395,-0.084051,0.307358,-0.029987, + 0.003996,0.999178,-0.040348,-0.001695,0.373591,1.099954, + -0.038606,0.998033,-0.04939,-0.001695,0.3182,-0.029987, + -0.182842,0.982288,-0.040983,-0.098222,0.360243,1.055911, + -0.130511,0.991342,-0.014393,-0.053235,0.366819,1.100906, + 0.003996,0.999178,-0.040348,-0.001695,0.373591,1.099954, + -0.182842,0.982288,-0.040983,-0.098222,0.360243,1.055911, + -0.776405,0.627699,-0.056469,-0.291911,0.224602,0.862221, + -0.742333,0.667567,-0.057413,-0.226697,0.225002,-0.029987, + -0.834162,0.548386,-0.058709,-0.321869,0.184852,0.832264, + -0.742333,0.667567,-0.057413,-0.226697,0.225002,-0.029987, + -0.776405,0.627699,-0.056469,-0.291911,0.224602,0.862221, + -0.660522,0.748734,-0.055749,-0.263713,0.262018,0.89042, + 0.003996,0.999178,-0.040348,-0.001695,0.373591,1.099954, + 0.216169,0.975132,-0.048879,0.080661,0.307357,-0.029987, + -0.038606,0.998033,-0.04939,-0.001695,0.3182,-0.029987, + 0.216169,0.975132,-0.048879,0.080661,0.307357,-0.029987, + 0.003996,0.999178,-0.040348,-0.001695,0.373591,1.099954, + 0.30134,0.952267,-0.048814,0.095004,0.360886,1.10174, + 0.885777,0.461542,-0.048757,0.273874,0.1591,-0.029987, + 0.952267,0.301337,-0.048814,0.35919,0.096699,1.101743, + 0.975132,0.216167,-0.048879,0.305662,0.082356,-0.029987, + 0.841431,0.538172,-0.048629,0.321932,0.186846,1.106979, + 0.952267,0.301337,-0.048814,0.35919,0.096699,1.101743, + 0.885777,0.461542,-0.048757,0.273874,0.1591,-0.029987, + 0.30134,0.952267,-0.048814,0.095004,0.360886,1.10174, + 0.461545,0.885776,-0.048757,0.157405,0.275569,-0.029987, + 0.216169,0.975132,-0.048879,0.080661,0.307357,-0.029987, + 0.538174,0.84143,-0.048629,0.185151,0.323627,1.106976, + 0.461545,0.885776,-0.048757,0.157405,0.275569,-0.029987, + 0.30134,0.952267,-0.048814,0.095004,0.360886,1.10174, + 0.975132,0.216167,-0.048879,0.305662,0.082356,-0.029987, + 0.990237,0.130681,-0.048519,0.371895,0,1.099957, + 0.990276,0.130371,-0.048544,0.316504,0,-0.029987, + 0.990237,0.130681,-0.048519,0.371895,0,1.099957, + 0.975132,0.216167,-0.048879,0.305662,0.082356,-0.029987, + 0.952267,0.301337,-0.048814,0.35919,0.096699,1.101743 +}; +static const struct gllist handsy_model_finger_metacarpal_frame = { + GL_N3F_V3F, GL_TRIANGLES, 825, handsy_model_finger_metacarpal_data, 0 +}; +const struct gllist *handsy_model_finger_metacarpal = &handsy_model_finger_metacarpal_frame; + +static const float handsy_model_finger_proximal_data[] = { + -0.707107,0,0.707107,-0.188122,0,2.002282, + -0.537487,0,0.843272,-0.133022,0.191561,2.044561, + -0.707107,0,0.707107,-0.188122,0.191561,2.002282, + -0.537487,0,0.843272,-0.133022,0.191561,2.044561, + -0.707107,0,0.707107,-0.188122,0,2.002282, + -0.461551,0,0.887114,-0.133022,0,2.044561, + 0.866025,0,0.5,0.230401,0,1.947182, + 0.707107,0,0.707107,0.188122,0.191561,2.002282, + 0.707107,0,0.707107,0.188122,0,2.002282, + 0.707107,0,0.707107,0.188122,0.191561,2.002282, + 0.866025,0,0.5,0.230401,0,1.947182, + 0.866025,0,0.5,0.230401,0.191561,1.947182, + -0.866025,0,-0.5,-0.230401,0,1.681138, + -0.793353,0,-0.608761,-0.188122,0.191561,1.626038, + -0.793353,0,-0.608761,-0.188122,0,1.626038, + -0.793353,0,-0.608761,-0.188122,0.191561,1.626038, + -0.866025,0,-0.5,-0.230401,0,1.681138, + -0.866025,0,-0.5,-0.230401,0.191561,1.681138, + -0.866025,0,0.5,-0.230401,0.191561,1.947182, + -0.965926,0,0.258819,-0.256979,0,1.883018, + -0.866025,0,0.5,-0.230401,0,1.947182, + -0.965926,0,0.258819,-0.256979,0,1.883018, + -0.866025,0,0.5,-0.230401,0.191561,1.947182, + -0.965926,0,0.258819,-0.256979,0.191561,1.883018, + -0.461551,0,0.887114,-0.133022,0,2.044561, + -0.300918,0,0.95365,-0.068857,0.191561,2.071139, + -0.537487,0,0.843272,-0.133022,0.191561,2.044561, + -0.300918,0,0.95365,-0.068857,0.191561,2.071139, + -0.461551,0,0.887114,-0.133022,0,2.044561, + -0.216222,0,0.976344,-0.068857,0,2.071139, + 0.043842,0,0.999038,0,0,2.080205, + 0.216222,0,0.976344,0.068857,0.191561,2.071139, + -0.043842,0,0.999038,0,0.191561,2.080205, + 0.216222,0,0.976344,0.068857,0.191561,2.071139, + 0.043842,0,0.999038,0,0,2.080205, + 0.300918,0,0.95365,0.068857,0,2.071139, + -1,0,0,-0.266045,0.191561,1.81416, + -0.976344,0,-0.216222,-0.256979,0,1.745303, + -1,0,0,-0.266045,0,1.81416, + -0.976344,0,-0.216222,-0.256979,0,1.745303, + -1,0,0,-0.266045,0.191561,1.81416, + -0.95365,0,-0.300918,-0.256979,0.191561,1.745303, + -0.965926,0,0.258819,-0.256979,0,1.883018, + -1,0,0,-0.266045,0.191561,1.81416, + -1,0,0,-0.266045,0,1.81416, + -1,0,0,-0.266045,0.191561,1.81416, + -0.965926,0,0.258819,-0.256979,0,1.883018, + -0.965926,0,0.258819,-0.256979,0.191561,1.883018, + -0.95365,0,-0.300918,-0.256979,0.191561,1.745303, + -0.866025,0,-0.5,-0.230401,0,1.681138, + -0.976344,0,-0.216222,-0.256979,0,1.745303, + -0.866025,0,-0.5,-0.230401,0,1.681138, + -0.95365,0,-0.300918,-0.256979,0.191561,1.745303, + -0.866025,0,-0.5,-0.230401,0.191561,1.681138, + 0.300918,0,0.95365,0.068857,0,2.071139, + 0.461551,0,0.887114,0.133022,0.191561,2.044561, + 0.216222,0,0.976344,0.068857,0.191561,2.071139, + 0.461551,0,0.887114,0.133022,0.191561,2.044561, + 0.300918,0,0.95365,0.068857,0,2.071139, + 0.537487,0,0.843272,0.133022,0,2.044561, + 0.537487,0,0.843272,0.133022,0,2.044561, + 0.707107,0,0.707107,0.188122,0.191561,2.002282, + 0.461551,0,0.887114,0.133022,0.191561,2.044561, + 0.707107,0,0.707107,0.188122,0.191561,2.002282, + 0.537487,0,0.843272,0.133022,0,2.044561, + 0.707107,0,0.707107,0.188122,0,2.002282, + -0.216222,0,0.976344,-0.068857,0,2.071139, + -0.043842,0,0.999038,0,0.191561,2.080205, + -0.300918,0,0.95365,-0.068857,0.191561,2.071139, + -0.043842,0,0.999038,0,0.191561,2.080205, + -0.216222,0,0.976344,-0.068857,0,2.071139, + 0.043842,0,0.999038,0,0,2.080205, + 1,0,0,0.266045,0.191561,1.81416, + 0.976344,0,0.216222,0.256979,0,1.883018, + 1,0,0,0.266045,0,1.81416, + 0.976344,0,0.216222,0.256979,0,1.883018, + 1,0,0,0.266045,0.191561,1.81416, + 0.95365,0,0.300918,0.256979,0.191561,1.883018, + 0.95365,0,0.300918,0.256979,0.191561,1.883018, + 0.866025,0,0.5,0.230401,0,1.947182, + 0.976344,0,0.216222,0.256979,0,1.883018, + 0.866025,0,0.5,0.230401,0,1.947182, + 0.95365,0,0.300918,0.256979,0.191561,1.883018, + 0.866025,0,0.5,0.230401,0.191561,1.947182, + -0.707107,0,0.707107,-0.188122,0,2.002282, + -0.866025,0,0.5,-0.230401,0.191561,1.947182, + -0.866025,0,0.5,-0.230401,0,1.947182, + -0.866025,0,0.5,-0.230401,0.191561,1.947182, + -0.707107,0,0.707107,-0.188122,0,2.002282, + -0.707107,0,0.707107,-0.188122,0.191561,2.002282, + 0,1,0,-0.230401,0.191561,1.681138, + 0,0.999802,0.019917,0,0.191561,1.81416, + 0,1,0,-0.188122,0.191561,1.626038, + 0,0.999802,0.019917,0,0.191561,1.81416, + 0,1,0,-0.230401,0.191561,1.681138, + 0,1,0,-0.256979,0.191561,1.745303, + 0,0.999802,0.019917,0,0.191561,1.81416, + 0,1,0,-0.256979,0.191561,1.745303, + 0,0.99969,0.024899,-0.266045,0.191561,1.81416, + 0,0.999802,0.019917,0,0.191561,1.81416, + 0,0.99969,0.024899,-0.266045,0.191561,1.81416, + 0,0.999449,0.033205,0.266045,0.191561,1.81416, + 0,0.999449,0.033205,0.266045,0.191561,1.81416, + 0,0.99969,0.024899,-0.266045,0.191561,1.81416, + 0,1,0,0.256979,0.191561,1.883018, + 0,1,0,0.256979,0.191561,1.883018, + 0,0.99969,0.024899,-0.266045,0.191561,1.81416, + 0,1,0,-0.256979,0.191561,1.883018, + 0,1,0,0.256979,0.191561,1.883018, + 0,1,0,-0.256979,0.191561,1.883018, + 0,1,0,-0.230401,0.191561,1.947182, + 0,1,0,0.256979,0.191561,1.883018, + 0,1,0,-0.230401,0.191561,1.947182, + 0,1,0,0.230401,0.191561,1.947182, + 0,1,0,0.230401,0.191561,1.947182, + 0,1,0,-0.230401,0.191561,1.947182, + 0,1,0,-0.188122,0.191561,2.002282, + 0,1,0,0.230401,0.191561,1.947182, + 0,1,0,-0.188122,0.191561,2.002282, + 0,1,0,0.188122,0.191561,2.002282, + 0,1,0,0.188122,0.191561,2.002282, + 0,1,0,-0.188122,0.191561,2.002282, + 0,1,0,-0.133022,0.191561,2.044561, + 0,1,0,0.188122,0.191561,2.002282, + 0,1,0,-0.133022,0.191561,2.044561, + 0,1,0,0.133022,0.191561,2.044561, + 0,1,0,0.133022,0.191561,2.044561, + 0,1,0,-0.133022,0.191561,2.044561, + 0,1,0,-0.068857,0.191561,2.071139, + 0,1,0,0.133022,0.191561,2.044561, + 0,1,0,-0.068857,0.191561,2.071139, + 0,1,0,0.068857,0.191561,2.071139, + 0,1,0,0.068857,0.191561,2.071139, + 0,1,0,-0.068857,0.191561,2.071139, + 0,1,0,0,0.191561,2.080205, + 0,0.999449,0.033205,0.266045,0.191561,1.81416, + 0,1,0,0.261211,0.191561,1.777449, + 0,0.999802,0.019917,0,0.191561,1.81416, + -0.707107,0,0.707107,-0.188122,0.191561,1.626038, + -0.707107,0,0.707107,-0.342487,0,1.471673, + -0.707107,0,0.707107,-0.188122,0,1.626038, + -0.707107,0,0.707107,-0.342487,0,1.471673, + -0.707107,0,0.707107,-0.188122,0.191561,1.626038, + -0.707107,0,0.707107,-0.330524,0.088564,1.483636, + -0.707107,0,0.707107,-0.330524,0.088564,1.483636, + -0.707107,0,0.707107,-0.188122,0.191561,1.626038, + -0.707107,0,0.707107,-0.295571,0.170648,1.518589, + -0.707107,0,0.707107,-0.295571,0.170648,1.518589, + -0.707107,0,0.707107,-0.188122,0.191561,1.626038, + -0.707107,0,0.707107,-0.240341,0.240341,1.573819, + -0.707107,0,0.707107,-0.240341,0.240341,1.573819, + -0.707107,0,0.707107,-0.188122,0.191561,1.626038, + -0.707107,0,0.707107,0,0.191561,1.81416, + -0.707107,0,0.707107,-0.240341,0.240341,1.573819, + -0.707107,0,0.707107,0,0.191561,1.81416, + -0.707107,0,0.707107,0,0.333791,1.81416, + -0.707107,0,0.707107,-0.240341,0.240341,1.573819, + -0.707107,0,0.707107,0,0.333791,1.81416, + -0.707107,0,0.707107,-0.169041,0.292788,1.645119, + -0.707107,0,0.707107,-0.169041,0.292788,1.645119, + -0.707107,0,0.707107,0,0.333791,1.81416, + -0.707107,0,0.707107,-0.086963,0.32455,1.727197, + -0.975964,0.216853,0.021658,-0.330524,0.088564,1.483636, + -0.991173,0.130825,0.021489,-0.366435,0.000001,0.366435, + -0.991152,0.130986,0.021476,-0.342487,0,1.471673, + -0.991173,0.130825,0.021489,-0.366435,0.000001,0.366435, + -0.975964,0.216853,0.021658,-0.330524,0.088564,1.483636, + -0.953119,0.301819,0.021666,-0.35419,0.094905,0.35419, + -0.896223,0.443073,0.021681,-0.295571,0.170648,1.518589, + -0.953119,0.301819,0.021666,-0.35419,0.094905,0.35419, + -0.975964,0.216853,0.021658,-0.330524,0.088564,1.483636, + -0.953119,0.301819,0.021666,-0.35419,0.094905,0.35419, + -0.896223,0.443073,0.021681,-0.295571,0.170648,1.518589, + -0.92339,0.383259,0.021542,-0.346541,0.113724,0.346541, + -0.842269,0.538618,0.02175,-0.31821,0.183719,0.31821, + -0.92339,0.383259,0.021542,-0.346541,0.113724,0.346541, + -0.896223,0.443073,0.021681,-0.295571,0.170648,1.518589, + -0.73645,0.676138,0.021861,-0.240341,0.240341,1.573819, + -0.842269,0.538618,0.02175,-0.31821,0.183719,0.31821, + -0.896223,0.443073,0.021681,-0.295571,0.170648,1.518589, + -0.842269,0.538618,0.02175,-0.31821,0.183719,0.31821, + -0.73645,0.676138,0.021861,-0.240341,0.240341,1.573819, + -0.792488,0.609503,0.021646,-0.307808,0.19758,0.307808, + -0.73645,0.676138,0.021861,-0.240341,0.240341,1.573819, + -0.793166,0.608618,0.021712,-0.288583,0.223321,0.288583, + -0.792488,0.609503,0.021646,-0.307808,0.19758,0.307808, + -0.793166,0.608618,0.021712,-0.288583,0.223321,0.288583, + -0.73645,0.676138,0.021861,-0.240341,0.240341,1.573819, + -0.706937,0.706937,0.0219,-0.26068,0.26068,0.26068, + -0.73645,0.676138,0.021861,-0.240341,0.240341,1.573819, + -0.60721,0.794242,0.021817,-0.193727,0.313888,0.193727, + -0.706937,0.706937,0.0219,-0.26068,0.26068,0.26068, + -0.60721,0.794242,0.021817,-0.193727,0.313888,0.193727, + -0.498092,0.866843,0.022094,-0.169041,0.292788,1.645119, + -0.498727,0.866479,0.022051,-0.185142,0.320676,0.185142, + -0.498092,0.866843,0.022094,-0.169041,0.292788,1.645119, + -0.60721,0.794242,0.021817,-0.193727,0.313888,0.193727, + -0.73645,0.676138,0.021861,-0.240341,0.240341,1.573819, + -0.498092,0.866843,0.022094,-0.169041,0.292788,1.645119, + -0.380786,0.924402,0.021972,-0.101338,0.357372,0.101338, + -0.498727,0.866479,0.022051,-0.185142,0.320676,0.185142, + -0.380786,0.924402,0.021972,-0.101338,0.357372,0.101338, + -0.230952,0.97271,0.022268,-0.086963,0.32455,1.727197, + -0.215222,0.976313,0.022187,-0.09634,0.359544,0.09634, + -0.230952,0.97271,0.022268,-0.086963,0.32455,1.727197, + -0.380786,0.924402,0.021972,-0.101338,0.357372,0.101338, + -0.498092,0.866843,0.022094,-0.169041,0.292788,1.645119, + -0.230952,0.97271,0.022268,-0.086963,0.32455,1.727197, + 0.001487,0.999749,0.022361,0,0.373195,0.052449, + -0.129511,0.991332,0.022072,-0.002638,0.372856,0.052402, + 0.001487,0.999749,0.022361,0,0.373195,0.052449, + -0.230952,0.97271,0.022268,-0.086963,0.32455,1.727197, + 0.001487,0.999749,0.022361,0,0.333791,1.81416, + 0.300843,0.953412,0.02234,0.0966,0.360517,0.050667, + 0.461436,0.886892,0.02234,0.167158,0.289526,1.790668, + 0.537353,0.843061,0.02234,0.186676,0.323332,0.045441, + 0.461436,0.886892,0.02234,0.167158,0.289526,1.790668, + 0.300843,0.953412,0.02234,0.0966,0.360517,0.050667, + 0.194766,0.980596,0.022313,0.086462,0.32268,1.802009, + 0.991201,0.130494,0.02217,0.373195,0,0.052449, + 0.976101,0.216168,0.02234,0.323399,0.086654,1.768709, + 0.991201,0.130494,0.02217,0.334843,0,1.767101, + 0.976101,0.216168,0.02234,0.323399,0.086654,1.768709, + 0.991201,0.130494,0.02217,0.373195,0,0.052449, + 0.953412,0.300843,0.02234,0.360517,0.0966,0.050667, + 0.843061,0.537353,0.02234,0.323332,0.186676,0.045441, + 0.725293,0.688078,0.022354,0.236551,0.236551,1.780915, + 0.886892,0.461436,0.02234,0.28986,0.167351,1.773423, + 0.725293,0.688078,0.022354,0.236551,0.236551,1.780915, + 0.843061,0.537353,0.02234,0.323332,0.186676,0.045441, + 0.793158,0.608612,0.02217,0.280033,0.243325,0.039356, + 0.725293,0.688078,0.022354,0.236551,0.236551,1.780915, + 0.793158,0.608612,0.02217,0.280033,0.243325,0.039356, + 0.70693,0.70693,0.022361,0.264131,0.264131,0.037121, + 0.537353,0.843061,0.02234,0.186676,0.323332,0.045441, + 0.725293,0.688078,0.022354,0.236551,0.236551,1.780915, + 0.70693,0.70693,0.022361,0.264131,0.264131,0.037121, + 0.725293,0.688078,0.022354,0.236551,0.236551,1.780915, + 0.537353,0.843061,0.02234,0.186676,0.323332,0.045441, + 0.461436,0.886892,0.02234,0.167158,0.289526,1.790668, + 0.953412,0.300843,0.02234,0.360517,0.0966,0.050667, + 0.886892,0.461436,0.02234,0.28986,0.167351,1.773423, + 0.976101,0.216168,0.02234,0.323399,0.086654,1.768709, + 0.886892,0.461436,0.02234,0.28986,0.167351,1.773423, + 0.953412,0.300843,0.02234,0.360517,0.0966,0.050667, + 0.843061,0.537353,0.02234,0.323332,0.186676,0.045441, + 0.130494,0.991201,0.02217,0.037985,0.368209,0.051748, + 0.194766,0.980596,0.022313,0.086462,0.32268,1.802009, + 0.300843,0.953412,0.02234,0.0966,0.360517,0.050667, + 0.194766,0.980596,0.022313,0.086462,0.32268,1.802009, + 0.130494,0.991201,0.02217,0.037985,0.368209,0.051748, + 0.001487,0.999749,0.022361,0,0.373195,0.052449, + 0.194766,0.980596,0.022313,0.086462,0.32268,1.802009, + 0.001487,0.999749,0.022361,0,0.373195,0.052449, + 0.001487,0.999749,0.022361,0,0.333791,1.81416, + 0.991445,0,-0.130526,0.261211,0,1.777449, + 1,0,0,0.266045,0.191561,1.81416, + 1,0,0,0.266045,0,1.81416, + 1,0,0,0.266045,0.191561,1.81416, + 0.991445,0,-0.130526,0.261211,0,1.777449, + 0.991445,0,-0.130526,0.261211,0.191561,1.777449, + 0.139173,0,0.990268,0,0.191561,1.81416, + 0.139173,0,0.990268,0.086462,0.32268,1.802009, + 0.139173,0,0.990268,0,0.333791,1.81416, + 0.139173,0,0.990268,0.086462,0.32268,1.802009, + 0.139173,0,0.990268,0,0.191561,1.81416, + 0.139173,0,0.990268,0.261211,0.191561,1.777449, + 0.139173,0,0.990268,0.086462,0.32268,1.802009, + 0.139173,0,0.990268,0.261211,0.191561,1.777449, + 0.139173,0,0.990268,0.167158,0.289526,1.790668, + 0.139173,0,0.990268,0.167158,0.289526,1.790668, + 0.139173,0,0.990268,0.261211,0.191561,1.777449, + 0.139173,0,0.990268,0.236551,0.236551,1.780915, + 0.139173,0,0.990268,0.236551,0.236551,1.780915, + 0.139173,0,0.990268,0.261211,0.191561,1.777449, + 0.139173,0,0.990268,0.28986,0.167351,1.773423, + 0.139173,0,0.990268,0.28986,0.167351,1.773423, + 0.139173,0,0.990268,0.261211,0.191561,1.777449, + 0.139173,0,0.990268,0.261211,0,1.777449, + 0.139173,0,0.990268,0.28986,0.167351,1.773423, + 0.139173,0,0.990268,0.261211,0,1.777449, + 0.139173,0,0.990268,0.334843,0,1.767101, + 0.139173,0,0.990268,0.28986,0.167351,1.773423, + 0.139173,0,0.990268,0.334843,0,1.767101, + 0.139173,0,0.990268,0.323399,0.086654,1.768709, + -0.215222,0.976313,0.022187,-0.09634,0.359544,0.09634, + -0.129511,0.991332,0.022072,-0.002638,0.372856,0.052402, + -0.130495,0.991204,0.022019,-0.0515,0.366444,0.0515, + -0.129511,0.991332,0.022072,-0.002638,0.372856,0.052402, + -0.215222,0.976313,0.022187,-0.09634,0.359544,0.09634, + -0.230952,0.97271,0.022268,-0.086963,0.32455,1.727197, + -0.707107,0,-0.707107,-0.366435,0.000001,0.366435, + -0.707107,0,-0.707107,-0.18444,0.049421,0.18444, + -0.707107,0,-0.707107,-0.188122,0,0.188122, + -0.707107,0,-0.707107,-0.18444,0.049421,0.18444, + -0.707107,0,-0.707107,-0.366435,0.000001,0.366435, + -0.707107,0,-0.707107,-0.35419,0.094905,0.35419, + -0.707107,0,-0.707107,-0.18444,0.049421,0.18444, + -0.707107,0,-0.707107,-0.35419,0.094905,0.35419, + -0.707107,0,-0.707107,-0.17298,0.09987,0.17298, + -0.707107,0,-0.707107,-0.17298,0.09987,0.17298, + -0.707107,0,-0.707107,-0.35419,0.094905,0.35419, + -0.707107,0,-0.707107,-0.346541,0.113724,0.346541, + -0.707107,0,-0.707107,-0.17298,0.09987,0.17298, + -0.707107,0,-0.707107,-0.346541,0.113724,0.346541, + -0.707107,0,-0.707107,-0.152403,0.152403,0.152403, + -0.707107,0,-0.707107,-0.152403,0.152403,0.152403, + -0.707107,0,-0.707107,-0.346541,0.113724,0.346541, + -0.707107,0,-0.707107,-0.31821,0.183719,0.31821, + -0.707107,0,-0.707107,-0.152403,0.152403,0.152403, + -0.707107,0,-0.707107,-0.31821,0.183719,0.31821, + -0.707107,0,-0.707107,-0.133022,0.185858,0.133022, + -0.707107,0,-0.707107,-0.133022,0.185858,0.133022, + -0.707107,0,-0.707107,-0.31821,0.183719,0.31821, + -0.707107,0,-0.707107,-0.307808,0.19758,0.307808, + -0.707107,0,-0.707107,-0.133022,0.185858,0.133022, + -0.707107,0,-0.707107,-0.307808,0.19758,0.307808, + -0.707107,0,-0.707107,-0.118258,0.204829,0.118258, + -0.707107,0,-0.707107,-0.118258,0.204829,0.118258, + -0.707107,0,-0.707107,-0.307808,0.19758,0.307808, + -0.707107,0,-0.707107,-0.288583,0.223321,0.288583, + -0.707107,0,-0.707107,-0.118258,0.204829,0.118258, + -0.707107,0,-0.707107,-0.288583,0.223321,0.288583, + -0.707107,0,-0.707107,-0.068857,0.247251,0.068857, + -0.707107,0,-0.707107,-0.068857,0.247251,0.068857, + -0.707107,0,-0.707107,-0.288583,0.223321,0.288583, + -0.707107,0,-0.707107,-0.26068,0.26068,0.26068, + -0.707107,0,-0.707107,-0.068857,0.247251,0.068857, + -0.707107,0,-0.707107,-0.26068,0.26068,0.26068, + -0.707107,0,-0.707107,-0.066588,0.248511,0.066588, + -0.707107,0,-0.707107,-0.066588,0.248511,0.066588, + -0.707107,0,-0.707107,-0.26068,0.26068,0.26068, + -0.707107,0,-0.707107,-0.036056,0.256551,0.036056, + -0.707107,0,-0.707107,-0.036056,0.256551,0.036056, + -0.707107,0,-0.707107,-0.26068,0.26068,0.26068, + -0.707107,0,-0.707107,-0.0515,0.366444,0.0515, + -0.707107,0,-0.707107,-0.0515,0.366444,0.0515, + -0.707107,0,-0.707107,-0.26068,0.26068,0.26068, + -0.707107,0,-0.707107,-0.193727,0.313888,0.193727, + -0.707107,0,-0.707107,-0.0515,0.366444,0.0515, + -0.707107,0,-0.707107,-0.193727,0.313888,0.193727, + -0.707107,0,-0.707107,-0.185142,0.320676,0.185142, + -0.707107,0,-0.707107,-0.0515,0.366444,0.0515, + -0.707107,0,-0.707107,-0.185142,0.320676,0.185142, + -0.707107,0,-0.707107,-0.101338,0.357372,0.101338, + -0.707107,0,-0.707107,-0.0515,0.366444,0.0515, + -0.707107,0,-0.707107,-0.101338,0.357372,0.101338, + -0.707107,0,-0.707107,-0.09634,0.359544,0.09634, + 0,0.139173,-0.990268,-0.002638,0.372856,0.052402, + 0,0.139173,-0.990268,-0.036056,0.256551,0.036056, + 0,0.139173,-0.990268,-0.0515,0.366444,0.0515, + 0,0.139173,-0.990268,-0.036056,0.256551,0.036056, + 0,0.139173,-0.990268,-0.002638,0.372856,0.052402, + 0,0.139173,-0.990268,0,0.261211,0.036711, + 0,0.139173,-0.990268,0,0.261211,0.036711, + 0,0.139173,-0.990268,-0.002638,0.372856,0.052402, + 0,0.139173,-0.990268,0,0.373195,0.052449, + 0,0.139173,-0.990268,0,0.261211,0.036711, + 0,0.139173,-0.990268,0,0.373195,0.052449, + 0,0.139173,-0.990268,0.037985,0.368209,0.051748, + 0,0.139173,-0.990268,0,0.261211,0.036711, + 0,0.139173,-0.990268,0.037985,0.368209,0.051748, + 0,0.139173,-0.990268,0.067648,0.252467,0.035482, + 0,0.139173,-0.990268,0.067648,0.252467,0.035482, + 0,0.139173,-0.990268,0.037985,0.368209,0.051748, + 0,0.139173,-0.990268,0.0966,0.360517,0.050667, + 0,0.139173,-0.990268,0.067648,0.252467,0.035482, + 0,0.139173,-0.990268,0.0966,0.360517,0.050667, + 0,0.139173,-0.990268,0.130924,0.226768,0.03187, + 0,0.139173,-0.990268,0.130924,0.226768,0.03187, + 0,0.139173,-0.990268,0.0966,0.360517,0.050667, + 0,0.139173,-0.990268,0.186676,0.323332,0.045441, + 0,0.139173,-0.990268,0.130924,0.226768,0.03187, + 0,0.139173,-0.990268,0.186676,0.323332,0.045441, + 0.046592,0.093184,-0.994558,0.185692,0.185692,0.026097, + 0.046592,0.093184,-0.994558,0.185692,0.185692,0.026097, + 0,0.139173,-0.990268,0.186676,0.323332,0.045441, + 0.116291,0.023258,-0.992943,0.264131,0.264131,0.037121, + 0.116291,0.023258,-0.992943,0.264131,0.264131,0.037121, + 0.139173,0,-0.990268,0.226768,0.130924,0.03187, + 0.046592,0.093184,-0.994558,0.185692,0.185692,0.026097, + 0.139173,0,-0.990268,0.226768,0.130924,0.03187, + 0.116291,0.023258,-0.992943,0.264131,0.264131,0.037121, + 0.139173,0,-0.990268,0.252467,0.067648,0.035482, + 0.139173,0,-0.990268,0.252467,0.067648,0.035482, + 0.116291,0.023258,-0.992943,0.264131,0.264131,0.037121, + 0.139173,0,-0.990268,0.261211,0,0.036711, + 0.139173,0,-0.990268,0.261211,0,0.036711, + 0.116291,0.023258,-0.992943,0.264131,0.264131,0.037121, + 0.139173,0,-0.990268,0.373195,0,0.052449, + 0.139173,0,-0.990268,0.373195,0,0.052449, + 0.116291,0.023258,-0.992943,0.264131,0.264131,0.037121, + 0.139173,0,-0.990268,0.280033,0.243325,0.039356, + 0.139173,0,-0.990268,0.373195,0,0.052449, + 0.139173,0,-0.990268,0.280033,0.243325,0.039356, + 0.139173,0,-0.990268,0.323332,0.186676,0.045441, + 0.139173,0,-0.990268,0.373195,0,0.052449, + 0.139173,0,-0.990268,0.323332,0.186676,0.045441, + 0.139173,0,-0.990268,0.360517,0.0966,0.050667 +}; +static const struct gllist handsy_model_finger_proximal_frame = { + GL_N3F_V3F, GL_TRIANGLES, 399, handsy_model_finger_proximal_data, 0 +}; +const struct gllist *handsy_model_finger_proximal = &handsy_model_finger_proximal_frame; + +static const float handsy_model_palm_data[] = { + -0.796278,-0.586351,-0.148771,-1.752137,-0.376692,1.970411, + -0.846632,-0.478533,-0.232853,-1.655459,-0.3337,1.421192, + -0.778493,-0.586351,-0.223921,-1.625487,-0.376692,1.429408, + -0.846632,-0.478533,-0.232853,-1.655459,-0.3337,1.421192, + -0.796278,-0.586351,-0.148771,-1.752137,-0.376692,1.970411, + -0.866026,-0.479125,-0.142963,-1.782856,-0.3337,1.96539, + 0.993252,-0.014102,-0.11512,1.872085,0.03421,2.57316, + 0.99148,-0.06721,-0.111576,1.895235,-0.072325,2.815815, + 0.986813,-0.09744,-0.129251,1.867696,-0.075915,2.573407, + 0.99148,-0.06721,-0.111576,1.895235,-0.072325,2.815815, + 0.993252,-0.014102,-0.11512,1.872085,0.03421,2.57316, + 0.993491,0.012797,-0.11319,1.899624,0.039057,2.815569, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.764255,-0.087329,0.638974,0.764565,-0.313698,1.206288, + -0.764255,-0.087329,0.638974,0.777003,-0.306661,1.222126, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.764255,-0.087329,0.638974,0.751492,-0.31812,1.190048, + -0.764255,-0.087329,0.638974,0.764565,-0.313698,1.206288, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.764255,-0.087329,0.638974,0.777003,-0.306661,1.222126, + -0.704036,0.00442,0.71015,0.782018,-0.302539,1.228689, + -0.99549,0.01313,-0.09395,-1.917766,0.038992,2.709671, + -0.983637,0.081437,-0.160709,-1.842202,0.150374,1.955689, + -0.986902,0,-0.161321,-1.846542,0.038992,1.95498, + -0.983637,0.081437,-0.160709,-1.842202,0.150374,1.955689, + -0.99549,0.01313,-0.09395,-1.917766,0.038992,2.709671, + -0.991055,0.095192,-0.093531,-1.913398,0.150374,2.710083, + 0.034078,0,0.999419,1.769671,-0.351987,2.781136, + 0.034078,0,0.999419,1.767439,0.429968,2.781212, + 0.034078,0,0.999419,1.767439,-0.351987,2.781212, + 0.034078,0,0.999419,1.767439,0.429968,2.781212, + 0.034078,0,0.999419,1.769671,-0.351987,2.781136, + 0.034078,0,0.999419,1.769671,0.429968,2.781136, + 0.355139,-0.836018,-0.418271,1.449875,0.1157,1.455178, + 0.364775,-0.836018,-0.409895,0.833554,-0.391356,1.942938, + 0.36952,-0.836018,-0.405622,1.350509,0.1157,1.368801, + 0.364775,-0.836018,-0.409895,0.833554,-0.391356,1.942938, + 0.355139,-0.836018,-0.418271,1.449875,0.1157,1.455178, + 0.350247,-0.836018,-0.422375,0.953272,-0.391356,2.047007, + -0.991055,0.095192,-0.093531,-1.913398,0.150374,2.710083, + -0.97188,0.173999,-0.158661,-1.829477,0.254166,1.957769, + -0.983637,0.081437,-0.160709,-1.842202,0.150374,1.955689, + -0.97188,0.173999,-0.158661,-1.829477,0.254166,1.957769, + -0.991055,0.095192,-0.093531,-1.913398,0.150374,2.710083, + -0.977364,0.1904,-0.092239,-1.900591,0.254166,2.711292, + 0.03368,0,0.999433,1.567503,0.418917,3.581738, + -0.029634,0,0.999561,0.500177,0.469339,3.617705, + -0.108877,0,0.994055,0.500177,0.418917,3.617705, + -0.029634,0,0.999561,0.500177,0.469339,3.617705, + 0.03368,0,0.999433,1.567503,0.418917,3.581738, + 0.03368,0,0.999433,1.567503,0.469339,3.581738, + 0,1,0,0.551147,-0.351987,2.822685, + 0,1,0,1.767999,-0.351987,2.786146, + 0,1,0,1.767439,-0.351987,2.781212, + 0,1,0,1.767999,-0.351987,2.786146, + 0,1,0,0.551147,-0.351987,2.822685, + 0,1,0,1.567503,-0.351987,3.38714, + 0,1,0,1.567503,-0.351987,3.38714, + 0,1,0,0.551147,-0.351987,2.822685, + 0,1,0,0.500177,-0.351986,3.423108, + 0.006145,-0.999897,-0.012996,-1.473662,0.418917,3.101913, + 0.01031,-0.999871,-0.012311,-1.343835,0.429973,2.308269, + 0.003577,-0.999903,-0.013468,-0.407016,0.429972,2.665229, + -0.977364,0.1904,-0.092239,-1.900591,0.254166,2.711292, + -0.943079,0.294939,-0.153663,-1.809236,0.343294,1.961078, + -0.97188,0.173999,-0.158661,-1.829477,0.254166,1.957769, + -0.943079,0.294939,-0.153663,-1.809236,0.343294,1.961078, + -0.977364,0.1904,-0.092239,-1.900591,0.254166,2.711292, + -0.94405,0.317539,-0.089095,-1.880219,0.343294,2.713215, + -0.94405,0.317539,-0.089095,-1.880219,0.343294,2.713215, + -0.866472,0.479125,-0.140234,-1.782856,0.411684,1.96539, + -0.943079,0.294939,-0.153663,-1.809236,0.343294,1.961078, + -0.866472,0.479125,-0.140234,-1.782856,0.411684,1.96539, + -0.94405,0.317539,-0.089095,-1.880219,0.343294,2.713215, + -0.853307,0.515153,-0.080531,-1.853669,0.411684,2.71572, + -0.005944,-0.999865,-0.015303,1.768126,0.429883,2.787255, + 0.000209,-0.999904,-0.013883,0.551147,0.429969,2.822685, + -0.000476,-0.999903,-0.013922,1.767439,0.429968,2.781212, + 0.000209,-0.999904,-0.013883,0.551147,0.429969,2.822685, + -0.005944,-0.999865,-0.015303,1.768126,0.429883,2.787255, + -0.008676,-0.999834,-0.015995,1.567503,0.418917,3.581738, + -0.99332,-0.067292,-0.093745,-1.913398,-0.07239,2.710083, + -0.986902,0,-0.161321,-1.846542,0.038992,1.95498, + -0.983612,-0.081436,-0.160861,-1.842202,-0.07239,1.955689, + -0.986902,0,-0.161321,-1.846542,0.038992,1.95498, + -0.99332,-0.067292,-0.093745,-1.913398,-0.07239,2.710083, + -0.99549,0.01313,-0.09395,-1.917766,0.038992,2.709671, + -0.853307,0.515153,-0.080531,-1.853669,0.411684,2.71572, + -0.802204,0.586352,-0.112519,-1.752137,0.454676,1.970411, + -0.866472,0.479125,-0.140234,-1.782856,0.411684,1.96539, + -0.802204,0.586352,-0.112519,-1.752137,0.454676,1.970411, + -0.853307,0.515153,-0.080531,-1.853669,0.411684,2.71572, + -0.807042,0.585562,-0.076165,-1.822751,0.454676,2.718638, + 0.991975,0.067695,-0.106788,1.867776,0.144331,2.573402, + 0.993491,0.012797,-0.11319,1.899624,0.039057,2.815569, + 0.993252,-0.014102,-0.11512,1.872085,0.03421,2.57316, + 0.993491,0.012797,-0.11319,1.899624,0.039057,2.815569, + 0.991975,0.067695,-0.106788,1.867776,0.144331,2.573402, + 0.988875,0.094445,-0.114917,1.895316,0.150435,2.815811, + -0.243848,-0.96921,-0.034203,-1.719171,-0.391356,1.9758, + -0.400958,-0.915315,-0.037841,-1.822751,-0.376692,2.718638, + -0.395209,-0.915619,-0.073838,-1.752137,-0.376692,1.970411, + -0.400958,-0.915315,-0.037841,-1.822751,-0.376692,2.718638, + -0.243848,-0.96921,-0.034203,-1.719171,-0.391356,1.9758, + -0.204863,-0.9786,-0.019334,-1.789572,-0.391356,2.721769, + -0.866026,-0.479125,-0.142963,-1.782856,-0.3337,1.96539, + -0.921583,-0.294507,-0.252885,-1.681196,-0.26531,1.414138, + -0.846632,-0.478533,-0.232853,-1.655459,-0.3337,1.421192, + -0.921583,-0.294507,-0.252885,-1.681196,-0.26531,1.414138, + -0.866026,-0.479125,-0.142963,-1.782856,-0.3337,1.96539, + -0.942922,-0.294938,-0.154627,-1.809236,-0.26531,1.961078, + -0.942922,-0.294938,-0.154627,-1.809236,-0.26531,1.961078, + -0.949732,-0.173729,-0.260436,-1.700945,-0.176182,1.408725, + -0.921583,-0.294507,-0.252885,-1.681196,-0.26531,1.414138, + -0.949732,-0.173729,-0.260436,-1.700945,-0.176182,1.408725, + -0.942922,-0.294938,-0.154627,-1.809236,-0.26531,1.961078, + -0.971815,-0.173999,-0.159059,-1.829477,-0.176182,1.957769, + -0.983612,-0.081436,-0.160861,-1.842202,-0.07239,1.955689, + -0.964427,0,-0.264349,-1.717594,0.038992,1.404161, + -0.961223,-0.081307,-0.263515,-1.71336,-0.07239,1.405322, + -0.964427,0,-0.264349,-1.717594,0.038992,1.404161, + -0.983612,-0.081436,-0.160861,-1.842202,-0.07239,1.955689, + -0.986902,0,-0.161321,-1.846542,0.038992,1.95498, + 0.383451,-0.836018,-0.392479,1.254219,0.1157,1.279009, + 0.392479,-0.836018,-0.383451,0.605375,-0.391356,1.722588, + 0.396914,-0.836018,-0.378858,1.16112,0.1157,1.185911, + 0.392479,-0.836018,-0.383451,0.605375,-0.391356,1.722588, + 0.383451,-0.836018,-0.392479,1.254219,0.1157,1.279009, + 0.378858,-0.836018,-0.396914,0.717541,-0.391356,1.834754, + -0.986902,0,-0.161321,-1.846542,0.038992,1.95498, + -0.959247,0.088043,-0.268503,-1.71336,0.150374,1.405322, + -0.964427,0,-0.264349,-1.717594,0.038992,1.404161, + -0.959247,0.088043,-0.268503,-1.71336,0.150374,1.405322, + -0.986902,0,-0.161321,-1.846542,0.038992,1.95498, + -0.983637,0.081437,-0.160709,-1.842202,0.150374,1.955689, + -0.983637,0.081437,-0.160709,-1.842202,0.150374,1.955689, + -0.949809,0.173614,-0.260235,-1.700945,0.254166,1.408725, + -0.959247,0.088043,-0.268503,-1.71336,0.150374,1.405322, + -0.949809,0.173614,-0.260235,-1.700945,0.254166,1.408725, + -0.983637,0.081437,-0.160709,-1.842202,0.150374,1.955689, + -0.97188,0.173999,-0.158661,-1.829477,0.254166,1.957769, + -0.97188,0.173999,-0.158661,-1.829477,0.254166,1.957769, + -0.921725,0.294507,-0.252364,-1.681196,0.343294,1.414138, + -0.949809,0.173614,-0.260235,-1.700945,0.254166,1.408725, + -0.921725,0.294507,-0.252364,-1.681196,0.343294,1.414138, + -0.97188,0.173999,-0.158661,-1.829477,0.254166,1.957769, + -0.943079,0.294939,-0.153663,-1.809236,0.343294,1.961078, + 0.001315,-0.999904,-0.013782,0.500177,0.418917,3.617705, + 0.000209,-0.999904,-0.013883,0.551147,0.429969,2.822685, + -0.008676,-0.999834,-0.015995,1.567503,0.418917,3.581738, + -0.943079,0.294939,-0.153663,-1.809236,0.343294,1.961078, + -0.846877,0.478832,-0.23134,-1.655458,0.411684,1.421192, + -0.921725,0.294507,-0.252364,-1.681196,0.343294,1.414138, + -0.846877,0.478832,-0.23134,-1.655458,0.411684,1.421192, + -0.943079,0.294939,-0.153663,-1.809236,0.343294,1.961078, + -0.866472,0.479125,-0.140234,-1.782856,0.411684,1.96539, + -0.400957,0.915315,-0.037841,-1.822751,0.454676,2.718638, + -0.39815,0.915619,-0.055846,-1.71917,0.46934,1.9758, + -0.395209,0.915619,-0.073838,-1.752137,0.454676,1.970411, + -0.39815,0.915619,-0.055846,-1.71917,0.46934,1.9758, + -0.400957,0.915315,-0.037841,-1.822751,0.454676,2.718638, + -0.259904,0.965446,-0.019075,-1.789572,0.46934,2.721769, + -0.866472,0.479125,-0.140234,-1.782856,0.411684,1.96539, + -0.78424,0.585803,-0.204457,-1.625486,0.454676,1.429408, + -0.846877,0.478832,-0.23134,-1.655458,0.411684,1.421192, + -0.78424,0.585803,-0.204457,-1.625486,0.454676,1.429408, + -0.866472,0.479125,-0.140234,-1.782856,0.411684,1.96539, + -0.802204,0.586352,-0.112519,-1.752137,0.454676,1.970411, + -0.395209,0.915619,-0.073838,-1.752137,0.454676,1.970411, + -0.346553,0.933315,-0.093941,-1.593323,0.46934,1.438224, + -0.388183,0.91542,-0.106401,-1.625486,0.454676,1.429408, + -0.346553,0.933315,-0.093941,-1.593323,0.46934,1.438224, + -0.395209,0.915619,-0.073838,-1.752137,0.454676,1.970411, + -0.39815,0.915619,-0.055846,-1.71917,0.46934,1.9758, + -0.232489,-0.970402,-0.065331,-1.593323,-0.391356,1.438224, + -0.395209,-0.915619,-0.073838,-1.752137,-0.376692,1.970411, + -0.388183,-0.915419,-0.106401,-1.625487,-0.376692,1.429408, + -0.395209,-0.915619,-0.073838,-1.752137,-0.376692,1.970411, + -0.232489,-0.970402,-0.065331,-1.593323,-0.391356,1.438224, + -0.243848,-0.96921,-0.034203,-1.719171,-0.391356,1.9758, + -0.867417,-0.424499,0.259594,0.420331,-0.082341,0.724045, + -0.863914,-0.459936,0.205211,0.5388,-0.276944,0.801677, + -0.866464,-0.37452,0.330114,0.455635,-0.09635,0.818877, + -0.866464,-0.37452,0.330114,0.455635,-0.09635,0.818877, + -0.863914,-0.459936,0.205211,0.5388,-0.276944,0.801677, + -0.855881,-0.307094,0.416127,0.592896,-0.292953,0.956179, + -0.849718,-0.515316,0.111482,0.396675,-0.073374,0.659509, + -0.863914,-0.459936,0.205211,0.5388,-0.276944,0.801677, + -0.867417,-0.424499,0.259594,0.420331,-0.082341,0.724045, + 0.41415,-0.835984,-0.360015,0.901767,-0.028687,1.229839, + 0.41415,-0.835984,-0.360015,1.050087,0.1157,1.065186, + 0.409895,-0.836018,-0.364775,1.071328,0.1157,1.08962, + 0.40862,-0.836512,-0.365072,0.497191,-0.391356,1.606575, + 0.41415,-0.835984,-0.360015,0.901767,-0.028687,1.229839, + 0.409895,-0.836018,-0.364775,1.071328,0.1157,1.08962, + 0.001315,-0.999904,-0.013782,0.500177,0.418917,3.617705, + 0.003577,-0.999903,-0.013468,-0.407016,0.429972,2.665229, + 0.000209,-0.999904,-0.013883,0.551147,0.429969,2.822685, + 0.40862,-0.836512,-0.365072,0.497191,-0.391356,1.606575, + 0.416058,-0.835881,-0.358048,0.868735,-0.0443,1.228096, + 0.41415,-0.835984,-0.360015,0.901767,-0.028687,1.229839, + 0.40862,-0.836512,-0.365072,0.497191,-0.391356,1.606575, + 0.410782,-0.836134,-0.363507,0.393122,-0.391356,1.486857, + 0.441471,-0.737274,-0.511401,0.758404,-0.078952,1.180247, + 0.456862,-0.836223,-0.303327,0.106845,-0.391356,1.106955, + 0.467544,-0.836198,-0.286662,0.020451,-0.391356,0.973919, + 0.463075,-0.836184,-0.293866,0.420331,-0.082341,0.724045, + 0.410782,-0.836134,-0.363507,0.393122,-0.391356,1.486857, + 0.432927,-0.836473,-0.335988,0.293295,-0.391356,1.363581, + 0.428434,-0.836046,-0.342742,0.643743,-0.099518,1.08978, + -0.611735,0.119506,0.781984,0.84883,-0.216217,1.272781, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.631771,0.096094,0.769175,0.847965,-0.218877,1.272403, + 0.432927,-0.836473,-0.335988,0.293295,-0.391356,1.363581, + 0.446744,-0.83622,-0.318052,0.19783,-0.391356,1.236895, + 0.438762,-0.836856,-0.327354,0.551399,-0.104719,0.980011, + 0.476257,-0.836327,-0.271544,-0.061249,-0.391356,0.837949, + 0.482357,-0.836304,-0.260629,0.365067,-0.017684,0.431644, + 0.474256,-0.836102,-0.275709,0.38175,-0.056076,0.582184, + 0.476257,-0.836327,-0.271544,-0.061249,-0.391356,0.837949, + 0.485531,-0.836253,-0.254835,-0.138153,-0.391356,0.69921, + 0.482357,-0.836304,-0.260629,0.365067,-0.017684,0.431644, + 0.001315,-0.999904,-0.013782,0.500177,0.418917,3.617705, + 0.003527,-0.999903,-0.013502,-0.497427,0.418917,3.460249, + 0.003577,-0.999903,-0.013468,-0.407016,0.429972,2.665229, + 0.03368,0,0.999433,1.567503,-0.391357,3.38714, + -0.029634,0,0.999561,0.500177,-0.351986,3.423108, + -0.093083,0,0.995658,0.500177,-0.391356,3.423108, + -0.029634,0,0.999561,0.500177,-0.351986,3.423108, + 0.03368,0,0.999433,1.567503,-0.391357,3.38714, + 0.03368,0,0.999433,1.567503,-0.351987,3.38714, + 0.485531,-0.836253,-0.254835,-0.138153,-0.391356,0.69921, + 0.49078,-0.836227,-0.244662,0.378789,0.038394,0.270618, + 0.482357,-0.836304,-0.260629,0.365067,-0.017684,0.431644, + 0.485531,-0.836253,-0.254835,-0.138153,-0.391356,0.69921, + 0.494701,-0.836109,-0.23705,-0.210168,-0.391356,0.557872, + 0.49078,-0.836227,-0.244662,0.378789,0.038394,0.270618, + 0.449874,-0.836148,-0.313798,0.549572,-0.104847,0.977734, + 0.446744,-0.83622,-0.318052,0.19783,-0.391356,1.236895, + 0.451622,-0.836275,-0.310937,0.477253,-0.098489,0.857111, + 0.446744,-0.83622,-0.318052,0.19783,-0.391356,1.236895, + 0.449874,-0.836148,-0.313798,0.549572,-0.104847,0.977734, + 0.438762,-0.836856,-0.327354,0.551399,-0.104719,0.980011, + 0.446744,-0.83622,-0.318052,0.19783,-0.391356,1.236895, + 0.456862,-0.836223,-0.303327,0.106845,-0.391356,1.106955, + 0.451622,-0.836275,-0.310937,0.477253,-0.098489,0.857111, + 0.496685,-0.836056,-0.233057,0.406831,0.08212,0.174281, + 0.500479,-0.836021,-0.224924,0.428578,0.1157,0.099871, + 0.49734,-0.835984,-0.231914,0.435364,0.1157,0.114425, + 0.494701,-0.836109,-0.23705,-0.210168,-0.391356,0.557872, + 0.501259,-0.836022,-0.223175,-0.277207,-0.391356,0.414107, + 0.500479,-0.836021,-0.224924,0.428578,0.1157,0.099871, + 0.467544,-0.836198,-0.286662,0.020451,-0.391356,0.973919, + 0.476257,-0.836327,-0.271544,-0.061249,-0.391356,0.837949, + 0.474256,-0.836102,-0.275709,0.38175,-0.056076,0.582184, + 0.340325,-0.836018,-0.430411,1.552194,0.1157,1.538035, + 0.350247,-0.836018,-0.422375,0.953272,-0.391356,2.047007, + 0.355139,-0.836018,-0.418271,1.449875,0.1157,1.455178, + 0.350247,-0.836018,-0.422375,0.953272,-0.391356,2.047007, + 0.340325,-0.836018,-0.430411,1.552194,0.1157,1.538035, + 0.334033,-0.836012,-0.435321,1.076548,-0.391356,2.146834, + -0.631771,0.096094,0.769175,0.847965,-0.218877,1.272403, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.631771,0.096094,0.769175,0.839604,-0.23778,1.267897, + -0.631771,0.096094,0.769175,0.839604,-0.23778,1.267897, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.631771,0.096094,0.769175,0.829506,-0.255335,1.261796, + -0.631771,0.096094,0.769175,0.829506,-0.255335,1.261796, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.631771,0.096094,0.769175,0.817839,-0.27125,1.254201, + -0.631771,0.096094,0.769175,0.817839,-0.27125,1.254201, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.631771,0.096094,0.769175,0.804797,-0.285259,1.245239, + -0.631771,0.096094,0.769175,0.804797,-0.285259,1.245239, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.631771,0.096094,0.769175,0.790598,-0.297129,1.23506, + -0.631771,0.096094,0.769175,0.790598,-0.297129,1.23506, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.704036,0.00442,0.71015,0.782018,-0.302539,1.228689, + -0.866464,-0.37452,0.330114,0.455635,-0.09635,0.818877, + -0.855881,-0.307094,0.416127,0.592896,-0.292953,0.956179, + -0.844783,-0.265761,0.464449,0.477253,-0.098489,0.857111, + -0.824319,-0.208014,0.526525,0.538904,-0.105527,0.964835, + -0.855881,-0.307094,0.416127,0.592896,-0.292953,0.956179, + -0.78972,-0.133178,0.598838,0.682929,-0.311817,1.108903, + 0.217148,-0.937956,-0.270342,1.594074,0.1157,1.569594, + 0.334033,-0.836012,-0.435321,1.076548,-0.391356,2.146834, + 0.340325,-0.836018,-0.430411,1.552194,0.1157,1.538035, + 0.334033,-0.836012,-0.435321,1.076548,-0.391356,2.146834, + 0.217148,-0.937956,-0.270342,1.594074,0.1157,1.569594, + 0.25896,-0.861903,-0.435962,1.620844,0.074945,1.667507, + 0.334033,-0.836012,-0.435321,1.076548,-0.391356,2.146834, + 0.25896,-0.861903,-0.435962,1.620844,0.074945,1.667507, + 0.318637,-0.836012,-0.446714,1.203234,-0.391356,2.242299, + -0.775202,-0.621236,-0.11458,0.365783,-0.037793,0.497331, + -0.813222,-0.581613,-0.01991,0.524328,-0.264882,0.655925, + -0.831264,-0.554669,0.036637,0.38175,-0.056076,0.582184, + 0.003527,-0.999903,-0.013502,-0.497427,0.418917,3.460249, + 0.006145,-0.999897,-0.012996,-1.473662,0.418917,3.101913, + 0.003577,-0.999903,-0.013468,-0.407016,0.429972,2.665229, + 0.396914,-0.836018,-0.378858,1.16112,0.1157,1.185911, + 0.40862,-0.836512,-0.365072,0.497191,-0.391356,1.606575, + 0.409895,-0.836018,-0.364775,1.071328,0.1157,1.08962, + 0.40862,-0.836512,-0.365072,0.497191,-0.391356,1.606575, + 0.396914,-0.836018,-0.378858,1.16112,0.1157,1.185911, + 0.392479,-0.836018,-0.383451,0.605375,-0.391356,1.722588, + -0.831264,-0.554669,0.036637,0.38175,-0.056076,0.582184, + -0.813222,-0.581613,-0.01991,0.524328,-0.264882,0.655925, + -0.849718,-0.515316,0.111482,0.396675,-0.073374,0.659509, + -0.506327,0.717294,0.478667,0.690311,-0.091124,1.126951, + -0.52259,0.598335,0.607367,0.755695,-0.079224,1.178282, + -0.486507,0.572163,0.660258,0.758981,-0.077961,1.179865, + -0.234792,0.969195,0.074391,0.755695,-0.079224,1.178282, + -0.234792,0.969195,0.074391,0.690311,-0.091124,1.126951, + -0.234792,0.969195,0.074391,0.753511,-0.079688,1.177433, + -0.849718,-0.515316,0.111482,0.396675,-0.073374,0.659509, + -0.813222,-0.581613,-0.01991,0.524328,-0.264882,0.655925, + -0.863914,-0.459936,0.205211,0.5388,-0.276944,0.801677, + -0.971815,-0.173999,-0.159059,-1.829477,-0.176182,1.957769, + -0.961223,-0.081307,-0.263515,-1.71336,-0.07239,1.405322, + -0.949732,-0.173729,-0.260436,-1.700945,-0.176182,1.408725, + -0.961223,-0.081307,-0.263515,-1.71336,-0.07239,1.405322, + -0.971815,-0.173999,-0.159059,-1.829477,-0.176182,1.957769, + -0.983612,-0.081436,-0.160861,-1.842202,-0.07239,1.955689, + -0.775202,-0.621236,-0.11458,0.365783,-0.037793,0.497331, + -0.672528,-0.677458,-0.297921,0.550466,-0.257589,0.528855, + -0.813222,-0.581613,-0.01991,0.524328,-0.264882,0.655925, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.78972,-0.133178,0.598838,0.682929,-0.311817,1.108903, + -0.764255,-0.087329,0.638974,0.724321,-0.318876,1.157447, + -0.093958,0,0.995576,-1.913398,-0.07239,2.710083, + -0.093958,0,0.995576,-1.913398,0.150374,2.710083, + -0.093958,0,0.995576,-1.917766,0.038992,2.709671, + -0.093958,0,0.995576,-1.913398,0.150374,2.710083, + -0.093958,0,0.995576,-1.913398,-0.07239,2.710083, + -0.093958,0,0.995576,-1.900591,-0.176182,2.711292, + -0.093958,0,0.995576,-1.913398,0.150374,2.710083, + -0.093958,0,0.995576,-1.900591,-0.176182,2.711292, + -0.093958,0,0.995576,-1.900591,0.254166,2.711292, + -0.093958,0,0.995576,-1.900591,0.254166,2.711292, + -0.093958,0,0.995576,-1.900591,-0.176182,2.711292, + -0.093958,0,0.995576,-1.880219,-0.26531,2.713215, + -0.093958,0,0.995576,-1.900591,0.254166,2.711292, + -0.093958,0,0.995576,-1.880219,-0.26531,2.713215, + -0.093958,0,0.995576,-1.880219,0.343294,2.713215, + -0.093958,0,0.995576,-1.880219,0.343294,2.713215, + -0.093958,0,0.995576,-1.880219,-0.26531,2.713215, + -0.093958,0,0.995576,-1.853669,-0.3337,2.71572, + -0.093958,0,0.995576,-1.880219,0.343294,2.713215, + -0.093958,0,0.995576,-1.853669,-0.3337,2.71572, + -0.093958,0,0.995576,-1.853669,0.411684,2.71572, + -0.093958,0,0.995576,-1.853669,0.411684,2.71572, + -0.093958,0,0.995576,-1.853669,-0.3337,2.71572, + -0.093958,0,0.995576,-1.822751,-0.376692,2.718638, + -0.093958,0,0.995576,-1.853669,0.411684,2.71572, + -0.093958,0,0.995576,-1.822751,-0.376692,2.718638, + -0.093958,0,0.995576,-1.822751,0.454676,2.718638, + -0.093958,0,0.995576,-1.822751,0.454676,2.718638, + -0.093958,0,0.995576,-1.822751,-0.376692,2.718638, + -0.236443,0,0.971645,-1.789572,-0.391356,2.721769, + -0.093958,0,0.995576,-1.822751,0.454676,2.718638, + -0.236443,0,0.971645,-1.789572,-0.391356,2.721769, + -0.307512,0,0.951544,-1.789572,-0.351986,2.721769, + -0.093958,0,0.995576,-1.822751,0.454676,2.718638, + -0.307512,0,0.951544,-1.789572,-0.351986,2.721769, + -0.093958,0,0.995576,-1.789572,0.418917,2.721769, + -0.093958,0,0.995576,-1.822751,0.454676,2.718638, + -0.093958,0,0.995576,-1.789572,0.418917,2.721769, + -0.093958,0,0.995576,-1.789572,0.46934,2.721769, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.764255,-0.087329,0.638974,0.724321,-0.318876,1.157447, + -0.764255,-0.087329,0.638974,0.738003,-0.319856,1.173677, + -0.893766,-0.44053,-0.08435,-1.853669,-0.3337,2.71572, + -0.942922,-0.294938,-0.154627,-1.809236,-0.26531,1.961078, + -0.866026,-0.479125,-0.142963,-1.782856,-0.3337,1.96539, + -0.942922,-0.294938,-0.154627,-1.809236,-0.26531,1.961078, + -0.893766,-0.44053,-0.08435,-1.853669,-0.3337,2.71572, + -0.958343,-0.27092,-0.090444,-1.880219,-0.26531,2.713215, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.764255,-0.087329,0.638974,0.738003,-0.319856,1.173677, + -0.764255,-0.087329,0.638974,0.751492,-0.31812,1.190048, + -0.958343,-0.27092,-0.090444,-1.880219,-0.26531,2.713215, + -0.971815,-0.173999,-0.159059,-1.829477,-0.176182,1.957769, + -0.942922,-0.294938,-0.154627,-1.809236,-0.26531,1.961078, + -0.971815,-0.173999,-0.159059,-1.829477,-0.176182,1.957769, + -0.958343,-0.27092,-0.090444,-1.880219,-0.26531,2.713215, + -0.983266,-0.156769,-0.092796,-1.900591,-0.176182,2.711292, + -0.983266,-0.156769,-0.092796,-1.900591,-0.176182,2.711292, + -0.983612,-0.081436,-0.160861,-1.842202,-0.07239,1.955689, + -0.971815,-0.173999,-0.159059,-1.829477,-0.176182,1.957769, + -0.983612,-0.081436,-0.160861,-1.842202,-0.07239,1.955689, + -0.983266,-0.156769,-0.092796,-1.900591,-0.176182,2.711292, + -0.99332,-0.067292,-0.093745,-1.913398,-0.07239,2.710083, + -0.807042,-0.585562,-0.076165,-1.822751,-0.376692,2.718638, + -0.866026,-0.479125,-0.142963,-1.782856,-0.3337,1.96539, + -0.796278,-0.586351,-0.148771,-1.752137,-0.376692,1.970411, + -0.866026,-0.479125,-0.142963,-1.782856,-0.3337,1.96539, + -0.807042,-0.585562,-0.076165,-1.822751,-0.376692,2.718638, + -0.893766,-0.44053,-0.08435,-1.853669,-0.3337,2.71572, + -0.397992,0.380616,0.834706,0.886816,-0.070199,1.246183, + -0.355285,0.355664,0.864451,0.868735,-0.0443,1.228096, + -0.452228,0.452832,0.768397,0.762622,-0.077692,1.181918, + -0.47928,0.243811,0.843117,0.865187,-0.178304,1.269373, + -0.490795,0.246987,0.835534,0.753511,-0.079688,1.177433, + -0.456234,0.272969,0.846958,0.857464,-0.198941,1.271864, + -0.456234,0.272969,0.846958,0.857464,-0.198941,1.271864, + -0.490795,0.246987,0.835534,0.753511,-0.079688,1.177433, + -0.611735,0.119506,0.781984,0.84883,-0.216217,1.272781, + -0.672528,-0.677458,-0.297921,0.550466,-0.257589,0.528855, + -0.507972,-0.702526,-0.498419,0.391924,0.064577,0.205552, + -0.507497,-0.702632,-0.498754,0.615433,-0.255562,0.429129, + -0.672528,-0.677458,-0.297921,0.550466,-0.257589,0.528855, + -0.595393,-0.695809,-0.401693,0.378789,0.038394,0.270618, + -0.507972,-0.702526,-0.498419,0.391924,0.064577,0.205552, + -0.672528,-0.677458,-0.297921,0.550466,-0.257589,0.528855, + -0.671967,-0.6777,-0.298635,0.364466,0.008825,0.342799, + -0.595393,-0.695809,-0.401693,0.378789,0.038394,0.270618, + 0.277111,-0.836018,-0.473586,1.711893,-0.247344,2.31135, + 0.288056,-0.836018,-0.46701,1.46621,-0.391356,2.419678, + 0.29347,-0.836018,-0.463626,1.681237,-0.12504,2.075563, + 0.288056,-0.836018,-0.46701,1.46621,-0.391356,2.419678, + 0.277111,-0.836018,-0.473586,1.711893,-0.247344,2.31135, + 0.270198,-0.836012,-0.477573,1.60218,-0.391356,2.501378, + 0.262608,-0.840906,-0.473195,1.72906,-0.317688,2.443393, + 0.270198,-0.836012,-0.477573,1.60218,-0.391356,2.501378, + 0.277111,-0.836018,-0.473586,1.711893,-0.247344,2.31135, + 0.270198,-0.836012,-0.477573,1.60218,-0.391356,2.501378, + 0.262608,-0.840906,-0.473195,1.72906,-0.317688,2.443393, + 0.285897,-0.82997,-0.478972,1.743775,-0.387364,2.572911, + 0.270198,-0.836012,-0.477573,1.60218,-0.391356,2.501378, + 0.285897,-0.82997,-0.478972,1.743775,-0.387364,2.572911, + 0.266041,-0.835984,-0.479951,1.740919,-0.391356,2.578282, + 0.29347,-0.836018,-0.463626,1.681237,-0.12504,2.075563, + 0.304179,-0.836018,-0.456672,1.333174,-0.391356,2.333284, + 0.309472,-0.836018,-0.453102,1.653081,-0.015885,1.859001, + 0.304179,-0.836018,-0.456672,1.333174,-0.391356,2.333284, + 0.29347,-0.836018,-0.463626,1.681237,-0.12504,2.075563, + 0.288056,-0.836018,-0.46701,1.46621,-0.391356,2.419678, + 0.240977,-0.859676,-0.450429,1.63484,0.05269,1.718695, + 0.318637,-0.836012,-0.446714,1.203234,-0.391356,2.242299, + 0.25896,-0.861903,-0.435962,1.620844,0.074945,1.667507, + 0.318637,-0.836012,-0.446714,1.203234,-0.391356,2.242299, + 0.240977,-0.859676,-0.450429,1.63484,0.05269,1.718695, + 0.309472,-0.836018,-0.453102,1.653081,-0.015885,1.859001, + 0.318637,-0.836012,-0.446714,1.203234,-0.391356,2.242299, + 0.309472,-0.836018,-0.453102,1.653081,-0.015885,1.859001, + 0.304179,-0.836018,-0.456672,1.333174,-0.391356,2.333284, + 0.998221,0,-0.059628,1.772155,-0.391357,2.822721, + 0.998221,0,-0.059628,1.792693,-0.351987,3.166558, + 0.998221,0,-0.059628,1.792693,-0.391357,3.166558, + 0.998221,0,-0.059628,1.792693,-0.351987,3.166558, + 0.998221,0,-0.059628,1.772155,-0.391357,2.822721, + 0.99627,0,-0.086285,1.772155,-0.351987,2.822721, + 0.034078,0,0.999419,1.767439,-0.351987,2.781212, + -0.031469,0,0.999505,0.551147,0.429969,2.822685, + -0.097163,0,0.995268,0.551147,-0.351987,2.822685, + -0.031469,0,0.999505,0.551147,0.429969,2.822685, + 0.034078,0,0.999419,1.767439,-0.351987,2.781212, + 0.034078,0,0.999419,1.767439,0.429968,2.781212, + 0.993609,0,-0.112881,1.767999,-0.351987,2.786146, + 0.995462,0,-0.09516,1.772155,0.429175,2.822721, + 0.99627,0,-0.086285,1.772155,-0.351987,2.822721, + 0.995462,0,-0.09516,1.772155,0.429175,2.822721, + 0.993609,0,-0.112881,1.767999,-0.351987,2.786146, + 0.993609,0,-0.112881,1.767439,-0.351987,2.781212, + 0.995462,0,-0.09516,1.772155,0.429175,2.822721, + 0.993609,0,-0.112881,1.767439,-0.351987,2.781212, + 0.993609,0,-0.112881,1.767439,0.429968,2.781212, + 0.995462,0,-0.09516,1.772155,0.429175,2.822721, + 0.993609,0,-0.112881,1.767439,0.429968,2.781212, + 0.993609,0,-0.112881,1.768126,0.429883,2.787255, + -0.987753,0,0.156023,-1.760402,0.46934,2.906435, + -0.987753,0,0.156023,-1.789572,0.418917,2.721769, + -0.987753,0,0.156023,-1.760402,0.418917,2.906435, + -0.987753,0,0.156023,-1.789572,0.418917,2.721769, + -0.987753,0,0.156023,-1.760402,0.46934,2.906435, + -0.987753,0,0.156023,-1.789572,0.46934,2.721769, + 0.141065,0.989418,0.033953,1.804276,0.469339,3.360463, + 0.315789,0.947008,-0.058772,1.772155,0.469339,2.822721, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + -0.13077,0.99131,-0.01428,-1.234429,0.56934,2.130951, + -0.302581,0.949833,-0.079128,-1.593323,0.46934,1.438224, + -0.224548,0.97391,-0.032814,-1.71917,0.452349,1.9758, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + 0.326344,0.942627,-0.070391,1.744615,0.460772,2.580312, + 0.326686,0.943881,-0.048628,1.72906,0.455932,2.443393, + 0.326344,0.942627,-0.070391,1.744615,0.460772,2.580312, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + 0.315789,0.947008,-0.058772,1.772155,0.469339,2.822721, + 0.32092,-0.381383,-0.866924,0.854313,0.115699,0.11448, + 0.176399,-0.477835,-0.860556,0.987772,-0.280632,0.35003, + 0.101282,-0.521126,-0.847449,0.711069,0.115699,0.073242, + 0.176399,-0.477835,-0.860556,0.987772,-0.280632,0.35003, + 0.32092,-0.381383,-0.866924,0.854313,0.115699,0.11448, + 0.390324,-0.328222,-0.860184,1.142772,-0.29747,0.403027, + 0.741813,0.050923,-0.66867,1.121322,0.115699,0.294234, + 0.764255,0.087329,-0.638974,1.402704,-0.285122,0.576005, + 0.650762,-0.073441,-0.755722,1.401838,-0.286095,0.574837, + 0.764255,0.087329,-0.638974,1.402704,-0.285122,0.576005, + 0.741813,0.050923,-0.66867,1.121322,0.115699,0.294234, + 0.764255,0.087329,-0.638974,1.412052,-0.271114,0.589101, + 0.764255,0.087329,-0.638974,1.412052,-0.271114,0.589101, + 0.741813,0.050923,-0.66867,1.121322,0.115699,0.294234, + 0.764255,0.087329,-0.638974,1.420033,-0.2552,0.600822, + 0.764255,0.087329,-0.638974,1.420033,-0.2552,0.600822, + 0.741813,0.050923,-0.66867,1.121322,0.115699,0.294234, + 0.764255,0.087329,-0.638974,1.426514,-0.237645,0.610972, + 0.764255,0.087329,-0.638974,1.426514,-0.237645,0.610972, + 0.741813,0.050923,-0.66867,1.121322,0.115699,0.294234, + 0.764255,0.087329,-0.638974,1.431386,-0.218743,0.619383, + 0.764255,0.087329,-0.638974,1.431386,-0.218743,0.619383, + 0.741813,0.050923,-0.66867,1.121322,0.115699,0.294234, + 0.764255,0.087329,-0.638974,1.434568,-0.198808,0.625914, + 0.764255,0.087329,-0.638974,1.434568,-0.198808,0.625914, + 0.741813,0.050923,-0.66867,1.121322,0.115699,0.294234, + 0.797114,0.147609,-0.58551,1.435649,-0.183315,0.629324, + 0.797114,0.147609,-0.58551,1.435649,-0.183315,0.629324, + 0.741813,0.050923,-0.66867,1.121322,0.115699,0.294234, + 0.829874,0.221855,-0.511946,1.226889,0.115699,0.4205, + 0.315789,0.947008,-0.058772,1.772155,0.469339,2.822721, + 0.486592,0.869856,-0.08111,1.777642,0.445154,2.578459, + 0.326344,0.942627,-0.070391,1.744615,0.460772,2.580312, + 0.741813,0.050923,-0.66867,1.121322,0.115699,0.294234, + 0.591679,-0.141218,-0.793708,1.296236,-0.316855,0.491942, + 0.518689,-0.21565,-0.827319,0.994243,0.115699,0.189857, + 0.591679,-0.141218,-0.793708,1.296236,-0.316855,0.491942, + 0.741813,0.050923,-0.66867,1.121322,0.115699,0.294234, + 0.650762,-0.073441,-0.755722,1.401838,-0.286095,0.574837, + 0.591679,-0.141218,-0.793708,1.296236,-0.316855,0.491942, + 0.650762,-0.073441,-0.755722,1.401838,-0.286095,0.574837, + 0.631771,-0.096094,-0.769175,1.309184,-0.318742,0.502813, + 0.631771,-0.096094,-0.769175,1.309184,-0.318742,0.502813, + 0.650762,-0.073441,-0.755722,1.401838,-0.286095,0.574837, + 0.631771,-0.096094,-0.769175,1.325375,-0.319721,0.516234, + 0.631771,-0.096094,-0.769175,1.325375,-0.319721,0.516234, + 0.650762,-0.073441,-0.755722,1.401838,-0.286095,0.574837, + 0.631771,-0.096094,-0.769175,1.341703,-0.317985,0.529428, + 0.631771,-0.096094,-0.769175,1.341703,-0.317985,0.529428, + 0.650762,-0.073441,-0.755722,1.401838,-0.286095,0.574837, + 0.631771,-0.096094,-0.769175,1.357896,-0.313562,0.542176, + 0.631771,-0.096094,-0.769175,1.357896,-0.313562,0.542176, + 0.650762,-0.073441,-0.755722,1.401838,-0.286095,0.574837, + 0.631771,-0.096094,-0.769175,1.373684,-0.306525,0.554264, + 0.631771,-0.096094,-0.769175,1.373684,-0.306525,0.554264, + 0.650762,-0.073441,-0.755722,1.401838,-0.286095,0.574837, + 0.631771,-0.096094,-0.769175,1.388803,-0.296992,0.565492, + 0.315789,0.947008,-0.058772,1.772155,0.469339,2.822721, + 0.400291,0.912767,-0.081386,1.805181,0.45469,2.820868, + 0.486592,0.869856,-0.08111,1.777642,0.445154,2.578459, + 0.986902,0,0.161321,-1.71917,0.46934,1.9758, + 0.989006,0,0.147878,-1.71917,0.452349,1.9758, + 0.973675,0,0.22794,-1.593323,0.46934,1.438224, + 0.995576,0,0.093958,-1.789572,0.46934,2.721769, + 0.989006,0,0.147878,-1.71917,0.452349,1.9758, + 0.986902,0,0.161321,-1.71917,0.46934,1.9758, + 0.973675,0,0.22794,-1.593323,-0.351986,1.438224, + 0.982991,0,0.183655,-1.719171,-0.391356,1.9758, + 0.973675,0,0.22794,-1.593323,-0.391356,1.438224, + 0.982991,0,0.183655,-1.719171,-0.391356,1.9758, + 0.973675,0,0.22794,-1.593323,-0.351986,1.438224, + 0.986902,0,0.161321,-1.719171,-0.351986,1.9758, + 0.986902,0,0.161321,-1.719171,-0.351986,1.9758, + 0.973675,0,0.22794,-1.593323,-0.351986,1.438224, + 0.973675,0,0.22794,-1.593323,0.418917,1.438224, + 0.986902,0,0.161321,-1.719171,-0.351986,1.9758, + 0.973675,0,0.22794,-1.593323,0.418917,1.438224, + 0.986902,0,0.161321,-1.71917,0.418917,1.9758, + 0.986902,0,0.161321,-1.71917,0.418917,1.9758, + 0.973675,0,0.22794,-1.593323,0.418917,1.438224, + 0.973675,0,0.22794,-1.593323,0.46934,1.438224, + 0.986902,0,0.161321,-1.71917,0.418917,1.9758, + 0.973675,0,0.22794,-1.593323,0.46934,1.438224, + 0.989006,0,0.147878,-1.71917,0.452349,1.9758, + 0.866467,0.373928,-0.330776,1.303752,0.115699,0.560049, + 0.861953,0.471316,-0.186813,1.360664,0.095657,0.717369, + 0.858796,0.320379,-0.399784,1.407455,-0.032839,0.663785, + 0.861953,0.471316,-0.186813,1.360664,0.095657,0.717369, + 0.866467,0.373928,-0.330776,1.303752,0.115699,0.560049, + 0.856683,0.49371,-0.14948,1.346671,0.115699,0.703372, + -0.454111,0,0.890945,-1.473662,-0.391356,2.907315, + -0.307512,0,0.951544,-1.789572,-0.351986,2.721769, + -0.236443,0,0.971645,-1.789572,-0.391356,2.721769, + -0.307512,0,0.951544,-1.789572,-0.351986,2.721769, + -0.454111,0,0.890945,-1.473662,-0.391356,2.907315, + -0.399962,0,0.916532,-1.473662,-0.351986,2.907315, + 0.655352,-0.477297,0.585407,1.426514,-0.237645,0.610972, + 0.68352,-0.399978,0.610588,0.847965,-0.218877,1.272403, + 0.639403,-0.514734,0.57115,0.839604,-0.23778,1.267897, + 0.68352,-0.399978,0.610588,0.847965,-0.218877,1.272403, + 0.655352,-0.477297,0.585407,1.426514,-0.237645,0.610972, + 0.695739,-0.360096,0.621513,1.431386,-0.218743,0.619383, + 0.695739,-0.360096,0.621513,1.431386,-0.218743,0.619383, + 0.706645,-0.319621,0.631265,0.84883,-0.216217,1.272781, + 0.68352,-0.399978,0.610588,0.847965,-0.218877,1.272403, + 0.706645,-0.319621,0.631265,0.84883,-0.216217,1.272781, + 0.695739,-0.360096,0.621513,1.431386,-0.218743,0.619383, + 0.720552,-0.257783,0.643702,1.434568,-0.198808,0.625914, + 0.706645,-0.319621,0.631265,0.84883,-0.216217,1.272781, + 0.720552,-0.257783,0.643702,1.434568,-0.198808,0.625914, + 0.720552,-0.257783,0.643702,0.857464,-0.198941,1.271864, + 0.986902,0,0.161321,-1.719171,-0.351986,1.9758, + 0.995576,0,0.093958,-1.789572,-0.391356,2.721769, + 0.982991,0,0.183655,-1.719171,-0.391356,1.9758, + 0.995576,0,0.093958,-1.789572,-0.391356,2.721769, + 0.986902,0,0.161321,-1.719171,-0.351986,1.9758, + 0.996516,0,0.083404,-1.789572,-0.351986,2.721769, + 0.996516,0,0.083404,-1.789572,-0.351986,2.721769, + 0.986902,0,0.161321,-1.719171,-0.351986,1.9758, + 0.986902,0,0.161321,-1.71917,0.418917,1.9758, + 0.996516,0,0.083404,-1.789572,-0.351986,2.721769, + 0.986902,0,0.161321,-1.71917,0.418917,1.9758, + 0.996177,0,0.087363,-1.789572,0.418917,2.721769, + 0.996177,0,0.087363,-1.789572,0.418917,2.721769, + 0.986902,0,0.161321,-1.71917,0.418917,1.9758, + 0.989006,0,0.147878,-1.71917,0.452349,1.9758, + 0.996177,0,0.087363,-1.789572,0.418917,2.721769, + 0.989006,0,0.147878,-1.71917,0.452349,1.9758, + 0.995576,0,0.093958,-1.789572,0.46934,2.721769, + 0.093565,-0.992115,0.08339,1.341703,-0.317985,0.529428, + 0.029609,-0.999217,0.026249,0.738003,-0.319856,1.173677, + -0.00254,-0.999994,-0.002474,1.325375,-0.319721,0.516234, + 0.029609,-0.999217,0.026249,0.738003,-0.319856,1.173677, + 0.093565,-0.992115,0.08339,1.341703,-0.317985,0.529428, + 0.125371,-0.98579,0.111807,0.751492,-0.31812,1.190048, + 0.420811,-0.825651,0.375791,1.401838,-0.286095,0.574837, + 0.388456,-0.853684,0.346879,0.790598,-0.297129,1.23506, + 0.366268,-0.87114,0.327053,1.388803,-0.296992,0.565492, + 0.388456,-0.853684,0.346879,0.790598,-0.297129,1.23506, + 0.420811,-0.825651,0.375791,1.401838,-0.286095,0.574837, + 0.446912,-0.80061,0.399116,1.402704,-0.285122,0.576005, + 0.388456,-0.853684,0.346879,0.790598,-0.297129,1.23506, + 0.446912,-0.80061,0.399116,1.402704,-0.285122,0.576005, + 0.472231,-0.774036,0.421742,0.804797,-0.285259,1.245239, + -0.00254,-0.999994,-0.002474,1.325375,-0.319721,0.516234, + -0.068953,-0.995703,-0.061808,0.724321,-0.318876,1.157447, + -0.066668,-0.995984,-0.059767,1.309184,-0.318742,0.502813, + -0.068953,-0.995703,-0.061808,0.724321,-0.318876,1.157447, + -0.00254,-0.999994,-0.002474,1.325375,-0.319721,0.516234, + 0.029609,-0.999217,0.026249,0.738003,-0.319856,1.173677, + 0.279519,-0.927146,0.249538,1.373684,-0.306525,0.554264, + 0.219043,-0.955929,0.195501,0.764565,-0.313698,1.206288, + 0.18811,-0.967697,0.167863,1.357896,-0.313562,0.542176, + 0.219043,-0.955929,0.195501,0.764565,-0.313698,1.206288, + 0.279519,-0.927146,0.249538,1.373684,-0.306525,0.554264, + 0.316357,-0.905615,0.282454,0.777003,-0.306661,1.222126, + -0.125259,-0.625354,-0.770222,0.574271,0.115699,0.068952, + -0.343264,-0.686966,-0.640506,0.714801,-0.258939,0.363541, + -0.307986,-0.679834,-0.66556,0.453243,0.1157,0.101903, + -0.343264,-0.686966,-0.640506,0.714801,-0.258939,0.363541, + -0.125259,-0.625354,-0.770222,0.574271,0.115699,0.068952, + -0.049547,-0.594885,-0.802282,0.841799,-0.26749,0.336562, + 0.831215,0.554744,-0.036624,1.347924,0.115699,0.731818, + 0.861953,0.471316,-0.186813,1.360664,0.095657,0.717369, + 0.856683,0.49371,-0.14948,1.346671,0.115699,0.703372, + 0.829874,0.221855,-0.511946,1.226889,0.115699,0.4205, + 0.844655,0.264802,-0.465229,1.435175,-0.178174,0.631389, + 0.797114,0.147609,-0.58551,1.435649,-0.183315,0.629324, + 0.844655,0.264802,-0.465229,1.435175,-0.178174,0.631389, + 0.829874,0.221855,-0.511946,1.226889,0.115699,0.4205, + 0.858796,0.320379,-0.399784,1.407455,-0.032839,0.663785, + 0.858796,0.320379,-0.399784,1.407455,-0.032839,0.663785, + 0.829874,0.221855,-0.511946,1.226889,0.115699,0.4205, + 0.866467,0.373928,-0.330776,1.303752,0.115699,0.560049, + 0.18811,-0.967697,0.167863,1.357896,-0.313562,0.542176, + 0.125371,-0.98579,0.111807,0.751492,-0.31812,1.190048, + 0.093565,-0.992115,0.08339,1.341703,-0.317985,0.529428, + 0.125371,-0.98579,0.111807,0.751492,-0.31812,1.190048, + 0.18811,-0.967697,0.167863,1.357896,-0.313562,0.542176, + 0.219043,-0.955929,0.195501,0.764565,-0.313698,1.206288, + 0.518689,-0.21565,-0.827319,0.994243,0.115699,0.189857, + 0.390324,-0.328222,-0.860184,1.142772,-0.29747,0.403027, + 0.32092,-0.381383,-0.866924,0.854313,0.115699,0.11448, + 0.390324,-0.328222,-0.860184,1.142772,-0.29747,0.403027, + 0.518689,-0.21565,-0.827319,0.994243,0.115699,0.189857, + 0.591679,-0.141218,-0.793708,1.296236,-0.316855,0.491942, + 0.594472,-0.603866,0.530989,1.420033,-0.2552,0.600822, + 0.542659,-0.686007,0.484682,0.817839,-0.27125,1.254201, + 0.520105,-0.716734,0.464525,1.412052,-0.271114,0.589101, + 0.542659,-0.686007,0.484682,0.817839,-0.27125,1.254201, + 0.594472,-0.603866,0.530989,1.420033,-0.2552,0.600822, + 0.594472,-0.603866,0.530989,0.829506,-0.255335,1.261796, + -0.397992,0.380616,0.834706,0.886816,-0.070199,1.246183, + -0.499279,0.460824,0.733731,0.758404,-0.078952,1.180247, + -0.47928,0.243811,0.843117,0.865187,-0.178304,1.269373, + 0.743937,-0.06942,0.664634,1.435175,-0.178174,0.631389, + 0.745715,-0.006279,0.666235,0.886816,-0.070199,1.246183, + 0.737507,-0.148222,0.658873,0.865187,-0.178304,1.269373, + 0.745715,-0.006279,0.666235,0.886816,-0.070199,1.246183, + 0.743937,-0.06942,0.664634,1.435175,-0.178174,0.631389, + 0.745715,-0.006279,0.666235,1.407455,-0.032839,0.663785, + 0.745715,-0.006279,0.666235,0.886816,-0.070199,1.246183, + 0.745715,-0.006279,0.666235,1.407455,-0.032839,0.663785, + 0.745715,-0.006279,0.666235,0.901767,-0.028687,1.229839, + 0.745715,-0.006279,0.666235,0.901767,-0.028687,1.229839, + 0.745715,-0.006279,0.666235,1.407455,-0.032839,0.663785, + 0.745715,-0.006279,0.666235,1.360664,0.095657,0.717369, + 0.745715,-0.006279,0.666235,0.901767,-0.028687,1.229839, + 0.745715,-0.006279,0.666235,1.360664,0.095657,0.717369, + 0.745715,-0.006279,0.666235,1.050087,0.1157,1.065186, + 0.745715,-0.006279,0.666235,1.050087,0.1157,1.065186, + 0.745715,-0.006279,0.666235,1.360664,0.095657,0.717369, + 0.745715,-0.006279,0.666235,1.347924,0.115699,0.731818, + 0,1,0,-1.789572,-0.351986,2.721769, + 0,1,0,-1.343835,-0.351986,2.308269, + 0,1,0,-1.753229,-0.351986,2.185036, + 0,1,0,-1.343835,-0.351986,2.308269, + 0,1,0,-1.789572,-0.351986,2.721769, + 0,1,0,-1.473662,-0.351986,2.907315, + 0.432927,-0.836473,-0.335988,0.293295,-0.391356,1.363581, + 0.433809,-0.83702,-0.333476,0.555173,-0.104583,0.984454, + 0.435934,-0.836023,-0.333207,0.640686,-0.100103,1.087313, + -0.082643,-0.993825,-0.074039,0.987772,-0.280632,0.35003, + -0.082643,-0.993825,-0.074039,0.714801,-0.258939,0.363541, + -0.082643,-0.993825,-0.074039,0.841799,-0.26749,0.336562, + -0.082643,-0.993825,-0.074039,0.714801,-0.258939,0.363541, + -0.082643,-0.993825,-0.074039,0.987772,-0.280632,0.35003, + -0.082643,-0.993825,-0.074039,1.142772,-0.29747,0.403027, + -0.082643,-0.993825,-0.074039,0.714801,-0.258939,0.363541, + -0.082643,-0.993825,-0.074039,1.142772,-0.29747,0.403027, + -0.082643,-0.993825,-0.074039,0.615433,-0.255562,0.429129, + -0.082643,-0.993825,-0.074039,0.615433,-0.255562,0.429129, + -0.082643,-0.993825,-0.074039,1.142772,-0.29747,0.403027, + -0.082643,-0.993825,-0.074039,1.296236,-0.316855,0.491942, + -0.082643,-0.993825,-0.074039,0.615433,-0.255562,0.429129, + -0.082643,-0.993825,-0.074039,1.296236,-0.316855,0.491942, + -0.082643,-0.993825,-0.074039,0.550466,-0.257589,0.528855, + -0.082643,-0.993825,-0.074039,0.550466,-0.257589,0.528855, + -0.082643,-0.993825,-0.074039,1.296236,-0.316855,0.491942, + -0.066668,-0.995984,-0.059767,1.309184,-0.318742,0.502813, + -0.082643,-0.993825,-0.074039,0.550466,-0.257589,0.528855, + -0.066668,-0.995984,-0.059767,1.309184,-0.318742,0.502813, + -0.068953,-0.995703,-0.061808,0.724321,-0.318876,1.157447, + -0.082643,-0.993825,-0.074039,0.550466,-0.257589,0.528855, + -0.068953,-0.995703,-0.061808,0.724321,-0.318876,1.157447, + -0.082643,-0.993825,-0.074039,0.524328,-0.264882,0.655925, + -0.082643,-0.993825,-0.074039,0.524328,-0.264882,0.655925, + -0.068953,-0.995703,-0.061808,0.724321,-0.318876,1.157447, + -0.082643,-0.993825,-0.074039,0.5388,-0.276944,0.801677, + -0.082643,-0.993825,-0.074039,0.5388,-0.276944,0.801677, + -0.068953,-0.995703,-0.061808,0.724321,-0.318876,1.157447, + -0.082643,-0.993825,-0.074039,0.592896,-0.292953,0.956179, + -0.082643,-0.993825,-0.074039,0.592896,-0.292953,0.956179, + -0.068953,-0.995703,-0.061808,0.724321,-0.318876,1.157447, + -0.082643,-0.993825,-0.074039,0.682929,-0.311817,1.108903, + 0.986813,-0.09744,-0.129251,1.867696,-0.075915,2.573407, + 0.981604,-0.156227,-0.109762,1.882448,-0.17612,2.816533, + 0.969456,-0.193643,-0.150523,1.854908,-0.178538,2.574124, + 0.981604,-0.156227,-0.109762,1.882448,-0.17612,2.816533, + 0.986813,-0.09744,-0.129251,1.867696,-0.075915,2.573407, + 0.99148,-0.06721,-0.111576,1.895235,-0.072325,2.815815, + -0.249605,0.431242,0.867022,0.901767,-0.028687,1.229839, + -0.355285,0.355664,0.864451,0.868735,-0.0443,1.228096, + -0.397992,0.380616,0.834706,0.886816,-0.070199,1.246183, + 0.520105,-0.716734,0.464525,1.412052,-0.271114,0.589101, + 0.472231,-0.774036,0.421742,0.804797,-0.285259,1.245239, + 0.446912,-0.80061,0.399116,1.402704,-0.285122,0.576005, + 0.472231,-0.774036,0.421742,0.804797,-0.285259,1.245239, + 0.520105,-0.716734,0.464525,1.412052,-0.271114,0.589101, + 0.542659,-0.686007,0.484682,0.817839,-0.27125,1.254201, + 0.275598,-0.853624,-0.442009,1.667565,0.059804,1.716859, + 0.25896,-0.861903,-0.435962,1.620844,0.074945,1.667507, + 0.117527,-0.982232,-0.146317,1.594074,0.1157,1.569594, + 0.720552,-0.257783,0.643702,1.434568,-0.198808,0.625914, + 0.737507,-0.148222,0.658873,0.865187,-0.178304,1.269373, + 0.720552,-0.257783,0.643702,0.857464,-0.198941,1.271864, + 0.737507,-0.148222,0.658873,0.865187,-0.178304,1.269373, + 0.720552,-0.257783,0.643702,1.434568,-0.198808,0.625914, + 0.731453,-0.194869,0.653454,1.435649,-0.183315,0.629324, + 0.737507,-0.148222,0.658873,0.865187,-0.178304,1.269373, + 0.731453,-0.194869,0.653454,1.435649,-0.183315,0.629324, + 0.743937,-0.06942,0.664634,1.435175,-0.178174,0.631389, + -0.493712,0,0.869625,-1.473662,0.418917,3.101913, + -0.563285,0,0.826263,-1.760402,0.46934,2.906435, + -0.563285,0,0.826263,-1.760402,0.418917,2.906435, + -0.563285,0,0.826263,-1.760402,0.46934,2.906435, + -0.493712,0,0.869625,-1.473662,0.418917,3.101913, + -0.420316,0,0.907378,-1.473662,0.46934,3.101913, + 0.101282,-0.521126,-0.847449,0.711069,0.115699,0.073242, + -0.049547,-0.594885,-0.802282,0.841799,-0.26749,0.336562, + -0.125259,-0.625354,-0.770222,0.574271,0.115699,0.068952, + -0.049547,-0.594885,-0.802282,0.841799,-0.26749,0.336562, + 0.101282,-0.521126,-0.847449,0.711069,0.115699,0.073242, + 0.176399,-0.477835,-0.860556,0.987772,-0.280632,0.35003, + 0.594472,-0.603866,0.530989,1.420033,-0.2552,0.600822, + 0.639403,-0.514734,0.57115,0.839604,-0.23778,1.267897, + 0.594472,-0.603866,0.530989,0.829506,-0.255335,1.261796, + 0.639403,-0.514734,0.57115,0.839604,-0.23778,1.267897, + 0.594472,-0.603866,0.530989,1.420033,-0.2552,0.600822, + 0.655352,-0.477297,0.585407,1.426514,-0.237645,0.610972, + -0.311023,0,0.950402,-1.343835,-0.351986,2.308269, + -0.288237,0,0.957559,-1.753229,0.429973,2.185036, + -0.288237,0,0.957559,-1.753229,-0.351986,2.185036, + -0.288237,0,0.957559,-1.753229,0.429973,2.185036, + -0.311023,0,0.950402,-1.343835,-0.351986,2.308269, + -0.333644,0,0.942699,-1.343835,0.429973,2.308269, + 0.366268,-0.87114,0.327053,1.388803,-0.296992,0.565492, + 0.316357,-0.905615,0.282454,0.777003,-0.306661,1.222126, + 0.279519,-0.927146,0.249538,1.373684,-0.306525,0.554264, + 0.316357,-0.905615,0.282454,0.777003,-0.306661,1.222126, + 0.366268,-0.87114,0.327053,1.388803,-0.296992,0.565492, + 0.388456,-0.853684,0.346879,0.790598,-0.297129,1.23506, + 0.316357,-0.905615,0.282454,0.777003,-0.306661,1.222126, + 0.388456,-0.853684,0.346879,0.790598,-0.297129,1.23506, + 0.337978,-0.891461,0.301774,0.782018,-0.302539,1.228689, + 0.426503,-0.836005,-0.345241,0.665608,-0.095567,1.107224, + 0.410782,-0.836134,-0.363507,0.393122,-0.391356,1.486857, + 0.426432,-0.836018,-0.345296,0.645497,-0.099189,1.091151, + 0.410782,-0.836134,-0.363507,0.393122,-0.391356,1.486857, + 0.426503,-0.836005,-0.345241,0.665608,-0.095567,1.107224, + 0.426318,-0.836032,-0.345403,0.673898,-0.094074,1.113849, + 0.405161,-0.913099,-0.045758,1.80488,-0.376661,2.820885, + 0.252879,-0.950479,-0.180671,1.744615,-0.391346,2.580312, + 0.379015,-0.886977,-0.263854,1.777341,-0.376815,2.578476, + 0.252879,-0.950479,-0.180671,1.744615,-0.391346,2.580312, + 0.405161,-0.913099,-0.045758,1.80488,-0.376661,2.820885, + 0.207733,-0.9779,-0.023645,1.772155,-0.391357,2.822721, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + 0.240571,0.970213,-0.028486,1.63484,0.469339,1.718695, + 0.180985,0.982354,-0.047179,1.594075,0.469851,1.569594, + -0.486507,0.572163,0.660258,0.758981,-0.077961,1.179865, + -0.504226,0.552291,0.663876,0.755695,-0.079224,1.178282, + -0.479798,0.509116,0.714559,0.758404,-0.078952,1.180247, + -0.765433,-0.076157,0.638994,0.546029,-0.105148,0.973456, + -0.824319,-0.208014,0.526525,0.538904,-0.105527,0.964835, + -0.78972,-0.133178,0.598838,0.682929,-0.311817,1.108903, + 0.467544,-0.836198,-0.286662,0.020451,-0.391356,0.973919, + 0.470214,-0.836003,-0.28284,0.396675,-0.073374,0.659509, + 0.463075,-0.836184,-0.293866,0.420331,-0.082341,0.724045, + 0.494701,-0.836109,-0.23705,-0.210168,-0.391356,0.557872, + 0.500479,-0.836021,-0.224924,0.428578,0.1157,0.099871, + 0.496685,-0.836056,-0.233057,0.406831,0.08212,0.174281, + 0.494701,-0.836109,-0.23705,-0.210168,-0.391356,0.557872, + 0.496685,-0.836056,-0.233057,0.406831,0.08212,0.174281, + 0.49078,-0.836227,-0.244662,0.378789,0.038394,0.270618, + 0.430585,-0.755425,-0.493893,0.762622,-0.077692,1.181918, + 0.441471,-0.737274,-0.511401,0.758404,-0.078952,1.180247, + 0.496169,-0.607991,-0.619809,0.758981,-0.077961,1.179865, + 0.432927,-0.836473,-0.335988,0.293295,-0.391356,1.363581, + 0.435934,-0.836023,-0.333207,0.640686,-0.100103,1.087313, + 0.428434,-0.836046,-0.342742,0.643743,-0.099518,1.08978, + 0.456862,-0.836223,-0.303327,0.106845,-0.391356,1.106955, + 0.463075,-0.836184,-0.293866,0.420331,-0.082341,0.724045, + 0.459265,-0.836065,-0.300117,0.455635,-0.09635,0.818877, + 0.240977,-0.859676,-0.450429,1.63484,0.05269,1.718695, + 0.25896,-0.861903,-0.435962,1.620844,0.074945,1.667507, + 0.275598,-0.853624,-0.442009,1.667565,0.059804,1.716859, + 0.367836,-0.89319,-0.258668,0.690311,-0.091124,1.126951, + 0.324389,-0.893916,-0.309333,0.755695,-0.079224,1.178282, + 0.341562,-0.894102,-0.289684,0.753511,-0.079688,1.177433, + 0.444321,-0.74498,-0.497578,0.755695,-0.079224,1.178282, + 0.455024,-0.799852,-0.391394,0.690311,-0.091124,1.126951, + 0.496169,-0.607991,-0.619809,0.758981,-0.077961,1.179865, + 0.444321,-0.74498,-0.497578,0.755695,-0.079224,1.178282, + 0.496169,-0.607991,-0.619809,0.758981,-0.077961,1.179865, + 0.441471,-0.737274,-0.511401,0.758404,-0.078952,1.180247, + 0.828657,-0.513374,-0.223105,1.808137,-0.334296,2.576748, + 0.806377,-0.584412,-0.090654,1.80488,-0.376661,2.820885, + 0.782324,-0.576239,-0.23647,1.777341,-0.376815,2.578476, + 0.986813,-0.09744,-0.129251,1.867696,-0.075915,2.573407, + 0.969456,-0.193643,-0.150523,1.854908,-0.178538,2.574124, + 0.964083,-0.187609,-0.188009,1.839353,-0.124227,2.437205, + 0.993252,-0.014102,-0.11512,1.872085,0.03421,2.57316, + 0.986813,-0.09744,-0.129251,1.867696,-0.075915,2.573407, + 0.986156,-0.079836,-0.145337,1.852141,-0.030933,2.436487, + 0.992962,0.019572,-0.116804,1.85653,0.069181,2.436241, + 0.993252,-0.014102,-0.11512,1.872085,0.03421,2.57316, + 0.986156,-0.079836,-0.145337,1.852141,-0.030933,2.436487, + 0.892304,-0.335983,-0.30151,1.745133,0.156883,1.712507, + 0.915392,-0.31686,-0.248308,1.819039,-0.204345,2.438344, + 0.782483,-0.506128,-0.362704,1.724818,0.113734,1.713647, + 0.956965,-0.269823,-0.106838,1.862133,-0.265255,2.817672, + 0.892998,-0.438832,-0.099907,1.835677,-0.333656,2.819157, + 0.929733,-0.320654,-0.181048,1.834594,-0.266668,2.575264, + 0.929733,-0.320654,-0.181048,1.834594,-0.266668,2.575264, + 0.892998,-0.438832,-0.099907,1.835677,-0.333656,2.819157, + 0.828657,-0.513374,-0.223105,1.808137,-0.334296,2.576748, + 0.941461,0.31575,-0.118125,1.862354,0.343336,2.81766, + 0.974976,0.189186,-0.116748,1.882604,0.254219,2.816524, + 0.95607,0.274398,-0.103135,1.834814,0.335056,2.575251, + 0.850682,0.512682,-0.116178,1.835947,0.411713,2.819142, + 0.941461,0.31575,-0.118125,1.862354,0.343336,2.81766, + 0.889216,0.445544,-0.103856,1.808407,0.402661,2.576733, + 0.805615,0.58129,-0.114393,1.805181,0.45469,2.820868, + 0.850682,0.512682,-0.116178,1.835947,0.411713,2.819142, + 0.797689,0.594217,-0.102947,1.777642,0.445154,2.578459, + 0.981604,-0.156227,-0.109762,1.882448,-0.17612,2.816533, + 0.956965,-0.269823,-0.106838,1.862133,-0.265255,2.817672, + 0.969456,-0.193643,-0.150523,1.854908,-0.178538,2.574124, + 0.987616,0.121103,-0.099745,1.852221,0.169291,2.436483, + 0.991975,0.067695,-0.106788,1.867776,0.144331,2.573402, + 0.992962,0.019572,-0.116804,1.85653,0.069181,2.436241, + 0.782483,-0.506128,-0.362704,1.724818,0.113734,1.713647, + 0.915392,-0.31686,-0.248308,1.819039,-0.204345,2.438344, + 0.807977,-0.486376,-0.332584,1.792582,-0.265825,2.439829, + 0.991975,0.067695,-0.106788,1.867776,0.144331,2.573402, + 0.993252,-0.014102,-0.11512,1.872085,0.03421,2.57316, + 0.992962,0.019572,-0.116804,1.85653,0.069181,2.436241, + 0.797689,0.594217,-0.102947,1.777642,0.445154,2.578459, + 0.850682,0.512682,-0.116178,1.835947,0.411713,2.819142, + 0.889216,0.445544,-0.103856,1.808407,0.402661,2.576733, + 0.889216,0.445544,-0.103856,1.808407,0.402661,2.576733, + 0.941461,0.31575,-0.118125,1.862354,0.343336,2.81766, + 0.95607,0.274398,-0.103135,1.834814,0.335056,2.575251, + 0.969456,-0.193643,-0.150523,1.854908,-0.178538,2.574124, + 0.956965,-0.269823,-0.106838,1.862133,-0.265255,2.817672, + 0.929733,-0.320654,-0.181048,1.834594,-0.266668,2.575264, + 0.95607,0.274398,-0.103135,1.834814,0.335056,2.575251, + 0.974976,0.189186,-0.116748,1.882604,0.254219,2.816524, + 0.981926,0.158648,-0.103211,1.855064,0.246944,2.574115, + 0.892998,-0.438832,-0.099907,1.835677,-0.333656,2.819157, + 0.806377,-0.584412,-0.090654,1.80488,-0.376661,2.820885, + 0.828657,-0.513374,-0.223105,1.808137,-0.334296,2.576748, + 0.467544,-0.836198,-0.286662,0.020451,-0.391356,0.973919, + 0.474256,-0.836102,-0.275709,0.38175,-0.056076,0.582184, + 0.470214,-0.836003,-0.28284,0.396675,-0.073374,0.659509, + 0.456862,-0.836223,-0.303327,0.106845,-0.391356,1.106955, + 0.459265,-0.836065,-0.300117,0.455635,-0.09635,0.818877, + 0.451622,-0.836275,-0.310937,0.477253,-0.098489,0.857111, + 0.410782,-0.836134,-0.363507,0.393122,-0.391356,1.486857, + 0.428434,-0.836046,-0.342742,0.643743,-0.099518,1.08978, + 0.426432,-0.836018,-0.345296,0.645497,-0.099189,1.091151, + 0.432927,-0.836473,-0.335988,0.293295,-0.391356,1.363581, + 0.438762,-0.836856,-0.327354,0.551399,-0.104719,0.980011, + 0.433809,-0.83702,-0.333476,0.555173,-0.104583,0.984454, + 0.410782,-0.836134,-0.363507,0.393122,-0.391356,1.486857, + 0.426318,-0.836032,-0.345403,0.673898,-0.094074,1.113849, + 0.406635,-0.856746,-0.31723,0.690311,-0.091124,1.126951, + 0.797689,0.594217,-0.102947,1.777642,0.445154,2.578459, + 0.889216,0.445544,-0.103856,1.808407,0.402661,2.576733, + 0.844008,0.528559,-0.090974,1.792852,0.404136,2.439814, + 0.37929,0.924605,-0.035288,1.762087,0.442766,2.44154, + 0.371988,0.925853,-0.066493,1.667866,0.462248,1.716842, + 0.240571,0.970213,-0.028486,1.63484,0.469339,1.718695, + 0.896813,0.381482,-0.22405,1.704523,0.381335,1.563397, + 0.946878,0.205961,-0.246986,1.717236,0.338631,1.562684, + 0.904661,0.346941,-0.247428,1.271248,0.380955,-0.021329, + 0.964263,-0.000657,-0.264945,1.721544,0.292802,1.562442, + 0.938723,-0.205797,-0.276489,1.717155,0.246972,1.562689, + 0.952752,-0.156236,-0.260487,1.284116,0.24723,-0.021329, + 0.724259,-0.575555,-0.379718,1.761786,-0.304479,2.441557, + 0.828657,-0.513374,-0.223105,1.808137,-0.334296,2.576748, + 0.782324,-0.576239,-0.23647,1.777341,-0.376815,2.578476, + 0.919898,0.381988,-0.088733,1.819259,0.342676,2.438332, + 0.95607,0.274398,-0.103135,1.834814,0.335056,2.575251, + 0.967362,0.236279,-0.091558,1.839509,0.262575,2.437196, + 0.851194,0.50661,-0.137165,1.725039,0.408343,1.713635, + 0.967362,0.236279,-0.091558,1.839509,0.262575,2.437196, + 0.94538,0.296534,-0.135365,1.745289,0.365203,1.712498, + 0.240571,0.970213,-0.028486,1.63484,0.469339,1.718695, + 0.371988,0.925853,-0.066493,1.667866,0.462248,1.716842, + 0.180985,0.982354,-0.047179,1.594075,0.469851,1.569594, + 0.262608,-0.840906,-0.473195,1.72906,-0.317688,2.443393, + 0.240977,-0.859676,-0.450429,1.63484,0.05269,1.718695, + 0.275598,-0.853624,-0.442009,1.667565,0.059804,1.716859, + 0.953603,-0.164611,-0.252081,1.75792,0.207128,1.71179, + 0.964083,-0.187609,-0.188009,1.839353,-0.124227,2.437205, + 0.892304,-0.335983,-0.30151,1.745133,0.156883,1.712507, + 0.653549,0.750745,-0.096206,1.777642,0.445154,2.578459, + 0.844008,0.528559,-0.090974,1.792852,0.404136,2.439814, + 0.711557,0.698766,-0.073569,1.762087,0.442766,2.44154, + 0.36952,-0.836018,-0.405622,1.350509,0.1157,1.368801, + 0.378858,-0.836018,-0.396914,0.717541,-0.391356,1.834754, + 0.383451,-0.836018,-0.392479,1.254219,0.1157,1.279009, + 0.378858,-0.836018,-0.396914,0.717541,-0.391356,1.834754, + 0.36952,-0.836018,-0.405622,1.350509,0.1157,1.368801, + 0.364775,-0.836018,-0.409895,0.833554,-0.391356,1.942938, + 0.982391,-0.009206,-0.186608,1.762309,0.261046,1.711543, + 0.986156,-0.079836,-0.145337,1.852141,-0.030933,2.436487, + 0.953603,-0.164611,-0.252081,1.75792,0.207128,1.71179, + 0.869834,0.47479,-0.13403,1.725039,0.408343,1.713635, + 0.919898,0.381988,-0.088733,1.819259,0.342676,2.438332, + 0.967362,0.236279,-0.091558,1.839509,0.262575,2.437196, + 0.39596,0.91224,-0.105037,1.627101,0.463824,1.567741, + 0.627181,0.763304,-0.154955,1.657866,0.44614,1.566015, + 0.613857,0.771354,-0.167905,1.223803,0.445458,-0.021329, + 0.938723,-0.205797,-0.276489,1.717155,0.246972,1.562689, + 0.953603,-0.164611,-0.252081,1.75792,0.207128,1.71179, + 0.882004,-0.370857,-0.290748,1.704367,0.204263,1.563406, + 0.882004,-0.370857,-0.290748,1.704367,0.204263,1.563406, + 0.770844,-0.562595,-0.298807,1.684053,0.167587,1.564546, + 0.807151,-0.547554,-0.220661,1.250463,0.167512,-0.021329, + 0.326686,0.943881,-0.048628,1.72906,0.455932,2.443393, + 0.37929,0.924605,-0.035288,1.762087,0.442766,2.44154, + 0.240571,0.970213,-0.028486,1.63484,0.469339,1.718695, + 0.608966,-0.724087,-0.323817,1.657596,0.139442,1.56603, + 0.782483,-0.506128,-0.362704,1.724818,0.113734,1.713647, + 0.570937,-0.702812,-0.424365,1.698362,0.080622,1.715131, + 0.896813,0.381482,-0.22405,1.704523,0.381335,1.563397, + 0.94538,0.296534,-0.135365,1.745289,0.365203,1.712498, + 0.971942,0.152801,-0.17883,1.758001,0.314963,1.711785, + 0.352435,-0.903593,-0.243536,1.6268,0.121747,1.567758, + 0.605395,-0.778525,-0.165517,1.223677,0.139521,-0.021329, + 0.608966,-0.724087,-0.323817,1.657596,0.139442,1.56603, + 0.896813,0.381482,-0.22405,1.704523,0.381335,1.563397, + 0.971942,0.152801,-0.17883,1.758001,0.314963,1.711785, + 0.946878,0.205961,-0.246986,1.717236,0.338631,1.562684, + 0.773313,0.602828,-0.196431,1.684274,0.418004,1.564533, + 0.896813,0.381482,-0.22405,1.704523,0.381335,1.563397, + 0.80696,0.547786,-0.220785,1.250799,0.417372,-0.021329, + 0.882004,-0.370857,-0.290748,1.704367,0.204263,1.563406, + 0.892304,-0.335983,-0.30151,1.745133,0.156883,1.712507, + 0.770844,-0.562595,-0.298807,1.684053,0.167587,1.564546, + 0.946878,0.205961,-0.246986,1.717236,0.338631,1.562684, + 0.964263,-0.000657,-0.264945,1.721544,0.292802,1.562442, + 0.952938,0.154945,-0.260578,1.284174,0.338115,-0.021329, + 0.953603,-0.164611,-0.252081,1.75792,0.207128,1.71179, + 0.892304,-0.335983,-0.30151,1.745133,0.156883,1.712507, + 0.882004,-0.370857,-0.290748,1.704367,0.204263,1.563406, + 0.967362,0.236279,-0.091558,1.839509,0.262575,2.437196, + 0.981926,0.158648,-0.103211,1.855064,0.246944,2.574115, + 0.987616,0.121103,-0.099745,1.852221,0.169291,2.436483, + 0.95607,0.274398,-0.103135,1.834814,0.335056,2.575251, + 0.981926,0.158648,-0.103211,1.855064,0.246944,2.574115, + 0.967362,0.236279,-0.091558,1.839509,0.262575,2.437196, + 0.946878,0.205961,-0.246986,1.717236,0.338631,1.562684, + 0.971942,0.152801,-0.17883,1.758001,0.314963,1.711785, + 0.964263,-0.000657,-0.264945,1.721544,0.292802,1.562442, + 0.627181,0.763304,-0.154955,1.657866,0.44614,1.566015, + 0.739369,0.666111,-0.098133,1.698631,0.441443,1.715116, + 0.851194,0.50661,-0.137165,1.725039,0.408343,1.713635, + 0.889216,0.445544,-0.103856,1.808407,0.402661,2.576733, + 0.95607,0.274398,-0.103135,1.834814,0.335056,2.575251, + 0.919898,0.381988,-0.088733,1.819259,0.342676,2.438332, + 0.964263,-0.000657,-0.264945,1.721544,0.292802,1.562442, + 0.982391,-0.009206,-0.186608,1.762309,0.261046,1.711543, + 0.953603,-0.164611,-0.252081,1.75792,0.207128,1.71179, + 0.953603,-0.164611,-0.252081,1.75792,0.207128,1.71179, + 0.986156,-0.079836,-0.145337,1.852141,-0.030933,2.436487, + 0.964083,-0.187609,-0.188009,1.839353,-0.124227,2.437205, + 0.770844,-0.562595,-0.298807,1.684053,0.167587,1.564546, + 0.892304,-0.335983,-0.30151,1.745133,0.156883,1.712507, + 0.782483,-0.506128,-0.362704,1.724818,0.113734,1.713647, + -0.266041,0.835984,0.479951,1.744615,-0.391346,2.580312, + -0.266041,0.835984,0.479951,1.743775,-0.387364,2.572911, + -0.266041,0.835984,0.479951,1.740919,-0.391356,2.578282, + 0.964263,-0.000657,-0.264945,1.721544,0.292802,1.562442, + 0.953603,-0.164611,-0.252081,1.75792,0.207128,1.71179, + 0.938723,-0.205797,-0.276489,1.717155,0.246972,1.562689, + 0.527931,0.84762,-0.05318,1.762087,0.442766,2.44154, + 0.694799,0.712655,-0.096836,1.698631,0.441443,1.715116, + 0.371988,0.925853,-0.066493,1.667866,0.462248,1.716842, + 0.969456,-0.193643,-0.150523,1.854908,-0.178538,2.574124, + 0.929733,-0.320654,-0.181048,1.834594,-0.266668,2.575264, + 0.915392,-0.31686,-0.248308,1.819039,-0.204345,2.438344, + 0.372426,-0.888996,-0.266431,1.744615,-0.391346,2.580312, + 0.459522,-0.764252,-0.452503,1.761786,-0.304479,2.441557, + 0.379015,-0.886977,-0.263854,1.777341,-0.376815,2.578476, + 0.971942,0.152801,-0.17883,1.758001,0.314963,1.711785, + 0.992962,0.019572,-0.116804,1.85653,0.069181,2.436241, + 0.982391,-0.009206,-0.186608,1.762309,0.261046,1.711543, + 0.371988,0.925853,-0.066493,1.667866,0.462248,1.716842, + 0.627181,0.763304,-0.154955,1.657866,0.44614,1.566015, + 0.39596,0.91224,-0.105037,1.627101,0.463824,1.567741, + 0.971942,0.152801,-0.17883,1.758001,0.314963,1.711785, + 0.982391,-0.009206,-0.186608,1.762309,0.261046,1.711543, + 0.964263,-0.000657,-0.264945,1.721544,0.292802,1.562442, + 0.770844,-0.562595,-0.298807,1.684053,0.167587,1.564546, + 0.782483,-0.506128,-0.362704,1.724818,0.113734,1.713647, + 0.608966,-0.724087,-0.323817,1.657596,0.139442,1.56603, + 0.403179,0.91206,-0.074795,1.777642,0.445154,2.578459, + 0.37929,0.924605,-0.035288,1.762087,0.442766,2.44154, + 0.326686,0.943881,-0.048628,1.72906,0.455932,2.443393, + 0.013852,-0.999834,-0.0118,-1.789572,0.418917,2.721769, + 0.006074,-0.999778,-0.020183,-1.753229,0.429973,2.185036, + 0.01031,-0.999871,-0.012311,-1.343835,0.429973,2.308269, + 0.627181,0.763304,-0.154955,1.657866,0.44614,1.566015, + 0.773313,0.602828,-0.196431,1.684274,0.418004,1.564533, + 0.613857,0.771354,-0.167905,1.223803,0.445458,-0.021329, + 0.94538,0.296534,-0.135365,1.745289,0.365203,1.712498, + 0.987616,0.121103,-0.099745,1.852221,0.169291,2.436483, + 0.971942,0.152801,-0.17883,1.758001,0.314963,1.711785, + 0.995462,0,-0.09516,1.772155,0.429175,2.822721, + 0.998221,0,-0.059628,1.804276,0.469339,3.360463, + 0.998221,0,-0.059628,1.804276,0.418917,3.360463, + 0.998221,0,-0.059628,1.804276,0.469339,3.360463, + 0.995462,0,-0.09516,1.772155,0.429175,2.822721, + 0.998221,0,-0.059628,1.772155,0.469339,2.822721, + 0.326344,0.942627,-0.070391,1.744615,0.460772,2.580312, + 0.486592,0.869856,-0.08111,1.777642,0.445154,2.578459, + 0.326686,0.943881,-0.048628,1.72906,0.455932,2.443393, + 0.117527,-0.982232,-0.146317,1.594074,0.1157,1.569594, + 0.259122,-0.963243,-0.070844,1.192294,0.121731,-0.021329, + 0.30254,-0.939741,-0.159236,1.6268,0.121747,1.567758, + 0,1,0,1.567503,-0.351987,3.38714, + 0,1,0,1.772155,-0.351987,2.822721, + 0,1,0,1.767999,-0.351987,2.786146, + 0,1,0,1.772155,-0.351987,2.822721, + 0,1,0,1.567503,-0.351987,3.38714, + 0,1,0,1.792693,-0.351987,3.166558, + 0.915392,-0.31686,-0.248308,1.819039,-0.204345,2.438344, + 0.929733,-0.320654,-0.181048,1.834594,-0.266668,2.575264, + 0.807977,-0.486376,-0.332584,1.792582,-0.265825,2.439829, + 0.815608,0.569675,-0.10126,1.698631,0.441443,1.715116, + 0.844008,0.528559,-0.090974,1.792852,0.404136,2.439814, + 0.919898,0.381988,-0.088733,1.819259,0.342676,2.438332, + 0.807977,-0.486376,-0.332584,1.792582,-0.265825,2.439829, + 0.929733,-0.320654,-0.181048,1.834594,-0.266668,2.575264, + 0.828657,-0.513374,-0.223105,1.808137,-0.334296,2.576748, + -0.045349,0.979938,0.194076,-0.497427,0.46934,3.460249, + -0.040582,0.999145,0.007945,-0.433276,0.66934,2.462309, + -0.093562,0.988956,0.114946,-1.473662,0.46934,3.101913, + -0.108877,0,0.994055,0.500177,0.418917,3.617705, + -0.219726,0,0.975562,-0.497427,0.46934,3.460249, + -0.282885,0,0.959154,-0.497427,0.418917,3.460249, + -0.219726,0,0.975562,-0.497427,0.46934,3.460249, + -0.108877,0,0.994055,0.500177,0.418917,3.617705, + -0.155904,0,0.987772,0.001375,0.46934,3.538977, + -0.155904,0,0.987772,0.001375,0.46934,3.538977, + -0.108877,0,0.994055,0.500177,0.418917,3.617705, + -0.029634,0,0.999561,0.500177,0.469339,3.617705, + -0.030971,0.98007,0.196225,0.001375,0.46934,3.538977, + -0.009408,0.999431,0.032405,0.005897,0.66934,2.540767, + -0.045349,0.979938,0.194076,-0.497427,0.46934,3.460249, + 0.68279,0,0.730615,1.804276,0.418917,3.360463, + 0.68279,0,0.730615,1.567503,0.469339,3.581738, + 0.68279,0,0.730615,1.567503,0.418917,3.581738, + 0.68279,0,0.730615,1.567503,0.469339,3.581738, + 0.68279,0,0.730615,1.804276,0.418917,3.360463, + 0.68279,0,0.730615,1.804276,0.469339,3.360463, + -0.106238,0.992765,0.055963,-1.760402,0.46934,2.906435, + -0.13077,0.99131,-0.01428,-1.234429,0.56934,2.130951, + -0.259904,0.965446,-0.019075,-1.789572,0.46934,2.721769, + -0.019925,0.980232,0.196846,0.500177,0.469339,3.617705, + 0.067043,0.991144,0.114624,1.567503,0.469339,3.581738, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + -0.282885,0,0.959154,-0.497427,-0.391356,3.265652, + -0.399962,0,0.916532,-1.473662,-0.351986,2.907315, + -0.454111,0,0.890945,-1.473662,-0.391356,2.907315, + -0.399962,0,0.916532,-1.473662,-0.351986,2.907315, + -0.282885,0,0.959154,-0.497427,-0.391356,3.265652, + -0.219726,0,0.975562,-0.497427,-0.351986,3.265652, + -0.097163,0,0.995268,0.551147,-0.351987,2.822685, + -0.227815,0,0.973704,-0.407016,0.429972,2.665229, + -0.292742,0,0.956192,-0.407017,-0.351986,2.665229, + -0.227815,0,0.973704,-0.407016,0.429972,2.665229, + -0.097163,0,0.995268,0.551147,-0.351987,2.822685, + -0.031469,0,0.999505,0.551147,0.429969,2.822685, + 0.770964,-0.531938,-0.350222,1.792582,-0.265825,2.439829, + 0.828657,-0.513374,-0.223105,1.808137,-0.334296,2.576748, + 0.580091,-0.694621,-0.425438,1.761786,-0.304479,2.441557, + 0.015086,-0.999854,-0.007974,-1.760402,0.418917,2.906435, + 0.013852,-0.999834,-0.0118,-1.789572,0.418917,2.721769, + 0.01031,-0.999871,-0.012311,-1.343835,0.429973,2.308269, + -0.259904,0.965446,-0.019075,-1.789572,0.46934,2.721769, + -0.13077,0.99131,-0.01428,-1.234429,0.56934,2.130951, + -0.224548,0.97391,-0.032814,-1.71917,0.452349,1.9758, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + 0.326686,0.943881,-0.048628,1.72906,0.455932,2.443393, + 0.240571,0.970213,-0.028486,1.63484,0.469339,1.718695, + -0.093562,0.988956,0.114946,-1.473662,0.46934,3.101913, + -0.040582,0.999145,0.007945,-0.433276,0.66934,2.462309, + -0.13077,0.99131,-0.01428,-1.234429,0.56934,2.130951, + -0.019925,0.980232,0.196846,0.500177,0.469339,3.617705, + -0.009408,0.999431,0.032405,0.005897,0.66934,2.540767, + -0.030971,0.98007,0.196225,0.001375,0.46934,3.538977, + 0.006145,-0.999897,-0.012996,-1.473662,0.418917,3.101913, + 0.015086,-0.999854,-0.007974,-1.760402,0.418917,2.906435, + 0.01031,-0.999871,-0.012311,-1.343835,0.429973,2.308269, + 0,1,0,-1.473662,-0.351986,2.907315, + 0,1,0,-0.407017,-0.351986,2.665229, + 0,1,0,-1.343835,-0.351986,2.308269, + 0,1,0,-0.407017,-0.351986,2.665229, + 0,1,0,-1.473662,-0.351986,2.907315, + 0,1,0,-0.497427,-0.351986,3.265652, + -0.045349,0.979938,0.194076,-0.497427,0.46934,3.460249, + -0.009408,0.999431,0.032405,0.005897,0.66934,2.540767, + -0.040582,0.999145,0.007945,-0.433276,0.66934,2.462309, + -0.844783,-0.265761,0.464449,0.477253,-0.098489,0.857111, + -0.855881,-0.307094,0.416127,0.592896,-0.292953,0.956179, + -0.824319,-0.208014,0.526525,0.538904,-0.105527,0.964835, + 0,1,0,-0.497427,-0.351986,3.265652, + 0,1,0,0.551147,-0.351987,2.822685, + 0,1,0,-0.407017,-0.351986,2.665229, + 0,1,0,0.551147,-0.351987,2.822685, + 0,1,0,-0.497427,-0.351986,3.265652, + 0,1,0,0.500177,-0.351986,3.423108, + 0.000845,1,-0.00005,1.772155,-0.391357,2.822721, + 0.000845,1,-0.00005,1.769671,-0.391357,2.781136, + 0.000845,1,-0.00005,1.744615,-0.391346,2.580312, + 0.982391,-0.009206,-0.186608,1.762309,0.261046,1.711543, + 0.992962,0.019572,-0.116804,1.85653,0.069181,2.436241, + 0.986156,-0.079836,-0.145337,1.852141,-0.030933,2.436487, + 0.067043,0.991144,0.114624,1.567503,0.469339,3.581738, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + 0.69976,0,0.714378,1.792693,-0.391357,3.166558, + 0.69976,0,0.714378,1.567503,-0.351987,3.38714, + 0.69976,0,0.714378,1.567503,-0.391357,3.38714, + 0.69976,0,0.714378,1.567503,-0.351987,3.38714, + 0.69976,0,0.714378,1.792693,-0.391357,3.166558, + 0.69976,0,0.714378,1.792693,-0.351987,3.166558, + -0.019925,0.980232,0.196846,0.500177,0.469339,3.617705, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + -0.009408,0.999431,0.032405,0.005897,0.66934,2.540767, + 0.997715,0,0.067557,-1.753229,0.429973,2.185036, + 0.996516,0,0.083404,-1.789572,-0.351986,2.721769, + 0.997715,0,0.067557,-1.753229,-0.351986,2.185036, + 0.996516,0,0.083404,-1.789572,-0.351986,2.721769, + 0.997715,0,0.067557,-1.753229,0.429973,2.185036, + 0.996177,0,0.087363,-1.789572,0.418917,2.721769, + -0.093562,0.988956,0.114946,-1.473662,0.46934,3.101913, + -0.13077,0.99131,-0.01428,-1.234429,0.56934,2.130951, + -0.106238,0.992765,0.055963,-1.760402,0.46934,2.906435, + 0.401352,-0.790567,-0.462515,1.761786,-0.304479,2.441557, + 0.285897,-0.82997,-0.478972,1.743775,-0.387364,2.572911, + 0.262608,-0.840906,-0.473195,1.72906,-0.317688,2.443393, + 0.285897,-0.82997,-0.478972,1.743775,-0.387364,2.572911, + 0.401352,-0.790567,-0.462515,1.761786,-0.304479,2.441557, + 0.372426,-0.888996,-0.266431,1.744615,-0.391346,2.580312, + 0.770844,-0.562595,-0.298807,1.684053,0.167587,1.564546, + 0.608966,-0.724087,-0.323817,1.657596,0.139442,1.56603, + 0.605395,-0.778525,-0.165517,1.223677,0.139521,-0.021329, + -0.01688,-0.999694,-0.018062,1.772155,0.429175,2.822721, + -0.008676,-0.999834,-0.015995,1.567503,0.418917,3.581738, + -0.005944,-0.999865,-0.015303,1.768126,0.429883,2.787255, + -0.008676,-0.999834,-0.015995,1.567503,0.418917,3.581738, + -0.01688,-0.999694,-0.018062,1.772155,0.429175,2.822721, + -0.01688,-0.999694,-0.018062,1.804276,0.418917,3.360463, + 0.067043,0.991144,0.114624,1.567503,0.469339,3.581738, + 0.141065,0.989418,0.033953,1.804276,0.469339,3.360463, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + 0.570937,-0.702812,-0.424365,1.698362,0.080622,1.715131, + 0.415876,-0.852051,-0.317895,1.6268,0.121747,1.567758, + 0.608966,-0.724087,-0.323817,1.657596,0.139442,1.56603, + -0.282885,0,0.959154,-0.497427,0.418917,3.460249, + -0.420316,0,0.907378,-1.473662,0.46934,3.101913, + -0.493712,0,0.869625,-1.473662,0.418917,3.101913, + -0.420316,0,0.907378,-1.473662,0.46934,3.101913, + -0.282885,0,0.959154,-0.497427,0.418917,3.460249, + -0.219726,0,0.975562,-0.497427,0.46934,3.460249, + 0.94538,0.296534,-0.135365,1.745289,0.365203,1.712498, + 0.967362,0.236279,-0.091558,1.839509,0.262575,2.437196, + 0.987616,0.121103,-0.099745,1.852221,0.169291,2.436483, + 0.773313,0.602828,-0.196431,1.684274,0.418004,1.564533, + 0.851194,0.50661,-0.137165,1.725039,0.408343,1.713635, + 0.896813,0.381482,-0.22405,1.704523,0.381335,1.563397, + -0.292742,0,0.956192,-0.407017,-0.351986,2.665229, + -0.333644,0,0.942699,-1.343835,0.429973,2.308269, + -0.311023,0,0.950402,-1.343835,-0.351986,2.308269, + -0.333644,0,0.942699,-1.343835,0.429973,2.308269, + -0.292742,0,0.956192,-0.407017,-0.351986,2.665229, + -0.227815,0,0.973704,-0.407016,0.429972,2.665229, + 0.844008,0.528559,-0.090974,1.792852,0.404136,2.439814, + 0.889216,0.445544,-0.103856,1.808407,0.402661,2.576733, + 0.919898,0.381988,-0.088733,1.819259,0.342676,2.438332, + 0.371988,0.925853,-0.066493,1.667866,0.462248,1.716842, + 0.694799,0.712655,-0.096836,1.698631,0.441443,1.715116, + 0.627181,0.763304,-0.154955,1.657866,0.44614,1.566015, + -0.093083,0,0.995658,0.500177,-0.391356,3.423108, + -0.219726,0,0.975562,-0.497427,-0.351986,3.265652, + -0.282885,0,0.959154,-0.497427,-0.391356,3.265652, + -0.219726,0,0.975562,-0.497427,-0.351986,3.265652, + -0.093083,0,0.995658,0.500177,-0.391356,3.423108, + -0.029634,0,0.999561,0.500177,-0.351986,3.423108, + 0.739369,0.666111,-0.098133,1.698631,0.441443,1.715116, + 0.919898,0.381988,-0.088733,1.819259,0.342676,2.438332, + 0.851194,0.50661,-0.137165,1.725039,0.408343,1.713635, + 0.352435,-0.903593,-0.243536,1.6268,0.121747,1.567758, + 0.259122,-0.963243,-0.070844,1.192294,0.121731,-0.021329, + 0.605395,-0.778525,-0.165517,1.223677,0.139521,-0.021329, + 0.981926,0.158648,-0.103211,1.855064,0.246944,2.574115, + 0.988875,0.094445,-0.114917,1.895316,0.150435,2.815811, + 0.991975,0.067695,-0.106788,1.867776,0.144331,2.573402, + 0.988875,0.094445,-0.114917,1.895316,0.150435,2.815811, + 0.981926,0.158648,-0.103211,1.855064,0.246944,2.574115, + 0.974976,0.189186,-0.116748,1.882604,0.254219,2.816524, + 0.371988,0.925853,-0.066493,1.667866,0.462248,1.716842, + 0.39596,0.91224,-0.105037,1.627101,0.463824,1.567741, + 0.180985,0.982354,-0.047179,1.594075,0.469851,1.569594, + 0.275598,-0.853624,-0.442009,1.667565,0.059804,1.716859, + 0.117527,-0.982232,-0.146317,1.594074,0.1157,1.569594, + 0.352435,-0.903593,-0.243536,1.6268,0.121747,1.567758, + 0.964083,-0.187609,-0.188009,1.839353,-0.124227,2.437205, + 0.969456,-0.193643,-0.150523,1.854908,-0.178538,2.574124, + 0.915392,-0.31686,-0.248308,1.819039,-0.204345,2.438344, + 0.262608,-0.840906,-0.473195,1.72906,-0.317688,2.443393, + 0.335823,-0.832009,-0.441569,1.667565,0.059804,1.716859, + 0.459522,-0.764252,-0.452503,1.761786,-0.304479,2.441557, + 0.056017,0,0.99843,1.80488,-0.376661,2.820885, + 0.056017,0,0.99843,1.772155,-0.351987,2.822721, + 0.056017,0,0.99843,1.772155,-0.391357,2.822721, + 0.056017,0,0.99843,1.772155,-0.351987,2.822721, + 0.056017,0,0.99843,1.80488,-0.376661,2.820885, + 0.056017,0,0.99843,1.772155,0.429175,2.822721, + 0.056017,0,0.99843,1.772155,0.429175,2.822721, + 0.056017,0,0.99843,1.80488,-0.376661,2.820885, + 0.056017,0,0.99843,1.772155,0.469339,2.822721, + 0.056017,0,0.99843,1.772155,0.469339,2.822721, + 0.056017,0,0.99843,1.80488,-0.376661,2.820885, + 0.056017,0,0.99843,1.805181,0.45469,2.820868, + 0.056017,0,0.99843,1.805181,0.45469,2.820868, + 0.056017,0,0.99843,1.80488,-0.376661,2.820885, + 0.056017,0,0.99843,1.835677,-0.333656,2.819157, + 0.056017,0,0.99843,1.805181,0.45469,2.820868, + 0.056017,0,0.99843,1.835677,-0.333656,2.819157, + 0.056017,0,0.99843,1.835947,0.411713,2.819142, + 0.056017,0,0.99843,1.835947,0.411713,2.819142, + 0.056017,0,0.99843,1.835677,-0.333656,2.819157, + 0.056017,0,0.99843,1.862133,-0.265255,2.817672, + 0.056017,0,0.99843,1.835947,0.411713,2.819142, + 0.056017,0,0.99843,1.862133,-0.265255,2.817672, + 0.056017,0,0.99843,1.862354,0.343336,2.81766, + 0.056017,0,0.99843,1.862354,0.343336,2.81766, + 0.056017,0,0.99843,1.862133,-0.265255,2.817672, + 0.056017,0,0.99843,1.882448,-0.17612,2.816533, + 0.056017,0,0.99843,1.862354,0.343336,2.81766, + 0.056017,0,0.99843,1.882448,-0.17612,2.816533, + 0.056017,0,0.99843,1.882604,0.254219,2.816524, + 0.056017,0,0.99843,1.882604,0.254219,2.816524, + 0.056017,0,0.99843,1.882448,-0.17612,2.816533, + 0.056017,0,0.99843,1.895235,-0.072325,2.815815, + 0.056017,0,0.99843,1.882604,0.254219,2.816524, + 0.056017,0,0.99843,1.895235,-0.072325,2.815815, + 0.056017,0,0.99843,1.895316,0.150435,2.815811, + 0.056017,0,0.99843,1.895316,0.150435,2.815811, + 0.056017,0,0.99843,1.895235,-0.072325,2.815815, + 0.056017,0,0.99843,1.899624,0.039057,2.815569, + 0.986156,-0.079836,-0.145337,1.852141,-0.030933,2.436487, + 0.986813,-0.09744,-0.129251,1.867696,-0.075915,2.573407, + 0.964083,-0.187609,-0.188009,1.839353,-0.124227,2.437205, + 0.892304,-0.335983,-0.30151,1.745133,0.156883,1.712507, + 0.964083,-0.187609,-0.188009,1.839353,-0.124227,2.437205, + 0.915392,-0.31686,-0.248308,1.819039,-0.204345,2.438344, + 0.851194,0.50661,-0.137165,1.725039,0.408343,1.713635, + 0.94538,0.296534,-0.135365,1.745289,0.365203,1.712498, + 0.896813,0.381482,-0.22405,1.704523,0.381335,1.563397, + 0.782483,-0.506128,-0.362704,1.724818,0.113734,1.713647, + 0.770964,-0.531938,-0.350222,1.792582,-0.265825,2.439829, + 0.570937,-0.702812,-0.424365,1.698362,0.080622,1.715131, + 0.335823,-0.832009,-0.441569,1.667565,0.059804,1.716859, + 0.415876,-0.852051,-0.317895,1.6268,0.121747,1.567758, + 0.570937,-0.702812,-0.424365,1.698362,0.080622,1.715131, + 0.664025,-0.635453,-0.394044,1.792582,-0.265825,2.439829, + 0.335823,-0.832009,-0.441569,1.667565,0.059804,1.716859, + 0.570937,-0.702812,-0.424365,1.698362,0.080622,1.715131, + 0.971942,0.152801,-0.17883,1.758001,0.314963,1.711785, + 0.987616,0.121103,-0.099745,1.852221,0.169291,2.436483, + 0.992962,0.019572,-0.116804,1.85653,0.069181,2.436241, + 0.938723,-0.205797,-0.276489,1.717155,0.246972,1.562689, + 0.882004,-0.370857,-0.290748,1.704367,0.204263,1.563406, + 0.904449,-0.347599,-0.24728,1.27116,0.204368,-0.021329, + 0.180985,0.982354,-0.047179,1.594075,0.469851,1.569594, + 0.39596,0.91224,-0.105037,1.627101,0.463824,1.567741, + 0.288332,0.954261,-0.079066,1.192338,0.463307,-0.021329, + 0.711557,0.698766,-0.073569,1.762087,0.442766,2.44154, + 0.844008,0.528559,-0.090974,1.792852,0.404136,2.439814, + 0.739369,0.666111,-0.098133,1.698631,0.441443,1.715116, + 0.506757,-0.743743,-0.43594,1.667565,0.059804,1.716859, + 0.770964,-0.531938,-0.350222,1.792582,-0.265825,2.439829, + 0.505027,-0.739497,-0.445076,1.761786,-0.304479,2.441557, + 0.952938,0.154945,-0.260578,1.284174,0.338115,-0.021329, + 0.964263,-0.000657,-0.264945,1.721544,0.292802,1.562442, + 0.964597,-0.000855,-0.263728,1.288529,0.292549,-0.021329, + 0.981926,0.158648,-0.103211,1.855064,0.246944,2.574115, + 0.991975,0.067695,-0.106788,1.867776,0.144331,2.573402, + 0.987616,0.121103,-0.099745,1.852221,0.169291,2.436483, + 0.627181,0.763304,-0.154955,1.657866,0.44614,1.566015, + 0.825346,0.546533,-0.14179,1.725039,0.408343,1.713635, + 0.773313,0.602828,-0.196431,1.684274,0.418004,1.564533, + -0.998221,0,0.059628,1.772155,0.429175,2.822721, + -0.998221,0,0.059628,1.769671,-0.351987,2.781136, + -0.998221,0,0.059628,1.772155,-0.351987,2.822721, + -0.998221,0,0.059628,1.769671,-0.351987,2.781136, + -0.998221,0,0.059628,1.772155,0.429175,2.822721, + -0.998221,0,0.059628,1.769671,0.429968,2.781136, + 0,-1,0,-1.473662,-0.391356,2.907315, + -0.204863,-0.9786,-0.019334,-1.789572,-0.391356,2.721769, + -0.243848,-0.96921,-0.034203,-1.719171,-0.391356,1.9758, + 0,-1,0,-1.473662,-0.391356,2.907315, + -0.243848,-0.96921,-0.034203,-1.719171,-0.391356,1.9758, + -0.232489,-0.970402,-0.065331,-1.593323,-0.391356,1.438224, + -0.001426,-0.999999,0.000039,-0.497427,-0.391356,3.265652, + -0.00444,-0.99999,0.000116,-0.583012,-0.391356,-0.021329, + -0.004277,-0.999991,0.000118,-0.578202,-0.391399,-0.021329, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,-0.445302,-0.391356,-0.021329, + 0,-1,0,-0.396035,-0.391356,0.119998, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,-0.339188,-0.391356,0.268089, + 0,-1,0,-0.277207,-0.391356,0.414107, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,-0.277207,-0.391356,0.414107, + 0,-1,0,-0.210168,-0.391356,0.557872, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,-0.210168,-0.391356,0.557872, + 0,-1,0,-0.138153,-0.391356,0.69921, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,-0.138153,-0.391356,0.69921, + 0,-1,0,-0.061249,-0.391356,0.837949, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,-0.061249,-0.391356,0.837949, + 0,-1,0,0.020451,-0.391356,0.973919, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,0.020451,-0.391356,0.973919, + 0,-1,0,0.106845,-0.391356,1.106955, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,0.106845,-0.391356,1.106955, + 0,-1,0,0.19783,-0.391356,1.236895, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,0.19783,-0.391356,1.236895, + 0,-1,0,0.293295,-0.391356,1.363581, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,0.293295,-0.391356,1.363581, + 0,-1,0,0.393122,-0.391356,1.486857, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,0.393122,-0.391356,1.486857, + 0,-1,0,0.497191,-0.391356,1.606575, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,0.497191,-0.391356,1.606575, + 0,-1,0,0.605375,-0.391356,1.722588, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,0.605375,-0.391356,1.722588, + 0,-1,0,1.567503,-0.391357,3.38714, + 0,-1,0,1.567503,-0.391357,3.38714, + 0,-1,0,0.605375,-0.391356,1.722588, + 0,-1,0,0.717541,-0.391356,1.834754, + 0,-1,0,1.567503,-0.391357,3.38714, + 0,-1,0,0.717541,-0.391356,1.834754, + 0,-1,0,0.833554,-0.391356,1.942938, + 0,-1,0,1.567503,-0.391357,3.38714, + 0,-1,0,0.833554,-0.391356,1.942938, + 0,-1,0,0.953272,-0.391356,2.047007, + 0,-1,0,1.567503,-0.391357,3.38714, + 0,-1,0,0.953272,-0.391356,2.047007, + 0,-1,0,1.076548,-0.391356,2.146834, + 0,-1,0,1.567503,-0.391357,3.38714, + 0,-1,0,1.076548,-0.391356,2.146834, + 0,-1,0,1.203234,-0.391356,2.242299, + 0,-1,0,1.567503,-0.391357,3.38714, + 0,-1,0,1.203234,-0.391356,2.242299, + 0,-1,0,1.333174,-0.391356,2.333284, + 0,-1,0,1.567503,-0.391357,3.38714, + 0,-1,0,1.333174,-0.391356,2.333284, + 0,-1,0,1.46621,-0.391356,2.419678, + 0,-1,0,1.567503,-0.391357,3.38714, + 0,-1,0,1.46621,-0.391356,2.419678, + 0,-1,0,1.60218,-0.391356,2.501378, + 0,-1,0,1.567503,-0.391357,3.38714, + 0,-1,0,1.60218,-0.391356,2.501378, + 0.000552,-1,-0.000055,1.792693,-0.391357,3.166558, + 0.000552,-1,-0.000055,1.792693,-0.391357,3.166558, + 0,-1,0,1.60218,-0.391356,2.501378, + 0.001527,-0.999999,-0.000135,1.740919,-0.391356,2.578282, + 0.000552,-1,-0.000055,1.792693,-0.391357,3.166558, + 0.001527,-0.999999,-0.000135,1.740919,-0.391356,2.578282, + 0.20767,-0.977918,-0.023446,1.744615,-0.391346,2.580312, + 0.000552,-1,-0.000055,1.792693,-0.391357,3.166558, + 0.20767,-0.977918,-0.023446,1.744615,-0.391346,2.580312, + 0.207733,-0.9779,-0.023645,1.772155,-0.391357,2.822721, + 0.613857,0.771354,-0.167905,1.223803,0.445458,-0.021329, + 0.773313,0.602828,-0.196431,1.684274,0.418004,1.564533, + 0.80696,0.547786,-0.220785,1.250799,0.417372,-0.021329, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + 0,0.997162,-0.07528,0.377018,0.469993,-0.021329, + 0.009051,0.997085,-0.075758,0.303932,0.469993,-0.021329, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + 0.008038,0.997118,-0.075439,0.391707,0.469993,-0.021329, + 0,0.997162,-0.07528,0.377018,0.469993,-0.021329, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + 0.006337,0.997132,-0.075415,0.394344,0.469951,-0.021329, + 0.008038,0.997118,-0.075439,0.391707,0.469993,-0.021329, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + -0.001701,0.997163,-0.075255,0.406812,0.469993,-0.021329, + 0.006337,0.997132,-0.075415,0.394344,0.469951,-0.021329, + 0.770844,-0.562595,-0.298807,1.684053,0.167587,1.564546, + 0.605395,-0.778525,-0.165517,1.223677,0.139521,-0.021329, + 0.807151,-0.547554,-0.220661,1.250463,0.167512,-0.021329, + 0.39596,0.91224,-0.105037,1.627101,0.463824,1.567741, + 0.505346,0.851806,-0.138025,1.219931,0.447894,-0.021329, + 0.288332,0.954261,-0.079066,1.192338,0.463307,-0.021329, + 0.39596,0.91224,-0.105037,1.627101,0.463824,1.567741, + 0.613857,0.771354,-0.167905,1.223803,0.445458,-0.021329, + 0.505346,0.851806,-0.138025,1.219931,0.447894,-0.021329, + -0.009408,0.999431,0.032405,0.005897,0.66934,2.540767, + -0.001297,0.996986,-0.077575,0.029236,0.470013,-0.021329, + -0.001223,0.996985,-0.077584,0.012875,0.469971,-0.021329, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + -0.000418,0.999281,-0.037914,1.086592,0.46967,-0.021329, + -0.000735,0.999282,-0.03789,1.085566,0.469669,-0.021329, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + 0.083141,0.995658,-0.041878,1.157159,0.469626,-0.021329, + -0.000418,0.999281,-0.037914,1.086592,0.46967,-0.021329, + 0.180985,0.982354,-0.047179,1.594075,0.469851,1.569594, + 0.184736,0.981481,-0.050663,1.188641,0.464041,-0.021329, + 0.168416,0.984624,-0.046387,1.159104,0.4693,-0.021329, + 0.180985,0.982354,-0.047179,1.594075,0.469851,1.569594, + 0.288332,0.954261,-0.079066,1.192338,0.463307,-0.021329, + 0.184736,0.981481,-0.050663,1.188641,0.464041,-0.021329, + 0.904661,0.346941,-0.247428,1.271248,0.380955,-0.021329, + 0.946878,0.205961,-0.246986,1.717236,0.338631,1.562684, + 0.952938,0.154945,-0.260578,1.284174,0.338115,-0.021329, + -0.346553,0.933315,-0.093941,-1.593323,0.46934,1.438224, + -0.512223,0.844277,-0.157556,-1.168401,0.454762,-0.021329, + -0.388183,0.91542,-0.106401,-1.625486,0.454676,1.429408, + -0.436436,0.891263,-0.123179,-1.593323,0.46934,1.438224, + -0.505009,0.849029,-0.155293,-1.166885,0.456027,-0.021329, + -0.654864,0.727594,-0.204353,-1.168401,0.454762,-0.021329, + -0.346553,0.933315,-0.093941,-1.593323,0.46934,1.438224, + -0.271068,0.958765,-0.085395,-1.133667,0.469297,-0.021329, + -0.505009,0.849029,-0.155293,-1.166885,0.456027,-0.021329, + 0.952752,-0.156236,-0.260487,1.284116,0.24723,-0.021329, + 0.938723,-0.205797,-0.276489,1.717155,0.246972,1.562689, + 0.904449,-0.347599,-0.24728,1.27116,0.204368,-0.021329, + 0.904449,-0.347599,-0.24728,1.27116,0.204368,-0.021329, + 0.882004,-0.370857,-0.290748,1.704367,0.204263,1.563406, + 0.807151,-0.547554,-0.220661,1.250463,0.167512,-0.021329, + 0.964263,-0.000657,-0.264945,1.721544,0.292802,1.562442, + 0.952752,-0.156236,-0.260487,1.284116,0.24723,-0.021329, + 0.964597,-0.000855,-0.263728,1.288529,0.292549,-0.021329, + 0.80696,0.547786,-0.220785,1.250799,0.417372,-0.021329, + 0.896813,0.381482,-0.22405,1.704523,0.381335,1.563397, + 0.904661,0.346941,-0.247428,1.271248,0.380955,-0.021329, + -0.788436,-0.590729,-0.171486,0.365496,-0.027628,0.463635, + -0.671967,-0.6777,-0.298635,0.364466,0.008825,0.342799, + -0.672528,-0.677458,-0.297921,0.550466,-0.257589,0.528855, + -0.084698,0.953745,0.28844,0.364466,0.008825,0.342799, + -0.084698,0.953745,0.28844,0.365496,-0.027628,0.463635, + -0.084698,0.953745,0.28844,0.364821,-0.003737,0.384439, + -0.874399,-0.46654,-0.133289,0.364821,-0.003737,0.384439, + -0.788436,-0.590729,-0.171486,0.365496,-0.027628,0.463635, + -0.874399,-0.46654,-0.133289,0.365067,-0.017684,0.431644, + -0.788436,-0.590729,-0.171486,0.365496,-0.027628,0.463635, + -0.672528,-0.677458,-0.297921,0.550466,-0.257589,0.528855, + -0.775202,-0.621236,-0.11458,0.365783,-0.037793,0.497331, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.765433,-0.076157,0.638994,0.546029,-0.105148,0.973456, + -0.78972,-0.133178,0.598838,0.682929,-0.311817,1.108903, + -0.765433,-0.076157,0.638994,0.546029,-0.105148,0.973456, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.765796,-0.063678,0.639923,0.555173,-0.104583,0.984454, + -0.765433,-0.076157,0.638994,0.546029,-0.105148,0.973456, + -0.765796,-0.063678,0.639923,0.555173,-0.104583,0.984454, + -0.759557,-0.12673,0.637976,0.549572,-0.104847,0.977734, + -0.438608,-0.806129,0.397215,0.549572,-0.104847,0.977734, + -0.438608,-0.806129,0.397215,0.555173,-0.104583,0.984454, + -0.438608,-0.806129,0.397215,0.551399,-0.104719,0.980011, + -0.397992,0.380616,0.834706,0.886816,-0.070199,1.246183, + -0.486507,0.572163,0.660258,0.758981,-0.077961,1.179865, + -0.499279,0.460824,0.733731,0.758404,-0.078952,1.180247, + -0.084938,-0.957458,0.275791,0.758981,-0.077961,1.179865, + -0.084938,-0.957458,0.275791,0.886816,-0.070199,1.246183, + -0.084938,-0.957458,0.275791,0.762622,-0.077692,1.181918, + -0.47928,0.243811,0.843117,0.865187,-0.178304,1.269373, + -0.525635,0.427293,0.735615,0.755695,-0.079224,1.178282, + -0.490795,0.246987,0.835534,0.753511,-0.079688,1.177433, + -0.502999,0.214001,0.837374,0.755695,-0.079224,1.178282, + -0.47928,0.243811,0.843117,0.865187,-0.178304,1.269373, + -0.479672,0.399525,0.781213,0.758404,-0.078952,1.180247, + 0.411104,-0.808356,-0.421371,0.755695,-0.079224,1.178282, + 0.410782,-0.836134,-0.363507,0.393122,-0.391356,1.486857, + 0.341562,-0.894102,-0.289684,0.753511,-0.079688,1.177433, + 0.410782,-0.836134,-0.363507,0.393122,-0.391356,1.486857, + 0.411104,-0.808356,-0.421371,0.755695,-0.079224,1.178282, + 0.441471,-0.737274,-0.511401,0.758404,-0.078952,1.180247, + 0.410782,-0.836134,-0.363507,0.393122,-0.391356,1.486857, + 0.406635,-0.856746,-0.31723,0.690311,-0.091124,1.126951, + 0.341562,-0.894102,-0.289684,0.753511,-0.079688,1.177433, + 0.430585,-0.755425,-0.493893,0.762622,-0.077692,1.181918, + 0.40862,-0.836512,-0.365072,0.497191,-0.391356,1.606575, + 0.441471,-0.737274,-0.511401,0.758404,-0.078952,1.180247, + 0.40862,-0.836512,-0.365072,0.497191,-0.391356,1.606575, + 0.430585,-0.755425,-0.493893,0.762622,-0.077692,1.181918, + 0.416058,-0.835881,-0.358048,0.868735,-0.0443,1.228096, + -0.232489,-0.970402,-0.065331,-1.593323,-0.391356,1.438224, + -0.388183,-0.915419,-0.106401,-1.625487,-0.376692,1.429408, + -0.209954,-0.97514,-0.070863,-1.168402,-0.376779,-0.021329, + -0.232489,-0.970402,-0.065331,-1.593323,-0.391356,1.438224, + -0.209954,-0.97514,-0.070863,-1.168402,-0.376779,-0.021329, + -0.217197,-0.973383,-0.073152,-1.166885,-0.376822,-0.021329, + -0.232489,-0.970402,-0.065331,-1.593323,-0.391356,1.438224, + -0.217197,-0.973383,-0.073152,-1.166885,-0.376822,-0.021329, + -0.135336,-0.989883,-0.042621,-1.133667,-0.391356,-0.021329, + 0.000001,-1,0.000294,0.435364,0.1157,0.114425, + -0.000315,-1,0.00014,0.428578,0.1157,0.099871, + -0.000086,-1,0.00026,0.50133,0.11566,-0.021329, + 0.000033,-1,0.000347,0.574271,0.115699,0.068952, + 0.000064,-1,0.000388,0.512455,0.115661,-0.021329, + 0.000029,-1,0.000412,0.517242,0.115661,-0.021329, + 0.000033,-1,0.000347,0.574271,0.115699,0.068952, + -0.000033,-1,0.000445,0.525941,0.115661,-0.021329, + -0.000014,-1,0.000438,0.53006,0.115661,-0.021329, + -0.000001,-1,0,1.303752,0.115699,0.560049, + 0,-1,0,1.226889,0.115699,0.4205, + 0,-1,0,1.158086,0.115699,-0.021329, + 0,-1,0,1.346671,0.115699,0.703372, + -0.000001,-1,0,1.303752,0.115699,0.560049, + 0,-1,0,1.158086,0.115699,-0.021329, + 0.076269,-0.993022,-0.089943,1.594074,0.1157,1.569594, + 0,-1,0,1.347924,0.115699,0.731818, + 0,-1,0,1.346671,0.115699,0.703372, + 0.076269,-0.993022,-0.089943,1.594074,0.1157,1.569594, + 0,-1,0,1.350509,0.1157,1.368801, + 0,-1,0,1.347924,0.115699,0.731818, + 0.076269,-0.993022,-0.089943,1.594074,0.1157,1.569594, + 0,-1,0,1.449875,0.1157,1.455178, + 0,-1,0,1.350509,0.1157,1.368801, + 0.076269,-0.993022,-0.089943,1.594074,0.1157,1.569594, + 0,-1,0,1.552194,0.1157,1.538035, + 0,-1,0,1.449875,0.1157,1.455178, + 0,-1,0,1.071328,0.1157,1.08962, + 0,-1,0,1.050087,0.1157,1.065186, + 0,-1,0,1.347924,0.115699,0.731818, + 0,-1,0,1.16112,0.1157,1.185911, + 0,-1,0,1.071328,0.1157,1.08962, + 0,-1,0,1.347924,0.115699,0.731818, + 0,-1,0,1.254219,0.1157,1.279009, + 0,-1,0,1.16112,0.1157,1.185911, + 0,-1,0,1.347924,0.115699,0.731818, + 0,-1,0,1.350509,0.1157,1.368801, + 0,-1,0,1.254219,0.1157,1.279009, + 0,-1,0,1.347924,0.115699,0.731818, + -0.611735,0.119506,0.781984,0.84883,-0.216217,1.272781, + -0.630309,0.099649,0.769923,0.643743,-0.099518,1.08978, + -0.704322,0.009285,0.70982,0.640686,-0.100103,1.087313, + -0.630309,0.099649,0.769923,0.643743,-0.099518,1.08978, + -0.611735,0.119506,0.781984,0.84883,-0.216217,1.272781, + -0.628473,0.104347,0.7708,0.645497,-0.099189,1.091151, + -0.628473,0.104347,0.7708,0.645497,-0.099189,1.091151, + -0.611735,0.119506,0.781984,0.84883,-0.216217,1.272781, + -0.631922,0.095714,0.769099,0.665608,-0.095567,1.107224, + -0.631922,0.095714,0.769099,0.665608,-0.095567,1.107224, + -0.611735,0.119506,0.781984,0.84883,-0.216217,1.272781, + -0.631713,0.096164,0.769215,0.673898,-0.094074,1.113849, + -0.631713,0.096164,0.769215,0.673898,-0.094074,1.113849, + -0.611735,0.119506,0.781984,0.84883,-0.216217,1.272781, + -0.631638,0.096354,0.769253,0.690311,-0.091124,1.126951, + -0.611735,0.119506,0.781984,0.84883,-0.216217,1.272781, + -0.490795,0.246987,0.835534,0.753511,-0.079688,1.177433, + -0.631638,0.096354,0.769253,0.690311,-0.091124,1.126951, + -0.949809,0.173614,-0.260235,-1.700945,0.254166,1.408725, + -0.942413,0.153754,-0.297013,-1.250661,0.25354,-0.021329, + -0.959247,0.088043,-0.268503,-1.71336,0.150374,1.405322, + -0.942413,0.153754,-0.297013,-1.250661,0.25354,-0.021329, + -0.946173,0.125627,-0.298284,-1.258407,0.189508,-0.021329, + -0.959247,0.088043,-0.268503,-1.71336,0.150374,1.405322, + -0.946173,0.125627,-0.298284,-1.258407,0.189508,-0.021329, + -0.951352,0.071862,-0.299608,-1.264066,0.150374,-0.021329, + -0.959247,0.088043,-0.268503,-1.71336,0.150374,1.405322, + 0.000033,-1,0.000347,0.574271,0.115699,0.068952, + -0.000014,-1,0.000438,0.53006,0.115661,-0.021329, + 0.000022,-1,0.000133,1.105769,0.115699,-0.021329, + -0.009408,0.999431,0.032405,0.005897,0.66934,2.540767, + 0.006788,0.997025,-0.076781,0.302467,0.470013,-0.021329, + -0.001297,0.996986,-0.077575,0.029236,0.470013,-0.021329, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + 0.058512,0.995903,-0.06894,0.726874,0.469993,-0.021329, + -0.001701,0.997163,-0.075255,0.406812,0.469993,-0.021329, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + -0.000735,0.999282,-0.03789,1.085566,0.469669,-0.021329, + 0.078004,0.995473,-0.05431,0.72963,0.469668,-0.021329, + -0.001426,-0.999999,0.000039,-0.497427,-0.391356,3.265652, + 0,-1,0,-1.129276,-0.391356,-0.021329, + -0.00444,-0.99999,0.000116,-0.583012,-0.391356,-0.021329, + -0.040582,0.999145,0.007945,-0.433276,0.66934,2.462309, + 0,0.996796,-0.07999,-0.403368,0.470034,-0.021329, + -0.063557,0.995303,-0.073018,-0.701067,0.470034,-0.021329, + 0.514271,-0.836016,-0.19132,-0.396035,-0.391356,0.119998, + 0.51815,-0.835999,-0.18063,-0.445302,-0.391356,-0.021329, + 0.515247,-0.836022,-0.18865,-0.007741,-0.120157,-0.021329, + -0.009408,0.999431,0.032405,0.005897,0.66934,2.540767, + -0.001223,0.996985,-0.077584,0.012875,0.469971,-0.021329, + 0.009468,0.996863,-0.078582,-0.272122,0.470013,-0.021329, + -0.040582,0.999145,0.007945,-0.433276,0.66934,2.462309, + 0.007064,0.996807,-0.079537,-0.273618,0.470034,-0.021329, + 0,0.996796,-0.07999,-0.403368,0.470034,-0.021329, + -0.001426,-0.999999,0.000039,-0.497427,-0.391356,3.265652, + -0.004277,-0.999991,0.000118,-0.578202,-0.391399,-0.021329, + 0.000109,-1,0.000002,-0.447809,-0.391356,-0.021329, + -0.13077,0.99131,-0.01428,-1.234429,0.56934,2.130951, + -0.047726,0.997181,-0.057905,-0.704134,0.46974,-0.021329, + -0.114051,0.992145,-0.051394,-1.131355,0.469698,-0.021329, + 0.000033,-1,0.000347,0.574271,0.115699,0.068952, + 0.000029,-1,0.000412,0.517242,0.115661,-0.021329, + -0.000033,-1,0.000445,0.525941,0.115661,-0.021329, + 0.117527,-0.982232,-0.146317,1.594074,0.1157,1.569594, + 0.089681,-0.995669,-0.024519,1.159105,0.115699,-0.021329, + 0.259122,-0.963243,-0.070844,1.192294,0.121731,-0.021329, + -0.486507,0.572163,0.660258,0.758981,-0.077961,1.179865, + -0.504226,0.552291,0.663876,0.755695,-0.079224,1.178282, + -0.479798,0.509116,0.714559,0.758404,-0.078952,1.180247, + -0.479798,0.509116,0.714559,0.758404,-0.078952,1.180247, + -0.486507,0.572163,0.660258,0.758981,-0.077961,1.179865, + -0.504226,0.552291,0.663876,0.755695,-0.079224,1.178282, + -0.452228,0.452832,0.768397,0.762622,-0.077692,1.181918, + -0.486507,0.572163,0.660258,0.758981,-0.077961,1.179865, + -0.499279,0.460824,0.733731,0.758404,-0.078952,1.180247, + -0.452228,0.452832,0.768397,0.762622,-0.077692,1.181918, + -0.486507,0.572163,0.660258,0.758981,-0.077961,1.179865, + -0.499279,0.460824,0.733731,0.758404,-0.078952,1.180247, + 0,0,-1,-1.264066,0.150374,-0.021329, + 0,0,-1,-1.264066,-0.07239,-0.021329, + 0,0,-1,-1.268666,0.038992,-0.021329, + 0,0,-1,-1.264066,-0.07239,-0.021329, + 0,0,-1,-1.264066,0.150374,-0.021329, + 0,0,-1,-1.25058,-0.176182,-0.021329, + 0,0,-1,-1.25058,-0.176182,-0.021329, + 0,0,-1,-1.264066,0.150374,-0.021329, + 0,0,-1,-1.258407,0.189508,-0.021329, + 0,0,-1,-1.25058,-0.176182,-0.021329, + 0,0,-1,-1.258407,0.189508,-0.021329, + 0,0,-1,-1.250661,0.25354,-0.021329, + 0,0,-1,-1.25058,-0.176182,-0.021329, + 0,0,-1,-1.250661,0.25354,-0.021329, + 0,0,-1,-1.229126,0.343294,-0.021329, + 0,0,-1,-1.25058,-0.176182,-0.021329, + 0,0,-1,-1.229126,0.343294,-0.021329, + 0,0,-1,-1.229126,-0.26531,-0.021329, + 0,0,-1,-1.229126,-0.26531,-0.021329, + 0,0,-1,-1.229126,0.343294,-0.021329, + 0,0,-1,-1.201167,-0.333701,-0.021329, + 0,0,-1,-1.201167,-0.333701,-0.021329, + 0,0,-1,-1.229126,0.343294,-0.021329, + 0,0,-1,-1.201167,0.411684,-0.021329, + 0,0,-1,-1.201167,-0.333701,-0.021329, + 0,0,-1,-1.201167,0.411684,-0.021329, + 0,0,-1,-1.168402,-0.376779,-0.021329, + 0,0,-1,-1.168402,-0.376779,-0.021329, + 0,0,-1,-1.201167,0.411684,-0.021329, + 0,0,-1,-1.168401,0.454762,-0.021329, + 0,0,-1,-1.168402,-0.376779,-0.021329, + 0,0,-1,-1.168401,0.454762,-0.021329, + 0,0,-1,-1.166885,-0.376822,-0.021329, + 0,0,-1,-1.166885,-0.376822,-0.021329, + 0,0,-1,-1.168401,0.454762,-0.021329, + 0,0,-1,-1.166885,0.456027,-0.021329, + 0,0,-1,-1.166885,-0.376822,-0.021329, + 0,0,-1,-1.166885,0.456027,-0.021329, + 0,0,-1,-1.133667,-0.391356,-0.021329, + 0,0,-1,-1.133667,-0.391356,-0.021329, + 0,0,-1,-1.166885,0.456027,-0.021329, + 0,0,-1,-1.133667,0.469297,-0.021329, + 0,0,-1,-1.133667,-0.391356,-0.021329, + 0,0,-1,-1.133667,0.469297,-0.021329, + 0,0,-1,-1.131951,-0.391356,-0.021329, + 0,0,-1,-1.131951,-0.391356,-0.021329, + 0,0,-1,-1.133667,0.469297,-0.021329, + 0,0,-1,-1.131355,0.469698,-0.021329, + 0,0,-1,-1.131951,-0.391356,-0.021329, + 0,0,-1,-1.131355,0.469698,-0.021329, + 0,0,-1,-1.129276,-0.391356,-0.021329, + 0,0,-1,-1.129276,-0.391356,-0.021329, + 0,0,-1,-1.131355,0.469698,-0.021329, + 0,0,-1,-0.704134,0.46974,-0.021329, + 0,0,-1,-1.129276,-0.391356,-0.021329, + 0,0,-1,-0.704134,0.46974,-0.021329, + 0,0,-1,-0.583012,-0.391356,-0.021329, + 0,0,-1,-0.583012,-0.391356,-0.021329, + 0,0,-1,-0.704134,0.46974,-0.021329, + 0,0,-1,-0.701067,0.470034,-0.021329, + 0,0,-1,-0.583012,-0.391356,-0.021329, + 0,0,-1,-0.701067,0.470034,-0.021329, + 0,0,-1,-0.403368,0.470034,-0.021329, + 0,0,-1,-0.583012,-0.391356,-0.021329, + 0,0,-1,-0.403368,0.470034,-0.021329, + 0,0,-1,-0.578202,-0.391399,-0.021329, + 0,0,-1,-0.578202,-0.391399,-0.021329, + 0,0,-1,-0.403368,0.470034,-0.021329, + 0,0,-1,-0.447809,-0.391356,-0.021329, + 0,0,-1,-0.447809,-0.391356,-0.021329, + 0,0,-1,-0.403368,0.470034,-0.021329, + 0,0,-1,-0.445302,-0.391356,-0.021329, + 0,0,-1,-0.445302,-0.391356,-0.021329, + 0,0,-1,-0.403368,0.470034,-0.021329, + 0.000003,0,-1,-0.007741,-0.120157,-0.021329, + 0.000003,0,-1,-0.007741,-0.120157,-0.021329, + 0,0,-1,-0.403368,0.470034,-0.021329, + 0,0,-1,-0.273618,0.470034,-0.021329, + 0.000003,0,-1,-0.007741,-0.120157,-0.021329, + 0,0,-1,-0.273618,0.470034,-0.021329, + 0,0,-1,-0.272122,0.470013,-0.021329, + 0.000003,0,-1,-0.007741,-0.120157,-0.021329, + 0,0,-1,-0.272122,0.470013,-0.021329, + 0.000006,-0.000006,-1,0.012875,0.469971,-0.021329, + 0.000003,0,-1,-0.007741,-0.120157,-0.021329, + 0.000006,-0.000006,-1,0.012875,0.469971,-0.021329, + -0.000005,-0.000015,-1,0.377134,0.1157,-0.021323, + -0.000005,-0.000015,-1,0.377134,0.1157,-0.021323, + 0.000006,-0.000006,-1,0.012875,0.469971,-0.021329, + 0,-0.000018,-1,0.029236,0.470013,-0.021329, + -0.000005,-0.000015,-1,0.377134,0.1157,-0.021323, + 0,-0.000018,-1,0.029236,0.470013,-0.021329, + 0,-0.000018,-1,0.302467,0.470013,-0.021329, + -0.000005,-0.000015,-1,0.377134,0.1157,-0.021323, + 0,-0.000018,-1,0.302467,0.470013,-0.021329, + 0,-0.000018,-1,0.303932,0.469993,-0.021329, + -0.000005,-0.000015,-1,0.377134,0.1157,-0.021323, + 0,-0.000018,-1,0.303932,0.469993,-0.021329, + 0,-0.000018,-1,0.377018,0.469993,-0.021329, + -0.000005,-0.000015,-1,0.377134,0.1157,-0.021323, + 0,-0.000018,-1,0.377018,0.469993,-0.021329, + -0.000017,-0.000011,-1,0.391707,0.469993,-0.021329, + -0.000005,-0.000015,-1,0.377134,0.1157,-0.021323, + -0.000017,-0.000011,-1,0.391707,0.469993,-0.021329, + -0.00001,-0.000003,-1,0.50133,0.11566,-0.021329, + -0.00001,-0.000003,-1,0.50133,0.11566,-0.021329, + -0.000017,-0.000011,-1,0.391707,0.469993,-0.021329, + 0,0,-1,0.394344,0.469951,-0.021329, + -0.00001,-0.000003,-1,0.50133,0.11566,-0.021329, + 0,0,-1,0.394344,0.469951,-0.021329, + 0,0,-1,0.406812,0.469993,-0.021329, + -0.00001,-0.000003,-1,0.50133,0.11566,-0.021329, + 0,0,-1,0.406812,0.469993,-0.021329, + 0,0,-1,0.726874,0.469993,-0.021329, + -0.00001,-0.000003,-1,0.50133,0.11566,-0.021329, + 0,0,-1,0.726874,0.469993,-0.021329, + 0,0,-1,0.503029,0.11566,-0.021329, + 0,0,-1,0.503029,0.11566,-0.021329, + 0,0,-1,0.726874,0.469993,-0.021329, + 0,0,-1,0.512455,0.115661,-0.021329, + 0,0,-1,0.512455,0.115661,-0.021329, + 0,0,-1,0.726874,0.469993,-0.021329, + 0,0,-1,0.517242,0.115661,-0.021329, + 0,0,-1,0.517242,0.115661,-0.021329, + 0,0,-1,0.726874,0.469993,-0.021329, + 0,0,-1,0.525941,0.115661,-0.021329, + 0,0,-1,0.525941,0.115661,-0.021329, + 0,0,-1,0.726874,0.469993,-0.021329, + 0,0,-1,0.53006,0.115661,-0.021329, + 0,0,-1,0.53006,0.115661,-0.021329, + 0,0,-1,0.726874,0.469993,-0.021329, + 0,0,-1,1.105769,0.115699,-0.021329, + 0,0,-1,1.105769,0.115699,-0.021329, + 0,0,-1,0.726874,0.469993,-0.021329, + 0,0,-1,0.72963,0.469668,-0.021329, + 0,0,-1,1.105769,0.115699,-0.021329, + 0,0,-1,0.72963,0.469668,-0.021329, + 0,0,-1,1.085566,0.469669,-0.021329, + 0,0,-1,1.105769,0.115699,-0.021329, + 0,0,-1,1.085566,0.469669,-0.021329, + 0,0,-1,1.086592,0.46967,-0.021329, + 0,0,-1,1.105769,0.115699,-0.021329, + 0,0,-1,1.086592,0.46967,-0.021329, + 0,0,-1,1.157159,0.469626,-0.021329, + 0,0,-1,1.105769,0.115699,-0.021329, + 0,0,-1,1.157159,0.469626,-0.021329, + 0,0,-1,1.11936,0.115699,-0.021329, + 0,0,-1,1.11936,0.115699,-0.021329, + 0,0,-1,1.157159,0.469626,-0.021329, + 0,0,-1,1.138614,0.115699,-0.021329, + 0,0,-1,1.138614,0.115699,-0.021329, + 0,0,-1,1.157159,0.469626,-0.021329, + 0,0,-1,1.150338,0.115699,-0.021329, + 0,0,-1,1.150338,0.115699,-0.021329, + 0,0,-1,1.157159,0.469626,-0.021329, + 0,0,-1,1.155792,0.115699,-0.021329, + 0,0,-1,1.155792,0.115699,-0.021329, + 0,0,-1,1.157159,0.469626,-0.021329, + 0,0,-1,1.158086,0.115699,-0.021329, + 0,0,-1,1.158086,0.115699,-0.021329, + 0,0,-1,1.157159,0.469626,-0.021329, + 0,0,-1,1.159104,0.4693,-0.021329, + 0,0,-1,1.158086,0.115699,-0.021329, + 0,0,-1,1.159104,0.4693,-0.021329, + 0,0,-1,1.159105,0.115699,-0.021329, + 0,0,-1,1.159105,0.115699,-0.021329, + 0,0,-1,1.159104,0.4693,-0.021329, + 0,0,-1,1.188641,0.464041,-0.021329, + 0,0,-1,1.159105,0.115699,-0.021329, + 0,0,-1,1.188641,0.464041,-0.021329, + 0,0,-1,1.192294,0.121731,-0.021329, + 0,0,-1,1.192294,0.121731,-0.021329, + 0,0,-1,1.188641,0.464041,-0.021329, + 0,0,-1,1.192338,0.463307,-0.021329, + 0,0,-1,1.192294,0.121731,-0.021329, + 0,0,-1,1.192338,0.463307,-0.021329, + 0,0,-1,1.223677,0.139521,-0.021329, + 0,0,-1,1.223677,0.139521,-0.021329, + 0,0,-1,1.192338,0.463307,-0.021329, + 0,0,-1,1.219931,0.447894,-0.021329, + 0,0,-1,1.223677,0.139521,-0.021329, + 0,0,-1,1.219931,0.447894,-0.021329, + 0,0,-1,1.223803,0.445458,-0.021329, + 0,0,-1,1.223677,0.139521,-0.021329, + 0,0,-1,1.223803,0.445458,-0.021329, + 0,0,-1,1.250463,0.167512,-0.021329, + 0,0,-1,1.250463,0.167512,-0.021329, + 0,0,-1,1.223803,0.445458,-0.021329, + 0,0,-1,1.250799,0.417372,-0.021329, + 0,0,-1,1.250463,0.167512,-0.021329, + 0,0,-1,1.250799,0.417372,-0.021329, + 0,0,-1,1.27116,0.204368,-0.021329, + 0,0,-1,1.27116,0.204368,-0.021329, + 0,0,-1,1.250799,0.417372,-0.021329, + 0,0,-1,1.271248,0.380955,-0.021329, + 0,0,-1,1.27116,0.204368,-0.021329, + 0,0,-1,1.271248,0.380955,-0.021329, + 0,0,-1,1.284116,0.24723,-0.021329, + 0,0,-1,1.284116,0.24723,-0.021329, + 0,0,-1,1.271248,0.380955,-0.021329, + 0,0,-1,1.284174,0.338115,-0.021329, + 0,0,-1,1.284116,0.24723,-0.021329, + 0,0,-1,1.284174,0.338115,-0.021329, + 0,0,-1,1.288529,0.292549,-0.021329, + -0.000315,-1,0.00014,0.428578,0.1157,0.099871, + -0.000321,-1,0.000136,0.377134,0.1157,-0.021323, + -0.000086,-1,0.00026,0.50133,0.11566,-0.021329, + 0.000128,-1,0.000374,0.453243,0.1157,0.101903, + -0.000086,-1,0.00026,0.50133,0.11566,-0.021329, + 0.000057,-1,0.000347,0.503029,0.11566,-0.021329, + -0.000086,-1,0.00026,0.50133,0.11566,-0.021329, + 0.000128,-1,0.000374,0.453243,0.1157,0.101903, + 0.000001,-1,0.000294,0.435364,0.1157,0.114425, + 0,-1,0,0.711069,0.115699,0.073242, + 0.000022,-1,0.000133,1.105769,0.115699,-0.021329, + 0,-1,0,1.11936,0.115699,-0.021329, + 0.000022,-1,0.000133,1.105769,0.115699,-0.021329, + 0,-1,0,0.711069,0.115699,0.073242, + 0.000033,-1,0.000347,0.574271,0.115699,0.068952, + 0,-1,0,0.854313,0.115699,0.11448, + 0,-1,0,1.11936,0.115699,-0.021329, + 0,-1,0,1.138614,0.115699,-0.021329, + 0,-1,0,1.11936,0.115699,-0.021329, + 0,-1,0,0.854313,0.115699,0.11448, + 0,-1,0,0.711069,0.115699,0.073242, + 0,-1,0,0.994243,0.115699,0.189857, + 0,-1,0,1.138614,0.115699,-0.021329, + 0,-1,0,1.150338,0.115699,-0.021329, + 0,-1,0,1.138614,0.115699,-0.021329, + 0,-1,0,0.994243,0.115699,0.189857, + 0,-1,0,0.854313,0.115699,0.11448, + 0.076269,-0.993022,-0.089943,1.594074,0.1157,1.569594, + 0,-1,0,1.158086,0.115699,-0.021329, + 0.089681,-0.995669,-0.024519,1.159105,0.115699,-0.021329, + 0,-1,0,1.158086,0.115699,-0.021329, + 0.076269,-0.993022,-0.089943,1.594074,0.1157,1.569594, + 0,-1,0,1.346671,0.115699,0.703372, + 0.509935,-0.836018,-0.202584,0.377134,0.1157,-0.021323, + 0.514271,-0.836016,-0.19132,-0.396035,-0.391356,0.119998, + 0.515247,-0.836022,-0.18865,-0.007741,-0.120157,-0.021329, + 0.514271,-0.836016,-0.19132,-0.396035,-0.391356,0.119998, + 0.509935,-0.836018,-0.202584,0.377134,0.1157,-0.021323, + 0.507543,-0.836018,-0.208504,-0.339188,-0.391356,0.268089, + 0,-1,0,1.226889,0.115699,0.4205, + 0,-1,0,1.155792,0.115699,-0.021329, + 0,-1,0,1.158086,0.115699,-0.021329, + 0,-1,0,1.155792,0.115699,-0.021329, + 0,-1,0,1.226889,0.115699,0.4205, + 0,-1,0,1.121322,0.115699,0.294234, + 0,-1,0,0.500177,-0.391356,3.423108, + 0.000109,-1,0.000002,-0.447809,-0.391356,-0.021329, + 0,-1,0,-0.445302,-0.391356,-0.021329, + 0.000109,-1,0.000002,-0.447809,-0.391356,-0.021329, + 0,-1,0,0.500177,-0.391356,3.423108, + -0.001426,-0.999999,0.000039,-0.497427,-0.391356,3.265652, + 0,-1,0,1.121322,0.115699,0.294234, + 0,-1,0,1.150338,0.115699,-0.021329, + 0,-1,0,1.155792,0.115699,-0.021329, + 0,-1,0,1.150338,0.115699,-0.021329, + 0,-1,0,1.121322,0.115699,0.294234, + 0,-1,0,0.994243,0.115699,0.189857, + 0,-1,0,-1.473662,-0.391356,2.907315, + -0.135336,-0.989883,-0.042621,-1.133667,-0.391356,-0.021329, + 0,-1,0,-1.131951,-0.391356,-0.021329, + -0.135336,-0.989883,-0.042621,-1.133667,-0.391356,-0.021329, + 0,-1,0,-1.473662,-0.391356,2.907315, + -0.232489,-0.970402,-0.065331,-1.593323,-0.391356,1.438224, + -0.001426,-0.999999,0.000039,-0.497427,-0.391356,3.265652, + 0,-1,0,-1.131951,-0.391356,-0.021329, + 0,-1,0,-1.129276,-0.391356,-0.021329, + 0,-1,0,-1.131951,-0.391356,-0.021329, + -0.001426,-0.999999,0.000039,-0.497427,-0.391356,3.265652, + 0,-1,0,-1.473662,-0.391356,2.907315, + 0.000033,-1,0.000347,0.574271,0.115699,0.068952, + 0.000057,-1,0.000347,0.503029,0.11566,-0.021329, + 0.000064,-1,0.000388,0.512455,0.115661,-0.021329, + 0.000057,-1,0.000347,0.503029,0.11566,-0.021329, + 0.000033,-1,0.000347,0.574271,0.115699,0.068952, + 0.000128,-1,0.000374,0.453243,0.1157,0.101903, + -0.949809,0.173614,-0.260235,-1.700945,0.254166,1.408725, + -0.918203,0.270695,-0.289184,-1.229126,0.343294,-0.021329, + -0.942413,0.153754,-0.297013,-1.250661,0.25354,-0.021329, + -0.918203,0.270695,-0.289184,-1.229126,0.343294,-0.021329, + -0.949809,0.173614,-0.260235,-1.700945,0.254166,1.408725, + -0.921725,0.294507,-0.252364,-1.681196,0.343294,1.414138, + 0.500479,-0.836021,-0.224924,0.428578,0.1157,0.099871, + 0.507543,-0.836018,-0.208504,-0.339188,-0.391356,0.268089, + 0.509935,-0.836018,-0.202584,0.377134,0.1157,-0.021323, + 0.507543,-0.836018,-0.208504,-0.339188,-0.391356,0.268089, + 0.500479,-0.836021,-0.224924,0.428578,0.1157,0.099871, + 0.501259,-0.836022,-0.223175,-0.277207,-0.391356,0.414107, + -0.778493,-0.586351,-0.223921,-1.625487,-0.376692,1.429408, + -0.817175,-0.515734,-0.257377,-1.201167,-0.333701,-0.021329, + -0.772035,-0.587205,-0.243211,-1.168402,-0.376779,-0.021329, + -0.817175,-0.515734,-0.257377,-1.201167,-0.333701,-0.021329, + -0.778493,-0.586351,-0.223921,-1.625487,-0.376692,1.429408, + -0.846632,-0.478533,-0.232853,-1.655459,-0.3337,1.421192, + -0.846632,-0.478533,-0.232853,-1.655459,-0.3337,1.421192, + -0.904453,-0.317539,-0.284838,-1.229126,-0.26531,-0.021329, + -0.817175,-0.515734,-0.257377,-1.201167,-0.333701,-0.021329, + -0.904453,-0.317539,-0.284838,-1.229126,-0.26531,-0.021329, + -0.846632,-0.478533,-0.232853,-1.655459,-0.3337,1.421192, + -0.921583,-0.294507,-0.252885,-1.681196,-0.26531,1.414138, + -0.921583,-0.294507,-0.252885,-1.681196,-0.26531,1.414138, + -0.93637,-0.1904,-0.29489,-1.25058,-0.176182,-0.021329, + -0.904453,-0.317539,-0.284838,-1.229126,-0.26531,-0.021329, + -0.93637,-0.1904,-0.29489,-1.25058,-0.176182,-0.021329, + -0.921583,-0.294507,-0.252885,-1.681196,-0.26531,1.414138, + -0.949732,-0.173729,-0.260436,-1.700945,-0.176182,1.408725, + -0.949732,-0.173729,-0.260436,-1.700945,-0.176182,1.408725, + -0.949487,-0.095192,-0.299021,-1.264066,-0.07239,-0.021329, + -0.93637,-0.1904,-0.29489,-1.25058,-0.176182,-0.021329, + -0.949487,-0.095192,-0.299021,-1.264066,-0.07239,-0.021329, + -0.949732,-0.173729,-0.260436,-1.700945,-0.176182,1.408725, + -0.961223,-0.081307,-0.263515,-1.71336,-0.07239,1.405322, + -0.343264,-0.686966,-0.640506,0.714801,-0.258939,0.363541, + -0.41126,-0.697198,-0.58718,0.435364,0.1157,0.114425, + -0.307986,-0.679834,-0.66556,0.453243,0.1157,0.101903, + -0.41126,-0.697198,-0.58718,0.435364,0.1157,0.114425, + -0.343264,-0.686966,-0.640506,0.714801,-0.258939,0.363541, + -0.41126,-0.697198,-0.58718,0.406831,0.08212,0.174281, + -0.41126,-0.697198,-0.58718,0.406831,0.08212,0.174281, + -0.343264,-0.686966,-0.640506,0.714801,-0.258939,0.363541, + -0.507972,-0.702526,-0.498419,0.391924,0.064577,0.205552, + -0.507972,-0.702526,-0.498419,0.391924,0.064577,0.205552, + -0.343264,-0.686966,-0.640506,0.714801,-0.258939,0.363541, + -0.507497,-0.702632,-0.498754,0.615433,-0.255562,0.429129, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + 0.168416,0.984624,-0.046387,1.159104,0.4693,-0.021329, + 0.083141,0.995658,-0.041878,1.157159,0.469626,-0.021329, + 0.168416,0.984624,-0.046387,1.159104,0.4693,-0.021329, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + 0.180985,0.982354,-0.047179,1.594075,0.469851,1.569594, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + 0.078004,0.995473,-0.05431,0.72963,0.469668,-0.021329, + 0.058512,0.995903,-0.06894,0.726874,0.469993,-0.021329, + 0.078004,0.995473,-0.05431,0.72963,0.469668,-0.021329, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + 0.132481,0.990896,-0.02395,1.285101,0.569339,2.603406, + -0.009408,0.999431,0.032405,0.005897,0.66934,2.540767, + 0.009051,0.997085,-0.075758,0.303932,0.469993,-0.021329, + 0.006788,0.997025,-0.076781,0.302467,0.470013,-0.021329, + 0.009051,0.997085,-0.075758,0.303932,0.469993,-0.021329, + -0.009408,0.999431,0.032405,0.005897,0.66934,2.540767, + 0.032071,0.999429,-0.01065,0.44507,0.66934,2.619225, + -0.964427,0,-0.264349,-1.717594,0.038992,1.404161, + -0.951352,0.071862,-0.299608,-1.264066,0.150374,-0.021329, + -0.953736,-0.013129,-0.300359,-1.268666,0.038992,-0.021329, + -0.951352,0.071862,-0.299608,-1.264066,0.150374,-0.021329, + -0.964427,0,-0.264349,-1.717594,0.038992,1.404161, + -0.959247,0.088043,-0.268503,-1.71336,0.150374,1.405322, + -0.961223,-0.081307,-0.263515,-1.71336,-0.07239,1.405322, + -0.953736,-0.013129,-0.300359,-1.268666,0.038992,-0.021329, + -0.949487,-0.095192,-0.299021,-1.264066,-0.07239,-0.021329, + -0.953736,-0.013129,-0.300359,-1.268666,0.038992,-0.021329, + -0.961223,-0.081307,-0.263515,-1.71336,-0.07239,1.405322, + -0.964427,0,-0.264349,-1.717594,0.038992,1.404161, + -0.040582,0.999145,0.007945,-0.433276,0.66934,2.462309, + 0.009468,0.996863,-0.078582,-0.272122,0.470013,-0.021329, + 0.007064,0.996807,-0.079537,-0.273618,0.470034,-0.021329, + 0.009468,0.996863,-0.078582,-0.272122,0.470013,-0.021329, + -0.040582,0.999145,0.007945,-0.433276,0.66934,2.462309, + -0.009408,0.999431,0.032405,0.005897,0.66934,2.540767, + -0.13077,0.99131,-0.01428,-1.234429,0.56934,2.130951, + -0.063557,0.995303,-0.073018,-0.701067,0.470034,-0.021329, + -0.047726,0.997181,-0.057905,-0.704134,0.46974,-0.021329, + -0.063557,0.995303,-0.073018,-0.701067,0.470034,-0.021329, + -0.13077,0.99131,-0.01428,-1.234429,0.56934,2.130951, + -0.040582,0.999145,0.007945,-0.433276,0.66934,2.462309, + -0.302581,0.949833,-0.079128,-1.593323,0.46934,1.438224, + -0.114051,0.992145,-0.051394,-1.131355,0.469698,-0.021329, + -0.271068,0.958765,-0.085395,-1.133667,0.469297,-0.021329, + -0.114051,0.992145,-0.051394,-1.131355,0.469698,-0.021329, + -0.302581,0.949833,-0.079128,-1.593323,0.46934,1.438224, + -0.13077,0.99131,-0.01428,-1.234429,0.56934,2.130951, + -0.921725,0.294507,-0.252364,-1.681196,0.343294,1.414138, + -0.855994,0.441137,-0.269577,-1.201167,0.411684,-0.021329, + -0.918203,0.270695,-0.289184,-1.229126,0.343294,-0.021329, + -0.855994,0.441137,-0.269577,-1.201167,0.411684,-0.021329, + -0.921725,0.294507,-0.252364,-1.681196,0.343294,1.414138, + -0.846877,0.478832,-0.23134,-1.655458,0.411684,1.421192, + -0.846877,0.478832,-0.23134,-1.655458,0.411684,1.421192, + -0.728809,0.645974,-0.227057,-1.168401,0.454762,-0.021329, + -0.855994,0.441137,-0.269577,-1.201167,0.411684,-0.021329, + -0.728809,0.645974,-0.227057,-1.168401,0.454762,-0.021329, + -0.846877,0.478832,-0.23134,-1.655458,0.411684,1.421192, + -0.78424,0.585803,-0.204457,-1.625486,0.454676,1.429408, + 0,-1,0,0.500177,-0.391356,3.423108, + 0,-1,0,-0.396035,-0.391356,0.119998, + 0,-1,0,-0.339188,-0.391356,0.268089, + 0.117527,-0.982232,-0.146317,1.594074,0.1157,1.569594, + 0.259122,-0.963243,-0.070844,1.192294,0.121731,-0.021329, + 0.30254,-0.939741,-0.159236,1.6268,0.121747,1.567758 +}; +static const struct gllist handsy_model_palm_frame = { + GL_N3F_V3F, GL_TRIANGLES, 2082, handsy_model_palm_data, 0 +}; +const struct gllist *handsy_model_palm = &handsy_model_palm_frame; + +static const float handsy_model_thumb_distal_data[] = { + 0.931218,0.038006,0.362475,0.29625,0.056256,0.664416, + 0.873922,-0.003805,0.486051,0.255586,0.077023,0.737599, + 0.873735,-0.002446,0.486396,0.259079,0.042565,0.731119, + 0.873922,-0.003805,0.486051,0.255586,0.077023,0.737599, + 0.931218,0.038006,0.362475,0.29625,0.056256,0.664416, + 0.927775,0.05186,0.369519,0.290282,0.101111,0.675403, + 0.931218,0.038006,0.362475,0.29625,0.056256,0.664416, + 0.873703,-0.000675,0.48646,0.263372,0.000216,0.723233, + 0.919547,0.019558,0.392492,0.301447,0,0.654848, + 0.873703,-0.000675,0.48646,0.263372,0.000216,0.723233, + 0.931218,0.038006,0.362475,0.29625,0.056256,0.664416, + 0.873735,-0.002446,0.486396,0.259079,0.042565,0.731119, + 0.371923,0.814436,0.445385,0.085971,0.305932,1.195089, + 0.500468,0.831871,0.239838,0.145913,0.309078,1.106884, + 0.312254,0.908542,0.277577,0.092482,0.341223,1.106884, + 0.500468,0.831871,0.239838,0.145913,0.309078,1.106884, + 0.371923,0.814436,0.445385,0.085971,0.305932,1.195089, + 0.56058,0.750837,0.349275,0.145913,0.292777,1.143555, + 0.56058,0.750837,0.349275,0.145913,0.292777,1.143555, + 0.371923,0.814436,0.445385,0.085971,0.305932,1.195089, + 0.539476,0.689911,0.482689,0.138564,0.274291,1.195089, + 0.876662,-0.009947,0.481004,0.173158,0.314854,0.891031, + 0.876902,-0.010028,0.480565,0.164839,0.309002,0.906089, + 0.876422,-0.009866,0.481442,0.17165,0.297474,0.89342, + 0.876902,-0.010028,0.480565,0.164839,0.309002,0.906089, + 0.85821,-0.006695,0.513255,0.162433,0.32323,0.910776, + 0.838263,-0.003347,0.545256,0.161481,0.30464,0.912126, + 0.85821,-0.006695,0.513255,0.162433,0.32323,0.910776, + 0.876902,-0.010028,0.480565,0.164839,0.309002,0.906089, + 0.876662,-0.009947,0.481004,0.173158,0.314854,0.891031, + 0.6758,0.511985,0.530251,0.182602,0.222325,1.198099, + 0.52718,0.556291,0.642357,0.118556,0.223958,1.270833, + 0.676335,0.41763,0.606759,0.155432,0.182861,1.270833, + 0.52718,0.556291,0.642357,0.118556,0.223958,1.270833, + 0.6758,0.511985,0.530251,0.182602,0.222325,1.198099, + 0.62679,0.5624,0.539297,0.177609,0.230776,1.195089, + 0.52718,0.556291,0.642357,0.118556,0.223958,1.270833, + 0.62679,0.5624,0.539297,0.177609,0.230776,1.195089, + 0.539476,0.689911,0.482689,0.138564,0.274291,1.195089, + 0.793481,0.350519,0.497519,0.210798,0.152003,1.211665, + 0.676335,0.41763,0.606759,0.155432,0.182861,1.270833, + 0.780002,0.279437,0.559921,0.183727,0.129302,1.270833, + 0.676335,0.41763,0.606759,0.155432,0.182861,1.270833, + 0.793481,0.350519,0.497519,0.210798,0.152003,1.211665, + 0.763605,0.403416,0.504145,0.195133,0.201117,1.19609, + 0.676335,0.41763,0.606759,0.155432,0.182861,1.270833, + 0.763605,0.403416,0.504145,0.195133,0.201117,1.19609, + 0.6758,0.511985,0.530251,0.182602,0.222325,1.198099, + -0.952716,-0.303863,0,0.224838,0.10798,1.346935, + -0.971429,-0.23733,0,0.226074,0.104106,1.208813, + -0.985558,-0.169336,0,0.226074,0.104106,1.347445, + -0.971429,-0.23733,0,0.226074,0.104106,1.208813, + -0.952716,-0.303863,0,0.224838,0.10798,1.346935, + -0.952716,-0.303863,0,0.210798,0.152003,1.211665, + -0.952716,-0.303863,0,0.210798,0.152003,1.211665, + -0.952716,-0.303863,0,0.224838,0.10798,1.346935, + -0.912598,-0.408857,0,0.195133,0.201117,1.308356, + -0.952716,-0.303863,0,0.210798,0.152003,1.211665, + -0.912598,-0.408857,0,0.195133,0.201117,1.308356, + -0.912598,-0.408857,0,0.195133,0.201117,1.19609, + 0.994901,0.100856,0,0.263372,0.000216,0.723233, + 0.994901,0.100856,0,0.263394,0,1.36115, + 0.994901,0.100856,0,0.263394,0,0.723195, + 0.994901,0.100856,0,0.263394,0,1.36115, + 0.994901,0.100856,0,0.263372,0.000216,0.723233, + 0.994901,0.100856,0,0.252447,0.10798,1.346935, + 0.994901,0.100856,0,0.252447,0.10798,1.346935, + 0.994901,0.100856,0,0.263372,0.000216,0.723233, + 0.994901,0.100856,0,0.259079,0.042565,0.731119, + 0.994901,0.100856,0,0.252447,0.10798,1.346935, + 0.994901,0.100856,0,0.259079,0.042565,0.731119, + 0.994901,0.100856,0,0.255586,0.077023,0.737599, + 0.994901,0.100856,0,0.252447,0.10798,1.346935, + 0.994901,0.100856,0,0.255586,0.077023,0.737599, + 0.985558,0.169336,0,0.251928,0.113103,0.744607, + 0.994901,0.100856,0,0.252447,0.10798,1.346935, + 0.985558,0.169336,0,0.251928,0.113103,0.744607, + 0.971429,0.23733,0,0.251928,0.113103,1.344813, + 0.919422,0.073474,0.386347,0.274037,0.157167,0.70531, + 0.874814,-0.007622,0.484399,0.237898,0.157092,0.77053, + 0.874447,-0.006469,0.485078,0.248003,0.12541,0.751819, + 0.874814,-0.007622,0.484399,0.237898,0.157092,0.77053, + 0.919422,0.073474,0.386347,0.274037,0.157167,0.70531, + 0.910258,0.063882,0.409084,0.259167,0.19321,0.732687, + 0.910258,0.063882,0.409084,0.259167,0.19321,0.732687, + 0.875344,-0.008697,0.483422,0.219541,0.214647,0.804721, + 0.874814,-0.007622,0.484399,0.237898,0.157092,0.77053, + 0.875344,-0.008697,0.483422,0.219541,0.214647,0.804721, + 0.910258,0.063882,0.409084,0.259167,0.19321,0.732687, + 0.875651,-0.009145,0.482859,0.230667,0.24695,0.785155, + 0.876066,-0.009661,0.482094,0.214135,0.2689,0.815591, + 0.876422,-0.009866,0.481442,0.17165,0.297474,0.89342, + 0.87595,-0.009537,0.482307,0.206427,0.238615,0.828993, + 0.876422,-0.009866,0.481442,0.17165,0.297474,0.89342, + 0.876066,-0.009661,0.482094,0.214135,0.2689,0.815591, + 0.876662,-0.009947,0.481004,0.173158,0.314854,0.891031, + 0.865819,0.160892,0.473783,0.228767,0.077538,1.217427, + 0.780002,0.279437,0.559921,0.183727,0.129302,1.270833, + 0.777747,0.144332,0.611782,0.201514,0.066932,1.270833, + 0.780002,0.279437,0.559921,0.183727,0.129302,1.270833, + 0.865819,0.160892,0.473783,0.228767,0.077538,1.217427, + 0.844325,0.24079,0.478682,0.226074,0.104106,1.208813, + 0.780002,0.279437,0.559921,0.183727,0.129302,1.270833, + 0.844325,0.24079,0.478682,0.226074,0.104106,1.208813, + 0.793481,0.350519,0.497519,0.210798,0.152003,1.211665, + 0.865819,0.160892,0.473783,0.228767,0.077538,1.217427, + 0.84071,0.076204,0.536096,0.207581,0,1.270833, + 0.881366,0.079889,0.46563,0.236628,0,1.215852, + 0.84071,0.076204,0.536096,0.207581,0,1.270833, + 0.865819,0.160892,0.473783,0.228767,0.077538,1.217427, + 0.777747,0.144332,0.611782,0.201514,0.066932,1.270833, + -0.994901,-0.100856,0,0.236628,0,1.36115, + -0.994901,-0.100856,0,0.228767,0.077538,1.217427, + -0.994901,-0.100856,0,0.236628,0,1.215852, + -0.994901,-0.100856,0,0.228767,0.077538,1.217427, + -0.994901,-0.100856,0,0.236628,0,1.36115, + -0.985558,-0.169336,0,0.226074,0.104106,1.347445, + -0.994901,-0.100856,0,0.228767,0.077538,1.217427, + -0.985558,-0.169336,0,0.226074,0.104106,1.347445, + -0.971429,-0.23733,0,0.226074,0.104106,1.208813, + 0.873703,-0.000675,0.48646,0.263372,0.000216,0.723233, + 0.873705,0.00202,0.486453,0.263394,0,0.723195, + 0.919547,0.019558,0.392492,0.301447,0,0.654848, + 0.931218,0.038006,0.362475,0.29625,0.056256,0.664416, + 0.919547,0.019558,0.392492,0.301447,0,0.654848, + 0.977781,0.093209,0.187769,0.429204,0,0, + 0.062066,0.491963,0.868401,0.218313,0.218497,1.297663, + 0.023594,0.566338,0.823835,0.19071,0.208602,1.305256, + 0.061786,0.414288,0.908046,0.195133,0.201117,1.308356, + 0.361607,0.924025,0.124172,0.093273,0.345512,1.073157, + 0.512375,0.851663,0.110186,0.145913,0.322451,1.012229, + 0.491078,0.866607,0.088512,0.106015,0.346454,1.012229, + 0.512375,0.851663,0.110186,0.145913,0.322451,1.012229, + 0.361607,0.924025,0.124172,0.093273,0.345512,1.073157, + 0.500468,0.831871,0.239838,0.145913,0.309078,1.106884, + 0.500468,0.831871,0.239838,0.145913,0.309078,1.106884, + 0.361607,0.924025,0.124172,0.093273,0.345512,1.073157, + 0.312254,0.908542,0.277577,0.092482,0.341223,1.106884, + 0.896572,0.442898,0,0.218313,0.218497,0.807025, + 0.860952,0.508686,0,0.173108,0.295007,1.238954, + 0.938151,0.346226,0,0.218313,0.218497,1.297663, + 0.860952,0.508686,0,0.173108,0.295007,1.238954, + 0.896572,0.442898,0,0.218313,0.218497,0.807025, + 0.860952,0.508686,0,0.206427,0.238615,0.828993, + 0.860952,0.508686,0,0.173108,0.295007,1.238954, + 0.860952,0.508686,0,0.206427,0.238615,0.828993, + 0.860952,0.508686,0,0.17165,0.297474,0.89342, + 0.860952,0.508686,0,0.173108,0.295007,1.238954, + 0.860952,0.508686,0,0.17165,0.297474,0.89342, + 0.860952,0.508686,0,0.164839,0.309002,1.220716, + 0.860952,0.508686,0,0.164839,0.309002,1.220716, + 0.860952,0.508686,0,0.17165,0.297474,0.89342, + 0.860952,0.508686,0,0.164839,0.309002,0.906089, + 0.99992,0.012221,0.00341,0.146283,0.284903,1.087672, + 0.99993,0.01068,0.005115,0.145913,0.292777,1.143555, + 0.999936,0.010052,0.005203,0.145913,0.284422,1.159696, + 0.99993,0.01068,0.005115,0.145913,0.292777,1.143555, + 0.99992,0.012221,0.00341,0.146283,0.284903,1.087672, + 0.999961,0.008668,0.001509,0.145913,0.309078,1.106884, + 0.952716,0.303863,0,0.248003,0.12541,0.751819, + 0.971429,0.23733,0,0.251928,0.113103,1.344813, + 0.985558,0.169336,0,0.251928,0.113103,0.744607, + 0.971429,0.23733,0,0.251928,0.113103,1.344813, + 0.952716,0.303863,0,0.248003,0.12541,0.751819, + 0.938151,0.346226,0,0.218313,0.218497,1.297663, + 0.938151,0.346226,0,0.218313,0.218497,1.297663, + 0.952716,0.303863,0,0.248003,0.12541,0.751819, + 0.952716,0.303863,0,0.237898,0.157092,0.77053, + 0.938151,0.346226,0,0.218313,0.218497,1.297663, + 0.952716,0.303863,0,0.237898,0.157092,0.77053, + 0.952716,0.303863,0,0.219541,0.214647,0.804721, + 0.938151,0.346226,0,0.218313,0.218497,1.297663, + 0.952716,0.303863,0,0.219541,0.214647,0.804721, + 0.896572,0.442898,0,0.218313,0.218497,0.807025, + 0,0.130526,0.991445,0.236628,0,1.36115, + -0.012701,0.21502,0.976527,0.252447,0.10798,1.346935, + 0.004021,0.220216,0.975443,0.226074,0.104106,1.347445, + -0.012701,0.21502,0.976527,0.252447,0.10798,1.346935, + 0,0.130526,0.991445,0.236628,0,1.36115, + 0,0.130526,0.991445,0.263394,0,1.36115, + 0.927775,0.05186,0.369519,0.290282,0.101111,0.675403, + 0.874222,-0.005676,0.485494,0.251928,0.113103,0.744607, + 0.873922,-0.003805,0.486051,0.255586,0.077023,0.737599, + 0.874222,-0.005676,0.485494,0.251928,0.113103,0.744607, + 0.927775,0.05186,0.369519,0.290282,0.101111,0.675403, + 0.919422,0.073474,0.386347,0.274037,0.157167,0.70531, + 0.874222,-0.005676,0.485494,0.251928,0.113103,0.744607, + 0.919422,0.073474,0.386347,0.274037,0.157167,0.70531, + 0.874447,-0.006469,0.485078,0.248003,0.12541,0.751819, + 0.026002,0.337305,0.941036,0.251928,0.113103,1.344813, + 0.061786,0.414288,0.908046,0.195133,0.201117,1.308356, + 0.025091,0.266414,0.963532,0.224838,0.10798,1.346935, + -0.912598,-0.408857,0,0.195133,0.201117,1.308356, + -0.860952,-0.508686,0,0.182602,0.222325,1.198099, + -0.912598,-0.408857,0,0.195133,0.201117,1.19609, + -0.860952,-0.508686,0,0.182602,0.222325,1.198099, + -0.912598,-0.408857,0,0.195133,0.201117,1.308356, + -0.862228,-0.506519,0.000588,0.19071,0.208602,1.305256, + -0.860952,-0.508686,0,0.182602,0.222325,1.198099, + -0.862228,-0.506519,0.000588,0.19071,0.208602,1.305256, + -0.825039,-0.55911,0.081898,0.177609,0.230776,1.195089, + 0.023594,0.566338,0.823835,0.19071,0.208602,1.305256, + 0,0.675426,0.737428,0.154063,0.295007,1.238954, + 0,0.608761,0.793353,0.146283,0.284903,1.246708, + 0,0.675426,0.737428,0.154063,0.295007,1.238954, + 0.023594,0.566338,0.823835,0.19071,0.208602,1.305256, + 0,0.675426,0.737428,0.173108,0.295007,1.238954, + 0,0.675426,0.737428,0.173108,0.295007,1.238954, + 0.023594,0.566338,0.823835,0.19071,0.208602,1.305256, + 0.062066,0.491963,0.868401,0.218313,0.218497,1.297663, + -0.012701,0.21502,0.976527,0.252447,0.10798,1.346935, + 0.026002,0.337305,0.941036,0.251928,0.113103,1.344813, + 0.004021,0.220216,0.975443,0.226074,0.104106,1.347445, + 0.866079,0.482943,0.129122,0.230667,0.24695,0.785155, + 0.938648,0.308986,0.15319,0.259167,0.19321,0.732687, + 0.902969,0.403992,0.146418,0.371702,0.214602,0, + 0.026002,0.337305,0.941036,0.251928,0.113103,1.344813, + 0.025091,0.266414,0.963532,0.224838,0.10798,1.346935, + 0.004021,0.220216,0.975443,0.226074,0.104106,1.347445, + 0.926797,0.118754,0.356292,0.274037,0.157167,0.70531, + 0.927775,0.05186,0.369519,0.290282,0.101111,0.675403, + 0.964645,0.195253,0.177021,0.414579,0.111086,0, + 0.141093,0.950715,0.276106,0.08622,0.34242,1.106884, + 0.361607,0.924025,0.124172,0.093273,0.345512,1.073157, + 0.01826,0.970957,0.238555,0,0.35326,1.106884, + 0.01826,0.970957,0.238555,0,0.35326,1.106884, + 0.361607,0.924025,0.124172,0.093273,0.345512,1.073157, + 0.288047,0.952171,0.101981,0.094656,0.35326,1.012229, + 0.01826,0.970957,0.238555,0,0.35326,1.106884, + 0.288047,0.952171,0.101981,0.094656,0.35326,1.012229, + -0.018655,0.995608,0.091745,0,0.365721,1.012229, + 0.026002,0.337305,0.941036,0.251928,0.113103,1.344813, + 0.062066,0.491963,0.868401,0.218313,0.218497,1.297663, + 0.061786,0.414288,0.908046,0.195133,0.201117,1.308356, + 0,0.675426,0.737428,0.173108,0.295007,1.238954, + 0,0.793353,0.608761,0.164839,0.309002,1.220716, + 0,0.675426,0.737428,0.154063,0.295007,1.238954, + 0.774879,0.62326,0.105398,0.173158,0.314854,0.891031, + 0.845942,0.520777,0.114772,0.214135,0.2689,0.815591, + 0.768035,0.631773,0.104812,0.303493,0.303493,0, + 0.491078,0.866607,0.088512,0.106015,0.346454,1.012229, + 0.495531,0.865546,0.072654,0.214602,0.371702,0, + 0.293356,0.953923,0.063035,0.111086,0.414579,0, + 0.100502,0.687999,0.718719,0.051933,0.254321,1.270833, + -0.004579,0.695959,0.718067,0,0.258604,1.270833, + 0.060772,0.500882,0.863379,0.039779,0.180901,1.328953, + 0.129618,0.851245,0.508509,0.067773,0.309412,1.195089, + 0.141093,0.950715,0.276106,0.08622,0.34242,1.106884, + -0.004744,0.86721,0.49792,0,0.316724,1.195089, + 0.060772,0.500882,0.863379,0.039779,0.180901,1.328953, + -0.021105,0.462042,0.886607,0,0.182861,1.328953, + 0.025206,0.28498,0.958202,0.032138,0.094157,1.365488, + 0.998302,0.002696,0.058183,0.145913,0.330528,0.935778, + 0.981055,0.006029,0.193634,0.146283,0.284903,0.933671, + 0.892207,0,0.451626,0.146283,0.330528,0.933671, + -0.004579,0.695959,0.718067,0,0.258604,1.270833, + 0.129618,0.851245,0.508509,0.067773,0.309412,1.195089, + -0.004744,0.86721,0.49792,0,0.316724,1.195089, + -0.004579,0.695959,0.718067,0,0.258604,1.270833, + 0.100502,0.687999,0.718719,0.051933,0.254321,1.270833, + 0.129618,0.851245,0.508509,0.067773,0.309412,1.195089, + 0.060772,0.500882,0.863379,0.039779,0.180901,1.328953, + -0.004579,0.695959,0.718067,0,0.258604,1.270833, + -0.021105,0.462042,0.886607,0,0.182861,1.328953, + 0.025206,0.28498,0.958202,0.032138,0.094157,1.365488, + -0.021105,0.462042,0.886607,0,0.182861,1.328953, + -0.014849,0.257672,0.966118,0,0.094656,1.365488, + -0.004744,0.86721,0.49792,0,0.316724,1.195089, + 0.141093,0.950715,0.276106,0.08622,0.34242,1.106884, + 0.01826,0.970957,0.238555,0,0.35326,1.106884, + 0.777747,0.144332,0.611782,0.201514,0.066932,1.270833, + 0.587064,0.226454,0.777222,0.138564,0.09143,1.328953, + 0.599673,0.101216,0.793819,0.151142,0.047328,1.328953, + 0.587064,0.226454,0.777222,0.138564,0.09143,1.328953, + 0.777747,0.144332,0.611782,0.201514,0.066932,1.270833, + 0.780002,0.279437,0.559921,0.183727,0.129302,1.270833, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + -0.231736,0.145641,0.961815,-0.081974,0.047328,1.365488, + -0.260629,0.080414,0.962084,-0.09143,0.024499,1.365488, + 0.335836,0.144904,0.930708,0.085971,0.047328,1.365488, + 0.474349,0.333906,0.814555,0.118556,0.129302,1.328953, + 0.273657,0.202688,0.940228,0.075614,0.066932,1.365488, + 0.474349,0.333906,0.814555,0.118556,0.129302,1.328953, + 0.335836,0.144904,0.930708,0.085971,0.047328,1.365488, + 0.587064,0.226454,0.777222,0.138564,0.09143,1.328953, + 0.587064,0.226454,0.777222,0.138564,0.09143,1.328953, + 0.676335,0.41763,0.606759,0.155432,0.182861,1.270833, + 0.474349,0.333906,0.814555,0.118556,0.129302,1.328953, + 0.676335,0.41763,0.606759,0.155432,0.182861,1.270833, + 0.587064,0.226454,0.777222,0.138564,0.09143,1.328953, + 0.780002,0.279437,0.559921,0.183727,0.129302,1.270833, + 0.335836,0.144904,0.930708,0.085971,0.047328,1.365488, + 0.273657,0.202688,0.940228,0.075614,0.066932,1.365488, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + 0.273657,0.202688,0.940228,0.075614,0.066932,1.365488, + 0.190766,0.247969,0.9498,0.062117,0.081974,1.365488, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + 0.273657,0.202688,0.940228,0.075614,0.066932,1.365488, + 0.34381,0.421062,0.839346,0.092482,0.158362,1.328953, + 0.190766,0.247969,0.9498,0.062117,0.081974,1.365488, + 0.34381,0.421062,0.839346,0.092482,0.158362,1.328953, + 0.273657,0.202688,0.940228,0.075614,0.066932,1.365488, + 0.474349,0.333906,0.814555,0.118556,0.129302,1.328953, + 0.411599,0.037309,0.910601,0.094702,0,1.365488, + 0.374938,0.079168,0.923663,0.092482,0.024499,1.365488, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + 0.474349,0.333906,0.814555,0.118556,0.129302,1.328953, + 0.52718,0.556291,0.642357,0.118556,0.223958,1.270833, + 0.34381,0.421062,0.839346,0.092482,0.158362,1.328953, + 0.52718,0.556291,0.642357,0.118556,0.223958,1.270833, + 0.474349,0.333906,0.814555,0.118556,0.129302,1.328953, + 0.676335,0.41763,0.606759,0.155432,0.182861,1.270833, + 0.56058,0.750837,0.349275,0.145913,0.292777,1.143555, + 0.539476,0.689911,0.482689,0.138564,0.274291,1.195089, + 0.703455,0.631189,0.326728,0.145913,0.284422,1.159696, + -0.260629,0.080414,0.962084,-0.09143,0.024499,1.365488, + -0.430421,0.254256,0.866078,-0.158362,0.09143,1.328953, + -0.481561,0.134192,0.866078,-0.17663,0.047328,1.328953, + -0.430421,0.254256,0.866078,-0.158362,0.09143,1.328953, + -0.260629,0.080414,0.962084,-0.09143,0.024499,1.365488, + -0.231736,0.145641,0.961815,-0.081974,0.047328,1.365488, + 0.190766,0.247969,0.9498,0.062117,0.081974,1.365488, + 0.092059,0.276195,0.956683,0.046399,0.09143,1.365488, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + -0.430421,0.254256,0.866078,-0.158362,0.09143,1.328953, + -0.517383,0.501035,0.693742,-0.182861,0.182861,1.270833, + -0.627494,0.326475,0.70687,-0.223958,0.129302,1.270833, + -0.517383,0.501035,0.693742,-0.182861,0.182861,1.270833, + -0.430421,0.254256,0.866078,-0.158362,0.09143,1.328953, + -0.349948,0.356994,0.866078,-0.129302,0.129302,1.328953, + 0.190766,0.247969,0.9498,0.062117,0.081974,1.365488, + 0.178567,0.479998,0.858904,0.062117,0.17663,1.328953, + 0.092059,0.276195,0.956683,0.046399,0.09143,1.365488, + 0.178567,0.479998,0.858904,0.062117,0.17663,1.328953, + 0.190766,0.247969,0.9498,0.062117,0.081974,1.365488, + 0.34381,0.421062,0.839346,0.092482,0.158362,1.328953, + -0.481561,0.134192,0.866078,-0.17663,0.047328,1.328953, + -0.627494,0.326475,0.70687,-0.223958,0.129302,1.270833, + -0.690611,0.152943,0.70687,-0.249792,0.066932,1.270833, + -0.627494,0.326475,0.70687,-0.223958,0.129302,1.270833, + -0.481561,0.134192,0.866078,-0.17663,0.047328,1.328953, + -0.430421,0.254256,0.866078,-0.158362,0.09143,1.328953, + 0.278638,0.67847,0.679735,0.075614,0.249792,1.270833, + 0.539476,0.689911,0.482689,0.138564,0.274291,1.195089, + 0.371923,0.814436,0.445385,0.085971,0.305932,1.195089, + 0.539476,0.689911,0.482689,0.138564,0.274291,1.195089, + 0.278638,0.67847,0.679735,0.075614,0.249792,1.270833, + 0.52718,0.556291,0.642357,0.118556,0.223958,1.270833, + 0.34381,0.421062,0.839346,0.092482,0.158362,1.328953, + 0.278638,0.67847,0.679735,0.075614,0.249792,1.270833, + 0.178567,0.479998,0.858904,0.062117,0.17663,1.328953, + 0.278638,0.67847,0.679735,0.075614,0.249792,1.270833, + 0.34381,0.421062,0.839346,0.092482,0.158362,1.328953, + 0.52718,0.556291,0.642357,0.118556,0.223958,1.270833, + -0.517383,0.501035,0.693742,-0.182861,0.182861,1.270833, + -0.751368,0.430509,0.500107,-0.274291,0.158362,1.195089, + -0.627494,0.326475,0.70687,-0.223958,0.129302,1.270833, + -0.751368,0.430509,0.500107,-0.274291,0.158362,1.195089, + -0.517383,0.501035,0.693742,-0.182861,0.182861,1.270833, + -0.627248,0.627248,0.46165,-0.223958,0.223958,1.195089, + -0.803542,-0.582394,0.123034,0.146283,0.284903,1.246708, + -0.825039,-0.55911,0.081898,0.177609,0.230776,1.195089, + -0.862228,-0.506519,0.000588,0.19071,0.208602,1.305256, + 0.361607,0.924025,0.124172,0.093273,0.345512,1.073157, + 0.491078,0.866607,0.088512,0.106015,0.346454,1.012229, + 0.288047,0.952171,0.101981,0.094656,0.35326,1.012229, + -0.627248,0.627248,0.46165,-0.223958,0.223958,1.195089, + -0.837235,0.481678,0.258889,-0.305932,0.17663,1.106884, + -0.751368,0.430509,0.500107,-0.274291,0.158362,1.195089, + -0.837235,0.481678,0.258889,-0.305932,0.17663,1.106884, + -0.627248,0.627248,0.46165,-0.223958,0.223958,1.195089, + -0.69037,0.69037,0.216285,-0.249792,0.249792,1.106884, + -0.231736,0.145641,0.961815,-0.081974,0.047328,1.365488, + -0.349948,0.356994,0.866078,-0.129302,0.129302,1.328953, + -0.430421,0.254256,0.866078,-0.158362,0.09143,1.328953, + -0.349948,0.356994,0.866078,-0.129302,0.129302,1.328953, + -0.231736,0.145641,0.961815,-0.081974,0.047328,1.365488, + -0.187251,0.201824,0.961355,-0.066932,0.066932,1.365488, + 0.025206,0.28498,0.958202,0.032138,0.094157,1.365488, + -0.014849,0.257672,0.966118,0,0.094656,1.365488, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + -0.014849,0.257672,0.966118,0,0.094656,1.365488, + -0.062541,0.273564,0.959818,-0.024499,0.09143,1.365488, + -0.627494,0.326475,0.70687,-0.223958,0.129302,1.270833, + -0.83719,0.221372,0.500107,-0.305932,0.081974,1.195089, + -0.690611,0.152943,0.70687,-0.249792,0.066932,1.270833, + -0.83719,0.221372,0.500107,-0.305932,0.081974,1.195089, + -0.627494,0.326475,0.70687,-0.223958,0.129302,1.270833, + -0.751368,0.430509,0.500107,-0.274291,0.158362,1.195089, + -0.062541,0.273564,0.959818,-0.024499,0.09143,1.365488, + -0.021105,0.462042,0.886607,0,0.182861,1.328953, + -0.124567,0.48414,0.866078,-0.047328,0.17663,1.328953, + -0.021105,0.462042,0.886607,0,0.182861,1.328953, + -0.062541,0.273564,0.959818,-0.024499,0.09143,1.365488, + -0.014849,0.257672,0.966118,0,0.094656,1.365488, + -0.124567,0.48414,0.866078,-0.047328,0.17663,1.328953, + -0.004579,0.695959,0.718067,0,0.258604,1.270833, + -0.179072,0.683956,0.707204,-0.066932,0.249792,1.270833, + -0.004579,0.695959,0.718067,0,0.258604,1.270833, + -0.124567,0.48414,0.866078,-0.047328,0.17663,1.328953, + -0.021105,0.462042,0.886607,0,0.182861,1.328953, + -0.179072,0.683956,0.707204,-0.066932,0.249792,1.270833, + -0.004744,0.86721,0.49792,0,0.316724,1.195089, + -0.221372,0.83719,0.500107,-0.081974,0.305932,1.195089, + -0.004744,0.86721,0.49792,0,0.316724,1.195089, + -0.179072,0.683956,0.707204,-0.066932,0.249792,1.270833, + -0.004579,0.695959,0.718067,0,0.258604,1.270833, + -0.221372,0.83719,0.500107,-0.081974,0.305932,1.195089, + 0.01826,0.970957,0.238555,0,0.35326,1.106884, + -0.248573,0.933374,0.258889,-0.09143,0.341223,1.106884, + 0.01826,0.970957,0.238555,0,0.35326,1.106884, + -0.221372,0.83719,0.500107,-0.081974,0.305932,1.195089, + -0.004744,0.86721,0.49792,0,0.316724,1.195089, + -0.248573,0.933374,0.258889,-0.09143,0.341223,1.106884, + -0.018655,0.995608,0.091745,0,0.365721,1.012229, + -0.31221,0.945601,0.091454,-0.094656,0.35326,1.012229, + -0.018655,0.995608,0.091745,0,0.365721,1.012229, + -0.248573,0.933374,0.258889,-0.09143,0.341223,1.106884, + 0.01826,0.970957,0.238555,0,0.35326,1.106884, + -0.751368,0.430509,0.500107,-0.274291,0.158362,1.195089, + -0.933374,0.248573,0.258889,-0.341223,0.09143,1.106884, + -0.83719,0.221372,0.500107,-0.305932,0.081974,1.195089, + -0.933374,0.248573,0.258889,-0.341223,0.09143,1.106884, + -0.751368,0.430509,0.500107,-0.274291,0.158362,1.195089, + -0.837235,0.481678,0.258889,-0.305932,0.17663,1.106884, + 0.374938,0.079168,0.923663,0.092482,0.024499,1.365488, + 0.335836,0.144904,0.930708,0.085971,0.047328,1.365488, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + -0.69037,0.69037,0.216285,-0.249792,0.249792,1.106884, + -0.872168,0.480862,0.089971,-0.316724,0.182861,1.012229, + -0.837235,0.481678,0.258889,-0.305932,0.17663,1.106884, + -0.872168,0.480862,0.089971,-0.316724,0.182861,1.012229, + -0.69037,0.69037,0.216285,-0.249792,0.249792,1.106884, + -0.744941,0.662269,0.080386,-0.258604,0.258604,1.012229, + -0.430509,0.751368,0.500107,-0.158362,0.274291,1.195089, + -0.248573,0.933374,0.258889,-0.09143,0.341223,1.106884, + -0.481678,0.837235,0.258889,-0.17663,0.305932,1.106884, + -0.248573,0.933374,0.258889,-0.09143,0.341223,1.106884, + -0.430509,0.751368,0.500107,-0.158362,0.274291,1.195089, + -0.221372,0.83719,0.500107,-0.081974,0.305932,1.195089, + -0.481678,0.837235,0.258889,-0.17663,0.305932,1.106884, + -0.31221,0.945601,0.091454,-0.094656,0.35326,1.012229, + -0.54686,0.832268,0.090962,-0.182861,0.316724,1.012229, + -0.31221,0.945601,0.091454,-0.094656,0.35326,1.012229, + -0.481678,0.837235,0.258889,-0.17663,0.305932,1.106884, + -0.248573,0.933374,0.258889,-0.09143,0.341223,1.106884, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + -0.062541,0.273564,0.959818,-0.024499,0.09143,1.365488, + -0.129745,0.245423,0.960694,-0.047328,0.081974,1.365488, + -0.129745,0.245423,0.960694,-0.047328,0.081974,1.365488, + -0.124567,0.48414,0.866078,-0.047328,0.17663,1.328953, + -0.245627,0.435403,0.866078,-0.09143,0.158362,1.328953, + -0.124567,0.48414,0.866078,-0.047328,0.17663,1.328953, + -0.129745,0.245423,0.960694,-0.047328,0.081974,1.365488, + -0.062541,0.273564,0.959818,-0.024499,0.09143,1.365488, + -0.245627,0.435403,0.866078,-0.09143,0.158362,1.328953, + -0.179072,0.683956,0.707204,-0.066932,0.249792,1.270833, + -0.349991,0.614303,0.707204,-0.129302,0.223958,1.270833, + -0.179072,0.683956,0.707204,-0.066932,0.249792,1.270833, + -0.245627,0.435403,0.866078,-0.09143,0.158362,1.328953, + -0.124567,0.48414,0.866078,-0.047328,0.17663,1.328953, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + -0.129745,0.245423,0.960694,-0.047328,0.081974,1.365488, + -0.187251,0.201824,0.961355,-0.066932,0.066932,1.365488, + -0.349991,0.614303,0.707204,-0.129302,0.223958,1.270833, + -0.221372,0.83719,0.500107,-0.081974,0.305932,1.195089, + -0.430509,0.751368,0.500107,-0.158362,0.274291,1.195089, + -0.221372,0.83719,0.500107,-0.081974,0.305932,1.195089, + -0.349991,0.614303,0.707204,-0.129302,0.223958,1.270833, + -0.179072,0.683956,0.707204,-0.066932,0.249792,1.270833, + -0.690611,0.152943,0.70687,-0.249792,0.066932,1.270833, + -0.838063,0.110333,0.5343,-0.316724,0,1.195089, + -0.70396,0.092678,0.704167,-0.258604,0,1.270833, + -0.838063,0.110333,0.5343,-0.316724,0,1.195089, + -0.690611,0.152943,0.70687,-0.249792,0.066932,1.270833, + -0.83719,0.221372,0.500107,-0.305932,0.081974,1.195089, + -0.187251,0.201824,0.961355,-0.066932,0.066932,1.365488, + -0.245627,0.435403,0.866078,-0.09143,0.158362,1.328953, + -0.349948,0.356994,0.866078,-0.129302,0.129302,1.328953, + -0.245627,0.435403,0.866078,-0.09143,0.158362,1.328953, + -0.187251,0.201824,0.961355,-0.066932,0.066932,1.365488, + -0.129745,0.245423,0.960694,-0.047328,0.081974,1.365488, + 0.374938,0.079168,0.923663,0.092482,0.024499,1.365488, + 0.587064,0.226454,0.777222,0.138564,0.09143,1.328953, + 0.335836,0.144904,0.930708,0.085971,0.047328,1.365488, + 0.587064,0.226454,0.777222,0.138564,0.09143,1.328953, + 0.374938,0.079168,0.923663,0.092482,0.024499,1.365488, + 0.599673,0.101216,0.793819,0.151142,0.047328,1.328953, + -0.349948,0.356994,0.866078,-0.129302,0.129302,1.328953, + -0.349991,0.614303,0.707204,-0.129302,0.223958,1.270833, + -0.517383,0.501035,0.693742,-0.182861,0.182861,1.270833, + -0.349991,0.614303,0.707204,-0.129302,0.223958,1.270833, + -0.349948,0.356994,0.866078,-0.129302,0.129302,1.328953, + -0.245627,0.435403,0.866078,-0.09143,0.158362,1.328953, + -0.517383,0.501035,0.693742,-0.182861,0.182861,1.270833, + -0.430509,0.751368,0.500107,-0.158362,0.274291,1.195089, + -0.627248,0.627248,0.46165,-0.223958,0.223958,1.195089, + -0.430509,0.751368,0.500107,-0.158362,0.274291,1.195089, + -0.517383,0.501035,0.693742,-0.182861,0.182861,1.270833, + -0.349991,0.614303,0.707204,-0.129302,0.223958,1.270833, + -0.627248,0.627248,0.46165,-0.223958,0.223958,1.195089, + -0.481678,0.837235,0.258889,-0.17663,0.305932,1.106884, + -0.69037,0.69037,0.216285,-0.249792,0.249792,1.106884, + -0.481678,0.837235,0.258889,-0.17663,0.305932,1.106884, + -0.627248,0.627248,0.46165,-0.223958,0.223958,1.195089, + -0.430509,0.751368,0.500107,-0.158362,0.274291,1.195089, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + -0.187251,0.201824,0.961355,-0.066932,0.066932,1.365488, + -0.231736,0.145641,0.961815,-0.081974,0.047328,1.365488, + -0.69037,0.69037,0.216285,-0.249792,0.249792,1.106884, + -0.54686,0.832268,0.090962,-0.182861,0.316724,1.012229, + -0.744941,0.662269,0.080386,-0.258604,0.258604,1.012229, + -0.54686,0.832268,0.090962,-0.182861,0.316724,1.012229, + -0.69037,0.69037,0.216285,-0.249792,0.249792,1.106884, + -0.481678,0.837235,0.258889,-0.17663,0.305932,1.106884, + 0.777747,0.144332,0.611782,0.201514,0.066932,1.270833, + 0.67336,0.061035,0.736791,0.155432,0,1.328953, + 0.84071,0.076204,0.536096,0.207581,0,1.270833, + 0.67336,0.061035,0.736791,0.155432,0,1.328953, + 0.777747,0.144332,0.611782,0.201514,0.066932,1.270833, + 0.599673,0.101216,0.793819,0.151142,0.047328,1.328953, + -0.837235,0.481678,0.258889,-0.305932,0.17663,1.106884, + -0.966816,0.23921,0.089691,-0.35326,0.094656,1.012229, + -0.933374,0.248573,0.258889,-0.341223,0.09143,1.106884, + -0.966816,0.23921,0.089691,-0.35326,0.094656,1.012229, + -0.837235,0.481678,0.258889,-0.305932,0.17663,1.106884, + -0.872168,0.480862,0.089971,-0.316724,0.182861,1.012229, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + -0.260629,0.080414,0.962084,-0.09143,0.024499,1.365488, + -0.290881,0.038295,0.955993,-0.094656,0,1.365488, + -0.290881,0.038295,0.955993,-0.094656,0,1.365488, + -0.481561,0.134192,0.866078,-0.17663,0.047328,1.328953, + -0.536052,0.070573,0.84123,-0.182861,0,1.328953, + -0.481561,0.134192,0.866078,-0.17663,0.047328,1.328953, + -0.290881,0.038295,0.955993,-0.094656,0,1.365488, + -0.260629,0.080414,0.962084,-0.09143,0.024499,1.365488, + -0.536052,0.070573,0.84123,-0.182861,0,1.328953, + -0.690611,0.152943,0.70687,-0.249792,0.066932,1.270833, + -0.70396,0.092678,0.704167,-0.258604,0,1.270833, + -0.690611,0.152943,0.70687,-0.249792,0.066932,1.270833, + -0.536052,0.070573,0.84123,-0.182861,0,1.328953, + -0.481561,0.134192,0.866078,-0.17663,0.047328,1.328953, + -0.83719,0.221372,0.500107,-0.305932,0.081974,1.195089, + -0.946203,0.12457,0.298635,-0.35326,0,1.106884, + -0.838063,0.110333,0.5343,-0.316724,0,1.195089, + -0.946203,0.12457,0.298635,-0.35326,0,1.106884, + -0.83719,0.221372,0.500107,-0.305932,0.081974,1.195089, + -0.933374,0.248573,0.258889,-0.341223,0.09143,1.106884, + -0.933374,0.248573,0.258889,-0.341223,0.09143,1.106884, + -0.985881,0.129794,0.105798,-0.365721,0,1.012229, + -0.946203,0.12457,0.298635,-0.35326,0,1.106884, + -0.985881,0.129794,0.105798,-0.365721,0,1.012229, + -0.933374,0.248573,0.258889,-0.341223,0.09143,1.106884, + -0.966816,0.23921,0.089691,-0.35326,0.094656,1.012229, + 0.411599,0.037309,0.910601,0.094702,0,1.365488, + 0.599673,0.101216,0.793819,0.151142,0.047328,1.328953, + 0.374938,0.079168,0.923663,0.092482,0.024499,1.365488, + 0.599673,0.101216,0.793819,0.151142,0.047328,1.328953, + 0.411599,0.037309,0.910601,0.094702,0,1.365488, + 0.67336,0.061035,0.736791,0.155432,0,1.328953, + 0.178567,0.479998,0.858904,0.062117,0.17663,1.328953, + 0.100502,0.687999,0.718719,0.051933,0.254321,1.270833, + 0.060772,0.500882,0.863379,0.039779,0.180901,1.328953, + 0.100502,0.687999,0.718719,0.051933,0.254321,1.270833, + 0.178567,0.479998,0.858904,0.062117,0.17663,1.328953, + 0.278638,0.67847,0.679735,0.075614,0.249792,1.270833, + 0.129618,0.851245,0.508509,0.067773,0.309412,1.195089, + 0.312254,0.908542,0.277577,0.092482,0.341223,1.106884, + 0.141093,0.950715,0.276106,0.08622,0.34242,1.106884, + 0.312254,0.908542,0.277577,0.092482,0.341223,1.106884, + 0.129618,0.851245,0.508509,0.067773,0.309412,1.195089, + 0.371923,0.814436,0.445385,0.085971,0.305932,1.195089, + 0.491078,0.866607,0.088512,0.106015,0.346454,1.012229, + 0.293356,0.953923,0.063035,0.111086,0.414579,0, + 0.288047,0.952171,0.101981,0.094656,0.35326,1.012229, + 0.129618,0.851245,0.508509,0.067773,0.309412,1.195089, + 0.278638,0.67847,0.679735,0.075614,0.249792,1.270833, + 0.371923,0.814436,0.445385,0.085971,0.305932,1.195089, + 0.278638,0.67847,0.679735,0.075614,0.249792,1.270833, + 0.129618,0.851245,0.508509,0.067773,0.309412,1.195089, + 0.100502,0.687999,0.718719,0.051933,0.254321,1.270833, + 0.838263,-0.003347,0.545256,0.161481,0.30464,0.912126, + 0.892207,0,0.451626,0.146283,0.330528,0.933671, + 0.923345,0,0.383971,0.146283,0.284903,0.933671, + 0.892207,0,0.451626,0.146283,0.330528,0.933671, + 0.838263,-0.003347,0.545256,0.161481,0.30464,0.912126, + 0.85821,-0.006695,0.513255,0.162433,0.32323,0.910776, + 0.092059,0.276195,0.956683,0.046399,0.09143,1.365488, + 0.060772,0.500882,0.863379,0.039779,0.180901,1.328953, + 0.025206,0.28498,0.958202,0.032138,0.094157,1.365488, + 0.060772,0.500882,0.863379,0.039779,0.180901,1.328953, + 0.092059,0.276195,0.956683,0.046399,0.09143,1.365488, + 0.178567,0.479998,0.858904,0.062117,0.17663,1.328953, + 0.092059,0.276195,0.956683,0.046399,0.09143,1.365488, + 0.025206,0.28498,0.958202,0.032138,0.094157,1.365488, + 0.024964,0.082992,0.996238,0.029532,0,1.37795, + 0.312254,0.908542,0.277577,0.092482,0.341223,1.106884, + 0.361607,0.924025,0.124172,0.093273,0.345512,1.073157, + 0.141093,0.950715,0.276106,0.08622,0.34242,1.106884, + 0.875651,-0.009145,0.482859,0.230667,0.24695,0.785155, + 0.875834,-0.009413,0.48252,0.218313,0.218497,0.807025, + 0.875344,-0.008697,0.483422,0.219541,0.214647,0.804721, + 0.875834,-0.009413,0.48252,0.218313,0.218497,0.807025, + 0.875651,-0.009145,0.482859,0.230667,0.24695,0.785155, + 0.87595,-0.009537,0.482307,0.206427,0.238615,0.828993, + 0.87595,-0.009537,0.482307,0.206427,0.238615,0.828993, + 0.875651,-0.009145,0.482859,0.230667,0.24695,0.785155, + 0.876066,-0.009661,0.482094,0.214135,0.2689,0.815591, + -0.798008,0.602646,0.000065,0.146283,0.284903,1.246708, + -0.800822,0.598902,0.000098,0.145913,0.284422,1.159696, + -0.809157,0.587593,0.000196,0.138564,0.274291,1.195089, + 0.964645,0.195253,0.177021,0.414579,0.111086,0, + 0.927775,0.05186,0.369519,0.290282,0.101111,0.675403, + 0.931218,0.038006,0.362475,0.29625,0.056256,0.664416, + 0.610633,0.787554,0.082987,0.162433,0.32323,0.910776, + 0.774879,0.62326,0.105398,0.173158,0.314854,0.891031, + 0.768035,0.631773,0.104812,0.303493,0.303493,0, + -0.798008,0.602646,0.000065,0.146283,0.284903,1.246708, + -0.792329,0.610094,0,0.146283,0.284903,1.087672, + -0.800822,0.598902,0.000098,0.145913,0.284422,1.159696, + -0.792329,0.610094,0,0.146283,0.284903,1.087672, + -0.798008,0.602646,0.000065,0.146283,0.284903,1.246708, + -0.792329,0.610094,0,0.154063,0.295007,1.238954, + -0.792329,0.610094,0,0.146283,0.284903,1.087672, + -0.792329,0.610094,0,0.154063,0.295007,1.238954, + -0.792329,0.610094,0,0.146283,0.284903,0.933671, + -0.792329,0.610094,0,0.146283,0.284903,0.933671, + -0.792329,0.610094,0,0.154063,0.295007,1.238954, + -0.792329,0.610094,0,0.161481,0.30464,0.912126, + -0.792329,0.610094,0,0.161481,0.30464,0.912126, + -0.792329,0.610094,0,0.154063,0.295007,1.238954, + -0.792329,0.610094,0,0.164839,0.309002,1.220716, + -0.792329,0.610094,0,0.161481,0.30464,0.912126, + -0.792329,0.610094,0,0.164839,0.309002,1.220716, + -0.792329,0.610094,0,0.164839,0.309002,0.906089, + 0.902969,0.403992,0.146418,0.371702,0.214602,0, + 0.924479,0.12193,0.361208,0.259167,0.19321,0.732687, + 0.926797,0.118754,0.356292,0.274037,0.157167,0.70531, + -0.803542,-0.582394,0.123034,0.146283,0.284903,1.246708, + -0.72232,-0.648117,0.241242,0.138564,0.274291,1.195089, + -0.825039,-0.55911,0.081898,0.177609,0.230776,1.195089, + 0.902969,0.403992,0.146418,0.371702,0.214602,0, + 0.945888,0.279771,0.16439,0.274037,0.157167,0.70531, + 0.964645,0.195253,0.177021,0.414579,0.111086,0, + 0.768035,0.631773,0.104812,0.303493,0.303493,0, + 0.845942,0.520777,0.114772,0.214135,0.2689,0.815591, + 0.866079,0.482943,0.129122,0.230667,0.24695,0.785155, + 0.610633,0.787554,0.082987,0.162433,0.32323,0.910776, + 0.768035,0.631773,0.104812,0.303493,0.303493,0, + 0.495531,0.865546,0.072654,0.214602,0.371702,0, + 0.768035,0.631773,0.104812,0.303493,0.303493,0, + 0.866079,0.482943,0.129122,0.230667,0.24695,0.785155, + 0.902969,0.403992,0.146418,0.371702,0.214602,0, + 0.964645,0.195253,0.177021,0.414579,0.111086,0, + 0.931218,0.038006,0.362475,0.29625,0.056256,0.664416, + 0.977781,0.093209,0.187769,0.429204,0,0, + 0.998302,0.002696,0.058183,0.145913,0.330528,0.935778, + 0.999961,0.008668,0.001509,0.145913,0.309078,1.106884, + 0.998275,0.007814,0.058184,0.146283,0.284903,0.933671, + 0.999961,0.008668,0.001509,0.145913,0.309078,1.106884, + 0.998302,0.002696,0.058183,0.145913,0.330528,0.935778, + 1,0,0,0.145913,0.322451,1.012229, + 0.999961,0.008668,0.001509,0.145913,0.309078,1.106884, + 0.99992,0.012221,0.00341,0.146283,0.284903,1.087672, + 0.998275,0.007814,0.058184,0.146283,0.284903,0.933671, + 0.499452,0.862679,0.079575,0.146283,0.330528,0.933671, + 0.610633,0.787554,0.082987,0.162433,0.32323,0.910776, + 0.495531,0.865546,0.072654,0.214602,0.371702,0, + 0.491078,0.866607,0.088512,0.106015,0.346454,1.012229, + 0.499452,0.862679,0.079575,0.146283,0.330528,0.933671, + 0.495531,0.865546,0.072654,0.214602,0.371702,0, + 0.491078,0.866607,0.088512,0.106015,0.346454,1.012229, + 0.513415,0.853391,0.090157,0.145913,0.330528,0.935778, + 0.499452,0.862679,0.079575,0.146283,0.330528,0.933671, + 0.513415,0.853391,0.090157,0.145913,0.330528,0.935778, + 0.491078,0.866607,0.088512,0.106015,0.346454,1.012229, + 0.512375,0.851663,0.110186,0.145913,0.322451,1.012229, + -0.744941,0.662269,0.080386,-0.258604,0.258604,1.012229, + -0.842678,0.535089,0.059785,-0.351049,0.202678,0.351049, + -0.872168,0.480862,0.089971,-0.316724,0.182861,1.012229, + -0.842678,0.535089,0.059785,-0.351049,0.202678,0.351049, + -0.744941,0.662269,0.080386,-0.258604,0.258604,1.012229, + -0.794265,0.604621,0.059807,-0.341369,0.216238,0.341369, + -0.744941,0.662269,0.080386,-0.258604,0.258604,1.012229, + -0.796561,0.601545,0.060284,-0.319565,0.247297,0.319565, + -0.794265,0.604621,0.059807,-0.341369,0.216238,0.341369, + -0.796561,0.601545,0.060284,-0.319565,0.247297,0.319565, + -0.744941,0.662269,0.080386,-0.258604,0.258604,1.012229, + -0.676046,0.734345,0.060814,-0.289756,0.289756,0.289756, + -0.872168,0.480862,0.089971,-0.316724,0.182861,1.012229, + -0.952168,0.299814,0.059064,-0.388916,0.10421,0.388916, + -0.966816,0.23921,0.089691,-0.35326,0.094656,1.012229, + -0.952168,0.299814,0.059064,-0.388916,0.10421,0.388916, + -0.872168,0.480862,0.089971,-0.316724,0.182861,1.012229, + -0.923255,0.379637,0.058951,-0.382487,0.120717,0.382487, + -0.842678,0.535089,0.059785,-0.351049,0.202678,0.351049, + -0.923255,0.379637,0.058951,-0.382487,0.120717,0.382487, + -0.872168,0.480862,0.089971,-0.316724,0.182861,1.012229, + -0.966816,0.23921,0.089691,-0.35326,0.094656,1.012229, + -0.989755,0.130304,0.058357,-0.401718,0,0.401718, + -0.985881,0.129794,0.105798,-0.365721,0,1.012229, + -0.989755,0.130304,0.058357,-0.401718,0,0.401718, + -0.966816,0.23921,0.089691,-0.35326,0.094656,1.012229, + -0.989867,0.129393,0.058479,-0.399435,0.01836,0.399435, + -0.952168,0.299814,0.059064,-0.388916,0.10421,0.388916, + -0.989867,0.129393,0.058479,-0.399435,0.01836,0.399435, + -0.966816,0.23921,0.089691,-0.35326,0.094656,1.012229, + -0.54686,0.832268,0.090962,-0.182861,0.316724,1.012229, + -0.463375,0.883993,0.061975,-0.207855,0.360015,0.207855, + -0.611294,0.789058,0.060884,-0.277897,0.29976,0.277897, + -0.676046,0.734345,0.060814,-0.289756,0.289756,0.289756, + -0.54686,0.832268,0.090962,-0.182861,0.316724,1.012229, + -0.611294,0.789058,0.060884,-0.277897,0.29976,0.277897, + -0.54686,0.832268,0.090962,-0.182861,0.316724,1.012229, + -0.676046,0.734345,0.060814,-0.289756,0.289756,0.289756, + -0.744941,0.662269,0.080386,-0.258604,0.258604,1.012229, + -0.31221,0.945601,0.091454,-0.094656,0.35326,1.012229, + -0.217377,0.974082,0.062537,-0.109312,0.407957,0.109312, + -0.38421,0.921178,0.061758,-0.194861,0.366264,0.194861, + -0.463375,0.883993,0.061975,-0.207855,0.360015,0.207855, + -0.31221,0.945601,0.091454,-0.094656,0.35326,1.012229, + -0.38421,0.921178,0.061758,-0.194861,0.366264,0.194861, + -0.31221,0.945601,0.091454,-0.094656,0.35326,1.012229, + -0.463375,0.883993,0.061975,-0.207855,0.360015,0.207855, + -0.54686,0.832268,0.090962,-0.182861,0.316724,1.012229, + -0.018655,0.995608,0.091745,0,0.365721,1.012229, + 0.293356,0.953923,0.063035,0.111086,0.414579,0, + 0,0.998039,0.062593,0,0.429204,0, + 0.293356,0.953923,0.063035,0.111086,0.414579,0, + -0.018655,0.995608,0.091745,0,0.365721,1.012229, + 0.288047,0.952171,0.101981,0.094656,0.35326,1.012229, + -0.217377,0.974082,0.062537,-0.109312,0.407957,0.109312, + -0.018655,0.995608,0.091745,0,0.365721,1.012229, + 0,0.998039,0.062593,0,0.429204,0, + -0.018655,0.995608,0.091745,0,0.365721,1.012229, + -0.217377,0.974082,0.062537,-0.109312,0.407957,0.109312, + -0.31221,0.945601,0.091454,-0.094656,0.35326,1.012229, + 0,0,-1,0,0.429204,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0,0.214602,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0,0.429204,0, + 0,0,-1,0.111086,0.414579,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0.111086,0.414579,0, + 0,0,-1,0.214602,0.371702,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0.214602,0.371702,0, + 0,0,-1,0.303493,0.303493,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0.303493,0.303493,0, + 0,0,-1,0.371702,0.214602,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0.371702,0.214602,0, + 0,0,-1,0.356283,0,0, + 0,0,-1,0.356283,0,0, + 0,0,-1,0.371702,0.214602,0, + 0,0,-1,0.429204,0,0, + 0,0,-1,0.429204,0,0, + 0,0,-1,0.371702,0.214602,0, + 0,0,-1,0.414579,0.111086,0, + -0.707107,0,-0.707107,-0.399435,0.01836,0.399435, + -0.707107,0,-0.707107,-0.25193,0,0.25193, + -0.707107,0,-0.707107,-0.401718,0,0.401718, + -0.707107,0,-0.707107,-0.25193,0,0.25193, + -0.707107,0,-0.707107,-0.399435,0.01836,0.399435, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.399435,0.01836,0.399435, + -0.707107,0,-0.707107,-0.388916,0.10421,0.388916, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.388916,0.10421,0.388916, + -0.707107,0,-0.707107,-0.382487,0.120717,0.382487, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.382487,0.120717,0.382487, + -0.707107,0,-0.707107,-0.351049,0.202678,0.351049, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.351049,0.202678,0.351049, + -0.707107,0,-0.707107,-0.341369,0.216238,0.341369, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.341369,0.216238,0.341369, + -0.707107,0,-0.707107,0,0.214602,0, + -0.707107,0,-0.707107,0,0.214602,0, + -0.707107,0,-0.707107,-0.341369,0.216238,0.341369, + -0.707107,0,-0.707107,0,0.429204,0, + -0.707107,0,-0.707107,0,0.429204,0, + -0.707107,0,-0.707107,-0.341369,0.216238,0.341369, + -0.707107,0,-0.707107,-0.319565,0.247297,0.319565, + -0.707107,0,-0.707107,0,0.429204,0, + -0.707107,0,-0.707107,-0.319565,0.247297,0.319565, + -0.707107,0,-0.707107,-0.289756,0.289756,0.289756, + -0.707107,0,-0.707107,0,0.429204,0, + -0.707107,0,-0.707107,-0.289756,0.289756,0.289756, + -0.707107,0,-0.707107,-0.277897,0.29976,0.277897, + -0.707107,0,-0.707107,0,0.429204,0, + -0.707107,0,-0.707107,-0.277897,0.29976,0.277897, + -0.707107,0,-0.707107,-0.207855,0.360015,0.207855, + -0.707107,0,-0.707107,0,0.429204,0, + -0.707107,0,-0.707107,-0.207855,0.360015,0.207855, + -0.707107,0,-0.707107,-0.194861,0.366264,0.194861, + -0.707107,0,-0.707107,0,0.429204,0, + -0.707107,0,-0.707107,-0.194861,0.366264,0.194861, + -0.707107,0,-0.707107,-0.109312,0.407957,0.109312 +}; +static const struct gllist handsy_model_thumb_distal_frame = { + GL_N3F_V3F, GL_TRIANGLES, 804, handsy_model_thumb_distal_data, 0 +}; +const struct gllist *handsy_model_thumb_distal = &handsy_model_thumb_distal_frame; + +static const float handsy_model_thumb_metacarpal_data[] = { + -0.965926,0,-0.258819,-0.344143,0,1.403844, + -0.866025,0,-0.5,-0.30855,0.214602,1.317916, + -0.866025,0,-0.5,-0.30855,0,1.317916, + -0.866025,0,-0.5,-0.30855,0.214602,1.317916, + -0.965926,0,-0.258819,-0.344143,0,1.403844, + -0.965926,0,-0.258819,-0.344143,0.214602,1.403844, + 0.258819,0,0.965926,0.092213,0,1.8402, + 0,0,1,0,0.214602,1.85234, + 0,0,1,0,0,1.85234, + 0,0,1,0,0.214602,1.85234, + 0.258819,0,0.965926,0.092213,0,1.8402, + 0.258819,0,0.965926,0.092213,0.214602,1.8402, + -0.675426,0,0.737428,-0.25193,0,1.747987, + -0.5,0,0.866025,-0.178141,0.214602,1.804607, + -0.737428,0,0.675426,-0.25193,0.214602,1.747987, + -0.5,0,0.866025,-0.178141,0.214602,1.804607, + -0.675426,0,0.737428,-0.25193,0,1.747987, + -0.5,0,0.866025,-0.178141,0,1.804607, + 0.707107,0,0.707107,0.25193,0,1.747987, + 0.5,0,0.866025,0.178141,0.214602,1.804607, + 0.5,0,0.866025,0.178141,0,1.804607, + 0.5,0,0.866025,0.178141,0.214602,1.804607, + 0.707107,0,0.707107,0.25193,0,1.747987, + 0.707107,0,0.707107,0.25193,0.214602,1.747987, + -0.866025,0,0.5,-0.30855,0,1.674199, + -0.965926,0,0.258819,-0.344143,0.214602,1.58827, + -0.965926,0,0.258819,-0.344143,0,1.58827, + -0.965926,0,0.258819,-0.344143,0.214602,1.58827, + -0.866025,0,0.5,-0.30855,0,1.674199, + -0.866025,0,0.5,-0.30855,0.214602,1.674199, + -0.258819,0,0.965926,-0.092213,0,1.8402, + -0.5,0,0.866025,-0.178141,0.214602,1.804607, + -0.5,0,0.866025,-0.178141,0,1.804607, + -0.5,0,0.866025,-0.178141,0.214602,1.804607, + -0.258819,0,0.965926,-0.092213,0,1.8402, + -0.258819,0,0.965926,-0.092213,0.214602,1.8402, + 0.866025,0,0.5,0.30855,0.214602,1.674199, + 0.707107,0,0.707107,0.25193,0,1.747987, + 0.866025,0,0.5,0.30855,0,1.674199, + 0.707107,0,0.707107,0.25193,0,1.747987, + 0.866025,0,0.5,0.30855,0.214602,1.674199, + 0.707107,0,0.707107,0.25193,0.214602,1.747987, + 0.991445,0,0.130526,0.356283,0.214602,1.496057, + 0.965926,0,0.258819,0.344143,0,1.58827, + 0.991445,0,0.130526,0.356283,0,1.496057, + 0.965926,0,0.258819,0.344143,0,1.58827, + 0.991445,0,0.130526,0.356283,0.214602,1.496057, + 0.965926,0,0.258819,0.344143,0.214602,1.58827, + -0.999038,0,-0.043842,-0.356283,0.214602,1.496057, + -0.965926,0,-0.258819,-0.344143,0,1.403844, + -0.999038,0,0.043842,-0.356283,0,1.496057, + -0.965926,0,-0.258819,-0.344143,0,1.403844, + -0.999038,0,-0.043842,-0.356283,0.214602,1.496057, + -0.965926,0,-0.258819,-0.344143,0.214602,1.403844, + -0.866025,0,-0.5,-0.30855,0.214602,1.317916, + -0.793353,0,-0.608761,-0.25193,0,1.244127, + -0.866025,0,-0.5,-0.30855,0,1.317916, + -0.793353,0,-0.608761,-0.25193,0,1.244127, + -0.866025,0,-0.5,-0.30855,0.214602,1.317916, + -0.793353,0,-0.608761,-0.25193,0.214602,1.244127, + 0.965926,0,0.258819,0.344143,0,1.58827, + 0.866025,0,0.5,0.30855,0.214602,1.674199, + 0.866025,0,0.5,0.30855,0,1.674199, + 0.866025,0,0.5,0.30855,0.214602,1.674199, + 0.965926,0,0.258819,0.344143,0,1.58827, + 0.965926,0,0.258819,0.344143,0.214602,1.58827, + 0.258819,0,0.965926,0.092213,0,1.8402, + 0.5,0,0.866025,0.178141,0.214602,1.804607, + 0.258819,0,0.965926,0.092213,0.214602,1.8402, + 0.5,0,0.866025,0.178141,0.214602,1.804607, + 0.258819,0,0.965926,0.092213,0,1.8402, + 0.5,0,0.866025,0.178141,0,1.804607, + -0.737428,0,0.675426,-0.25193,0.214602,1.747987, + -0.866025,0,0.5,-0.30855,0,1.674199, + -0.675426,0,0.737428,-0.25193,0,1.747987, + -0.866025,0,0.5,-0.30855,0,1.674199, + -0.737428,0,0.675426,-0.25193,0.214602,1.747987, + -0.866025,0,0.5,-0.30855,0.214602,1.674199, + -0.258819,0,0.965926,-0.092213,0,1.8402, + 0,0,1,0,0.214602,1.85234, + -0.258819,0,0.965926,-0.092213,0.214602,1.8402, + 0,0,1,0,0.214602,1.85234, + -0.258819,0,0.965926,-0.092213,0,1.8402, + 0,0,1,0,0,1.85234, + -0.965926,0,0.258819,-0.344143,0.214602,1.58827, + -0.999038,0,0.043842,-0.356283,0,1.496057, + -0.965926,0,0.258819,-0.344143,0,1.58827, + -0.999038,0,0.043842,-0.356283,0,1.496057, + -0.965926,0,0.258819,-0.344143,0.214602,1.58827, + -0.999038,0,-0.043842,-0.356283,0.214602,1.496057, + 0,1,0,-0.30855,0.214602,1.317916, + 0,1,0,0,0.214602,1.496057, + 0,1,0,-0.25193,0.214602,1.244127, + 0,1,0,0,0.214602,1.496057, + 0,1,0,-0.30855,0.214602,1.317916, + 0,1,0,-0.344143,0.214602,1.403844, + 0,1,0,0,0.214602,1.496057, + 0,1,0,-0.344143,0.214602,1.403844, + 0,1,0,-0.356283,0.214602,1.496057, + 0,0.081483,0.996675,0,0.214602,1.496057, + 0,0.162423,0.986721,-0.356283,0.214602,1.496057, + 0,0.023241,0.99973,0.356283,0.214602,1.496057, + 0,1,0,0.356283,0.214602,1.496057, + 0,1,0,-0.356283,0.214602,1.496057, + 0,1,0,0.344143,0.214602,1.58827, + 0,1,0,0.344143,0.214602,1.58827, + 0,1,0,-0.356283,0.214602,1.496057, + 0,1,0,-0.344143,0.214602,1.58827, + 0,1,0,0.344143,0.214602,1.58827, + 0,1,0,-0.344143,0.214602,1.58827, + 0,1,0,-0.30855,0.214602,1.674199, + 0,1,0,0.344143,0.214602,1.58827, + 0,1,0,-0.30855,0.214602,1.674199, + 0,1,0,0.30855,0.214602,1.674199, + 0,1,0,0.30855,0.214602,1.674199, + 0,1,0,-0.30855,0.214602,1.674199, + 0,1,0,-0.25193,0.214602,1.747987, + 0,1,0,0.30855,0.214602,1.674199, + 0,1,0,-0.25193,0.214602,1.747987, + 0,1,0,0.25193,0.214602,1.747987, + 0,1,0,0.25193,0.214602,1.747987, + 0,1,0,-0.25193,0.214602,1.747987, + 0,1,0,-0.178141,0.214602,1.804607, + 0,1,0,0.25193,0.214602,1.747987, + 0,1,0,-0.178141,0.214602,1.804607, + 0,1,0,0.178141,0.214602,1.804607, + 0,1,0,0.178141,0.214602,1.804607, + 0,1,0,-0.178141,0.214602,1.804607, + 0,1,0,-0.092213,0.214602,1.8402, + 0,1,0,0.178141,0.214602,1.804607, + 0,1,0,-0.092213,0.214602,1.8402, + 0,1,0,0.092213,0.214602,1.8402, + 0,1,0,0.092213,0.214602,1.8402, + 0,1,0,-0.092213,0.214602,1.8402, + 0,1,0,0,0.214602,1.85234, + -0.707107,0,0.707107,-0.25193,0,1.244127, + -0.707107,0,0.707107,-0.391599,0.104929,1.104458, + -0.707107,0,0.707107,-0.40435,0,1.091707, + -0.707107,0,0.707107,-0.391599,0.104929,1.104458, + -0.707107,0,0.707107,-0.25193,0,1.244127, + -0.707107,0,0.707107,-0.353826,0.204282,1.142231, + -0.707107,0,0.707107,-0.353826,0.204282,1.142231, + -0.707107,0,0.707107,-0.25193,0,1.244127, + -0.707107,0,0.707107,-0.292513,0.292513,1.203544, + -0.707107,0,0.707107,-0.292513,0.292513,1.203544, + -0.707107,0,0.707107,-0.25193,0,1.244127, + -0.707107,0,0.707107,-0.25193,0.214602,1.244127, + -0.707107,0,0.707107,-0.25193,0.214602,1.244127, + -0.707107,0,0.707107,-0.210267,0.364193,1.28579, + -0.707107,0,0.707107,-0.292513,0.292513,1.203544, + -0.707107,0,0.707107,-0.210267,0.364193,1.28579, + -0.707107,0,0.707107,-0.25193,0.214602,1.244127, + -0.707107,0,0.707107,0,0.214602,1.496057, + -0.707107,0,0.707107,-0.210267,0.364193,1.28579, + -0.707107,0,0.707107,0,0.214602,1.496057, + -0.707107,0,0.707107,-0.110985,0.414201,1.385072, + -0.707107,0,0.707107,-0.110985,0.414201,1.385072, + -0.707107,0,0.707107,0,0.214602,1.496057, + -0.707107,0,0.707107,0,0.438068,1.496057, + 0,0.023241,0.99973,0.356283,0.214602,1.496057, + 0,0,1,0,0.438068,1.496057, + 0,0.081483,0.996675,0,0.214602,1.496057, + 0,0,1,0,0.438068,1.496057, + 0,0.023241,0.99973,0.356283,0.214602,1.496057, + 0,0,1,0.11338,0.423141,1.496057, + 0,0,1,0.11338,0.423141,1.496057, + 0,0.023241,0.99973,0.356283,0.214602,1.496057, + 0,0,1,0.219034,0.379378,1.496057, + 0,0,1,0.219034,0.379378,1.496057, + 0,0.023241,0.99973,0.356283,0.214602,1.496057, + 0,0,1,0.309761,0.309761,1.496057, + 0,0,1,0.309761,0.309761,1.496057, + 0,0.023241,0.99973,0.356283,0.214602,1.496057, + 0,0,1,0.379378,0.219034,1.496057, + 0,0,1,0.379378,0.219034,1.496057, + 0,0.023241,0.99973,0.356283,0.214602,1.496057, + 0,0,1,0.356283,0,1.496057, + 0,0,1,0.379378,0.219034,1.496057, + 0,0,1,0.356283,0,1.496057, + 0,0,1,0.438068,0,1.496057, + 0,0,1,0.379378,0.219034,1.496057, + 0,0,1,0.438068,0,1.496057, + 0,0,1,0.423141,0.11338,1.496057, + 0.041601,0.996196,-0.076566,0,0.438068,1.496057, + 0.258748,0.96566,-0.023446,0.099412,0.37101,0.793862, + -0.001082,0.999993,0.003472,0,0.384098,0.793862, + 0.258748,0.96566,-0.023446,0.099412,0.37101,0.793862, + 0.041601,0.996196,-0.076566,0,0.438068,1.496057, + 0.258058,0.963085,-0.076633,0.11338,0.423141,1.496057, + 0.258748,0.96566,-0.023446,0.099412,0.37101,0.793862, + 0.49853,0.863479,-0.076633,0.219034,0.379378,1.496057, + 0.499776,0.865637,0.029959,0.192049,0.332638,0.793862, + 0.49853,0.863479,-0.076633,0.219034,0.379378,1.496057, + 0.258748,0.96566,-0.023446,0.099412,0.37101,0.793862, + 0.258058,0.963085,-0.076633,0.11338,0.423141,1.496057, + 0.49853,0.863479,-0.076633,0.219034,0.379378,1.496057, + 0.72025,0.693666,-0.008188,0.271598,0.271598,0.793862, + 0.499776,0.865637,0.029959,0.192049,0.332638,0.793862, + 0.72025,0.693666,-0.008188,0.271598,0.271598,0.793862, + 0.49853,0.863479,-0.076633,0.219034,0.379378,1.496057, + 0.705027,0.705027,-0.076633,0.309761,0.309761,1.496057, + 0.72025,0.693666,-0.008188,0.271598,0.271598,0.793862, + 0.840797,0.53591,-0.07656,0.379378,0.219034,1.496057, + 0.887109,0.461549,0.003255,0.332638,0.192049,0.793862, + 0.840797,0.53591,-0.07656,0.379378,0.219034,1.496057, + 0.72025,0.693666,-0.008188,0.271598,0.271598,0.793862, + 0.705027,0.705027,-0.076633,0.309761,0.309761,1.496057, + 0.976339,0.216221,0.003255,0.37101,0.099412,0.793862, + 0.988579,0.130149,-0.075981,0.438068,0,1.496057, + 0.99144,0.130526,0.00323,0.384098,0,0.793862, + 0.988579,0.130149,-0.075981,0.438068,0,1.496057, + 0.976339,0.216221,0.003255,0.37101,0.099412,0.793862, + 0.950851,0.300035,-0.07656,0.423141,0.11338,1.496057, + 0.887109,0.461549,0.003255,0.332638,0.192049,0.793862, + 0.950851,0.300035,-0.07656,0.423141,0.11338,1.496057, + 0.976339,0.216221,0.003255,0.37101,0.099412,0.793862, + 0.950851,0.300035,-0.07656,0.423141,0.11338,1.496057, + 0.887109,0.461549,0.003255,0.332638,0.192049,0.793862, + 0.840797,0.53591,-0.07656,0.379378,0.219034,1.496057, + -0.887453,0.460848,0.006822,-0.332638,0.192049,0.793862, + -0.9659,0.258812,0.007352,-0.37101,0.099412,0.793862, + -0.964063,0.256638,-0.068694,-0.391599,0.104929,1.104458, + -0.843132,0.53305,-0.070611,-0.353826,0.204282,1.142231, + -0.887453,0.460848,0.006822,-0.332638,0.192049,0.793862, + -0.964063,0.256638,-0.068694,-0.391599,0.104929,1.104458, + -0.676924,0.732471,-0.072528,-0.292513,0.292513,1.203544, + -0.538474,0.842627,0.004963,-0.192049,0.332638,0.793862, + -0.738136,0.674626,0.005907,-0.271598,0.271598,0.793862, + -0.464387,0.882512,-0.074281,-0.210267,0.364193,1.28579, + -0.538474,0.842627,0.004963,-0.192049,0.332638,0.793862, + -0.676924,0.732471,-0.072528,-0.292513,0.292513,1.203544, + -0.219928,0.972573,-0.075722,-0.110985,0.414201,1.385072, + -0.001082,0.999993,0.003472,0,0.384098,0.793862, + -0.277867,0.960495,0.015458,-0.099412,0.37101,0.793862, + 0.041601,0.996196,-0.076566,0,0.438068,1.496057, + -0.001082,0.999993,0.003472,0,0.384098,0.793862, + -0.219928,0.972573,-0.075722,-0.110985,0.414201,1.385072, + -0.738136,0.674626,0.005907,-0.271598,0.271598,0.793862, + -0.887453,0.460848,0.006822,-0.332638,0.192049,0.793862, + -0.843132,0.53305,-0.070611,-0.353826,0.204282,1.142231, + -0.676924,0.732471,-0.072528,-0.292513,0.292513,1.203544, + -0.738136,0.674626,0.005907,-0.271598,0.271598,0.793862, + -0.843132,0.53305,-0.070611,-0.353826,0.204282,1.142231, + -0.964063,0.256638,-0.068694,-0.391599,0.104929,1.104458, + -0.991477,0.130067,0.007441,-0.384098,0,0.793862, + -0.989436,0.128411,-0.067277,-0.40435,0,1.091707, + -0.964063,0.256638,-0.068694,-0.391599,0.104929,1.104458, + -0.9659,0.258812,0.007352,-0.37101,0.099412,0.793862, + -0.991477,0.130067,0.007441,-0.384098,0,0.793862, + -0.464387,0.882512,-0.074281,-0.210267,0.364193,1.28579, + -0.277867,0.960495,0.015458,-0.099412,0.37101,0.793862, + -0.538474,0.842627,0.004963,-0.192049,0.332638,0.793862, + -0.219928,0.972573,-0.075722,-0.110985,0.414201,1.385072, + -0.277867,0.960495,0.015458,-0.099412,0.37101,0.793862, + -0.464387,0.882512,-0.074281,-0.210267,0.364193,1.28579, + -0.738136,0.674626,0.005907,-0.271598,0.271598,0.793862, + -0.840359,0.535631,0.083047,-0.389987,0.225159,0, + -0.887453,0.460848,0.006822,-0.332638,0.192049,0.793862, + -0.840359,0.535631,0.083047,-0.389987,0.225159,0, + -0.738136,0.674626,0.005907,-0.271598,0.271598,0.793862, + -0.673093,0.73488,0.083047,-0.318423,0.318423,0, + -0.001082,0.999993,0.003472,0,0.384098,0.793862, + 0.257923,0.962583,0.083127,0.116551,0.434974,0, + -0.043691,0.995587,0.083047,0,0.450318,0, + 0.257923,0.962583,0.083127,0.116551,0.434974,0, + -0.001082,0.999993,0.003472,0,0.384098,0.793862, + 0.258748,0.96566,-0.023446,0.099412,0.37101,0.793862, + 0.499776,0.865637,0.029959,0.192049,0.332638,0.793862, + 0.673093,0.73488,0.083047,0.318423,0.318423,0, + 0.498269,0.863028,0.083127,0.225159,0.389987,0, + 0.673093,0.73488,0.083047,0.318423,0.318423,0, + 0.499776,0.865637,0.029959,0.192049,0.332638,0.793862, + 0.72025,0.693666,-0.008188,0.271598,0.271598,0.793862, + -0.887453,0.460848,0.006822,-0.332638,0.192049,0.793862, + -0.962583,0.257923,0.083127,-0.434974,0.116551,0, + -0.9659,0.258812,0.007352,-0.37101,0.099412,0.793862, + -0.962583,0.257923,0.083127,-0.434974,0.116551,0, + -0.887453,0.460848,0.006822,-0.332638,0.192049,0.793862, + -0.840359,0.535631,0.083047,-0.389987,0.225159,0, + 0.988072,0.130082,0.08242,0.450318,0,0, + 0.976339,0.216221,0.003255,0.37101,0.099412,0.793862, + 0.99144,0.130526,0.00323,0.384098,0,0.793862, + 0.976339,0.216221,0.003255,0.37101,0.099412,0.793862, + 0.988072,0.130082,0.08242,0.450318,0,0, + 0.950356,0.299879,0.083047,0.434974,0.116551,0, + -0.277867,0.960495,0.015458,-0.099412,0.37101,0.793862, + -0.043691,0.995587,0.083047,0,0.450318,0, + -0.257923,0.962583,0.083127,-0.116551,0.434974,0, + -0.043691,0.995587,0.083047,0,0.450318,0, + -0.277867,0.960495,0.015458,-0.099412,0.37101,0.793862, + -0.001082,0.999993,0.003472,0,0.384098,0.793862, + -0.459957,0.884049,0.083047,-0.225159,0.389987,0, + -0.277867,0.960495,0.015458,-0.099412,0.37101,0.793862, + -0.257923,0.962583,0.083127,-0.116551,0.434974,0, + -0.277867,0.960495,0.015458,-0.099412,0.37101,0.793862, + -0.459957,0.884049,0.083047,-0.225159,0.389987,0, + -0.538474,0.842627,0.004963,-0.192049,0.332638,0.793862, + 0.257923,0.962583,0.083127,0.116551,0.434974,0, + 0.499776,0.865637,0.029959,0.192049,0.332638,0.793862, + 0.498269,0.863028,0.083127,0.225159,0.389987,0, + 0.499776,0.865637,0.029959,0.192049,0.332638,0.793862, + 0.257923,0.962583,0.083127,0.116551,0.434974,0, + 0.258748,0.96566,-0.023446,0.099412,0.37101,0.793862, + 0.950356,0.299879,0.083047,0.434974,0.116551,0, + 0.887109,0.461549,0.003255,0.332638,0.192049,0.793862, + 0.976339,0.216221,0.003255,0.37101,0.099412,0.793862, + 0.887109,0.461549,0.003255,0.332638,0.192049,0.793862, + 0.950356,0.299879,0.083047,0.434974,0.116551,0, + 0.840359,0.535631,0.083047,0.389987,0.225159,0, + -0.673093,0.73488,0.083047,-0.318423,0.318423,0, + -0.538474,0.842627,0.004963,-0.192049,0.332638,0.793862, + -0.459957,0.884049,0.083047,-0.225159,0.389987,0, + -0.538474,0.842627,0.004963,-0.192049,0.332638,0.793862, + -0.673093,0.73488,0.083047,-0.318423,0.318423,0, + -0.738136,0.674626,0.005907,-0.271598,0.271598,0.793862, + -0.991477,0.130067,0.007441,-0.384098,0,0.793862, + -0.962583,0.257923,0.083127,-0.434974,0.116551,0, + -0.988072,0.130082,0.08242,-0.450318,0,0, + -0.962583,0.257923,0.083127,-0.434974,0.116551,0, + -0.991477,0.130067,0.007441,-0.384098,0,0.793862, + -0.9659,0.258812,0.007352,-0.37101,0.099412,0.793862, + 0.840359,0.535631,0.083047,0.389987,0.225159,0, + 0.72025,0.693666,-0.008188,0.271598,0.271598,0.793862, + 0.887109,0.461549,0.003255,0.332638,0.192049,0.793862, + 0.72025,0.693666,-0.008188,0.271598,0.271598,0.793862, + 0.840359,0.535631,0.083047,0.389987,0.225159,0, + 0.673093,0.73488,0.083047,0.318423,0.318423,0, + 0.30062,0.039577,-0.952922,0.092213,0,-0.344143, + 0,0.084475,-0.996426,0,0,-0.356283, + 0.271764,0.083332,-0.958749,0.089071,0.023866,-0.344143, + 0.481561,0.134192,-0.866078,0.172071,0.046106,-0.30855, + 0.30062,0.039577,-0.952922,0.092213,0,-0.344143, + 0.271764,0.083332,-0.958749,0.089071,0.023866,-0.344143, + 0.30062,0.039577,-0.952922,0.092213,0,-0.344143, + 0.481561,0.134192,-0.866078,0.172071,0.046106,-0.30855, + 0.536052,0.070573,-0.84123,0.178141,0,-0.30855, + 0.668799,0.16246,-0.725476,0.243346,0.065204,-0.25193, + 0.536052,0.070573,-0.84123,0.178141,0,-0.30855, + 0.481561,0.134192,-0.866078,0.172071,0.046106,-0.30855, + 0.536052,0.070573,-0.84123,0.178141,0,-0.30855, + 0.668799,0.16246,-0.725476,0.243346,0.065204,-0.25193, + 0.73389,0.096619,-0.672361,0.25193,0,-0.25193, + 0.73389,0.096619,-0.672361,0.25193,0,-0.25193, + 0.831628,0.204716,-0.516223,0.298036,0.079859,-0.178141, + 0.860389,0.113272,-0.496891,0.30855,0,-0.178141, + 0.831628,0.204716,-0.516223,0.298036,0.079859,-0.178141, + 0.73389,0.096619,-0.672361,0.25193,0,-0.25193, + 0.668799,0.16246,-0.725476,0.243346,0.065204,-0.25193, + 0.831628,0.204716,-0.516223,0.298036,0.079859,-0.178141, + 0.958191,0.126148,-0.256821,0.344143,0,-0.092213, + 0.860389,0.113272,-0.496891,0.30855,0,-0.178141, + 0.958191,0.126148,-0.256821,0.344143,0,-0.092213, + 0.831628,0.204716,-0.516223,0.298036,0.079859,-0.178141, + 0.919462,0.271766,-0.284135,0.332416,0.089071,-0.092213, + 0.958191,0.126148,-0.256821,0.344143,0,-0.092213, + 0.957662,0.256605,-0.130526,0.344143,0.092213,0, + 0.983106,0.129428,-0.129428,0.356283,0,0, + 0.957662,0.256605,-0.130526,0.344143,0.092213,0, + 0.958191,0.126148,-0.256821,0.344143,0,-0.092213, + 0.919462,0.271766,-0.284135,0.332416,0.089071,-0.092213, + 0.271764,0.083332,-0.958749,0.089071,0.023866,-0.344143, + 0,0.084475,-0.996426,0,0,-0.356283, + 0.240936,0.15083,-0.958749,0.079859,0.046106,-0.344143, + 0.430421,0.254256,-0.866078,0.154275,0.089071,-0.30855, + 0.271764,0.083332,-0.958749,0.089071,0.023866,-0.344143, + 0.240936,0.15083,-0.958749,0.079859,0.046106,-0.344143, + 0.271764,0.083332,-0.958749,0.089071,0.023866,-0.344143, + 0.430421,0.254256,-0.866078,0.154275,0.089071,-0.30855, + 0.481561,0.134192,-0.866078,0.172071,0.046106,-0.30855, + 0.627494,0.326475,-0.70687,0.218178,0.125965,-0.25193, + 0.481561,0.134192,-0.866078,0.172071,0.046106,-0.30855, + 0.430421,0.254256,-0.866078,0.154275,0.089071,-0.30855, + 0.481561,0.134192,-0.866078,0.172071,0.046106,-0.30855, + 0.627494,0.326475,-0.70687,0.218178,0.125965,-0.25193, + 0.668799,0.16246,-0.725476,0.243346,0.065204,-0.25193, + 0.627494,0.326475,-0.70687,0.218178,0.125965,-0.25193, + 0.831628,0.204716,-0.516223,0.298036,0.079859,-0.178141, + 0.668799,0.16246,-0.725476,0.243346,0.065204,-0.25193, + 0.831628,0.204716,-0.516223,0.298036,0.079859,-0.178141, + 0.627494,0.326475,-0.70687,0.218178,0.125965,-0.25193, + 0.751368,0.430509,-0.500107,0.267212,0.154275,-0.178141, + 0.751368,0.430509,-0.500107,0.267212,0.154275,-0.178141, + 0.919462,0.271766,-0.284135,0.332416,0.089071,-0.092213, + 0.831628,0.204716,-0.516223,0.298036,0.079859,-0.178141, + 0.919462,0.271766,-0.284135,0.332416,0.089071,-0.092213, + 0.751368,0.430509,-0.500107,0.267212,0.154275,-0.178141, + 0.837235,0.481678,-0.258889,0.298036,0.172071,-0.092213, + 0.837235,0.481678,-0.258889,0.298036,0.172071,-0.092213, + 0.957662,0.256605,-0.130526,0.344143,0.092213,0, + 0.919462,0.271766,-0.284135,0.332416,0.089071,-0.092213, + 0.957662,0.256605,-0.130526,0.344143,0.092213,0, + 0.837235,0.481678,-0.258889,0.298036,0.172071,-0.092213, + 0.836071,0.532898,-0.130403,0.30855,0.178141,0, + 0.240936,0.15083,-0.958749,0.079859,0.046106,-0.344143, + 0,0.084475,-0.996426,0,0,-0.356283, + 0.193688,0.208049,-0.958749,0.065204,0.065204,-0.344143, + 0.349948,0.356994,-0.866078,0.125965,0.125965,-0.30855, + 0.240936,0.15083,-0.958749,0.079859,0.046106,-0.344143, + 0.193688,0.208049,-0.958749,0.065204,0.065204,-0.344143, + 0.240936,0.15083,-0.958749,0.079859,0.046106,-0.344143, + 0.349948,0.356994,-0.866078,0.125965,0.125965,-0.30855, + 0.430421,0.254256,-0.866078,0.154275,0.089071,-0.30855, + 0.521615,0.477758,-0.70687,0.178141,0.178141,-0.25193, + 0.430421,0.254256,-0.866078,0.154275,0.089071,-0.30855, + 0.349948,0.356994,-0.866078,0.125965,0.125965,-0.30855, + 0.430421,0.254256,-0.866078,0.154275,0.089071,-0.30855, + 0.521615,0.477758,-0.70687,0.178141,0.178141,-0.25193, + 0.627494,0.326475,-0.70687,0.218178,0.125965,-0.25193, + 0.521615,0.477758,-0.70687,0.178141,0.178141,-0.25193, + 0.751368,0.430509,-0.500107,0.267212,0.154275,-0.178141, + 0.627494,0.326475,-0.70687,0.218178,0.125965,-0.25193, + 0.751368,0.430509,-0.500107,0.267212,0.154275,-0.178141, + 0.521615,0.477758,-0.70687,0.178141,0.178141,-0.25193, + 0.60815,0.62945,-0.48368,0.218178,0.218178,-0.178141, + 0.60815,0.62945,-0.48368,0.218178,0.218178,-0.178141, + 0.837235,0.481678,-0.258889,0.298036,0.172071,-0.092213, + 0.751368,0.430509,-0.500107,0.267212,0.154275,-0.178141, + 0.837235,0.481678,-0.258889,0.298036,0.172071,-0.092213, + 0.60815,0.62945,-0.48368,0.218178,0.218178,-0.178141, + 0.69037,0.69037,-0.216285,0.243346,0.243346,-0.092213, + 0.69037,0.69037,-0.216285,0.243346,0.243346,-0.092213, + 0.836071,0.532898,-0.130403,0.30855,0.178141,0, + 0.837235,0.481678,-0.258889,0.298036,0.172071,-0.092213, + 0.836071,0.532898,-0.130403,0.30855,0.178141,0, + 0.69037,0.69037,-0.216285,0.243346,0.243346,-0.092213, + 0.701057,0.701057,-0.130526,0.25193,0.25193,0, + 0.193688,0.208049,-0.958749,0.065204,0.065204,-0.344143, + 0,0.084475,-0.996426,0,0,-0.356283, + 0.133242,0.25109,-0.958749,0.046106,0.079859,-0.344143, + 0.245627,0.435403,-0.866078,0.089071,0.154275,-0.30855, + 0.193688,0.208049,-0.958749,0.065204,0.065204,-0.344143, + 0.133242,0.25109,-0.958749,0.046106,0.079859,-0.344143, + 0.193688,0.208049,-0.958749,0.065204,0.065204,-0.344143, + 0.245627,0.435403,-0.866078,0.089071,0.154275,-0.30855, + 0.349948,0.356994,-0.866078,0.125965,0.125965,-0.30855, + 0.370077,0.617872,-0.693742,0.125965,0.218178,-0.25193, + 0.349948,0.356994,-0.866078,0.125965,0.125965,-0.30855, + 0.245627,0.435403,-0.866078,0.089071,0.154275,-0.30855, + 0.349948,0.356994,-0.866078,0.125965,0.125965,-0.30855, + 0.370077,0.617872,-0.693742,0.125965,0.218178,-0.25193, + 0.521615,0.477758,-0.70687,0.178141,0.178141,-0.25193, + 0.370077,0.617872,-0.693742,0.125965,0.218178,-0.25193, + 0.60815,0.62945,-0.48368,0.218178,0.218178,-0.178141, + 0.521615,0.477758,-0.70687,0.178141,0.178141,-0.25193, + 0.60815,0.62945,-0.48368,0.218178,0.218178,-0.178141, + 0.370077,0.617872,-0.693742,0.125965,0.218178,-0.25193, + 0.418063,0.77311,-0.476995,0.154275,0.267212,-0.178141, + 0.481678,0.837235,-0.258889,0.172071,0.298036,-0.092213, + 0.60815,0.62945,-0.48368,0.218178,0.218178,-0.178141, + 0.418063,0.77311,-0.476995,0.154275,0.267212,-0.178141, + 0.60815,0.62945,-0.48368,0.218178,0.218178,-0.178141, + 0.481678,0.837235,-0.258889,0.172071,0.298036,-0.092213, + 0.69037,0.69037,-0.216285,0.243346,0.243346,-0.092213, + 0.532898,0.836071,-0.130403,0.178141,0.30855,0, + 0.69037,0.69037,-0.216285,0.243346,0.243346,-0.092213, + 0.481678,0.837235,-0.258889,0.172071,0.298036,-0.092213, + 0.69037,0.69037,-0.216285,0.243346,0.243346,-0.092213, + 0.532898,0.836071,-0.130403,0.178141,0.30855,0, + 0.701057,0.701057,-0.130526,0.25193,0.25193,0, + 0.133242,0.25109,-0.958749,0.046106,0.079859,-0.344143, + 0,0.084475,-0.996426,0,0,-0.356283, + 0.063714,0.27702,-0.958749,0.023866,0.089071,-0.344143, + 0.133251,0.458018,-0.878899,0.046106,0.172071,-0.30855, + 0.133242,0.25109,-0.958749,0.046106,0.079859,-0.344143, + 0.063714,0.27702,-0.958749,0.023866,0.089071,-0.344143, + 0.133242,0.25109,-0.958749,0.046106,0.079859,-0.344143, + 0.133251,0.458018,-0.878899,0.046106,0.172071,-0.30855, + 0.245627,0.435403,-0.866078,0.089071,0.154275,-0.30855, + 0.174788,0.652319,-0.737516,0.065204,0.243346,-0.25193, + 0.245627,0.435403,-0.866078,0.089071,0.154275,-0.30855, + 0.133251,0.458018,-0.878899,0.046106,0.172071,-0.30855, + 0.245627,0.435403,-0.866078,0.089071,0.154275,-0.30855, + 0.174788,0.652319,-0.737516,0.065204,0.243346,-0.25193, + 0.370077,0.617872,-0.693742,0.125965,0.218178,-0.25193, + 0.204716,0.831628,-0.516223,0.079859,0.298036,-0.178141, + 0.370077,0.617872,-0.693742,0.125965,0.218178,-0.25193, + 0.174788,0.652319,-0.737516,0.065204,0.243346,-0.25193, + 0.370077,0.617872,-0.693742,0.125965,0.218178,-0.25193, + 0.204716,0.831628,-0.516223,0.079859,0.298036,-0.178141, + 0.418063,0.77311,-0.476995,0.154275,0.267212,-0.178141, + 0.271766,0.919462,-0.284135,0.089071,0.332416,-0.092213, + 0.418063,0.77311,-0.476995,0.154275,0.267212,-0.178141, + 0.204716,0.831628,-0.516223,0.079859,0.298036,-0.178141, + 0.418063,0.77311,-0.476995,0.154275,0.267212,-0.178141, + 0.271766,0.919462,-0.284135,0.089071,0.332416,-0.092213, + 0.481678,0.837235,-0.258889,0.172071,0.298036,-0.092213, + 0.256605,0.957662,-0.130526,0.092213,0.344143,0, + 0.481678,0.837235,-0.258889,0.172071,0.298036,-0.092213, + 0.271766,0.919462,-0.284135,0.089071,0.332416,-0.092213, + 0.481678,0.837235,-0.258889,0.172071,0.298036,-0.092213, + 0.256605,0.957662,-0.130526,0.092213,0.344143,0, + 0.532898,0.836071,-0.130403,0.178141,0.30855,0, + 0.063714,0.27702,-0.958749,0.023866,0.089071,-0.344143, + 0,0.084475,-0.996426,0,0,-0.356283, + 0,0.258748,-0.965945,0,0.092213,-0.344143, + 0.011532,0.483485,-0.875276,0,0.178141,-0.30855, + 0.063714,0.27702,-0.958749,0.023866,0.089071,-0.344143, + 0,0.258748,-0.965945,0,0.092213,-0.344143, + 0.063714,0.27702,-0.958749,0.023866,0.089071,-0.344143, + 0.011532,0.483485,-0.875276,0,0.178141,-0.30855, + 0.133251,0.458018,-0.878899,0.046106,0.172071,-0.30855, + 0.174788,0.652319,-0.737516,0.065204,0.243346,-0.25193, + 0.011532,0.483485,-0.875276,0,0.178141,-0.30855, + 0.004051,0.706997,-0.707204,0,0.25193,-0.25193, + 0.011532,0.483485,-0.875276,0,0.178141,-0.30855, + 0.174788,0.652319,-0.737516,0.065204,0.243346,-0.25193, + 0.133251,0.458018,-0.878899,0.046106,0.172071,-0.30855, + 0.004051,0.706997,-0.707204,0,0.25193,-0.25193, + 0.204716,0.831628,-0.516223,0.079859,0.298036,-0.178141, + 0.174788,0.652319,-0.737516,0.065204,0.243346,-0.25193, + 0.204716,0.831628,-0.516223,0.079859,0.298036,-0.178141, + 0.004051,0.706997,-0.707204,0,0.25193,-0.25193, + -0.037975,0.865338,-0.499749,0,0.30855,-0.178141, + 0.04235,0.96504,-0.258657,0,0.344143,-0.092213, + 0.204716,0.831628,-0.516223,0.079859,0.298036,-0.178141, + -0.037975,0.865338,-0.499749,0,0.30855,-0.178141, + 0.204716,0.831628,-0.516223,0.079859,0.298036,-0.178141, + 0.04235,0.96504,-0.258657,0,0.344143,-0.092213, + 0.271766,0.919462,-0.284135,0.089071,0.332416,-0.092213, + 0.04235,0.96504,-0.258657,0,0.344143,-0.092213, + 0.256605,0.957662,-0.130526,0.092213,0.344143,0, + 0.271766,0.919462,-0.284135,0.089071,0.332416,-0.092213, + 0.256605,0.957662,-0.130526,0.092213,0.344143,0, + 0.04235,0.96504,-0.258657,0,0.344143,-0.092213, + -0.043468,0.990508,-0.130403,0,0.356283,0, + 0,0.084475,-0.996426,0,0,-0.356283, + -0.063714,0.27702,-0.958749,-0.023866,0.089071,-0.344143, + 0,0.258748,-0.965945,0,0.092213,-0.344143, + 0.011532,0.483485,-0.875276,0,0.178141,-0.30855, + -0.063714,0.27702,-0.958749,-0.023866,0.089071,-0.344143, + -0.124567,0.48414,-0.866078,-0.046106,0.172071,-0.30855, + -0.063714,0.27702,-0.958749,-0.023866,0.089071,-0.344143, + 0.011532,0.483485,-0.875276,0,0.178141,-0.30855, + 0,0.258748,-0.965945,0,0.092213,-0.344143, + 0.004051,0.706997,-0.707204,0,0.25193,-0.25193, + -0.124567,0.48414,-0.866078,-0.046106,0.172071,-0.30855, + -0.19755,0.692601,-0.693742,-0.065204,0.243346,-0.25193, + -0.124567,0.48414,-0.866078,-0.046106,0.172071,-0.30855, + 0.004051,0.706997,-0.707204,0,0.25193,-0.25193, + 0.011532,0.483485,-0.875276,0,0.178141,-0.30855, + -0.19755,0.692601,-0.693742,-0.065204,0.243346,-0.25193, + -0.037975,0.865338,-0.499749,0,0.30855,-0.178141, + 0.004051,0.706997,-0.707204,0,0.25193,-0.25193, + -0.037975,0.865338,-0.499749,0,0.30855,-0.178141, + -0.19755,0.692601,-0.693742,-0.065204,0.243346,-0.25193, + -0.224128,0.836455,-0.500109,-0.079859,0.298036,-0.178141, + -0.249995,0.932995,-0.258889,-0.089071,0.332416,-0.092213, + -0.037975,0.865338,-0.499749,0,0.30855,-0.178141, + -0.224128,0.836455,-0.500109,-0.079859,0.298036,-0.178141, + -0.037975,0.865338,-0.499749,0,0.30855,-0.178141, + -0.249995,0.932995,-0.258889,-0.089071,0.332416,-0.092213, + 0.04235,0.96504,-0.258657,0,0.344143,-0.092213, + -0.249995,0.932995,-0.258889,-0.089071,0.332416,-0.092213, + -0.043468,0.990508,-0.130403,0,0.356283,0, + 0.04235,0.96504,-0.258657,0,0.344143,-0.092213, + -0.043468,0.990508,-0.130403,0,0.356283,0, + -0.249995,0.932995,-0.258889,-0.089071,0.332416,-0.092213, + -0.256605,0.957662,-0.130526,-0.092213,0.344143,0, + 0,0.084475,-0.996426,0,0,-0.356283, + -0.133242,0.25109,-0.958749,-0.046106,0.079859,-0.344143, + -0.063714,0.27702,-0.958749,-0.023866,0.089071,-0.344143, + -0.124567,0.48414,-0.866078,-0.046106,0.172071,-0.30855, + -0.133242,0.25109,-0.958749,-0.046106,0.079859,-0.344143, + -0.245627,0.435403,-0.866078,-0.089071,0.154275,-0.30855, + -0.133242,0.25109,-0.958749,-0.046106,0.079859,-0.344143, + -0.124567,0.48414,-0.866078,-0.046106,0.172071,-0.30855, + -0.063714,0.27702,-0.958749,-0.023866,0.089071,-0.344143, + -0.19755,0.692601,-0.693742,-0.065204,0.243346,-0.25193, + -0.245627,0.435403,-0.866078,-0.089071,0.154275,-0.30855, + -0.380188,0.596483,-0.70687,-0.125965,0.218178,-0.25193, + -0.245627,0.435403,-0.866078,-0.089071,0.154275,-0.30855, + -0.19755,0.692601,-0.693742,-0.065204,0.243346,-0.25193, + -0.124567,0.48414,-0.866078,-0.046106,0.172071,-0.30855, + -0.424514,0.765403,-0.48368,-0.154275,0.267212,-0.178141, + -0.19755,0.692601,-0.693742,-0.065204,0.243346,-0.25193, + -0.380188,0.596483,-0.70687,-0.125965,0.218178,-0.25193, + -0.19755,0.692601,-0.693742,-0.065204,0.243346,-0.25193, + -0.424514,0.765403,-0.48368,-0.154275,0.267212,-0.178141, + -0.224128,0.836455,-0.500109,-0.079859,0.298036,-0.178141, + -0.424514,0.765403,-0.48368,-0.154275,0.267212,-0.178141, + -0.249995,0.932995,-0.258889,-0.089071,0.332416,-0.092213, + -0.224128,0.836455,-0.500109,-0.079859,0.298036,-0.178141, + -0.249995,0.932995,-0.258889,-0.089071,0.332416,-0.092213, + -0.424514,0.765403,-0.48368,-0.154275,0.267212,-0.178141, + -0.482954,0.8365,-0.258889,-0.172071,0.298036,-0.092213, + -0.495722,0.858616,-0.130526,-0.178141,0.30855,0, + -0.249995,0.932995,-0.258889,-0.089071,0.332416,-0.092213, + -0.482954,0.8365,-0.258889,-0.172071,0.298036,-0.092213, + -0.249995,0.932995,-0.258889,-0.089071,0.332416,-0.092213, + -0.495722,0.858616,-0.130526,-0.178141,0.30855,0, + -0.256605,0.957662,-0.130526,-0.092213,0.344143,0, + 0,0.084475,-0.996426,0,0,-0.356283, + -0.193688,0.208049,-0.958749,-0.065204,0.065204,-0.344143, + -0.133242,0.25109,-0.958749,-0.046106,0.079859,-0.344143, + -0.245627,0.435403,-0.866078,-0.089071,0.154275,-0.30855, + -0.193688,0.208049,-0.958749,-0.065204,0.065204,-0.344143, + -0.349948,0.356994,-0.866078,-0.125965,0.125965,-0.30855, + -0.193688,0.208049,-0.958749,-0.065204,0.065204,-0.344143, + -0.245627,0.435403,-0.866078,-0.089071,0.154275,-0.30855, + -0.133242,0.25109,-0.958749,-0.046106,0.079859,-0.344143, + -0.380188,0.596483,-0.70687,-0.125965,0.218178,-0.25193, + -0.349948,0.356994,-0.866078,-0.125965,0.125965,-0.30855, + -0.521615,0.477758,-0.70687,-0.178141,0.178141,-0.25193, + -0.349948,0.356994,-0.866078,-0.125965,0.125965,-0.30855, + -0.380188,0.596483,-0.70687,-0.125965,0.218178,-0.25193, + -0.245627,0.435403,-0.866078,-0.089071,0.154275,-0.30855, + -0.614342,0.610308,-0.500107,-0.218178,0.218178,-0.178141, + -0.380188,0.596483,-0.70687,-0.125965,0.218178,-0.25193, + -0.521615,0.477758,-0.70687,-0.178141,0.178141,-0.25193, + -0.380188,0.596483,-0.70687,-0.125965,0.218178,-0.25193, + -0.614342,0.610308,-0.500107,-0.218178,0.218178,-0.178141, + -0.424514,0.765403,-0.48368,-0.154275,0.267212,-0.178141, + -0.673819,0.698612,-0.240642,-0.243346,0.243346,-0.092213, + -0.424514,0.765403,-0.48368,-0.154275,0.267212,-0.178141, + -0.614342,0.610308,-0.500107,-0.218178,0.218178,-0.178141, + -0.424514,0.765403,-0.48368,-0.154275,0.267212,-0.178141, + -0.673819,0.698612,-0.240642,-0.243346,0.243346,-0.092213, + -0.482954,0.8365,-0.258889,-0.172071,0.298036,-0.092213, + -0.673819,0.698612,-0.240642,-0.243346,0.243346,-0.092213, + -0.495722,0.858616,-0.130526,-0.178141,0.30855,0, + -0.482954,0.8365,-0.258889,-0.172071,0.298036,-0.092213, + -0.495722,0.858616,-0.130526,-0.178141,0.30855,0, + -0.673819,0.698612,-0.240642,-0.243346,0.243346,-0.092213, + -0.701057,0.701057,-0.130526,-0.25193,0.25193,0, + 0,0.084475,-0.996426,0,0,-0.356283, + -0.240936,0.15083,-0.958749,-0.079859,0.046106,-0.344143, + -0.193688,0.208049,-0.958749,-0.065204,0.065204,-0.344143, + -0.349948,0.356994,-0.866078,-0.125965,0.125965,-0.30855, + -0.240936,0.15083,-0.958749,-0.079859,0.046106,-0.344143, + -0.430421,0.254256,-0.866078,-0.154275,0.089071,-0.30855, + -0.240936,0.15083,-0.958749,-0.079859,0.046106,-0.344143, + -0.349948,0.356994,-0.866078,-0.125965,0.125965,-0.30855, + -0.193688,0.208049,-0.958749,-0.065204,0.065204,-0.344143, + -0.521615,0.477758,-0.70687,-0.178141,0.178141,-0.25193, + -0.430421,0.254256,-0.866078,-0.154275,0.089071,-0.30855, + -0.627494,0.326475,-0.70687,-0.218178,0.125965,-0.25193, + -0.430421,0.254256,-0.866078,-0.154275,0.089071,-0.30855, + -0.521615,0.477758,-0.70687,-0.178141,0.178141,-0.25193, + -0.349948,0.356994,-0.866078,-0.125965,0.125965,-0.30855, + -0.751368,0.430509,-0.500107,-0.267212,0.154275,-0.178141, + -0.521615,0.477758,-0.70687,-0.178141,0.178141,-0.25193, + -0.627494,0.326475,-0.70687,-0.218178,0.125965,-0.25193, + -0.521615,0.477758,-0.70687,-0.178141,0.178141,-0.25193, + -0.751368,0.430509,-0.500107,-0.267212,0.154275,-0.178141, + -0.614342,0.610308,-0.500107,-0.218178,0.218178,-0.178141, + -0.837235,0.481678,-0.258889,-0.298036,0.172071,-0.092213, + -0.614342,0.610308,-0.500107,-0.218178,0.218178,-0.178141, + -0.751368,0.430509,-0.500107,-0.267212,0.154275,-0.178141, + -0.614342,0.610308,-0.500107,-0.218178,0.218178,-0.178141, + -0.837235,0.481678,-0.258889,-0.298036,0.172071,-0.092213, + -0.673819,0.698612,-0.240642,-0.243346,0.243346,-0.092213, + -0.836071,0.532898,-0.130403,-0.30855,0.178141,0, + -0.673819,0.698612,-0.240642,-0.243346,0.243346,-0.092213, + -0.837235,0.481678,-0.258889,-0.298036,0.172071,-0.092213, + -0.673819,0.698612,-0.240642,-0.243346,0.243346,-0.092213, + -0.836071,0.532898,-0.130403,-0.30855,0.178141,0, + -0.701057,0.701057,-0.130526,-0.25193,0.25193,0, + 0,0.084475,-0.996426,0,0,-0.356283, + -0.271764,0.083332,-0.958749,-0.089071,0.023866,-0.344143, + -0.240936,0.15083,-0.958749,-0.079859,0.046106,-0.344143, + -0.430421,0.254256,-0.866078,-0.154275,0.089071,-0.30855, + -0.271764,0.083332,-0.958749,-0.089071,0.023866,-0.344143, + -0.481561,0.134192,-0.866078,-0.172071,0.046106,-0.30855, + -0.271764,0.083332,-0.958749,-0.089071,0.023866,-0.344143, + -0.430421,0.254256,-0.866078,-0.154275,0.089071,-0.30855, + -0.240936,0.15083,-0.958749,-0.079859,0.046106,-0.344143, + -0.627494,0.326475,-0.70687,-0.218178,0.125965,-0.25193, + -0.481561,0.134192,-0.866078,-0.172071,0.046106,-0.30855, + -0.668799,0.16246,-0.725476,-0.243346,0.065204,-0.25193, + -0.481561,0.134192,-0.866078,-0.172071,0.046106,-0.30855, + -0.627494,0.326475,-0.70687,-0.218178,0.125965,-0.25193, + -0.430421,0.254256,-0.866078,-0.154275,0.089071,-0.30855, + -0.831628,0.204716,-0.516223,-0.298036,0.079859,-0.178141, + -0.627494,0.326475,-0.70687,-0.218178,0.125965,-0.25193, + -0.668799,0.16246,-0.725476,-0.243346,0.065204,-0.25193, + -0.627494,0.326475,-0.70687,-0.218178,0.125965,-0.25193, + -0.831628,0.204716,-0.516223,-0.298036,0.079859,-0.178141, + -0.751368,0.430509,-0.500107,-0.267212,0.154275,-0.178141, + -0.919462,0.271766,-0.284135,-0.332416,0.089071,-0.092213, + -0.751368,0.430509,-0.500107,-0.267212,0.154275,-0.178141, + -0.831628,0.204716,-0.516223,-0.298036,0.079859,-0.178141, + -0.751368,0.430509,-0.500107,-0.267212,0.154275,-0.178141, + -0.919462,0.271766,-0.284135,-0.332416,0.089071,-0.092213, + -0.837235,0.481678,-0.258889,-0.298036,0.172071,-0.092213, + -0.957662,0.256605,-0.130526,-0.344143,0.092213,0, + -0.837235,0.481678,-0.258889,-0.298036,0.172071,-0.092213, + -0.919462,0.271766,-0.284135,-0.332416,0.089071,-0.092213, + -0.837235,0.481678,-0.258889,-0.298036,0.172071,-0.092213, + -0.957662,0.256605,-0.130526,-0.344143,0.092213,0, + -0.836071,0.532898,-0.130403,-0.30855,0.178141,0, + 0,0.084475,-0.996426,0,0,-0.356283, + -0.30062,0.039577,-0.952922,-0.092213,0,-0.344143, + -0.271764,0.083332,-0.958749,-0.089071,0.023866,-0.344143, + -0.481561,0.134192,-0.866078,-0.172071,0.046106,-0.30855, + -0.30062,0.039577,-0.952922,-0.092213,0,-0.344143, + -0.536052,0.070573,-0.84123,-0.178141,0,-0.30855, + -0.30062,0.039577,-0.952922,-0.092213,0,-0.344143, + -0.481561,0.134192,-0.866078,-0.172071,0.046106,-0.30855, + -0.271764,0.083332,-0.958749,-0.089071,0.023866,-0.344143, + -0.668799,0.16246,-0.725476,-0.243346,0.065204,-0.25193, + -0.536052,0.070573,-0.84123,-0.178141,0,-0.30855, + -0.73389,0.096619,-0.672361,-0.25193,0,-0.25193, + -0.536052,0.070573,-0.84123,-0.178141,0,-0.30855, + -0.668799,0.16246,-0.725476,-0.243346,0.065204,-0.25193, + -0.481561,0.134192,-0.866078,-0.172071,0.046106,-0.30855, + -0.831628,0.204716,-0.516223,-0.298036,0.079859,-0.178141, + -0.73389,0.096619,-0.672361,-0.25193,0,-0.25193, + -0.860389,0.113272,-0.496891,-0.30855,0,-0.178141, + -0.73389,0.096619,-0.672361,-0.25193,0,-0.25193, + -0.831628,0.204716,-0.516223,-0.298036,0.079859,-0.178141, + -0.668799,0.16246,-0.725476,-0.243346,0.065204,-0.25193, + -0.958191,0.126148,-0.256821,-0.344143,0,-0.092213, + -0.831628,0.204716,-0.516223,-0.298036,0.079859,-0.178141, + -0.860389,0.113272,-0.496891,-0.30855,0,-0.178141, + -0.831628,0.204716,-0.516223,-0.298036,0.079859,-0.178141, + -0.958191,0.126148,-0.256821,-0.344143,0,-0.092213, + -0.919462,0.271766,-0.284135,-0.332416,0.089071,-0.092213, + -0.957662,0.256605,-0.130526,-0.344143,0.092213,0, + -0.958191,0.126148,-0.256821,-0.344143,0,-0.092213, + -0.983106,0.129428,-0.129428,-0.356283,0,0, + -0.958191,0.126148,-0.256821,-0.344143,0,-0.092213, + -0.957662,0.256605,-0.130526,-0.344143,0.092213,0, + -0.919462,0.271766,-0.284135,-0.332416,0.089071,-0.092213, + 0,0,-1,-0.434974,0.116551,0, + 0,0,-1,-0.356283,0,0, + 0,0,-1,-0.450318,0,0, + 0,0,-1,-0.356283,0,0, + 0,0,-1,-0.434974,0.116551,0, + 0,0,-1,-0.389987,0.225159,0, + 0,0,-1,-0.356283,0,0, + 0,0,-1,-0.389987,0.225159,0, + 0,0,-1,-0.318423,0.318423,0, + 0,0,-1,-0.356283,0,0, + 0,0,-1,-0.318423,0.318423,0, + 0,0,-1,-0.344143,0.092213,0, + 0,0,-1,-0.344143,0.092213,0, + 0,0,-1,-0.318423,0.318423,0, + 0,0,-1,-0.30855,0.178141,0, + 0,0,-1,-0.30855,0.178141,0, + 0,0,-1,-0.318423,0.318423,0, + 0,0,-1,-0.225159,0.389987,0, + 0,0,-1,-0.30855,0.178141,0, + 0,0,-1,-0.225159,0.389987,0, + 0,0,-1,-0.25193,0.25193,0, + 0,0,-1,-0.25193,0.25193,0, + 0,0,-1,-0.225159,0.389987,0, + 0,0,-1,-0.178141,0.30855,0, + 0,0,-1,-0.178141,0.30855,0, + 0,0,-1,-0.225159,0.389987,0, + 0,0,-1,-0.116551,0.434974,0, + 0,0,-1,-0.178141,0.30855,0, + 0,0,-1,-0.116551,0.434974,0, + 0,0,-1,-0.092213,0.344143,0, + 0,0,-1,-0.092213,0.344143,0, + 0,0,-1,-0.116551,0.434974,0, + 0,0,-1,0,0.450318,0, + 0,0,-1,-0.092213,0.344143,0, + 0,0,-1,0,0.450318,0, + 0,0,-1,0,0.356283,0, + 0,0,-1,0,0.356283,0, + 0,0,-1,0,0.450318,0, + 0,0,-1,0.116551,0.434974,0, + 0,0,-1,0,0.356283,0, + 0,0,-1,0.116551,0.434974,0, + 0,0,-1,0.092213,0.344143,0, + 0,0,-1,0.092213,0.344143,0, + 0,0,-1,0.116551,0.434974,0, + 0,0,-1,0.178141,0.30855,0, + 0,0,-1,0.178141,0.30855,0, + 0,0,-1,0.116551,0.434974,0, + 0,0,-1,0.225159,0.389987,0, + 0,0,-1,0.178141,0.30855,0, + 0,0,-1,0.225159,0.389987,0, + 0,0,-1,0.25193,0.25193,0, + 0,0,-1,0.25193,0.25193,0, + 0,0,-1,0.225159,0.389987,0, + 0,0,-1,0.318423,0.318423,0, + 0,0,-1,0.25193,0.25193,0, + 0,0,-1,0.318423,0.318423,0, + 0,0,-1,0.30855,0.178141,0, + 0,0,-1,0.30855,0.178141,0, + 0,0,-1,0.318423,0.318423,0, + 0,0,-1,0.344143,0.092213,0, + 0,0,-1,0.344143,0.092213,0, + 0,0,-1,0.318423,0.318423,0, + 0,0,-1,0.389987,0.225159,0, + 0,0,-1,0.344143,0.092213,0, + 0,0,-1,0.389987,0.225159,0, + 0,0,-1,0.356283,0,0, + 0,0,-1,0.356283,0,0, + 0,0,-1,0.389987,0.225159,0, + 0,0,-1,0.450318,0,0, + 0,0,-1,0.450318,0,0, + 0,0,-1,0.389987,0.225159,0, + 0,0,-1,0.434974,0.116551,0 +}; +static const struct gllist handsy_model_thumb_metacarpal_frame = { + GL_N3F_V3F, GL_TRIANGLES, 795, handsy_model_thumb_metacarpal_data, 0 +}; +const struct gllist *handsy_model_thumb_metacarpal = &handsy_model_thumb_metacarpal_frame; + +static const float handsy_model_thumb_proximal_data[] = { + -0.936373,0.288163,0.20042,-0.353285,0.094662,0.353285, + -0.973563,0.117553,0.195847,-0.355438,0.071069,0.355438, + -0.964953,0.236604,0.113507,-0.335809,0.08998,0.441663, + 0.518608,0.846422,0.120897,0.173828,0.301078,0.441663, + 0.661729,0.722474,0.200364,0.309761,0.309761,0, + 0.452191,0.869124,0.200364,0.219034,0.379378,0, + -0.497453,0.861614,0.100805,-0.173828,0.301078,0.441663, + -0.375037,0.90542,0.198902,-0.131358,0.386837,0.131358, + -0.489842,0.848431,0.200549,-0.198696,0.344152,0.198696, + 0.826171,0.526588,0.200364,0.379378,0.219034,0, + 0.882604,0.459204,0.100709,0.301078,0.173828,0.441663, + 0.934311,0.294816,0.200364,0.423141,0.11338,0, + -0.256474,0.957172,0.134323,-0.08998,0.335809,0.441663, + -0.042953,0.978779,0.200364,0,0.438068,0, + -0.253561,0.946302,0.200549,-0.107675,0.40185,0.107675, + 0.275694,0.957356,0.086383,0.08998,0.335809,0.441663, + 0.452191,0.869124,0.200364,0.219034,0.379378,0, + 0.211837,0.956545,0.200364,0.11338,0.423141,0, + -0.692741,0.692741,0.200549,-0.270592,0.270592,0.270592, + -0.777502,0.596598,0.198902,-0.291297,0.236707,0.291297, + -0.730758,0.669317,0.134196,-0.24583,0.24583,0.441663, + -0.730758,0.669317,0.134196,-0.24583,0.24583,0.441663, + -0.596598,0.777502,0.198902,-0.233181,0.30887,0.233181, + -0.692741,0.692741,0.200549,-0.270592,0.270592,0.270592, + -0.826171,0.526588,0.200364,-0.322249,0.18605,0.322249, + -0.90542,0.375037,0.198902,-0.331519,0.158753,0.331519, + -0.878954,0.457636,0.134198,-0.301078,0.173828,0.441663, + 0.934311,0.294816,0.200364,0.423141,0.11338,0, + 0.965222,0.231799,0.120897,0.335809,0.08998,0.441663, + 0.971635,0.127918,0.198902,0.438068,0,0, + 0.661729,0.722474,0.200364,0.309761,0.309761,0, + 0.717436,0.691248,0.086383,0.24583,0.24583,0.441663, + 0.826171,0.526588,0.200364,0.379378,0.219034,0, + -0.000441,0.994906,0.100805,0,0.347655,0.441663, + 0.211837,0.956545,0.200364,0.11338,0.423141,0, + -0.042953,0.978779,0.200364,0,0.438068,0, + -0.497453,0.861614,0.100805,-0.173828,0.301078,0.441663, + -0.258341,0.964141,-0.06076,-0.08998,0.335809,0.768373, + -0.256474,0.957172,0.134323,-0.08998,0.335809,0.441663, + -0.258341,0.964141,-0.06076,-0.08998,0.335809,0.768373, + -0.497453,0.861614,0.100805,-0.173828,0.301078,0.441663, + -0.496295,0.859609,-0.121508,-0.173828,0.301078,0.768373, + 0.275694,0.957356,0.086383,0.08998,0.335809,0.441663, + 0.482303,0.872513,-0.078134,0.173828,0.301078,0.768373, + 0.518608,0.846422,0.120897,0.173828,0.301078,0.441663, + 0.482303,0.872513,-0.078134,0.173828,0.301078,0.768373, + 0.275694,0.957356,0.086383,0.08998,0.335809,0.441663, + 0.232074,0.966532,-0.109355,0.08998,0.335809,0.768373, + 0.295926,0.937828,-0.181402,0.111086,0.414579,1.210037, + 0.482303,0.872513,-0.078134,0.173828,0.301078,0.768373, + 0.232074,0.966532,-0.109355,0.08998,0.335809,0.768373, + 0.482303,0.872513,-0.078134,0.173828,0.301078,0.768373, + 0.295926,0.937828,-0.181402,0.111086,0.414579,1.210037, + 0.52857,0.829281,-0.181402,0.214602,0.371702,1.210037, + -0.872513,0.482303,-0.078134,-0.301078,0.173828,0.768373, + -0.730758,0.669317,0.134196,-0.24583,0.24583,0.441663, + -0.878954,0.457636,0.134198,-0.301078,0.173828,0.441663, + -0.730758,0.669317,0.134196,-0.24583,0.24583,0.441663, + -0.872513,0.482303,-0.078134,-0.301078,0.173828,0.768373, + -0.716053,0.690228,-0.104175,-0.24583,0.24583,0.768373, + -0.258341,0.964141,-0.06076,-0.08998,0.335809,0.768373, + -0.000441,0.994906,0.100805,0,0.347655,0.441663, + -0.256474,0.957172,0.134323,-0.08998,0.335809,0.441663, + -0.000441,0.994906,0.100805,0,0.347655,0.441663, + -0.258341,0.964141,-0.06076,-0.08998,0.335809,0.768373, + 0.00036,0.995835,-0.091178,0,0.347655,0.768373, + 0.717436,0.691248,0.086383,0.24583,0.24583,0.441663, + 0.862238,0.498229,-0.091178,0.301078,0.173828,0.768373, + 0.882604,0.459204,0.100709,0.301078,0.173828,0.441663, + 0.862238,0.498229,-0.091178,0.301078,0.173828,0.768373, + 0.717436,0.691248,0.086383,0.24583,0.24583,0.441663, + 0.701867,0.701867,-0.121508,0.24583,0.24583,0.768373, + 0.701867,0.701867,-0.121508,0.24583,0.24583,0.768373, + 0.829281,0.52857,-0.181402,0.371702,0.214602,1.210037, + 0.862238,0.498229,-0.091178,0.301078,0.173828,0.768373, + 0.829281,0.52857,-0.181402,0.371702,0.214602,1.210037, + 0.701867,0.701867,-0.121508,0.24583,0.24583,0.768373, + 0.695353,0.695353,-0.181571,0.303493,0.303493,1.210037, + -0.716053,0.690228,-0.104175,-0.24583,0.24583,0.768373, + -0.497453,0.861614,0.100805,-0.173828,0.301078,0.441663, + -0.730758,0.669317,0.134196,-0.24583,0.24583,0.441663, + -0.497453,0.861614,0.100805,-0.173828,0.301078,0.441663, + -0.716053,0.690228,-0.104175,-0.24583,0.24583,0.768373, + -0.496295,0.859609,-0.121508,-0.173828,0.301078,0.768373, + 0.00036,0.995835,-0.091178,0,0.347655,0.768373, + 0.275694,0.957356,0.086383,0.08998,0.335809,0.441663, + -0.000441,0.994906,0.100805,0,0.347655,0.441663, + 0.275694,0.957356,0.086383,0.08998,0.335809,0.441663, + 0.00036,0.995835,-0.091178,0,0.347655,0.768373, + 0.232074,0.966532,-0.109355,0.08998,0.335809,0.768373, + 0.043115,0.982463,-0.181402,0,0.429204,1.210037, + 0.232074,0.966532,-0.109355,0.08998,0.335809,0.768373, + 0.00036,0.995835,-0.091178,0,0.347655,0.768373, + 0.232074,0.966532,-0.109355,0.08998,0.335809,0.768373, + 0.043115,0.982463,-0.181402,0,0.429204,1.210037, + 0.295926,0.937828,-0.181402,0.111086,0.414579,1.210037, + -0.872513,0.482303,-0.078134,-0.301078,0.173828,0.768373, + -0.964953,0.236604,0.113507,-0.335809,0.08998,0.441663, + -0.976006,0.203287,-0.078024,-0.335809,0.08998,0.768373, + -0.964953,0.236604,0.113507,-0.335809,0.08998,0.441663, + -0.872513,0.482303,-0.078134,-0.301078,0.173828,0.768373, + -0.878954,0.457636,0.134198,-0.301078,0.173828,0.441663, + 0.482303,0.872513,-0.078134,0.173828,0.301078,0.768373, + 0.717436,0.691248,0.086383,0.24583,0.24583,0.441663, + 0.518608,0.846422,0.120897,0.173828,0.301078,0.441663, + 0.717436,0.691248,0.086383,0.24583,0.24583,0.441663, + 0.482303,0.872513,-0.078134,0.173828,0.301078,0.768373, + 0.701867,0.701867,-0.121508,0.24583,0.24583,0.768373, + 0.52857,0.829281,-0.181402,0.214602,0.371702,1.210037, + 0.701867,0.701867,-0.121508,0.24583,0.24583,0.768373, + 0.482303,0.872513,-0.078134,0.173828,0.301078,0.768373, + 0.701867,0.701867,-0.121508,0.24583,0.24583,0.768373, + 0.52857,0.829281,-0.181402,0.214602,0.371702,1.210037, + 0.695353,0.695353,-0.181571,0.303493,0.303493,1.210037, + -0.976006,0.203287,-0.078024,-0.335809,0.08998,0.768373, + -0.991445,0.130526,0,-0.347655,0,0.467099, + -0.987385,0.129992,-0.090404,-0.347655,0,0.768373, + -0.991445,0.130526,0,-0.347655,0,0.467099, + -0.976006,0.203287,-0.078024,-0.335809,0.08998,0.768373, + -0.989366,0.130253,0.064723,-0.347655,0,0.441663, + -0.989366,0.130253,0.064723,-0.347655,0,0.441663, + -0.976006,0.203287,-0.078024,-0.335809,0.08998,0.768373, + -0.964953,0.236604,0.113507,-0.335809,0.08998,0.441663, + 0.882604,0.459204,0.100709,0.301078,0.173828,0.441663, + 0.967612,0.240045,-0.078134,0.335809,0.08998,0.768373, + 0.965222,0.231799,0.120897,0.335809,0.08998,0.441663, + 0.967612,0.240045,-0.078134,0.335809,0.08998,0.768373, + 0.882604,0.459204,0.100709,0.301078,0.173828,0.441663, + 0.862238,0.498229,-0.091178,0.301078,0.173828,0.768373, + 0.862238,0.498229,-0.091178,0.301078,0.173828,0.768373, + 0.937828,0.295926,-0.181402,0.414579,0.111086,1.210037, + 0.967612,0.240045,-0.078134,0.335809,0.08998,0.768373, + 0.937828,0.295926,-0.181402,0.414579,0.111086,1.210037, + 0.862238,0.498229,-0.091178,0.301078,0.173828,0.768373, + 0.829281,0.52857,-0.181402,0.371702,0.214602,1.210037, + 0.989244,0.130236,0.066597,0.347655,0,0.441663, + 0.967612,0.240045,-0.078134,0.335809,0.08998,0.768373, + 0.987385,0.129992,-0.090404,0.347655,0,0.768373, + 0.967612,0.240045,-0.078134,0.335809,0.08998,0.768373, + 0.989244,0.130236,0.066597,0.347655,0,0.441663, + 0.965222,0.231799,0.120897,0.335809,0.08998,0.441663, + 0.967612,0.240045,-0.078134,0.335809,0.08998,0.768373, + 0.975239,0.128393,-0.180068,0.429204,0,1.210037, + 0.987385,0.129992,-0.090404,0.347655,0,0.768373, + 0.975239,0.128393,-0.180068,0.429204,0,1.210037, + 0.967612,0.240045,-0.078134,0.335809,0.08998,0.768373, + 0.937828,0.295926,-0.181402,0.414579,0.111086,1.210037, + 0.882604,0.459204,0.100709,0.301078,0.173828,0.441663, + 0.965222,0.231799,0.120897,0.335809,0.08998,0.441663, + 0.934311,0.294816,0.200364,0.423141,0.11338,0, + 0.275694,0.957356,0.086383,0.08998,0.335809,0.441663, + 0.211837,0.956545,0.200364,0.11338,0.423141,0, + -0.000441,0.994906,0.100805,0,0.347655,0.441663, + -0.964953,0.236604,0.113507,-0.335809,0.08998,0.441663, + -0.972735,0.128063,0.193353,-0.363243,0,0.363243, + -0.989366,0.130253,0.064723,-0.347655,0,0.441663, + -0.972735,0.128063,0.193353,-0.363243,0,0.363243, + -0.964953,0.236604,0.113507,-0.335809,0.08998,0.441663, + -0.973563,0.117553,0.195847,-0.355438,0.071069,0.355438, + -0.730758,0.669317,0.134196,-0.24583,0.24583,0.441663, + -0.826171,0.526588,0.200364,-0.322249,0.18605,0.322249, + -0.878954,0.457636,0.134198,-0.301078,0.173828,0.441663, + -0.826171,0.526588,0.200364,-0.322249,0.18605,0.322249, + -0.730758,0.669317,0.134196,-0.24583,0.24583,0.441663, + -0.777502,0.596598,0.198902,-0.295978,0.229044,0.295978, + -0.777502,0.596598,0.198902,-0.295978,0.229044,0.295978, + -0.730758,0.669317,0.134196,-0.24583,0.24583,0.441663, + -0.777502,0.596598,0.198902,-0.291297,0.236707,0.291297, + -0.596598,0.777502,0.198902,-0.233181,0.30887,0.233181, + -0.497453,0.861614,0.100805,-0.173828,0.301078,0.441663, + -0.489842,0.848431,0.200549,-0.198696,0.344152,0.198696, + -0.497453,0.861614,0.100805,-0.173828,0.301078,0.441663, + -0.596598,0.777502,0.198902,-0.233181,0.30887,0.233181, + -0.730758,0.669317,0.134196,-0.24583,0.24583,0.441663, + -0.878954,0.457636,0.134198,-0.301078,0.173828,0.441663, + -0.936373,0.288163,0.20042,-0.353285,0.094662,0.353285, + -0.964953,0.236604,0.113507,-0.335809,0.08998,0.441663, + -0.936373,0.288163,0.20042,-0.353285,0.094662,0.353285, + -0.878954,0.457636,0.134198,-0.301078,0.173828,0.441663, + -0.90542,0.375037,0.198902,-0.331519,0.158753,0.331519, + -0.000441,0.994906,0.100805,0,0.347655,0.441663, + -0.042953,0.978779,0.200364,0,0.438068,0, + -0.256474,0.957172,0.134323,-0.08998,0.335809,0.441663, + 0.275694,0.957356,0.086383,0.08998,0.335809,0.441663, + 0.518608,0.846422,0.120897,0.173828,0.301078,0.441663, + 0.452191,0.869124,0.200364,0.219034,0.379378,0, + 0.717436,0.691248,0.086383,0.24583,0.24583,0.441663, + 0.882604,0.459204,0.100709,0.301078,0.173828,0.441663, + 0.826171,0.526588,0.200364,0.379378,0.219034,0, + 0.717436,0.691248,0.086383,0.24583,0.24583,0.441663, + 0.661729,0.722474,0.200364,0.309761,0.309761,0, + 0.518608,0.846422,0.120897,0.173828,0.301078,0.441663, + -0.375037,0.90542,0.198902,-0.131358,0.386837,0.131358, + -0.256474,0.957172,0.134323,-0.08998,0.335809,0.441663, + -0.253561,0.946302,0.200549,-0.107675,0.40185,0.107675, + -0.256474,0.957172,0.134323,-0.08998,0.335809,0.441663, + -0.375037,0.90542,0.198902,-0.131358,0.386837,0.131358, + -0.497453,0.861614,0.100805,-0.173828,0.301078,0.441663, + 0.965222,0.231799,0.120897,0.335809,0.08998,0.441663, + 0.989244,0.130236,0.066597,0.347655,0,0.441663, + 0.971635,0.127918,0.198902,0.438068,0,0, + 0,0,-1,0,0.438068,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0,0.214602,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0,0.438068,0, + 0,0,-1,0.11338,0.423141,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0.11338,0.423141,0, + 0,0,-1,0.219034,0.379378,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0.219034,0.379378,0, + 0,0,-1,0.309761,0.309761,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0.309761,0.309761,0, + 0,0,-1,0.379378,0.219034,0, + 0,0,-1,0.356283,0.214602,0, + 0,0,-1,0.379378,0.219034,0, + 0,0,-1,0.356283,0,0, + 0,0,-1,0.356283,0,0, + 0,0,-1,0.379378,0.219034,0, + 0,0,-1,0.438068,0,0, + 0,0,-1,0.438068,0,0, + 0,0,-1,0.379378,0.219034,0, + 0,0,-1,0.423141,0.11338,0, + -0.707107,0,-0.707107,-0.355438,0.071069,0.355438, + -0.707107,0,-0.707107,-0.25193,0,0.25193, + -0.707107,0,-0.707107,-0.363243,0,0.363243, + -0.707107,0,-0.707107,-0.25193,0,0.25193, + -0.707107,0,-0.707107,-0.355438,0.071069,0.355438, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.355438,0.071069,0.355438, + -0.707107,0,-0.707107,-0.353285,0.094662,0.353285, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.353285,0.094662,0.353285, + -0.707107,0,-0.707107,-0.331519,0.158753,0.331519, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.331519,0.158753,0.331519, + -0.707107,0,-0.707107,-0.322249,0.18605,0.322249, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.322249,0.18605,0.322249, + -0.707107,0,-0.707107,-0.295978,0.229044,0.295978, + -0.707107,0,-0.707107,-0.25193,0.214602,0.25193, + -0.707107,0,-0.707107,-0.295978,0.229044,0.295978, + -0.707107,0,-0.707107,0,0.214602,0, + -0.707107,0,-0.707107,0,0.214602,0, + -0.707107,0,-0.707107,-0.295978,0.229044,0.295978, + -0.707107,0,-0.707107,0,0.438068,0, + -0.707107,0,-0.707107,0,0.438068,0, + -0.707107,0,-0.707107,-0.295978,0.229044,0.295978, + -0.707107,0,-0.707107,-0.291297,0.236707,0.291297, + -0.707107,0,-0.707107,0,0.438068,0, + -0.707107,0,-0.707107,-0.291297,0.236707,0.291297, + -0.707107,0,-0.707107,-0.270592,0.270592,0.270592, + -0.707107,0,-0.707107,0,0.438068,0, + -0.707107,0,-0.707107,-0.270592,0.270592,0.270592, + -0.707107,0,-0.707107,-0.233181,0.30887,0.233181, + -0.707107,0,-0.707107,0,0.438068,0, + -0.707107,0,-0.707107,-0.233181,0.30887,0.233181, + -0.707107,0,-0.707107,-0.198696,0.344152,0.198696, + -0.707107,0,-0.707107,0,0.438068,0, + -0.707107,0,-0.707107,-0.198696,0.344152,0.198696, + -0.707107,0,-0.707107,-0.131358,0.386837,0.131358, + -0.707107,0,-0.707107,0,0.438068,0, + -0.707107,0,-0.707107,-0.131358,0.386837,0.131358, + -0.707107,0,-0.707107,-0.107675,0.40185,0.107675, + 0,1,0,-0.30855,0.214602,1.031895, + 0,1,0,0,0.214602,1.210037, + 0,1,0,-0.25193,0.214602,0.958107, + 0,1,0,0,0.214602,1.210037, + 0,1,0,-0.30855,0.214602,1.031895, + 0,1,0,-0.344143,0.214602,1.117824, + 0,1,0,0,0.214602,1.210037, + 0,1,0,-0.344143,0.214602,1.117824, + 0,1,0,-0.356283,0.214602,1.210037, + 0,1,0,0,0.214602,1.210037, + 0,1,0,-0.356283,0.214602,1.210037, + 0,1,0,-0.344143,0.214602,1.302249, + 0,1,0,0,0.214602,1.210037, + 0,1,0,0.344143,0.214602,1.302249, + 0,1,0,0.356283,0.214602,1.210037, + 0,1,0,0.344143,0.214602,1.302249, + 0,1,0,0,0.214602,1.210037, + 0,1,0,-0.344143,0.214602,1.302249, + 0,1,0,0.344143,0.214602,1.302249, + 0,1,0,-0.344143,0.214602,1.302249, + 0,1,0,-0.317592,0.214602,1.366349, + 0,1,0,0.344143,0.214602,1.302249, + 0,1,0,-0.317592,0.214602,1.366349, + 0,1,0,0.30855,0.214602,1.388178, + 0,1,0,0.30855,0.214602,1.388178, + 0,1,0,-0.317592,0.214602,1.366349, + 0,1,0,-0.30855,0.214602,1.388178, + 0,1,0,0.30855,0.214602,1.388178, + 0,1,0,-0.30855,0.214602,1.388178, + 0,1,0,-0.25193,0.214602,1.461967, + 0,1,0,0.30855,0.214602,1.388178, + 0,1,0,-0.25193,0.214602,1.461967, + 0,1,0,0.25193,0.214602,1.461967, + 0,1,0,0.25193,0.214602,1.461967, + 0,1,0,-0.25193,0.214602,1.461967, + 0,1,0,-0.178141,0.214602,1.518587, + 0,1,0,0.25193,0.214602,1.461967, + 0,1,0,-0.178141,0.214602,1.518587, + 0,1,0,0.178141,0.214602,1.518587, + 0,1,0,0.178141,0.214602,1.518587, + 0,1,0,-0.178141,0.214602,1.518587, + 0,1,0,-0.092213,0.214602,1.554179, + 0,1,0,0.178141,0.214602,1.518587, + 0,1,0,-0.092213,0.214602,1.554179, + 0,1,0,0.092213,0.214602,1.554179, + 0,1,0,0.092213,0.214602,1.554179, + 0,1,0,-0.092213,0.214602,1.554179, + 0,1,0,0,0.214602,1.566319, + 0.991445,0,0.130526,0.356283,0,1.210037, + 0.965926,0,0.258819,0.344143,0.214602,1.302249, + 0.965926,0,0.258819,0.344143,0,1.302249, + 0.965926,0,0.258819,0.344143,0.214602,1.302249, + 0.991445,0,0.130526,0.356283,0,1.210037, + 0.991445,0,0.130526,0.356283,0.214602,1.210037, + 0.965926,0,0.258819,0.344143,0.214602,1.302249, + 0.887114,0,0.461551,0.30855,0,1.388178, + 0.965926,0,0.258819,0.344143,0,1.302249, + 0.887114,0,0.461551,0.30855,0,1.388178, + 0.965926,0,0.258819,0.344143,0.214602,1.302249, + 0.843272,0,0.537487,0.30855,0.214602,1.388178, + 0.843272,0,0.537487,0.30855,0.214602,1.388178, + 0.707107,0,0.707107,0.25193,0,1.461967, + 0.887114,0,0.461551,0.30855,0,1.388178, + 0.707107,0,0.707107,0.25193,0,1.461967, + 0.843272,0,0.537487,0.30855,0.214602,1.388178, + 0.707107,0,0.707107,0.25193,0.214602,1.461967, + 0.707107,0,0.707107,0.25193,0,1.461967, + 0.537487,0,0.843272,0.178141,0.214602,1.518587, + 0.461551,0,0.887114,0.178141,0,1.518587, + 0.537487,0,0.843272,0.178141,0.214602,1.518587, + 0.707107,0,0.707107,0.25193,0,1.461967, + 0.707107,0,0.707107,0.25193,0.214602,1.461967, + 0.461551,0,0.887114,0.178141,0,1.518587, + 0.300918,0,0.95365,0.092213,0.214602,1.554179, + 0.216222,0,0.976344,0.092213,0,1.554179, + 0.300918,0,0.95365,0.092213,0.214602,1.554179, + 0.461551,0,0.887114,0.178141,0,1.518587, + 0.537487,0,0.843272,0.178141,0.214602,1.518587, + 0.216222,0,0.976344,0.092213,0,1.554179, + 0.043842,0,0.999038,0,0.214602,1.566319, + -0.043842,0,0.999038,0,0,1.566319, + 0.043842,0,0.999038,0,0.214602,1.566319, + 0.216222,0,0.976344,0.092213,0,1.554179, + 0.300918,0,0.95365,0.092213,0.214602,1.554179, + -0.043842,0,0.999038,0,0,1.566319, + -0.216222,0,0.976344,-0.092213,0.214602,1.554179, + -0.300918,0,0.95365,-0.092213,0,1.554179, + -0.216222,0,0.976344,-0.092213,0.214602,1.554179, + -0.043842,0,0.999038,0,0,1.566319, + 0.043842,0,0.999038,0,0.214602,1.566319, + -0.300918,0,0.95365,-0.092213,0,1.554179, + -0.461551,0,0.887114,-0.178141,0.214602,1.518587, + -0.555804,0,0.831313,-0.178141,0,1.518587, + -0.461551,0,0.887114,-0.178141,0.214602,1.518587, + -0.300918,0,0.95365,-0.092213,0,1.554179, + -0.216222,0,0.976344,-0.092213,0.214602,1.554179, + -0.555804,0,0.831313,-0.178141,0,1.518587, + -0.725474,0,0.68825,-0.25193,0.194957,1.461967, + -0.707107,0,0.707107,-0.25193,0,1.461967, + -0.725474,0,0.68825,-0.25193,0.194957,1.461967, + -0.555804,0,0.831313,-0.178141,0,1.518587, + -0.675426,0,0.737428,-0.25193,0.214602,1.461967, + -0.675426,0,0.737428,-0.25193,0.214602,1.461967, + -0.555804,0,0.831313,-0.178141,0,1.518587, + -0.461551,0,0.887114,-0.178141,0.214602,1.518587, + -0.725474,0,0.68825,-0.25193,0.194957,1.461967, + -0.843272,0,0.537487,-0.30855,0,1.388178, + -0.707107,0,0.707107,-0.25193,0,1.461967, + -0.843272,0,0.537487,-0.30855,0,1.388178, + -0.725474,0,0.68825,-0.25193,0.194957,1.461967, + -0.866025,0,0.5,-0.30855,0.214602,1.388178, + -0.866025,0,0.5,-0.30855,0.214602,1.388178, + -0.725474,0,0.68825,-0.25193,0.194957,1.461967, + -0.675426,0,0.737428,-0.25193,0.214602,1.461967, + -0.866025,0,0.5,-0.30855,0.214602,1.388178, + -0.92388,0,0.382683,-0.317592,0,1.366349, + -0.843272,0,0.537487,-0.30855,0,1.388178, + -0.92388,0,0.382683,-0.317592,0,1.366349, + -0.965926,0,0.258819,-0.344143,0.214602,1.302249, + -0.965926,0,0.258819,-0.344143,0,1.302249, + -0.965926,0,0.258819,-0.344143,0.214602,1.302249, + -0.92388,0,0.382683,-0.317592,0,1.366349, + -0.866025,0,0.5,-0.30855,0.214602,1.388178, + -0.645102,0.715851,0.26721,-0.344143,0.214602,1.302249, + -0.645102,0.715851,0.26721,-0.30855,0.214602,1.388178, + -0.645102,0.715851,0.26721,-0.317592,0.214602,1.366349, + -0.829281,0.52857,-0.181402,-0.320459,0.185017,0.889577, + -0.716053,0.690228,-0.104175,-0.24583,0.24583,0.768373, + -0.872513,0.482303,-0.078134,-0.301078,0.173828,0.768373, + -0.716053,0.690228,-0.104175,-0.24583,0.24583,0.768373, + -0.829281,0.52857,-0.181402,-0.320459,0.185017,0.889577, + -0.780385,0.598811,-0.180068,-0.293976,0.227495,0.916061, + -0.716053,0.690228,-0.104175,-0.24583,0.24583,0.768373, + -0.780385,0.598811,-0.180068,-0.293976,0.227495,0.916061, + -0.66422,0.725193,-0.181402,-0.268445,0.268445,0.941592, + -0.66422,0.725193,-0.181402,-0.268445,0.268445,0.941592, + -0.496295,0.859609,-0.121508,-0.173828,0.301078,0.768373, + -0.716053,0.690228,-0.104175,-0.24583,0.24583,0.768373, + -0.496295,0.859609,-0.121508,-0.173828,0.301078,0.768373, + -0.66422,0.725193,-0.181402,-0.268445,0.268445,0.941592, + -0.491689,0.85163,-0.181571,-0.196464,0.340286,1.013572, + -0.496295,0.859609,-0.121508,-0.173828,0.301078,0.768373, + -0.254517,0.94987,-0.181571,-0.10602,0.395671,1.104017, + -0.258341,0.964141,-0.06076,-0.08998,0.335809,0.768373, + -0.254517,0.94987,-0.181571,-0.10602,0.395671,1.104017, + -0.496295,0.859609,-0.121508,-0.173828,0.301078,0.768373, + -0.491689,0.85163,-0.181571,-0.196464,0.340286,1.013572, + -0.937828,0.295926,-0.181402,-0.351831,0.094273,0.858206, + -0.872513,0.482303,-0.078134,-0.301078,0.173828,0.768373, + -0.976006,0.203287,-0.078024,-0.335809,0.08998,0.768373, + -0.872513,0.482303,-0.078134,-0.301078,0.173828,0.768373, + -0.937828,0.295926,-0.181402,-0.351831,0.094273,0.858206, + -0.829281,0.52857,-0.181402,-0.320459,0.185017,0.889577, + -0.975239,0.128393,-0.180068,-0.362308,0,0.847729, + -0.976006,0.203287,-0.078024,-0.335809,0.08998,0.768373, + -0.987385,0.129992,-0.090404,-0.347655,0,0.768373, + -0.976006,0.203287,-0.078024,-0.335809,0.08998,0.768373, + -0.975239,0.128393,-0.180068,-0.362308,0,0.847729, + -0.937828,0.295926,-0.181402,-0.351831,0.094273,0.858206, + -0.254517,0.94987,-0.181571,-0.10602,0.395671,1.104017, + 0.00036,0.995835,-0.091178,0,0.347655,0.768373, + -0.258341,0.964141,-0.06076,-0.08998,0.335809,0.768373, + 0.00036,0.995835,-0.091178,0,0.347655,0.768373, + -0.254517,0.94987,-0.181571,-0.10602,0.395671,1.104017, + 0.043115,0.982463,-0.181402,0,0.429204,1.210037, + -0.965926,0,-0.258819,-0.344143,0.214602,1.117824, + -0.866025,0,-0.5,-0.30855,0,1.031895, + -0.965926,0,-0.258819,-0.344143,0,1.117824, + -0.866025,0,-0.5,-0.30855,0,1.031895, + -0.965926,0,-0.258819,-0.344143,0.214602,1.117824, + -0.843272,0,-0.537487,-0.30855,0.214602,1.031895, + -0.965926,0,0.258819,-0.344143,0.214602,1.302249, + -1,0,0,-0.356283,0,1.210037, + -0.965926,0,0.258819,-0.344143,0,1.302249, + -1,0,0,-0.356283,0,1.210037, + -0.965926,0,0.258819,-0.344143,0.214602,1.302249, + -1,0,0,-0.356283,0.214602,1.210037, + -1,0,0,-0.356283,0,1.210037, + -0.965926,0,-0.258819,-0.344143,0.214602,1.117824, + -0.965926,0,-0.258819,-0.344143,0,1.117824, + -0.965926,0,-0.258819,-0.344143,0.214602,1.117824, + -1,0,0,-0.356283,0,1.210037, + -1,0,0,-0.356283,0.214602,1.210037, + -0.866025,0,-0.5,-0.30855,0,1.031895, + -0.793353,0,-0.608761,-0.25193,0.194957,0.958107, + -0.793353,0,-0.608761,-0.25193,0,0.958107, + -0.793353,0,-0.608761,-0.25193,0.194957,0.958107, + -0.866025,0,-0.5,-0.30855,0,1.031895, + -0.843272,0,-0.537487,-0.30855,0.214602,1.031895, + -0.793353,0,-0.608761,-0.25193,0.194957,0.958107, + -0.843272,0,-0.537487,-0.30855,0.214602,1.031895, + -0.793353,0,-0.608761,-0.25193,0.214602,0.958107, + -0.707107,0,0.707107,0,0.429204,1.210037, + -0.707107,0,0.707107,-0.25193,0.214602,0.958107, + -0.707107,0,0.707107,0,0.214602,1.210037, + -0.707107,0,0.707107,-0.25193,0.214602,0.958107, + -0.707107,0,0.707107,0,0.429204,1.210037, + -0.707107,0,0.707107,-0.293976,0.227495,0.916061, + -0.707107,0,0.707107,-0.293976,0.227495,0.916061, + -0.707107,0,0.707107,0,0.429204,1.210037, + -0.707107,0,0.707107,-0.268445,0.268445,0.941592, + -0.707107,0,0.707107,-0.268445,0.268445,0.941592, + -0.707107,0,0.707107,0,0.429204,1.210037, + -0.707107,0,0.707107,-0.196464,0.340286,1.013572, + -0.707107,0,0.707107,-0.196464,0.340286,1.013572, + -0.707107,0,0.707107,0,0.429204,1.210037, + -0.707107,0,0.707107,-0.10602,0.395671,1.104017, + -0.707107,0,0.707107,-0.25193,0.194957,0.958107, + -0.707107,0,0.707107,-0.362308,0,0.847729, + -0.707107,0,0.707107,-0.25193,0,0.958107, + -0.707107,0,0.707107,-0.362308,0,0.847729, + -0.707107,0,0.707107,-0.25193,0.194957,0.958107, + -0.707107,0,0.707107,-0.351831,0.094273,0.858206, + -0.707107,0,0.707107,-0.351831,0.094273,0.858206, + -0.707107,0,0.707107,-0.25193,0.194957,0.958107, + -0.707107,0,0.707107,-0.320459,0.185017,0.889577, + -0.707107,0,0.707107,-0.320459,0.185017,0.889577, + -0.707107,0,0.707107,-0.25193,0.194957,0.958107, + -0.707107,0,0.707107,-0.293976,0.227495,0.916061, + -0.707107,0,0.707107,-0.293976,0.227495,0.916061, + -0.707107,0,0.707107,-0.25193,0.194957,0.958107, + -0.707107,0,0.707107,-0.25193,0.214602,0.958107, + 0,0,1,0.429204,0,1.210037, + 0,0,1,0.356283,0.214602,1.210037, + 0,0,1,0.356283,0,1.210037, + 0,0,1,0.356283,0.214602,1.210037, + 0,0,1,0.429204,0,1.210037, + 0,0,1,0.371702,0.214602,1.210037, + 0,0,1,0.371702,0.214602,1.210037, + 0,0,1,0.429204,0,1.210037, + 0,0,1,0.414579,0.111086,1.210037, + 0,0,1,0,0.214602,1.210037, + 0,0,1,0.111086,0.414579,1.210037, + 0,0,1,0,0.429204,1.210037, + 0,0,1,0.111086,0.414579,1.210037, + 0,0,1,0,0.214602,1.210037, + 0,0,1,0.356283,0.214602,1.210037, + 0,0,1,0.111086,0.414579,1.210037, + 0,0,1,0.356283,0.214602,1.210037, + 0,0,1,0.214602,0.371702,1.210037, + 0,0,1,0.214602,0.371702,1.210037, + 0,0,1,0.356283,0.214602,1.210037, + 0,0,1,0.303493,0.303493,1.210037, + 0,0,1,0.303493,0.303493,1.210037, + 0,0,1,0.356283,0.214602,1.210037, + 0,0,1,0.371702,0.214602,1.210037 +}; +static const struct gllist handsy_model_thumb_proximal_frame = { + GL_N3F_V3F, GL_TRIANGLES, 513, handsy_model_thumb_proximal_data, 0 +}; +const struct gllist *handsy_model_thumb_proximal = &handsy_model_thumb_proximal_frame; diff --git a/hacks/glx/hexstrut.c b/hacks/glx/hexstrut.c index a547a76..ba76d86 100644 --- a/hacks/glx/hexstrut.c +++ b/hacks/glx/hexstrut.c @@ -450,7 +450,7 @@ draw_hexstrut (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glShadeModel(GL_SMOOTH); @@ -496,6 +496,13 @@ ENTRYPOINT void free_hexstrut (ModeInfo *mi) { hexstrut_configuration *bp = &bps[MI_SCREEN(mi)]; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->colors) free (bp->colors); while (bp->triangles) { triangle *t = bp->triangles->next; diff --git a/hacks/glx/hilbert.c b/hacks/glx/hilbert.c index dbb2ce6..98faa4b 100644 --- a/hacks/glx/hilbert.c +++ b/hacks/glx/hilbert.c @@ -21,7 +21,6 @@ "*geometry: 800x800\n" \ "*suppressRotationAnimation: True\n" \ -# define free_hilbert 0 # define release_hilbert 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -987,7 +986,7 @@ draw_hilbert (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glShadeModel(GL_SMOOTH); @@ -1139,6 +1138,30 @@ draw_hilbert (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_hilbert (ModeInfo *mi) +{ + hilbert_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->rot2) free_rotator (bp->rot2); + if (bp->colors) free (bp->colors); + if (bp->caches) + for (i = 0; i < max_depth + 2; i++) + if (bp->caches[i]) + { + free (bp->caches[i]->values); + free (bp->caches[i]); + } + /* #### free dlists */ +} + XSCREENSAVER_MODULE ("Hilbert", hilbert) #endif /* USE_GL */ diff --git a/hacks/glx/hydrostat.c b/hacks/glx/hydrostat.c index faf15a0..99bc6cd 100644 --- a/hacks/glx/hydrostat.c +++ b/hacks/glx/hydrostat.c @@ -754,7 +754,7 @@ draw_hydrostat (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -797,11 +797,21 @@ free_hydrostat (ModeInfo *mi) { hydrostat_configuration *bp = &bps[MI_SCREEN(mi)]; int i; - if (!bp->squids) - return; - for (i = 0; i < MI_COUNT(mi); i++) - free_squid (bp->squids[i]); - free (bp->squids); + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + +# ifdef USE_TRACKBALL + if (bp->trackball) gltrackball_free (bp->trackball); +# endif + if (bp->squids) + { + for (i = 0; i < MI_COUNT(mi); i++) + free_squid (bp->squids[i]); + free (bp->squids); + } + + if (glIsList(bp->head)) glDeleteLists(bp->head, 1); } XSCREENSAVER_MODULE ("Hydrostat", hydrostat) diff --git a/hacks/glx/hypertorus.c b/hacks/glx/hypertorus.c index 3ae6aad..df64923 100644 --- a/hacks/glx/hypertorus.c +++ b/hacks/glx/hypertorus.c @@ -89,7 +89,6 @@ static const char sccsid[] = "@(#)hypertorus.c 1.2 05/09/28 xlockmore"; "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_hypertorus 0 # define release_hypertorus 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -982,7 +981,7 @@ ENTRYPOINT void draw_hypertorus(ModeInfo *mi) if (!hp->glx_context) return; - glXMakeCurrent(display,window,*(hp->glx_context)); + glXMakeCurrent(display, window, *hp->glx_context); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); @@ -1006,11 +1005,20 @@ ENTRYPOINT void change_hypertorus(ModeInfo *mi) if (!hp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(hp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *hp->glx_context); init(mi); } #endif /* !STANDALONE */ +ENTRYPOINT void free_hypertorus(ModeInfo *mi) +{ + hypertorusstruct *hp = &hyper[MI_SCREEN(mi)]; + if (!hp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *hp->glx_context); + gltrackball_free (hp->trackballs[0]); + gltrackball_free (hp->trackballs[1]); +} + XSCREENSAVER_MODULE ("Hypertorus", hypertorus) #endif /* USE_GL */ diff --git a/hacks/glx/hypnowheel.c b/hacks/glx/hypnowheel.c index 0602e6e..76896da 100644 --- a/hacks/glx/hypnowheel.c +++ b/hacks/glx/hypnowheel.c @@ -24,7 +24,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_hypnowheel 0 # define release_hypnowheel 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -243,7 +242,7 @@ draw_hypnowheel (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -317,6 +316,22 @@ hypnowheel_handle_event (ModeInfo *mi, XEvent *event) } +ENTRYPOINT void +free_hypnowheel (ModeInfo *mi) +{ + hypnowheel_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->colors) free (bp->colors); + if (bp->rot) free_rotator (bp->rot); + if (bp->discs) { + for (i = 0; i < nlayers; i++) + if (bp->discs[i].rot) free_rotator (bp->discs[i].rot); + free (bp->discs); + } +} + XSCREENSAVER_MODULE ("Hypnowheel", hypnowheel) #endif /* USE_GL */ diff --git a/hacks/glx/jigglypuff.c b/hacks/glx/jigglypuff.c index fea13fd..d67a14d 100644 --- a/hacks/glx/jigglypuff.c +++ b/hacks/glx/jigglypuff.c @@ -41,7 +41,6 @@ "*wireframe: False\n" \ "*suppressRotationAnimation: True\n" \ -# define free_jigglypuff 0 # define release_jigglypuff 0 # include "xlockmore.h" #else @@ -94,7 +93,14 @@ static int shininess; static int random_parms; +/* This is all the half-edge b-rep code (as well as basic geometry) */ typedef struct solid solid; +typedef struct face face; +typedef struct edge edge; +typedef struct hedge hedge; +typedef struct vertex vertex; +typedef GLfloat coord; +typedef coord vector[3]; typedef struct { float stable_distance; @@ -119,6 +125,13 @@ typedef struct { float axis; float speed; + face *faces; + edge *edges; + hedge *hedges; + vertex *vertices; + + GLuint texid; + GLXContext *glx_context; } jigglystruct; @@ -203,14 +216,6 @@ static const GLfloat flowerbox_colors[4][4] = { #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; @@ -221,21 +226,21 @@ struct face { solid *s; hedge *start; const GLfloat *color; - face *next; + face *next, *next0; }; struct edge { solid *s; hedge *left; hedge *right; - edge *next; + edge *next, *next0; }; struct hedge { face *f; edge *e; vertex *vtx; - hedge *next; + hedge *next, *next0; hedge *prev; }; @@ -246,7 +251,7 @@ struct vertex { vector n; vector f; vector vel; - vertex *next; + vertex *next, *next0; }; static inline void vector_init(vector v, coord x, coord y, coord z) @@ -353,12 +358,14 @@ static inline hedge *partner(hedge *h) { } } -static vertex *vertex_new(solid *s, vector v) +static vertex *vertex_new(jigglystruct *js, solid *s, vector v) { vertex *vtx = (vertex*)malloc(sizeof(vertex)); if(!vtx) return NULL; + vtx->next0 = js->vertices; + js->vertices = vtx; vtx->s = s; vtx->next = s->vertices; s->vertices = vtx; @@ -372,7 +379,7 @@ static vertex *vertex_new(solid *s, vector v) * 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) +static hedge *hedge_new(jigglystruct *js, hedge *hafter, vertex *vtx) { hedge *h = (hedge*)malloc(sizeof(hedge)); @@ -380,6 +387,8 @@ static hedge *hedge_new(hedge *hafter, vertex *vtx) /* _DEBUG("Out of memory in hedge_new()\n",NULL); */ return NULL; } + h->next0 = js->hedges; + js->hedges = h; h->f = hafter->f; h->vtx = vtx; h->e = NULL; @@ -390,13 +399,15 @@ static hedge *hedge_new(hedge *hafter, vertex *vtx) return h; } -static edge *edge_new(solid *s) +static edge *edge_new(jigglystruct *js, solid *s) { edge *e = (edge*)malloc(sizeof(edge)); if(!e) { /* _DEBUG("Out of memory in edge_new()\n",NULL);*/ exit(-1); } + e->next0 = js->edges; + js->edges = e; e->next = s->edges; s->edges = e; e-> s = s; @@ -404,13 +415,15 @@ static edge *edge_new(solid *s) return e; } -static face *face_new(solid *s, hedge *h) +static face *face_new(jigglystruct *js, solid *s, hedge *h) { face *f = (face*)malloc(sizeof(face)); if(!f) { /* _DEBUG("Out of memory in face_new()",NULL);*/ exit(-1); } + f->next0 = js->faces; + js->faces = f; f->s = s; f->start = h; f->next = s->faces; @@ -432,7 +445,7 @@ static face *face_new(solid *s, hedge *h) * the vertex returned will have h==<the new halfedge>. */ -static vertex *vertex_split(hedge *h, vector v) +static vertex *vertex_split(jigglystruct *js, hedge *h, vector v) { hedge *h2, *hn1, *hn2; vertex *vtxn; @@ -442,10 +455,10 @@ static vertex *vertex_split(hedge *h, vector v) f1 = h->f; h2 = partner(h); - vtxn = vertex_new(f1->s, v); - hn1 = hedge_new(h, vtxn); + vtxn = vertex_new(js, f1->s, v); + hn1 = hedge_new(js, h, vtxn); vtxn->h = hn1; - hn2 = hedge_new(h2, vtxn); + hn2 = hedge_new(js, h2, vtxn); hn2->e = h->e; if(h2->e->left == h2) @@ -453,7 +466,7 @@ static vertex *vertex_split(hedge *h, vector v) else h2->e->right = hn2; - en = edge_new(f1->s); + en = edge_new(js, f1->s); en->left = hn1; en->right = h2; hn1->e = en; @@ -461,7 +474,7 @@ static vertex *vertex_split(hedge *h, vector v) return vtxn; } -static face *face_split(face *f, hedge *h1, hedge *h2) +static face *face_split(jigglystruct *js, face *f, hedge *h1, hedge *h2) { hedge *hn1, *hn2, *tmp; edge *en; @@ -482,9 +495,9 @@ static face *face_split(face *f, hedge *h1, hedge *h2) 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); + hn1 = hedge_new(js, h2->prev, h1->vtx); + hn2 = hedge_new(js, h1->prev, h2->vtx); + en = edge_new(js, f->s); en->left = hn1; en->right = hn2; hn1->e = en; @@ -496,7 +509,7 @@ static face *face_split(face *f, hedge *h1, hedge *h2) while(tmp != h1 && tmp != h2) tmp = tmp->next; tmp = (tmp == h1) ? h2 : h1 ; - fn = face_new(f->s, tmp); + fn = face_new(js, f->s, tmp); do { tmp->f = fn; tmp = tmp->next; @@ -505,7 +518,7 @@ static face *face_split(face *f, hedge *h1, hedge *h2) return fn; } -static solid *solid_new(vector where) +static solid *solid_new(jigglystruct *js, vector where) { solid *s = (solid*)malloc(sizeof(solid)); face *f1, *f2; @@ -522,19 +535,24 @@ static solid *solid_new(vector where) h1->next = h1->prev = h1; h2->next = h2->prev = h2; - vtx = vertex_new(s, where); + h1->next0 = js->hedges; + js->hedges = h1; + h2->next0 = js->hedges; + js->hedges = h2; + + vtx = vertex_new(js, s, where); vtx->h = h1; h1->vtx = vtx; h2->vtx = vtx; - e = edge_new(s); + e = edge_new(js, s); e->left = h1; e->right = h2; h1->e = e; h2->e = e; - f1 = face_new(s, h1); - f2 = face_new(s, h2); + f1 = face_new(js, s, h1); + f2 = face_new(js, s, h2); h1->f = f1; h2->f = f2; @@ -542,14 +560,14 @@ static solid *solid_new(vector where) } /* This is all the code directly related to constructing the jigglypuff */ -static void face_tessel2(face *f) +static void face_tessel2(jigglystruct *js, 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); + f = face_split(js, f, h1, h2); h1 = f->start; h2 = f->start->next->next; } @@ -563,7 +581,7 @@ static void face_tessel2(face *f) * added at the head of the list. If that ever changes, * this is borked. */ -static void solid_tesselate(solid *s) +static void solid_tesselate(jigglystruct *js, solid *s) { edge *e = s->edges; face *f = s->faces; @@ -571,11 +589,11 @@ static void solid_tesselate(solid *s) while(e) { vector v; midpoint(e->left->vtx->v, e->right->vtx->v, v); - vertex_split(e->left, v); + vertex_split(js, e->left, v); e = e->next; } while(f) { - face_tessel2(f); + face_tessel2(js, f); f=f->next; } } @@ -600,19 +618,19 @@ static solid *tetrahedron(jigglystruct *js) int i; vector_init(v, 1, 1, 1); - s = solid_new(v); + s = solid_new(js, v); vector_init(v, -1, -1, 1); h = s->faces->start; - vtx = vertex_split(h, v); + vtx = vertex_split(js, h, v); vector_init(v, -1, 1, -1); - vtx = vertex_split(vtx->h, v); + vtx = vertex_split(js, vtx->h, v); h = vtx->h; - f = face_split(s->faces, h, h->prev); + f = face_split(js, s->faces, h, h->prev); vector_init(v, 1, -1, -1); - vertex_split(f->start, v); + vertex_split(js, f->start, v); f = s->faces->next->next; h = f->start; - face_split(f, h, h->next->next); + face_split(js, f, h, h->next->next); if(js->color_style == COLOR_STYLE_FLOWERBOX) { f = s->faces; @@ -630,7 +648,7 @@ static solid *tesselated_tetrahedron(coord size, int iter, jigglystruct *js) { int i; for(i=0; i<iter; i++) { - solid_tesselate(s); + solid_tesselate(js, s); } return s; } @@ -768,9 +786,12 @@ static void update_shape(jigglystruct *js) static void init_texture(ModeInfo *mi) { + jigglystruct *js = &jss[MI_SCREEN(mi)]; XImage *img = image_data_to_ximage(mi->dpy, mi->xgwa.visual, jigglymap_png, sizeof(jigglymap_png)); + glGenTextures (1, &js->texid); + glBindTexture (GL_TEXTURE_2D, js->texid); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, img->data); @@ -959,7 +980,7 @@ ENTRYPOINT void draw_jigglypuff(ModeInfo *mi) { jigglystruct *js = &jss[MI_SCREEN(mi)]; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(js->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *js->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -1054,7 +1075,7 @@ ENTRYPOINT void init_jigglypuff(ModeInfo *mi) calculate_parameters(js, subdivs); if((js->glx_context = init_GL(mi)) != NULL) { - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(js->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *js->glx_context); setup_opengl(mi, js); reshape_jigglypuff(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } @@ -1069,6 +1090,41 @@ ENTRYPOINT void init_jigglypuff(ModeInfo *mi) js->do_wireframe, js->spooky, js->color_style, js->shininess);*/ } + +ENTRYPOINT void free_jigglypuff(ModeInfo *mi) +{ + jigglystruct *js = &jss[MI_SCREEN(mi)]; + + if (!js->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *js->glx_context); + + if (js->texid) glDeleteTextures(1, &js->texid); + if (js->trackball) gltrackball_free (js->trackball); + + while (js->faces) { + face *n = js->faces->next0; + free (js->faces); + js->faces = n; + } + while (js->edges) { + edge *n = js->edges->next0; + free (js->edges); + js->edges = n; + } + while (js->hedges) { + hedge *n = js->hedges->next0; + free (js->hedges); + js->hedges = n; + } + while (js->vertices) { + vertex *n = js->vertices->next0; + free (js->vertices); + js->vertices = n; + } + free (js->shape); + if (js->texid) glDeleteTextures (1, &js->texid); +} + XSCREENSAVER_MODULE ("JigglyPuff", jigglypuff) #endif /* USE_GL */ diff --git a/hacks/glx/jigsaw.c b/hacks/glx/jigsaw.c index 934dbcc..38716e2 100644 --- a/hacks/glx/jigsaw.c +++ b/hacks/glx/jigsaw.c @@ -59,7 +59,6 @@ "*suppressRotationAnimation: True\n" \ -# define free_jigsaw 0 # define release_jigsaw 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -1436,7 +1435,7 @@ draw_jigsaw (ModeInfo *mi) if (!jc->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(jc->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *jc->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -1504,6 +1503,22 @@ draw_jigsaw (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_jigsaw (ModeInfo *mi) +{ + jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; + + if (!jc->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *jc->glx_context); + + if (jc->trackball) free (jc->trackball); + if (jc->rot) free_rotator (jc->rot); + if (jc->texfont) free_texture_font (jc->texfont); + free_puzzle_grid (jc); + if (glIsList(jc->loading_dlist)) glDeleteLists(jc->loading_dlist, 1); +} + XSCREENSAVER_MODULE ("Jigsaw", jigsaw) #endif /* USE_GL */ diff --git a/hacks/glx/juggler3d.c b/hacks/glx/juggler3d.c index 0315029..1b7d7c6 100644 --- a/hacks/glx/juggler3d.c +++ b/hacks/glx/juggler3d.c @@ -640,6 +640,13 @@ ENTRYPOINT void free_juggle(ModeInfo *mi) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; + if (!sp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); + + if (sp->trackball) gltrackball_free (sp->trackball); + if (sp->rot) free_rotator (sp->rot); + if (sp->font_data) free_texture_font (sp->font_data); + if (sp->head != NULL) { while (sp->head->next != sp->head) { trajectory_destroy(sp->head->next); @@ -668,7 +675,6 @@ add_throw(ModeInfo *mi, char type, int h, Notation n, const char* name) ADD_ELEMENT(Trajectory, t, sp->head->prev); if(t == NULL){ /* Out of Memory */ - free_juggle(mi); return False; } t->object = NULL; @@ -909,7 +915,6 @@ part(ModeInfo *mi) t->action = CATCH; ADD_ELEMENT(Trajectory, nt, p); if(nt == NULL){ - free_juggle(mi); return False; } nt->object = NULL; @@ -2570,7 +2575,6 @@ refill_juggle(ModeInfo * mi) positions(sp); if (!projectile(sp)) { - free_juggle(mi); return; } @@ -2729,14 +2733,12 @@ init_juggle (ModeInfo * mi) /* create circular trajectory list */ ADD_ELEMENT(Trajectory, sp->head, sp->head); if(sp->head == NULL){ - free_juggle(mi); return; } /* create circular object list */ ADD_ELEMENT(Object, sp->objects, sp->objects); if(sp->objects == NULL){ - free_juggle(mi); return; } @@ -2828,7 +2830,7 @@ draw_juggle (ModeInfo *mi) if (!sp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); glShadeModel(GL_SMOOTH); diff --git a/hacks/glx/kaleidocycle.c b/hacks/glx/kaleidocycle.c index 884400f..b3a7fee 100644 --- a/hacks/glx/kaleidocycle.c +++ b/hacks/glx/kaleidocycle.c @@ -21,7 +21,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_kaleidocycle 0 # define release_kaleidocycle 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -414,7 +413,7 @@ draw_kaleidocycle (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -569,6 +568,19 @@ draw_kaleidocycle (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_kaleidocycle (ModeInfo *mi) +{ + kaleidocycle_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->rot2) free_rotator (bp->rot2); + if (bp->colors) free (bp->colors); +} + XSCREENSAVER_MODULE ("Kaleidocycle", kaleidocycle) #endif /* USE_GL */ diff --git a/hacks/glx/klein.c b/hacks/glx/klein.c index 1c042da..0fac5d2 100644 --- a/hacks/glx/klein.c +++ b/hacks/glx/klein.c @@ -137,7 +137,6 @@ static const char sccsid[] = "@(#)klein.c 1.1 08/10/04 xlockmore"; # define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ -# define free_klein 0 # define release_klein 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -2065,7 +2064,7 @@ ENTRYPOINT void draw_klein(ModeInfo *mi) if (!kb->glx_context) return; - glXMakeCurrent(display,window,*(kb->glx_context)); + glXMakeCurrent(display, window, *kb->glx_context); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); @@ -2089,11 +2088,21 @@ ENTRYPOINT void change_klein(ModeInfo *mi) if (!kb->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(kb->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *kb->glx_context); init(mi); } #endif /* !STANDALONE */ +ENTRYPOINT void free_klein(ModeInfo *mi) +{ + kleinstruct *kb = &klein[MI_SCREEN(mi)]; + if (!kb->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *kb->glx_context); + gltrackball_free (kb->trackballs[0]); + gltrackball_free (kb->trackballs[1]); + if (kb->tex_name) glDeleteTextures (1, &kb->tex_name); +} + XSCREENSAVER_MODULE ("Klein", klein) #endif /* USE_GL */ diff --git a/hacks/glx/lament.c b/hacks/glx/lament.c index 97ce18b..d84a58f 100644 --- a/hacks/glx/lament.c +++ b/hacks/glx/lament.c @@ -32,7 +32,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_lament 0 # define release_lament 0 #include "xlockmore.h" @@ -1768,7 +1767,7 @@ draw_lament (ModeInfo *mi) glDrawBuffer(GL_BACK); - glXMakeCurrent(dpy, window, *(lc->glx_context)); + glXMakeCurrent(dpy, window, *lc->glx_context); draw(mi); if (mi->fps_p) do_fps (mi); @@ -1781,6 +1780,23 @@ draw_lament (ModeInfo *mi) animate(mi); } +ENTRYPOINT void +free_lament (ModeInfo *mi) +{ + lament_configuration *lc = &lcs[MI_SCREEN(mi)]; + int i; + if (!lc->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *lc->glx_context); + if (lc->states) free (lc->states); + if (lc->trackball) gltrackball_free (lc->trackball); + if (lc->rot) free_rotator (lc->rot); + if (lc->texture) XDestroyImage (lc->texture); + for (i = 0; i < countof(all_objs); i++) + if (glIsList(lc->dlists[i])) glDeleteLists(lc->dlists[i], 1); + for (i = 0; i < countof(lc->texids); i++) + if (lc->texids[i]) glDeleteTextures (1, &lc->texids[i]); +} + XSCREENSAVER_MODULE ("Lament", lament) #endif /* USE_GL */ diff --git a/hacks/glx/lavalite.c b/hacks/glx/lavalite.c index 73d5805..8d484fe 100644 --- a/hacks/glx/lavalite.c +++ b/hacks/glx/lavalite.c @@ -70,7 +70,6 @@ "*geometry: 600x900\n" \ "*count: " DEF_COUNT " \n" \ -# define free_lavalite 0 # define release_lavalite 0 @@ -1423,7 +1422,7 @@ draw_lavalite (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glMatrixMode (GL_MODELVIEW); glPushMatrix (); @@ -1534,6 +1533,21 @@ draw_lavalite (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_lavalite (ModeInfo *mi) +{ + lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->balls) free (bp->balls); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->rot2) free_rotator (bp->rot2); + if (glIsList(bp->bottle_list)) glDeleteLists(bp->bottle_list, 1); + if (glIsList(bp->ball_list)) glDeleteLists(bp->ball_list, 1); +} + XSCREENSAVER_MODULE ("Lavalite", lavalite) #endif /* USE_GL */ diff --git a/hacks/glx/lockward.c b/hacks/glx/lockward.c index f15374b..2bd87e9 100644 --- a/hacks/glx/lockward.c +++ b/hacks/glx/lockward.c @@ -213,8 +213,7 @@ reshape_lockward (ModeInfo *mi, int width, int height) h = height / (GLfloat) width; } - glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), - *(ctx->glx_context)); + glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), *ctx->glx_context); glViewport (0, y, (GLint) width, (GLint) height); @@ -734,7 +733,7 @@ draw_lockward (ModeInfo *mi) if (!ctx->glx_context) return; - glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), *(ctx->glx_context)); + glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), *ctx->glx_context); glClear (GL_COLOR_BUFFER_BIT); @@ -937,11 +936,8 @@ free_lockward (ModeInfo *mi) lockward_context *ctx = &g_ctx[MI_SCREEN (mi)]; int i; - if (!ctx->glx_context) - return; - - glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), - *(ctx->glx_context)); + if (!ctx->glx_context) return; + glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), *ctx->glx_context); if (ctx->blink.noise) free (ctx->blink.noise); diff --git a/hacks/glx/maze3d.c b/hacks/glx/maze3d.c index 255839e..362d5d2 100755 --- a/hacks/glx/maze3d.c +++ b/hacks/glx/maze3d.c @@ -1170,7 +1170,7 @@ draw_maze (ModeInfo * mi) if (!maze->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(maze->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *maze->glx_context); glMatrixMode(GL_PROJECTION); glLoadIdentity(); @@ -1919,6 +1919,10 @@ ENTRYPOINT void free_maze (ModeInfo * mi) { maze_configuration *maze = &mazes[MI_SCREEN(mi)]; + int i; + + if (!maze->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *maze->glx_context); glDeleteTextures(1, &maze->wallTexture); glDeleteTextures(1, &maze->floorTexture); @@ -1937,16 +1941,14 @@ free_maze (ModeInfo * mi) glDeleteTextures(1, &maze->fractal4Texture); # endif - glDeleteLists(maze->dlists[ARROW], 4); - glDeleteLists(maze->dlists[INVERTER_TETRAHEDRON], 4); + for (i = 0; i < countof(maze->dlists); i++) + if (glIsList(maze->dlists[i])) glDeleteLists(maze->dlists[i], 1); free(maze->mazeGrid); free(maze->wallList); free(maze->inverterPosition); free(maze->gl3dTextPosition); free(maze->rats); - - memset(maze, 0, sizeof(*maze)); } diff --git a/hacks/glx/maze3d.man b/hacks/glx/maze3d.man index c60fd65..c60fd65 100755..100644 --- a/hacks/glx/maze3d.man +++ b/hacks/glx/maze3d.man diff --git a/hacks/glx/menger.c b/hacks/glx/menger.c index 249d224..96582e3 100644 --- a/hacks/glx/menger.c +++ b/hacks/glx/menger.c @@ -56,7 +56,6 @@ "*suppressRotationAnimation: True\n" \ -# define free_sponge 0 # define release_sponge 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -481,7 +480,7 @@ draw_sponge (ModeInfo *mi) if (!sp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -557,6 +556,21 @@ draw_sponge (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_sponge (ModeInfo *mi) +{ + sponge_configuration *sp = &sps[MI_SCREEN(mi)]; + if (!sp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); + if (sp->colors) free (sp->colors); + if (sp->rot) free_rotator (sp->rot); + if (sp->trackball) gltrackball_free (sp->trackball); + if (glIsList(sp->sponge_list0)) glDeleteLists(sp->sponge_list0, 1); + if (glIsList(sp->sponge_list1)) glDeleteLists(sp->sponge_list1, 1); + if (glIsList(sp->sponge_list2)) glDeleteLists(sp->sponge_list2, 1); +} + XSCREENSAVER_MODULE_2 ("Menger", menger, sponge) #endif /* USE_GL */ diff --git a/hacks/glx/mirrorblob.c b/hacks/glx/mirrorblob.c index eb746d1..42981bd 100644 --- a/hacks/glx/mirrorblob.c +++ b/hacks/glx/mirrorblob.c @@ -1729,7 +1729,7 @@ draw_mirrorblob(ModeInfo * mi) if (gp->waiting_for_image_p && gp->first_image_p) return; - glXMakeCurrent(display, window, *(gp->glx_context)); + glXMakeCurrent(display, window, *gp->glx_context); draw_scene(mi); if (mi->fps_p) do_fps (mi); glFinish(); @@ -1826,14 +1826,24 @@ ENTRYPOINT void free_mirrorblob(ModeInfo * mi) { mirrorblobstruct *gp = &Mirrorblob[MI_SCREEN(mi)]; + int i; + + if (!gp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *gp->glx_context); + 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->normals) free(gp->normals); if (gp->wall_shape) free(gp->wall_shape); if (gp->bump_shape) free(gp->bump_shape); + if (gp->trackball) gltrackball_free (gp->trackball); + + for (i = 0; i < NUM_TEXTURES; i++) + if (gp->textures[i]) glDeleteTextures(1, &gp->textures[i]); } XSCREENSAVER_MODULE ("MirrorBlob", mirrorblob) diff --git a/hacks/glx/moebius.c b/hacks/glx/moebius.c index 5ef2c0d..e3155ac 100644 --- a/hacks/glx/moebius.c +++ b/hacks/glx/moebius.c @@ -79,7 +79,6 @@ static const char sccsid[] = "@(#)moebius.c 5.01 2001/03/01 xlockmore"; #ifdef STANDALONE # define MODE_moebius -# define free_moebius 0 # define release_moebius 0 # define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ @@ -715,7 +714,7 @@ draw_moebius (ModeInfo * mi) if (!mp->glx_context) return; - glXMakeCurrent(display, window, *(mp->glx_context)); + glXMakeCurrent(display, window, *mp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -777,11 +776,20 @@ change_moebius (ModeInfo * mi) if (!mp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); pinit(); } #endif /* !STANDALONE */ +ENTRYPOINT void +free_moebius (ModeInfo * mi) +{ + moebiusstruct *mp = &moebius[MI_SCREEN(mi)]; + if (!mp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); + if (mp->trackball) gltrackball_free (mp->trackball); + if (mp->rot) free_rotator (mp->rot); +} XSCREENSAVER_MODULE ("Moebius", moebius) diff --git a/hacks/glx/moebiusgears.c b/hacks/glx/moebiusgears.c index 0f058b8..fdcd4e0 100644 --- a/hacks/glx/moebiusgears.c +++ b/hacks/glx/moebiusgears.c @@ -15,7 +15,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_mgears 0 # define release_mgears 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -344,7 +343,7 @@ draw_mgears (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glShadeModel(GL_SMOOTH); @@ -432,6 +431,18 @@ draw_mgears (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_mgears (ModeInfo *mi) +{ + mgears_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->gears) free (bp->gears); + if (bp->rot) free_rotator (bp->rot); + if (bp->trackball) gltrackball_free (bp->trackball); +} + XSCREENSAVER_MODULE_2 ("MoebiusGears", moebiusgears, mgears) #endif /* USE_GL */ diff --git a/hacks/glx/molecule.c b/hacks/glx/molecule.c index d8bc1d8..94d7dd3 100644 --- a/hacks/glx/molecule.c +++ b/hacks/glx/molecule.c @@ -33,7 +33,6 @@ "*wireframeThreshold: 150 \n" \ "*suppressRotationAnimation: True\n" \ -# define free_molecule 0 # define release_molecule 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -124,7 +123,7 @@ static const atom_data all_atom_data[] = { typedef struct { int id; /* sequence number in the PDB file */ - const char *label; /* The atom name */ + 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; @@ -136,7 +135,7 @@ typedef struct { typedef struct { - const char *label; /* description of this compound */ + char *label; /* description of this compound */ int natoms, atoms_size; int nbonds, bonds_size; molecule_atom *atoms; @@ -635,7 +634,7 @@ build_molecule (ModeInfo *mi, Bool transparent_p) static void push_atom (molecule *m, - int id, const char *label, + int id, char *label, GLfloat x, GLfloat y, GLfloat z) { m->natoms++; @@ -723,7 +722,7 @@ parse_pdb_data (molecule *m, const char *data, const char *filename, int line) !strcmp (n2 + strlen(n2) - 4, ".pdb")) n2[strlen(n2)-4] = 0; - if (m->label) free ((char *) m->label); + if (m->label) free (m->label); m->label = strdup (n2); free (name); } @@ -780,7 +779,8 @@ parse_pdb_data (molecule *m, const char *data, const char *filename, int line) int id; const char *end = strchr (s, '\n'); int L = end - s; - char *name = (char *) calloc (1, 4); + char *oname = (char *) calloc (1, 4); + char *name = oname; GLfloat x = -999, y = -999, z = -999; if (1 != sscanf (s+7, " %d ", &id)) @@ -816,12 +816,14 @@ parse_pdb_data (molecule *m, const char *data, const char *filename, int line) progname, filename, line, id, name, x, y, z); */ - push_atom (m, id, name, x, y, z); + push_atom (m, id, strdup(name), x, y, z); + free (oname); } else if (!strncmp (s, "HETATM ", 7)) { int id; - char *name = (char *) calloc (1, 4); + char *oname = (char *) calloc (1, 4); + char *name = oname; GLfloat x = -999, y = -999, z = -999; if (1 != sscanf (s+7, " %d ", &id)) @@ -839,7 +841,8 @@ parse_pdb_data (molecule *m, const char *data, const char *filename, int line) progname, filename, line, id, name, x, y, z); */ - push_atom (m, id, name, x, y, z); + push_atom (m, id, strdup(name), x, y, z); + free (oname); } else if (!strncmp (s, "CONECT ", 7)) { @@ -893,6 +896,7 @@ parse_pdb_file (molecule *m, const char *name) char *buf = (char *) malloc(1024 + strlen(name)); sprintf(buf, "%s: error reading \"%s\"", progname, name); perror(buf); + free(buf); return -1; } @@ -1001,7 +1005,7 @@ generate_molecule_formula (molecule *m) strcpy (s, m->label); strcat (s, "\n"); strcat (s, buf); - free ((char *) m->label); + free (m->label); free (buf); m->label = s; } @@ -1162,6 +1166,7 @@ load_molecules (ModeInfo *mi) if (mc->nmolecules == 0) /* do the builtins if no files */ { mc->nmolecules = countof(builtin_pdb_data); + if (mc->molecules) free (mc->molecules); mc->molecules = (molecule *) calloc (sizeof (molecule), mc->nmolecules); for (i = 0; i < mc->nmolecules; i++) { @@ -1557,7 +1562,7 @@ draw_molecule (ModeInfo *mi) if (!mc->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mc->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mc->glx_context); if (mc->draw_time == 0) { @@ -1677,6 +1682,35 @@ draw_molecule (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_molecule (ModeInfo *mi) +{ + molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; + int i, j; + + if (!mc->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mc->glx_context); + + for (i = 0; i < mc->nmolecules; i++) { + molecule *m = &mc->molecules[i]; + for (j = 0; j < m->natoms; j++) + free (m->atoms[j].label); + free (m->atoms); + free (m->bonds); + free (m->label); + } + if (mc->molecules) free (mc->molecules); + if (mc->trackball) gltrackball_free (mc->trackball); + if (mc->rot) free_rotator (mc->rot); + if (mc->atom_font) free_texture_font (mc->atom_font); + if (mc->title_font) free_texture_font (mc->title_font); + + if (glIsList(mc->molecule_dlist)) glDeleteLists(mc->molecule_dlist, 1); + if (glIsList(mc->shell_dlist)) glDeleteLists(mc->shell_dlist, 1); + if (glIsList(mc->molecule_dlist)) glDeleteLists(mc->molecule_dlist, 1); +} + XSCREENSAVER_MODULE ("Molecule", molecule) #endif /* USE_GL */ diff --git a/hacks/glx/morph3d.c b/hacks/glx/morph3d.c index 0780444..0f37223 100644 --- a/hacks/glx/morph3d.c +++ b/hacks/glx/morph3d.c @@ -58,7 +58,6 @@ static const char sccsid[] = "@(#)morph3d.c 5.01 2001/03/01 xlockmore"; "*count: 0 \n" \ "*suppressRotationAnimation: True\n" \ -# define free_morph3d 0 # define release_morph3d 0 # define morph3d_handle_event xlockmore_no_events # include "xlockmore.h" /* from the xscreensaver distribution */ @@ -760,7 +759,7 @@ draw_morph3d(ModeInfo * mi) return; mi->polygon_count = 0; - glXMakeCurrent(display, window, *(mp->glx_context)); + glXMakeCurrent(display, window, *mp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -832,6 +831,12 @@ change_morph3d(ModeInfo * mi) } #endif /* !STANDALONE */ +ENTRYPOINT void +free_morph3d(ModeInfo * mi) +{ + /* nothing to do */ +} + #endif XSCREENSAVER_MODULE ("Morph3D", morph3d) diff --git a/hacks/glx/noof.c b/hacks/glx/noof.c index 4e42840..2349b07 100644 --- a/hacks/glx/noof.c +++ b/hacks/glx/noof.c @@ -19,7 +19,6 @@ "*doubleBuffer: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_noof 0 # define release_noof 0 # define noof_handle_event 0 #include "xlockmore.h" @@ -379,7 +378,7 @@ draw_noof (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -398,6 +397,7 @@ draw_noof (ModeInfo *mi) glBindTexture (GL_TEXTURE_2D, bp->screenshot_texture); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glColor3f (1, 1, 1); glBegin (GL_QUADS); glTexCoord2f (0, 0); glVertex3f (0, 0, 0); glTexCoord2f (tw, 0); glVertex3f (bp->wd, 0, 0); @@ -514,6 +514,16 @@ init_noof (ModeInfo *mi) } +ENTRYPOINT void +free_noof (ModeInfo *mi) +{ + noof_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->screenshot_texture) glDeleteTextures (1, &bp->screenshot_texture); +} + + XSCREENSAVER_MODULE ("Noof", noof) #endif /* USE_GL */ diff --git a/hacks/glx/peepers.c b/hacks/glx/peepers.c index 02ebab8..4d15ff8 100644 --- a/hacks/glx/peepers.c +++ b/hacks/glx/peepers.c @@ -22,7 +22,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -# define free_peepers 0 # define release_peepers 0 #define DEF_SPEED "1.0" @@ -1375,7 +1374,7 @@ draw_peepers (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -1450,6 +1449,25 @@ draw_peepers (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_peepers (ModeInfo *mi) +{ + peepers_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + for (i = 0; i < bp->nfloaters; i++) + free_rotator (bp->floaters[i].rot); + if (bp->floaters) free (bp->floaters); + if (glIsList(bp->lens_list)) glDeleteLists(bp->lens_list, 1); + if (glIsList(bp->sclera_list)) glDeleteLists(bp->sclera_list, 1); + if (glIsList(bp->iris_list)) glDeleteLists(bp->iris_list, 1); + if (glIsList(bp->retina_list)) glDeleteLists(bp->retina_list, 1); + if (bp->sclera_texture) glDeleteTextures (1, &bp->sclera_texture); + if (bp->iris_texture) glDeleteTextures (1, &bp->iris_texture); +} + XSCREENSAVER_MODULE ("Peepers", peepers) #endif /* USE_GL */ diff --git a/hacks/glx/photopile.c b/hacks/glx/photopile.c index e060f25..01d18d6 100644 --- a/hacks/glx/photopile.c +++ b/hacks/glx/photopile.c @@ -31,7 +31,6 @@ "*chooseRandomImages: True \n" \ "*suppressRotationAnimation: True\n" \ -# define free_photopile 0 # define release_photopile 0 # define photopile_handle_event xlockmore_no_events @@ -471,6 +470,7 @@ hack_resources (Display *dpy) value.addr = buf2; value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); + free (val); # endif /* !HAVE_JWXYZ */ } @@ -730,7 +730,7 @@ draw_photopile (ModeInfo *mi) if (!ss->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(ss->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *ss->glx_context); if (ss->mode == EARLY) if (loading_initial_image (mi)) @@ -828,6 +828,24 @@ draw_photopile (ModeInfo *mi) glXSwapBuffers (MI_DISPLAY (mi), MI_WINDOW(mi)); } + +ENTRYPOINT void +free_photopile (ModeInfo *mi) +{ + photopile_state *ss = &sss[MI_SCREEN(mi)]; + if (!ss->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *ss->glx_context); + if (ss->frames) { + int i; + for (i = 0; i < MI_COUNT(mi); i++) { + if (ss->frames[i].title) free (ss->frames[i].title); + if (ss->frames[i].texid) glDeleteTextures(1, &ss->frames[i].texid); + } + } + if (ss->shadow) glDeleteTextures(1, &ss->shadow); + if (ss->texfont) free_texture_font (ss->texfont); +} + XSCREENSAVER_MODULE ("Photopile", photopile) #endif /* USE_GL */ diff --git a/hacks/glx/pinion.c b/hacks/glx/pinion.c index f6793eb..956a444 100644 --- a/hacks/glx/pinion.c +++ b/hacks/glx/pinion.c @@ -16,7 +16,6 @@ "*titleFont2: -*-helvetica-medium-r-normal-*-*-120-*-*-*-*-*-*\n" \ "*titleFont3: -*-helvetica-medium-r-normal-*-*-80-*-*-*-*-*-*\n" \ -# define free_pinion 0 # define release_pinion 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -1355,7 +1354,7 @@ draw_pinion (ModeInfo *mi) if (!pp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(pp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *pp->glx_context); glPushMatrix(); glRotatef(current_device_rotation(), 0, 0, 1); @@ -1465,6 +1464,25 @@ draw_pinion (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_pinion (ModeInfo *mi) +{ + pinion_configuration *pp = &pps[MI_SCREEN(mi)]; + int i; + + if (!pp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *pp->glx_context); + + for (i = 0; i < pp->ngears; i++) + if (pp->gears[i]) free_gear (pp->gears[i]); + if (pp->gears) free (pp->gears); + if (pp->trackball) gltrackball_free (pp->trackball); + if (pp->font1) free_texture_font (pp->font1); + if (pp->font2) free_texture_font (pp->font2); + if (pp->font3) free_texture_font (pp->font3); +} + XSCREENSAVER_MODULE ("Pinion", pinion) #endif /* USE_GL */ diff --git a/hacks/glx/pipes.c b/hacks/glx/pipes.c index 24f9a2a..0112f93 100644 --- a/hacks/glx/pipes.c +++ b/hacks/glx/pipes.c @@ -183,7 +183,7 @@ typedef struct { GLXContext *glx_context; Bool button_down_p; - trackball_state *trackball; + trackball_state *trackball; GLuint *dlists, *poly_counts; int dlist_count, dlist_size; int system_index, system_size; @@ -1079,7 +1079,7 @@ draw_pipes (ModeInfo * mi) if (!pp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(pp->glx_context)); + 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); @@ -1166,7 +1166,7 @@ change_pipes (ModeInfo * mi) if (!pp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(pp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *pp->glx_context); pinit(mi, 1); } #endif /* !STANDALONE */ @@ -1177,42 +1177,41 @@ free_pipes (ModeInfo * mi) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; - 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); - } - } + if (!pp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *pp->glx_context); + + if (pp->trackball) gltrackball_free (pp->trackball); + + 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); + } } XSCREENSAVER_MODULE ("Pipes", pipes) diff --git a/hacks/glx/polyhedra-gl.c b/hacks/glx/polyhedra-gl.c index 507d295..00f6bd4 100644 --- a/hacks/glx/polyhedra-gl.c +++ b/hacks/glx/polyhedra-gl.c @@ -24,7 +24,6 @@ "*suppressRotationAnimation: True\n" \ -# define free_polyhedra 0 # define release_polyhedra 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -581,7 +580,7 @@ draw_polyhedra (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); if (bp->mode == 0 && do_which >= 0 && bp->change_to < 0) ; @@ -678,6 +677,27 @@ draw_polyhedra (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_polyhedra (ModeInfo *mi) +{ + polyhedra_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + for (i = 0; i < bp->npolyhedra; i++) + free_polyhedron (bp->polyhedra[i]); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->colors) free (bp->colors); + if (bp->font1_data) free_texture_font (bp->font1_data); + if (bp->font2_data) free_texture_font (bp->font2_data); + if (bp->font3_data) free_texture_font (bp->font3_data); + if (glIsList(bp->object_list)) glDeleteLists(bp->object_list, 1); +} + XSCREENSAVER_MODULE ("Polyhedra", polyhedra) #endif /* USE_GL */ diff --git a/hacks/glx/polyhedra.c b/hacks/glx/polyhedra.c index a7699c9..98e6891 100644 --- a/hacks/glx/polyhedra.c +++ b/hacks/glx/polyhedra.c @@ -2406,6 +2406,7 @@ free_polyhedron (polyhedron *p) Free (p->name); Free (p->group); Free (p->class); + Free (p->points); if (p->faces) { int i; diff --git a/hacks/glx/polytopes.c b/hacks/glx/polytopes.c index 76c1287..c704722 100644 --- a/hacks/glx/polytopes.c +++ b/hacks/glx/polytopes.c @@ -93,7 +93,6 @@ static const char sccsid[] = "@(#)polytopes.c 1.2 05/09/28 xlockmore"; "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_polytopes 0 # define release_polytopes 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -3097,7 +3096,7 @@ ENTRYPOINT void draw_polytopes(ModeInfo *mi) if (!hp->glx_context) return; - glXMakeCurrent(display,window,*(hp->glx_context)); + glXMakeCurrent(display, window, *hp->glx_context); glMatrixMode(GL_PROJECTION); @@ -3179,11 +3178,20 @@ ENTRYPOINT void change_polytopes(ModeInfo *mi) if (!hp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(hp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *hp->glx_context); init(mi); } #endif /* !STANDALONE */ +ENTRYPOINT void free_polytopes(ModeInfo *mi) +{ + polytopesstruct *hp = &poly[MI_SCREEN(mi)]; + if (!hp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *hp->glx_context); + gltrackball_free (hp->trackballs[0]); + gltrackball_free (hp->trackballs[1]); +} + XSCREENSAVER_MODULE ("Polytopes", polytopes) #endif /* USE_GL */ diff --git a/hacks/glx/projectiveplane.c b/hacks/glx/projectiveplane.c index 2a1e566..3a052ea 100644 --- a/hacks/glx/projectiveplane.c +++ b/hacks/glx/projectiveplane.c @@ -219,7 +219,6 @@ static const char sccsid[] = "@(#)projectiveplane.c 1.1 14/01/01 xlockmore"; # define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ -# define free_projectiveplane 0 # define release_projectiveplane 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -1516,7 +1515,7 @@ ENTRYPOINT void draw_projectiveplane(ModeInfo *mi) if (!pp->glx_context) return; - glXMakeCurrent(display,window,*(pp->glx_context)); + glXMakeCurrent(display, window, *pp->glx_context); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); @@ -1540,11 +1539,21 @@ ENTRYPOINT void change_projectiveplane(ModeInfo *mi) if (!pp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(pp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *pp->glx_context); init(mi); } #endif /* !STANDALONE */ +ENTRYPOINT void free_projectiveplane(ModeInfo *mi) +{ + projectiveplanestruct *pp = &projectiveplane[MI_SCREEN(mi)]; + if (!pp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *pp->glx_context); + gltrackball_free (pp->trackballs[0]); + gltrackball_free (pp->trackballs[1]); + if (pp->tex_name) glDeleteTextures (1, &pp->tex_name); +} + XSCREENSAVER_MODULE ("ProjectivePlane", projectiveplane) #endif /* USE_GL */ diff --git a/hacks/glx/providence.c b/hacks/glx/providence.c index d628845..0ef87fd 100644 --- a/hacks/glx/providence.c +++ b/hacks/glx/providence.c @@ -19,7 +19,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" -# define free_providence 0 # define release_providence 0 #include "xlockmore.h" #else @@ -101,6 +100,8 @@ typedef struct { double theta; double theta_scale; + /* This structure is so large that debugging malloc requires + $MALLOC_PERMIT_INSANE_REQUESTS to be set under iOS... */ double particles[PARTICLE_COUNT][5]; int eyeparticles[EYE_PARTICLE_COUNT][2]; double lookup[LOOKUPSIZE][EYELENGTH][2]; @@ -713,7 +714,7 @@ ENTRYPOINT void draw_providence(ModeInfo * mi) if(!mp->glx_context) return; - glXMakeCurrent(display, window, *(mp->glx_context)); + glXMakeCurrent(display, window, *mp->glx_context); /* setup twoside lighting */ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient2); @@ -791,9 +792,19 @@ ENTRYPOINT void change_providence(ModeInfo * mi) if (!mp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); pinit(); } #endif /* !STANDALONE */ +ENTRYPOINT void free_providence(ModeInfo * mi) +{ + providencestruct *mp = &providence[MI_SCREEN(mi)]; + if (!mp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *mp->glx_context); + gltrackball_free (mp->trackball); + if (glIsList(mp->pyramidlist)) glDeleteLists(mp->pyramidlist, 1); + if (mp->bricktexture) glDeleteTextures (1, &mp->bricktexture); +} + XSCREENSAVER_MODULE ("Providence", providence) diff --git a/hacks/glx/pulsar.c b/hacks/glx/pulsar.c index 285b5de..4a3e79e 100644 --- a/hacks/glx/pulsar.c +++ b/hacks/glx/pulsar.c @@ -467,7 +467,7 @@ ENTRYPOINT void draw_pulsar(ModeInfo * mi) if (!gp->glx_context) return; - glXMakeCurrent(display, window, *(gp->glx_context)); + glXMakeCurrent(display, window, *gp->glx_context); drawScene(mi); if (mi->fps_p) do_fps (mi); glXSwapBuffers(display, window); @@ -508,7 +508,10 @@ init_pulsar(ModeInfo * mi) ENTRYPOINT void free_pulsar(ModeInfo * mi) { pulsarstruct *gp = &Pulsar[MI_SCREEN(mi)]; + if (!gp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *gp->glx_context); free(gp->quads); + if (glIsList(gp->quad_list)) glDeleteLists(gp->quad_list, 1); } #endif diff --git a/hacks/glx/quasicrystal.c b/hacks/glx/quasicrystal.c index b82f470..52f819e 100644 --- a/hacks/glx/quasicrystal.c +++ b/hacks/glx/quasicrystal.c @@ -24,7 +24,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_quasicrystal 0 # define release_quasicrystal 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -308,7 +307,7 @@ draw_quasicrystal (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -473,6 +472,24 @@ draw_quasicrystal (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_quasicrystal (ModeInfo *mi) +{ + quasicrystal_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + for (i = 0; i < bp->count; i++) { + free_rotator (bp->planes[i].rot); + free_rotator (bp->planes[i].rot2); + if (bp->planes[i].texid) glDeleteTextures (1, &bp->planes[i].texid); + } + if (bp->planes) free (bp->planes); + if (bp->colors) free (bp->colors); + +} + XSCREENSAVER_MODULE ("QuasiCrystal", quasicrystal) #endif /* USE_GL */ diff --git a/hacks/glx/queens.c b/hacks/glx/queens.c index bc9b202..fce9d37 100644 --- a/hacks/glx/queens.c +++ b/hacks/glx/queens.c @@ -22,7 +22,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -# define free_queens 0 # define release_queens 0 # include "xlockmore.h" @@ -576,7 +575,7 @@ ENTRYPOINT void draw_queens(ModeInfo *mi) if(!qs->glx_context) return; - glXMakeCurrent(disp, w, *(qs->glx_context)); + glXMakeCurrent(disp, w, *qs->glx_context); if(flat) glShadeModel(GL_FLAT); @@ -605,6 +604,20 @@ ENTRYPOINT void draw_queens(ModeInfo *mi) glXSwapBuffers(disp, w); } + +ENTRYPOINT void free_queens(ModeInfo *mi) +{ + Queenscreen *qs = &qss[MI_SCREEN(mi)]; + int i; + if (!qs->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *qs->glx_context); + gltrackball_free (qs->trackball); + + /* this is horrible! List numbers are hardcoded! */ + for (i = 1; i <= 20; i++) + if (glIsList(i)) glDeleteLists(i, 1); +} + XSCREENSAVER_MODULE ("Queens", queens) #endif diff --git a/hacks/glx/quickhull.h b/hacks/glx/quickhull.h index 0dd0faa..161b74e 100644 --- a/hacks/glx/quickhull.h +++ b/hacks/glx/quickhull.h @@ -22,14 +22,9 @@ #define __QUICKHULL_H__ typedef struct qh_vertex { - union { - double v[3]; - struct { - double x; - double y; - double z; - }; - }; + double x; + double y; + double z; } qh_vertex_t; typedef qh_vertex_t qh_vec3_t; diff --git a/hacks/glx/raverhoop.c b/hacks/glx/raverhoop.c index 5cf35f7..e08fdad 100644 --- a/hacks/glx/raverhoop.c +++ b/hacks/glx/raverhoop.c @@ -16,7 +16,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -# define free_hoop 0 # define release_hoop 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -715,7 +714,7 @@ draw_hoop (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -762,6 +761,31 @@ draw_hoop (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_hoop (ModeInfo *mi) +{ + hoop_configuration *bp = &bps[MI_SCREEN(mi)]; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->lights) free (bp->lights); + while (bp->trail) { + afterimage *n = bp->trail->next; + free (bp->trail); + bp->trail = n; + } + while (bp->oscillators) { + oscillator *n = bp->oscillators->next; + free (bp->oscillators); + bp->oscillators = n; + } + +} + XSCREENSAVER_MODULE_2 ("RaverHoop", raverhoop, hoop) #endif /* USE_GL */ diff --git a/hacks/glx/razzledazzle.c b/hacks/glx/razzledazzle.c index a3c8f98..4c940d1 100644 --- a/hacks/glx/razzledazzle.c +++ b/hacks/glx/razzledazzle.c @@ -571,7 +571,7 @@ draw_dazzle (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glShadeModel(GL_SMOOTH); glDisable(GL_DEPTH_TEST); @@ -709,6 +709,10 @@ ENTRYPOINT void free_dazzle (ModeInfo *mi) { dazzle_configuration *bp = &bps[MI_SCREEN(mi)]; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->nodes) free (bp->nodes); if (bp->colors) free (bp->colors); if (bp->dlists) diff --git a/hacks/glx/romanboy.c b/hacks/glx/romanboy.c index 9ad12f0..e906082 100644 --- a/hacks/glx/romanboy.c +++ b/hacks/glx/romanboy.c @@ -1497,7 +1497,7 @@ ENTRYPOINT void draw_romanboy(ModeInfo *mi) if (!pp->glx_context) return; - glXMakeCurrent(display,window,*(pp->glx_context)); + glXMakeCurrent(display, window, *pp->glx_context); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); @@ -1524,14 +1524,15 @@ ENTRYPOINT void free_romanboy(ModeInfo *mi) { romanboystruct *pp = &romanboy[MI_SCREEN(mi)]; - 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); + if (!pp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *pp->glx_context); + + if (pp->pp) free(pp->pp); + if (pp->pn) free(pp->pn); + if (pp->col) free(pp->col); + if (pp->tex) free(pp->tex); + gltrackball_free (pp->trackball); + if (pp->tex_name) glDeleteTextures (1, &pp->tex_name); } #ifndef STANDALONE @@ -1542,7 +1543,7 @@ ENTRYPOINT void change_romanboy(ModeInfo *mi) if (!pp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(pp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *pp->glx_context); init(mi); } #endif /* !STANDALONE */ diff --git a/hacks/glx/rubik.c b/hacks/glx/rubik.c index ed06645..e0182cf 100644 --- a/hacks/glx/rubik.c +++ b/hacks/glx/rubik.c @@ -1460,7 +1460,7 @@ rotateFace(rubikstruct * rp, int face, int direction) /* DrawSquare(face, position); */ } if (faceLoc != NULL) - (void) free((void *) faceLoc); + free(faceLoc); return True; } @@ -1728,7 +1728,7 @@ shuffle(ModeInfo * mi) for (face = 0; face < MAXFACES; face++) { if (rp->cubeLoc[face] != NULL) - (void) free((void *) rp->cubeLoc[face]); + free(rp->cubeLoc[face]); if ((rp->cubeLoc[face] = (RubikLoc *) malloc(sizeFace(rp, face) * sizeof (RubikLoc))) == NULL) { return False; @@ -1740,7 +1740,7 @@ shuffle(ModeInfo * mi) } for (i = 0; i < MAXORIENT; i++) { if (rp->rowLoc[i] != NULL) - (void) free((void *) rp->rowLoc[i]); + free(rp->rowLoc[i]); /* The following is reused so make it the biggest size */ if ((rp->rowLoc[i] = (RubikLoc *) malloc(MAXMAXSIZE * sizeof (RubikLoc))) == NULL) { @@ -1750,7 +1750,7 @@ shuffle(ModeInfo * mi) rp->storedmoves = MI_COUNT(mi); if (rp->storedmoves < 0) { if (rp->moves != NULL) - (void) free((void *) rp->moves); + free(rp->moves); rp->moves = (RubikMove *) NULL; rp->storedmoves = NRAND(-rp->storedmoves) + 1; } @@ -1880,18 +1880,23 @@ free_rubik(ModeInfo *mi) rubikstruct *rp = &rubik[MI_SCREEN(mi)]; int i; + if (!rp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *rp->glx_context); + + if (rp->trackball) gltrackball_free (rp->trackball); + for (i = 0; i < MAXFACES; i++) if (rp->cubeLoc[i] != NULL) { - (void) free((void *) rp->cubeLoc[i]); + free(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]); + free(rp->rowLoc[i]); rp->rowLoc[i] = (RubikLoc *) NULL; } if (rp->moves != NULL) { - (void) free((void *) rp->moves); + free(rp->moves); rp->moves = (RubikMove *) NULL; } } @@ -1945,7 +1950,7 @@ draw_rubik(ModeInfo * mi) return; mi->polygon_count = 0; - glXMakeCurrent(display, window, *(rp->glx_context)); + glXMakeCurrent(display, window, *rp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); diff --git a/hacks/glx/rubikblocks.c b/hacks/glx/rubikblocks.c index fadeb0d..6082f09 100644 --- a/hacks/glx/rubikblocks.c +++ b/hacks/glx/rubikblocks.c @@ -22,7 +22,6 @@ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_rubikblocks 0 # define release_rubikblocks 0 #include "xlockmore.h" #include "rotator.h" @@ -592,7 +591,7 @@ draw_rubikblocks(ModeInfo * mi) MI_IS_DRAWN(mi) = True; if (!cp->glx_context) return; mi->polygon_count = 0; - glXMakeCurrent(display, window, *(cp->glx_context)); + glXMakeCurrent(display, window, *cp->glx_context); if (!draw_main(mi, cp)) { MI_ABORT(mi); @@ -609,7 +608,7 @@ 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)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cp->glx_context); init_gl(mi); } #endif /* !STANDALONE */ @@ -628,6 +627,17 @@ rubikblocks_handle_event (ModeInfo *mi, XEvent *event) } +ENTRYPOINT void +free_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); + if (cp->trackball) gltrackball_free (cp->trackball); + glDeleteLists (cp->list_base, 27); +} + + XSCREENSAVER_MODULE ("RubikBlocks", rubikblocks) #endif diff --git a/hacks/glx/sballs.c b/hacks/glx/sballs.c index 6cd95f5..e0fccd3 100644 --- a/hacks/glx/sballs.c +++ b/hacks/glx/sballs.c @@ -724,7 +724,7 @@ ENTRYPOINT void draw_sballs(ModeInfo * mi) if (!sb->glx_context) return; - glXMakeCurrent(display, window, *(sb->glx_context)); + glXMakeCurrent(display, window, *sb->glx_context); Draw(mi); #ifndef STANDALONE Reshape(mi); /* xlock mode */ @@ -747,21 +747,23 @@ ENTRYPOINT void draw_sballs(ModeInfo * mi) ENTRYPOINT void free_sballs(ModeInfo * mi) { sballsstruct *sb = &sballs[MI_SCREEN(mi)]; - if (sb->glx_context) + + if (!sb->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *sb->glx_context); + + gltrackball_free (sb->trackball); + + if (sb->btexture) { - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sb->glx_context)); - if (sb->btexture) - { - glDeleteTextures(1,&sb->backid); - XDestroyImage(sb->btexture); - sb->btexture = 0; - } - if (sb->ftexture) - { - glDeleteTextures(1,&sb->faceid); - XDestroyImage(sb->ftexture); - sb->ftexture = 0; - } + glDeleteTextures(1,&sb->backid); + XDestroyImage(sb->btexture); + sb->btexture = 0; + } + if (sb->ftexture) + { + glDeleteTextures(1,&sb->faceid); + XDestroyImage(sb->ftexture); + sb->ftexture = 0; } } @@ -813,7 +815,7 @@ ENTRYPOINT void change_sballs(ModeInfo * mi) do_texture ? "on" : "off" ); } - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sb->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sb->glx_context); } #endif /* !STANDALONE */ diff --git a/hacks/glx/sierpinski3d.c b/hacks/glx/sierpinski3d.c index 0317299..3740f22 100644 --- a/hacks/glx/sierpinski3d.c +++ b/hacks/glx/sierpinski3d.c @@ -550,7 +550,7 @@ draw_gasket(ModeInfo * mi) if (max_depth > 10) max_depth = 10; - glXMakeCurrent(display, window, *(gp->glx_context)); + glXMakeCurrent(display, window, *gp->glx_context); draw(mi); if (mi->fps_p) do_fps (mi); glFinish(); @@ -562,16 +562,17 @@ free_gasket(ModeInfo * mi) { gasketstruct *gp = &gasket[MI_SCREEN(mi)]; - if (gp->glx_context) - { - /* Display lists MUST be freed while their glXContext is current. */ - glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context)); + if (!gp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *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); - } + if (gp->trackball) gltrackball_free (gp->trackball); + if (gp->rot) free_rotator (gp->rot); + if (gp->colors) free (gp->colors); + + 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); } XSCREENSAVER_MODULE_2 ("Sierpinski3D", sierpinski3d, gasket) diff --git a/hacks/glx/skytentacles.c b/hacks/glx/skytentacles.c index 1061482..272a447 100644 --- a/hacks/glx/skytentacles.c +++ b/hacks/glx/skytentacles.c @@ -14,7 +14,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" \ -# define free_tentacles 0 # define release_tentacles 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -90,7 +89,6 @@ typedef struct { GLuint texid; Bool left_p; - } tentacles_configuration; @@ -994,7 +992,7 @@ draw_tentacles (ModeInfo *mi) if (!tc->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tc->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *tc->glx_context); glShadeModel(GL_SMOOTH); @@ -1098,6 +1096,30 @@ draw_tentacles (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_tentacles (ModeInfo *mi) +{ + tentacles_configuration *tc = &tcs[MI_SCREEN(mi)]; + int i, j; + + if (!tc->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *tc->glx_context); + + for (i = 0; i < tc->ntentacles; i++) { + for (j = 0; j < tc->tentacles[i]->nsegments; j++) + free_rotator (tc->tentacles[i]->segments[j].rot); + free (tc->tentacles[i]->segments); + free (tc->tentacles[i]); + } + if (tc->tentacles) free (tc->tentacles); + if (tc->torus_points) free (tc->torus_points); + if (tc->torus_normals) free (tc->torus_normals); + if (tc->texture) XDestroyImage (tc->texture); + if (tc->trackball) gltrackball_free (tc->trackball); + if (tc->texid) glDeleteTextures (1, &tc->texid); +} + XSCREENSAVER_MODULE_2 ("SkyTentacles", skytentacles, tentacles) #endif /* USE_GL */ diff --git a/hacks/glx/sonar-icmp.c b/hacks/glx/sonar-icmp.c index 3464c37..862f358 100644 --- a/hacks/glx/sonar-icmp.c +++ b/hacks/glx/sonar-icmp.c @@ -758,7 +758,9 @@ subnet_hosts (sonar_sensor_data *ssd, char **error_ret, char **desc_ret, mask_width (mask), mask); if (in2.s_addr == 0x0100007f || /* 127.0.0.1 in network order */ + ((in2.s_addr & 0x000000ff) == 0x7f) || /* 127.0.0.0/24 */ mask == 0) + /* Assume all 127 addresses are loopback, not just 127.0.0.1. */ continue; /* At least on the AT&T 3G network, pinging either of the two @@ -780,6 +782,10 @@ subnet_hosts (sonar_sensor_data *ssd, char **error_ret, char **desc_ret, in = in2; subnet_width = mask_width (mask); + + /* Take the first non-loopback network: prefer en0 over en1. */ + if (in.s_addr && subnet_width) + break; } if (in.s_addr) @@ -980,6 +986,8 @@ send_ping (ping_data *pd, const sonar_bogie *b) perror(buf); #endif } + + free (packet); } /* signal handler */ diff --git a/hacks/glx/sonar.c b/hacks/glx/sonar.c index c4ea949..ddbb79f 100644 --- a/hacks/glx/sonar.c +++ b/hacks/glx/sonar.c @@ -623,17 +623,20 @@ static void update_sensor_data (sonar_configuration *sp) { sonar_bogie *new_list = sp->ssd->scan_cb (sp->ssd); - sonar_bogie *b2; + sonar_bogie *b2, *next; /* 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) + for (b2 = new_list, next = b2 ? b2->next : 0; + b2; + b2 = next, next = next ? next->next : 0) { 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); + sonar_free_bogie (sp->ssd, b2); } if (debug_p > 2) fprintf (stderr, "\n"); } @@ -1041,7 +1044,7 @@ draw_sonar (ModeInfo *mi) if (!sp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -1227,13 +1230,16 @@ draw_sonar (ModeInfo *mi) ENTRYPOINT void free_sonar (ModeInfo *mi) { -#if 0 sonar_configuration *sp = &sps[MI_SCREEN(mi)]; sonar_bogie *b = sp->displayed; + + if (!sp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); + while (b) { sonar_bogie *next = b->next; - free_bogie (sp->ssd, b); + sonar_free_bogie (sp->ssd, b); b = next; } sp->displayed = 0; @@ -1242,15 +1248,24 @@ free_sonar (ModeInfo *mi) while (b) { sonar_bogie *next = b->next; - free_bogie (sp->ssd, b); + sonar_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 + if (sp->ssd) { + sp->ssd->free_data_cb (sp->ssd, sp->ssd->closure); + free (sp->ssd); + sp->ssd = 0; + } + + if (sp->trackball) gltrackball_free (sp->trackball); + if (sp->rot) free_rotator (sp->rot); + if (sp->texfont) free_texture_font (sp->texfont); + glDeleteLists (sp->table_list, 1); + glDeleteLists (sp->screen_list, 1); + glDeleteLists (sp->grid_list, 1); + glDeleteLists (sp->sweep_list, 1); } XSCREENSAVER_MODULE ("Sonar", sonar) diff --git a/hacks/glx/spheremonics.c b/hacks/glx/spheremonics.c index 9cefbf3..cf01c7d 100644 --- a/hacks/glx/spheremonics.c +++ b/hacks/glx/spheremonics.c @@ -66,7 +66,6 @@ "*suppressRotationAnimation: True\n" \ "*labelfont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" -# define free_spheremonics 0 # define release_spheremonics 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -796,7 +795,7 @@ draw_spheremonics (ModeInfo *mi) if (!cc->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cc->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cc->glx_context); gl_init(mi); @@ -877,6 +876,21 @@ draw_spheremonics (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_spheremonics (ModeInfo *mi) +{ + spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; + if (!cc->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *cc->glx_context); + if (cc->colors) free (cc->colors); + if (cc->trackball) gltrackball_free (cc->trackball); + if (cc->rot) free_rotator (cc->rot); + if (cc->font_data) free_texture_font (cc->font_data); + if (glIsList(cc->dlist)) glDeleteLists(cc->dlist, 1); + if (glIsList(cc->dlist2)) glDeleteLists(cc->dlist2, 1); +} + XSCREENSAVER_MODULE ("Spheremonics", spheremonics) #endif /* USE_GL */ diff --git a/hacks/glx/splitflap.c b/hacks/glx/splitflap.c index b84a359..8cc8eb4 100644 --- a/hacks/glx/splitflap.c +++ b/hacks/glx/splitflap.c @@ -283,6 +283,7 @@ parse_color (ModeInfo *mi, char *key, GLfloat color[4]) key, string); exit (1); } + free (string); color[0] = xcolor.red / 65536.0; color[1] = xcolor.green / 65536.0; @@ -1319,7 +1320,7 @@ draw_splitflap (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -1397,10 +1398,27 @@ ENTRYPOINT void free_splitflap (ModeInfo *mi) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; - if (bp->tc) - textclient_close (bp->tc); - bp->tc = 0; - /* #### bp->texinfo */ + int i; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + if (bp->flappers) free (bp->flappers); + if (bp->tc) textclient_close (bp->tc); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->rot2) free_rotator (bp->rot2); + if (bp->font_data) free_texture_font (bp->font_data); + if (bp->dlists) { + for (i = 0; i < countof(all_objs); i++) + if (glIsList(bp->dlists[i])) glDeleteLists(bp->dlists[i], 1); + free (bp->dlists); + } + if (bp->texinfo) { + for (i = 0; i < bp->texinfo_size; i++) + if (bp->texinfo[i].texid) glDeleteTextures (1, &bp->texinfo[i].texid); + free (bp->texinfo); + } } XSCREENSAVER_MODULE ("SplitFlap", splitflap) diff --git a/hacks/glx/splodesic.c b/hacks/glx/splodesic.c index 2823133..a68e992 100644 --- a/hacks/glx/splodesic.c +++ b/hacks/glx/splodesic.c @@ -575,7 +575,7 @@ draw_splodesic (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glShadeModel(GL_SMOOTH); @@ -627,12 +627,19 @@ ENTRYPOINT void free_splodesic (ModeInfo *mi) { splodesic_configuration *bp = &bps[MI_SCREEN(mi)]; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + while (bp->triangles) { triangle *t = bp->triangles->next; free (bp->triangles); bp->triangles = t; } + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->colors) free (bp->colors); } XSCREENSAVER_MODULE ("Splodesic", splodesic) diff --git a/hacks/glx/sproingies.c b/hacks/glx/sproingies.c index 1860b11..c0d5c9b 100644 --- a/hacks/glx/sproingies.c +++ b/hacks/glx/sproingies.c @@ -768,7 +768,7 @@ CleanupSproingies(sp_instance *si) glDeleteLists(si->TopsSides, 2); } if (si->positions) { - (void) free((void *) (si->positions)); + free((si->positions)); si->positions = NULL; } } diff --git a/hacks/glx/sproingiewrap.c b/hacks/glx/sproingiewrap.c index 7089f9c..c4eb759 100644 --- a/hacks/glx/sproingiewrap.c +++ b/hacks/glx/sproingiewrap.c @@ -181,7 +181,7 @@ draw_sproingies (ModeInfo * mi) return; glDrawBuffer(GL_BACK); - glXMakeCurrent(display, window, *(sp->glx_context)); + glXMakeCurrent(display, window, *sp->glx_context); glPushMatrix(); glRotatef(current_device_rotation(), 0, 0, 1); @@ -216,12 +216,9 @@ ENTRYPOINT void free_sproingies (ModeInfo * mi) { sproingiesstruct *sp = &sproingies[MI_SCREEN(mi)]; - - if (sp->glx_context) { - - glXMakeCurrent(MI_DISPLAY(mi), sp->window, *(sp->glx_context)); - CleanupSproingies(&sp->si); - } + if (!sp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); + CleanupSproingies(&sp->si); } XSCREENSAVER_MODULE ("Sproingies", sproingies) diff --git a/hacks/glx/stairs.c b/hacks/glx/stairs.c index 7b6fbe2..faf9a37 100644 --- a/hacks/glx/stairs.c +++ b/hacks/glx/stairs.c @@ -472,7 +472,7 @@ draw_stairs (ModeInfo * mi) if (!sp->glx_context) return; - glXMakeCurrent(display, window, *(sp->glx_context)); + glXMakeCurrent(display, window, *sp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -570,7 +570,7 @@ change_stairs (ModeInfo * mi) if (!sp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); pinit(); } #endif /* !STANDALONE */ @@ -579,9 +579,10 @@ ENTRYPOINT void free_stairs (ModeInfo * mi) { stairsstruct *sp = &stairs[MI_SCREEN(mi)]; - if (glIsList(sp->objects)) { - glDeleteLists(sp->objects, 1); - } + if (!sp->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); + if (glIsList(sp->objects)) glDeleteLists(sp->objects, 1); + if (sp->trackball) gltrackball_free (sp->trackball); } XSCREENSAVER_MODULE ("Stairs", stairs) diff --git a/hacks/glx/starwars.c b/hacks/glx/starwars.c index 1efcd15..bccd568 100644 --- a/hacks/glx/starwars.c +++ b/hacks/glx/starwars.c @@ -896,7 +896,7 @@ draw_sws (ModeInfo *mi) return; glDrawBuffer (GL_BACK); - glXMakeCurrent (dpy, window, *(sc->glx_context)); + glXMakeCurrent (dpy, window, *sc->glx_context); glClear (GL_COLOR_BUFFER_BIT); @@ -1057,10 +1057,18 @@ ENTRYPOINT void free_sws (ModeInfo *mi) { sws_configuration *sc = &scs[MI_SCREEN(mi)]; - if (sc->tc) - textclient_close (sc->tc); - - /* #### there's more to free here */ + int i; + if (!sc->glx_context) return; + glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *sc->glx_context); + if (sc->tc) textclient_close (sc->tc); + if (sc->texfont) free_texture_font (sc->texfont); + if (sc->buf) free (sc->buf); + if (sc->line_widths) free (sc->line_widths); + for (i = 0; i < sc->total_lines; i++) + if (sc->lines[i]) free (sc->lines[i]); + if (sc->lines) free (sc->lines); + if (glIsList(sc->star_list)) glDeleteLists(sc->star_list, 1); + if (glIsList(sc->text_list)) glDeleteLists(sc->text_list, 1); } diff --git a/hacks/glx/stonerview.c b/hacks/glx/stonerview.c index 880ef01..ff4e131 100644 --- a/hacks/glx/stonerview.c +++ b/hacks/glx/stonerview.c @@ -101,7 +101,7 @@ draw_stonerview (ModeInfo *mi) { stonerview_configuration *bp = &bps[MI_SCREEN(mi)]; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glPushMatrix (); glRotatef( current_device_rotation(), 0, 0, 1); @@ -132,6 +132,9 @@ ENTRYPOINT void free_stonerview (ModeInfo *mi) { stonerview_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->trackball) gltrackball_free (bp->trackball); if (bp->st) stonerview_win_release (bp->st); } diff --git a/hacks/glx/superquadrics.c b/hacks/glx/superquadrics.c index 3c08335..69dc920 100644 --- a/hacks/glx/superquadrics.c +++ b/hacks/glx/superquadrics.c @@ -78,7 +78,6 @@ static const char sccsid[] = "@(#)superquadrics.c 4.07 97/11/24 xlockmore"; "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_superquadrics 0 # define release_superquadrics 0 # define superquadrics_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ @@ -776,7 +775,7 @@ draw_superquadrics(ModeInfo * mi) if (!sp->glx_context) return; - glXMakeCurrent(display, window, *(sp->glx_context)); + glXMakeCurrent(display, window, *sp->glx_context); mi->polygon_count = NextSuperquadricDisplay(mi); @@ -800,6 +799,12 @@ reshape_superquadrics(ModeInfo * mi, int width, int height) } +ENTRYPOINT void +free_superquadrics(ModeInfo * mi) +{ + /* nothing to do */ +} + #endif /* End of superquadrics.c */ diff --git a/hacks/glx/surfaces.c b/hacks/glx/surfaces.c index 4c79740..26439d5 100644 --- a/hacks/glx/surfaces.c +++ b/hacks/glx/surfaces.c @@ -46,7 +46,6 @@ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_surface 0 # define release_surface 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -429,7 +428,7 @@ ENTRYPOINT void reshape_surface(ModeInfo *mi, int width, int height) h = height / (GLfloat) width; } - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); glViewport(0, y, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); @@ -634,7 +633,7 @@ ENTRYPOINT void draw_surface(ModeInfo * mi) glDrawBuffer(GL_BACK); - glXMakeCurrent(display, window, *(sp->glx_context)); + glXMakeCurrent(display, window, *sp->glx_context); draw(mi); if (mi->fps_p) do_fps(mi); @@ -643,6 +642,16 @@ ENTRYPOINT void draw_surface(ModeInfo * mi) } +ENTRYPOINT void free_surface(ModeInfo * mi) +{ + surfacestruct *sp = &surface[MI_SCREEN(mi)]; + if (!sp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context); + gltrackball_free (sp->trackball); + free_rotator (sp->rot); +} + + XSCREENSAVER_MODULE_2("Surfaces", surfaces, surface) #endif diff --git a/hacks/glx/tangram.c b/hacks/glx/tangram.c index c250f54..c90d611 100644 --- a/hacks/glx/tangram.c +++ b/hacks/glx/tangram.c @@ -22,7 +22,6 @@ "*titleFont2: -*-helvetica-medium-r-normal-*-*-120-*-*-*-*-*-*\n" \ "*titleFont3: -*-helvetica-medium-r-normal-*-*-80-*-*-*-*-*-*\n" \ -# define free_tangram 0 # define release_tangram 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -967,7 +966,7 @@ ENTRYPOINT void draw_tangram(ModeInfo * mi) if (! tp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *tp->glx_context); ls[small_triangle1] = &tp->tsm1; ls[small_triangle2] = &tp->tsm2; @@ -1060,7 +1059,16 @@ tangram_handle_event (ModeInfo *mi, XEvent *event) return False; } - +ENTRYPOINT void +free_tangram (ModeInfo *mi) +{ + tangram_configuration *tp = &tps[MI_SCREEN(mi)]; + if (!tp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *tp->glx_context); + if (tp->font1_data) free_texture_font (tp->font1_data); + if (tp->font2_data) free_texture_font (tp->font2_data); + if (tp->font3_data) free_texture_font (tp->font3_data); +} XSCREENSAVER_MODULE ("Tangram", tangram) diff --git a/hacks/glx/texfont.c b/hacks/glx/texfont.c index 540db9f..f879d50 100644 --- a/hacks/glx/texfont.c +++ b/hacks/glx/texfont.c @@ -1,4 +1,4 @@ -/* texfonts, Copyright (c) 2005-2017 Jamie Zawinski <jwz@jwz.org> +/* texfonts, Copyright (c) 2005-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -952,6 +952,7 @@ free_texture_font (texture_font_data *data) { texfont_cache *next = data->cache->next; glDeleteTextures (1, &data->cache->texid); + free (data->cache->string); free (data->cache); data->cache = next; } diff --git a/hacks/glx/timetunnel.c b/hacks/glx/timetunnel.c index 723d04d..2dd83be 100644 --- a/hacks/glx/timetunnel.c +++ b/hacks/glx/timetunnel.c @@ -23,7 +23,6 @@ -# define free_tunnel 0 # define release_tunnel 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -1061,7 +1060,7 @@ init_tunnel (ModeInfo *mi) tc->end_time = end; /* reset animation knots, effect 0 not defined. */ - tc->effects = malloc(sizeof(effect_t) * ( tc->num_effects + 1)); + tc->effects = calloc(sizeof(effect_t),tc->num_effects + 1); for ( i = 1; i <= tc->num_effects ; i++) init_effects(&tc->effects[i], i); @@ -1159,7 +1158,7 @@ draw_tunnel (ModeInfo *mi) if (!tc->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tc->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *tc->glx_context); glShadeModel(GL_SMOOTH); @@ -1235,6 +1234,29 @@ draw_tunnel (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_tunnel (ModeInfo *mi) +{ + tunnel_configuration *tc = &tconf[MI_SCREEN(mi)]; + int i; + if (!tc->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *tc->glx_context); + if (tc->trackball) gltrackball_free (tc->trackball); + if (tc->rot) free_rotator (tc->rot); + if (tc->texshift) free (tc->texshift); + if (tc->effects) { + for (i = 0; i < tc->num_effects; i++) { + if (tc->effects[i].knots) free (tc->effects[i].knots); + if (tc->effects[i].state) free (tc->effects[i].state); + } + free (tc->effects); + } + if (glIsList(tc->cyllist)) glDeleteLists(tc->cyllist, 1); + if (glIsList(tc->diamondlist)) glDeleteLists(tc->diamondlist, 1); + glDeleteTextures (MAX_TEXTURE, tc->texture_binds); +} + XSCREENSAVER_MODULE_2 ("TimeTunnel", timetunnel, tunnel) #endif /* USE_GL */ diff --git a/hacks/glx/topblock.c b/hacks/glx/topblock.c index 9161d38..59a463f 100644 --- a/hacks/glx/topblock.c +++ b/hacks/glx/topblock.c @@ -179,13 +179,20 @@ ENTRYPOINT void free_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); - } + NODE *llCurrent, *llOld; + + if (!tb->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *tb->glx_context); + + llCurrent = tb->blockNodeRoot; + while (llCurrent != NULL) { + llOld = llCurrent; + llCurrent = llCurrent->next; + free(llOld); + } + if (tb->trackball) gltrackball_free (tb->trackball); + if (glIsList(tb->carpet)) glDeleteLists(tb->carpet, 1); + if (glIsList(tb->block)) glDeleteLists(tb->block, 1); } /* setup */ @@ -309,7 +316,7 @@ draw_topBlock (ModeInfo *mi) if (!tb->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tb->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *tb->glx_context); mi->polygon_count = 0; generateNewBlock(mi); diff --git a/hacks/glx/tronbit.c b/hacks/glx/tronbit.c index b79309c..7354355 100644 --- a/hacks/glx/tronbit.c +++ b/hacks/glx/tronbit.c @@ -14,7 +14,6 @@ "*showFPS: False \n" \ "*wireframe: False \n" -# define free_bit 0 # define release_bit 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -456,7 +455,7 @@ draw_bit (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -531,6 +530,23 @@ draw_bit (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_bit (ModeInfo *mi) +{ + bit_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + for (i = 0; i < countof(bp->dlists); i++) + if (glIsList(bp->dlists[i])) glDeleteLists(bp->dlists[i], 1); + +} + XSCREENSAVER_MODULE_2 ("TronBit", tronbit, bit) #endif /* USE_GL */ diff --git a/hacks/glx/unicrud.c b/hacks/glx/unicrud.c index 7942252..3ddd480 100644 --- a/hacks/glx/unicrud.c +++ b/hacks/glx/unicrud.c @@ -15,7 +15,6 @@ "*titleFont: -*-helvetica-bold-r-normal-*-*-180-*-*-*-*-*-*\n" \ "*font: -*-helvetica-bold-r-normal-*-*-2400-*-*-*-*-iso10646-1\n" \ -# define free_unicrud 0 # define release_unicrud 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -879,7 +878,7 @@ draw_unicrud (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glShadeModel (GL_FLAT); glEnable (GL_NORMALIZE); @@ -956,6 +955,19 @@ draw_unicrud (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_unicrud (ModeInfo *mi) +{ + unicrud_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->rot) free_rotator (bp->rot); + if (bp->title_font) free_texture_font (bp->title_font); + if (bp->char_font) free_texture_font (bp->char_font); +} + XSCREENSAVER_MODULE_2 ("Unicrud", unicrud, unicrud) #endif /* USE_GL */ diff --git a/hacks/glx/unknownpleasures.c b/hacks/glx/unknownpleasures.c index 9802566..a52819f 100644 --- a/hacks/glx/unknownpleasures.c +++ b/hacks/glx/unknownpleasures.c @@ -1,4 +1,4 @@ -/* unknownpleasures, Copyright (c) 2013-2014 Jamie Zawinski <jwz@jwz.org> +/* unknownpleasures, Copyright (c) 2013-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -8,40 +8,48 @@ * 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 + * A very particular waterfall chart. * * Interestingly, the original image is copyright-free: * http://adamcap.com/2011/05/19/history-of-joy-division-unknown-pleasures-album-art/ + * https://blogs.scientificamerican.com/sa-visual/pop-culture-pulsar-origin-story-of-joy-division-s-unknown-pleasures-album-cover-video/ * 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. + * "Eighty successive periods of the first pulsar observed, CP1919 + * (Cambridge pulsar at 19 hours 19 minutes right ascension), are stacked + * on top of one another using the average period of 1.33730 seconds in + * this computer-generated illustration produced at the Arecibo Radio + * Observatory in Puerto Rico. Athough the leading edges of the radio + * pulses occur within a few thousandths of a second of the predicted + * times, the shape of the pulses is quite irregular. Some of this + * irregularity in radio reception is caused by the effects of + * transmission through the interstellar medium. The average pulse width + * is less than 50 thousandths of a second." * - * - There's too low periodicity vertically on the screen. + * TODO: * - * - There's too low periodicity in time. + * - Load images and feed them line by line into the plotter, so it scrolls. * - * - 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. + * - Same but use the image as a mask against the random graph data. * - * - At low resolutions, GL_POLYGON_OFFSET_FILL seems to work poorly - * and the lines get blocky. + * - Take a function generator program as a command line argument: + * read lines of N float values from it, interpolate to full width. */ +#define DEF_ORTHO "True" +#define DEF_SPEED "1.0" +#define DEF_RESOLUTION "100" +#define DEF_AMPLITUDE "0.13" +#define DEF_NOISE "1.0" +#define DEF_ASPECT "1.9" +#define DEF_BUZZ "False" #define DEFAULTS "*delay: 30000 \n" \ "*count: 80 \n" \ - "*resolution: 100 \n" \ - "*ortho: True \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*geometry: =800x800" "\n" \ -# define free_unk 0 # define release_unk 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -53,7 +61,15 @@ #ifdef USE_GL /* whole file */ -#define DEF_SPEED "1.0" +#undef DEBUG + +Bool ortho_arg; +GLfloat speed_arg; +int resolution_arg; +GLfloat amplitude_arg; +GLfloat noise_arg; +GLfloat aspect_arg; +Bool buzz_arg; typedef struct { @@ -61,38 +77,91 @@ typedef struct { trackball_state *trackball; Bool button_down_p; Bool orthop; - GLfloat resolution; - int count; - GLfloat t; + double speed, tick; + int resolution; /* X points */ + int count; /* Y lines */ + GLfloat amplitude; /* Z height */ + int frames; /* Number of renders of each line, for buzzing */ + GLfloat noise; /* Number of peaks in each line */ + GLfloat aspect; /* Shape of the plot */ + GLuint base; /* Display list for back */ + GLuint *lines; /* Display lists for each edge * face * frame */ + GLfloat *heights; /* Animated elevation / alpha of each line */ + GLfloat fg[4], bg[4]; /* Colors */ } unk_configuration; static unk_configuration *bps = NULL; -static GLfloat speed; - static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-resolution", ".resolution", XrmoptionSepArg, 0 }, + { "-amplitude", ".amplitude", XrmoptionSepArg, 0 }, + { "-noise", ".noise", XrmoptionSepArg, 0 }, + { "-aspect", ".aspect", XrmoptionSepArg, 0 }, { "-ortho", ".ortho", XrmoptionNoArg, "True" }, { "-no-ortho", ".ortho", XrmoptionNoArg, "False" }, + { "-buzz", ".buzz", XrmoptionNoArg, "True" }, + { "-no-buzz", ".buzz", XrmoptionNoArg, "False" }, }; static argtype vars[] = { - {&speed, "speed", "Speed", DEF_SPEED, t_Float}, + {&ortho_arg, "ortho", "Ortho", DEF_ORTHO, t_Bool}, + {&speed_arg, "speed", "Speed", DEF_SPEED, t_Float}, + {&resolution_arg, "resolution", "Resolution", DEF_RESOLUTION, t_Int}, + {&litude_arg, "amplitude", "Amplitude", DEF_AMPLITUDE, t_Float}, + {&noise_arg, "noise", "Noise", DEF_NOISE, t_Float}, + {&aspect_arg, "aspect", "Aspect", DEF_ASPECT, t_Float}, + {&buzz_arg, "buzz", "Buzz", DEF_BUZZ, t_Bool}, }; ENTRYPOINT ModeSpecOpt unk_opts = {countof(opts), opts, countof(vars), vars, NULL}; -/* Window management, etc +/* 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 +parse_color (ModeInfo *mi, char *res, char *class, GLfloat *a) +{ + XColor c; + char *s = get_string_resource(mi->dpy, res, class); + if (! XParseColor (MI_DISPLAY(mi), MI_COLORMAP(mi), s, &c)) + { + fprintf (stderr, "%s: can't parse %s color %s", progname, res, s); + exit (1); + } + if (s) free (s); + a[0] = c.red / 65536.0; + a[1] = c.green / 65536.0; + a[2] = c.blue / 65536.0; + a[3] = 1.0; +} + + ENTRYPOINT void reshape_unk (ModeInfo *mi, int width, int height) { unk_configuration *bp = &bps[MI_SCREEN(mi)]; + int wire = MI_IS_WIREFRAME(mi); GLfloat h = (GLfloat) height / (GLfloat) width; int y = 0; + int i; + int new_count; if (width > height * 5) { /* tiny window: show middle */ height = width*1.5; @@ -104,13 +173,15 @@ reshape_unk (ModeInfo *mi, int width, int height) if (bp->orthop) { + int magic = 700; + int range = 30; /* Must be small or glPolygonOffset doesn't work. */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); - gluPerspective (1.0, 1/h, 690, 710); + gluPerspective (1.0, 1/h, magic-range/2, magic+range/2); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - gluLookAt( 0, 0, 700, + gluLookAt( 0, 0, magic, 0, 0, 0, 0, 1, 0); if (width < height) @@ -121,7 +192,7 @@ reshape_unk (ModeInfo *mi, int width, int height) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); - gluPerspective (30.0, 1/h, 20.0, 40.0); + gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); @@ -132,10 +203,72 @@ reshape_unk (ModeInfo *mi, int width, int height) glScalef (1/h, 1/h, 1); } + new_count = MI_COUNT(mi); + +# if 0 + /* Lower the resolution to get a decent frame rate on iPhone 4s */ + if (mi->xgwa.width <= 640 || mi->xgwa.height <= 640) + new_count /= 3; +# endif + + /* Lower it even further for iPhone 3 */ + if (mi->xgwa.width <= 480 || mi->xgwa.height <= 480) + new_count /= 2; + + if (wire) new_count /= 2; + + if (new_count < 1) new_count = 1; + + if (bp->count != new_count || !bp->lines) + { + if (bp->lines) + { + for (i = 0; i < bp->count * bp->frames * 2; i++) + glDeleteLists (bp->lines[i], 1); + free (bp->lines); + free (bp->heights); + } + + bp->count = new_count; + bp->lines = (GLuint *) + malloc (bp->count * bp->frames * 2 * sizeof(*bp->lines)); + for (i = 0; i < bp->count * bp->frames * 2; i++) + bp->lines[i] = glGenLists (1); + bp->heights = (GLfloat *) calloc (bp->count, sizeof(*bp->heights)); + } + + { + GLfloat lw = 1; + GLfloat s = 1; + + if (MI_WIDTH(mi) > 2560) lw = 4; /* Retina displays */ +# ifdef HAVE_COCOA + else if (MI_WIDTH(mi) > 1280) lw = 3; /* WTF */ +# endif + else if (MI_WIDTH(mi) > 1920) lw = 3; + else if (mi->xgwa.width > 640 && mi->xgwa.height > 640) lw = 2; + +# ifdef HAVE_MOBILE + lw = 4; + s = 1.4; +# else + /* Make the image fill the screen a little more fully */ + if (mi->xgwa.width <= 640 || mi->xgwa.height <= 640) + s = 1.2; +# endif + + glScalef (s, s, s); + glLineWidth (lw); + } + glClear(GL_COLOR_BUFFER_BIT); } +# ifdef DEBUG +static GLfloat poly1 = 0, poly2 = 0; +# endif + ENTRYPOINT Bool unk_handle_event (ModeInfo *mi, XEvent *event) { @@ -161,6 +294,26 @@ unk_handle_event (ModeInfo *mi, XEvent *event) gltrackball_mousewheel (bp->trackball, b, speed, !!event->xbutton.state); return True; } + +# ifdef DEBUG + else if (event->type == KeyPress) + { + KeySym keysym; + char c = 0; + GLfloat i = 0.1; + XLookupString (&event->xkey, &c, 1, &keysym, 0); + switch (keysym) { + case XK_Up: poly1 += i; break; + case XK_Down: poly1 -= i; break; + case XK_Left: poly2 += i; break; + case XK_Right: poly2 -= i; break; + default: break; + } + fprintf (stderr,"%.2f %.2f\n", poly1, poly2); + return True; + } +# endif /* DEBUG */ + else if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) @@ -176,11 +329,117 @@ unk_handle_event (ModeInfo *mi, XEvent *event) } +/* Like cos but constrained to [-pi, +pi] */ +static GLfloat +cos1 (GLfloat th) +{ + if (th < -M_PI) th = -M_PI; + if (th > M_PI) th = M_PI; + return cos (th); +} + + +/* Returns an array of floats for one new row, range [0, 1.0] */ +static double * +generate_signal (ModeInfo *mi) +{ + unk_configuration *bp = &bps[MI_SCREEN(mi)]; + double *points = (double *) calloc (sizeof(*points), bp->resolution); + double *p; + int i, j; + int nspikes = (6 + frand(15)) * bp->noise; + double step = 1.0 / bp->resolution; + double r, max; + + for (j = 0; j < nspikes; j++) + { + double off = frand (0.8) - 0.4; + double amp = (0.1 + frand (0.9)) * nspikes; + double freq = (7 + frand (11)) * bp->noise; + for (i = 0, r = -0.5, p = points; + i < bp->resolution; + i++, r += step, p++) + *p += amp/2 + amp/2 * cos1 ((r + off) * M_PI * 2 * freq); + } + + /* Avoid clipping */ + max = nspikes; + if (max <= 0) max = 1; + for (i = 0, p = points; i < bp->resolution; i++, p++) + if (max < *p) max = *p; + + /* Multiply by baseline clipping curve, add static. */ + for (i = 0, r = -0.5, p = points; i < bp->resolution; i++, r += step, p++) + *p = ((*p / max) + * (0.5 + 0.5 * cos1 (r * r * M_PI * 14) * (1 - frand(0.2)))); + + return points; +} + + +static void +tick_unk (ModeInfo *mi) +{ + unk_configuration *bp = &bps[MI_SCREEN(mi)]; + int wire = MI_IS_WIREFRAME(mi); + double *points = generate_signal (mi); + int linesp, frame; + + /* Roll forward by one line (2 dlists per frame) */ + GLuint *cur = (GLuint *) malloc (bp->frames * 2 * sizeof(*cur)); + memcpy (cur, bp->lines, bp->frames * 2 * sizeof(*cur)); + memmove (bp->lines, bp->lines + 2 * bp->frames, + sizeof(*bp->lines) * (bp->count-1) * bp->frames * 2); + memcpy (bp->lines + (bp->count-1) * bp->frames * 2, cur, + bp->frames * 2 * sizeof(*cur)); + + memmove (bp->heights, bp->heights + 1, + sizeof(*bp->heights) * (bp->count-1)); + bp->heights[bp->count-1] = 0; + + /* Regenerate the pair at the bottom. */ + + for (frame = 0; frame < bp->frames; frame++) + { + mi->polygon_count = 0; + for (linesp = 0; linesp <= 1; linesp++) + { + int i; + + glNewList (cur[frame * 2 + !linesp], GL_COMPILE); + glBegin (linesp + ? GL_LINE_STRIP + : wire ? GL_LINES : GL_QUAD_STRIP); + for (i = 0; i < bp->resolution; i++) + { + GLfloat x = i / (GLfloat) bp->resolution; + GLfloat z = (points[i] + frand (0.05)) * bp->amplitude; + if (z < 0) z = 0; + if (z > bp->amplitude) z = bp->amplitude; + glVertex3f (x, 0, z); + if (! linesp) + glVertex3f (x, 0, 0); + mi->polygon_count++; + } + glEnd (); + glEndList (); + } + } + + mi->polygon_count *= bp->count; + mi->polygon_count += 5; /* base */ + + free (cur); + free (points); +} + ENTRYPOINT void init_unk (ModeInfo *mi) { unk_configuration *bp; + int wire = MI_IS_WIREFRAME(mi); + int i; MI_INIT (mi, bps); @@ -188,109 +447,110 @@ init_unk (ModeInfo *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"); + bp->orthop = ortho_arg; + bp->resolution = resolution_arg; + bp->amplitude = amplitude_arg; + bp->noise = noise_arg; + bp->aspect = aspect_arg; + bp->speed = speed_arg; + bp->frames = buzz_arg ? 15 : 1; if (bp->resolution < 1) bp->resolution = 1; if (bp->resolution > 300) bp->resolution = 300; + if (bp->amplitude < 0.01) bp->amplitude = 0.01; + if (bp->amplitude > 1) bp->amplitude = 1; + if (bp->noise < 0.01) bp->noise = 0.01; + if (bp->speed <= 0.001) bp->speed = 0.001; - reshape_unk (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); + parse_color (mi, "foreground", "Foreground", bp->fg); + parse_color (mi, "background", "Background", bp->bg); - bp->count = MI_COUNT(mi); - if (bp->count < 1) bp->count = 1; + reshape_unk (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); bp->trackball = gltrackball_init (False); if (MI_COUNT(mi) < 1) MI_COUNT(mi) = 1; + /* bp->count is set in reshape */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -} - - + bp->base = glGenLists (1); + glNewList (bp->base, GL_COMPILE); + { + GLfloat h1 = 0.01; + GLfloat h2 = 0.02; + GLfloat h3 = (h1 + h2) / 2; + GLfloat s = 0.505; + glBegin (wire ? GL_LINE_LOOP : GL_QUADS); + glVertex3f (-s, -s, -h1); + glVertex3f ( s, -s, -h1); + glVertex3f ( s, s, -h1); + glVertex3f (-s, s, -h1); + glEnd(); + glBegin (wire ? GL_LINE_LOOP : GL_QUADS); + glVertex3f (-s, -s, 0); + glVertex3f (-s, -s, -h2); + glVertex3f ( s, -s, -h2); + glVertex3f ( s, -s, 0); + glEnd(); + glBegin (wire ? GL_LINE_LOOP : GL_QUADS); + glVertex3f (-s, -s, 0); + glVertex3f (-s, -s, -h2); + glVertex3f (-s, s, -h2); + glVertex3f (-s, s, 0); + glEnd(); + glBegin (wire ? GL_LINE_LOOP : GL_QUADS); + glVertex3f ( s, -s, 0); + glVertex3f ( s, -s, -h2); + glVertex3f ( s, s, -h2); + glVertex3f ( s, s, 0); + glEnd(); + glBegin (wire ? GL_LINE_LOOP : GL_QUADS); + glVertex3f (-s, s, 0); + glVertex3f (-s, s, -h2); + glVertex3f ( s, s, -h2); + glVertex3f ( s, s, 0); + glEnd(); -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; + glColor3fv (bp->fg); + glBegin (GL_LINE_LOOP); + s -= 0.01; + glVertex3f (-s, -s, -h3); + glVertex3f ( s, -s, -h3); + glVertex3f ( s, s, -h3); + glVertex3f (-s, s, -h3); + glEnd(); + } + glEndList (); -# 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) + if (! wire) { - seed0 = (random() & 0xFFFFF); - fprintf(stderr, "seed0 = %8x %d\n", seed0, seed0); + glEnable (GL_LINE_SMOOTH); + glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); + glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable (GL_BLEND); } -# endif - long seed = seed0 * f; - seed = 48271 * (seed % 44488) - 3399 * (seed / 44488); - f = (double) seed / 0x7FFFFFFF; + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - return f; + for (i = 0; i < bp->count; i++) + tick_unk (mi); } -static void -compute_line (ModeInfo *mi, - int xmin, int xmax, GLfloat xinc, - GLfloat res_scale, - int y, - GLfloat *points) +static double +ease_fn (double r) { - 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)); - } + return cos ((r/2 + 1) * M_PI) + 1; /* Smooth curve up, end at slope 1. */ +} - /* Scale of this affects amplitude of the flat parts */ - points[x - xmin] = (0.2 * sin (2 * M_PI * R (6 * y) + hsum) + vsum); - } +static double +ease_ratio (double r) +{ + double 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; } @@ -298,32 +558,25 @@ ENTRYPOINT void draw_unk (ModeInfo *mi) { unk_configuration *bp = &bps[MI_SCREEN(mi)]; + int wire = MI_IS_WIREFRAME(mi); Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); - int wire = MI_IS_WIREFRAME(mi); - GLfloat aspect = 1.5; + GLfloat step = 1.0 / bp->count; + double speed = (0.6 / bp->speed) * (80.0 / bp->count); + double now = double_time(); + double ratio = (now - bp->tick) / speed; + int frame; + int i; - 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; + ratio = (ratio < 0 ? 0 : ratio > 1 ? 1 : ratio); if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + 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); @@ -333,152 +586,93 @@ draw_unk (ModeInfo *mi) 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); + + i = bp->orthop ? 15 : 17; + glScalef (i / bp->aspect, i, i / bp->aspect); + + glDisable (GL_POLYGON_OFFSET_FILL); + if (wire) + glColor3f (0.5 * bp->fg[0], 0.5 * bp->fg[1], 0.5 * bp->fg[2]); else - glTranslatef (0, 0.15, 0); + glColor4fv (bp->bg); + glCallList (bp->base); - points = (GLfloat *) malloc (sizeof(*points) * (xmax - xmin)); + /* So the masking quads don't interfere with the lines. + These numbers are empirical black magic. */ + glEnable (GL_POLYGON_OFFSET_FILL); - 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; +# ifdef DEBUG + glPolygonOffset (poly1, poly2); # else - bp->t += s; + glPolygonOffset (0.5, 0.5); # endif - } - glLineWidth (2); + glTranslatef (-0.5, 0.55 + step*ratio, 0); - /* Lower the resolution to get a decent frame rate on iPhone 4s */ - if (mi->xgwa.width <= 640 || mi->xgwa.height <= 640) + frame = random() % bp->frames; + for (i = 0; i < bp->count; i++) { - ytop *= 0.6; - xinc *= 3; + int j = i * bp->frames * 2 + frame * 2; + GLfloat s = ease_ratio (bp->heights[i]); + GLfloat s2 = ease_ratio (bp->heights[i] * 1.5); + + glPushMatrix(); + glScalef (1, 1, s); + glColor4f (bp->fg[0], bp->fg[1], bp->fg[2], s2); + glCallList (bp->lines[j]); /* curve */ + s = 1; + if (wire) + glColor4f (0.5 * bp->fg[0], 0.5 * bp->fg[1], 0.5 * bp->fg[2], s); + else + glColor4f (bp->bg[0], bp->bg[1], bp->bg[2], s); + glCallList (bp->lines[j+1]); /* shield */ + glPopMatrix(); + glTranslatef (0, -step, 0); } -# 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 /* HAVE_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; + glPopMatrix (); - /* 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 (mi->fps_p) do_fps (mi); + glFinish(); - if (! wire) + if (!bp->button_down_p) { - 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); - } + /* Set height/fade based on distance from either edge. */ + GLfloat dist = bp->count * 0.05; + int i; + for (i = 0; i < bp->count; i++) + { + GLfloat i2 = i - ratio; + GLfloat h = ((i2 < bp->count/2 ? i2 : (bp->count - 1 - i2)) + / dist); + bp->heights[i] = (h > 1 ? 1 : h < 0 ? 0 : h); + } - 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 (); - } - } + if (bp->tick + speed <= now) /* Add a new row. */ + { + tick_unk (mi); + bp->tick = now; + } } - free (points); + glXSwapBuffers(dpy, window); +} - glPopMatrix (); - if (mi->fps_p) do_fps (mi); - glFinish(); - - glXSwapBuffers(dpy, window); +ENTRYPOINT void +free_unk (ModeInfo *mi) +{ + unk_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->trackball) gltrackball_free (bp->trackball); + for (i = 0; i < bp->count * bp->frames * 2; i++) + glDeleteLists (bp->lines[i], 1); + free (bp->lines); + free (bp->heights); } XSCREENSAVER_MODULE_2 ("UnknownPleasures", unknownpleasures, unk) diff --git a/hacks/glx/unknownpleasures.man b/hacks/glx/unknownpleasures.man index 422c81f..2eab727 100644 --- a/hacks/glx/unknownpleasures.man +++ b/hacks/glx/unknownpleasures.man @@ -1,6 +1,6 @@ .TH XScreenSaver 1 "" "X Version 11" .SH NAME -unknownpleasures - an animation of the signal from the pulsar PSR B1919+21. +unknownpleasures - a waterfall graph of the signal from pulsar PSR B1919+21. .SH SYNOPSIS .B unknownpleasures [\-display \fIhost:display.screen\fP] @@ -8,10 +8,14 @@ unknownpleasures - an animation of the signal from the pulsar PSR B1919+21. [\-window] [\-root] [\-delay \fInumber\fP] -[\-speed \fIpercent\fP] -[\-count \fIinteger\fP] -[\-resolution \fIpercent\fP] +[\-count \fInumber\fP] +[\-speed \fInumber\fP] +[\-resolution \fInumber\fP] +[\-amplitude \fInumber\fP] +[\-noise \fInumber\fP] [\-no-ortho] +[\-buzz] +[\-wireframe] [\-fps] .SH DESCRIPTION PSR B1919+21 (AKA CP 1919) was the first pulsar ever discovered: a spinning @@ -34,7 +38,7 @@ Draw on a newly-created window. This is the default. Draw on the root window. .TP 8 .B \-delay \fInumber\fP -Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). +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. @@ -42,12 +46,24 @@ Animation speed. 2 for twice as fast, 0.5 for half as fast. .B \-count \fInumber\fP Scanlines (vertical resolution). Default: 80. .TP 8 -.B \-count \fInumber\fP -Horizontal Resolution, Default: 100%. +.B \-resolution \fInumber\fP +Horizontal Resolution, Default: 100. +.TP 8 +.B \-amplitude \fInumber\fP +Height of the waves, 0 - 1.0. Default: 0.13. +.TP 8 +.B \-noise \fInumber\fP +How noisy the signal is. 2 for twice as noisy, 0.5 for half as noisy. .TP 8 .B \-ortho | \-no-ortho Whether to use an orthographic projection. .TP 8 +.B \-buzz | \-no-buzz +Whether each line should seethe with noise. +.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 @@ -63,7 +79,7 @@ stored in the RESOURCE_MANAGER property. .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT -Copyright \(co 2013 by Jamie Zawinski. Permission to use, copy, modify, +Copyright \(co 2013-2018 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 diff --git a/hacks/glx/vigilance.c b/hacks/glx/vigilance.c index 05e19ed..49f0df5 100644 --- a/hacks/glx/vigilance.c +++ b/hacks/glx/vigilance.c @@ -22,7 +22,6 @@ "*lensColor: #000000" "\n" \ "*groundColor: #004400" "\n" \ -# define free_camera 0 # define release_camera 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -210,6 +209,7 @@ parse_color (ModeInfo *mi, char *key, GLfloat color[4]) key, string); exit (1); } + free (string); color[0] = xcolor.red / 65536.0; color[1] = xcolor.green / 65536.0; @@ -1053,7 +1053,7 @@ draw_camera (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -1145,6 +1145,32 @@ draw_camera (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_camera (ModeInfo *mi) +{ + camera_configuration *bp = &bps[MI_SCREEN(mi)]; + pedestrian *p; + int i; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + if (bp->user_trackball) gltrackball_free (bp->user_trackball); + if (bp->cameras) free (bp->cameras); + p = bp->pedestrians; + while (p) { + pedestrian *p2 = p->next; + free (p); + p = p2; + } + if (bp->dlists) { + for (i = 0; i < countof(all_objs); i++) + if (glIsList(bp->dlists[i])) glDeleteLists(bp->dlists[i], 1); + free (bp->dlists); + } +} + XSCREENSAVER_MODULE_2 ("Vigilance", vigilance, camera) #endif /* USE_GL */ diff --git a/hacks/glx/voronoi.c b/hacks/glx/voronoi.c index 895f967..01b3ccd 100644 --- a/hacks/glx/voronoi.c +++ b/hacks/glx/voronoi.c @@ -13,7 +13,6 @@ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ -# define free_voronoi 0 # define release_voronoi 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -514,7 +513,7 @@ draw_voronoi (ModeInfo *mi) if (!vp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(vp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *vp->glx_context); glShadeModel(GL_FLAT); glEnable(GL_POINT_SMOOTH); @@ -538,6 +537,23 @@ draw_voronoi (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_voronoi (ModeInfo *mi) +{ + voronoi_configuration *vp = &vps[MI_SCREEN(mi)]; + node *n; + if (!vp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *vp->glx_context); + if (vp->colors) free (vp->colors); + n = vp->nodes; + while (n) { + node *n2 = n->next; + free (n); + n = n2; + } +} + XSCREENSAVER_MODULE ("Voronoi", voronoi) #endif /* USE_GL */ diff --git a/hacks/glx/winduprobot.c b/hacks/glx/winduprobot.c index 61091cf..148dd1f 100644 --- a/hacks/glx/winduprobot.c +++ b/hacks/glx/winduprobot.c @@ -332,6 +332,7 @@ load_textures (ModeInfo *mi) xi->width, xi->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, xi->data); check_gl_error("texture"); + XDestroyImage (xi); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); @@ -356,6 +357,7 @@ parse_color (ModeInfo *mi, char *key, GLfloat color[4]) key, string); exit (1); } + free (string); color[0] = xcolor.red / 65536.0; color[1] = xcolor.green / 65536.0; @@ -2300,7 +2302,7 @@ draw_robot (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -2471,11 +2473,31 @@ draw_robot (ModeInfo *mi) ENTRYPOINT void free_robot (ModeInfo *mi) { -# ifdef WORDBUBBLES robot_configuration *bp = &bps[MI_SCREEN(mi)]; - if (bp->tc) - textclient_close (bp->tc); + int i; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + if (bp->user_trackball) gltrackball_free (bp->user_trackball); + if (bp->walkers) free (bp->walkers); + if (robot_dome) free (robot_dome); robot_dome = 0; + if (robot_gear) free (robot_gear); robot_gear = 0; + if (ground) free (ground); ground = 0; + +# ifdef WORDBUBBLES + if (bp->tc) textclient_close (bp->tc); + if (bp->font_data) free_texture_font (bp->font_data); # endif + +# ifdef HAVE_TEXTURE + if (bp->chrome_texture) glDeleteTextures(1, &bp->chrome_texture); +# endif + if (bp->dlists) { + for (i = 0; i < countof(all_objs); i++) + if (glIsList(bp->dlists[i])) glDeleteLists(bp->dlists[i], 1); + free (bp->dlists); + } } XSCREENSAVER_MODULE_2 ("WindupRobot", winduprobot, robot) diff --git a/hacks/glx/xlock-gl-utils.c b/hacks/glx/xlock-gl-utils.c index 36d724c..3e610a1 100644 --- a/hacks/glx/xlock-gl-utils.c +++ b/hacks/glx/xlock-gl-utils.c @@ -132,6 +132,7 @@ init_GL(ModeInfo * mi) if (! XParseColor (dpy, mi->xgwa.colormap, s, &c)) fprintf (stderr, "%s: can't parse color %s; using black.\n", progname, s); + if (s) free (s); glClearColor (c.red / 65535.0, c.green / 65535.0, c.blue / 65535.0, diff --git a/hacks/halftone.c b/hacks/halftone.c index b70a636..ecdd84f 100644 --- a/hacks/halftone.c +++ b/hacks/halftone.c @@ -357,6 +357,17 @@ static void halftone_free (Display *dpy, Window window, void *closure) { halftone_screen *halftone = (halftone_screen *) closure; + free (halftone->gravity_point_x); + free (halftone->gravity_point_y); + free (halftone->gravity_point_mass); + free (halftone->gravity_point_x_inc); + free (halftone->gravity_point_y_inc); + free (halftone->dots); + free (halftone->colors); + if (halftone->buffer && halftone->buffer != halftone->window) + XFreePixmap (dpy, halftone->buffer); + if (halftone->gc) XFreeGC (dpy, halftone->gc); + if (halftone->buffer_gc) XFreeGC (dpy, halftone->buffer_gc); free (halftone); } diff --git a/hacks/halo.c b/hacks/halo.c index 42b6a55..c4d5ada 100644 --- a/hacks/halo.c +++ b/hacks/halo.c @@ -117,6 +117,7 @@ halo_init (Display *dpy, Window window) progname, mode_str); exit (1); } + if (mode_str) free (mode_str); if (mono_p) cmode = seuss_mode; if (cmode == random_mode) @@ -435,6 +436,16 @@ halo_event (Display *dpy, Window window, void *closure, XEvent *event) static void halo_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + XFreeGC (dpy, st->draw_gc); + XFreeGC (dpy, st->erase_gc); + XFreeGC (dpy, st->copy_gc); + XFreeGC (dpy, st->merge_gc); + if (st->pixmap) XFreePixmap (dpy, st->pixmap); + if (st->buffer) XFreePixmap (dpy, st->buffer); + free (st->circles); + free (st->colors); + free (st); } XSCREENSAVER_MODULE ("Halo", halo) diff --git a/hacks/helix.c b/hacks/helix.c index 0fdaa90..7c1051c 100644 --- a/hacks/helix.c +++ b/hacks/helix.c @@ -330,6 +330,7 @@ static void helix_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->draw_gc); free (st); } diff --git a/hacks/hexadrop.c b/hacks/hexadrop.c index 678a3c3..e8c2d65 100644 --- a/hacks/hexadrop.c +++ b/hacks/hexadrop.c @@ -277,7 +277,8 @@ hexadrop_init_1 (Display *dpy, Window window, state *st) else st->lockstep_p = get_boolean_resource (st->dpy, "lockstep","Lockstep"); } - + if (s1) free (s1); + if (s2) free (s2); st->sides = get_integer_resource (st->dpy, "sides", "Sides"); if (! (st->sides == 0 || st->sides == 3 || st->sides == 4 || @@ -355,6 +356,7 @@ hexadrop_free (Display *dpy, Window window, void *closure) XFreeGC (st->dpy, st->gc); st->gc = 0; } + free (st); } diff --git a/hacks/hyperball.c b/hacks/hyperball.c index cae6360..767f008 100644 --- a/hacks/hyperball.c +++ b/hacks/hyperball.c @@ -548,6 +548,11 @@ static void hyperball_free (Display *dpy, Window window, void *closure) { struct hyper_state *hs = (struct hyper_state *) closure; + int i, j; + XFreeGC (dpy, hs->black_gc); + for (i = 0; i < 8; i++) + for (j = 0; j < 8; j++) + if (hs->hs_color_gcs[i][j]) XFreeGC (dpy, hs->hs_color_gcs[i][j]); free (hs); } diff --git a/hacks/hypercube.c b/hacks/hypercube.c index 0055696..fe9e177 100644 --- a/hacks/hypercube.c +++ b/hacks/hypercube.c @@ -564,6 +564,12 @@ static const struct line_info line_table[LINE_COUNT] = static void hypercube_free (Display *dpy, Window window, void *closure) { + struct hyper_state *hs = (struct hyper_state *) closure; + int i; + XFreeGC (dpy, hs->black_gc); + for (i = 0; i < 8; i++) + if (hs->hs_color_gcs[i]) XFreeGC (dpy, hs->hs_color_gcs[i]); + free (hs); } XSCREENSAVER_MODULE ("HyperCube", hypercube) diff --git a/hacks/ifs.c b/hacks/ifs.c index ad8af95..b879f10 100644 --- a/hacks/ifs.c +++ b/hacks/ifs.c @@ -545,6 +545,7 @@ ifs_free (Display *dpy, Window window, void *closure) if (st->colours) free(st->colours); if (st->backbuffer != None && st->backbuffer != st->window) XFreePixmap(st->dpy, st->backbuffer); + XFreeGC (dpy, st->gc); free(st); } diff --git a/hacks/images/dvd.png b/hacks/images/dvd.png Binary files differnew file mode 100644 index 0000000..238ed58 --- /dev/null +++ b/hacks/images/dvd.png diff --git a/hacks/images/sun.png b/hacks/images/sun.png Binary files differnew file mode 100644 index 0000000..45f631a --- /dev/null +++ b/hacks/images/sun.png diff --git a/hacks/imsmap.c b/hacks/imsmap.c index 1877243..475447b 100644 --- a/hacks/imsmap.c +++ b/hacks/imsmap.c @@ -161,8 +161,10 @@ init_map (struct state *st) if (mono_p) st->flip_xy = 0; - else if (st->colors) + else if (st->colors) { free_colors (st->xgwa.screen, st->cmap, st->colors, st->ncolors); + free (st->colors); + } st->colors = 0; st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer"); @@ -187,6 +189,7 @@ init_map (struct state *st) if (!mono_p) { if (st->ncolors < 1) st->ncolors = 1; + if (st->colors) free (st->colors); st->colors = (XColor *) malloc (st->ncolors * sizeof(*st->colors)); make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->cmap, @@ -387,6 +390,8 @@ static void imsmap_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->gc); + XFreeGC (dpy, st->gc2); if (st->colors) free (st->colors); if (st->cell) free (st->cell); free (st); diff --git a/hacks/interaggregate.c b/hacks/interaggregate.c index 6308841..999ef9e 100644 --- a/hacks/interaggregate.c +++ b/hacks/interaggregate.c @@ -974,6 +974,13 @@ static void interaggregate_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + if (st->f) { + free_circles (st->f); + if (st->f->off_img) free (st->f->off_img); + if (st->f->parsedcolors) free (st->f->parsedcolors); + free (st->f); + } + if (st->fgc) XFreeGC (st->dpy, st->fgc); free (st); } diff --git a/hacks/interference.c b/hacks/interference.c index 7860143..98f89e2 100644 --- a/hacks/interference.c +++ b/hacks/interference.c @@ -364,10 +364,8 @@ static void inter_free(Display* dpy, struct inter_context* c) destroy_image(dpy, c); - if(c->colors <= 2) - free(c->pal); - else if(c->pal) - free_colors(c->screen, c->cmap, c->pal, c->colors); + free_colors(c->screen, c->cmap, c->pal, c->colors); + if (c->pal) free(c->pal); #ifndef USE_XIMAGE for(i = 0; i != c->colors; ++i) @@ -995,6 +993,7 @@ interference_free (Display *dpy, Window window, void *closure) { struct inter_context *c = (struct inter_context *) closure; inter_free(dpy, c); + free(c); } XSCREENSAVER_MODULE ("Interference", interference) diff --git a/hacks/intermomentary.c b/hacks/intermomentary.c index 4e65b76..fc5b932 100644 --- a/hacks/intermomentary.c +++ b/hacks/intermomentary.c @@ -543,6 +543,22 @@ static void intermomentary_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + if (st->f) { + if (st->f->off_alpha) free(st->f->off_alpha); + if (st->f->off_map != window) XFreePixmap (dpy, st->f->off_map); + if (st->f->discs) { + int i; + for (i = 0; i < st->f->num; i++) { + if (st->f->discs[i].pxRiders) free (st->f->discs[i].pxRiders); + } + free (st->f->discs); + } + free (st->f); + } + if (st->colors) free (st->colors); + XFreeGC (dpy, st->fgc); + XFreeGC (dpy, st->copygc); + free (st); } diff --git a/hacks/juggle.c b/hacks/juggle.c index e6ff01f..fba0fe5 100644 --- a/hacks/juggle.c +++ b/hacks/juggle.c @@ -2598,6 +2598,7 @@ init_juggle (ModeInfo * mi) 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 = load_font_retry(MI_DISPLAY(mi), font); + if (font) free (font); } } diff --git a/hacks/kaleidescope.c b/hacks/kaleidescope.c index 87a8236..8070368 100644 --- a/hacks/kaleidescope.c +++ b/hacks/kaleidescope.c @@ -41,11 +41,11 @@ struct Obj { void (*propigate) (GLOBAL *, OBJECT *); void (*draw) (GLOBAL *, OBJECT *); void (*init) (GLOBAL *, OBJECT *); - void *cur; + void *cur, *root; }; typedef struct KSEGMENT { - struct KSEGMENT *next; + struct KSEGMENT *next, *next0; XColor color; int drawn; short int x1,y1,x2,y2; /* these are in the natural coordinate system */ @@ -211,9 +211,10 @@ create_ksegment (GLOBAL *g) kcopy_color(&(prev->color), &new_color); - prev->next = (Ksegment*)malloc(sizeof(Ksegment)); - (prev->next)->xsegments = (XSegment*)malloc(g->symmetry * sizeof(XSegment)); + prev->next = (Ksegment*)calloc(1,sizeof(Ksegment)); + (prev->next)->xsegments = (XSegment*)calloc(g->symmetry, sizeof(XSegment)); prev->drawn = 0; + prev->next0 = prev->next; prev = (prev->next); } @@ -345,7 +346,7 @@ create_objects (GLOBAL *g) 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].cur = g->objects[i].root = create_ksegment(g); g->objects[i].type = 1; g->objects[i].time = 0; g->objects[i].propigate = propigate_ksegment; @@ -406,6 +407,7 @@ init_g (GLOBAL *g) } else { g->color_mode = 2; } + if (color_mode_str) free(color_mode_str); XGetWindowAttributes (g->dpy, g->window, &xgwa); g->xmax = xgwa.width; @@ -484,6 +486,19 @@ static void kaleidescope_free (Display *dpy, Window window, void *closure) { GLOBAL *g = (GLOBAL *) closure; + int i; + for (i = 0; i < g->nsegments; i++) { + Ksegment *s = g->objects[i].root; + while (s) { + Ksegment *p = s; + s = s->next0; + free (p->xsegments); + free (p); + } + } + free (g->objects); + XFreeGC (dpy, g->draw_gc); + XFreeGC (dpy, g->erase_gc); free (g); } diff --git a/hacks/kumppa.c b/hacks/kumppa.c index 2e2955b..fc5167d 100644 --- a/hacks/kumppa.c +++ b/hacks/kumppa.c @@ -531,6 +531,8 @@ kumppa_free (Display *dpy, Window window, void *closure) free (st->Yrotations); free (st->Xrottable); free (st->Yrottable); + free (st->rotateX); + free (st->rotateY); free (st); } diff --git a/hacks/lmorph.c b/hacks/lmorph.c index 9468a72..ae45da1 100644 --- a/hacks/lmorph.c +++ b/hacks/lmorph.c @@ -362,6 +362,7 @@ initLMorph(struct state *st) fprintf(stderr, "figtype should be `all', `open' or `closed'.\n"); st->figType = FT_ALL; } + if (ft) free (ft); if (steps <= 0) steps = (random() % 400) + 100; @@ -389,7 +390,7 @@ initLMorph(struct state *st) st->aSlopeTo = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); st->aSlopeFrom = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); - st->aNext = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); + st->aNext = 0; for (i = 0; i < st->numPoints ; i++) { st->aSlopeTo[i].x = 0.0; @@ -562,6 +563,16 @@ static void lmorph_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + int i; + XFreeGC (dpy, st->gcDraw); + XFreeGC (dpy, st->gcClear); + free (st->aWork[0]); + free (st->aWork[1]); + free (st->aTmp); + free (st->aSlopeTo); + free (st->aSlopeFrom); + for (i = 0; i < MAXFIGS; i++) + if (st->a[i]) free (st->a[i]); free (st); } diff --git a/hacks/m6502.c b/hacks/m6502.c index ce18e9d..d7c78e1 100644 --- a/hacks/m6502.c +++ b/hacks/m6502.c @@ -299,7 +299,9 @@ static void m6502_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + m6502_destroy6502(st->machine); analogtv_release(st->tv); + free (st->inp); free (st->file); free (st); } diff --git a/hacks/maze.c b/hacks/maze.c index a0007dd..acaeba5 100644 --- a/hacks/maze.c +++ b/hacks/maze.c @@ -1655,6 +1655,16 @@ static void maze_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->gc); + XFreeGC (dpy, st->cgc); + XFreeGC (dpy, st->tgc); + XFreeGC (dpy, st->sgc); + XFreeGC (dpy, st->ugc); + XFreeGC (dpy, st->logo_gc); + XFreeGC (dpy, st->erase_gc); + if (st->solve_state) free (st->solve_state); + if (st->logo_map) XFreePixmap (dpy, st->logo_map); + exit_sets (st); free (st); } diff --git a/hacks/memscroller.c b/hacks/memscroller.c index 2ccc8ad..9e81e50 100644 --- a/hacks/memscroller.c +++ b/hacks/memscroller.c @@ -90,36 +90,16 @@ memscroller_init (Display *dpy, Window window) { int i; int nfonts = countof (st->fonts); - for (i = nfonts-1; i >= 0; i--) + for (i = 0; i < nfonts; 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] = load_font_retry (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 (fontname && *fontname) + st->fonts[i] = load_font_retry (dpy, fontname); + if (fontname) free (fontname); } - - if (!st->fonts[0]) - st->fonts[0] = load_font_retry (dpy, "fixed"); if (!st->fonts[0]) abort(); } @@ -581,6 +561,18 @@ memscroller_event (Display *dpy, Window window, void *closure, XEvent *event) static void memscroller_free (Display *dpy, Window window, void *closure) { + state *st = (state *) closure; + int i; + for (i = 0; i < st->nscrollers; i++) + destroy_xshm_image (dpy, st->scrollers[i].image, &st->shm_info); + free (st->scrollers); + for (i = 0; i < countof (st->fonts); i++) + if (st->fonts[i]) XFreeFont (dpy, st->fonts[i]); + if (st->filename) free (st->filename); + XFreeGC (dpy, st->draw_gc); + XFreeGC (dpy, st->erase_gc); + XFreeGC (dpy, st->text_gc); + free (st); } @@ -601,13 +593,6 @@ static const char *memscroller_defaults [] = { ".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", -#elif 0 /* real X11, XQueryFont() */ - ".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", #else /* real X11, load_font_retry() */ ".font1: -*-ocr a std-medium-r-*-*-*-1440-*-*-m-*-*-*", ".font2: -*-ocr a std-medium-r-*-*-*-960-*-*-m-*-*-*", diff --git a/hacks/metaballs.c b/hacks/metaballs.c index 3a2ae73..f387785 100644 --- a/hacks/metaballs.c +++ b/hacks/metaballs.c @@ -386,19 +386,20 @@ metaballs_event (Display *dpy, Window window, void *closure, XEvent *event) 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 + int i; + if (st->pImage) 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]); + if (st->sColor) free (st->sColor); + free (st->blob); + XFreeGC (dpy, st->gc); + free (st); } diff --git a/hacks/moire.c b/hacks/moire.c index 4add457..c688c8a 100644 --- a/hacks/moire.c +++ b/hacks/moire.c @@ -123,6 +123,7 @@ moire_init_1 (struct state *st) gcv.foreground = st->colors[0].pixel; } + if (st->gc) XFreeGC (st->dpy, st->gc); st->gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); } @@ -240,6 +241,12 @@ moire_event (Display *dpy, Window window, void *closure, XEvent *event) static void moire_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + if (st->draw_image) + destroy_xshm_image (dpy, st->draw_image, &st->shm_info); + XFreeGC (dpy, st->gc); + free (st->colors); + free (st); } XSCREENSAVER_MODULE ("Moire", moire) diff --git a/hacks/moire2.c b/hacks/moire2.c index dad9d66..caf47c3 100644 --- a/hacks/moire2.c +++ b/hacks/moire2.c @@ -320,6 +320,12 @@ moire2_event (Display *dpy, Window window, void *closure, XEvent *event) static void moire2_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + XFreeGC (dpy, st->copy_gc); + XFreeGC (dpy, st->erase_gc); + XFreeGC (dpy, st->window_gc); + free (st->colors); + free (st); } static const char *moire2_defaults [] = { diff --git a/hacks/munch.c b/hacks/munch.c index 836731a..fe8f60f 100644 --- a/hacks/munch.c +++ b/hacks/munch.c @@ -334,6 +334,7 @@ munch_init (Display *dpy, Window w) st->mismunch = random() & 1; else st->mismunch = get_boolean_resource (st->dpy, "mismunch", "Mismunch"); + if (mm) free (mm); st->window_width = xgwa.width; st->window_height = xgwa.height; @@ -439,6 +440,11 @@ static void munch_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + int i; + XFreeGC (dpy, st->gc); + for (i = 0; i < st->simul; i++) + free (st->munchers[i]); + free (st->munchers); free (st); } diff --git a/hacks/nerverot.c b/hacks/nerverot.c index 081dbca..7adc94c 100644 --- a/hacks/nerverot.c +++ b/hacks/nerverot.c @@ -1303,7 +1303,11 @@ static void nerverot_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + int i; freeBlots (st); + for (i = 0; i <= st->colorCount; i++) + XFreeGC (dpy, st->gcs[i]); + free (st->gcs); free (st); } diff --git a/hacks/noseguy.c b/hacks/noseguy.c index 726c2a7..bb0ca9f 100644 --- a/hacks/noseguy.c +++ b/hacks/noseguy.c @@ -583,7 +583,7 @@ noseguy_init (Display *d, Window w) unsigned long fg, bg, text_fg, text_bg; XWindowAttributes xgwa; Colormap cmap; - char *fontname; + char *fontname, *cname, *s; XGCValues gcvalues; st->dpy = d; st->window = w; @@ -608,10 +608,12 @@ noseguy_init (Display *d, Window w) st->xftfont = XftFontOpenXlfd (st->dpy, screen_number (xgwa.screen), fontname); + free (fontname); + + cname = get_string_resource (st->dpy, "textForeground", "Foreground"); XftColorAllocName (st->dpy, xgwa.visual, xgwa.colormap, - get_string_resource (st->dpy, - "textForeground", "Foreground"), - &st->xftcolor); + cname, &st->xftcolor); + free (cname); st->xftdraw = XftDrawCreate (st->dpy, st->window, xgwa.visual, xgwa.colormap); @@ -621,9 +623,15 @@ noseguy_init (Display *d, Window w) 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")) + s = get_string_resource (st->dpy, "textForeground", "Foreground"); + if (s) + free (s); + else text_fg = bg; - if (! get_string_resource (st->dpy, "textBackground", "Background")) + s = get_string_resource (st->dpy, "textBackground", "Background"); + if (s) + free (s); + else text_bg = fg; gcvalues.foreground = fg; @@ -683,6 +691,25 @@ noseguy_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; textclient_close (st->tc); + XftFontClose (dpy, st->xftfont); + /* XftColorFree (dpy, st->xgwa.visual, st->xgwa.colormap, st->xftcolor); */ + XftDrawDestroy (st->xftdraw); + XFreeGC (dpy, st->fg_gc); + XFreeGC (dpy, st->bg_gc); + XFreeGC (dpy, st->text_fg_gc); + XFreeGC (dpy, st->text_bg_gc); + +# define FP(F) \ + if (st->F.p) XFreePixmap (dpy, st->F.p); \ + if (st->F.m) XFreePixmap (dpy, st->F.m) + FP (left1); + FP (left2); + FP (right1); + FP (right2); + FP (left_front); + FP (right_front); + FP (front); + FP (down); free (st); } diff --git a/hacks/pacman.c b/hacks/pacman.c index f7282fd..6d2dd85 100644 --- a/hacks/pacman.c +++ b/hacks/pacman.c @@ -126,6 +126,8 @@ free_pacman (ModeInfo * mi) pacmangamestruct * pp = &pacman_games[MI_SCREEN (mi)]; int dir, mouth, i, j, k; + if (pp->tiles) free (pp->tiles); + if (pp->ghosts != NULL) { free (pp->ghosts); pp->ghosts = (ghoststruct *) NULL; @@ -1249,6 +1251,9 @@ load_pixmaps (Display ** dpy, Window window, pacmangamestruct ** ps) pp->spritexs, pp->spriteys); srcy += sw; } + XFreeGC (*dpy, gc); + XFreePixmap (*dpy, sprites); + XFreePixmap (*dpy, sprites_mask); } diff --git a/hacks/pedal.c b/hacks/pedal.c index 87820be..8997f4a 100644 --- a/hacks/pedal.c +++ b/hacks/pedal.c @@ -302,6 +302,9 @@ static void pedal_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + if (st->eraser) eraser_free (st->eraser); + XFreeGC (dpy, st->gc); + free (st->points); free (st); } diff --git a/hacks/penetrate.c b/hacks/penetrate.c index 9148827..8fcb0da 100644 --- a/hacks/penetrate.c +++ b/hacks/penetrate.c @@ -951,6 +951,11 @@ static void penetrate_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->draw_gc); + XFreeGC (dpy, st->erase_gc); + XFreeGC (dpy, st->level_gc); + XFreeFont (dpy, st->font); + XFreeFont (dpy, st->scoreFont); free (st); } diff --git a/hacks/petri.c b/hacks/petri.c index 97299d6..e97c582 100644 --- a/hacks/petri.c +++ b/hacks/petri.c @@ -419,7 +419,7 @@ setup_display (struct state *st) if (osize != cell_size) { - if (!st->warned) + if (0 && !st->warned) { fprintf (stderr, "%s: throttling cell size from %d to %d because of %dM limit.\n", @@ -707,11 +707,19 @@ static void petri_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + if (st->arr) free (st->arr); + if (st->head) free (st->head); + if (st->tail) free (st->tail); + if (st->coloredGCs) { + int i; + for (i = 0; i < st->count*2; i++) + XFreeGC (st->dpy, st->coloredGCs[i]); + free (st->coloredGCs); + } free (st); } - static const char *petri_defaults [] = { ".background: black", ".foreground: white", diff --git a/hacks/phosphor.c b/hacks/phosphor.c index 2e57b86..374e134 100644 --- a/hacks/phosphor.c +++ b/hacks/phosphor.c @@ -185,6 +185,8 @@ phosphor_init (Display *dpy, Window window) if (!state->font) abort(); } + if (fontname) free (fontname); + font = state->font; state->scale = get_integer_resource (dpy, "scale", "Integer"); state->ticks = STATE_MAX + get_integer_resource (dpy, "ticks", "Integer"); @@ -322,6 +324,8 @@ phosphor_init (Display *dpy, Window window) state->gcs[STATE_MAX + i] = XCreateGC (state->dpy, state->window, flags, &state->gcv); } + + free (colors); } capture_font_bits (state); @@ -548,7 +552,6 @@ capture_font_bits (p_state *state) for (i = 0; i < 256; i++) state->chars[i] = make_character (state, i); - state->chars[CURSOR_INDEX] = make_character (state, CURSOR_INDEX); } @@ -1392,13 +1395,30 @@ static void phosphor_free (Display *dpy, Window window, void *closure) { p_state *state = (p_state *) closure; + int i; textclient_close (state->tc); if (state->cursor_timer) XtRemoveTimeOut (state->cursor_timer); - /* #### there's more to free here */ - + if (state->gc0) XFreeGC (dpy, state->gc0); + if (state->gc1) XFreeGC (dpy, state->gc1); +#ifdef FUZZY_BORDER + if (state->gc2) XFreeGC (dpy, state->gc2); +#endif /* FUZZY_BORDER */ + for (i = 0; i < state->ticks; i++) + if (state->gcs[i]) XFreeGC (dpy, state->gcs[i]); + free (state->gcs); + for (i = 0; i < 256; i++) { + XFreePixmap (dpy, state->chars[i]->pixmap); +#ifdef FUZZY_BORDER + XFreePixmap (dpy, state->chars[i]->pixmap2); +#endif /* FUZZY_BORDER */ + free (state->chars[i]); + } + XDestroyImage (state->font_bits); + free (state->chars); + free (state->cells); free (state); } diff --git a/hacks/piecewise.c b/hacks/piecewise.c index 6e6e484..9baa88d 100644 --- a/hacks/piecewise.c +++ b/hacks/piecewise.c @@ -61,6 +61,7 @@ typedef struct _fringe { int mni; /* size of intersection array */ int ni; /* number of intersections */ int *i; /* sorted intersection list */ + struct _fringe *next0; /* allocation list */ } fringe; @@ -104,6 +105,8 @@ struct state { int count, delay, ncolors, colorspeed, color_index, flags, iterations; int color_iterations; circle *circles; + fringe *fringes; + event *events; }; typedef int (*cut)(struct state *, tree*); /* cut x is <, =, or > 0 given a <, =, or > x for some a */ @@ -335,6 +338,7 @@ static inline void fringe_add_intersection(fringe *f, double x, double y) f->ni++; if (f->mni < f->ni) { f->mni += 2; + /* #### valgrind says this leaks at exit */ 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); @@ -345,8 +349,11 @@ 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); + fringe *s = calloc(sizeof(fringe), n * 2); + circle *c = calloc(sizeof(circle), n); + + s->next0 = st->fringes; + st->fringes = s; speed = get_integer_resource(st->dpy, "speed", "Speed"); minradius = get_float_resource(st->dpy, "minradius", "Float"); @@ -377,6 +384,8 @@ static circle *init_circles(struct state *st, int n, int w, int h) 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; + if (c[i].lo->i) free (c[i].lo->i); + if (c[i].hi->i) free (c[i].hi->i); c[i].lo->i = c[i].hi->i = 0; } @@ -456,7 +465,7 @@ static void event_insert(struct state *st, event **eq, event *e) static void circle_start_event(struct state *st, event **eq, circle *c) { event *s; - s = malloc(sizeof(event)); + s = calloc(1, sizeof(event)); s->kind = START; s->x = c->x; s->y = c->y - c->r; @@ -468,7 +477,7 @@ static void circle_start_event(struct state *st, event **eq, circle *c) static void circle_finish_event(struct state *st, event **eq, circle *c) { event *f; - f = malloc(sizeof(event)); + f = calloc(1, sizeof(event)); f->kind = FINISH; f->x = c->x; f->y = c->y + c->r; @@ -543,11 +552,11 @@ static void fringe_intersect(struct state *st, event **eq, double y, fringe *lo, #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 = calloc(1, sizeof(event)); \ e->kind = CROSS; \ e->x = xi; e->y = yi; \ e->lo = ilo; e->hi = ihi; \ - event_insert(st, eq, e); \ + event_insert(st, eq, e); \ } if (CHECK(x1, y1)) { @@ -751,7 +760,7 @@ 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); + in = calloc(sizeof(int), n); for (i=0;i<c->hi->ni;i++) in[i] = c->hi->i[i]; for (i=c->lo->ni-1;i>=0;i--) @@ -960,6 +969,22 @@ static void piecewise_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + int i; + XFreeGC (dpy, st->erase_gc); + XFreeGC (dpy, st->draw_gc); + for (i = 0; i < st->count; i++) { + if (st->circles[i].i) free (st->circles[i].i); + if (st->circles[i].lo) { + if (st->circles[i].lo->i) free (st->circles[i].lo->i); + } + } + while (st->fringes) { + fringe *f = st->fringes; + st->fringes = f->next0; + free (f); + } + free (st->circles); + free (st->colors); free (st); } diff --git a/hacks/pong.c b/hacks/pong.c index fe200c3..8c18a1c 100644 --- a/hacks/pong.c +++ b/hacks/pong.c @@ -1112,6 +1112,8 @@ pong_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; analogtv_release(st->tv); + free(st->inp); + if (st->score_font.text_im) XDestroyImage (st->score_font.text_im); free (st); } diff --git a/hacks/popsquares.c b/hacks/popsquares.c index 3b83fd7..4fc16a7 100644 --- a/hacks/popsquares.c +++ b/hacks/popsquares.c @@ -265,6 +265,9 @@ static void popsquares_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->gc); + free (st->colors); + free (st->squares); free (st); } diff --git a/hacks/pyro.c b/hacks/pyro.c index 442ea7f..44bd58a 100644 --- a/hacks/pyro.c +++ b/hacks/pyro.c @@ -340,6 +340,10 @@ static void pyro_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->draw_gc); + XFreeGC (dpy, st->erase_gc); + free (st->projectiles); + free (st->sorted_projectiles); free (st); } diff --git a/hacks/qix.c b/hacks/qix.c index 1498af7..75721c7 100644 --- a/hacks/qix.c +++ b/hacks/qix.c @@ -148,6 +148,7 @@ qix_init (Display *dpy, Window window) int nlines; XGCValues gcv; XWindowAttributes xgwa; + int i; st->dpy = dpy; st->window = window; XGetWindowAttributes (st->dpy, st->window, &xgwa); @@ -243,7 +244,7 @@ qix_init (Display *dpy, Window window) st->count = nplanes; } - st->gcs[0] = (GC *) malloc (st->count * sizeof (GC)); + st->gcs[0] = (GC *) calloc (st->count, sizeof (GC)); st->gcs[1] = (st->xor_p ? st->gcs[0] : (GC *) malloc (st->count * sizeof (GC))); @@ -321,12 +322,11 @@ qix_init (Display *dpy, Window window) 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 = (struct qix **) calloc ((st->count + 1), sizeof (struct qix *)); + for (i = 0; i < st->count; i++) { - st->qixes [st->count] = init_one_qix (st, nlines); - st->qixes [st->count]->id = st->count; + st->qixes [i] = init_one_qix (st, nlines); + st->qixes [i]->id = i; } # ifdef HAVE_JWXYZ @@ -566,10 +566,27 @@ 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]); + int i; + +# if 0 /* 2001 jwz was a total jerk */ + for (i = 0; i < 2; i++) { + int j; + if (st->gcs[i]) { + for (j = 0; i < st->count; j++) + if (st->gcs[i][j]) XFreeGC (dpy, st->gcs[i][j]); + free (st->gcs[i]); + } + } +# endif + for (i = 0; i < st->count; i++) { + struct qix *q = st->qixes[i]; + free (q->lines); + free (q); + } + if (st->draw_gc) + free (st->draw_gc); + if (st->erase_gc && st->draw_gc != st->erase_gc) + free (st->erase_gc); free (st->qixes); free (st); } diff --git a/hacks/rd-bomb.c b/hacks/rd-bomb.c index 33cb602..9628619 100644 --- a/hacks/rd-bomb.c +++ b/hacks/rd-bomb.c @@ -446,6 +446,7 @@ rd_init (Display *dpy, Window win) ok = True; if (!ok) st->pdepth = 16; + free (pfv); } st->cmap = st->xgwa.colormap; @@ -544,6 +545,16 @@ rd_event (Display *dpy, Window window, void *closure, XEvent *event) static void rd_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + free (st->r1); + free (st->r2); + free (st->r1b); + free (st->r2b); + free (st->colors); + free (st->mc); + XFreeGC (dpy, st->gc); + destroy_xshm_image (dpy, st->image, &st->shm_info); + free (st); } XSCREENSAVER_MODULE_2 ("RDbomb", rdbomb, rd) diff --git a/hacks/recanim.c b/hacks/recanim.c index 9ef0e7a..69bf385 100644 --- a/hacks/recanim.c +++ b/hacks/recanim.c @@ -48,10 +48,12 @@ struct record_anim_state { Window window; int frame_count; int target_frames; + int fps; XWindowAttributes xgwa; char *title; int pct; int fade_frames; + double start_time; # ifdef USE_GL char *data, *data2; # else /* !USE_GL */ @@ -77,6 +79,21 @@ double_time (void) } +static double +double_timewarp (void) +{ + struct timeval now; +# ifdef GETTIMEOFDAY_TWO_ARGS + struct timezone tzp; + screenhack_record_anim_gettimeofday(&now, &tzp); +# else + screenhack_record_anim_gettimeofday(&now); +# endif + + return (now.tv_sec + ((double) now.tv_usec * 0.000001)); +} + + /* Some of the hacks set their timing based on the real-world wall clock, so to make the animations record at a sensible speed, we need to slow down that clock by discounting the time taken up by snapshotting and @@ -131,13 +148,15 @@ screenhack_record_anim_init (Screen *screen, Window window, int target_frames) st = (record_anim_state *) calloc (1, sizeof(*st)); + st->fps = 30; st->screen = screen; st->window = window; st->target_frames = target_frames; + st->start_time = double_time(); st->frame_count = 0; - st->fade_frames = 30 * 1.5; + st->fade_frames = st->fps * 1.5; - if (st->fade_frames >= (st->target_frames / 2) - 30) + if (st->fade_frames >= (st->target_frames / 2) - st->fps) st->fade_frames = 0; # ifdef HAVE_GDK_PIXBUF @@ -180,6 +199,10 @@ screenhack_record_anim_init (Screen *screen, Window window, int target_frames) # ifndef HAVE_JWXYZ XFetchName (dpy, st->window, &st->title); + { + char *s = strchr(st->title, ':'); + if (s) *s = 0; + } # endif /* !HAVE_JWXYZ */ return st; @@ -311,9 +334,36 @@ screenhack_record_anim (record_anim_state *st) int pct = 100 * (st->frame_count + 1) / st->target_frames; if (pct != st->pct && st->title) { + double end = st->target_frames / (double) st->fps; + double secs0 = double_time() - st->start_time; + double secs = double_timewarp() - st->start_time; + double rate = secs / secs0; + double secs2 = (end - secs) / rate; Display *dpy = DisplayOfScreen (st->screen); - char *t2 = (char *) malloc (strlen(st->title) + 20); - sprintf (t2, "%s: %d%%", st->title, pct); + char *t2 = (char *) malloc (strlen(st->title) + 100); + if (secs2 < 0) secs2 = 0; + + sprintf (t2, "%s: %3d%% done," + " %d:%02d:%02d in" + " %d:%02d:%02d;" + " %d%% speed," + " %d:%02d:%02d remaining", + st->title, pct, + + ((int) secs) / (60*60), + (((int) secs) / 60) % 60, + ((int) secs) % 60, + + ((int) secs0) / (60*60), + (((int) secs0) / 60) % 60, + ((int) secs0) % 60, + + (int) (100 * rate), + + ((int) secs2) / (60*60), + (((int) secs2) / 60) % 60, + ((int) secs2) % 60 + ); XStoreName (dpy, st->window, t2); XSync (dpy, 0); free (t2); @@ -371,10 +421,10 @@ screenhack_record_anim_free (record_anim_state *st) "ffmpeg" " -hide_banner" " -v 16" - " -framerate 30" /* rate of input: must be before -i */ + " -framerate %d" /* rate of input: must be before -i */ " -i '%s-%%06d.%s'" - " -r 30", /* rate of output: must be after -i */ - progname, type); + " -r %d", /* rate of output: must be after -i */ + st->fps, progname, type, st->fps); if (soundtrack) sprintf (cmd + strlen(cmd), " -i '%s' -map 0:v:0 -map 1:a:0 -acodec aac", diff --git a/hacks/ripples.c b/hacks/ripples.c index 447a455..7e39643 100644 --- a/hacks/ripples.c +++ b/hacks/ripples.c @@ -788,6 +788,11 @@ init_ripples(struct state *st, int ndrops, int splash) { int i; + if (st->bufferA) free (st->bufferA); + if (st->bufferB) free (st->bufferB); + if (st->temp) free (st->temp); + if (st->dirty_buffer) free (st->dirty_buffer); + 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)); @@ -1008,6 +1013,7 @@ ripples_draw (Display *dpy, Window window, void *closure) XWindowAttributes xgwa; XGetWindowAttributes(st->dpy, st->window, &xgwa); st->start_time = time ((time_t *) 0); + if (st->orig_map) XDestroyImage (st->orig_map); st->orig_map = XGetImage (st->dpy, st->window, 0, 0, xgwa.width, xgwa.height, ~0L, ZPixmap); @@ -1064,6 +1070,13 @@ static void ripples_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + if (st->bufferA) free (st->bufferA); + if (st->bufferB) free (st->bufferB); + if (st->temp) free (st->temp); + if (st->dirty_buffer) free (st->dirty_buffer); + if (st->orig_map) XDestroyImage (st->orig_map); + if (st->buffer_map) destroy_xshm_image (dpy, st->buffer_map, &st->shm_info); + XFreeGC (dpy, st->gc); free (st); } diff --git a/hacks/rocks.c b/hacks/rocks.c index 5a976df..fea3660 100644 --- a/hacks/rocks.c +++ b/hacks/rocks.c @@ -505,6 +505,17 @@ rocks_event (Display *dpy, Window window, void *closure, XEvent *event) static void rocks_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + int i; + for (i = 0; i < MAX_SIZE; i++) + if (st->pixmaps[i]) XFreePixmap (dpy, st->pixmaps[i]); + for (i = 0; i < st->ncolors; i++) + if (st->draw_gcs[i]) XFreeGC (dpy, st->draw_gcs[i]); + XFreeGC (dpy, st->erase_gc); + free (st->colors); + free (st->rocks); + free (st->draw_gcs); + free (st); } diff --git a/hacks/rorschach.c b/hacks/rorschach.c index 6b2d7a3..124ac73 100644 --- a/hacks/rorschach.c +++ b/hacks/rorschach.c @@ -181,6 +181,7 @@ static void rorschach_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->draw_gc); free (st); } diff --git a/hacks/rotzoomer.c b/hacks/rotzoomer.c index 58f805c..0801819 100644 --- a/hacks/rotzoomer.c +++ b/hacks/rotzoomer.c @@ -336,6 +336,7 @@ set_mode(struct state *st) char *s = get_string_resource (st->dpy, "mode", "Mode"); if (!s || !*s || !strcasecmp (s, "random")) { + free (s); switch (random() % 4) { case 0: s = "stationary"; break; case 1: s = "move"; break; @@ -370,8 +371,15 @@ init_hack (struct state *st) set_mode (st); st->start_time = time ((time_t *) 0); + + if (st->zoom_box) { + for (i = 0; i < st->num_zoom; i++) + if (st->zoom_box[i]) free (st->zoom_box[i]); + free (st->zoom_box); + } st->zoom_box = calloc (st->num_zoom, sizeof (struct zoom_area *)); for (i = 0; i < st->num_zoom; i++) { + if (st->zoom_box[i]) free (st->zoom_box[i]); st->zoom_box[i] = create_zoom (st); } @@ -395,6 +403,7 @@ rotzoomer_draw (Display *disp, Window win, void *closure) 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(); + if (st->orig_map) XDestroyImage (st->orig_map); st->orig_map = XGetImage (st->dpy, st->pm, 0, 0, st->width, st->height, ~0L, ZPixmap); @@ -540,6 +549,15 @@ rotzoomer_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->pm) XFreePixmap (dpy, st->pm); + if (st->gc) XFreeGC (dpy, st->gc); + if (st->orig_map) XDestroyImage (st->orig_map); + if (st->buffer_map) destroy_xshm_image (dpy, st->buffer_map, &st->shm_info); + if (st->zoom_box) { + int i; + for (i = 0; i < st->num_zoom; i++) + if (st->zoom_box[i]) free (st->zoom_box[i]); + free (st->zoom_box); + } free (st); } diff --git a/hacks/screenhack.c b/hacks/screenhack.c index addc960..fdd2e43 100644 --- a/hacks/screenhack.c +++ b/hacks/screenhack.c @@ -137,6 +137,9 @@ const char *progname; /* used by hacks in error messages */ const char *progclass; /* used by ../utils/resources.c */ Bool mono_p; /* used by hacks */ +#ifdef EXIT_AFTER +static time_t exit_after; /* Exit gracefully after N seconds */ +#endif static XrmOptionDescRec default_options [] = { { "-root", ".root", XrmoptionNoArg, "True" }, @@ -151,11 +154,13 @@ static XrmOptionDescRec default_options [] = { # ifdef DEBUG_PAIR { "-pair", ".pair", XrmoptionNoArg, "True" }, -# endif /* DEBUG_PAIR */ - +# endif # ifdef HAVE_RECORD_ANIM { "-record-animation", ".recordAnim", XrmoptionSepArg, 0 }, -# endif /* HAVE_RECORD_ANIM */ +# endif +# ifdef EXIT_AFTER + { "-exit-after", ".exitAfter", XrmoptionSepArg, 0 }, +# endif { 0, 0, 0, 0 } }; @@ -473,6 +478,12 @@ screenhack_table_handle_events (Display *dpy, if (XtAppPending (app) & (XtIMTimer|XtIMAlternateInput)) XtAppProcessEvent (app, XtIMTimer|XtIMAlternateInput); } + +# ifdef EXIT_AFTER + if (exit_after != 0 && time ((time_t *) 0) >= exit_after) + return False; +# endif + return True; } @@ -601,11 +612,11 @@ run_screenhack_table (Display *dpy, #endif ft->free_cb (dpy, window, closure); - if (fpst) fps_free (fpst); + if (fpst) ft->fps_free (fpst); #ifdef DEBUG_PAIR if (window2) ft->free_cb (dpy, window2, closure2); - if (fpst2) fps_free (fpst2); + if (fpst2) ft->fps_free (fpst2); #endif } @@ -707,9 +718,9 @@ main (int argc, char **argv) Window window2 = 0; Widget toplevel2 = 0; # endif -#ifdef HAVE_RECORD_ANIM +# ifdef HAVE_RECORD_ANIM record_anim_state *anim_state = 0; -#endif +# endif XtAppContext app; Bool root_p; Window on_window = 0; @@ -864,6 +875,15 @@ main (int argc, char **argv) root_p = get_boolean_resource (dpy, "root", "Boolean"); +# ifdef EXIT_AFTER + { + int secs = get_integer_resource (dpy, "exitAfter", "Integer"); + exit_after = (secs > 0 + ? time((time_t *) 0) + secs + : 0); + } +# endif + { char *s = get_string_resource (dpy, "windowID", "WindowID"); if (s && *s) diff --git a/hacks/screenhack.h b/hacks/screenhack.h index 78621ab..16e629b 100644 --- a/hacks/screenhack.h +++ b/hacks/screenhack.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1992-2015 Jamie Zawinski <jwz@jwz.org> +/* xscreensaver, Copyright (c) 1992-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -58,7 +58,8 @@ PREFIX ## _reshape, \ PREFIX ## _event, \ PREFIX ## _free, \ - 0, SCREENHACK_VISUAL }; \ + 0, fps_free, \ + SCREENHACK_VISUAL }; \ XSCREENSAVER_LINK (NAME ## _xscreensaver_function_table) #define XSCREENSAVER_MODULE(CLASS,PREFIX) \ diff --git a/hacks/screenhackI.h b/hacks/screenhackI.h index b53ef74..1fafa91 100644 --- a/hacks/screenhackI.h +++ b/hacks/screenhackI.h @@ -147,6 +147,7 @@ struct xscreensaver_function_table { Bool (*event_cb) (Display *, Window, void *, XEvent *); void (*free_cb) (Display *, Window, void *); void (*fps_cb) (Display *, Window, fps_state *, void *); + void (*fps_free) (fps_state *); # ifndef HAVE_JWXYZ Visual * (*pick_visual_hook) (Screen *); diff --git a/hacks/shadebobs.c b/hacks/shadebobs.c index 7a1a0ff..d796162 100644 --- a/hacks/shadebobs.c +++ b/hacks/shadebobs.c @@ -454,12 +454,14 @@ shadebobs_free (Display *dpy, Window window, void *closure) struct state *st = (struct state *) closure; free( st->anSinTable ); free( st->anCosTable ); - /* free( st->pImage->data ); */ + if (st->sColor) free (st->sColor); + XFreeGC (dpy, st->gc); XDestroyImage( st->pImage ); for( st->iShadeBob=0; st->iShadeBob<st->nShadeBobCount; st->iShadeBob++ ) free( st->aShadeBobs[ st->iShadeBob ].anDeltaMap ); free( st->aShadeBobs ); free( st->aiColorVals ); + free(st); } diff --git a/hacks/slidescreen.c b/hacks/slidescreen.c index c5656f3..aaa4762 100644 --- a/hacks/slidescreen.c +++ b/hacks/slidescreen.c @@ -91,6 +91,8 @@ slidescreen_init (Display *dpy, Window window) XParseColor (st->dpy, xgwa.colormap, "black", &bgc); if (!XParseColor (st->dpy, xgwa.colormap, bgs, &bgc)) XParseColor (st->dpy, xgwa.colormap, "gray", &fgc); + if (fgs) free (fgs); + if (bgs) free (bgs); fg_ok = XAllocColor (st->dpy, xgwa.colormap, &fgc); bg_ok = XAllocColor (st->dpy, xgwa.colormap, &bgc); diff --git a/hacks/speedmine.c b/hacks/speedmine.c index 17a3f2a..e16cb5f 100644 --- a/hacks/speedmine.c +++ b/hacks/speedmine.c @@ -1563,6 +1563,17 @@ static void speedmine_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + int i; + XFreeGC (dpy, st->draw_gc); + XFreeGC (dpy, st->erase_gc); + XFreeGC (dpy, st->tunnelend_gc); + XFreeGC (dpy, st->stars_gc); + XFreeGC (dpy, st->stars_erase_gc); + for (i = 0; i < MAX_COLORS; i++) { + if (st->ground_gcs[i]) XFreeGC (dpy, (st->ground_gcs[i])); + if (st->wall_gcs[i]) XFreeGC (dpy, (st->wall_gcs[i])); + if (st->bonus_gcs[i]) XFreeGC (dpy, (st->bonus_gcs[i])); + } free (st); } diff --git a/hacks/squiral.c b/hacks/squiral.c index a38e060..c1fa16f 100644 --- a/hacks/squiral.c +++ b/hacks/squiral.c @@ -253,6 +253,12 @@ static void squiral_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + if (st->worms) free (st->worms); + if (st->fill) free (st->fill); +/* if (st->ncolors) + free_colors (st->xgwa.screen, st->xgwa.cmap, st->colors, st->ncolors); */ + XFreeGC (dpy, st->draw_gc); + XFreeGC (dpy, st->erase_gc); free (st); } diff --git a/hacks/starfish.c b/hacks/starfish.c index 5e94144..a49b98f 100644 --- a/hacks/starfish.c +++ b/hacks/starfish.c @@ -458,6 +458,7 @@ starfish_init (Display *dpy, Window window) st->blob_p = !(random() % 3); else fprintf (stderr, "%s: mode must be blob, zoom, or random", progname); + if (s) free (s); if (st->blob_p) st->delay *= 3; @@ -520,6 +521,9 @@ static void starfish_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->gc); + free_starfish (st->starfish); + free (st->colors); free (st); } diff --git a/hacks/strange.c b/hacks/strange.c index 89e9a3b..c630f71 100644 --- a/hacks/strange.c +++ b/hacks/strange.c @@ -175,7 +175,7 @@ DBL_To_PRM( 1.0-exp( -16.0*(a)/UNIT2 ) ) #if defined(__BIGGEST_ALIGNMENT__) \ && (defined(__GNUC__) \ - && (__GNUC__ == 4 && __GNUC_MINOR__ >= 4 || __GNUC__ >= 5) \ + && (__GNUC__ == 4 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 5) \ || defined(__clang__)) # define ALIGNED __attribute__((aligned(__BIGGEST_ALIGNMENT__))) # define ALIGN_HINT(ptr) __builtin_assume_aligned((ptr), __BIGGEST_ALIGNMENT__) diff --git a/hacks/substrate.c b/hacks/substrate.c index 278a3bd..e0d842a 100644 --- a/hacks/substrate.c +++ b/hacks/substrate.c @@ -735,6 +735,12 @@ static void substrate_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + if (st->f->cgrid) free(st->f->cgrid); + if (st->f->cracks) free(st->f->cracks); + if (st->f->off_img) free(st->f->off_img); + if (st->f->parsedcolors) free(st->f->parsedcolors); + XFreeGC (dpy, st->fgc); + free (st->f); free (st); } diff --git a/hacks/t3d.c b/hacks/t3d.c index 959d24a..a62c554 100644 --- a/hacks/t3d.c +++ b/hacks/t3d.c @@ -372,6 +372,9 @@ initialize (struct state *st) printf("fast\t%i\nmarks\t%i\nwait\t%i\n",st->fastch,st->maxk,st->timewait); #endif + free (xgc); + free (xorgc); + free (xandgc); } static void fill_kugel(struct state *st, int i, Pixmap buf, int setcol); @@ -936,6 +939,13 @@ t3d_event (Display *dpy, Window window, void *closure, XEvent *event) static void t3d_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + XFreeGC (dpy, st->gc); + XFreeGC (dpy, st->orgc); + XFreeGC (dpy, st->andgc); + XFreePixmap (dpy, st->buffer); + free (st->zeit); + free (st); } diff --git a/hacks/tessellimage.c b/hacks/tessellimage.c index b9a8bd9..40c5b94 100644 --- a/hacks/tessellimage.c +++ b/hacks/tessellimage.c @@ -300,6 +300,7 @@ analyze (struct state *st) progname, s); exit (1); } + if (s) free (s); } flush_cache (st); @@ -966,6 +967,7 @@ tessellimage_free (Display *dpy, Window window, void *closure) if (st->image) XFreePixmap (dpy, st->image); if (st->output) XFreePixmap (dpy, st->output); if (st->delta) XDestroyImage (st->delta); + if (st->img) XDestroyImage (st->img); free (st); } diff --git a/hacks/truchet.c b/hacks/truchet.c index d0276f7..d635146 100644 --- a/hacks/truchet.c +++ b/hacks/truchet.c @@ -529,6 +529,10 @@ truchet_event (Display *dpy, Window window, void *closure, XEvent *event) static void truchet_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + XFreeGC (dpy, st->agc); + XFreeGC (dpy, st->bgc); + free (st); } diff --git a/hacks/twang.c b/hacks/twang.c index 1b2cdf6..33b9cd3 100644 --- a/hacks/twang.c +++ b/hacks/twang.c @@ -628,6 +628,14 @@ twang_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->pm) XFreePixmap (dpy, st->pm); + XFreeGC (dpy, st->backgroundGC); + XFreeGC (dpy, st->foregroundGC); + XFreeGC (dpy, st->borderGC); + if (st->sourceImage) XDestroyImage (st->sourceImage); + if (st->workImage) destroy_xshm_image (st->dpy, st->workImage, &st->shmInfo); + if (st->tiles) free (st->tiles); + if (st->sortedTiles) free (st->sortedTiles); + free (st); } diff --git a/hacks/vermiculate.c b/hacks/vermiculate.c index 9364791..0accbd9 100644 --- a/hacks/vermiculate.c +++ b/hacks/vermiculate.c @@ -65,7 +65,7 @@ linedata; static const struct stringAndSpeed { - char *str; + const char * const str; int speed; } sampleStrings[] = @@ -99,7 +99,8 @@ struct state { int hei, wid, speed; Bool erasing, cleared, autopal; - char *instring; + char *oinstring; /* allocated */ + const char *instring; /* consumed */ int max_ticks; real sinof[degs], cosof[degs], tanof[degs]; @@ -435,7 +436,8 @@ maininit (struct state *st) if (!st->instring) { int n = random1 (sizeof (sampleStrings) / sizeof (sampleStrings[0])); - st->instring = sampleStrings[n].str; + if (st->oinstring) free (st->oinstring); + st->instring = st->oinstring = strdup (sampleStrings[n].str); st->speed = sampleStrings[n].speed; } st->boxh = 10; @@ -745,7 +747,8 @@ vermiculate_draw (Display *dpy, Window window, void *closure) if (tick++ > st->max_ticks && !had_instring) { tick = 0; - st->instring = 0; + if (st->oinstring) free (st->oinstring); + st->instring = st->oinstring = 0; maininit(st); st->reset_p = True; st->autopal = False; @@ -764,9 +767,12 @@ vermiculate_init (Display *d, Window w) 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->oinstring = get_string_resource (st->dpy, "instring", "Instring"); + if (st->oinstring && !*st->oinstring) { + free (st->oinstring); + st->oinstring = 0; + } + st->instring = st->oinstring; st->max_ticks = get_integer_resource (st->dpy, "ticks", "Integer"); st->speed = get_integer_resource (st->dpy, "speed", "Speed"); @@ -1189,11 +1195,9 @@ static void vermiculate_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; - - if (st->point) - { - free(st->point); - } + XFreeGC (dpy, st->mygc); + if (st->oinstring) free (st->oinstring); + if (st->point) free(st->point); free (st); } diff --git a/hacks/vfeedback.c b/hacks/vfeedback.c index 5b482a7..a2f32a0 100644 --- a/hacks/vfeedback.c +++ b/hacks/vfeedback.c @@ -599,6 +599,7 @@ vfeedback_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; analogtv_release (st->tv); + free (st->rec.input); if (st->pix) XFreePixmap (dpy, st->pix); XFreeGC (dpy, st->gc); diff --git a/hacks/wander.c b/hacks/wander.c index 50fe255..37f6e1b 100644 --- a/hacks/wander.c +++ b/hacks/wander.c @@ -241,6 +241,7 @@ wander_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFreeGC (st->dpy, st->context); + if (st->eraser) eraser_free (st->eraser); free (st); } diff --git a/hacks/whirlwindwarp.c b/hacks/whirlwindwarp.c index 3525e49..a55328c 100644 --- a/hacks/whirlwindwarp.c +++ b/hacks/whirlwindwarp.c @@ -479,6 +479,8 @@ static void whirlwindwarp_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->draw_gc); + XFreeGC (dpy, st->erase_gc); free (st); } diff --git a/hacks/whirlygig.c b/hacks/whirlygig.c index 22c7ddd..8c3bd1f 100644 --- a/hacks/whirlygig.c +++ b/hacks/whirlygig.c @@ -655,6 +655,13 @@ whirlygig_event (Display *dpy, Window window, void *closure, XEvent *event) static void whirlygig_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + free (st->info); + XFreeGC (dpy, st->fgc); + XFreeGC (dpy, st->bgc); + if (st->xmode_str) free (st->xmode_str); + if (st->ymode_str) free (st->ymode_str); + free (st); } diff --git a/hacks/wormhole.c b/hacks/wormhole.c index f28c5b2..602be98 100644 --- a/hacks/wormhole.c +++ b/hacks/wormhole.c @@ -281,15 +281,13 @@ static void moveColorChanger( color_changer * ch ) } -#if 0 -static void destroyColorChanger( color_changer * ch ) +static void destroyColorChanger( struct state *st, color_changer * ch ) { int q; for ( q = 0; q < ch->max; q++ ) - XFreeColors( st->dpy, *cmap, &( ch->shade[q].pixel ), 1, 0 ); + XFreeColors( st->dpy, st->cmap, &( ch->shade[q].pixel ), 1, 0 ); free( ch->shade ); } -#endif static void resizeWormhole( struct state *st, wormhole * worm ) { @@ -353,21 +351,26 @@ static void initWormhole( struct state *st, wormhole * worm, Display * display, 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 = (starline **)calloc(sizeof(starline *), worm->num_stars); + for ( i = 0; i < worm->num_stars; i++ ) { + if (worm->stars[i]) free (worm->stars[i]); worm->stars[i] = NULL; + } } -#if 0 -static void destroyWormhole( wormhole * worm ) +static void destroyWormhole( struct state *st, wormhole * worm ) { - destroyColorChanger( &(worm->changer), st->dpy, cmap ); - if (work->work != st->window) + int i; + destroyColorChanger( st, &(worm->changer)); + if (worm->work != st->window) { XFreePixmap( st->dpy, worm->work ); - free( worm->stars ); + worm->work = 0; + } + for (i = 0; i < worm->num_stars; i++) + if (worm->stars[i]) free(worm->stars[i]); + free(worm->stars); } -#endif static double Cos( int a ) { @@ -696,6 +699,8 @@ static void wormhole_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + destroyWormhole (st, &st->worm); + XFreeGC (dpy, st->gc); free (st); } diff --git a/hacks/xanalogtv.c b/hacks/xanalogtv.c index 80cc7d9..f3842dc 100644 --- a/hacks/xanalogtv.c +++ b/hacks/xanalogtv.c @@ -88,7 +88,7 @@ struct state { chansetting *cs; int change_now; - int colorbars_only_p; + Bool colorbars_only_p, no_colorbars_p; }; @@ -179,7 +179,7 @@ update_smpte_colorbars(analogtv_input *input) xpos, ypos, black_ntsc); } } - ypos += st->ugly_font.char_h*5/2; + ypos += (st->ugly_font.char_h * ANALOGTV_SCALE)*5/2; if (st->logo) { @@ -191,7 +191,7 @@ update_smpte_colorbars(analogtv_input *input) w2, h2); } - ypos += 58; + ypos += 58 * ANALOGTV_SCALE; #if 0 analogtv_draw_string_centered(input, &st->ugly_font, @@ -254,6 +254,7 @@ hack_resources (Display *dpy) value.addr = buf2; value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); + free (val); } #endif /* HAVE_JWXYZ */ } @@ -351,17 +352,23 @@ static void add_stations(struct state *st) static void load_station_images(struct state *st) { int i; + char *img_file = get_string_resource (st->dpy, "image", "Image"); + XImage *ximage = 0; + 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 */ - st->colorbars_only_p) { + if (!st->no_colorbars_p && + (i == 0 || /* station 0 is always colorbars */ + st->colorbars_only_p)) { input->updater = update_smpte_colorbars; input->do_teletext=1; } #ifdef USE_TEST_PATTERNS - else if (random()%5==0) { + else if (!st->no_colorbars_p && + !(img_file && *img_file) && + ((random() % 5) == 0)) { int count = 0, j; for (count = 0; st->test_patterns[count]; count++) ; @@ -372,12 +379,31 @@ static void load_station_images(struct state *st) analogtv_setup_teletext(input); } #endif - else { + else if (img_file && *img_file) { + + /* Load a single image file into every free channel. */ + if (! ximage) { + int w, h; + Pixmap p = file_to_pixmap (st->dpy, st->window, img_file, &w, &h, 0); + ximage = XGetImage (st->dpy, p, 0, 0, w, h, ~0L, ZPixmap); + XFreePixmap (st->dpy, p); + } + + analogtv_input *input = st->stations[i]; + analogtv_setup_sync(input, 1, (random()%20)==0); + analogtv_load_ximage (st->tv, input, ximage, 0, 0, 0, 0, 0); + analogtv_setup_teletext(input); + st->chansettings[i].image_loaded_p = True; + + } else { analogtv_load_random_image(st); input->do_teletext=1; st->chansettings[i].image_loaded_p = False; } } + + if (img_file) free (img_file); + if (ximage) XDestroyImage (ximage); } @@ -399,6 +425,8 @@ xanalogtv_init (Display *dpy, Window window) st->colorbars_only_p = get_boolean_resource(dpy, "colorbarsOnly", "ColorbarsOnly"); + st->no_colorbars_p = + get_boolean_resource(dpy, "noColorbars", "NoColorbars"); /* if (!st->colorbars_only_p) */ { @@ -618,9 +646,13 @@ static void xanalogtv_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + int i; analogtv_release(st->tv); if (st->logo) XDestroyImage (st->logo); if (st->logo_mask) XDestroyImage (st->logo_mask); + if (st->ugly_font.text_im) XDestroyImage (st->ugly_font.text_im); + for (i = 0; i < MAX_STATIONS; i++) + if (st->stations[i]) free (st->stations[i]); # ifdef USE_TEST_PATTERNS { int i; @@ -639,6 +671,8 @@ static const char *xanalogtv_defaults [] = { "*grabDesktopImages: False", /* HAVE_JWXYZ */ "*chooseRandomImages: True", /* HAVE_JWXYZ */ "*colorbarsOnly: False", + "*noColorbars: False", + "*image: ", ANALOGTV_DEFAULTS 0, }; @@ -646,6 +680,8 @@ static const char *xanalogtv_defaults [] = { static XrmOptionDescRec xanalogtv_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-colorbars-only", ".colorbarsOnly", XrmoptionNoArg, "True" }, + { "-no-colorbars", ".noColorbars", XrmoptionNoArg, "True" }, + { "-image", ".image", XrmoptionSepArg, 0 }, ANALOGTV_OPTIONS { 0, 0, 0, 0 } }; diff --git a/hacks/xflame.c b/hacks/xflame.c index 1037460..d2273b1 100644 --- a/hacks/xflame.c +++ b/hacks/xflame.c @@ -202,8 +202,8 @@ InitFlame(struct state *st) 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)); + st->flame = (unsigned char *) calloc((st->fwidth + 2) * (st->fheight + 2), + sizeof(unsigned char)); if (!st->flame) { @@ -656,7 +656,7 @@ loadBitmap (struct state *st) int blur = 0; # ifdef HAVE_JWXYZ - const char *bitmap_name = "(default)"; /* #### always use builtin */ + char *bitmap_name = strdup("(default)"); /* #### always use builtin */ # else char *bitmap_name = get_string_resource (st->dpy, "bitmap", "Bitmap"); # endif @@ -671,6 +671,8 @@ loadBitmap (struct state *st) else image = file_to_ximage (st->dpy, st->visual, bitmap_name); + if (bitmap_name) free (bitmap_name); + if (! image) return 0; while (image->width < st->width / 10 && @@ -769,6 +771,13 @@ xflame_event (Display *dpy, Window window, void *closure, XEvent *event) static void xflame_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + if (st->xim) + destroy_xshm_image (dpy, st->xim, &st->shminfo); + free (st->theim); + free (st->flame); + XFreeGC (dpy, st->gc); + free (st); } diff --git a/hacks/ximage-loader.c b/hacks/ximage-loader.c index 382699b..cb86ab3 100644 --- a/hacks/ximage-loader.c +++ b/hacks/ximage-loader.c @@ -87,8 +87,13 @@ make_ximage (Display *dpy, Visual *visual, const char *filename, g_type_init (); # endif # endif - gdk_pixbuf_xlib_init (dpy, DefaultScreen (dpy)); - xlib_rgb_init (dpy, DefaultScreenOfDisplay (dpy)); + if (dpy) + { + /* Turns out gdk-pixbuf works even if you don't have display + connection, which is good news for analogtv-cli. */ + gdk_pixbuf_xlib_init (dpy, DefaultScreen (dpy)); + xlib_rgb_init (dpy, DefaultScreenOfDisplay (dpy)); + } initted = 1; } @@ -119,6 +124,7 @@ make_ximage (Display *dpy, Visual *visual, const char *filename, pb = gdk_pixbuf_new_from_stream (s, 0, &gerr); g_input_stream_close (s, NULL, NULL); + /* #### valgrind on xflame says there's a small leak in s? */ g_object_unref (s); if (! pb) @@ -198,6 +204,7 @@ make_ximage (Display *dpy, Visual *visual, const char *filename, row += stride; } + /* #### valgrind on xflame says there's a small leak in pb? */ g_object_unref (pb); return image; } diff --git a/hacks/xjack.c b/hacks/xjack.c index f5a3eb7..27e4c9e 100644 --- a/hacks/xjack.c +++ b/hacks/xjack.c @@ -97,6 +97,7 @@ xjack_init (Display *dpy, Window window) st->font = load_font_retry (st->dpy, fontname); if (!st->font) abort(); + if (fontname) free (fontname); gcv.font = st->font->fid; gcv.foreground = get_pixel_resource (st->dpy, st->xgwa.colormap, @@ -461,6 +462,8 @@ static void xjack_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->gc); + XFreeFont (dpy, st->font); free (st); } diff --git a/hacks/xlockmore.c b/hacks/xlockmore.c index 79d430a..addfd4c 100644 --- a/hacks/xlockmore.c +++ b/hacks/xlockmore.c @@ -71,6 +71,9 @@ xlockmore_setup (struct xscreensaver_function_table *xsft, void *arg) /* Translate the xlockmore `opts[]' argument to a form that screenhack.c expects. + + Some of the strings in here are leaked at exit, but since this code + only runs on X11, that doesn't matter. */ new_options = (XrmOptionDescRec *) calloc (xlockmore_opts->numopts*3 + 100, sizeof (*new_options)); diff --git a/hacks/xlockmore.h b/hacks/xlockmore.h index 285a126..bbb7f84 100644 --- a/hacks/xlockmore.h +++ b/hacks/xlockmore.h @@ -1,5 +1,5 @@ /* xlockmore.h --- xscreensaver compatibility layer for xlockmore modules. - * xscreensaver, Copyright (c) 1997-2017 Jamie Zawinski <jwz@jwz.org> + * xscreensaver, Copyright (c) 1997-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -177,8 +177,10 @@ ERROR! Sorry, xlockmore.h requires ANSI C (gcc, for example.) # ifdef USE_GL # define XLOCKMORE_FPS xlockmore_gl_compute_fps +# define XLOCKMORE_FPS_FREE xlockmore_gl_free_fps # else # define XLOCKMORE_FPS xlockmore_do_fps +# define XLOCKMORE_FPS_FREE fps_free # endif # ifdef HAVE_JWXYZ @@ -246,7 +248,7 @@ ERROR! Sorry, xlockmore.h requires ANSI C (gcc, for example.) xlockmore_setup, \ & NAME ## _xlockmore_function_table, \ 0, 0, 0, 0, 0, \ - XLOCKMORE_FPS, \ + XLOCKMORE_FPS, XLOCKMORE_FPS_FREE, \ XLOCKMORE_VISUAL }; \ \ XSCREENSAVER_LINK (NAME ## _xscreensaver_function_table) diff --git a/hacks/xlockmoreI.h b/hacks/xlockmoreI.h index bf0adbf..440d39a 100644 --- a/hacks/xlockmoreI.h +++ b/hacks/xlockmoreI.h @@ -73,6 +73,7 @@ typedef struct ModeInfo ModeInfo; extern void do_fps (ModeInfo *); extern void xlockmore_gl_compute_fps (Display *, Window, fps_state *, void *); extern void xlockmore_gl_draw_fps (ModeInfo *); +extern void xlockmore_gl_free_fps (fps_state *); # define do_fps xlockmore_gl_draw_fps diff --git a/hacks/xlyap.c b/hacks/xlyap.c index 2d43ce9..9f1305b 100644 --- a/hacks/xlyap.c +++ b/hacks/xlyap.c @@ -600,6 +600,7 @@ parseargs(struct state *st) if (st->Forcing[findex] >= NUMMAPS) usage(); } + if (optarg) free (optarg); } #endif if (get_boolean_resource(st->dpy, "useLog", "Boolean")) @@ -624,6 +625,7 @@ parseargs(struct state *st) if (s && *s) { st->prob=atof(s); st->Rflag++; setforcing(st); } + if (s) free (s); st->settle = get_integer_resource(st->dpy, "settle", "Integer"); @@ -633,11 +635,13 @@ parseargs(struct state *st) st->min_a = atof(s); st->aflag++; } + if (s) free (s); s = get_string_resource(st->dpy, "minB", "Float"); if (s && *s) { st->min_b=atof(s); st->bflag++; } + if (s) free (s); #else st->min_a = get_float_resource (st->dpy, "minA", "Float"); st->aflag++; @@ -665,12 +669,14 @@ parseargs(struct state *st) ch++; } } + if (s) free (s); s = get_string_resource(st->dpy, "bRange", "Float"); if (s && *s) { st->b_range = atof(s); st->hflag++; } + if (s) free (s); st->start_x = get_float_resource(st->dpy, "startX", "Float"); @@ -693,6 +699,7 @@ parseargs(struct state *st) for (i=0;i<FUNCMAXINDEX;i++) st->Forcing[i] = st->mapindex; } + if (s) free (s); st->outname = get_string_resource(st->dpy, "outputFile", "Integer"); @@ -707,6 +714,7 @@ parseargs(struct state *st) if (s && *s) { st->a_range = atof(s); st->wflag++; } + if (s) free (s); st->max_a = st->min_a + st->a_range; st->max_b = st->min_b + st->b_range; @@ -1924,6 +1932,7 @@ xlyap_free (Display *dpy, Window window, void *closure) /* XFreeGC (st->dpy, st->RubberGC);*/ for (i = 0; i < st->maxcolor; i++) XFreeGC (st->dpy, st->Data_GC[i]); + if (st->outname) free (st->outname); free (st); } diff --git a/hacks/xmatrix.c b/hacks/xmatrix.c index decddaa..45c5f9d 100644 --- a/hacks/xmatrix.c +++ b/hacks/xmatrix.c @@ -437,6 +437,7 @@ init_trace (m_state *state) if (!s) goto FAIL; + if (state->tracing) free (state->tracing); state->tracing = (signed char *) malloc (strlen (s) + 1); s3 = state->tracing; @@ -450,6 +451,7 @@ init_trace (m_state *state) state->glyph_map = decimal_encoding; state->nglyphs = countof(decimal_encoding); + free (s); return; @@ -580,7 +582,7 @@ xmatrix_init (Display *dpy, Window window) state->small_p = (state->xgwa.width < 300); { - const char *s = get_string_resource (dpy, "matrixFont", "String"); + char *s = get_string_resource (dpy, "matrixFont", "String"); if (!s || !*s || !strcasecmp(s, "large")) state->small_p = False; else if (!strcasecmp(s, "small")) @@ -588,6 +590,7 @@ xmatrix_init (Display *dpy, Window window) else fprintf (stderr, "%s: matrixFont should be 'small' or 'large' not '%s'\n", progname, s); + if (s) free (s); } load_images (dpy, state); @@ -733,6 +736,7 @@ xmatrix_init (Display *dpy, Window window) fprintf (stderr, "not `%s'\n", mode); set_mode (state, MATRIX); } + if (mode) free (mode); if (state->mode == MATRIX && get_boolean_resource (dpy, "trace", "Boolean")) set_mode (state, ((random() % 3) ? TRACE_TEXT_A : TRACE_TEXT_B)); @@ -1795,13 +1799,20 @@ static void xmatrix_free (Display *dpy, Window window, void *closure) { m_state *state = (m_state *) closure; + int i; if (state->tc) textclient_close (state->tc); if (state->cursor_timer) XtRemoveTimeOut (state->cursor_timer); - - /* #### there's more to free here */ - + XFreeGC (dpy, state->draw_gc); + XFreeGC (dpy, state->erase_gc); + XFreeGC (dpy, state->scratch_gc); + free (state->cells); + free (state->background); + free (state->feeders); + if (state->tracing) free (state->tracing); + for (i = 0; i < CHAR_MAPS; i++) + if (state->images[i]) XFreePixmap (dpy, state->images[i]); free (state); } diff --git a/hacks/xrayswarm.c b/hacks/xrayswarm.c index 678c7b0..d14eb39 100644 --- a/hacks/xrayswarm.c +++ b/hacks/xrayswarm.c @@ -324,6 +324,7 @@ static int initGraphics(struct state *st) color.flags=DoRed|DoGreen|DoBlue; XAllocColor(st->dpy,cmap,&color); xgcv.foreground=color.pixel; + if (st->fgc[i]) XFreeGC (st->dpy, st->fgc[i]); st->fgc[i] = XCreateGC(st->dpy, st->win, GCForeground | GCFunction,&xgcv); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (st->dpy, st->fgc[i], False); @@ -1218,6 +1219,10 @@ static void xrayswarm_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + int i; + for (i = 0; i < 256; i++) + if (st->fgc[i]) XFreeGC (dpy, (st->fgc[i])); + XFreeGC (dpy, st->cgc); free (st); } diff --git a/hacks/xspirograph.c b/hacks/xspirograph.c index e6504ff..a67d8b2 100644 --- a/hacks/xspirograph.c +++ b/hacks/xspirograph.c @@ -303,6 +303,7 @@ static void xspirograph_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; + XFreeGC (dpy, st->draw_gc); free (st); } diff --git a/jwxyz/jwxyz.h b/jwxyz/jwxyz.h index c70bdbe..fa76571 100644 --- a/jwxyz/jwxyz.h +++ b/jwxyz/jwxyz.h @@ -39,6 +39,7 @@ extern void jwxyz_abort(const char *fmt, ...) __dead2; #define abort() jwxyz_abort("abort in %s:%d", __FUNCTION__, __LINE__) +#define exit(N) jwxyz_abort("abort in %s:%d", __FUNCTION__, __LINE__) typedef int Bool; typedef int Status; diff --git a/po/POTFILES.in b/po/POTFILES.in index 9b84188..628e137 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,4 +1,4 @@ -# Auto-generated: Sun Aug 12 16:36:38 PDT 2018 +# Auto-generated: Fri Dec 28 16:21:54 PST 2018 driver/demo-Gtk-conf.c driver/demo-Gtk.c driver/screensaver-properties.desktop.in @@ -111,6 +111,7 @@ hacks/config/grav.xml hacks/config/greynetic.xml hacks/config/halftone.xml hacks/config/halo.xml +hacks/config/handsy.xml hacks/config/helix.xml hacks/config/hexadrop.xml hacks/config/hexstrut.xml diff --git a/utils/Makefile.in b/utils/Makefile.in index 56fc602..dbb593b 100644 --- a/utils/Makefile.in +++ b/utils/Makefile.in @@ -195,7 +195,7 @@ CCUTILS = $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $(CC) -c $(CCUTILS) $< # Two versions of this: driver/ does not link with Xft, but hacks/ does. -font-retry-xft.o: font-retry.c +font-retry-xft.o: $(srcdir)/font-retry.c $(CC) -c $(CCUTILS) -DUSE_XFT $< -o $@ diff --git a/utils/colors.c b/utils/colors.c index e6abd48..5445cd6 100644 --- a/utils/colors.c +++ b/utils/colors.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski <jwz@jwz.org> +/* xscreensaver, Copyright (c) 1997-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -383,9 +383,22 @@ make_color_path (Screen *screen, Visual *visual, Colormap cmap, /* Floating-point round-off can make us decide to use fewer colors. */ if (k < *ncolorsP) { + /* We used to just return the smaller set of colors, but that meant + that after re-generating the color map repeatedly, the number of + colors in use would tend toward 0, which not only looked bad but + also often caused crashes. So instead, just duplicate the last + color to pad things out. */ +# if 0 *ncolorsP = k; if (k <= 0) return; +# else + for (i = k+1; i < *ncolorsP; i++) + /* #### Should duplicate the allocation of the color cell here + to avoid a double-color-free on PseudoColor, but it's 2018 + and I don't care, */ + colors[i] = colors[k]; +# endif } if (!allocate_p) diff --git a/utils/erase.c b/utils/erase.c index ae15ac8..fdf7496 100644 --- a/utils/erase.c +++ b/utils/erase.c @@ -750,7 +750,7 @@ eraser_init (Display *dpy, Window window) which = -1; else which = get_integer_resource(dpy, "eraseMode", "Integer"); - free (s); + if (s) free (s); if (which < 0 || which >= countof(erasers)) which = random() % countof(erasers); diff --git a/utils/font-retry.c b/utils/font-retry.c index c3e91a0..ab999e2 100644 --- a/utils/font-retry.c +++ b/utils/font-retry.c @@ -25,19 +25,21 @@ extern const char *progname; #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) +#undef DEBUG + static void * load_font_retry_1 (Display *dpy, int screen, const char *xlfd, Bool xft_p) { # ifdef USE_XFT -# define LOADFONT() (xft_p \ - ? (void *) XftFontOpenXlfd (dpy, screen, xlfd) \ - : (void *) XLoadQueryFont (dpy, xlfd)) +# define LOADFONT(F) (xft_p \ + ? (void *) XftFontOpenXlfd (dpy, screen, (F)) \ + : (void *) XLoadQueryFont (dpy, (F))) # else -# define LOADFONT() ((void *) XLoadQueryFont (dpy, xlfd)) +# define LOADFONT(F) ((void *) XLoadQueryFont (dpy, (F))) # endif - void *f = LOADFONT(); + void *f = xlfd ? LOADFONT(xlfd) : 0; # ifndef USE_XFT if (xft_p) abort(); @@ -46,11 +48,18 @@ load_font_retry_1 (Display *dpy, int screen, const char *xlfd, Bool xft_p) # ifdef HAVE_JWXYZ return f; # else /* !HAVE_JWXYZ */ + if (! xlfd) xlfd = "<null>"; if (f) - return f; + { +# ifdef DEBUG + fprintf (stderr, "%s: loaded %s\n", progname, xlfd); +# endif + return f; + } else { - Bool bold_p = (!!strcasestr (xlfd, "-bold-")); + Bool bold_p = (!!strcasestr (xlfd, "-bold-") || + !!strcasestr (xlfd, "-ocr")); Bool italic_p = (!!strcasestr (xlfd, "-i-") || !!strcasestr (xlfd, "-o-")); Bool fixed_p = (!!strcasestr (xlfd, "courier") || @@ -59,6 +68,10 @@ load_font_retry_1 (Display *dpy, int screen, const char *xlfd, Bool xft_p) !!strcasestr (xlfd, "-c-")); int size = 0; +# ifdef DEBUG + fprintf (stderr, "%s: failed %s\n", progname, xlfd); +# endif + if (!strcmp (xlfd, "vga")) /* BSOD uses this: it has no XLFD name. */ fixed_p = True, size = 120; @@ -90,7 +103,7 @@ load_font_retry_1 (Display *dpy, int screen, const char *xlfd, Bool xft_p) fprintf (stderr, "%s: unloadable, unparsable font: \"%s\"\n", progname, xlfd); xlfd = "fixed"; - return LOADFONT(); + return LOADFONT(xlfd); } else { @@ -145,13 +158,17 @@ load_font_retry_1 (Display *dpy, int screen, const char *xlfd, Bool xft_p) spacings[e], "*", /* average width */ charsets[a]); - /* fprintf(stderr, "%s: trying %s\n", progname, buf);*/ - f = LOADFONT(); +# ifdef DEBUG + fprintf(stderr, "%s: trying %s\n", progname, buf); +# endif + f = LOADFONT(buf); if (f) { - /* fprintf (stderr, +# ifdef DEBUG + fprintf (stderr, "%s: substituted \"%s\" for \"%s\"\n", - progname, buf, xlfd); */ + progname, buf, xlfd); +# endif return f; } } @@ -159,7 +176,7 @@ load_font_retry_1 (Display *dpy, int screen, const char *xlfd, Bool xft_p) fprintf (stderr, "%s: unable to find any alternatives to \"%s\"\n", progname, xlfd); xlfd = "fixed"; - return LOADFONT(); + return LOADFONT(xlfd); } } # endif /* !HAVE_JWXYZ */ diff --git a/utils/textclient-mobile.c b/utils/textclient-mobile.c index c321487..4d0d891 100644 --- a/utils/textclient-mobile.c +++ b/utils/textclient-mobile.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2012-2016 Jamie Zawinski <jwz@jwz.org> +/* xscreensaver, Copyright (c) 2012-2018 Jamie Zawinski <jwz@jwz.org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -311,11 +311,13 @@ textclient_strip_html (const char *html) int comment = 0; int white = 0; int nl = 0; - char *ret = (char *) malloc ((strlen(html) * 4) + 1); // room for UTF8 + int L = strlen(html); + char *ret = (char *) malloc ((L * 4) + 1); // room for UTF8 char *out = ret; *out = 0; for (const char *in = html; *in; in++) { + if (in >= html + L) abort(); if (comment) { if (!strncmp (in, "-->", 3)) { comment = 0; @@ -339,7 +341,7 @@ textclient_strip_html (const char *html) white = 1; } } else if (*in == ' ' || *in == '\t' || *in == '\r' || *in == '\n') { - if (!white && out != html) + if (!white && out != ret) *out++ = ' '; white = 1; } else { @@ -552,7 +554,8 @@ strip_wiki (char *text) static char * textclient_strip_rss (const char *rss) { - char *ret = malloc (strlen(rss) * 4 + 1); // room for UTF8 + int L = strlen(rss); + char *ret = malloc (L * 4 + 1); // room for UTF8 char *out = ret; const char *a = 0, *b = 0, *c = 0, *d = 0, *t = 0; int head = 1; @@ -561,6 +564,7 @@ textclient_strip_rss (const char *rss) *out = 0; for (const char *in = rss; *in; in++) { + if (in >= rss + L) abort(); if (*in == '<') { if (!strncasecmp (in, "<item", 5) || // New item, dump. !strncasecmp (in, "<entry", 6)) { @@ -592,6 +596,8 @@ textclient_strip_rss (const char *rss) out += strlen (out); } + if (done) break; + } else if (head) { // still before first <item> ; } else if (!strncasecmp (in, "<title", 6)) { diff --git a/utils/version.h b/utils/version.h index 5ad7580..7bdae95 100644 --- a/utils/version.h +++ b/utils/version.h @@ -1,2 +1,2 @@ static const char screensaver_id[] = - "@(#)xscreensaver 5.40 (12-Aug-2018), by Jamie Zawinski (jwz@jwz.org)"; + "@(#)xscreensaver 5.42 (28-Dec-2018), by Jamie Zawinski (jwz@jwz.org)"; diff --git a/utils/yarandom.h b/utils/yarandom.h index 711aadd..9a75cdf 100644 --- a/utils/yarandom.h +++ b/utils/yarandom.h @@ -25,8 +25,23 @@ #undef drand48 #undef srandom #undef srand -#undef srand48 #undef frand +#undef sranddev +#undef srandomdev +#undef arc4random +#undef arc4random_addrandom +#undef arc4random_buf +#undef arc4random_stir +#undef arc4random_uniform +#undef erand48 +#undef jrand48 +#undef lcong48 +#undef lrand48 +#undef mrand48 +#undef nrand48 +#undef seed48 +#undef srand48 +#undef rand_r #undef RAND_MAX #ifdef VMS @@ -47,8 +62,23 @@ extern void ya_rand_init (unsigned int); #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 sranddev __ERROR_do_not_call_sranddev_in_xscreensaver__ #define ya_rand_init __ERROR_do_not_call_ya_rand_init_in_xscreensaver__ +#define srandomdev __ERROR_do_not_call_srandomdev_in_xscreensaver__ +#define arc4random __ERROR_do_not_call_arc4random_in_xscreensaver__ +#define arc4random_addrandom __ERROR_do_not_call_arc4random_in_xscreensaver__ +#define arc4random_buf __ERROR_do_not_call_arc4random_in_xscreensaver__ +#define arc4random_stir __ERROR_do_not_call_arc4random_in_xscreensaver__ +#define arc4random_uniform __ERROR_do_not_call_arc4random_in_xscreensaver__ +#define erand48 __ERROR_do_not_call_erand48_in_xscreensaver__ +#define jrand48 __ERROR_do_not_call_jrand48_in_xscreensaver__ +#define lcong48 __ERROR_do_not_call_lcong48_in_xscreensaver__ +#define lrand48 __ERROR_do_not_call_lrand48_in_xscreensaver__ +#define mrand48 __ERROR_do_not_call_mrand48_in_xscreensaver__ +#define nrand48 __ERROR_do_not_call_nrand48_in_xscreensaver__ +#define seed48 __ERROR_do_not_call_seed48_in_xscreensaver__ +#define srand48 __ERROR_do_not_call_srand48_in_xscreensaver__ +#define rand_r __ERROR_do_not_call_rand_r_in_xscreensaver__ #if defined (__GNUC__) && (__GNUC__ >= 2) diff --git a/xscreensaver.spec b/xscreensaver.spec index 1e14f51..da913e6 100644 --- a/xscreensaver.spec +++ b/xscreensaver.spec @@ -1,5 +1,5 @@ %define name xscreensaver -%define version 5.40 +%define version 5.42 Summary: X screen saver and locker Name: %{name} |