From 18ab896876b2d7ecaf4a4eda26a14e0999a8b396 Mon Sep 17 00:00:00 2001 From: mick grierson Date: Fri, 14 Aug 2015 19:17:40 +0100 Subject: adding addon .. er --- .../xcshareddata/maximilianTest.xccheckout | 2 +- .../xcshareddata/maximilianTest_10.8.xccheckout | 41 +++++++++++++++++++++ .../UserInterfaceState.xcuserstate | Bin 50295 -> 35295 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 35699 bytes .../UserInterfaceState.xcuserstate | Bin 34420 -> 52300 bytes .../UserInterfaceState.xcuserstate | Bin 36978 -> 57991 bytes 6 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 maximilianTest.xcodeproj/project.xcworkspace/xcshareddata/maximilianTest_10.8.xccheckout create mode 100644 maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate (limited to 'maximilianTest.xcodeproj/project.xcworkspace') diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcshareddata/maximilianTest.xccheckout b/maximilianTest.xcodeproj/project.xcworkspace/xcshareddata/maximilianTest.xccheckout index 5d2d0a5..e79b845 100644 --- a/maximilianTest.xcodeproj/project.xcworkspace/xcshareddata/maximilianTest.xccheckout +++ b/maximilianTest.xcodeproj/project.xcworkspace/xcshareddata/maximilianTest.xccheckout @@ -5,7 +5,7 @@ IDESourceControlProjectFavoriteDictionaryKey IDESourceControlProjectIdentifier - D273FE0A-5762-4D51-9EDD-E4A13BC39DEF + C4FCE672-B26A-41DB-844A-5858A6AED09A IDESourceControlProjectName maximilianTest IDESourceControlProjectOriginsDictionary diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcshareddata/maximilianTest_10.8.xccheckout b/maximilianTest.xcodeproj/project.xcworkspace/xcshareddata/maximilianTest_10.8.xccheckout new file mode 100644 index 0000000..e4311ac --- /dev/null +++ b/maximilianTest.xcodeproj/project.xcworkspace/xcshareddata/maximilianTest_10.8.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + 47E07CF2-D8FB-474C-99E7-26F2F85B9717 + IDESourceControlProjectName + maximilianTest_10.8 + IDESourceControlProjectOriginsDictionary + + 9EA75D55FA54A28D61D05E99737654AEBBBF0FB9 + https://github.com/micknoise/Maximilian.git + + IDESourceControlProjectPath + maximilianTest_10.8.xcodeproj + IDESourceControlProjectRelativeInstallPathDictionary + + 9EA75D55FA54A28D61D05E99737654AEBBBF0FB9 + ../.. + + IDESourceControlProjectURL + https://github.com/micknoise/Maximilian.git + IDESourceControlProjectVersion + 111 + IDESourceControlProjectWCCIdentifier + 9EA75D55FA54A28D61D05E99737654AEBBBF0FB9 + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 9EA75D55FA54A28D61D05E99737654AEBBBF0FB9 + IDESourceControlWCCName + Maximilian + + + + diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/chris.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/chris.xcuserdatad/UserInterfaceState.xcuserstate index 208e77b..d556c35 100644 Binary files a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/chris.xcuserdatad/UserInterfaceState.xcuserstate and b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/chris.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..6ed211d Binary files /dev/null and b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate index 0bd34eb..a4e927b 100644 Binary files a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate and b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/mickgrierson.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/mickgrierson.xcuserdatad/UserInterfaceState.xcuserstate index 3fa04ba..6ab58c6 100644 Binary files a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/mickgrierson.xcuserdatad/UserInterfaceState.xcuserstate and b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/mickgrierson.xcuserdatad/UserInterfaceState.xcuserstate differ -- cgit v1.3 From b155008277cbdba3534ca392d67e2db199d9c458 Mon Sep 17 00:00:00 2001 From: mick grierson Date: Sun, 16 Aug 2015 14:48:19 +0100 Subject: updating core files --- maximilian.cpp | 108 ++++- maximilian.h | 280 ++++++++--- .../UserInterfaceState.xcuserstate | Bin 35699 -> 89334 bytes .../xcschemes/maximilianTest.xcscheme | 4 +- ofxMaxim/ofxMaxim/libs/maximilian.cpp | 349 +++++++++---- ofxMaxim/ofxMaxim/libs/maximilian.h | 178 +++---- .../ofxMaxim/libs/maximilian.cpp | 349 +++++++++---- .../ofxMaxim/libs/maximilian.h | 178 +++---- .../ofxMaxim/libs/maximilian.cpp | 351 ++++++++++---- .../ofxMaxim/libs/maximilian.h | 178 +++---- .../src/ofxMaxim/libs/maximilian.cpp | 537 ++++++++++++++++++--- .../src/ofxMaxim/libs/maximilian.h | 269 ++++++++--- 12 files changed, 1970 insertions(+), 811 deletions(-) mode change 100755 => 100644 ofxMaxim/openFrameworksExamples/OSX/OF0.8.4MaximExtractorExample/ofxMaxim/libs/maximilian.cpp mode change 100755 => 100644 ofxMaxim/openFrameworksExamples/OSX/ofxMaximExample_0.8.4_OSX_Granular/ofxMaxim/libs/maximilian.cpp mode change 100644 => 100755 ofxMaxim/openFrameworksExamples/windows/ofxMaximExampleVS2010-OF0072/src/ofxMaxim/libs/maximilian.h (limited to 'maximilianTest.xcodeproj/project.xcworkspace') diff --git a/maximilian.cpp b/maximilian.cpp index 7ee5868..7ba4978 100644 --- a/maximilian.cpp +++ b/maximilian.cpp @@ -39,7 +39,7 @@ * Uncomment the following to include Sean Barrett's Ogg Vorbis decoder. * If you're on windows, make sure to add the files std_vorbis.c and std_vorbis.h to your project*/ -#define VORBIS +//#define VORBIS #ifdef VORBIS extern "C" { @@ -541,6 +541,7 @@ bool maxiSample::loadOgg(string fileName, int channel) { readChannel=channel; int channelx; // cout << fileName << endl; + free(temp); myDataSize = stb_vorbis_decode_filename(const_cast(fileName.c_str()), &channelx, &temp); result = myDataSize > 0; printf("\nchannels = %d\nlength = %d",channelx,myDataSize); @@ -565,6 +566,7 @@ bool maxiSample::loadOgg(string fileName, int channel) { //This sets the playback position to the start of a sample void maxiSample::trigger() { position = 0; + recordPosition = 0; } //This is the main read function. @@ -572,8 +574,8 @@ bool maxiSample::read() { bool result; ifstream inFile( myPath.c_str(), ios::in | ios::binary); - result = (bool) inFile; - if (inFile) { + result = inFile.is_open(); + if (result) { bool datafound = false; inFile.seekg(4, ios::beg); inFile.read( (char*) &myChunkSize, 4 ); // read the ChunkSize @@ -617,7 +619,7 @@ bool maxiSample::read() } // read the data chunk - myData = (char*) malloc(myDataSize * sizeof(char)); + char * myData = (char*) malloc(myDataSize * sizeof(char)); inFile.seekg(filePos, ios::beg); inFile.read(myData, myDataSize); length=myDataSize*(0.5/myChannels); @@ -633,6 +635,7 @@ bool maxiSample::read() position+=2; } } + free(temp); temp = (short*) malloc(myDataSize * sizeof(char)); memcpy(temp, myData, myDataSize * sizeof(char)); @@ -651,11 +654,35 @@ bool maxiSample::read() //This plays back at the correct speed. Always loops. double maxiSample::play() { position++; - if ((long) position == length) position=0; + if ((long) position >= length) position=0; output = (double) temp[(long)position]/32767.0; return output; } +void maxiSample::setPosition(double newPos) { + position = maxiMap::clamp(newPos, 0.0, 1.0) * length; +} + +//start end and points are between 0 and 1 +double maxiSample::playLoop(double start, double end) { + position++; + if (position < length * start) position = length * start; + if ((long) position >= length * end) position = length * start; + output = (double) temp[(long)position]/32767.0; + return output; +} + +double maxiSample::playUntil(double end) { + position++; + if ((long) position maxValue) { + maxValue = abs(temp[i]); + } + } + float scale = 32767.0 * maxLevel / (float) maxValue; + for(int i=0; i < length; i++) { + temp[i] = round(scale * (float) temp[i]); + } +} + +void maxiSample::autoTrim(float alpha, float threshold, bool trimStart, bool trimEnd) { + + int startMarker=0; + if(trimStart) { + maxiLagExp startLag(alpha, 0); + while(startMarker < length) { + startLag.addSample(abs(temp[startMarker])); + if (startLag.value() > threshold) { + break; + } + startMarker++; + } + } + + int endMarker = length-1; + if(trimEnd) { + maxiLagExp endLag(alpha, 0); + while(endMarker > 0) { + endLag.addSample(abs(temp[endMarker])); + if (endLag.value() > threshold) { + break; + } + endMarker--; + } + } + + cout << "Autotrim: start: " << startMarker << ", end: " << endMarker << endl; + + int newLength = endMarker - startMarker; + if (newLength > 0) { + short *newData = (short*) malloc(sizeof(short) * newLength); + for(int i=0; i < newLength; i++) { + newData[i] = temp[i+startMarker]; + } + free(temp); + temp = newData; + myDataSize = newLength * 2; + length=newLength; + position=0; + recordPosition=0; + //envelope the start + int fadeSize=min((long)100, length); + for(int i=0; i < fadeSize; i++) { + float factor = i / (float) fadeSize; + temp[i] = round(temp[i] * factor); + temp[length - 1 - i] = round(temp[length - 1 - i] * factor); + } + } +} + @@ -1381,11 +1471,11 @@ double convert::mtof(int midinote) { } -void maxiEnvelopeFollower::setAttack(double attackMS) { +template<> void maxiEnvelopeFollower::setAttack(double attackMS) { attack = pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); } -void maxiEnvelopeFollower::setRelease(double releaseMS) { +template<> void maxiEnvelopeFollower::setRelease(double releaseMS) { release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); } diff --git a/maximilian.h b/maximilian.h index b3146d4..8a78c26 100755 --- a/maximilian.h +++ b/maximilian.h @@ -227,20 +227,35 @@ public: void setLength(unsigned long numSamples); - char* myData; +// char* myData; short* temp; // get/set for the Path property ~maxiSample() { - if (myData) free(myData); +// if (myData) free(myData); if (temp) free(temp); printf("freeing SampleData"); } - maxiSample():myData(NULL),temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; + maxiSample():temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; + + maxiSample& operator=(const maxiSample &source) { + if (this == &source) + return *this; + position=0; + recordPosition = 0; + myChannels = source.myChannels; + mySampleRate = maxiSettings::sampleRate; + free(temp); + myDataSize = source.myDataSize; + temp = (short*) malloc(myDataSize * sizeof(char)); + memcpy(temp, source.temp, myDataSize * sizeof(char)); + length = source.length; + return *this; + } bool load(string fileName, int channel=0); @@ -254,70 +269,77 @@ public: //read an ogg file into this class using stb_vorbis bool readOgg(); - void loopRecord(double newSample, const bool recordEnabled, const double recordMix) { + void loopRecord(double newSample, const bool recordEnabled, const double recordMix, double start = 0.0, double end = 1.0) { loopRecordLag.addSample(recordEnabled); + if (recordPosition < start * length) recordPosition = start * length; if(recordEnabled) { - double currentSample = ((short*)myData)[(unsigned long)recordPosition] / 32767.0; + double currentSample = temp[(unsigned long)recordPosition] / 32767.0; newSample = (recordMix * currentSample) + ((1.0 - recordMix) * newSample); newSample *= loopRecordLag.value(); - ((short*)myData)[(unsigned long)recordPosition] = newSample * 32767; + temp[(unsigned long)recordPosition] = newSample * 32767; } ++recordPosition; - if (recordPosition == length) - recordPosition=0; + if (recordPosition >= end * length) + recordPosition= start * length; } void clear(); void reset(); - - double play(); - - double playOnce(); - - double playOnce(double speed); - - double play(double speed); - - double play(double frequency, double start, double end, double &pos); - - double play(double frequency, double start, double end); - - double play4(double frequency, double start, double end); - - double bufferPlay(unsigned char &bufferin,long length); - - double bufferPlay(unsigned char &bufferin,double speed,long length); - - double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); - - double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); + + double play(); + + double playLoop(double start, double end); // start and end are between 0.0 and 1.0 + + double playOnce(); + + double playOnce(double speed); + + void setPosition(double newPos); // between 0.0 and 1.0 + + double playUntil(double end); + + double play(double speed); + + double play(double frequency, double start, double end, double &pos); + + double play(double frequency, double start, double end); + + double play4(double frequency, double start, double end); + + double bufferPlay(unsigned char &bufferin,long length); + + double bufferPlay(unsigned char &bufferin,double speed,long length); + + double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); + + double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); bool save() { - save(myPath); + return save(myPath); } bool save(string filename) { - fstream myFile (filename.c_str(), ios::out | ios::binary); - - // write the wav file per the wav file format - myFile.seekp (0, ios::beg); - myFile.write ("RIFF", 4); - myFile.write ((char*) &myChunkSize, 4); - myFile.write ("WAVE", 4); - myFile.write ("fmt ", 4); - myFile.write ((char*) &mySubChunk1Size, 4); - myFile.write ((char*) &myFormat, 2); - myFile.write ((char*) &myChannels, 2); - myFile.write ((char*) &mySampleRate, 4); - myFile.write ((char*) &myByteRate, 4); - myFile.write ((char*) &myBlockAlign, 2); - myFile.write ((char*) &myBitsPerSample, 2); - myFile.write ("data", 4); - myFile.write ((char*) &myDataSize, 4); - myFile.write (myData, myDataSize); - - return true; + fstream myFile (filename.c_str(), ios::out | ios::binary); + + // write the wav file per the wav file format + myFile.seekp (0, ios::beg); + myFile.write ("RIFF", 4); + myFile.write ((char*) &myChunkSize, 4); + myFile.write ("WAVE", 4); + myFile.write ("fmt ", 4); + myFile.write ((char*) &mySubChunk1Size, 4); + myFile.write ((char*) &myFormat, 2); + myFile.write ((char*) &myChannels, 2); + myFile.write ((char*) &mySampleRate, 4); + myFile.write ((char*) &myByteRate, 4); + myFile.write ((char*) &myBlockAlign, 2); + myFile.write ((char*) &myBitsPerSample, 2); + myFile.write ("data", 4); + myFile.write ((char*) &myDataSize, 4); + myFile.write ((char*) temp, myDataSize); + + return true; } // return a printable summary of the wav file @@ -328,32 +350,41 @@ public: std::cout << myDataSize; return summary; } + + void normalise(float maxLevel = 0.99); //0 < maxLevel < 1.0 + void autoTrim(float alpha = 0.3, float threshold = 6000, bool trimStart = true, bool trimEnd = true); //alpha of lag filter (lower == slower reaction), threshold to mark start and end, < 32767 }; class maxiMap { public: - static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { - return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; - } - - static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { - //clipping - val = max(min(val, inMax), inMin); - return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; - } - - static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { - //clipping - val = max(min(val, inMax), inMin); - return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; - } - - static int inline clamp(int v, const int low, const int high) { - v = min(high, v); - v = max(low, v); - return v; - } + static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { + val = max(min(val, inMax), inMin); + return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; + } + + static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; + } + + static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; + } + + //changed to templated function, e.g. maxiMap::maxiClamp(v, l, h); + template + static T inline clamp(T v, const T low, const T high) { + if (v > high) + v = high; + else if (v < low) { + v = low; + } + return v; + } }; @@ -491,26 +522,115 @@ inline double maxiChorus::chorus(const double input, const unsigned int delay, c return (output1 + output2 + input) / 3.0; } -class maxiEnvelopeFollower { +template +class maxiEnvelopeFollowerType { public: - maxiEnvelopeFollower() { + maxiEnvelopeFollowerType() { setAttack(100); setRelease(100); env = 0; } - void setAttack(double attackMS); - void setRelease(double releaseMS); - inline double play(double input) { + void setAttack(T attackMS) { + attack = pow( 0.01, 1.0 / (attackMS * maxiSettings::sampleRate * 0.001 ) ); + } + void setRelease(T releaseMS) { + release = pow( 0.01, 1.0 / (releaseMS * maxiSettings::sampleRate * 0.001 ) ); + } + inline T play(T input) { input = fabs(input); if (input>env) env = attack * (env - input) + input; else - env = release * (env - input) + input; + env = release * (env - input) + input; return env; } - void reset() {env=0;} + void reset() {env=0;} + inline T getEnv(){return env;} + inline void setEnv(T val){env = val;} +private: + T attack, release, env; +}; + +typedef maxiEnvelopeFollowerType maxiEnvelopeFollower; +typedef maxiEnvelopeFollowerType maxiEnvelopeFollowerF; + +class maxiDCBlocker { +public: + double xm1, ym1; + maxiDCBlocker() : xm1(0), ym1(0) {} + inline double play(double input, double R) { + ym1 = input - xm1 + R * ym1; + xm1 = input; + return ym1; + } +}; + +/* + State Variable Filter + + algorithm from http://www.cytomic.com/files/dsp/SvfLinearTrapOptimised.pdf + usage: + either set the parameters separately as required (to save CPU) + + filter.setCutoff(param1); + filter.setResonance(param2); + + w = filter.play(w, 0.0, 1.0, 0.0, 0.0); + + or set everything together at once + + w = filter.setCutoff(param1).setResonance(param2).play(w, 0.0, 1.0, 0.0, 0.0); + + */ +class maxiSVF { +public: + maxiSVF() : v0z(0), v1(0), v2(0) { setParams(1000, 1);} + + //20 < cutoff < 20000 + inline maxiSVF& setCutoff(double cutoff) { + setParams(cutoff, res); + return *this; + } + + //from 0 upwards, starts to ring from 2-3ish, cracks a bit around 10 + inline maxiSVF& setResonance(double q) { + setParams(freq, q); + return *this; + } + + //run the filter, and get a mixture of lowpass, bandpass, highpass and notch outputs + inline double play(double w, double lpmix, double bpmix, double hpmix, double notchmix) { + double low, band, high, notch; + double v1z = v1; + double v2z = v2; + double v3 = w + v0z - 2.0 * v2z; + v1 += g1*v3-g2*v1z; + v2 += g3*v3+g4*v1z; + v0z = w; + low = v2; + band = v1; + high = w-k*v1-v2; + notch = w-k*v1; + return (low * lpmix) + (band * bpmix) + (high * hpmix) + (notch * notchmix); + } + private: - double attack, release, env; + inline void setParams(double _freq, double _res) { + freq = _freq; + res = _res; + g = tan(PI * freq / maxiSettings::sampleRate); + damping = res == 0 ? 0 : 1.0 / res; + k = damping; + ginv = g / (1.0 + g * (g + k)); + g1 = ginv; + g2 = 2.0 * (g + k) * ginv; + g3 = g * ginv; + g4 = 2.0 * ginv; + } + + double v0z, v1, v2, g, damping, k, ginv, g1, g2, g3 ,g4; + double freq, res; + }; diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate index 6ed211d..8959558 100644 Binary files a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate and b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/maximilianTest.xcodeproj/xcuserdata/michaelgrierson.xcuserdatad/xcschemes/maximilianTest.xcscheme b/maximilianTest.xcodeproj/xcuserdata/michaelgrierson.xcuserdatad/xcschemes/maximilianTest.xcscheme index 51dce60..903750a 100644 --- a/maximilianTest.xcodeproj/xcuserdata/michaelgrierson.xcuserdatad/xcschemes/maximilianTest.xcscheme +++ b/maximilianTest.xcodeproj/xcuserdata/michaelgrierson.xcuserdatad/xcschemes/maximilianTest.xcscheme @@ -35,7 +35,7 @@ BlueprintIdentifier = "8DD76F620486A84900D96B5E" BuildableName = "maximilianTest" BlueprintName = "maximilianTest" - ReferencedContainer = "container:maximilianTest_10.8.xcodeproj"> + ReferencedContainer = "container:maximilianTest.xcodeproj"> @@ -55,7 +55,7 @@ BlueprintIdentifier = "8DD76F620486A84900D96B5E" BuildableName = "maximilianTest" BlueprintName = "maximilianTest" - ReferencedContainer = "container:maximilianTest_10.8.xcodeproj"> + ReferencedContainer = "container:maximilianTest.xcodeproj"> diff --git a/ofxMaxim/ofxMaxim/libs/maximilian.cpp b/ofxMaxim/ofxMaxim/libs/maximilian.cpp index 18b2af2..7ba4978 100644 --- a/ofxMaxim/ofxMaxim/libs/maximilian.cpp +++ b/ofxMaxim/ofxMaxim/libs/maximilian.cpp @@ -325,19 +325,6 @@ double maxiOsc::saw(double frequency) { phase += (1./(maxiSettings::sampleRate/(frequency))); return(output); -} - -double maxiOsc::triangle(double frequency) { - //This is a triangle wave. - if ( phase >= 1.0 ) phase -= 1.0; - phase += (1./(maxiSettings::sampleRate/(frequency))); - if (phase <= 0.5 ) { - output =(phase - 0.25) * 4; - } else { - output =((1.0-phase) - 0.25) * 4; - } - return(output); - } double maxiOsc::sawn(double frequency) { @@ -359,12 +346,29 @@ double maxiOsc::sawn(double frequency) { } +double maxiOsc::rect(double frequency, double duty) { + + return (output); +} + +double maxiOsc::triangle(double frequency) { + //This is a triangle wave. + if ( phase >= 1.0 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + if (phase <= 0.5 ) { + output =(phase - 0.25) * 4; + } else { + output =((1.0-phase) - 0.25) * 4; + } + return(output); + +} double maxiEnvelope::line(int numberofsegments,double segments[1000]) { //This is a basic multi-segment ramp generator that you can use for more or less anything. //However, it's not that intuitive. if (isPlaying==1) {//only make a sound once you've been triggered - period=2./(segments[valindex+1]*0.004); + period=4./(segments[valindex+1]*0.0044); nextval=segments[valindex+2]; currentval=segments[valindex]; if (currentval-amplitude > 0.0000001 && valindex < numberofsegments) { @@ -397,8 +401,7 @@ void maxiEnvelope::trigger(int index, double amp) { //Delay with feedback maxiDelayline::maxiDelayline() { - memset( memory, 0, 88200*sizeof (double) ); - phase=0; + memset( memory, 0, 88200*sizeof (double) ); } @@ -437,9 +440,9 @@ double maxiFilter::hipass(double input, double cutoff) { } //awesome. cuttof is freq in hz. res is between 1 and whatever. Watch out! double maxiFilter::lores(double input,double cutoff1, double resonance) { - cutoff=cutoff1*0.5; + cutoff=cutoff1; if (cutoff<10) cutoff=10; - if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (cutoff>(maxiSettings::sampleRate)) cutoff=(maxiSettings::sampleRate); if (resonance<1.) resonance = 1.; z=cos(TWOPI*cutoff/maxiSettings::sampleRate); c=2-2*z; @@ -453,9 +456,9 @@ double maxiFilter::lores(double input,double cutoff1, double resonance) { //working hires filter double maxiFilter::hires(double input,double cutoff1, double resonance) { - cutoff=cutoff1*0.5; + cutoff=cutoff1; if (cutoff<10) cutoff=10; - if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (cutoff>(maxiSettings::sampleRate)) cutoff=(maxiSettings::sampleRate); if (resonance<1.) resonance = 1.; z=cos(TWOPI*cutoff/maxiSettings::sampleRate); c=2-2*z; @@ -524,18 +527,20 @@ double *maxiMix::ambisonic(double input,double eight[8],double x,double y,double return(eight); } - +//This is the maxiSample load function. It just calls read. bool maxiSample::load(string fileName, int channel) { myPath = fileName; readChannel=channel; return read(); } +// This is for OGG loading bool maxiSample::loadOgg(string fileName, int channel) { #ifdef VORBIS bool result; readChannel=channel; int channelx; +// cout << fileName << endl; free(temp); myDataSize = stb_vorbis_decode_filename(const_cast(fileName.c_str()), &channelx, &temp); result = myDataSize > 0; @@ -558,11 +563,13 @@ bool maxiSample::loadOgg(string fileName, int channel) { return 0; } +//This sets the playback position to the start of a sample void maxiSample::trigger() { position = 0; recordPosition = 0; } +//This is the main read function. bool maxiSample::read() { bool result; @@ -612,7 +619,7 @@ bool maxiSample::read() } // read the data chunk - char *myData = (char*) malloc(myDataSize * sizeof(char)); + char * myData = (char*) malloc(myDataSize * sizeof(char)); inFile.seekg(filePos, ios::beg); inFile.read(myData, myDataSize); length=myDataSize*(0.5/myChannels); @@ -644,6 +651,7 @@ bool maxiSample::read() return result; // this should probably be something more descriptive } +//This plays back at the correct speed. Always loops. double maxiSample::play() { position++; if ((long) position >= length) position=0; @@ -651,40 +659,43 @@ double maxiSample::play() { return output; } +void maxiSample::setPosition(double newPos) { + position = maxiMap::clamp(newPos, 0.0, 1.0) * length; +} + //start end and points are between 0 and 1 double maxiSample::playLoop(double start, double end) { - position++; + position++; if (position < length * start) position = length * start; - if ((long) position >= length * end) position = length * start; - output = (double) temp[(long)position]/32767.0; - return output; + if ((long) position >= length * end) position = length * start; + output = (double) temp[(long)position]/32767.0; + return output; } -double maxiSample::playOnce() { - position++; - if ((long) position(newPos, 0.0, 1.0) * length; -} -double maxiSample::playUntil(double end) { +//This plays back at the correct speed. Only plays once. To retrigger, you have to manually reset the position +double maxiSample::playOnce() { position++; - if ((long) position=length) end=length-1; @@ -755,7 +769,7 @@ double maxiSample::play(double frequency, double start, double end, double &pos) } if ( pos >= end ) pos = start; - pos += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv))); + pos += ((end-start)/((maxiSettings::sampleRate)/(frequency*chandiv))); remainder = pos - floor(pos); long posl = floor(pos); if (posl+1threshold && attackphase!=1){ + holdcount=0; + releasephase=0; + attackphase=1; + if(currentRatio==0) currentRatio=ratio; + } + + if (attackphase==1 && currentRatio=ratio-1) { + attackphase=0; + releasephase=1; + } + + if (releasephase==1 && currentRatio>0.) { + currentRatio*=release; + } + + if (input>0.) { + output = input/(1.+currentRatio); + } else { + output = input/(1.+currentRatio); + } + + return output*(1+log(ratio)); +} + /* Lots of people struggle with the envelope generators so here's a new easy one. It takes mental numbers for attack and release tho. Basically, they're exponentials. @@ -1282,61 +1323,159 @@ double maxiEnv::ar(double input, double attack, double release, long holdtime, i return output; } -/* and here's a new adsr. It's not bad, very simple to use*/ +/* adsr. It's not bad, very simple to use*/ double maxiEnv::adsr(double input, double attack, double decay, double sustain, double release, long holdtime, int trigger) { - - if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ - holdcount=0; - decayphase=0; - sustainphase=0; - releasephase=0; - attackphase=1; - } - - if (attackphase==1) { - amplitude+=(1*attack); - output=input*amplitude; - } - - if (amplitude>=1) { - amplitude=1; - attackphase=0; - decayphase=1; - } - - if (decayphase==1) { - output=input*(amplitude*=decay); - if (amplitude<=sustain) { - decayphase=0; - holdphase=1; - } - } - - if (holdcount0.) { - output=input*(amplitude*=release); - - } - - return output; + + if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ + holdcount=0; + decayphase=0; + sustainphase=0; + releasephase=0; + attackphase=1; + } + + if (attackphase==1) { + releasephase=0; + amplitude+=(1*attack); + output=input*amplitude; + + if (amplitude>=1) { + amplitude=1; + attackphase=0; + decayphase=1; + } + } + + + if (decayphase==1) { + output=input*(amplitude*=decay); + if (amplitude<=sustain) { + decayphase=0; + holdphase=1; + } + } + + if (holdcount=holdtime && trigger==1) { + output=input*amplitude; + } + + if (holdcount>=holdtime && trigger!=1) { + holdphase=0; + releasephase=1; + } + + if (releasephase==1 && amplitude>0.) { + output=input*(amplitude*=release); + + } + + return output; } +double maxiEnv::adsr(double input, int trigger) { + + if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ + holdcount=0; + decayphase=0; + sustainphase=0; + releasephase=0; + attackphase=1; + } + + if (attackphase==1) { + releasephase=0; + amplitude+=(1*attack); + output=input*amplitude; + + if (amplitude>=1) { + amplitude=1; + attackphase=0; + decayphase=1; + } + } + + + if (decayphase==1) { + output=input*(amplitude*=decay); + if (amplitude<=sustain) { + decayphase=0; + holdphase=1; + } + } + + if (holdcount=holdtime && trigger==1) { + output=input*amplitude; + } + + if (holdcount>=holdtime && trigger!=1) { + holdphase=0; + releasephase=1; + } + + if (releasephase==1 && amplitude>0.) { + output=input*(amplitude*=release); + + } + + return output; +} + + +void maxiEnv::setAttack(double attackMS) { + attack = 1-pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiEnv::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiEnv::setSustain(double sustainL) { + sustain = sustainL; +} + +void maxiEnv::setDecay(double decayMS) { + decay = pow( 0.01, 1.0 / ( decayMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setAttack(double attackMS) { + attack = pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setThreshold(double thresholdI) { + threshold = thresholdI; +} + +void maxiDyn::setRatio(double ratioF) { + ratio = ratioF; +} + + double convert::mtof(int midinote) { return mtofarray[midinote]; } + +template<> void maxiEnvelopeFollower::setAttack(double attackMS) { + attack = pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +template<> void maxiEnvelopeFollower::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + diff --git a/ofxMaxim/ofxMaxim/libs/maximilian.h b/ofxMaxim/ofxMaxim/libs/maximilian.h index 03dfea5..8a78c26 100755 --- a/ofxMaxim/ofxMaxim/libs/maximilian.h +++ b/ofxMaxim/ofxMaxim/libs/maximilian.h @@ -30,12 +30,6 @@ * */ -/* - Feature request: - maxiNANINFAlarm - maxiLimiter - */ - #ifndef MAXIMILIAN_H #define MAXIMILIAN_H @@ -49,6 +43,10 @@ #include #include "math.h" +#ifdef _WIN32 //|| _WIN64 +#include +#endif + using namespace std; #ifndef PI #define PI 3.1415926535897932384626433832795 @@ -91,8 +89,9 @@ public: double noise(); double sinebuf(double frequency); double sinebuf4(double frequency); + double sawn(double frequency); + double rect(double frequency, double duty=0.5); void phaseReset(double phaseIn); - double sawn(double frequency); }; @@ -214,12 +213,12 @@ private: int myByteRate; short myBlockAlign; short myBitsPerSample; + double position, recordPosition; double speed; double output; maxiLagExp loopRecordLag; public: - double position, recordPosition; int myDataSize; short myChannels; int mySampleRate; @@ -237,9 +236,11 @@ public: { // if (myData) free(myData); if (temp) free(temp); + printf("freeing SampleData"); + } - maxiSample():temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; + maxiSample():temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; maxiSample& operator=(const maxiSample &source) { if (this == &source) @@ -285,60 +286,60 @@ public: void clear(); void reset(); - - double play(); - + + double play(); + double playLoop(double start, double end); // start and end are between 0.0 and 1.0 - - double playOnce(); - - double playOnce(double speed); - + + double playOnce(); + + double playOnce(double speed); + void setPosition(double newPos); // between 0.0 and 1.0 double playUntil(double end); - - double play(double speed); - - double play(double frequency, double start, double end, double &pos); - - double play(double frequency, double start, double end); - - double play4(double frequency, double start, double end); - - double bufferPlay(unsigned char &bufferin,long length); - - double bufferPlay(unsigned char &bufferin,double speed,long length); - - double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); - - double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); + + double play(double speed); + + double play(double frequency, double start, double end, double &pos); + + double play(double frequency, double start, double end); + + double play4(double frequency, double start, double end); + + double bufferPlay(unsigned char &bufferin,long length); + + double bufferPlay(unsigned char &bufferin,double speed,long length); + + double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); + + double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); bool save() { return save(myPath); } bool save(string filename) { - fstream myFile (filename.c_str(), ios::out | ios::binary); - - // write the wav file per the wav file format - myFile.seekp (0, ios::beg); - myFile.write ("RIFF", 4); - myFile.write ((char*) &myChunkSize, 4); - myFile.write ("WAVE", 4); - myFile.write ("fmt ", 4); - myFile.write ((char*) &mySubChunk1Size, 4); - myFile.write ((char*) &myFormat, 2); - myFile.write ((char*) &myChannels, 2); - myFile.write ((char*) &mySampleRate, 4); - myFile.write ((char*) &myByteRate, 4); - myFile.write ((char*) &myBlockAlign, 2); - myFile.write ((char*) &myBitsPerSample, 2); - myFile.write ("data", 4); - myFile.write ((char*) &myDataSize, 4); - myFile.write ((char*) temp, myDataSize); - - return true; + fstream myFile (filename.c_str(), ios::out | ios::binary); + + // write the wav file per the wav file format + myFile.seekp (0, ios::beg); + myFile.write ("RIFF", 4); + myFile.write ((char*) &myChunkSize, 4); + myFile.write ("WAVE", 4); + myFile.write ("fmt ", 4); + myFile.write ((char*) &mySubChunk1Size, 4); + myFile.write ((char*) &myFormat, 2); + myFile.write ((char*) &myChannels, 2); + myFile.write ((char*) &mySampleRate, 4); + myFile.write ((char*) &myByteRate, 4); + myFile.write ((char*) &myBlockAlign, 2); + myFile.write ((char*) &myBitsPerSample, 2); + myFile.write ("data", 4); + myFile.write ((char*) &myDataSize, 4); + myFile.write ((char*) temp, myDataSize); + + return true; } // return a printable summary of the wav file @@ -346,6 +347,7 @@ public: { char *summary = new char[250]; sprintf(summary, " Format: %d\n Channels: %d\n SampleRate: %d\n ByteRate: %d\n BlockAlign: %d\n BitsPerSample: %d\n DataSize: %d\n", myFormat, myChannels, mySampleRate, myByteRate, myBlockAlign, myBitsPerSample, myDataSize); + std::cout << myDataSize; return summary; } @@ -356,43 +358,47 @@ public: class maxiMap { public: - static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { - val = max(min(val, inMax), inMin); - return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; - } - - static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { - //clipping - val = max(min(val, inMax), inMin); - return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; - } - - static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { - //clipping - val = max(min(val, inMax), inMin); - return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; - } - + static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { + val = max(min(val, inMax), inMin); + return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; + } + + static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; + } + + static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; + } + //changed to templated function, e.g. maxiMap::maxiClamp(v, l, h); template - static T inline clamp(T v, const T low, const T high) { + static T inline clamp(T v, const T low, const T high) { if (v > high) v = high; else if (v < low) { v = low; } - return v; - } + return v; + } }; + class maxiDyn { public: - double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); - double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); - double input; +// double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); +// double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); + double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); + double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); + double compress(double input); + double input; double ratio; double currentRatio; double threshold; @@ -400,6 +406,10 @@ public: double attack; double release; double amplitude; + void setAttack(double attackMS); + void setRelease(double releaseMS); + void setThreshold(double thresholdI); + void setRatio(double ratioF); long holdtime; long holdcount; int attackphase,holdphase,releasephase; @@ -411,6 +421,7 @@ class maxiEnv { public: double ar(double input, double attack=1, double release=0.9, long holdtime=1, int trigger=0); double adsr(double input, double attack=1, double decay=0.99, double sustain=0.125, double release=0.9, long holdtime=1, int trigger=0); + double adsr(double input,int trigger); double input; double output; double attack; @@ -418,8 +429,12 @@ public: double sustain; double release; double amplitude; + void setAttack(double attackMS); + void setRelease(double releaseMS); + void setDecay(double decayMS); + void setSustain(double sustainL); int trigger; - long holdtime; + long holdtime=1; long holdcount; int attackphase,decayphase,sustainphase,holdphase,releasephase; }; @@ -516,20 +531,20 @@ public: env = 0; } void setAttack(T attackMS) { - attack = pow( 0.01, 1.0 / (attackMS * maxiSettings::sampleRate * 0.001 ) ); + attack = pow( 0.01, 1.0 / (attackMS * maxiSettings::sampleRate * 0.001 ) ); } void setRelease(T releaseMS) { - release = pow( 0.01, 1.0 / (releaseMS * maxiSettings::sampleRate * 0.001 ) ); + release = pow( 0.01, 1.0 / (releaseMS * maxiSettings::sampleRate * 0.001 ) ); } inline T play(T input) { input = fabs(input); if (input>env) env = attack * (env - input) + input; else - env = release * (env - input) + input; + env = release * (env - input) + input; return env; } - void reset() {env=0;} + void reset() {env=0;} inline T getEnv(){return env;} inline void setEnv(T val){env = val;} private: @@ -539,7 +554,6 @@ private: typedef maxiEnvelopeFollowerType maxiEnvelopeFollower; typedef maxiEnvelopeFollowerType maxiEnvelopeFollowerF; -//from https://ccrma.stanford.edu/~jos/filters/DC_Blocker_Software_Implementations.html class maxiDCBlocker { public: double xm1, ym1; diff --git a/ofxMaxim/openFrameworksExamples/OSX/OF0.8.4MaximExtractorExample/ofxMaxim/libs/maximilian.cpp b/ofxMaxim/openFrameworksExamples/OSX/OF0.8.4MaximExtractorExample/ofxMaxim/libs/maximilian.cpp old mode 100755 new mode 100644 index 18b2af2..7ba4978 --- a/ofxMaxim/openFrameworksExamples/OSX/OF0.8.4MaximExtractorExample/ofxMaxim/libs/maximilian.cpp +++ b/ofxMaxim/openFrameworksExamples/OSX/OF0.8.4MaximExtractorExample/ofxMaxim/libs/maximilian.cpp @@ -325,19 +325,6 @@ double maxiOsc::saw(double frequency) { phase += (1./(maxiSettings::sampleRate/(frequency))); return(output); -} - -double maxiOsc::triangle(double frequency) { - //This is a triangle wave. - if ( phase >= 1.0 ) phase -= 1.0; - phase += (1./(maxiSettings::sampleRate/(frequency))); - if (phase <= 0.5 ) { - output =(phase - 0.25) * 4; - } else { - output =((1.0-phase) - 0.25) * 4; - } - return(output); - } double maxiOsc::sawn(double frequency) { @@ -359,12 +346,29 @@ double maxiOsc::sawn(double frequency) { } +double maxiOsc::rect(double frequency, double duty) { + + return (output); +} + +double maxiOsc::triangle(double frequency) { + //This is a triangle wave. + if ( phase >= 1.0 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + if (phase <= 0.5 ) { + output =(phase - 0.25) * 4; + } else { + output =((1.0-phase) - 0.25) * 4; + } + return(output); + +} double maxiEnvelope::line(int numberofsegments,double segments[1000]) { //This is a basic multi-segment ramp generator that you can use for more or less anything. //However, it's not that intuitive. if (isPlaying==1) {//only make a sound once you've been triggered - period=2./(segments[valindex+1]*0.004); + period=4./(segments[valindex+1]*0.0044); nextval=segments[valindex+2]; currentval=segments[valindex]; if (currentval-amplitude > 0.0000001 && valindex < numberofsegments) { @@ -397,8 +401,7 @@ void maxiEnvelope::trigger(int index, double amp) { //Delay with feedback maxiDelayline::maxiDelayline() { - memset( memory, 0, 88200*sizeof (double) ); - phase=0; + memset( memory, 0, 88200*sizeof (double) ); } @@ -437,9 +440,9 @@ double maxiFilter::hipass(double input, double cutoff) { } //awesome. cuttof is freq in hz. res is between 1 and whatever. Watch out! double maxiFilter::lores(double input,double cutoff1, double resonance) { - cutoff=cutoff1*0.5; + cutoff=cutoff1; if (cutoff<10) cutoff=10; - if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (cutoff>(maxiSettings::sampleRate)) cutoff=(maxiSettings::sampleRate); if (resonance<1.) resonance = 1.; z=cos(TWOPI*cutoff/maxiSettings::sampleRate); c=2-2*z; @@ -453,9 +456,9 @@ double maxiFilter::lores(double input,double cutoff1, double resonance) { //working hires filter double maxiFilter::hires(double input,double cutoff1, double resonance) { - cutoff=cutoff1*0.5; + cutoff=cutoff1; if (cutoff<10) cutoff=10; - if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (cutoff>(maxiSettings::sampleRate)) cutoff=(maxiSettings::sampleRate); if (resonance<1.) resonance = 1.; z=cos(TWOPI*cutoff/maxiSettings::sampleRate); c=2-2*z; @@ -524,18 +527,20 @@ double *maxiMix::ambisonic(double input,double eight[8],double x,double y,double return(eight); } - +//This is the maxiSample load function. It just calls read. bool maxiSample::load(string fileName, int channel) { myPath = fileName; readChannel=channel; return read(); } +// This is for OGG loading bool maxiSample::loadOgg(string fileName, int channel) { #ifdef VORBIS bool result; readChannel=channel; int channelx; +// cout << fileName << endl; free(temp); myDataSize = stb_vorbis_decode_filename(const_cast(fileName.c_str()), &channelx, &temp); result = myDataSize > 0; @@ -558,11 +563,13 @@ bool maxiSample::loadOgg(string fileName, int channel) { return 0; } +//This sets the playback position to the start of a sample void maxiSample::trigger() { position = 0; recordPosition = 0; } +//This is the main read function. bool maxiSample::read() { bool result; @@ -612,7 +619,7 @@ bool maxiSample::read() } // read the data chunk - char *myData = (char*) malloc(myDataSize * sizeof(char)); + char * myData = (char*) malloc(myDataSize * sizeof(char)); inFile.seekg(filePos, ios::beg); inFile.read(myData, myDataSize); length=myDataSize*(0.5/myChannels); @@ -644,6 +651,7 @@ bool maxiSample::read() return result; // this should probably be something more descriptive } +//This plays back at the correct speed. Always loops. double maxiSample::play() { position++; if ((long) position >= length) position=0; @@ -651,40 +659,43 @@ double maxiSample::play() { return output; } +void maxiSample::setPosition(double newPos) { + position = maxiMap::clamp(newPos, 0.0, 1.0) * length; +} + //start end and points are between 0 and 1 double maxiSample::playLoop(double start, double end) { - position++; + position++; if (position < length * start) position = length * start; - if ((long) position >= length * end) position = length * start; - output = (double) temp[(long)position]/32767.0; - return output; + if ((long) position >= length * end) position = length * start; + output = (double) temp[(long)position]/32767.0; + return output; } -double maxiSample::playOnce() { - position++; - if ((long) position(newPos, 0.0, 1.0) * length; -} -double maxiSample::playUntil(double end) { +//This plays back at the correct speed. Only plays once. To retrigger, you have to manually reset the position +double maxiSample::playOnce() { position++; - if ((long) position=length) end=length-1; @@ -755,7 +769,7 @@ double maxiSample::play(double frequency, double start, double end, double &pos) } if ( pos >= end ) pos = start; - pos += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv))); + pos += ((end-start)/((maxiSettings::sampleRate)/(frequency*chandiv))); remainder = pos - floor(pos); long posl = floor(pos); if (posl+1threshold && attackphase!=1){ + holdcount=0; + releasephase=0; + attackphase=1; + if(currentRatio==0) currentRatio=ratio; + } + + if (attackphase==1 && currentRatio=ratio-1) { + attackphase=0; + releasephase=1; + } + + if (releasephase==1 && currentRatio>0.) { + currentRatio*=release; + } + + if (input>0.) { + output = input/(1.+currentRatio); + } else { + output = input/(1.+currentRatio); + } + + return output*(1+log(ratio)); +} + /* Lots of people struggle with the envelope generators so here's a new easy one. It takes mental numbers for attack and release tho. Basically, they're exponentials. @@ -1282,61 +1323,159 @@ double maxiEnv::ar(double input, double attack, double release, long holdtime, i return output; } -/* and here's a new adsr. It's not bad, very simple to use*/ +/* adsr. It's not bad, very simple to use*/ double maxiEnv::adsr(double input, double attack, double decay, double sustain, double release, long holdtime, int trigger) { - - if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ - holdcount=0; - decayphase=0; - sustainphase=0; - releasephase=0; - attackphase=1; - } - - if (attackphase==1) { - amplitude+=(1*attack); - output=input*amplitude; - } - - if (amplitude>=1) { - amplitude=1; - attackphase=0; - decayphase=1; - } - - if (decayphase==1) { - output=input*(amplitude*=decay); - if (amplitude<=sustain) { - decayphase=0; - holdphase=1; - } - } - - if (holdcount0.) { - output=input*(amplitude*=release); - - } - - return output; + + if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ + holdcount=0; + decayphase=0; + sustainphase=0; + releasephase=0; + attackphase=1; + } + + if (attackphase==1) { + releasephase=0; + amplitude+=(1*attack); + output=input*amplitude; + + if (amplitude>=1) { + amplitude=1; + attackphase=0; + decayphase=1; + } + } + + + if (decayphase==1) { + output=input*(amplitude*=decay); + if (amplitude<=sustain) { + decayphase=0; + holdphase=1; + } + } + + if (holdcount=holdtime && trigger==1) { + output=input*amplitude; + } + + if (holdcount>=holdtime && trigger!=1) { + holdphase=0; + releasephase=1; + } + + if (releasephase==1 && amplitude>0.) { + output=input*(amplitude*=release); + + } + + return output; } +double maxiEnv::adsr(double input, int trigger) { + + if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ + holdcount=0; + decayphase=0; + sustainphase=0; + releasephase=0; + attackphase=1; + } + + if (attackphase==1) { + releasephase=0; + amplitude+=(1*attack); + output=input*amplitude; + + if (amplitude>=1) { + amplitude=1; + attackphase=0; + decayphase=1; + } + } + + + if (decayphase==1) { + output=input*(amplitude*=decay); + if (amplitude<=sustain) { + decayphase=0; + holdphase=1; + } + } + + if (holdcount=holdtime && trigger==1) { + output=input*amplitude; + } + + if (holdcount>=holdtime && trigger!=1) { + holdphase=0; + releasephase=1; + } + + if (releasephase==1 && amplitude>0.) { + output=input*(amplitude*=release); + + } + + return output; +} + + +void maxiEnv::setAttack(double attackMS) { + attack = 1-pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiEnv::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiEnv::setSustain(double sustainL) { + sustain = sustainL; +} + +void maxiEnv::setDecay(double decayMS) { + decay = pow( 0.01, 1.0 / ( decayMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setAttack(double attackMS) { + attack = pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setThreshold(double thresholdI) { + threshold = thresholdI; +} + +void maxiDyn::setRatio(double ratioF) { + ratio = ratioF; +} + + double convert::mtof(int midinote) { return mtofarray[midinote]; } + +template<> void maxiEnvelopeFollower::setAttack(double attackMS) { + attack = pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +template<> void maxiEnvelopeFollower::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + diff --git a/ofxMaxim/openFrameworksExamples/OSX/OF0.8.4MaximExtractorExample/ofxMaxim/libs/maximilian.h b/ofxMaxim/openFrameworksExamples/OSX/OF0.8.4MaximExtractorExample/ofxMaxim/libs/maximilian.h index 03dfea5..8a78c26 100755 --- a/ofxMaxim/openFrameworksExamples/OSX/OF0.8.4MaximExtractorExample/ofxMaxim/libs/maximilian.h +++ b/ofxMaxim/openFrameworksExamples/OSX/OF0.8.4MaximExtractorExample/ofxMaxim/libs/maximilian.h @@ -30,12 +30,6 @@ * */ -/* - Feature request: - maxiNANINFAlarm - maxiLimiter - */ - #ifndef MAXIMILIAN_H #define MAXIMILIAN_H @@ -49,6 +43,10 @@ #include #include "math.h" +#ifdef _WIN32 //|| _WIN64 +#include +#endif + using namespace std; #ifndef PI #define PI 3.1415926535897932384626433832795 @@ -91,8 +89,9 @@ public: double noise(); double sinebuf(double frequency); double sinebuf4(double frequency); + double sawn(double frequency); + double rect(double frequency, double duty=0.5); void phaseReset(double phaseIn); - double sawn(double frequency); }; @@ -214,12 +213,12 @@ private: int myByteRate; short myBlockAlign; short myBitsPerSample; + double position, recordPosition; double speed; double output; maxiLagExp loopRecordLag; public: - double position, recordPosition; int myDataSize; short myChannels; int mySampleRate; @@ -237,9 +236,11 @@ public: { // if (myData) free(myData); if (temp) free(temp); + printf("freeing SampleData"); + } - maxiSample():temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; + maxiSample():temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; maxiSample& operator=(const maxiSample &source) { if (this == &source) @@ -285,60 +286,60 @@ public: void clear(); void reset(); - - double play(); - + + double play(); + double playLoop(double start, double end); // start and end are between 0.0 and 1.0 - - double playOnce(); - - double playOnce(double speed); - + + double playOnce(); + + double playOnce(double speed); + void setPosition(double newPos); // between 0.0 and 1.0 double playUntil(double end); - - double play(double speed); - - double play(double frequency, double start, double end, double &pos); - - double play(double frequency, double start, double end); - - double play4(double frequency, double start, double end); - - double bufferPlay(unsigned char &bufferin,long length); - - double bufferPlay(unsigned char &bufferin,double speed,long length); - - double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); - - double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); + + double play(double speed); + + double play(double frequency, double start, double end, double &pos); + + double play(double frequency, double start, double end); + + double play4(double frequency, double start, double end); + + double bufferPlay(unsigned char &bufferin,long length); + + double bufferPlay(unsigned char &bufferin,double speed,long length); + + double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); + + double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); bool save() { return save(myPath); } bool save(string filename) { - fstream myFile (filename.c_str(), ios::out | ios::binary); - - // write the wav file per the wav file format - myFile.seekp (0, ios::beg); - myFile.write ("RIFF", 4); - myFile.write ((char*) &myChunkSize, 4); - myFile.write ("WAVE", 4); - myFile.write ("fmt ", 4); - myFile.write ((char*) &mySubChunk1Size, 4); - myFile.write ((char*) &myFormat, 2); - myFile.write ((char*) &myChannels, 2); - myFile.write ((char*) &mySampleRate, 4); - myFile.write ((char*) &myByteRate, 4); - myFile.write ((char*) &myBlockAlign, 2); - myFile.write ((char*) &myBitsPerSample, 2); - myFile.write ("data", 4); - myFile.write ((char*) &myDataSize, 4); - myFile.write ((char*) temp, myDataSize); - - return true; + fstream myFile (filename.c_str(), ios::out | ios::binary); + + // write the wav file per the wav file format + myFile.seekp (0, ios::beg); + myFile.write ("RIFF", 4); + myFile.write ((char*) &myChunkSize, 4); + myFile.write ("WAVE", 4); + myFile.write ("fmt ", 4); + myFile.write ((char*) &mySubChunk1Size, 4); + myFile.write ((char*) &myFormat, 2); + myFile.write ((char*) &myChannels, 2); + myFile.write ((char*) &mySampleRate, 4); + myFile.write ((char*) &myByteRate, 4); + myFile.write ((char*) &myBlockAlign, 2); + myFile.write ((char*) &myBitsPerSample, 2); + myFile.write ("data", 4); + myFile.write ((char*) &myDataSize, 4); + myFile.write ((char*) temp, myDataSize); + + return true; } // return a printable summary of the wav file @@ -346,6 +347,7 @@ public: { char *summary = new char[250]; sprintf(summary, " Format: %d\n Channels: %d\n SampleRate: %d\n ByteRate: %d\n BlockAlign: %d\n BitsPerSample: %d\n DataSize: %d\n", myFormat, myChannels, mySampleRate, myByteRate, myBlockAlign, myBitsPerSample, myDataSize); + std::cout << myDataSize; return summary; } @@ -356,43 +358,47 @@ public: class maxiMap { public: - static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { - val = max(min(val, inMax), inMin); - return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; - } - - static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { - //clipping - val = max(min(val, inMax), inMin); - return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; - } - - static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { - //clipping - val = max(min(val, inMax), inMin); - return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; - } - + static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { + val = max(min(val, inMax), inMin); + return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; + } + + static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; + } + + static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; + } + //changed to templated function, e.g. maxiMap::maxiClamp(v, l, h); template - static T inline clamp(T v, const T low, const T high) { + static T inline clamp(T v, const T low, const T high) { if (v > high) v = high; else if (v < low) { v = low; } - return v; - } + return v; + } }; + class maxiDyn { public: - double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); - double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); - double input; +// double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); +// double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); + double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); + double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); + double compress(double input); + double input; double ratio; double currentRatio; double threshold; @@ -400,6 +406,10 @@ public: double attack; double release; double amplitude; + void setAttack(double attackMS); + void setRelease(double releaseMS); + void setThreshold(double thresholdI); + void setRatio(double ratioF); long holdtime; long holdcount; int attackphase,holdphase,releasephase; @@ -411,6 +421,7 @@ class maxiEnv { public: double ar(double input, double attack=1, double release=0.9, long holdtime=1, int trigger=0); double adsr(double input, double attack=1, double decay=0.99, double sustain=0.125, double release=0.9, long holdtime=1, int trigger=0); + double adsr(double input,int trigger); double input; double output; double attack; @@ -418,8 +429,12 @@ public: double sustain; double release; double amplitude; + void setAttack(double attackMS); + void setRelease(double releaseMS); + void setDecay(double decayMS); + void setSustain(double sustainL); int trigger; - long holdtime; + long holdtime=1; long holdcount; int attackphase,decayphase,sustainphase,holdphase,releasephase; }; @@ -516,20 +531,20 @@ public: env = 0; } void setAttack(T attackMS) { - attack = pow( 0.01, 1.0 / (attackMS * maxiSettings::sampleRate * 0.001 ) ); + attack = pow( 0.01, 1.0 / (attackMS * maxiSettings::sampleRate * 0.001 ) ); } void setRelease(T releaseMS) { - release = pow( 0.01, 1.0 / (releaseMS * maxiSettings::sampleRate * 0.001 ) ); + release = pow( 0.01, 1.0 / (releaseMS * maxiSettings::sampleRate * 0.001 ) ); } inline T play(T input) { input = fabs(input); if (input>env) env = attack * (env - input) + input; else - env = release * (env - input) + input; + env = release * (env - input) + input; return env; } - void reset() {env=0;} + void reset() {env=0;} inline T getEnv(){return env;} inline void setEnv(T val){env = val;} private: @@ -539,7 +554,6 @@ private: typedef maxiEnvelopeFollowerType maxiEnvelopeFollower; typedef maxiEnvelopeFollowerType maxiEnvelopeFollowerF; -//from https://ccrma.stanford.edu/~jos/filters/DC_Blocker_Software_Implementations.html class maxiDCBlocker { public: double xm1, ym1; diff --git a/ofxMaxim/openFrameworksExamples/OSX/ofxMaximExample_0.8.4_OSX_Granular/ofxMaxim/libs/maximilian.cpp b/ofxMaxim/openFrameworksExamples/OSX/ofxMaximExample_0.8.4_OSX_Granular/ofxMaxim/libs/maximilian.cpp old mode 100755 new mode 100644 index 0b8ba86..7ba4978 --- a/ofxMaxim/openFrameworksExamples/OSX/ofxMaximExample_0.8.4_OSX_Granular/ofxMaxim/libs/maximilian.cpp +++ b/ofxMaxim/openFrameworksExamples/OSX/ofxMaximExample_0.8.4_OSX_Granular/ofxMaxim/libs/maximilian.cpp @@ -325,19 +325,6 @@ double maxiOsc::saw(double frequency) { phase += (1./(maxiSettings::sampleRate/(frequency))); return(output); -} - -double maxiOsc::triangle(double frequency) { - //This is a triangle wave. - if ( phase >= 1.0 ) phase -= 1.0; - phase += (1./(maxiSettings::sampleRate/(frequency))); - if (phase <= 0.5 ) { - output =(phase - 0.25) * 4; - } else { - output =((1.0-phase) - 0.25) * 4; - } - return(output); - } double maxiOsc::sawn(double frequency) { @@ -359,12 +346,29 @@ double maxiOsc::sawn(double frequency) { } +double maxiOsc::rect(double frequency, double duty) { + + return (output); +} + +double maxiOsc::triangle(double frequency) { + //This is a triangle wave. + if ( phase >= 1.0 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + if (phase <= 0.5 ) { + output =(phase - 0.25) * 4; + } else { + output =((1.0-phase) - 0.25) * 4; + } + return(output); + +} double maxiEnvelope::line(int numberofsegments,double segments[1000]) { //This is a basic multi-segment ramp generator that you can use for more or less anything. //However, it's not that intuitive. if (isPlaying==1) {//only make a sound once you've been triggered - period=2./(segments[valindex+1]*0.004); + period=4./(segments[valindex+1]*0.0044); nextval=segments[valindex+2]; currentval=segments[valindex]; if (currentval-amplitude > 0.0000001 && valindex < numberofsegments) { @@ -397,8 +401,7 @@ void maxiEnvelope::trigger(int index, double amp) { //Delay with feedback maxiDelayline::maxiDelayline() { - memset( memory, 0, 88200*sizeof (double) ); - phase=0; + memset( memory, 0, 88200*sizeof (double) ); } @@ -437,9 +440,9 @@ double maxiFilter::hipass(double input, double cutoff) { } //awesome. cuttof is freq in hz. res is between 1 and whatever. Watch out! double maxiFilter::lores(double input,double cutoff1, double resonance) { - cutoff=cutoff1*0.5; + cutoff=cutoff1; if (cutoff<10) cutoff=10; - if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (cutoff>(maxiSettings::sampleRate)) cutoff=(maxiSettings::sampleRate); if (resonance<1.) resonance = 1.; z=cos(TWOPI*cutoff/maxiSettings::sampleRate); c=2-2*z; @@ -453,9 +456,9 @@ double maxiFilter::lores(double input,double cutoff1, double resonance) { //working hires filter double maxiFilter::hires(double input,double cutoff1, double resonance) { - cutoff=cutoff1*0.5; + cutoff=cutoff1; if (cutoff<10) cutoff=10; - if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (cutoff>(maxiSettings::sampleRate)) cutoff=(maxiSettings::sampleRate); if (resonance<1.) resonance = 1.; z=cos(TWOPI*cutoff/maxiSettings::sampleRate); c=2-2*z; @@ -524,18 +527,20 @@ double *maxiMix::ambisonic(double input,double eight[8],double x,double y,double return(eight); } - +//This is the maxiSample load function. It just calls read. bool maxiSample::load(string fileName, int channel) { myPath = fileName; readChannel=channel; return read(); } +// This is for OGG loading bool maxiSample::loadOgg(string fileName, int channel) { #ifdef VORBIS bool result; readChannel=channel; int channelx; +// cout << fileName << endl; free(temp); myDataSize = stb_vorbis_decode_filename(const_cast(fileName.c_str()), &channelx, &temp); result = myDataSize > 0; @@ -558,11 +563,13 @@ bool maxiSample::loadOgg(string fileName, int channel) { return 0; } +//This sets the playback position to the start of a sample void maxiSample::trigger() { position = 0; recordPosition = 0; } +//This is the main read function. bool maxiSample::read() { bool result; @@ -597,7 +604,7 @@ bool maxiSample::read() //ignore any extra chunks char chunkID[5]=""; chunkID[4] = 0; - int filePos = 36; + int filePos = 20 + mySubChunk1Size; while(!datafound && !inFile.eof()) { inFile.seekg(filePos, ios::beg); inFile.read((char*) &chunkID, sizeof(char) * 4); @@ -612,7 +619,7 @@ bool maxiSample::read() } // read the data chunk - char *myData = (char*) malloc(myDataSize * sizeof(char)); + char * myData = (char*) malloc(myDataSize * sizeof(char)); inFile.seekg(filePos, ios::beg); inFile.read(myData, myDataSize); length=myDataSize*(0.5/myChannels); @@ -644,6 +651,7 @@ bool maxiSample::read() return result; // this should probably be something more descriptive } +//This plays back at the correct speed. Always loops. double maxiSample::play() { position++; if ((long) position >= length) position=0; @@ -651,40 +659,43 @@ double maxiSample::play() { return output; } +void maxiSample::setPosition(double newPos) { + position = maxiMap::clamp(newPos, 0.0, 1.0) * length; +} + //start end and points are between 0 and 1 double maxiSample::playLoop(double start, double end) { - position++; + position++; if (position < length * start) position = length * start; - if ((long) position >= length * end) position = length * start; - output = (double) temp[(long)position]/32767.0; - return output; + if ((long) position >= length * end) position = length * start; + output = (double) temp[(long)position]/32767.0; + return output; } -double maxiSample::playOnce() { - position++; - if ((long) position(newPos, 0.0, 1.0) * length; -} -double maxiSample::playUntil(double end) { +//This plays back at the correct speed. Only plays once. To retrigger, you have to manually reset the position +double maxiSample::playOnce() { position++; - if ((long) position=length) end=length-1; @@ -755,7 +769,7 @@ double maxiSample::play(double frequency, double start, double end, double &pos) } if ( pos >= end ) pos = start; - pos += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv))); + pos += ((end-start)/((maxiSettings::sampleRate)/(frequency*chandiv))); remainder = pos - floor(pos); long posl = floor(pos); if (posl+1threshold && attackphase!=1){ + holdcount=0; + releasephase=0; + attackphase=1; + if(currentRatio==0) currentRatio=ratio; + } + + if (attackphase==1 && currentRatio=ratio-1) { + attackphase=0; + releasephase=1; + } + + if (releasephase==1 && currentRatio>0.) { + currentRatio*=release; + } + + if (input>0.) { + output = input/(1.+currentRatio); + } else { + output = input/(1.+currentRatio); + } + + return output*(1+log(ratio)); +} + /* Lots of people struggle with the envelope generators so here's a new easy one. It takes mental numbers for attack and release tho. Basically, they're exponentials. @@ -1282,61 +1323,159 @@ double maxiEnv::ar(double input, double attack, double release, long holdtime, i return output; } -/* and here's a new adsr. It's not bad, very simple to use*/ +/* adsr. It's not bad, very simple to use*/ double maxiEnv::adsr(double input, double attack, double decay, double sustain, double release, long holdtime, int trigger) { - - if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ - holdcount=0; - decayphase=0; - sustainphase=0; - releasephase=0; - attackphase=1; - } - - if (attackphase==1) { - amplitude+=(1*attack); - output=input*amplitude; - } - - if (amplitude>=1) { - amplitude=1; - attackphase=0; - decayphase=1; - } - - if (decayphase==1) { - output=input*(amplitude*=decay); - if (amplitude<=sustain) { - decayphase=0; - holdphase=1; - } - } - - if (holdcount0.) { - output=input*(amplitude*=release); - - } - - return output; + + if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ + holdcount=0; + decayphase=0; + sustainphase=0; + releasephase=0; + attackphase=1; + } + + if (attackphase==1) { + releasephase=0; + amplitude+=(1*attack); + output=input*amplitude; + + if (amplitude>=1) { + amplitude=1; + attackphase=0; + decayphase=1; + } + } + + + if (decayphase==1) { + output=input*(amplitude*=decay); + if (amplitude<=sustain) { + decayphase=0; + holdphase=1; + } + } + + if (holdcount=holdtime && trigger==1) { + output=input*amplitude; + } + + if (holdcount>=holdtime && trigger!=1) { + holdphase=0; + releasephase=1; + } + + if (releasephase==1 && amplitude>0.) { + output=input*(amplitude*=release); + + } + + return output; } +double maxiEnv::adsr(double input, int trigger) { + + if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ + holdcount=0; + decayphase=0; + sustainphase=0; + releasephase=0; + attackphase=1; + } + + if (attackphase==1) { + releasephase=0; + amplitude+=(1*attack); + output=input*amplitude; + + if (amplitude>=1) { + amplitude=1; + attackphase=0; + decayphase=1; + } + } + + + if (decayphase==1) { + output=input*(amplitude*=decay); + if (amplitude<=sustain) { + decayphase=0; + holdphase=1; + } + } + + if (holdcount=holdtime && trigger==1) { + output=input*amplitude; + } + + if (holdcount>=holdtime && trigger!=1) { + holdphase=0; + releasephase=1; + } + + if (releasephase==1 && amplitude>0.) { + output=input*(amplitude*=release); + + } + + return output; +} + + +void maxiEnv::setAttack(double attackMS) { + attack = 1-pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiEnv::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiEnv::setSustain(double sustainL) { + sustain = sustainL; +} + +void maxiEnv::setDecay(double decayMS) { + decay = pow( 0.01, 1.0 / ( decayMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setAttack(double attackMS) { + attack = pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setThreshold(double thresholdI) { + threshold = thresholdI; +} + +void maxiDyn::setRatio(double ratioF) { + ratio = ratioF; +} + + double convert::mtof(int midinote) { return mtofarray[midinote]; } + +template<> void maxiEnvelopeFollower::setAttack(double attackMS) { + attack = pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +template<> void maxiEnvelopeFollower::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + diff --git a/ofxMaxim/openFrameworksExamples/OSX/ofxMaximExample_0.8.4_OSX_Granular/ofxMaxim/libs/maximilian.h b/ofxMaxim/openFrameworksExamples/OSX/ofxMaximExample_0.8.4_OSX_Granular/ofxMaxim/libs/maximilian.h index 03dfea5..8a78c26 100755 --- a/ofxMaxim/openFrameworksExamples/OSX/ofxMaximExample_0.8.4_OSX_Granular/ofxMaxim/libs/maximilian.h +++ b/ofxMaxim/openFrameworksExamples/OSX/ofxMaximExample_0.8.4_OSX_Granular/ofxMaxim/libs/maximilian.h @@ -30,12 +30,6 @@ * */ -/* - Feature request: - maxiNANINFAlarm - maxiLimiter - */ - #ifndef MAXIMILIAN_H #define MAXIMILIAN_H @@ -49,6 +43,10 @@ #include #include "math.h" +#ifdef _WIN32 //|| _WIN64 +#include +#endif + using namespace std; #ifndef PI #define PI 3.1415926535897932384626433832795 @@ -91,8 +89,9 @@ public: double noise(); double sinebuf(double frequency); double sinebuf4(double frequency); + double sawn(double frequency); + double rect(double frequency, double duty=0.5); void phaseReset(double phaseIn); - double sawn(double frequency); }; @@ -214,12 +213,12 @@ private: int myByteRate; short myBlockAlign; short myBitsPerSample; + double position, recordPosition; double speed; double output; maxiLagExp loopRecordLag; public: - double position, recordPosition; int myDataSize; short myChannels; int mySampleRate; @@ -237,9 +236,11 @@ public: { // if (myData) free(myData); if (temp) free(temp); + printf("freeing SampleData"); + } - maxiSample():temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; + maxiSample():temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; maxiSample& operator=(const maxiSample &source) { if (this == &source) @@ -285,60 +286,60 @@ public: void clear(); void reset(); - - double play(); - + + double play(); + double playLoop(double start, double end); // start and end are between 0.0 and 1.0 - - double playOnce(); - - double playOnce(double speed); - + + double playOnce(); + + double playOnce(double speed); + void setPosition(double newPos); // between 0.0 and 1.0 double playUntil(double end); - - double play(double speed); - - double play(double frequency, double start, double end, double &pos); - - double play(double frequency, double start, double end); - - double play4(double frequency, double start, double end); - - double bufferPlay(unsigned char &bufferin,long length); - - double bufferPlay(unsigned char &bufferin,double speed,long length); - - double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); - - double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); + + double play(double speed); + + double play(double frequency, double start, double end, double &pos); + + double play(double frequency, double start, double end); + + double play4(double frequency, double start, double end); + + double bufferPlay(unsigned char &bufferin,long length); + + double bufferPlay(unsigned char &bufferin,double speed,long length); + + double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); + + double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); bool save() { return save(myPath); } bool save(string filename) { - fstream myFile (filename.c_str(), ios::out | ios::binary); - - // write the wav file per the wav file format - myFile.seekp (0, ios::beg); - myFile.write ("RIFF", 4); - myFile.write ((char*) &myChunkSize, 4); - myFile.write ("WAVE", 4); - myFile.write ("fmt ", 4); - myFile.write ((char*) &mySubChunk1Size, 4); - myFile.write ((char*) &myFormat, 2); - myFile.write ((char*) &myChannels, 2); - myFile.write ((char*) &mySampleRate, 4); - myFile.write ((char*) &myByteRate, 4); - myFile.write ((char*) &myBlockAlign, 2); - myFile.write ((char*) &myBitsPerSample, 2); - myFile.write ("data", 4); - myFile.write ((char*) &myDataSize, 4); - myFile.write ((char*) temp, myDataSize); - - return true; + fstream myFile (filename.c_str(), ios::out | ios::binary); + + // write the wav file per the wav file format + myFile.seekp (0, ios::beg); + myFile.write ("RIFF", 4); + myFile.write ((char*) &myChunkSize, 4); + myFile.write ("WAVE", 4); + myFile.write ("fmt ", 4); + myFile.write ((char*) &mySubChunk1Size, 4); + myFile.write ((char*) &myFormat, 2); + myFile.write ((char*) &myChannels, 2); + myFile.write ((char*) &mySampleRate, 4); + myFile.write ((char*) &myByteRate, 4); + myFile.write ((char*) &myBlockAlign, 2); + myFile.write ((char*) &myBitsPerSample, 2); + myFile.write ("data", 4); + myFile.write ((char*) &myDataSize, 4); + myFile.write ((char*) temp, myDataSize); + + return true; } // return a printable summary of the wav file @@ -346,6 +347,7 @@ public: { char *summary = new char[250]; sprintf(summary, " Format: %d\n Channels: %d\n SampleRate: %d\n ByteRate: %d\n BlockAlign: %d\n BitsPerSample: %d\n DataSize: %d\n", myFormat, myChannels, mySampleRate, myByteRate, myBlockAlign, myBitsPerSample, myDataSize); + std::cout << myDataSize; return summary; } @@ -356,43 +358,47 @@ public: class maxiMap { public: - static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { - val = max(min(val, inMax), inMin); - return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; - } - - static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { - //clipping - val = max(min(val, inMax), inMin); - return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; - } - - static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { - //clipping - val = max(min(val, inMax), inMin); - return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; - } - + static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { + val = max(min(val, inMax), inMin); + return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; + } + + static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; + } + + static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; + } + //changed to templated function, e.g. maxiMap::maxiClamp(v, l, h); template - static T inline clamp(T v, const T low, const T high) { + static T inline clamp(T v, const T low, const T high) { if (v > high) v = high; else if (v < low) { v = low; } - return v; - } + return v; + } }; + class maxiDyn { public: - double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); - double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); - double input; +// double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); +// double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); + double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); + double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); + double compress(double input); + double input; double ratio; double currentRatio; double threshold; @@ -400,6 +406,10 @@ public: double attack; double release; double amplitude; + void setAttack(double attackMS); + void setRelease(double releaseMS); + void setThreshold(double thresholdI); + void setRatio(double ratioF); long holdtime; long holdcount; int attackphase,holdphase,releasephase; @@ -411,6 +421,7 @@ class maxiEnv { public: double ar(double input, double attack=1, double release=0.9, long holdtime=1, int trigger=0); double adsr(double input, double attack=1, double decay=0.99, double sustain=0.125, double release=0.9, long holdtime=1, int trigger=0); + double adsr(double input,int trigger); double input; double output; double attack; @@ -418,8 +429,12 @@ public: double sustain; double release; double amplitude; + void setAttack(double attackMS); + void setRelease(double releaseMS); + void setDecay(double decayMS); + void setSustain(double sustainL); int trigger; - long holdtime; + long holdtime=1; long holdcount; int attackphase,decayphase,sustainphase,holdphase,releasephase; }; @@ -516,20 +531,20 @@ public: env = 0; } void setAttack(T attackMS) { - attack = pow( 0.01, 1.0 / (attackMS * maxiSettings::sampleRate * 0.001 ) ); + attack = pow( 0.01, 1.0 / (attackMS * maxiSettings::sampleRate * 0.001 ) ); } void setRelease(T releaseMS) { - release = pow( 0.01, 1.0 / (releaseMS * maxiSettings::sampleRate * 0.001 ) ); + release = pow( 0.01, 1.0 / (releaseMS * maxiSettings::sampleRate * 0.001 ) ); } inline T play(T input) { input = fabs(input); if (input>env) env = attack * (env - input) + input; else - env = release * (env - input) + input; + env = release * (env - input) + input; return env; } - void reset() {env=0;} + void reset() {env=0;} inline T getEnv(){return env;} inline void setEnv(T val){env = val;} private: @@ -539,7 +554,6 @@ private: typedef maxiEnvelopeFollowerType maxiEnvelopeFollower; typedef maxiEnvelopeFollowerType maxiEnvelopeFollowerF; -//from https://ccrma.stanford.edu/~jos/filters/DC_Blocker_Software_Implementations.html class maxiDCBlocker { public: double xm1, ym1; diff --git a/ofxMaxim/openFrameworksExamples/windows/ofxMaximExampleVS2010-OF0072/src/ofxMaxim/libs/maximilian.cpp b/ofxMaxim/openFrameworksExamples/windows/ofxMaximExampleVS2010-OF0072/src/ofxMaxim/libs/maximilian.cpp index bd19797..7ba4978 100644 --- a/ofxMaxim/openFrameworksExamples/windows/ofxMaximExampleVS2010-OF0072/src/ofxMaxim/libs/maximilian.cpp +++ b/ofxMaxim/openFrameworksExamples/windows/ofxMaximExampleVS2010-OF0072/src/ofxMaxim/libs/maximilian.cpp @@ -59,6 +59,142 @@ int maxiSettings::bufferSize = 1024; double sineBuffer[514]={0,0.012268,0.024536,0.036804,0.049042,0.06131,0.073547,0.085785,0.097992,0.1102,0.12241,0.13455,0.1467,0.15884,0.17093,0.18301,0.19507,0.20709,0.21909,0.23105,0.24295,0.25485,0.26669,0.2785,0.29025,0.30197,0.31366,0.32529,0.33685,0.34839,0.35986,0.37128,0.38266,0.39395,0.40521,0.41641,0.42752,0.4386,0.44958,0.46051,0.47137,0.48215,0.49286,0.50351,0.51407,0.52457,0.53497,0.54529,0.55554,0.5657,0.57578,0.58575,0.59567,0.60547,0.6152,0.62482,0.63437,0.6438,0.65314,0.66238,0.67151,0.68057,0.68951,0.69833,0.70706,0.7157,0.72421,0.7326,0.74091,0.74908,0.75717,0.76514,0.77298,0.7807,0.7883,0.79581,0.80316,0.81042,0.81754,0.82455,0.83142,0.8382,0.84482,0.85132,0.8577,0.86392,0.87006,0.87604,0.88187,0.8876,0.89319,0.89862,0.90396,0.90912,0.91415,0.91907,0.92383,0.92847,0.93295,0.93729,0.9415,0.94556,0.94949,0.95325,0.95691,0.96039,0.96375,0.96692,0.97,0.9729,0.97565,0.97827,0.98074,0.98306,0.98523,0.98724,0.98914,0.99084,0.99243,0.99387,0.99515,0.99628,0.99725,0.99808,0.99875,0.99927,0.99966,0.99988,0.99997,0.99988,0.99966,0.99927,0.99875,0.99808,0.99725,0.99628,0.99515,0.99387,0.99243,0.99084,0.98914,0.98724,0.98523,0.98306,0.98074,0.97827,0.97565,0.9729,0.97,0.96692,0.96375,0.96039,0.95691,0.95325,0.94949,0.94556,0.9415,0.93729,0.93295,0.92847,0.92383,0.91907,0.91415,0.90912,0.90396,0.89862,0.89319,0.8876,0.88187,0.87604,0.87006,0.86392,0.8577,0.85132,0.84482,0.8382,0.83142,0.82455,0.81754,0.81042,0.80316,0.79581,0.7883,0.7807,0.77298,0.76514,0.75717,0.74908,0.74091,0.7326,0.72421,0.7157,0.70706,0.69833,0.68951,0.68057,0.67151,0.66238,0.65314,0.6438,0.63437,0.62482,0.6152,0.60547,0.59567,0.58575,0.57578,0.5657,0.55554,0.54529,0.53497,0.52457,0.51407,0.50351,0.49286,0.48215,0.47137,0.46051,0.44958,0.4386,0.42752,0.41641,0.40521,0.39395,0.38266,0.37128,0.35986,0.34839,0.33685,0.32529,0.31366,0.30197,0.29025,0.2785,0.26669,0.25485,0.24295,0.23105,0.21909,0.20709,0.19507,0.18301,0.17093,0.15884,0.1467,0.13455,0.12241,0.1102,0.097992,0.085785,0.073547,0.06131,0.049042,0.036804,0.024536,0.012268,0,-0.012268,-0.024536,-0.036804,-0.049042,-0.06131,-0.073547,-0.085785,-0.097992,-0.1102,-0.12241,-0.13455,-0.1467,-0.15884,-0.17093,-0.18301,-0.19507,-0.20709,-0.21909,-0.23105,-0.24295,-0.25485,-0.26669,-0.2785,-0.29025,-0.30197,-0.31366,-0.32529,-0.33685,-0.34839,-0.35986,-0.37128,-0.38266,-0.39395,-0.40521,-0.41641,-0.42752,-0.4386,-0.44958,-0.46051,-0.47137,-0.48215,-0.49286,-0.50351,-0.51407,-0.52457,-0.53497,-0.54529,-0.55554,-0.5657,-0.57578,-0.58575,-0.59567,-0.60547,-0.6152,-0.62482,-0.63437,-0.6438,-0.65314,-0.66238,-0.67151,-0.68057,-0.68951,-0.69833,-0.70706,-0.7157,-0.72421,-0.7326,-0.74091,-0.74908,-0.75717,-0.76514,-0.77298,-0.7807,-0.7883,-0.79581,-0.80316,-0.81042,-0.81754,-0.82455,-0.83142,-0.8382,-0.84482,-0.85132,-0.8577,-0.86392,-0.87006,-0.87604,-0.88187,-0.8876,-0.89319,-0.89862,-0.90396,-0.90912,-0.91415,-0.91907,-0.92383,-0.92847,-0.93295,-0.93729,-0.9415,-0.94556,-0.94949,-0.95325,-0.95691,-0.96039,-0.96375,-0.96692,-0.97,-0.9729,-0.97565,-0.97827,-0.98074,-0.98306,-0.98523,-0.98724,-0.98914,-0.99084,-0.99243,-0.99387,-0.99515,-0.99628,-0.99725,-0.99808,-0.99875,-0.99927,-0.99966,-0.99988,-0.99997,-0.99988,-0.99966,-0.99927,-0.99875,-0.99808,-0.99725,-0.99628,-0.99515,-0.99387,-0.99243,-0.99084,-0.98914,-0.98724,-0.98523,-0.98306,-0.98074,-0.97827,-0.97565,-0.9729,-0.97,-0.96692,-0.96375,-0.96039,-0.95691,-0.95325,-0.94949,-0.94556,-0.9415,-0.93729,-0.93295,-0.92847,-0.92383,-0.91907,-0.91415,-0.90912,-0.90396,-0.89862,-0.89319,-0.8876,-0.88187,-0.87604,-0.87006,-0.86392,-0.8577,-0.85132,-0.84482,-0.8382,-0.83142,-0.82455,-0.81754,-0.81042,-0.80316,-0.79581,-0.7883,-0.7807,-0.77298,-0.76514,-0.75717,-0.74908,-0.74091,-0.7326,-0.72421,-0.7157,-0.70706,-0.69833,-0.68951,-0.68057,-0.67151,-0.66238,-0.65314,-0.6438,-0.63437,-0.62482,-0.6152,-0.60547,-0.59567,-0.58575,-0.57578,-0.5657,-0.55554,-0.54529,-0.53497,-0.52457,-0.51407,-0.50351,-0.49286,-0.48215,-0.47137,-0.46051,-0.44958,-0.4386,-0.42752,-0.41641,-0.40521,-0.39395,-0.38266,-0.37128,-0.35986,-0.34839,-0.33685,-0.32529,-0.31366,-0.30197,-0.29025,-0.2785,-0.26669,-0.25485,-0.24295,-0.23105,-0.21909,-0.20709,-0.19507,-0.18301,-0.17093,-0.15884,-0.1467,-0.13455,-0.12241,-0.1102,-0.097992,-0.085785,-0.073547,-0.06131,-0.049042,-0.036804,-0.024536,-0.012268,0,0.012268 }; +// This is a transition table that helps with bandlimited oscs. +double transition[1001]={-0.500003,-0.500003,-0.500023,-0.500063,-0.500121,-0.500179,-0.500259, + -0.50036,-0.500476,-0.500591,-0.500732,-0.500893,-0.501066,-0.501239, + -0.50144,-0.501661,-0.501891,-0.502123,-0.502382,-0.502662,-0.502949, + -0.50324,-0.503555,-0.503895,-0.504238,-0.504587,-0.504958,-0.505356, + -0.505754,-0.506162,-0.506589,-0.507042,-0.507495,-0.50796,-0.508444, + -0.508951,-0.509458,-0.509979,-0.510518,-0.511079,-0.511638,-0.512213, + -0.512808,-0.51342,-0.51403,-0.514659,-0.515307,-0.51597,-0.51663,-0.517312, + -0.518012,-0.518724,-0.519433,-0.520166,-0.520916,-0.521675,-0.522432, + -0.523214,-0.524013,-0.524819,-0.525624,-0.526451,-0.527298,-0.528147, + -0.528999,-0.52987,-0.530762,-0.531654,-0.532551,-0.533464,-0.534399, + -0.535332,-0.536271,-0.537226,-0.538202,-0.539172,-0.540152,-0.541148, + -0.542161,-0.543168,-0.544187,-0.54522,-0.546269,-0.54731,-0.548365, + -0.549434,-0.550516,-0.55159,-0.552679,-0.553781,-0.554893,-0.555997, + -0.557118,-0.558252,-0.559391,-0.560524,-0.561674,-0.562836,-0.564001, + -0.565161,-0.566336,-0.567524,-0.568712,-0.569896,-0.571095,-0.572306, + -0.573514,-0.574721,-0.575939,-0.577171,-0.578396,-0.579622,-0.580858, + -0.582108,-0.583348,-0.58459,-0.585842,-0.587106,-0.588358,-0.589614, + -0.590879,-0.592154,-0.593415,-0.594682,-0.595957,-0.59724,-0.598507, + -0.599782,-0.601064,-0.602351,-0.603623,-0.604902,-0.606189,-0.607476, + -0.60875,-0.610032,-0.611319,-0.612605,-0.613877,-0.615157,-0.616443, + -0.617723,-0.618992,-0.620268,-0.621548,-0.62282,-0.624083,-0.62535, + -0.626622,-0.627882,-0.629135,-0.630391,-0.631652,-0.632898,-0.634138, + -0.63538,-0.636626,-0.637854,-0.639078,-0.640304,-0.641531,-0.642739, + -0.643943,-0.645149,-0.646355,-0.647538,-0.64872,-0.649903,-0.651084, + -0.652241,-0.653397,-0.654553,-0.655705,-0.656834,-0.657961,-0.659087, + -0.660206,-0.661304,-0.662399,-0.663492,-0.664575,-0.665639,-0.666699, + -0.667756,-0.6688,-0.669827,-0.670849,-0.671866,-0.672868,-0.673854, + -0.674835,-0.675811,-0.676767,-0.677709,-0.678646,-0.679576,-0.680484, + -0.68138,-0.682269,-0.683151,-0.684008,-0.684854,-0.685693,-0.686524, + -0.687327,-0.688119,-0.688905,-0.689682,-0.690428,-0.691164,-0.691893, + -0.692613,-0.6933,-0.693978,-0.694647,-0.695305,-0.695932,-0.696549, + -0.697156,-0.697748,-0.698313,-0.698865,-0.699407,-0.699932,-0.700431, + -0.700917,-0.701391,-0.701845,-0.702276,-0.702693,-0.703097,-0.703478, + -0.703837,-0.704183,-0.704514,-0.704819,-0.705105,-0.705378,-0.705633, + -0.70586,-0.706069,-0.706265,-0.706444,-0.706591,-0.706721,-0.706837, + -0.706938,-0.707003,-0.707051,-0.707086,-0.707106,-0.707086,-0.707051, + -0.707001,-0.706935,-0.706832,-0.706711,-0.706576,-0.706421,-0.706233, + -0.706025,-0.705802,-0.705557,-0.705282,-0.704984,-0.704671,-0.704334, + -0.703969,-0.703582,-0.703176,-0.702746,-0.702288,-0.70181,-0.701312, + -0.700785,-0.700234,-0.699664,-0.69907,-0.698447,-0.6978,-0.697135, + -0.696446,-0.695725,-0.694981,-0.694219,-0.693435,-0.692613,-0.691771, + -0.690911,-0.69003,-0.689108,-0.688166,-0.687206,-0.686227,-0.685204, + -0.684162,-0.683101,-0.682019,-0.680898,-0.679755,-0.678592,-0.677407, + -0.676187,-0.674941,-0.673676,-0.672386,-0.671066,-0.669718,-0.66835, + -0.666955,-0.665532,-0.664083,-0.662611,-0.661112,-0.659585,-0.658035, + -0.656459,-0.654854,-0.653223,-0.651572,-0.649892,-0.648181,-0.646446, + -0.644691,-0.642909,-0.641093,-0.639253,-0.637393,-0.63551,-0.633588, + -0.631644,-0.62968,-0.627695,-0.625668,-0.623621,-0.621553,-0.619464, + -0.617334,-0.615183,-0.613011,-0.610817,-0.608587,-0.606333,-0.604058, + -0.60176,-0.599429,-0.597072,-0.594695,-0.592293,-0.589862,-0.587404, + -0.584925,-0.58242,-0.579888,-0.577331,-0.574751,-0.572145,-0.569512, + -0.566858,-0.564178,-0.561471,-0.558739,-0.555988,-0.553209,-0.550402, + -0.547572,-0.544723,-0.54185,-0.538944,-0.536018,-0.533072,-0.530105, + -0.527103,-0.524081,-0.52104,-0.51798,-0.514883,-0.511767,-0.508633, + -0.505479,-0.502291,-0.499083,-0.495857,-0.492611,-0.489335,-0.486037, + -0.48272,-0.479384,-0.476021,-0.472634,-0.46923,-0.465805,-0.462356, + -0.458884,-0.455394,-0.451882,-0.448348,-0.444795,-0.44122,-0.437624, + -0.434008,-0.430374,-0.426718,-0.423041,-0.419344,-0.415631,-0.411897, + -0.40814,-0.404365,-0.400575,-0.396766,-0.392933,-0.389082,-0.385217, + -0.381336,-0.377428,-0.373505,-0.369568,-0.365616,-0.361638,-0.357645, + -0.353638,-0.349617,-0.345572,-0.341512,-0.337438,-0.33335,-0.329242, + -0.325118,-0.32098,-0.316829,-0.31266,-0.308474,-0.304276,-0.300063, + -0.295836,-0.291593,-0.287337,-0.283067,-0.278783,-0.274487,-0.270176, + -0.265852,-0.261515,-0.257168,-0.252806,-0.248431,-0.244045,-0.239649, + -0.23524,-0.230817,-0.226385,-0.221943,-0.21749,-0.213024,-0.208548, + -0.204064,-0.199571,-0.195064,-0.190549,-0.186026,-0.181495,-0.176952, + -0.1724,-0.167842,-0.163277,-0.1587,-0.154117,-0.149527,-0.14493,-0.140325, + -0.135712,-0.131094,-0.12647,-0.121839,-0.117201,-0.112559,-0.10791, + -0.103257,-0.0985979,-0.0939343,-0.0892662,-0.0845935,-0.079917,-0.0752362, + -0.0705516,-0.0658635,-0.0611729,-0.0564786,-0.0517814,-0.0470818,-0.0423802, + -0.0376765,-0.0329703,-0.0282629,-0.0235542,-0.0188445,-0.0141335,-0.00942183, + -0.00470983,2.41979e-06,0.00471481,0.00942681,0.0141384,0.0188494,0.023559, + 0.028268,0.0329754,0.0376813,0.0423851,0.0470868,0.0517863,0.0564836, + 0.0611777,0.0658683,0.0705566,0.0752412,0.0799218,0.0845982,0.0892712, + 0.0939393,0.0986028,0.103262,0.107915,0.112563,0.117206,0.121844,0.126475, + 0.131099,0.135717,0.14033,0.144935,0.149531,0.154122,0.158705,0.163281, + 0.167847,0.172405,0.176956,0.1815,0.18603,0.190553,0.195069,0.199576, + 0.204068,0.208552,0.213028,0.217495,0.221947,0.226389,0.230822,0.235245, + 0.239653,0.244049,0.248436,0.252811,0.257173,0.26152,0.265857,0.270181, + 0.274491,0.278788,0.283071,0.287341,0.291597,0.29584,0.300068,0.30428, + 0.308478,0.312664,0.316833,0.320984,0.325122,0.329246,0.333354,0.337442, + 0.341516,0.345576,0.34962,0.353642,0.357649,0.361642,0.36562,0.369572, + 0.373509,0.377432,0.38134,0.385221,0.389086,0.392936,0.39677,0.400579, + 0.404369,0.408143,0.4119,0.415634,0.419347,0.423044,0.426721,0.430377, + 0.434011,0.437627,0.441223,0.444798,0.448351,0.451885,0.455397,0.458887, + 0.462359,0.465807,0.469232,0.472637,0.476024,0.479386,0.482723,0.486039, + 0.489338,0.492613,0.49586,0.499086,0.502294,0.505481,0.508635,0.511769, + 0.514885,0.517982,0.521042,0.524083,0.527105,0.530107,0.533074,0.53602, + 0.538946,0.541851,0.544725,0.547574,0.550404,0.553211,0.555989,0.55874, + 0.561472,0.564179,0.566859,0.569514,0.572146,0.574753,0.577332,0.579889, + 0.582421,0.584926,0.587405,0.589863,0.592294,0.594696,0.597073,0.59943, + 0.60176,0.604059,0.606333,0.608588,0.610818,0.613012,0.615183,0.617335, + 0.619464,0.621553,0.623621,0.625669,0.627696,0.629681,0.631645,0.633588, + 0.63551,0.637393,0.639253,0.641093,0.642909,0.644691,0.646446,0.648181, + 0.649892,0.651572,0.653223,0.654854,0.656459,0.658035,0.659585,0.661112, + 0.662611,0.664083,0.665532,0.666955,0.66835,0.669718,0.671066,0.672386, + 0.673676,0.674941,0.676187,0.677407,0.678592,0.679755,0.680898,0.682019, + 0.683101,0.684162,0.685204,0.686227,0.687206,0.688166,0.689108,0.69003, + 0.690911,0.691771,0.692613,0.693435,0.694219,0.694981,0.695725,0.696447, + 0.697135,0.6978,0.698447,0.69907,0.699664,0.700234,0.700786,0.701312, + 0.70181,0.702288,0.702746,0.703177,0.703582,0.703969,0.704334,0.704671, + 0.704984,0.705282,0.705557,0.705802,0.706025,0.706233,0.706422,0.706576, + 0.706712,0.706832,0.706936,0.707002,0.707051,0.707086,0.707106,0.707086, + 0.707051,0.707003,0.706939,0.706838,0.706721,0.706592,0.706445,0.706265, + 0.70607,0.705861,0.705634,0.705378,0.705105,0.70482,0.704515,0.704184, + 0.703837,0.703478,0.703097,0.702694,0.702276,0.701846,0.701392,0.700917, + 0.700432,0.699932,0.699408,0.698866,0.698314,0.697749,0.697156,0.696549, + 0.695933,0.695305,0.694648,0.693979,0.693301,0.692613,0.691894,0.691165, + 0.690428,0.689683,0.688905,0.68812,0.687327,0.686525,0.685693,0.684854, + 0.684009,0.683152,0.68227,0.68138,0.680485,0.679577,0.678647,0.67771, + 0.676768,0.675811,0.674836,0.673855,0.672869,0.671867,0.670849,0.669827, + 0.668801,0.667757,0.6667,0.66564,0.664576,0.663493,0.6624,0.661305, + 0.660207,0.659088,0.657962,0.656834,0.655705,0.654553,0.653398,0.652241, + 0.651085,0.649903,0.648721,0.647539,0.646356,0.645149,0.643944,0.642739, + 0.641532,0.640304,0.639079,0.637855,0.636626,0.635381,0.634139,0.632899, + 0.631652,0.630392,0.629136,0.627883,0.626622,0.62535,0.624083,0.62282, + 0.621548,0.620268,0.618993,0.617724,0.616443,0.615158,0.613878,0.612605, + 0.61132,0.610032,0.608751,0.607477,0.606189,0.604903,0.603623,0.602351, + 0.601065,0.599782,0.598508,0.59724,0.595957,0.594682,0.593415,0.592154, + 0.59088,0.589615,0.588359,0.587106,0.585843,0.584591,0.583349,0.582108, + 0.580859,0.579623,0.578397,0.577172,0.575939,0.574721,0.573515,0.572307, + 0.571095,0.569897,0.568713,0.567525,0.566337,0.565161,0.564002,0.562837, + 0.561674,0.560525,0.559392,0.558252,0.557119,0.555998,0.554893,0.553782, + 0.552679,0.55159,0.550516,0.549434,0.548365,0.54731,0.546269,0.54522, + 0.544187,0.543168,0.542161,0.541148,0.540153,0.539173,0.538202,0.537226, + 0.536271,0.535332,0.5344,0.533464,0.532551,0.531654,0.530762,0.52987, + 0.528999,0.528147,0.527298,0.526451,0.525624,0.524819,0.524014,0.523214, + 0.522432,0.521675,0.520916,0.520166,0.519433,0.518724,0.518012,0.517312, + 0.51663,0.51597,0.515307,0.51466,0.51403,0.51342,0.512808,0.512213, + 0.511638,0.511079,0.510518,0.509979,0.509458,0.508951,0.508444,0.50796, + 0.507495,0.507042,0.506589,0.506162,0.505754,0.505356,0.504958,0.504587, + 0.504237,0.503895,0.503555,0.50324,0.502949,0.502662,0.502382,0.502123, + 0.501891,0.501661,0.50144,0.501239,0.501066,0.500893,0.500732,0.500591, + 0.500476,0.50036,0.500259,0.500179,0.500121,0.500063,0.500023,0.500003,0.500003}; + //This is a lookup table for converting midi to frequency double mtofarray[129]={0, 8.661957, 9.177024, 9.722718, 10.3, 10.913383, 11.562325, 12.25, 12.978271, 13.75, 14.567617, 15.433853, 16.351599, 17.323914, 18.354048, 19.445436, 20.601723, 21.826765, 23.124651, 24.5, 25.956543, 27.5, 29.135235, 30.867706, 32.703197, 34.647827, 36.708096, 38.890873, 41.203445, 43.65353, 46.249302, 49., 51.913086, 55., 58.27047, 61.735413, 65.406395, 69.295654, 73.416191, 77.781746, 82.406891, 87.30706, 92.498604, 97.998856, 103.826172, 110., 116.540939, 123.470825, 130.81279, 138.591309, 146.832382, 155.563492, 164.813782, 174.61412, 184.997208, 195.997711, 207.652344, 220., 233.081879, 246.94165, 261.62558, 277.182617,293.664764, 311.126984, 329.627563, 349.228241, 369.994415, 391.995422, 415.304688, 440., 466.163757, 493.883301, 523.25116, 554.365234, 587.329529, 622.253967, 659.255127, 698.456482, 739.988831, 783.990845, 830.609375, 880., 932.327515, 987.766602, 1046.502319, 1108.730469, 1174.659058, 1244.507935, 1318.510254, 1396.912964, 1479.977661, 1567.981689, 1661.21875, 1760., 1864.655029, 1975.533203, 2093.004639, 2217.460938, 2349.318115, 2489.015869, 2637.020508, 2793.825928, 2959.955322, 3135.963379, 3322.4375, 3520., 3729.31, 3951.066406, 4186.009277, 4434.921875, 4698.63623, 4978.031738, 5274.041016, 5587.651855, 5919.910645, 6271.926758, 6644.875, 7040., 7458.620117, 7902.132812, 8372.018555, 8869.84375, 9397.272461, 9956.063477, 10548.082031, 11175.303711, 11839.821289, 12543.853516, 13289.75}; @@ -189,7 +325,31 @@ double maxiOsc::saw(double frequency) { phase += (1./(maxiSettings::sampleRate/(frequency))); return(output); -} +} + +double maxiOsc::sawn(double frequency) { + //Bandlimited sawtooth generator. Woohoo. + if ( phase >= 0.5 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + double temp=(8820.22/frequency)*phase; + if (temp<-0.5) { + temp=-0.5; + } + if (temp>0.5) { + temp=0.5; + } + temp*=1000.0f; + temp+=500.0f; + double remainder = temp - floor(temp); + output = (double) ((1.0f-remainder) * transition[(long)temp] + remainder * transition[1+(long)temp]) - phase; + return(output); + +} + +double maxiOsc::rect(double frequency, double duty) { + + return (output); +} double maxiOsc::triangle(double frequency) { //This is a triangle wave. @@ -208,7 +368,7 @@ double maxiEnvelope::line(int numberofsegments,double segments[1000]) { //This is a basic multi-segment ramp generator that you can use for more or less anything. //However, it's not that intuitive. if (isPlaying==1) {//only make a sound once you've been triggered - period=2./(segments[valindex+1]*0.004); + period=4./(segments[valindex+1]*0.0044); nextval=segments[valindex+2]; currentval=segments[valindex]; if (currentval-amplitude > 0.0000001 && valindex < numberofsegments) { @@ -280,9 +440,9 @@ double maxiFilter::hipass(double input, double cutoff) { } //awesome. cuttof is freq in hz. res is between 1 and whatever. Watch out! double maxiFilter::lores(double input,double cutoff1, double resonance) { - cutoff=cutoff1*0.5; + cutoff=cutoff1; if (cutoff<10) cutoff=10; - if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (cutoff>(maxiSettings::sampleRate)) cutoff=(maxiSettings::sampleRate); if (resonance<1.) resonance = 1.; z=cos(TWOPI*cutoff/maxiSettings::sampleRate); c=2-2*z; @@ -296,9 +456,9 @@ double maxiFilter::lores(double input,double cutoff1, double resonance) { //working hires filter double maxiFilter::hires(double input,double cutoff1, double resonance) { - cutoff=cutoff1*0.5; + cutoff=cutoff1; if (cutoff<10) cutoff=10; - if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (cutoff>(maxiSettings::sampleRate)) cutoff=(maxiSettings::sampleRate); if (resonance<1.) resonance = 1.; z=cos(TWOPI*cutoff/maxiSettings::sampleRate); c=2-2*z; @@ -367,18 +527,21 @@ double *maxiMix::ambisonic(double input,double eight[8],double x,double y,double return(eight); } - +//This is the maxiSample load function. It just calls read. bool maxiSample::load(string fileName, int channel) { myPath = fileName; readChannel=channel; return read(); } +// This is for OGG loading bool maxiSample::loadOgg(string fileName, int channel) { #ifdef VORBIS bool result; readChannel=channel; int channelx; +// cout << fileName << endl; + free(temp); myDataSize = stb_vorbis_decode_filename(const_cast(fileName.c_str()), &channelx, &temp); result = myDataSize > 0; printf("\nchannels = %d\nlength = %d",channelx,myDataSize); @@ -400,16 +563,19 @@ bool maxiSample::loadOgg(string fileName, int channel) { return 0; } +//This sets the playback position to the start of a sample void maxiSample::trigger() { position = 0; + recordPosition = 0; } +//This is the main read function. bool maxiSample::read() { bool result; ifstream inFile( myPath.c_str(), ios::in | ios::binary); - result = inFile; - if (inFile) { + result = inFile.is_open(); + if (result) { bool datafound = false; inFile.seekg(4, ios::beg); inFile.read( (char*) &myChunkSize, 4 ); // read the ChunkSize @@ -438,7 +604,7 @@ bool maxiSample::read() //ignore any extra chunks char chunkID[5]=""; chunkID[4] = 0; - int filePos = 36; + int filePos = 20 + mySubChunk1Size; while(!datafound && !inFile.eof()) { inFile.seekg(filePos, ios::beg); inFile.read((char*) &chunkID, sizeof(char) * 4); @@ -453,7 +619,7 @@ bool maxiSample::read() } // read the data chunk - char *myData = (char*) malloc(myDataSize * sizeof(char)); + char * myData = (char*) malloc(myDataSize * sizeof(char)); inFile.seekg(filePos, ios::beg); inFile.read(myData, myDataSize); length=myDataSize*(0.5/myChannels); @@ -469,6 +635,7 @@ bool maxiSample::read() position+=2; } } + free(temp); temp = (short*) malloc(myDataSize * sizeof(char)); memcpy(temp, myData, myDataSize * sizeof(char)); @@ -484,13 +651,39 @@ bool maxiSample::read() return result; // this should probably be something more descriptive } +//This plays back at the correct speed. Always loops. double maxiSample::play() { position++; - if ((long) position == length) position=0; + if ((long) position >= length) position=0; output = (double) temp[(long)position]/32767.0; return output; } +void maxiSample::setPosition(double newPos) { + position = maxiMap::clamp(newPos, 0.0, 1.0) * length; +} + +//start end and points are between 0 and 1 +double maxiSample::playLoop(double start, double end) { + position++; + if (position < length * start) position = length * start; + if ((long) position >= length * end) position = length * start; + output = (double) temp[(long)position]/32767.0; + return output; +} + +double maxiSample::playUntil(double end) { + position++; + if ((long) position=length) end=length-1; @@ -572,7 +769,7 @@ double maxiSample::play(double frequency, double start, double end, double &pos) } if ( pos >= end ) pos = start; - pos += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv))); + pos += ((end-start)/((maxiSettings::sampleRate)/(frequency*chandiv))); remainder = pos - floor(pos); long posl = floor(pos); if (posl+1 maxValue) { + maxValue = abs(temp[i]); + } + } + float scale = 32767.0 * maxLevel / (float) maxValue; + for(int i=0; i < length; i++) { + temp[i] = round(scale * (float) temp[i]); + } +} + +void maxiSample::autoTrim(float alpha, float threshold, bool trimStart, bool trimEnd) { + + int startMarker=0; + if(trimStart) { + maxiLagExp startLag(alpha, 0); + while(startMarker < length) { + startLag.addSample(abs(temp[startMarker])); + if (startLag.value() > threshold) { + break; + } + startMarker++; + } + } + + int endMarker = length-1; + if(trimEnd) { + maxiLagExp endLag(alpha, 0); + while(endMarker > 0) { + endLag.addSample(abs(temp[endMarker])); + if (endLag.value() > threshold) { + break; + } + endMarker--; + } + } + + cout << "Autotrim: start: " << startMarker << ", end: " << endMarker << endl; + + int newLength = endMarker - startMarker; + if (newLength > 0) { + short *newData = (short*) malloc(sizeof(short) * newLength); + for(int i=0; i < newLength; i++) { + newData[i] = temp[i+startMarker]; + } + free(temp); + temp = newData; + myDataSize = newLength * 2; + length=newLength; + position=0; + recordPosition=0; + //envelope the start + int fadeSize=min((long)100, length); + for(int i=0; i < fadeSize; i++) { + float factor = i / (float) fadeSize; + temp[i] = round(temp[i] * factor); + temp[length - 1 - i] = round(temp[length - 1 - i] * factor); + } + } +} + @@ -986,6 +1247,37 @@ double maxiDyn::compressor(double input, double ratio, double threshold, double return output*(1+log(ratio)); } +double maxiDyn::compress(double input) { + + if (fabs(input)>threshold && attackphase!=1){ + holdcount=0; + releasephase=0; + attackphase=1; + if(currentRatio==0) currentRatio=ratio; + } + + if (attackphase==1 && currentRatio=ratio-1) { + attackphase=0; + releasephase=1; + } + + if (releasephase==1 && currentRatio>0.) { + currentRatio*=release; + } + + if (input>0.) { + output = input/(1.+currentRatio); + } else { + output = input/(1.+currentRatio); + } + + return output*(1+log(ratio)); +} + /* Lots of people struggle with the envelope generators so here's a new easy one. It takes mental numbers for attack and release tho. Basically, they're exponentials. @@ -1031,70 +1323,159 @@ double maxiEnv::ar(double input, double attack, double release, long holdtime, i return output; } -/* and here's a new adsr. It's not bad, very simple to use*/ +/* adsr. It's not bad, very simple to use*/ double maxiEnv::adsr(double input, double attack, double decay, double sustain, double release, long holdtime, int trigger) { - - if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ - holdcount=0; - decayphase=0; - sustainphase=0; - releasephase=0; - attackphase=1; - } - - if (attackphase==1) { - amplitude+=(1*attack); - output=input*amplitude; - } - - if (amplitude>=1) { - amplitude=1; - attackphase=0; - decayphase=1; - } - - if (decayphase==1) { - output=input*(amplitude*=decay); - if (amplitude<=sustain) { - decayphase=0; - holdphase=1; - } - } - - if (holdcount0.) { - output=input*(amplitude*=release); - - } - - return output; + + if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ + holdcount=0; + decayphase=0; + sustainphase=0; + releasephase=0; + attackphase=1; + } + + if (attackphase==1) { + releasephase=0; + amplitude+=(1*attack); + output=input*amplitude; + + if (amplitude>=1) { + amplitude=1; + attackphase=0; + decayphase=1; + } + } + + + if (decayphase==1) { + output=input*(amplitude*=decay); + if (amplitude<=sustain) { + decayphase=0; + holdphase=1; + } + } + + if (holdcount=holdtime && trigger==1) { + output=input*amplitude; + } + + if (holdcount>=holdtime && trigger!=1) { + holdphase=0; + releasephase=1; + } + + if (releasephase==1 && amplitude>0.) { + output=input*(amplitude*=release); + + } + + return output; } +double maxiEnv::adsr(double input, int trigger) { + + if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ + holdcount=0; + decayphase=0; + sustainphase=0; + releasephase=0; + attackphase=1; + } + + if (attackphase==1) { + releasephase=0; + amplitude+=(1*attack); + output=input*amplitude; + + if (amplitude>=1) { + amplitude=1; + attackphase=0; + decayphase=1; + } + } + + + if (decayphase==1) { + output=input*(amplitude*=decay); + if (amplitude<=sustain) { + decayphase=0; + holdphase=1; + } + } + + if (holdcount=holdtime && trigger==1) { + output=input*amplitude; + } + + if (holdcount>=holdtime && trigger!=1) { + holdphase=0; + releasephase=1; + } + + if (releasephase==1 && amplitude>0.) { + output=input*(amplitude*=release); + + } + + return output; +} + + +void maxiEnv::setAttack(double attackMS) { + attack = 1-pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiEnv::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiEnv::setSustain(double sustainL) { + sustain = sustainL; +} + +void maxiEnv::setDecay(double decayMS) { + decay = pow( 0.01, 1.0 / ( decayMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setAttack(double attackMS) { + attack = pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setRelease(double releaseMS) { + release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); +} + +void maxiDyn::setThreshold(double thresholdI) { + threshold = thresholdI; +} + +void maxiDyn::setRatio(double ratioF) { + ratio = ratioF; +} + + double convert::mtof(int midinote) { return mtofarray[midinote]; } -void maxiEnvelopeFollower::setAttack(double attackMS) { +template<> void maxiEnvelopeFollower::setAttack(double attackMS) { attack = pow( 0.01, 1.0 / ( attackMS * maxiSettings::sampleRate * 0.001 ) ); } -void maxiEnvelopeFollower::setRelease(double releaseMS) { +template<> void maxiEnvelopeFollower::setRelease(double releaseMS) { release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); } diff --git a/ofxMaxim/openFrameworksExamples/windows/ofxMaximExampleVS2010-OF0072/src/ofxMaxim/libs/maximilian.h b/ofxMaxim/openFrameworksExamples/windows/ofxMaximExampleVS2010-OF0072/src/ofxMaxim/libs/maximilian.h old mode 100644 new mode 100755 index dd942b7..8a78c26 --- a/ofxMaxim/openFrameworksExamples/windows/ofxMaximExampleVS2010-OF0072/src/ofxMaxim/libs/maximilian.h +++ b/ofxMaxim/openFrameworksExamples/windows/ofxMaximExampleVS2010-OF0072/src/ofxMaxim/libs/maximilian.h @@ -43,6 +43,10 @@ #include #include "math.h" +#ifdef _WIN32 //|| _WIN64 +#include +#endif + using namespace std; #ifndef PI #define PI 3.1415926535897932384626433832795 @@ -85,6 +89,8 @@ public: double noise(); double sinebuf(double frequency); double sinebuf4(double frequency); + double sawn(double frequency); + double rect(double frequency, double duty=0.5); void phaseReset(double phaseIn); }; @@ -207,12 +213,12 @@ private: int myByteRate; short myBlockAlign; short myBitsPerSample; + double position, recordPosition; double speed; double output; maxiLagExp loopRecordLag; public: - double position, recordPosition; int myDataSize; short myChannels; int mySampleRate; @@ -230,9 +236,11 @@ public: { // if (myData) free(myData); if (temp) free(temp); + printf("freeing SampleData"); + } - maxiSample():temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; + maxiSample():temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; maxiSample& operator=(const maxiSample &source) { if (this == &source) @@ -261,8 +269,9 @@ public: //read an ogg file into this class using stb_vorbis bool readOgg(); - void loopRecord(double newSample, const bool recordEnabled, const double recordMix) { + void loopRecord(double newSample, const bool recordEnabled, const double recordMix, double start = 0.0, double end = 1.0) { loopRecordLag.addSample(recordEnabled); + if (recordPosition < start * length) recordPosition = start * length; if(recordEnabled) { double currentSample = temp[(unsigned long)recordPosition] / 32767.0; newSample = (recordMix * currentSample) + ((1.0 - recordMix) * newSample); @@ -270,61 +279,67 @@ public: temp[(unsigned long)recordPosition] = newSample * 32767; } ++recordPosition; - if (recordPosition == length) - recordPosition=0; + if (recordPosition >= end * length) + recordPosition= start * length; } void clear(); void reset(); - - double play(); - - double playOnce(); - - double playOnce(double speed); - - double play(double speed); - - double play(double frequency, double start, double end, double &pos); - - double play(double frequency, double start, double end); - - double play4(double frequency, double start, double end); - - double bufferPlay(unsigned char &bufferin,long length); - - double bufferPlay(unsigned char &bufferin,double speed,long length); - - double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); - - double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); + + double play(); + + double playLoop(double start, double end); // start and end are between 0.0 and 1.0 + + double playOnce(); + + double playOnce(double speed); + + void setPosition(double newPos); // between 0.0 and 1.0 + + double playUntil(double end); + + double play(double speed); + + double play(double frequency, double start, double end, double &pos); + + double play(double frequency, double start, double end); + + double play4(double frequency, double start, double end); + + double bufferPlay(unsigned char &bufferin,long length); + + double bufferPlay(unsigned char &bufferin,double speed,long length); + + double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); + + double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); bool save() { return save(myPath); } bool save(string filename) { - fstream myFile (filename.c_str(), ios::out | ios::binary); - - // write the wav file per the wav file format - myFile.seekp (0, ios::beg); - myFile.write ("RIFF", 4); - myFile.write ((char*) &myChunkSize, 4); - myFile.write ("WAVE", 4); - myFile.write ("fmt ", 4); - myFile.write ((char*) &mySubChunk1Size, 4); - myFile.write ((char*) &myFormat, 2); - myFile.write ((char*) &myChannels, 2); - myFile.write ((char*) &mySampleRate, 4); - myFile.write ((char*) &myByteRate, 4); - myFile.write ((char*) &myBlockAlign, 2); - myFile.write ((char*) &myBitsPerSample, 2); - myFile.write ("data", 4); - myFile.write ((char*) &myDataSize, 4); - myFile.write ((char*) temp, myDataSize); - - return true; + fstream myFile (filename.c_str(), ios::out | ios::binary); + + // write the wav file per the wav file format + myFile.seekp (0, ios::beg); + myFile.write ("RIFF", 4); + myFile.write ((char*) &myChunkSize, 4); + myFile.write ("WAVE", 4); + myFile.write ("fmt ", 4); + myFile.write ((char*) &mySubChunk1Size, 4); + myFile.write ((char*) &myFormat, 2); + myFile.write ((char*) &myChannels, 2); + myFile.write ((char*) &mySampleRate, 4); + myFile.write ((char*) &myByteRate, 4); + myFile.write ((char*) &myBlockAlign, 2); + myFile.write ((char*) &myBitsPerSample, 2); + myFile.write ("data", 4); + myFile.write ((char*) &myDataSize, 4); + myFile.write ((char*) temp, myDataSize); + + return true; } // return a printable summary of the wav file @@ -332,49 +347,58 @@ public: { char *summary = new char[250]; sprintf(summary, " Format: %d\n Channels: %d\n SampleRate: %d\n ByteRate: %d\n BlockAlign: %d\n BitsPerSample: %d\n DataSize: %d\n", myFormat, myChannels, mySampleRate, myByteRate, myBlockAlign, myBitsPerSample, myDataSize); + std::cout << myDataSize; return summary; } + + void normalise(float maxLevel = 0.99); //0 < maxLevel < 1.0 + void autoTrim(float alpha = 0.3, float threshold = 6000, bool trimStart = true, bool trimEnd = true); //alpha of lag filter (lower == slower reaction), threshold to mark start and end, < 32767 }; class maxiMap { public: - static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { - return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; - } - - static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { - //clipping - val = max(min(val, inMax), inMin); - return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; - } - - static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { - //clipping - val = max(min(val, inMax), inMin); - return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; - } - + static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { + val = max(min(val, inMax), inMin); + return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; + } + + static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; + } + + static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; + } + //changed to templated function, e.g. maxiMap::maxiClamp(v, l, h); template - static T inline clamp(T v, const T low, const T high) { + static T inline clamp(T v, const T low, const T high) { if (v > high) v = high; else if (v < low) { v = low; } - return v; - } + return v; + } }; + class maxiDyn { public: - double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); - double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); - double input; +// double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); +// double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); + double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); + double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); + double compress(double input); + double input; double ratio; double currentRatio; double threshold; @@ -382,6 +406,10 @@ public: double attack; double release; double amplitude; + void setAttack(double attackMS); + void setRelease(double releaseMS); + void setThreshold(double thresholdI); + void setRatio(double ratioF); long holdtime; long holdcount; int attackphase,holdphase,releasephase; @@ -393,6 +421,7 @@ class maxiEnv { public: double ar(double input, double attack=1, double release=0.9, long holdtime=1, int trigger=0); double adsr(double input, double attack=1, double decay=0.99, double sustain=0.125, double release=0.9, long holdtime=1, int trigger=0); + double adsr(double input,int trigger); double input; double output; double attack; @@ -400,8 +429,12 @@ public: double sustain; double release; double amplitude; + void setAttack(double attackMS); + void setRelease(double releaseMS); + void setDecay(double decayMS); + void setSustain(double sustainL); int trigger; - long holdtime; + long holdtime=1; long holdcount; int attackphase,decayphase,sustainphase,holdphase,releasephase; }; @@ -489,30 +522,38 @@ inline double maxiChorus::chorus(const double input, const unsigned int delay, c return (output1 + output2 + input) / 3.0; } -class maxiEnvelopeFollower { +template +class maxiEnvelopeFollowerType { public: - maxiEnvelopeFollower() { + maxiEnvelopeFollowerType() { setAttack(100); setRelease(100); env = 0; } - void setAttack(double attackMS); - void setRelease(double releaseMS); - inline double play(double input) { + void setAttack(T attackMS) { + attack = pow( 0.01, 1.0 / (attackMS * maxiSettings::sampleRate * 0.001 ) ); + } + void setRelease(T releaseMS) { + release = pow( 0.01, 1.0 / (releaseMS * maxiSettings::sampleRate * 0.001 ) ); + } + inline T play(T input) { input = fabs(input); if (input>env) env = attack * (env - input) + input; else - env = release * (env - input) + input; + env = release * (env - input) + input; return env; } - void reset() {env=0;} - inline double getEnv(){return env;} + void reset() {env=0;} + inline T getEnv(){return env;} + inline void setEnv(T val){env = val;} private: - double attack, release, env; + T attack, release, env; }; -//from https://ccrma.stanford.edu/~jos/filters/DC_Blocker_Software_Implementations.html +typedef maxiEnvelopeFollowerType maxiEnvelopeFollower; +typedef maxiEnvelopeFollowerType maxiEnvelopeFollowerF; + class maxiDCBlocker { public: double xm1, ym1; @@ -524,5 +565,73 @@ public: } }; +/* + State Variable Filter + + algorithm from http://www.cytomic.com/files/dsp/SvfLinearTrapOptimised.pdf + usage: + either set the parameters separately as required (to save CPU) + + filter.setCutoff(param1); + filter.setResonance(param2); + + w = filter.play(w, 0.0, 1.0, 0.0, 0.0); + + or set everything together at once + + w = filter.setCutoff(param1).setResonance(param2).play(w, 0.0, 1.0, 0.0, 0.0); + + */ +class maxiSVF { +public: + maxiSVF() : v0z(0), v1(0), v2(0) { setParams(1000, 1);} + + //20 < cutoff < 20000 + inline maxiSVF& setCutoff(double cutoff) { + setParams(cutoff, res); + return *this; + } + + //from 0 upwards, starts to ring from 2-3ish, cracks a bit around 10 + inline maxiSVF& setResonance(double q) { + setParams(freq, q); + return *this; + } + + //run the filter, and get a mixture of lowpass, bandpass, highpass and notch outputs + inline double play(double w, double lpmix, double bpmix, double hpmix, double notchmix) { + double low, band, high, notch; + double v1z = v1; + double v2z = v2; + double v3 = w + v0z - 2.0 * v2z; + v1 += g1*v3-g2*v1z; + v2 += g3*v3+g4*v1z; + v0z = w; + low = v2; + band = v1; + high = w-k*v1-v2; + notch = w-k*v1; + return (low * lpmix) + (band * bpmix) + (high * hpmix) + (notch * notchmix); + } + +private: + inline void setParams(double _freq, double _res) { + freq = _freq; + res = _res; + g = tan(PI * freq / maxiSettings::sampleRate); + damping = res == 0 ? 0 : 1.0 / res; + k = damping; + ginv = g / (1.0 + g * (g + k)); + g1 = ginv; + g2 = 2.0 * (g + k) * ginv; + g3 = g * ginv; + g4 = 2.0 * ginv; + } + + double v0z, v1, v2, g, damping, k, ginv, g1, g2, g3 ,g4; + double freq, res; + +}; + #endif -- cgit v1.3 From 5b37d13616c303538a61b520e6930b322e4ff378 Mon Sep 17 00:00:00 2001 From: mick grierson Date: Thu, 27 Aug 2015 13:33:41 +0100 Subject: redoing tutorials a bit --- main.cpp | 112 +++++++++------------ maximilian.cpp | 1 + .../UserInterfaceState.xcuserstate | Bin 89334 -> 60853 bytes maximilian_examples/1.TestTone.cpp | 13 ++- maximilian_examples/10.Filters.cpp | 59 +++++++---- maximilian_examples/11.Mixing.cpp | 40 ++------ maximilian_examples/14.monosynth.cpp | 2 +- maximilian_examples/15.polysynth.cpp | 6 +- maximilian_examples/2.TwoTones.cpp | 11 +- maximilian_examples/3.AM1.cpp | 16 ++- maximilian_examples/4.AM2.cpp | 18 +++- maximilian_examples/5.FM1.cpp | 28 +++++- maximilian_examples/6.FM2.cpp | 10 +- maximilian_examples/7.Counting.cpp | 26 ++++- maximilian_examples/9.Envelopes.cpp | 60 +++++++---- 15 files changed, 230 insertions(+), 172 deletions(-) (limited to 'maximilianTest.xcodeproj/project.xcworkspace') diff --git a/main.cpp b/main.cpp index e3e50cb..5cfdb74 100755 --- a/main.cpp +++ b/main.cpp @@ -1,81 +1,65 @@ #include "maximilian.h" -//This shows how to use maximilian to build a polyphonic synth. - -//These are the synthesiser bits -maxiOsc VCO1[6],VCO2[6],LFO1[6],LFO2[6]; -maxiFilter VCF[6]; -maxiEnv ADSR[6]; - -//This is a bunch of control signals so that we can hear something - -maxiOsc timer;//this is the metronome -int currentCount,lastCount,voice=0;//these values are used to check if we have a new beat this sample - -//and these are some variables we can use to pass stuff around - -double VCO1out[6],VCO2out[6],LFO1out[6],LFO2out[6],VCFout[6],ADSRout[6],mix,pitch[6]; - +double outputs[2],moreoutputs[2]; //some track outputs +double filtered,patch1,patch2,tune,delayed, +mixed,ramp,filtered2,noise,pan,more;//a bunch of patch cables +int beat,lastbeat,morebeats,lastmorebeats;//some rhythmic elemts +double env[4]={200,0,0,50};//the kick drum pitch envelope data +double env2[6]={10000,0,9000,5,0,5};//the hi hat pitch envelope dat +double melody[14]={600,0,0,650,0,0,400,0,0,425,0,300,0,315};//the melody data +int rhythm1[16]={1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0};//another way of doing a rhythm +maxiOsc a,c,d,e,g,h,i,j,squarewave;//some oscillators +maxiEnvelope b,f;//two envelopers +maxiDelayline delay;//a delay line +maxiFilter myfilter,antia;// a FAT filter +maxiMix mymix,bobbins;//some panning busses +maxiSample beats; void setup() {//some inits + b.amplitude=env[0];//starting value for envelope b + f.amplitude=env2[0];//same for f + beats.load("/Users/michaelgrierson/Documents/workspace/Maximilian/beat2.wav");//put a path to a soundfile here. Wav format only. - for (int i=0;i<6;i++) { - - ADSR[i].setAttack(0); - ADSR[i].setDecay(200); - ADSR[i].setSustain(0.2); - ADSR[i].setRelease(2000); - - } } -void play(double *output) { - - mix=0;//we're adding up the samples each update and it makes sense to clear them each time first. - - //so this first bit is just a basic metronome so we can hear what we're doing. +void play(double *output) {//this is where the magic happens. Very slow magic. + beat=((int) c.phasor(8));//this oscillator is now a counter + morebeats=((int) e.phasor(0.5,0,16));//so is this one + patch1=b.line(4,env);//here's envelope b + patch2=f.line(6,env2);//here's envelop f + tune=g.saw(melody[morebeats]*0.25);//here's the melody, which occurs at certain times - currentCount=(int)timer.phasor(8);//this sets up a metronome that ticks 8 times a second - - if (lastCount!=currentCount) {//if we have a new timer int this sample, play the sound - - if (voice==6) { - voice=0; - } + if (lastbeat!=beat) {//this is a nice sample and hold routine for the kick drum + f.trigger(0, env2[0]);//it runs off the hi hat. - ADSR[voice].trigger=1;//trigger the envelope from the start - pitch[voice]=voice+1; - voice++; + if (rhythm1[morebeats]==1) { + b.trigger(0, env[0]);//and gets played when it's time. + } } + lastbeat=beat;//let's start again. It's a loop + ramp=i.phasor(0.5,1,2048);//create a basic ramp + pan=j.phasor(0.25);//some panning from a phasor (object is equal power) + delayed=delay.dl(tune, ramp, 0.9)*0.125;//the delay line + //then it all gets mixed. + mixed=((a.sinewave(patch1)*0.5)+((d.saw(patch2))*0.125)+(delayed*0.3)*0.5); + //add some noise + noise=i.noise()*0.25; + filtered2=beats.play(1*(1./16.),0,beats.length); + // filtered2=beats.play(-1); - //and this is where we build the synth + more=squarewave.pulse(melody[morebeats],pan)*0.05; + //filter the noise! this lores takes values between 1 and 100 for res, and freq for cutoff. + filtered=myfilter.lores(filtered2, 1+(pan*10000), 10)*0.4; - for (int i=0; i<6; i++) { - - - ADSRout[i]=ADSR[i].adsr(1.,ADSR[i].trigger);//our ADSR env is passed a constant signal of 1 to generate the transient. - - LFO1out[i]=LFO1[i].sinebuf(0.2);//this lfo is a sinewave at 0.2 hz - - VCO1out[i]=VCO1[i].pulse(55*pitch[i],0.6);//here's VCO1. it's a pulse wave at 55 hz, with a pulse width of 0.6 - VCO2out[i]=VCO2[i].pulse((110*pitch[i])+LFO1out[i],0.2);//here's VCO2. it's a pulse wave at 110hz with LFO modulation on the frequency, and width of 0.2 - - - VCFout[i]=VCF[i].lores((VCO1out[i]+VCO2out[i])*0.5, 250+((pitch[i]+LFO1out[i])*1000), 10);//now we stick the VCO's into the VCF, using the ADSR as the filter cutoff - - mix+=VCFout[i]*ADSRout[i]/6;//finally we add the ADSR as an amplitude modulator - - - } + //now we send the sounds to some stereo busses. + mymix.stereo(more+mixed+delayed, outputs, 1-pan); + bobbins.stereo(filtered, moreoutputs, pan);//invert the pan - output[0]=mix*0.5;//left channel - output[1]=mix*0.5;//right channel - + //mixing - // This just sends note-off messages. - for (int i=0; i<6; i++) { - ADSR[i].trigger=0; - } + output[0]=outputs[0]+moreoutputs[0]/10;//stick it in the out!! + output[1]=outputs[1]+moreoutputs[1]/10; } + diff --git a/maximilian.cpp b/maximilian.cpp index 7ba4978..1a79129 100644 --- a/maximilian.cpp +++ b/maximilian.cpp @@ -432,6 +432,7 @@ double maxiFilter::lopass(double input, double cutoff) { outputs[0]=output; return(output); } + //as above double maxiFilter::hipass(double input, double cutoff) { output=input-(outputs[0] + cutoff*(input-outputs[0])); diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate index 8959558..ec304f1 100644 Binary files a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate and b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/maximilian_examples/1.TestTone.cpp b/maximilian_examples/1.TestTone.cpp index 77783b4..b8da07c 100755 --- a/maximilian_examples/1.TestTone.cpp +++ b/maximilian_examples/1.TestTone.cpp @@ -1,14 +1,19 @@ +//This example shows how to create one of the most fundamental building blocks in computer audio. The sine wave. +//The sine wave is an oscillator - it oscillates back and forth between two values in a particular shape. + + #include "maximilian.h" maxiOsc mySine;//let's create an oscillator and give it a name. void setup() {//some inits - //nothing to go here this time + //nothing to go here this time } void play(double *output) {//this is where the magic happens. Very slow magic. - - *output=mySine.sinewave(440);//simple as that! - + + //output[0] is the left output. output[1] is the right output + output[0]=mySine.sinewave(440);//simple as that! + } diff --git a/maximilian_examples/10.Filters.cpp b/maximilian_examples/10.Filters.cpp index b80b512..41e779a 100755 --- a/maximilian_examples/10.Filters.cpp +++ b/maximilian_examples/10.Filters.cpp @@ -1,33 +1,48 @@ +// Here is an example of a Maximilian filter being used. +// There are a number of filters in Maximilian, including low and high pass filters. +// There are also resonant filters and a state variable filter. + + #include "maximilian.h" maxiOsc myCounter,mySwitchableOsc;// int CurrentCount;// -double myOscOutput,myFilteredOutput;// -double myEnvelopeData[6] = {500,0,1000,500,0,500};//this data will be used to make an envelope. Value and time to value in ms. -maxiEnvelope myEnvelope; +double myOscOutput,myCurrentVolume, myFilteredOutput;// +maxiEnv myEnvelope; maxiFilter myFilter; void setup() {//some inits - myEnvelope.amplitude=myEnvelopeData[0]; //initialise the envelope + + //Timing is in ms + + myEnvelope.setAttack(0); + myEnvelope.setDecay(1); // Needs to be at least 1 + myEnvelope.setSustain(1); + myEnvelope.setRelease(1000); + } void play(double *output) { - - CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. - - if (CurrentCount<5)//simple if statement - - myOscOutput=mySwitchableOsc.square(CurrentCount*100); - - else if (CurrentCount>=5)//and the 'else' bit. - - myOscOutput=mySwitchableOsc.saw(CurrentCount*50);//one osc object can produce whichever waveform you want. - - if (CurrentCount==1) - - myEnvelope.trigger(0,myEnvelopeData[0]); //trigger the envelope - - myFilteredOutput=myFilter.lores(myOscOutput,(myEnvelope.line(6, myEnvelopeData)),10);//lores takes an audio input, a frequency and a resonance factor (1-100) - - *output=myFilteredOutput;//point me at your speakers and fire. + + myCurrentVolume=myEnvelope.adsr(1.,myEnvelope.trigger); + + CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. + + // You'll notice that these 'if' statements don't require curly braces "{}". + // This is because there is only one outcome if the statement is true. + + if (CurrentCount==1) myEnvelope.trigger=1; //trigger the envelope + + else myEnvelope.trigger=0;//release the envelope to make it fade out only if it's been triggered + + myOscOutput=mySwitchableOsc.sawn(100); + + // Below, the oscilator signals are being passed through a low pass filter. + // The middle input is the filter cutoff. It is being controlled by the envelope. + // Notice that the envelope is being amplified so that it scales between 0 and 1000. + // The last input is the resonance. + myFilteredOutput=myFilter.lores(myOscOutput,myCurrentVolume*1000,10); + + output[0]=myFilteredOutput;//left speaker + } diff --git a/maximilian_examples/11.Mixing.cpp b/maximilian_examples/11.Mixing.cpp index 6fd7a34..8f6e33c 100755 --- a/maximilian_examples/11.Mixing.cpp +++ b/maximilian_examples/11.Mixing.cpp @@ -1,40 +1,18 @@ #include "maximilian.h" -maxiOsc myCounter,mySwitchableOsc,myAutoPanner;// -int CurrentCount;// -double myOscOutput,myFilteredOutput,myPanPosition;// -double myStereoOutput[2];// we need an output for each channel. -double myEnvelopeData[6] = {500,0,1000,500,0,500};//this data will be used to make an envelope. Value and time to value in ms. -maxiEnvelope myEnvelope; -maxiFilter myFilter; +maxiOsc myOsc,myAutoPanner;// +double myStereoOutput[2]; maxiMix myOutputs;//this is the stereo mixer channel. void setup() {//some inits - myEnvelope.amplitude=myEnvelopeData[0]; //initialise the envelope + } void play(double *output) { - - CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. - - if (CurrentCount<5)//simple if statement - - myOscOutput=mySwitchableOsc.square(CurrentCount*100); - - else if (CurrentCount>=5)//and the 'else' bit. - - myOscOutput=mySwitchableOsc.saw(CurrentCount*50);//one osc object can produce whichever waveform you want. - - if (CurrentCount==1) - - myEnvelope.trigger(0,myEnvelopeData[0]); //trigger the envelope - - myFilteredOutput=myFilter.lores(myOscOutput,(myEnvelope.line(6, myEnvelopeData)),10);//lores takes an audio input, a frequency and a resonance factor (1-100) - - myPanPosition=myAutoPanner.sinewave(1); - - myOutputs.stereo(myFilteredOutput,myStereoOutput,myPanPosition);//Stereo, Quad or 8 Channel. Specify the input to be mixed, the output[numberofchannels], and the pan (0-1,equal power). - output[0]=myStereoOutput[0];//When working with mixing, you need to specify the outputs explicityly - output[1]=myStereoOutput[1];// - + + + myOutputs.stereo(myOsc.noise(),myStereoOutput,(myAutoPanner.sinewave(1)+1)/2);//Stereo, Quad or 8 Channel. Specify the input to be mixed, the output[numberofchannels], and the pan (0-1,equal power). + output[0]=myStereoOutput[0];//When working with mixing, you need to specify the outputs explicitly + output[1]=myStereoOutput[1];// + } diff --git a/maximilian_examples/14.monosynth.cpp b/maximilian_examples/14.monosynth.cpp index 897c41a..265e3e4 100755 --- a/maximilian_examples/14.monosynth.cpp +++ b/maximilian_examples/14.monosynth.cpp @@ -42,7 +42,7 @@ void play(double *output) { //and this is where we build the synth - ADSRout=ADSR.adsr(1.0,ADSR.trigger);//our ADSR env has 8 value/time pairs. + ADSRout=ADSR.adsr(1.0,ADSR.trigger); LFO1out=LFO1.sinebuf(0.2);//this lfo is a sinewave at 0.2 hz diff --git a/maximilian_examples/15.polysynth.cpp b/maximilian_examples/15.polysynth.cpp index 3e278cb..fefc261 100644 --- a/maximilian_examples/15.polysynth.cpp +++ b/maximilian_examples/15.polysynth.cpp @@ -47,8 +47,6 @@ void play(double *output) { pitch[voice]=voice+1; voice++; - lastCount=0; - } //and this is where we build the synth @@ -56,7 +54,7 @@ void play(double *output) { for (int i=0; i<6; i++) { - ADSRout[i]=ADSR[i].adsr(1.,ADSR[i].trigger);//our ADSR env has 8 value/time pairs. + ADSRout[i]=ADSR[i].adsr(1.,ADSR[i].trigger);//our ADSR env is passed a constant signal of 1 to generate the transient. LFO1out[i]=LFO1[i].sinebuf(0.2);//this lfo is a sinewave at 0.2 hz @@ -74,6 +72,8 @@ void play(double *output) { output[0]=mix*0.5;//left channel output[1]=mix*0.5;//right channel + + // This just sends note-off messages. for (int i=0; i<6; i++) { ADSR[i].trigger=0; } diff --git a/maximilian_examples/2.TwoTones.cpp b/maximilian_examples/2.TwoTones.cpp index 4e22994..fb29288 100755 --- a/maximilian_examples/2.TwoTones.cpp +++ b/maximilian_examples/2.TwoTones.cpp @@ -1,14 +1,17 @@ +//This examples shows another fundamental building block of digital audio - adding two sine waves together. When you add waves together they create a new wave whose amplitude at any time is computed by adding the current amplitudes of each wave together. So, if one wave has an amplitude of 1, and the other has an amplitude of 1, the new wave will be equal to 2 at that point in time. Whereas, later, if one wave has an amplitude of -1, and the other has an amplitude of 1, the new wave - the one you hear - will equal 0. This can create some interesting effects, including 'beating', when the waves interact to create a single wave that fades up and down based on the frequencies of the two interacting waves. The frequency of the 'beating' i.e. the fading in and out, is equal to the difference in frequency between the two waves. + #include "maximilian.h" maxiOsc mySine,myOtherSine;//Two oscillators with names. void setup() {//some inits - //nothing to go here this time + //nothing to go here this time } void play(double *output) {//this is where the magic happens. Very slow magic. - - *output=mySine.sinewave(440)+myOtherSine.sinewave(441);//these two sines will beat together. They're now a bit too loud though.. - + + //output[0] is the left output. output[1] is the right output + output[0]=mySine.sinewave(440)+myOtherSine.sinewave(441);//these two sines will beat together. They're now a bit too loud though.. + } diff --git a/maximilian_examples/3.AM1.cpp b/maximilian_examples/3.AM1.cpp index ec96c7f..384a7f5 100755 --- a/maximilian_examples/3.AM1.cpp +++ b/maximilian_examples/3.AM1.cpp @@ -1,15 +1,21 @@ #include "maximilian.h" -//This shows how to use maximilian to do basic amplitude modulation +//This shows how to use maximilian to do basic amplitude modulation. Amplitude modulation is when you multiply waves together. In maximilian you just use the * inbetween the two waveforms. maxiOsc mySine,myOtherSine;//Two oscillators. They can be called anything. They can be any of the available waveforms. These ones will be sinewaves void setup() {//some inits - //nothing to go here this time + //nothing to go here this time } void play(double *output) { - - *output=mySine.sinewave(440)*myOtherSine.sinewave(10); - + + // This form of amplitude modulation is straightforward multiplication of two waveforms. + // Notice that the maths is different to when you add waves. + // The waves aren't 'beating'. Instead, the amplitude of one is modulating the amplitude of the other + // Remember that the sine wave has positive and negative sections as it oscillates. + // When you multiply something by -1, its phase is inverted but it retains its amplitude. + // So you hear 2 waves per second, not 1, even though the frequency is 1. + output[0]=mySine.sinewave(440)*myOtherSine.sinewave(1); + } diff --git a/maximilian_examples/4.AM2.cpp b/maximilian_examples/4.AM2.cpp index 4e783d3..7e80f38 100755 --- a/maximilian_examples/4.AM2.cpp +++ b/maximilian_examples/4.AM2.cpp @@ -1,16 +1,24 @@ #include "maximilian.h" -//This shows how to use maximilian to do basic amplitude modulation +//This shows how to use maximilian to do basic amplitude modulation. +//It also shows what happens when you modulate waves with waves that have frequencies over 20 hz. +//You start to get interesting effects. maxiOsc mySine,myOtherSine,myPhasor;//Three oscillators. They can be called anything. They can be any of the available waveforms. void setup() {//some inits - //nothing to go here this time + //nothing to go here this time } void play(double *output) { - - *output=mySine.sinewave(440)*myOtherSine.sinewave(myPhasor.phasor(0.1,0,440)); - + + //Using the phasor we can create a ramp, and use this ramp to set the frequency of one of the waves. + //When the frequency of the lower waveform passes over the threshold of 20hz, we start to hear two new waveforms. + //The frequency of the first new wave is the sum of the two original waves. + //The frequency of the second new wave is the difference of the two original waves. + //So you hear two new waves, one going up, one going down. + + output[0]=mySine.sinewave(440)*myOtherSine.sinewave(myPhasor.phasor(0.01,0,440)); + } diff --git a/maximilian_examples/5.FM1.cpp b/maximilian_examples/5.FM1.cpp index c734dcf..14f6593 100755 --- a/maximilian_examples/5.FM1.cpp +++ b/maximilian_examples/5.FM1.cpp @@ -1,14 +1,34 @@ +// One way of thinking about FM synthesis is to see it as vibrato. +// You make a pitch, then vary it up and down at some rate. +// You can change the speed of the pitch variation (modulation frequency), and also the amount of variation (modulation index). +// In FM, usually only one of the waveforms - the carrier that provides the initial pitch - is sent to the output. +// The frequency of the the carrier wave is continually adjusted at a rate equal to the frequency of the second wave (the modulator). +// So at any given point in time, the frequency of the carrier can increase by an amount equal to the current amp of the modulator. +// This has some interesting effects. + #include "maximilian.h" maxiOsc mySine,myOtherSine;//Two oscillators void setup() {//some inits - //nothing to go here this time + //nothing to go here this time } void play(double *output) { - - *output=mySine.sinewave(myOtherSine.sinewave(1)*440); - + + // In this example, the 'myOtherSine.sinewave' is at an amplitude of 1, it's original amplitude. + // This is pretty simple and not too useful. + //output[0]=mySine.sinewave(440*myOtherSine.sinewave(1)); + + // Perhaps you should comment out the above line and uncomment the below one instead + // It shows how the frequency of the carrier is altered by ADDING a second waveform to its frequency value. + // The carrier frequency is 440, and the modulation frequency is 1. + // It also shows how the modulation index works. In this case the modulation index is 100 + // Try adjusting the modolation index. Also, try altering the modulation frequency. + output[0]=mySine.sinewave(440+(myOtherSine.sinewave(1)*100)); + } + +// In complex FM systems you can have lots of modulators stacked together in interesting ways, and theoretically this can make any sound. +// John Chowning is the guy you probably want to talk to about that. \ No newline at end of file diff --git a/maximilian_examples/6.FM2.cpp b/maximilian_examples/6.FM2.cpp index d9acd72..d9eddf5 100755 --- a/maximilian_examples/6.FM2.cpp +++ b/maximilian_examples/6.FM2.cpp @@ -1,14 +1,16 @@ +// Nothing much to say about this other than I like it. + #include "maximilian.h" maxiOsc mySine,myOtherSine,myLastSine,myPhasor;//Three oscillators void setup() {//some inits - //nothing to go here this time + //nothing to go here this time } void play(double *output) { - - *output=mySine.sinewave(myOtherSine.sinewave(myLastSine.sinewave(0.1)*30)*440);//awesome bassline - + + output[0]=mySine.sinewave(myOtherSine.sinewave(myLastSine.sinewave(0.1)*30)*440);//awesome bassline + } diff --git a/maximilian_examples/7.Counting.cpp b/maximilian_examples/7.Counting.cpp index 7de2f0e..e620b3a 100755 --- a/maximilian_examples/7.Counting.cpp +++ b/maximilian_examples/7.Counting.cpp @@ -1,3 +1,10 @@ +// This example shows how you can create a basic counter with a phasor. +// A phasor oscillator can create a ramp between any two values. +// It takes three inputs - frequency, start value and stop value. +// These are all double precision floats, so it's a continuous slide. +// If you write it into an integer, it will round it off for you. +// This creates a bunch of steps. + #include "maximilian.h" maxiOsc myCounter,mySquare;//these oscillators will help us count and play sound @@ -5,11 +12,22 @@ int CurrentCount;//we're going to put the current count in this variable so that void setup() {//some inits - //nothing to go here this time + //nothing to go here this time } void play(double *output) { - - CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. - *output=mySquare.square(CurrentCount*100); + + // Here you can see that CurrentCount is an int. It's taking the continuous output of the phasor and convering it. + // You don't need to explicityly 'cast' (i.e. change) the value from a float to an int. + // It happens automagically in these cases. + + // Once every second, CurrentCount counts from 1 until it gets to 9, then resets itself. + // When it reaches 9 it resets, so the values you get are 1-8. + + CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. + + // If we multiply the output of CurrentCount by 100, we get 100,200,300,400,500,600,700,800 in that order. + // These become the frequency of the oscillator. + // In this case, the oscillator is an antialiased sawtooth wave. Yum. + output[0]=mySquare.sawn(CurrentCount*100); } diff --git a/maximilian_examples/9.Envelopes.cpp b/maximilian_examples/9.Envelopes.cpp index 806e14f..2cf74f6 100755 --- a/maximilian_examples/9.Envelopes.cpp +++ b/maximilian_examples/9.Envelopes.cpp @@ -1,33 +1,51 @@ +//Envelopes allow you to shape the sound. The basic idea is that a sound has the following shape +// Attack: This is how long it takes to fade up to maximum volume +// Decay: This is how long it takes to reach the sustain level. +// Sustain: This is the sustain level +// Release: This is how long it takes to fade out. + #include "maximilian.h" maxiOsc myCounter,mySwitchableOsc;// int CurrentCount;// double myOscOutput,myCurrentVolume;// -double myEnvelopeData[4] = {1,0,0,500};//this data will be used to make an envelope. Value and time to value in ms. -maxiEnvelope myEnvelope; +maxiEnv myEnvelope; void setup() {//some inits - myEnvelope.amplitude=myEnvelopeData[0]; //initialise the envelope + + //Timing is in ms + + myEnvelope.setAttack(0); + myEnvelope.setDecay(1); // Needs to be at least 1 + myEnvelope.setSustain(1); + myEnvelope.setRelease(1000); + } void play(double *output) { - - myCurrentVolume=myEnvelope.line(4,myEnvelopeData); - - CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. - - if (CurrentCount<5)//simple if statement - - myOscOutput=mySwitchableOsc.square(CurrentCount*100); - - else if (CurrentCount>=5)//and the 'else' bit. - - myOscOutput=mySwitchableOsc.sinewave(CurrentCount*50);//one osc object can produce whichever waveform you want. - - if (CurrentCount==1) - - myEnvelope.trigger(0,myEnvelopeData[0]); //trigger the envelope - - *output=myOscOutput*myCurrentVolume;//point me at your speakers and fire. + + //notice that we feed in a value of 1. to create an envelope shape we can apply later. + myCurrentVolume=myEnvelope.adsr(1.,myEnvelope.trigger); + + CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. + + // You'll notice that these 'if' statements don't require curly braces "{}". + // This is because there is only one outcome if the statement is true. + + if (CurrentCount==1) myEnvelope.trigger=1; //trigger the envelope + + else myEnvelope.trigger=0;//release the envelope to make it fade out only if it's been triggered + + if (CurrentCount<5) + + myOscOutput=mySwitchableOsc.sawn(CurrentCount*100); + + else if (CurrentCount>=5)//and the 'else' bit. + + myOscOutput=mySwitchableOsc.sinewave(CurrentCount*50);//one osc object can produce whichever waveform you want. + + + output[0]=myOscOutput*myCurrentVolume;//left speaker + } -- cgit v1.3 From c814dd99dc3c347914c2057b77d1390ba41cfae5 Mon Sep 17 00:00:00 2001 From: mick grierson Date: Thu, 27 Aug 2015 13:35:02 +0100 Subject: main.cpp contains new envelope example --- main.cpp | 88 +++++++++------------ .../UserInterfaceState.xcuserstate | Bin 60853 -> 60691 bytes 2 files changed, 37 insertions(+), 51 deletions(-) (limited to 'maximilianTest.xcodeproj/project.xcworkspace') diff --git a/main.cpp b/main.cpp index 5cfdb74..2cf74f6 100755 --- a/main.cpp +++ b/main.cpp @@ -1,65 +1,51 @@ +//Envelopes allow you to shape the sound. The basic idea is that a sound has the following shape +// Attack: This is how long it takes to fade up to maximum volume +// Decay: This is how long it takes to reach the sustain level. +// Sustain: This is the sustain level +// Release: This is how long it takes to fade out. + #include "maximilian.h" -double outputs[2],moreoutputs[2]; //some track outputs -double filtered,patch1,patch2,tune,delayed, -mixed,ramp,filtered2,noise,pan,more;//a bunch of patch cables -int beat,lastbeat,morebeats,lastmorebeats;//some rhythmic elemts -double env[4]={200,0,0,50};//the kick drum pitch envelope data -double env2[6]={10000,0,9000,5,0,5};//the hi hat pitch envelope dat -double melody[14]={600,0,0,650,0,0,400,0,0,425,0,300,0,315};//the melody data -int rhythm1[16]={1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0};//another way of doing a rhythm -maxiOsc a,c,d,e,g,h,i,j,squarewave;//some oscillators -maxiEnvelope b,f;//two envelopers -maxiDelayline delay;//a delay line -maxiFilter myfilter,antia;// a FAT filter -maxiMix mymix,bobbins;//some panning busses -maxiSample beats; +maxiOsc myCounter,mySwitchableOsc;// +int CurrentCount;// +double myOscOutput,myCurrentVolume;// +maxiEnv myEnvelope; + void setup() {//some inits - b.amplitude=env[0];//starting value for envelope b - f.amplitude=env2[0];//same for f - beats.load("/Users/michaelgrierson/Documents/workspace/Maximilian/beat2.wav");//put a path to a soundfile here. Wav format only. + + //Timing is in ms + + myEnvelope.setAttack(0); + myEnvelope.setDecay(1); // Needs to be at least 1 + myEnvelope.setSustain(1); + myEnvelope.setRelease(1000); } -void play(double *output) {//this is where the magic happens. Very slow magic. - beat=((int) c.phasor(8));//this oscillator is now a counter - morebeats=((int) e.phasor(0.5,0,16));//so is this one - patch1=b.line(4,env);//here's envelope b - patch2=f.line(6,env2);//here's envelop f - tune=g.saw(melody[morebeats]*0.25);//here's the melody, which occurs at certain times +void play(double *output) { - if (lastbeat!=beat) {//this is a nice sample and hold routine for the kick drum - f.trigger(0, env2[0]);//it runs off the hi hat. - - - if (rhythm1[morebeats]==1) { - b.trigger(0, env[0]);//and gets played when it's time. - } - } - lastbeat=beat;//let's start again. It's a loop - ramp=i.phasor(0.5,1,2048);//create a basic ramp - pan=j.phasor(0.25);//some panning from a phasor (object is equal power) - delayed=delay.dl(tune, ramp, 0.9)*0.125;//the delay line - //then it all gets mixed. - mixed=((a.sinewave(patch1)*0.5)+((d.saw(patch2))*0.125)+(delayed*0.3)*0.5); - //add some noise - noise=i.noise()*0.25; - filtered2=beats.play(1*(1./16.),0,beats.length); - // filtered2=beats.play(-1); + //notice that we feed in a value of 1. to create an envelope shape we can apply later. + myCurrentVolume=myEnvelope.adsr(1.,myEnvelope.trigger); - more=squarewave.pulse(melody[morebeats],pan)*0.05; - //filter the noise! this lores takes values between 1 and 100 for res, and freq for cutoff. - filtered=myfilter.lores(filtered2, 1+(pan*10000), 10)*0.4; + CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. - //now we send the sounds to some stereo busses. - mymix.stereo(more+mixed+delayed, outputs, 1-pan); - bobbins.stereo(filtered, moreoutputs, pan);//invert the pan + // You'll notice that these 'if' statements don't require curly braces "{}". + // This is because there is only one outcome if the statement is true. - //mixing + if (CurrentCount==1) myEnvelope.trigger=1; //trigger the envelope - output[0]=outputs[0]+moreoutputs[0]/10;//stick it in the out!! - output[1]=outputs[1]+moreoutputs[1]/10; + else myEnvelope.trigger=0;//release the envelope to make it fade out only if it's been triggered + + if (CurrentCount<5) + + myOscOutput=mySwitchableOsc.sawn(CurrentCount*100); + + else if (CurrentCount>=5)//and the 'else' bit. + + myOscOutput=mySwitchableOsc.sinewave(CurrentCount*50);//one osc object can produce whichever waveform you want. + + + output[0]=myOscOutput*myCurrentVolume;//left speaker } - diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate index ec304f1..eb5ae8d 100644 Binary files a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate and b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate differ -- cgit v1.3 From 5be3472f0f61d2e479f42759fed6fafd2a0e739a Mon Sep 17 00:00:00 2001 From: mick grierson Date: Tue, 22 Sep 2015 09:21:43 +0100 Subject: more work for kadenze mooc --- libs/maxiSynths.cpp | 534 +++ libs/maxiSynths.h | 187 + libs/maxim.h | 1 - main.cpp | 46 +- maximilian.cpp | 526 ++ maximilian.h | 169 +- maximilianTest.xcodeproj/project.pbxproj | 4 +- .../UserInterfaceState.xcuserstate | Bin 60691 -> 63022 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 56216 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 33060 bytes maximilian_examples/1.TestTone.cpp | 18 +- maximilian_examples/10.Filters.cpp | 1 + maximilian_examples/16.Replicant.cpp | 70 +- maximilian_examples/2.TwoTones.cpp | 3 +- maximilian_examples/3.AM1.cpp | 3 +- maximilian_examples/4.AM2.cpp | 1 + maximilian_examples/5.FM1.cpp | 3 +- maximilian_examples/6.FM2.cpp | 3 +- maximilian_examples/7.Counting.cpp | 33 - maximilian_examples/7.Counting1.cpp | 33 + maximilian_examples/8.Counting2.cpp | 41 +- maximilian_examples/8.Counting3.cpp | 28 + maximilian_examples/8.Counting4.cpp | 28 + maximilian_examples/9.Envelopes.cpp | 1 + maximilian_examples/arrays.cpp | 60 + .../OSX/emptyExample/Makefile | 13 + .../OSX/emptyExample/Project.xcconfig | 17 + .../Contents/Frameworks/GLUT.framework/GLUT | Bin 0 -> 603504 bytes .../Frameworks/GLUT.framework/Headers/copy.h | 18 + .../Frameworks/GLUT.framework/Headers/extrude.h | 96 + .../Frameworks/GLUT.framework/Headers/glsmap.h | 137 + .../Frameworks/GLUT.framework/Headers/glsmapint.h | 102 + .../Frameworks/GLUT.framework/Headers/glut.h | 648 +++ .../Frameworks/GLUT.framework/Headers/glutbitmap.h | 30 + .../Frameworks/GLUT.framework/Headers/glutf90.h | 90 + .../Frameworks/GLUT.framework/Headers/glutstroke.h | 42 + .../Frameworks/GLUT.framework/Headers/gutil.h | 89 + .../Frameworks/GLUT.framework/Headers/intersect.h | 391 ++ .../Frameworks/GLUT.framework/Headers/port.h | 298 ++ .../Frameworks/GLUT.framework/Headers/rot.h | 98 + .../Frameworks/GLUT.framework/Headers/segment.h | 98 + .../Frameworks/GLUT.framework/Headers/tube.h | 203 + .../Frameworks/GLUT.framework/Headers/tube_gc.h | 78 + .../Frameworks/GLUT.framework/Headers/vvector.h | 1339 ++++++ .../GLUT.framework/Resources/Caution.tiff | Bin 0 -> 18804 bytes .../Resources/English.lproj/GLUT.nib/classes.nib | 55 + .../Resources/English.lproj/GLUT.nib/info.nib | 25 + .../Resources/English.lproj/GLUT.nib/objects.nib | Bin 0 -> 3908 bytes .../English.lproj/GLUTClipboard.nib/classes.nib | 13 + .../English.lproj/GLUTClipboard.nib/info.nib | 12 + .../English.lproj/GLUTClipboard.nib/objects.nib | Bin 0 -> 1652 bytes .../English.lproj/GLUTPreferences.nib/classes.nib | 73 + .../English.lproj/GLUTPreferences.nib/info.nib | 16 + .../English.lproj/GLUTPreferences.nib/objects.nib | Bin 0 -> 17418 bytes .../Resources/English.lproj/GLUTUI.strings | Bin 0 -> 3594 bytes .../Resources/English.lproj/InfoPlist.strings | Bin 0 -> 268 bytes .../Frameworks/GLUT.framework/Resources/Info.plist | 24 + .../GLUT.framework/Resources/blankCursor.tiff | Bin 0 -> 260 bytes .../GLUT.framework/Resources/bottomCursor.tiff | Bin 0 -> 374 bytes .../GLUT.framework/Resources/bottomleftCursor.tiff | Bin 0 -> 386 bytes .../Resources/bottomrightCursor.tiff | Bin 0 -> 386 bytes .../GLUT.framework/Resources/crossCursor.tiff | Bin 0 -> 380 bytes .../GLUT.framework/Resources/cycleCursor.tiff | Bin 0 -> 410 bytes .../GLUT.framework/Resources/destroyCursor.tiff | Bin 0 -> 414 bytes .../GLUT.framework/Resources/fingerCursor.tiff | Bin 0 -> 674 bytes .../GLUT.framework/Resources/helpCursor.tiff | Bin 0 -> 322 bytes .../GLUT.framework/Resources/leftCursor.tiff | Bin 0 -> 384 bytes .../GLUT.framework/Resources/leftRightCursor.tiff | Bin 0 -> 400 bytes .../GLUT.framework/Resources/rightArrowCursor.tiff | Bin 0 -> 344 bytes .../GLUT.framework/Resources/rightCursor.tiff | Bin 0 -> 384 bytes .../GLUT.framework/Resources/sprayCursor.tiff | Bin 0 -> 404 bytes .../GLUT.framework/Resources/topCursor.tiff | Bin 0 -> 374 bytes .../GLUT.framework/Resources/topleftCursor.tiff | Bin 0 -> 386 bytes .../GLUT.framework/Resources/toprightCursor.tiff | Bin 0 -> 392 bytes .../GLUT.framework/Resources/upDownCursor.tiff | Bin 0 -> 388 bytes .../GLUT.framework/Resources/waitCursor.tiff | Bin 0 -> 818 bytes .../Frameworks/GLUT.framework/Versions/A/GLUT | Bin 0 -> 603504 bytes .../GLUT.framework/Versions/A/Headers/copy.h | 18 + .../GLUT.framework/Versions/A/Headers/extrude.h | 96 + .../GLUT.framework/Versions/A/Headers/glsmap.h | 137 + .../GLUT.framework/Versions/A/Headers/glsmapint.h | 102 + .../GLUT.framework/Versions/A/Headers/glut.h | 648 +++ .../GLUT.framework/Versions/A/Headers/glutbitmap.h | 30 + .../GLUT.framework/Versions/A/Headers/glutf90.h | 90 + .../GLUT.framework/Versions/A/Headers/glutstroke.h | 42 + .../GLUT.framework/Versions/A/Headers/gutil.h | 89 + .../GLUT.framework/Versions/A/Headers/intersect.h | 391 ++ .../GLUT.framework/Versions/A/Headers/port.h | 298 ++ .../GLUT.framework/Versions/A/Headers/rot.h | 98 + .../GLUT.framework/Versions/A/Headers/segment.h | 98 + .../GLUT.framework/Versions/A/Headers/tube.h | 203 + .../GLUT.framework/Versions/A/Headers/tube_gc.h | 78 + .../GLUT.framework/Versions/A/Headers/vvector.h | 1339 ++++++ .../Versions/A/Resources/Caution.tiff | Bin 0 -> 18804 bytes .../A/Resources/English.lproj/GLUT.nib/classes.nib | 55 + .../A/Resources/English.lproj/GLUT.nib/info.nib | 25 + .../A/Resources/English.lproj/GLUT.nib/objects.nib | Bin 0 -> 3908 bytes .../English.lproj/GLUTClipboard.nib/classes.nib | 13 + .../English.lproj/GLUTClipboard.nib/info.nib | 12 + .../English.lproj/GLUTClipboard.nib/objects.nib | Bin 0 -> 1652 bytes .../English.lproj/GLUTPreferences.nib/classes.nib | 73 + .../English.lproj/GLUTPreferences.nib/info.nib | 16 + .../English.lproj/GLUTPreferences.nib/objects.nib | Bin 0 -> 17418 bytes .../A/Resources/English.lproj/GLUTUI.strings | Bin 0 -> 3594 bytes .../A/Resources/English.lproj/InfoPlist.strings | Bin 0 -> 268 bytes .../GLUT.framework/Versions/A/Resources/Info.plist | 24 + .../Versions/A/Resources/blankCursor.tiff | Bin 0 -> 260 bytes .../Versions/A/Resources/bottomCursor.tiff | Bin 0 -> 374 bytes .../Versions/A/Resources/bottomleftCursor.tiff | Bin 0 -> 386 bytes .../Versions/A/Resources/bottomrightCursor.tiff | Bin 0 -> 386 bytes .../Versions/A/Resources/crossCursor.tiff | Bin 0 -> 380 bytes .../Versions/A/Resources/cycleCursor.tiff | Bin 0 -> 410 bytes .../Versions/A/Resources/destroyCursor.tiff | Bin 0 -> 414 bytes .../Versions/A/Resources/fingerCursor.tiff | Bin 0 -> 674 bytes .../Versions/A/Resources/helpCursor.tiff | Bin 0 -> 322 bytes .../Versions/A/Resources/leftCursor.tiff | Bin 0 -> 384 bytes .../Versions/A/Resources/leftRightCursor.tiff | Bin 0 -> 400 bytes .../Versions/A/Resources/rightArrowCursor.tiff | Bin 0 -> 344 bytes .../Versions/A/Resources/rightCursor.tiff | Bin 0 -> 384 bytes .../Versions/A/Resources/sprayCursor.tiff | Bin 0 -> 404 bytes .../Versions/A/Resources/topCursor.tiff | Bin 0 -> 374 bytes .../Versions/A/Resources/topleftCursor.tiff | Bin 0 -> 386 bytes .../Versions/A/Resources/toprightCursor.tiff | Bin 0 -> 392 bytes .../Versions/A/Resources/upDownCursor.tiff | Bin 0 -> 388 bytes .../Versions/A/Resources/waitCursor.tiff | Bin 0 -> 818 bytes .../GLUT.framework/Versions/Current/GLUT | Bin 0 -> 603504 bytes .../GLUT.framework/Versions/Current/Headers/copy.h | 18 + .../Versions/Current/Headers/extrude.h | 96 + .../Versions/Current/Headers/glsmap.h | 137 + .../Versions/Current/Headers/glsmapint.h | 102 + .../GLUT.framework/Versions/Current/Headers/glut.h | 648 +++ .../Versions/Current/Headers/glutbitmap.h | 30 + .../Versions/Current/Headers/glutf90.h | 90 + .../Versions/Current/Headers/glutstroke.h | 42 + .../Versions/Current/Headers/gutil.h | 89 + .../Versions/Current/Headers/intersect.h | 391 ++ .../GLUT.framework/Versions/Current/Headers/port.h | 298 ++ .../GLUT.framework/Versions/Current/Headers/rot.h | 98 + .../Versions/Current/Headers/segment.h | 98 + .../GLUT.framework/Versions/Current/Headers/tube.h | 203 + .../Versions/Current/Headers/tube_gc.h | 78 + .../Versions/Current/Headers/vvector.h | 1339 ++++++ .../Versions/Current/Resources/Caution.tiff | Bin 0 -> 18804 bytes .../Resources/English.lproj/GLUT.nib/classes.nib | 55 + .../Resources/English.lproj/GLUT.nib/info.nib | 25 + .../Resources/English.lproj/GLUT.nib/objects.nib | Bin 0 -> 3908 bytes .../English.lproj/GLUTClipboard.nib/classes.nib | 13 + .../English.lproj/GLUTClipboard.nib/info.nib | 12 + .../English.lproj/GLUTClipboard.nib/objects.nib | Bin 0 -> 1652 bytes .../English.lproj/GLUTPreferences.nib/classes.nib | 73 + .../English.lproj/GLUTPreferences.nib/info.nib | 16 + .../English.lproj/GLUTPreferences.nib/objects.nib | Bin 0 -> 17418 bytes .../Current/Resources/English.lproj/GLUTUI.strings | Bin 0 -> 3594 bytes .../Resources/English.lproj/InfoPlist.strings | Bin 0 -> 268 bytes .../Versions/Current/Resources/Info.plist | 24 + .../Versions/Current/Resources/blankCursor.tiff | Bin 0 -> 260 bytes .../Versions/Current/Resources/bottomCursor.tiff | Bin 0 -> 374 bytes .../Current/Resources/bottomleftCursor.tiff | Bin 0 -> 386 bytes .../Current/Resources/bottomrightCursor.tiff | Bin 0 -> 386 bytes .../Versions/Current/Resources/crossCursor.tiff | Bin 0 -> 380 bytes .../Versions/Current/Resources/cycleCursor.tiff | Bin 0 -> 410 bytes .../Versions/Current/Resources/destroyCursor.tiff | Bin 0 -> 414 bytes .../Versions/Current/Resources/fingerCursor.tiff | Bin 0 -> 674 bytes .../Versions/Current/Resources/helpCursor.tiff | Bin 0 -> 322 bytes .../Versions/Current/Resources/leftCursor.tiff | Bin 0 -> 384 bytes .../Current/Resources/leftRightCursor.tiff | Bin 0 -> 400 bytes .../Current/Resources/rightArrowCursor.tiff | Bin 0 -> 344 bytes .../Versions/Current/Resources/rightCursor.tiff | Bin 0 -> 384 bytes .../Versions/Current/Resources/sprayCursor.tiff | Bin 0 -> 404 bytes .../Versions/Current/Resources/topCursor.tiff | Bin 0 -> 374 bytes .../Versions/Current/Resources/topleftCursor.tiff | Bin 0 -> 386 bytes .../Versions/Current/Resources/toprightCursor.tiff | Bin 0 -> 392 bytes .../Versions/Current/Resources/upDownCursor.tiff | Bin 0 -> 388 bytes .../Versions/Current/Resources/waitCursor.tiff | Bin 0 -> 818 bytes .../bin/emptyExampleDebug.app/Contents/Info.plist | 38 + .../Contents/MacOS/emptyExampleDebug | Bin 0 -> 7927072 bytes .../Contents/MacOS/libfmodex.dylib | Bin 0 -> 1956044 bytes .../bin/emptyExampleDebug.app/Contents/PkgInfo | 1 + .../Contents/Resources/icon-debug.icns | Bin 0 -> 762563 bytes .../OSX/emptyExample/config.make | 142 + .../emptyExample.xcodeproj/project.pbxproj | 644 +++ .../UserInterfaceState.xcuserstate | Bin 0 -> 10905 bytes .../xcschemes/emptyExample Debug.xcscheme | 86 + .../xcschemes/emptyExample Release.xcscheme | 86 + .../xcschemes/xcschememanagement.plist | 14 + .../OSX/emptyExample/ofxMaxim/install.xml | 37 + .../OSX/emptyExample/ofxMaxim/libs/fft.cpp | 584 +++ .../OSX/emptyExample/ofxMaxim/libs/fft.h | 79 + .../OSX/emptyExample/ofxMaxim/libs/maxiAtoms.cpp | 219 + .../OSX/emptyExample/ofxMaxim/libs/maxiAtoms.h | 91 + .../OSX/emptyExample/ofxMaxim/libs/maxiBark.cpp | 10 + .../OSX/emptyExample/ofxMaxim/libs/maxiBark.h | 133 + .../OSX/emptyExample/ofxMaxim/libs/maxiFFT.cpp | 290 ++ .../OSX/emptyExample/ofxMaxim/libs/maxiFFT.h | 128 + .../OSX/emptyExample/ofxMaxim/libs/maxiGrains.cpp | 6 + .../OSX/emptyExample/ofxMaxim/libs/maxiGrains.h | 467 ++ .../OSX/emptyExample/ofxMaxim/libs/maxiMFCC.cpp | 79 + .../OSX/emptyExample/ofxMaxim/libs/maxiMFCC.h | 205 + .../OSX/emptyExample/ofxMaxim/libs/maximilian.cpp | 1342 ++++++ .../OSX/emptyExample/ofxMaxim/libs/maximilian.h | 623 +++ .../OSX/emptyExample/ofxMaxim/libs/sineTable.h | 15 + .../OSX/emptyExample/ofxMaxim/libs/stb_vorbis.c | 5042 ++++++++++++++++++++ .../OSX/emptyExample/ofxMaxim/libs/stb_vorbis.h | 338 ++ .../OSX/emptyExample/ofxMaxim/src/ofxMaxim.h | 119 + .../OSX/emptyExample/openFrameworks-Info.plist | 22 + .../OSX/emptyExample/src/main.cpp | 14 + .../OSX/emptyExample/src/ofApp.cpp | 61 + .../OSX/emptyExample/src/ofApp.h | 23 + player.cpp | 2 - 209 files changed, 24544 insertions(+), 144 deletions(-) create mode 100644 libs/maxiSynths.cpp create mode 100644 libs/maxiSynths.h create mode 100644 maximilianTest_10.8.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 maximilianTest_10.8.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100755 maximilian_examples/7.Counting.cpp create mode 100755 maximilian_examples/7.Counting1.cpp create mode 100755 maximilian_examples/8.Counting3.cpp create mode 100755 maximilian_examples/8.Counting4.cpp create mode 100644 maximilian_examples/arrays.cpp create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/Makefile create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/Project.xcconfig create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/GLUT create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/copy.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/extrude.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glsmap.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glsmapint.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glut.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutbitmap.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutf90.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutstroke.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/gutil.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/intersect.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/port.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/rot.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/segment.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/tube.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/tube_gc.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/vvector.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/Caution.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUT.nib/classes.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUT.nib/info.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUT.nib/objects.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/classes.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/info.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/objects.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/classes.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/info.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/objects.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTUI.strings create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/InfoPlist.strings create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/Info.plist create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/blankCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomleftCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomrightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/crossCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/cycleCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/destroyCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/fingerCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/helpCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/leftCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/leftRightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/rightArrowCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/rightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/sprayCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/topCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/topleftCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/toprightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/upDownCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/waitCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/GLUT create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/copy.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/extrude.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmap.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmapint.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glut.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutbitmap.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutf90.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutstroke.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/gutil.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/intersect.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/port.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/rot.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/segment.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube_gc.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/vvector.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/Caution.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUT.nib/classes.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUT.nib/info.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUT.nib/objects.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/classes.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/info.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/objects.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/classes.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/info.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/objects.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTUI.strings create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/InfoPlist.strings create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/Info.plist create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/blankCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomleftCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomrightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/crossCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/cycleCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/destroyCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/fingerCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/helpCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftRightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightArrowCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/sprayCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topleftCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/toprightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/upDownCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/waitCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/GLUT create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/copy.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/extrude.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glsmap.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glsmapint.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glut.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutbitmap.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutf90.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutstroke.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/gutil.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/intersect.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/port.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/rot.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/segment.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/tube.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/tube_gc.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/vvector.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/Caution.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUT.nib/classes.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUT.nib/info.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUT.nib/objects.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/classes.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/info.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/objects.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/classes.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/info.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/objects.nib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTUI.strings create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/Info.plist create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/blankCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomleftCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomrightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/crossCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/cycleCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/destroyCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/fingerCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/helpCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/leftCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/leftRightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/rightArrowCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/rightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/sprayCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/topCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/topleftCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/toprightCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/upDownCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/waitCursor.tiff create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Info.plist create mode 100755 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/MacOS/emptyExampleDebug create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/MacOS/libfmodex.dylib create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/PkgInfo create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Resources/icon-debug.icns create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/config.make create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/project.pbxproj create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcshareddata/xcschemes/emptyExample Debug.xcscheme create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcshareddata/xcschemes/emptyExample Release.xcscheme create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcuserdata/michaelgrierson.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/install.xml create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/fft.cpp create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/fft.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiAtoms.cpp create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiAtoms.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiBark.cpp create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiBark.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiFFT.cpp create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiFFT.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiGrains.cpp create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiGrains.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiMFCC.cpp create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiMFCC.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maximilian.cpp create mode 100755 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maximilian.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/sineTable.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/stb_vorbis.c create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/stb_vorbis.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/src/ofxMaxim.h create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/openFrameworks-Info.plist create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/main.cpp create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/ofApp.cpp create mode 100644 ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/ofApp.h (limited to 'maximilianTest.xcodeproj/project.xcworkspace') diff --git a/libs/maxiSynths.cpp b/libs/maxiSynths.cpp new file mode 100644 index 0000000..cd32a53 --- /dev/null +++ b/libs/maxiSynths.cpp @@ -0,0 +1,534 @@ +// +// maxiSynths.cpp +// granular +// +// Created by Michael Grierson on 16/08/2015. +// +// + +double pitchRatios[256]= {0.0006517771980725,0.0006905338959768,0.0007315951515920, 0.0007750981021672, 0.0008211878011934, 0.0008700182079338, 0.0009217521874234, 0.0009765623835847, 0.0010346318595111, 0.0010961542138830, 0.0011613349197432, 0.0012303915573284, 0.0013035543961450, 0.0013810677919537, 0.0014631903031841, 0.0015501962043345, 0.0016423756023869, 0.0017400364158675, 0.0018435043748468, 0.0019531247671694, 0.0020692637190223, 0.0021923084277660, 0.0023226698394865, 0.0024607831146568, 0.0026071087922901, 0.0027621355839074, 0.0029263808391988, 0.0031003924086690, 0.0032847514376044, 0.0034800728317350, 0.0036870087496936, 0.0039062497671694, 0.0041385274380445, 0.0043846168555319, 0.0046453396789730, 0.0049215662293136, 0.0052142175845802, 0.0055242711678147, 0.0058527616783977, 0.0062007848173380, 0.0065695028752089, 0.0069601456634700, 0.0073740174993873, 0.0078124995343387, 0.0082770548760891, 0.0087692337110639, 0.0092906802892685, 0.0098431324586272, 0.0104284351691604, 0.0110485423356295, 0.0117055233567953, 0.0124015696346760, 0.0131390057504177, 0.0139202913269401, 0.0147480349987745, 0.0156249990686774, 0.0165541097521782, 0.0175384692847729, 0.0185813605785370, 0.0196862649172544, 0.0208568722009659, 0.0220970865339041, 0.0234110467135906, 0.0248031392693520, 0.0262780115008354, 0.0278405826538801, 0.0294960699975491, 0.0312499981373549, 0.0331082195043564, 0.0350769385695457, 0.0371627211570740, 0.0393725298345089, 0.0417137444019318, 0.0441941730678082, 0.0468220934271812, 0.0496062822639942, 0.0525560230016708, 0.0556811690330505, 0.0589921437203884, 0.0624999962747097, 0.0662164390087128, 0.0701538771390915, 0.0743254423141479, 0.0787450596690178, 0.0834274888038635, 0.0883883461356163, 0.0936441868543625, 0.0992125645279884, 0.1051120460033417, 0.1113623380661011, 0.1179842874407768, 0.1249999925494194, 0.1324328780174255, 0.1403077542781830, 0.1486508846282959, 0.1574901193380356, 0.1668549776077271, 0.1767766922712326, 0.1872883737087250, 0.1984251290559769, 0.2102240920066833, 0.2227246761322021, 0.2359685748815536, 0.2500000000000000, 0.2648657560348511, 0.2806155085563660, 0.2973017692565918, 0.3149802684783936, 0.3337099552154541, 0.3535533845424652, 0.3745767772197723, 0.3968502581119537, 0.4204482138156891, 0.4454493522644043, 0.4719371497631073, 0.5000000000000000, 0.5297315716743469, 0.5612310171127319, 0.5946035385131836, 0.6299605369567871, 0.6674199104309082, 0.7071067690849304, 0.7491535544395447, 0.7937005162239075, 0.8408964276313782, 0.8908987045288086, 0.9438742995262146, 1.0000000000000000, 1.0594631433486938, 1.1224620342254639, 1.1892070770263672, 1.2599210739135742, 1.3348398208618164, 1.4142135381698608, 1.4983071088790894, 1.5874010324478149, 1.6817928552627563, 1.7817974090576172, 1.8877485990524292, 2.0000000000000000, 2.1189262866973877, 2.2449240684509277, 2.3784141540527344, 2.5198421478271484, 2.6696796417236328, 2.8284270763397217, 2.9966142177581787, 3.1748020648956299, 3.3635857105255127, 3.5635950565338135, 3.7754974365234375, 4.0000000000000000, 4.2378525733947754, 4.4898481369018555, 4.7568287849426270, 5.0396842956542969, 5.3393597602844238, 5.6568546295166016, 5.9932284355163574, 6.3496046066284180, 6.7271714210510254, 7.1271901130676270, 7.5509948730468750, 8.0000000000000000, 8.4757051467895508, 8.9796962738037109, 9.5136575698852539, 10.0793685913085938, 10.6787195205688477, 11.3137092590332031, 11.9864568710327148, 12.6992092132568359, 13.4543428421020508, 14.2543802261352539, 15.1019897460937500, 16.0000000000000000, 16.9514102935791016, 17.9593944549560547, 19.0273151397705078, 20.1587371826171875, 21.3574390411376953, 22.6274185180664062, 23.9729137420654297, 25.3984184265136719, 26.9086875915527344, 28.5087604522705078, 30.2039794921875000, 32.0000000000000000, 33.9028205871582031, 35.9187889099121094, 38.0546302795410156, 40.3174743652343750, 42.7148780822753906, 45.2548370361328125, 47.9458274841308594, 50.7968368530273438, 53.8173751831054688, 57.0175209045410156, 60.4079589843750000, 64.0000076293945312, 67.8056411743164062, 71.8375778198242188, 76.1092605590820312, 80.6349563598632812, 85.4297561645507812, 90.5096740722656250, 95.8916625976562500, 101.5936737060546875, 107.6347503662109375, 114.0350418090820312, 120.8159179687500000, 128.0000152587890625, 135.6112823486328125, 143.6751556396484375, 152.2185211181640625, 161.2699127197265625, 170.8595123291015625, 181.0193481445312500, 191.7833251953125000, 203.1873474121093750, 215.2695007324218750, 228.0700836181640625, 241.6318511962890625, 256.0000305175781250, 271.2225646972656250, 287.3503112792968750, 304.4370422363281250, 322.5398254394531250, 341.7190246582031250, 362.0386962890625000, 383.5666503906250000, 406.3746948242187500, 430.5390014648437500, 456.1401977539062500, 483.2637023925781250, 512.0000610351562500, 542.4451293945312500, 574.7006225585937500, 608.8740844726562500, 645.0796508789062500, 683.4380493164062500, 724.0773925781250000, 767.1333007812500000, 812.7494506835937500, 861.0780029296875000, 912.2803955078125000, 966.5274047851562500, 1024.0001220703125000, 1084.8903808593750000, 1149.4012451171875000, 1217.7481689453125000, 1290.1593017578125000, 1366.8762207031250000, 1448.1549072265625000, 1534.2666015625000000, 1625.4989013671875000}; + +#include "maxiSynths.h" + +maxiKick::maxiKick(){ + + maxiKick::envelope.setAttack(0); + maxiKick::setPitch(200); + maxiKick::envelope.setDecay(1); + maxiKick::envelope.setSustain(1); + maxiKick::envelope.setRelease(500); + maxiKick::envelope.holdtime=1; + maxiKick::envelope.trigger=0; + +}; + +double maxiKick::play(){ + + envOut=envelope.adsr(1.,envelope.trigger); + + if (inverse) { + + envOut=fabs(1-envOut); + + } + + output=kick.sinewave(pitch*envOut)*envOut; + + if (envelope.trigger==1) { + envelope.trigger=0; + } + + if (useDistortion) { + + output=distort.fastAtanDist(output, distortion); + } + + if (useFilter) { + + output=filter.lores(output, cutoff, resonance); + + } + + if (useLimiter) { + + if (output*gain > 1) { + + return 1.; + + } else if (output*gain < -1) { + + return -1.; + + } else { + + return output*gain; + + } + + + + } else { + + return output*gain; + + } +}; + +void maxiKick::setRelease(double release) { + + envelope.setRelease(release); + +} + +void maxiKick::setPitch(double newPitch) { + + pitch=newPitch; + +} + +void maxiKick::trigger() { + + envelope.trigger=1; + +} + +maxiSnare::maxiSnare(){ + + maxiSnare::envelope.setAttack(0); + maxiSnare::setPitch(800); + maxiSnare::envelope.setDecay(20); + maxiSnare::envelope.setSustain(0.05); + maxiSnare::envelope.setRelease(300); + maxiSnare::envelope.holdtime=1; + maxiSnare::envelope.trigger=0; + +}; + +double maxiSnare::play(){ + + envOut=envelope.adsr(1.,envelope.trigger); + + if (inverse) { + + envOut=fabs(1-envOut); + + } + + output=(tone.triangle(pitch*(0.1+(envOut*0.85)))+noise.noise())*envOut; + + if (envelope.trigger==1) { + envelope.trigger=0; + } + + if (useDistortion) { + + output=distort.fastAtanDist(output, distortion); + } + + if (useFilter) { + + output=filter.lores(output, cutoff, resonance); + + } + + if (useLimiter) { + + if (output*gain > 1) { + + return 1.; + + } else if (output*gain < -1) { + + return -1.; + + } else { + + return output*gain; + + } + + + + } else { + + return output*gain; + + } + +}; + +void maxiSnare::setRelease(double release) { + + envelope.setRelease(release); + +} + +void maxiSnare::setPitch(double newPitch) { + + pitch=newPitch; + +} + +void maxiSnare::trigger() { + + envelope.trigger=1; + +} + +maxiHats::maxiHats(){ + + maxiHats::envelope.setAttack(0); + maxiHats::setPitch(12000); + maxiHats::envelope.setDecay(20); + maxiHats::envelope.setSustain(0.1); + maxiHats::envelope.setRelease(300); + maxiHats::envelope.holdtime=1; + maxiHats::envelope.trigger=0; + maxiHats::filter.setCutoff(8000); + maxiHats::filter.setResonance(1); + +}; + +double maxiHats::play(){ + + envOut=envelope.adsr(1.,envelope.trigger); + + if (inverse) { + + envOut=fabs(1-envOut); + + } + + output=(tone.sinebuf(pitch)+noise.noise())*envOut; + + if (envelope.trigger==1) { + envelope.trigger=0; + } + + if (useDistortion) { + + output=distort.fastAtanDist(output, distortion); + } + + if (useFilter) { + + output=filter.play(output, 0., 0., 1., 0.); + + } + + if (useLimiter) { + + if (output*gain > 1) { + + return 1.; + + } else if (output*gain < -1) { + + return -1.; + + } else { + + return output*gain; + + } + + + + } else { + + return output*gain; + + } + +}; + +void maxiHats::setRelease(double release) { + + envelope.setRelease(release); + +} + +void maxiHats::setPitch(double newPitch) { + + pitch=newPitch; + +} + +void maxiHats::trigger() { + + envelope.trigger=1; + +} + + + +maxiClock::maxiClock() { + + playHead=0; + currentCount=0; + lastCount=0; + bpm=120; + ticks=1; + maxiClock::setTempo(bpm); + +} + + +void maxiClock::ticker() { + + tick=false; + currentCount=floor(timer.phasor(bps));//this sets up a metronome that ticks n times a second + + if (lastCount!=currentCount) {//if we have a new timer int this sample, + + tick=true; + playHead++;//iterate the playhead + + } + +} + + +void maxiClock::setTempo(double bpmIn) { + + bpm=bpmIn; + bps=(bpm/60.)*ticks; +} + + +void maxiClock::setTicksPerBeat(int ticksPerBeat) { + + ticks=ticksPerBeat; + maxiClock::setTempo(bpm); + +} + +maxiSampler::maxiSampler() { + + maxiSampler::voices=32; + maxiSampler::currentVoice=0; + + + for (int i=0;i0.) { + outputs[i]=samples[i].play(pitchRatios[(int)pitch[i]+originalPitch]*((1./samples[i].length)*maxiSettings::sampleRate),0,samples[i].length)*envOut[i]; + output+=outputs[i]/voices; + + if (envelopes[i].trigger==1 && !sustain) { + envelopes[i].trigger=0; + + } + + } + + } return output; + +} + +void maxiSampler::load(string inFile, bool setall) { + + if (setall) { + for (int i=0;i +#include +#include +#include +#include +#include "math.h" +#include "maximilian.h" + + +class maxiKick { + +public: + maxiKick(); + double play(); + void setPitch(double pitch); + void setRelease(double releaseD); + void trigger(); + double pitch; + double output = 0 ; + double outputD =0 ; + double envOut; + bool useDistortion = false; + bool useLimiter = false; + bool useFilter = false; + double distortion = 0; + bool inverse = false; + double cutoff; + double resonance; + double gain = 1; + maxiOsc kick; + maxiEnv envelope; + maxiDistortion distort; + maxiFilter filter; +}; + +class maxiSnare { +public: + maxiSnare(); + double play(); + void setPitch(double pitch); + void setRelease(double releaseD); + void trigger(); + double pitch; + double output = 0 ; + double outputD = 0 ; + double envOut; + bool useDistortion = false; + bool useLimiter = false; + bool useFilter = true; + double distortion = 0; + bool inverse = false; + double cutoff; + double resonance; + double gain = 1; + maxiOsc tone; + maxiOsc noise; + maxiEnv envelope; + maxiDistortion distort; + maxiFilter filter; + + + +}; + +class maxiHats { + +public: + maxiHats(); + double play(); + void setPitch(double pitch); + void setRelease(double releaseD); + void trigger(); + double pitch; + double output = 0; + double outputD = 0; + double envOut; + bool useDistortion = false; + bool useLimiter = false; + bool useFilter = false; + double distortion = 0; + bool inverse = false; + double cutoff; + double resonance; + double gain = 1; + maxiOsc tone; + maxiOsc noise; + maxiEnv envelope; + maxiDistortion distort; + maxiSVF filter; + + +}; + + +class maxiSynth { + + + +}; + + +class granularSynth { + + + +}; + + +class maxiSampler { + +public: + maxiSampler(); + double play(); + void setPitch(double pitch, bool setall=false); + void midiNoteOn(double pitch, double velocity, bool setall=false); + void midiNoteOff(double pitch, double velocity, bool setall=false); + void setAttack(double attackD,bool setall=true); + void setDecay(double decayD,bool setall=true); + void setSustain(double sustainD,bool setall=true); + void setRelease(double releaseD,bool setall=true); + void setPosition(double positionD,bool setall=true); + void load(string inFile,bool setall=true); + void setNumVoices(int numVoices); + double position; + void trigger(); + double pitch[32]; + int originalPitch=67; + double outputs[32]; + double outputD = 0; + double envOut[32]; + double envOutGain[32]; + double output; + bool useDistortion = false; + bool useLimiter = false; + bool useFilter = false; + double distortion = 0; + bool inverse = false; + double cutoff; + double resonance; + double gain = 1; + int voices; + int currentVoice=0; + convert mtof; + maxiOsc LFO1; + maxiOsc LFO2; + maxiOsc LFO3; + maxiOsc LFO4; + maxiSample samples[32]; + maxiEnv envelopes[32]; + maxiDistortion distort; + maxiSVF filters[32]; + bool sustain = true; + + +}; + +class maxiClock { +public: + maxiClock(); + void ticker(); + void setTempo(double bpm); + void setTicksPerBeat(int ticksPerBeat); + maxiOsc timer; + int currentCount; + int lastCount; + int playHead; + double bps; + double bpm; + int ticks; + bool tick; + +}; + + + +#endif \ No newline at end of file diff --git a/libs/maxim.h b/libs/maxim.h index 3b0ee06..3bfcbda 100644 --- a/libs/maxim.h +++ b/libs/maxim.h @@ -41,7 +41,6 @@ #include "maxiAtoms.h" - //typedef maxiSignal vector; // //class maxiBase { diff --git a/main.cpp b/main.cpp index 2cf74f6..ea51186 100755 --- a/main.cpp +++ b/main.cpp @@ -1,51 +1,21 @@ -//Envelopes allow you to shape the sound. The basic idea is that a sound has the following shape -// Attack: This is how long it takes to fade up to maximum volume -// Decay: This is how long it takes to reach the sustain level. -// Sustain: This is the sustain level -// Release: This is how long it takes to fade out. - #include "maximilian.h" -maxiOsc myCounter,mySwitchableOsc;// -int CurrentCount;// -double myOscOutput,myCurrentVolume;// -maxiEnv myEnvelope; +maxiSample mySample; void setup() {//some inits - //Timing is in ms - - myEnvelope.setAttack(0); - myEnvelope.setDecay(1); // Needs to be at least 1 - myEnvelope.setSustain(1); - myEnvelope.setRelease(1000); - + mySample.load("/Users/michaelgrierson/Documents/workspace/coursera2/full-stack-mooc-5/code/week2/music_machine_2015/public/bassline32bit.wav"); + cout << mySample.myBitsPerSample; + } void play(double *output) { - //notice that we feed in a value of 1. to create an envelope shape we can apply later. - myCurrentVolume=myEnvelope.adsr(1.,myEnvelope.trigger); - - CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. - - // You'll notice that these 'if' statements don't require curly braces "{}". - // This is because there is only one outcome if the statement is true. - - if (CurrentCount==1) myEnvelope.trigger=1; //trigger the envelope - else myEnvelope.trigger=0;//release the envelope to make it fade out only if it's been triggered - - if (CurrentCount<5) - - myOscOutput=mySwitchableOsc.sawn(CurrentCount*100); - - else if (CurrentCount>=5)//and the 'else' bit. - - myOscOutput=mySwitchableOsc.sinewave(CurrentCount*50);//one osc object can produce whichever waveform you want. - - - output[0]=myOscOutput*myCurrentVolume;//left speaker + output[0]=mySample.play(2); + output[1]=output[0]; + } + diff --git a/maximilian.cpp b/maximilian.cpp index 1a79129..adbb97d 100644 --- a/maximilian.cpp +++ b/maximilian.cpp @@ -1480,3 +1480,529 @@ template<> void maxiEnvelopeFollower::setRelease(double releaseMS) { release = pow( 0.01, 1.0 / ( releaseMS * maxiSettings::sampleRate * 0.001 ) ); } +double pitchRatios[256]= {0.0006517771980725,0.0006905338959768,0.0007315951515920, 0.0007750981021672, 0.0008211878011934, 0.0008700182079338, 0.0009217521874234, 0.0009765623835847, 0.0010346318595111, 0.0010961542138830, 0.0011613349197432, 0.0012303915573284, 0.0013035543961450, 0.0013810677919537, 0.0014631903031841, 0.0015501962043345, 0.0016423756023869, 0.0017400364158675, 0.0018435043748468, 0.0019531247671694, 0.0020692637190223, 0.0021923084277660, 0.0023226698394865, 0.0024607831146568, 0.0026071087922901, 0.0027621355839074, 0.0029263808391988, 0.0031003924086690, 0.0032847514376044, 0.0034800728317350, 0.0036870087496936, 0.0039062497671694, 0.0041385274380445, 0.0043846168555319, 0.0046453396789730, 0.0049215662293136, 0.0052142175845802, 0.0055242711678147, 0.0058527616783977, 0.0062007848173380, 0.0065695028752089, 0.0069601456634700, 0.0073740174993873, 0.0078124995343387, 0.0082770548760891, 0.0087692337110639, 0.0092906802892685, 0.0098431324586272, 0.0104284351691604, 0.0110485423356295, 0.0117055233567953, 0.0124015696346760, 0.0131390057504177, 0.0139202913269401, 0.0147480349987745, 0.0156249990686774, 0.0165541097521782, 0.0175384692847729, 0.0185813605785370, 0.0196862649172544, 0.0208568722009659, 0.0220970865339041, 0.0234110467135906, 0.0248031392693520, 0.0262780115008354, 0.0278405826538801, 0.0294960699975491, 0.0312499981373549, 0.0331082195043564, 0.0350769385695457, 0.0371627211570740, 0.0393725298345089, 0.0417137444019318, 0.0441941730678082, 0.0468220934271812, 0.0496062822639942, 0.0525560230016708, 0.0556811690330505, 0.0589921437203884, 0.0624999962747097, 0.0662164390087128, 0.0701538771390915, 0.0743254423141479, 0.0787450596690178, 0.0834274888038635, 0.0883883461356163, 0.0936441868543625, 0.0992125645279884, 0.1051120460033417, 0.1113623380661011, 0.1179842874407768, 0.1249999925494194, 0.1324328780174255, 0.1403077542781830, 0.1486508846282959, 0.1574901193380356, 0.1668549776077271, 0.1767766922712326, 0.1872883737087250, 0.1984251290559769, 0.2102240920066833, 0.2227246761322021, 0.2359685748815536, 0.2500000000000000, 0.2648657560348511, 0.2806155085563660, 0.2973017692565918, 0.3149802684783936, 0.3337099552154541, 0.3535533845424652, 0.3745767772197723, 0.3968502581119537, 0.4204482138156891, 0.4454493522644043, 0.4719371497631073, 0.5000000000000000, 0.5297315716743469, 0.5612310171127319, 0.5946035385131836, 0.6299605369567871, 0.6674199104309082, 0.7071067690849304, 0.7491535544395447, 0.7937005162239075, 0.8408964276313782, 0.8908987045288086, 0.9438742995262146, 1.0000000000000000, 1.0594631433486938, 1.1224620342254639, 1.1892070770263672, 1.2599210739135742, 1.3348398208618164, 1.4142135381698608, 1.4983071088790894, 1.5874010324478149, 1.6817928552627563, 1.7817974090576172, 1.8877485990524292, 2.0000000000000000, 2.1189262866973877, 2.2449240684509277, 2.3784141540527344, 2.5198421478271484, 2.6696796417236328, 2.8284270763397217, 2.9966142177581787, 3.1748020648956299, 3.3635857105255127, 3.5635950565338135, 3.7754974365234375, 4.0000000000000000, 4.2378525733947754, 4.4898481369018555, 4.7568287849426270, 5.0396842956542969, 5.3393597602844238, 5.6568546295166016, 5.9932284355163574, 6.3496046066284180, 6.7271714210510254, 7.1271901130676270, 7.5509948730468750, 8.0000000000000000, 8.4757051467895508, 8.9796962738037109, 9.5136575698852539, 10.0793685913085938, 10.6787195205688477, 11.3137092590332031, 11.9864568710327148, 12.6992092132568359, 13.4543428421020508, 14.2543802261352539, 15.1019897460937500, 16.0000000000000000, 16.9514102935791016, 17.9593944549560547, 19.0273151397705078, 20.1587371826171875, 21.3574390411376953, 22.6274185180664062, 23.9729137420654297, 25.3984184265136719, 26.9086875915527344, 28.5087604522705078, 30.2039794921875000, 32.0000000000000000, 33.9028205871582031, 35.9187889099121094, 38.0546302795410156, 40.3174743652343750, 42.7148780822753906, 45.2548370361328125, 47.9458274841308594, 50.7968368530273438, 53.8173751831054688, 57.0175209045410156, 60.4079589843750000, 64.0000076293945312, 67.8056411743164062, 71.8375778198242188, 76.1092605590820312, 80.6349563598632812, 85.4297561645507812, 90.5096740722656250, 95.8916625976562500, 101.5936737060546875, 107.6347503662109375, 114.0350418090820312, 120.8159179687500000, 128.0000152587890625, 135.6112823486328125, 143.6751556396484375, 152.2185211181640625, 161.2699127197265625, 170.8595123291015625, 181.0193481445312500, 191.7833251953125000, 203.1873474121093750, 215.2695007324218750, 228.0700836181640625, 241.6318511962890625, 256.0000305175781250, 271.2225646972656250, 287.3503112792968750, 304.4370422363281250, 322.5398254394531250, 341.7190246582031250, 362.0386962890625000, 383.5666503906250000, 406.3746948242187500, 430.5390014648437500, 456.1401977539062500, 483.2637023925781250, 512.0000610351562500, 542.4451293945312500, 574.7006225585937500, 608.8740844726562500, 645.0796508789062500, 683.4380493164062500, 724.0773925781250000, 767.1333007812500000, 812.7494506835937500, 861.0780029296875000, 912.2803955078125000, 966.5274047851562500, 1024.0001220703125000, 1084.8903808593750000, 1149.4012451171875000, 1217.7481689453125000, 1290.1593017578125000, 1366.8762207031250000, 1448.1549072265625000, 1534.2666015625000000, 1625.4989013671875000}; + +maxiKick::maxiKick(){ + + maxiKick::envelope.setAttack(0); + maxiKick::setPitch(200); + maxiKick::envelope.setDecay(1); + maxiKick::envelope.setSustain(1); + maxiKick::envelope.setRelease(500); + maxiKick::envelope.holdtime=1; + maxiKick::envelope.trigger=0; + +}; + +double maxiKick::play(){ + + envOut=envelope.adsr(1.,envelope.trigger); + + if (inverse) { + + envOut=fabs(1-envOut); + + } + + output=kick.sinewave(pitch*envOut)*envOut; + + if (envelope.trigger==1) { + envelope.trigger=0; + } + + if (useDistortion) { + + output=distort.fastAtanDist(output, distortion); + } + + if (useFilter) { + + output=filter.lores(output, cutoff, resonance); + + } + + if (useLimiter) { + + if (output*gain > 1) { + + return 1.; + + } else if (output*gain < -1) { + + return -1.; + + } else { + + return output*gain; + + } + + + + } else { + + return output*gain; + + } +}; + +void maxiKick::setRelease(double release) { + + envelope.setRelease(release); + +} + +void maxiKick::setPitch(double newPitch) { + + pitch=newPitch; + +} + +void maxiKick::trigger() { + + envelope.trigger=1; + +} + +maxiSnare::maxiSnare(){ + + maxiSnare::envelope.setAttack(0); + maxiSnare::setPitch(800); + maxiSnare::envelope.setDecay(20); + maxiSnare::envelope.setSustain(0.05); + maxiSnare::envelope.setRelease(300); + maxiSnare::envelope.holdtime=1; + maxiSnare::envelope.trigger=0; + +}; + +double maxiSnare::play(){ + + envOut=envelope.adsr(1.,envelope.trigger); + + if (inverse) { + + envOut=fabs(1-envOut); + + } + + output=(tone.triangle(pitch*(0.1+(envOut*0.85)))+noise.noise())*envOut; + + if (envelope.trigger==1) { + envelope.trigger=0; + } + + if (useDistortion) { + + output=distort.fastAtanDist(output, distortion); + } + + if (useFilter) { + + output=filter.lores(output, cutoff, resonance); + + } + + if (useLimiter) { + + if (output*gain > 1) { + + return 1.; + + } else if (output*gain < -1) { + + return -1.; + + } else { + + return output*gain; + + } + + + + } else { + + return output*gain; + + } + +}; + +void maxiSnare::setRelease(double release) { + + envelope.setRelease(release); + +} + +void maxiSnare::setPitch(double newPitch) { + + pitch=newPitch; + +} + +void maxiSnare::trigger() { + + envelope.trigger=1; + +} + +maxiHats::maxiHats(){ + + maxiHats::envelope.setAttack(0); + maxiHats::setPitch(12000); + maxiHats::envelope.setDecay(20); + maxiHats::envelope.setSustain(0.1); + maxiHats::envelope.setRelease(300); + maxiHats::envelope.holdtime=1; + maxiHats::envelope.trigger=0; + maxiHats::filter.setCutoff(8000); + maxiHats::filter.setResonance(1); + +}; + +double maxiHats::play(){ + + envOut=envelope.adsr(1.,envelope.trigger); + + if (inverse) { + + envOut=fabs(1-envOut); + + } + + output=(tone.sinebuf(pitch)+noise.noise())*envOut; + + if (envelope.trigger==1) { + envelope.trigger=0; + } + + if (useDistortion) { + + output=distort.fastAtanDist(output, distortion); + } + + if (useFilter) { + + output=filter.play(output, 0., 0., 1., 0.); + + } + + if (useLimiter) { + + if (output*gain > 1) { + + return 1.; + + } else if (output*gain < -1) { + + return -1.; + + } else { + + return output*gain; + + } + + + + } else { + + return output*gain; + + } + +}; + +void maxiHats::setRelease(double release) { + + envelope.setRelease(release); + +} + +void maxiHats::setPitch(double newPitch) { + + pitch=newPitch; + +} + +void maxiHats::trigger() { + + envelope.trigger=1; + +} + + + +maxiClock::maxiClock() { + + playHead=0; + currentCount=0; + lastCount=0; + bpm=120; + ticks=1; + maxiClock::setTempo(bpm); + +} + + +void maxiClock::ticker() { + + tick=false; + currentCount=floor(timer.phasor(bps));//this sets up a metronome that ticks n times a second + + if (lastCount!=currentCount) {//if we have a new timer int this sample, + + tick=true; + playHead++;//iterate the playhead + + } + +} + + +void maxiClock::setTempo(double bpmIn) { + + bpm=bpmIn; + bps=(bpm/60.)*ticks; +} + + +void maxiClock::setTicksPerBeat(int ticksPerBeat) { + + ticks=ticksPerBeat; + maxiClock::setTempo(bpm); + +} + +maxiSampler::maxiSampler() { + + maxiSampler::voices=32; + maxiSampler::currentVoice=0; + + + for (int i=0;i0.) { + outputs[i]=samples[i].play(pitchRatios[(int)pitch[i]+originalPitch]*((1./samples[i].length)*maxiSettings::sampleRate),0,samples[i].length)*envOut[i]; + output+=outputs[i]/voices; + + if (envelopes[i].trigger==1 && !sustain) { + envelopes[i].trigger=0; + + } + + } + + } return output; + +} + +void maxiSampler::load(string inFile, bool setall) { + + if (setall) { + for (int i=0;i #include #include "math.h" - #ifdef _WIN32 //|| _WIN64 #include #endif @@ -212,7 +211,6 @@ private: short myFormat; int myByteRate; short myBlockAlign; - short myBitsPerSample; double position, recordPosition; double speed; double output; @@ -225,7 +223,8 @@ public: long length; void getLength(); void setLength(unsigned long numSamples); - + short myBitsPerSample; + // char* myData; short* temp; @@ -633,5 +632,169 @@ private: }; +class maxiKick { + +public: + maxiKick(); + double play(); + void setPitch(double pitch); + void setRelease(double releaseD); + void trigger(); + double pitch; + double output = 0 ; + double outputD =0 ; + double envOut; + bool useDistortion = false; + bool useLimiter = false; + bool useFilter = false; + double distortion = 0; + bool inverse = false; + double cutoff; + double resonance; + double gain = 1; + maxiOsc kick; + maxiEnv envelope; + maxiDistortion distort; + maxiFilter filter; +}; + +class maxiSnare { +public: + maxiSnare(); + double play(); + void setPitch(double pitch); + void setRelease(double releaseD); + void trigger(); + double pitch; + double output = 0 ; + double outputD = 0 ; + double envOut; + bool useDistortion = false; + bool useLimiter = false; + bool useFilter = true; + double distortion = 0; + bool inverse = false; + double cutoff; + double resonance; + double gain = 1; + maxiOsc tone; + maxiOsc noise; + maxiEnv envelope; + maxiDistortion distort; + maxiFilter filter; + + + +}; + +class maxiHats { + +public: + maxiHats(); + double play(); + void setPitch(double pitch); + void setRelease(double releaseD); + void trigger(); + double pitch; + double output = 0; + double outputD = 0; + double envOut; + bool useDistortion = false; + bool useLimiter = false; + bool useFilter = false; + double distortion = 0; + bool inverse = false; + double cutoff; + double resonance; + double gain = 1; + maxiOsc tone; + maxiOsc noise; + maxiEnv envelope; + maxiDistortion distort; + maxiSVF filter; + + +}; + + +class maxiSynth { + + + +}; + + +class granularSynth { + + + +}; + + +class maxiSampler { + +public: + maxiSampler(); + double play(); + void setPitch(double pitch, bool setall=false); + void midiNoteOn(double pitch, double velocity, bool setall=false); + void midiNoteOff(double pitch, double velocity, bool setall=false); + void setAttack(double attackD,bool setall=true); + void setDecay(double decayD,bool setall=true); + void setSustain(double sustainD,bool setall=true); + void setRelease(double releaseD,bool setall=true); + void setPosition(double positionD,bool setall=true); + void load(string inFile,bool setall=true); + void setNumVoices(int numVoices); + double position; + void trigger(); + double pitch[32]; + int originalPitch=67; + double outputs[32]; + double outputD = 0; + double envOut[32]; + double envOutGain[32]; + double output; + bool useDistortion = false; + bool useLimiter = false; + bool useFilter = false; + double distortion = 0; + bool inverse = false; + double cutoff; + double resonance; + double gain = 1; + int voices; + int currentVoice=0; + convert mtof; + maxiOsc LFO1; + maxiOsc LFO2; + maxiOsc LFO3; + maxiOsc LFO4; + maxiSample samples[32]; + maxiEnv envelopes[32]; + maxiDistortion distort; + maxiSVF filters[32]; + bool sustain = true; + + +}; + +class maxiClock { +public: + maxiClock(); + void ticker(); + void setTempo(double bpm); + void setTicksPerBeat(int ticksPerBeat); + maxiOsc timer; + int currentCount; + int lastCount; + int playHead; + double bps; + double bpm; + int ticks; + bool tick; + +}; + #endif diff --git a/maximilianTest.xcodeproj/project.pbxproj b/maximilianTest.xcodeproj/project.pbxproj index 4283e89..b398724 100755 --- a/maximilianTest.xcodeproj/project.pbxproj +++ b/maximilianTest.xcodeproj/project.pbxproj @@ -197,7 +197,7 @@ isa = PBXProject; attributes = { }; - buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "maximilianTest_10.8" */; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "maximilianTest" */; compatibilityVersion = "Xcode 3.1"; developmentRegion = English; hasScannedForEncodings = 1; @@ -335,7 +335,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "maximilianTest_10.8" */ = { + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "maximilianTest" */ = { isa = XCConfigurationList; buildConfigurations = ( 1DEB923608733DC60010E9CD /* Debug */, diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate index eb5ae8d..c3b8e23 100644 Binary files a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate and b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/maximilianTest_10.8.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest_10.8.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..ae40604 Binary files /dev/null and b/maximilianTest_10.8.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/maximilianTest_10.8.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest_10.8.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..948bac4 Binary files /dev/null and b/maximilianTest_10.8.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/maximilian_examples/1.TestTone.cpp b/maximilian_examples/1.TestTone.cpp index b8da07c..c27941c 100755 --- a/maximilian_examples/1.TestTone.cpp +++ b/maximilian_examples/1.TestTone.cpp @@ -1,19 +1,15 @@ -//This example shows how to create one of the most fundamental building blocks in computer audio. The sine wave. -//The sine wave is an oscillator - it oscillates back and forth between two values in a particular shape. - - #include "maximilian.h" -maxiOsc mySine;//let's create an oscillator and give it a name. - +//This shows how the fundamental building block of digital audio - the sine wave. +// +maxiOsc mySine;//One oscillator - can be called anything. Can be any of the available waveforms. void setup() {//some inits //nothing to go here this time } -void play(double *output) {//this is where the magic happens. Very slow magic. - - //output[0] is the left output. output[1] is the right output - output[0]=mySine.sinewave(440);//simple as that! +void play(double *output) { + + output[0]=mySine.sinewave(440); + output[1]=output[0]; } - diff --git a/maximilian_examples/10.Filters.cpp b/maximilian_examples/10.Filters.cpp index 41e779a..2c1240c 100755 --- a/maximilian_examples/10.Filters.cpp +++ b/maximilian_examples/10.Filters.cpp @@ -44,5 +44,6 @@ void play(double *output) { myFilteredOutput=myFilter.lores(myOscOutput,myCurrentVolume*1000,10); output[0]=myFilteredOutput;//left speaker + output[1]=output[0]; } diff --git a/maximilian_examples/16.Replicant.cpp b/maximilian_examples/16.Replicant.cpp index ae166bd..7684902 100644 --- a/maximilian_examples/16.Replicant.cpp +++ b/maximilian_examples/16.Replicant.cpp @@ -1,6 +1,6 @@ #include "maximilian.h" -//Bizarelly, this sounds a little bit like Kraftwerk's 'Metropolis', although it isn't. Funny that. +//Bizarelly, this sounds a little bit like Kraftwerk's 'Metropolis', although it isn't. Funny that. maxiOsc sound,bass,timer,mod,lead,lead2,leadmod;//here are the synth bits maxiEnv envelope, leadenvelope;//some envelopes @@ -21,41 +21,41 @@ int leadLinePitch[15]={69,67,65,64,67,66,64,62,65,64,62,57,55,60,57}; void setup() {//some inits - + } void play(double *output) {//this is where the magic happens. Very slow magic. - - currentCount=(int)timer.phasor(9);//this sets up a metronome that ticks every so often - - if (lastCount!=currentCount) {//if we have a new timer int this sample, play the sound - trigger=1;//play the arpeggiator line - trigger2=leadLineTrigger[playHead%256];//play the lead line - if (trigger2==1) {//if we are going to play a note - leadPitch=mtof.mtof(leadLinePitch[newnote]);//get the next pitch val - newnote++;//and iterate - if (newnote>14) { - newnote=0;//make sure we don't go over the edge of the array - } - } - currentPitch=mtof.mtof(pitch[(playHead%4)]+chord[currentChord%8]);//write the frequency val into currentPitch - playHead++;//iterate the playhead - if (playHead%32==0) {//wrap every 4 bars - currentChord++;//change the chord - } - //cout << "tick\n";//the clock ticks - lastCount=0;//set lastCount to 0 - } - - bassout=filter2.lores(envelope.adsr(bass.saw(currentPitch*0.5)+sound.pulse(currentPitch*0.5,mod.phasor(1)),1,0.9995, 0.25, 0.9995, 1, trigger),9250,2);//new, simple ADSR. - leadout=filter.lores(leadenvelope.ar(lead2.saw(leadPitch*4)+lead.pulse(leadPitch+(leadmod.sinebuf(1.9)*1.5), 0.6), 0.00005, 0.999975, 50000, trigger2),5900,10);//leadline - - delayout=(leadout+(delay.dl(leadout, 14000, 0.8)*0.5))/2;//add some delay - - if(trigger!=0)trigger=0;//set the trigger to off if you want it to trigger immediately next time. - - - output[0]=(bassout+delayout)/2;//sum output - output[1]=(bassout+delayout)/2; - + + currentCount=(int)timer.phasor(9);//this sets up a metronome that ticks every so often + + if (lastCount!=currentCount) {//if we have a new timer int this sample, play the sound + trigger=1;//play the arpeggiator line + trigger2=leadLineTrigger[playHead%256];//play the lead line + if (trigger2==1) {//if we are going to play a note + leadPitch=mtof.mtof(leadLinePitch[newnote]);//get the next pitch val + newnote++;//and iterate + if (newnote>14) { + newnote=0;//make sure we don't go over the edge of the array + } + } + currentPitch=mtof.mtof(pitch[(playHead%4)]+chord[currentChord%8]);//write the frequency val into currentPitch + playHead++;//iterate the playhead + if (playHead%32==0) {//wrap every 4 bars + currentChord++;//change the chord + } + //cout << "tick\n";//the clock ticks + lastCount=0;//set lastCount to 0 + } + + bassout=filter2.lores(envelope.adsr(bass.saw(currentPitch*0.5)+sound.pulse(currentPitch*0.5,mod.phasor(1)),1,0.9995, 0.25, 0.9995, 1, trigger),9250,2);//new, simple ADSR. + leadout=filter.lores(leadenvelope.ar(lead2.saw(leadPitch*4)+lead.pulse(leadPitch+(leadmod.sinebuf(1.9)*1.5), 0.6), 0.00005, 0.999975, 50000, trigger2),5900,10);//leadline + + delayout=(leadout+(delay.dl(leadout, 14000, 0.8)*0.5))/2;//add some delay + + if(trigger!=0)trigger=0;//set the trigger to off if you want it to trigger immediately next time. + + + output[0]=(bassout)/2;//sum output + output[1]=(bassout)/2; + } \ No newline at end of file diff --git a/maximilian_examples/2.TwoTones.cpp b/maximilian_examples/2.TwoTones.cpp index fb29288..2c94711 100755 --- a/maximilian_examples/2.TwoTones.cpp +++ b/maximilian_examples/2.TwoTones.cpp @@ -12,6 +12,7 @@ void play(double *output) {//this is where the magic happens. Very slow magic. //output[0] is the left output. output[1] is the right output output[0]=mySine.sinewave(440)+myOtherSine.sinewave(441);//these two sines will beat together. They're now a bit too loud though.. - + output[1]=output[0]; + } diff --git a/maximilian_examples/3.AM1.cpp b/maximilian_examples/3.AM1.cpp index 384a7f5..5d75942 100755 --- a/maximilian_examples/3.AM1.cpp +++ b/maximilian_examples/3.AM1.cpp @@ -17,5 +17,6 @@ void play(double *output) { // When you multiply something by -1, its phase is inverted but it retains its amplitude. // So you hear 2 waves per second, not 1, even though the frequency is 1. output[0]=mySine.sinewave(440)*myOtherSine.sinewave(1); - + output[1]=output[0]; + } diff --git a/maximilian_examples/4.AM2.cpp b/maximilian_examples/4.AM2.cpp index 7e80f38..2827a28 100755 --- a/maximilian_examples/4.AM2.cpp +++ b/maximilian_examples/4.AM2.cpp @@ -20,5 +20,6 @@ void play(double *output) { //So you hear two new waves, one going up, one going down. output[0]=mySine.sinewave(440)*myOtherSine.sinewave(myPhasor.phasor(0.01,0,440)); + output[1]=output[0]; } diff --git a/maximilian_examples/5.FM1.cpp b/maximilian_examples/5.FM1.cpp index 14f6593..d0ce736 100755 --- a/maximilian_examples/5.FM1.cpp +++ b/maximilian_examples/5.FM1.cpp @@ -31,4 +31,5 @@ void play(double *output) { } // In complex FM systems you can have lots of modulators stacked together in interesting ways, and theoretically this can make any sound. -// John Chowning is the guy you probably want to talk to about that. \ No newline at end of file +// John Chowning is the guy you probably want to talk to about that. +output[1]=output[0]; diff --git a/maximilian_examples/6.FM2.cpp b/maximilian_examples/6.FM2.cpp index d9eddf5..4c6ec8a 100755 --- a/maximilian_examples/6.FM2.cpp +++ b/maximilian_examples/6.FM2.cpp @@ -12,5 +12,6 @@ void setup() {//some inits void play(double *output) { output[0]=mySine.sinewave(myOtherSine.sinewave(myLastSine.sinewave(0.1)*30)*440);//awesome bassline - + output[1]=output[0]; + } diff --git a/maximilian_examples/7.Counting.cpp b/maximilian_examples/7.Counting.cpp deleted file mode 100755 index e620b3a..0000000 --- a/maximilian_examples/7.Counting.cpp +++ /dev/null @@ -1,33 +0,0 @@ -// This example shows how you can create a basic counter with a phasor. -// A phasor oscillator can create a ramp between any two values. -// It takes three inputs - frequency, start value and stop value. -// These are all double precision floats, so it's a continuous slide. -// If you write it into an integer, it will round it off for you. -// This creates a bunch of steps. - -#include "maximilian.h" - -maxiOsc myCounter,mySquare;//these oscillators will help us count and play sound -int CurrentCount;//we're going to put the current count in this variable so that we can use it more easily. - - -void setup() {//some inits - //nothing to go here this time -} - -void play(double *output) { - - // Here you can see that CurrentCount is an int. It's taking the continuous output of the phasor and convering it. - // You don't need to explicityly 'cast' (i.e. change) the value from a float to an int. - // It happens automagically in these cases. - - // Once every second, CurrentCount counts from 1 until it gets to 9, then resets itself. - // When it reaches 9 it resets, so the values you get are 1-8. - - CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. - - // If we multiply the output of CurrentCount by 100, we get 100,200,300,400,500,600,700,800 in that order. - // These become the frequency of the oscillator. - // In this case, the oscillator is an antialiased sawtooth wave. Yum. - output[0]=mySquare.sawn(CurrentCount*100); -} diff --git a/maximilian_examples/7.Counting1.cpp b/maximilian_examples/7.Counting1.cpp new file mode 100755 index 0000000..6bdfd85 --- /dev/null +++ b/maximilian_examples/7.Counting1.cpp @@ -0,0 +1,33 @@ + +#include "maximilian.h" + +maxiOsc mySine; // This is the oscillator we will use to generate the test tone +maxiClock myClock; // This will allow us to generate a clock signal and do things at specific times +double freq; // This is a variable that we will use to hold and set the current frequency of the oscillator + +void setup() { + + myClock.setTicksPerBeat(1);//This sets the number of ticks per beat + myClock.setTempo(120);// This sets the tempo in Beats Per Minute + freq=20; // Here we initialise the variable +} + +void play(double *output) { + + myClock.ticker(); // This makes the clock object count at the current samplerate + + //This is a 'conditional'. It does a test and then does something if the test is true + + if (myClock.tick) { // If there is an actual tick at this time, this will be true. + + freq+=100; // DO SOMETHING + + } // The curly braces close the conditional + + //output[0] is the left output. output[1] is the right output + + output[0]=mySine.sinewave(freq);//simple as that! + output[1]=output[0]; + +} + diff --git a/maximilian_examples/8.Counting2.cpp b/maximilian_examples/8.Counting2.cpp index ce016d0..05984c5 100755 --- a/maximilian_examples/8.Counting2.cpp +++ b/maximilian_examples/8.Counting2.cpp @@ -1,24 +1,35 @@ +// This example shows how you can create a basic counter with a phasor. +// A phasor oscillator can create a ramp between any two values. +// It takes three inputs - frequency, start value and stop value. +// These are all double precision floats, so it's a continuous slide. +// If you write it into an integer, it will round it off for you. +// This creates a bunch of steps. + #include "maximilian.h" -maxiOsc myCounter,mySwitchableOsc;//these oscillators will help us count and make sound. +maxiOsc myCounter,mySquare;//these oscillators will help us count and play sound int CurrentCount;//we're going to put the current count in this variable so that we can use it more easily. -double myOscOutput;//we're going to stick the output here to make it easier to mess with stuff. + void setup() {//some inits - //nothing to go here this time + //nothing to go here this time } void play(double *output) { - - CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. - - if (CurrentCount<5)//simple if statement - - myOscOutput=mySwitchableOsc.square(CurrentCount*100); - - else if (CurrentCount>=5)//and the 'else' bit. - - myOscOutput=mySwitchableOsc.sinewave(CurrentCount*50);//one osc object can produce whichever waveform you want. - - *output=myOscOutput;//point me at your speakers and fire. + + // Here you can see that CurrentCount is an int. It's taking the continuous output of the phasor and convering it. + // You don't need to explicityly 'cast' (i.e. change) the value from a float to an int. + // It happens automagically in these cases. + + // Once every second, CurrentCount counts from 1 until it gets to 9, then resets itself. + // When it reaches 9 it resets, so the values you get are 1-8. + + CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. + + // If we multiply the output of CurrentCount by 100, we get 100,200,300,400,500,600,700,800 in that order. + // These become the frequency of the oscillator. + // In this case, the oscillator is an antialiased sawtooth wave. Yum. + output[0]=mySquare.sawn(CurrentCount*100); + output[1]=output[0]; + } diff --git a/maximilian_examples/8.Counting3.cpp b/maximilian_examples/8.Counting3.cpp new file mode 100755 index 0000000..36adc01 --- /dev/null +++ b/maximilian_examples/8.Counting3.cpp @@ -0,0 +1,28 @@ +#include "maximilian.h" + +maxiOsc myCounter,mySwitchableOsc;//these oscillators will help us count and make sound. +int CurrentCount;//we're going to put the current count in this variable so that we can use it more easily. +double myOscOutput;//we're going to stick the output here to make it easier to mess with stuff. + +void setup() {//some inits + //nothing to go here this time +} + +void play(double *output) { + + CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value. + +// here we use a conditional to make something happen at a specific time. + + if (CurrentCount<5)//simple if statement + + myOscOutput=mySwitchableOsc.square(CurrentCount*100); + + else if (CurrentCount>=5)//and the 'else' bit. + + myOscOutput=mySwitchableOsc.sinewave(CurrentCount*50);//one osc object can produce whichever waveform you want. + + output[0]=myOscOutput; + output[1]=output[0]; + +} diff --git a/maximilian_examples/8.Counting4.cpp b/maximilian_examples/8.Counting4.cpp new file mode 100755 index 0000000..cecf548 --- /dev/null +++ b/maximilian_examples/8.Counting4.cpp @@ -0,0 +1,28 @@ +#include "maximilian.h" + +maxiOsc myCounter,mySwitchableOsc,another;//these oscillators will help us count and make sound. +int CurrentCount;//we're going to put the current count in this variable so that we can use it more easily. +double myOscOutput;//we're going to stick the output here to make it easier to mess with stuff. +int myArray[10]={100,200,300,400,300,200,100,240,640,360}; + +void setup() {//some inits + //nothing to go here this time +} + +void play(double *output) { + + CurrentCount=myCounter.phasor(1*((another.sawn(0.1)+1)/2), 1, 9);//phasor can take three arguments; frequency, start value and end value. + + if (CurrentCount<5) {//simple if statement + + myOscOutput=mySwitchableOsc.square(myArray[CurrentCount]); + } + + else if (CurrentCount>=5) {//and the 'else' bit. + + myOscOutput=mySwitchableOsc.sawn(myArray[CurrentCount]);//one osc object can produce whichever waveform you want. + } + output[0]=myOscOutput;//point me at your speakers and fire. + output[1]=output[0]; + +} diff --git a/maximilian_examples/9.Envelopes.cpp b/maximilian_examples/9.Envelopes.cpp index 2cf74f6..138fb0d 100755 --- a/maximilian_examples/9.Envelopes.cpp +++ b/maximilian_examples/9.Envelopes.cpp @@ -47,5 +47,6 @@ void play(double *output) { output[0]=myOscOutput*myCurrentVolume;//left speaker + output[1]=output[0]; } diff --git a/maximilian_examples/arrays.cpp b/maximilian_examples/arrays.cpp new file mode 100644 index 0000000..1badd9b --- /dev/null +++ b/maximilian_examples/arrays.cpp @@ -0,0 +1,60 @@ +// +// arrays.cpp +// +// +// Created by Michael Grierson on 14/09/2015. +// +// + +#include "maximilian.h" + +currentChord=0;//some other control variables +int pitch[8]={57,57,59,60};//the bassline for the arpeggio +int chord[8]={0,0,7,2,5,5,0,0};//the root chords for the arpeggio +float currentPitch,leadPitch;//the final pitch variables + +//here's the lead line trigger array, followed by the pitches +int leadLineTrigger[256]={1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +int leadLinePitch[15]={69,67,65,64,67,66,64,62,65,64,62,57,55,60,57}; + + + +void setup() {//some inits + +} + +void play(double *output) {//this is where the magic happens. Very slow magic. + + currentCount=(int)timer.phasor(9);//this sets up a metronome that ticks every so often + + if (lastCount!=currentCount) {//if we have a new timer int this sample, play the sound + trigger=1;//play the arpeggiator line + trigger2=leadLineTrigger[playHead%256];//play the lead line + if (trigger2==1) {//if we are going to play a note + leadPitch=mtof.mtof(leadLinePitch[newnote]);//get the next pitch val + newnote++;//and iterate + if (newnote>14) { + newnote=0;//make sure we don't go over the edge of the array + } + } + currentPitch=mtof.mtof(pitch[(playHead%4)]+chord[currentChord%8]);//write the frequency val into currentPitch + playHead++;//iterate the playhead + if (playHead%32==0) {//wrap every 4 bars + currentChord++;//change the chord + } + //cout << "tick\n";//the clock ticks + lastCount=0;//set lastCount to 0 + } + + bassout=filter2.lores(envelope.adsr(bass.saw(currentPitch*0.5)+sound.pulse(currentPitch*0.5,mod.phasor(1)),1,0.9995, 0.25, 0.9995, 1, trigger),9250,2);//new, simple ADSR. + leadout=filter.lores(leadenvelope.ar(lead2.saw(leadPitch*4)+lead.pulse(leadPitch+(leadmod.sinebuf(1.9)*1.5), 0.6), 0.00005, 0.999975, 50000, trigger2),5900,10);//leadline + + delayout=(leadout+(delay.dl(leadout, 14000, 0.8)*0.5))/2;//add some delay + + if(trigger!=0)trigger=0;//set the trigger to off if you want it to trigger immediately next time. + + + output[0]=(bassout+delayout)/2;//sum output + output[1]=(bassout+delayout)/2; + +} \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/Makefile b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/Makefile new file mode 100644 index 0000000..7a7fe8b --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/Makefile @@ -0,0 +1,13 @@ +# Attempt to load a config.make file. +# If none is found, project defaults in config.project.make will be used. +ifneq ($(wildcard config.make),) + include config.make +endif + +# make sure the the OF_ROOT location is defined +ifndef OF_ROOT + OF_ROOT=../../.. +endif + +# call the project makefile! +include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/Project.xcconfig b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/Project.xcconfig new file mode 100644 index 0000000..c90f7b1 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/Project.xcconfig @@ -0,0 +1,17 @@ +//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. +//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED +OF_PATH = ../../.. + +//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE +#include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" + +//ICONS - NEW IN 0072 +ICON_NAME_DEBUG = icon-debug.icns +ICON_NAME_RELEASE = icon.icns +ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ + +//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: +//ICON_FILE_PATH = bin/data/ + +OTHER_LDFLAGS = $(OF_CORE_LIBS) +HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/GLUT b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/GLUT new file mode 100644 index 0000000..babc6b1 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/GLUT differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/copy.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/copy.h new file mode 100644 index 0000000..a5116e2 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/copy.h @@ -0,0 +1,18 @@ + +/* + * + * Written By Linas Vepstas November 1991 + */ + + +#define COPY_THREE_WORDS(A,B) { \ + struct three_words { int a, b, c, }; \ + *(struct three_words *) (A) = *(struct three_words *) (B); \ +} + +#define COPY_FOUR_WORDS(A,B) { \ + struct four_words { int a, b, c, d, }; \ + *(struct four_words *) (A) = *(struct four_words *) (B); \ +} + +/* ============================================================= */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/extrude.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/extrude.h new file mode 100644 index 0000000..658699e --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/extrude.h @@ -0,0 +1,96 @@ + +/* + * extrude.h + * + * FUNCTION: + * prototypes for privately used subroutines for the tubing library + * + * HISTORY: + * Linas Vepstas 1991 + */ + +#include "port.h" /* for gleDouble */ + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +/* ============================================================ */ +/* + * Provides choice of calling subroutine, vs. invoking macro. + * Basically, inlines the source, or not. + * Trades performance for executable size. + */ + +#define INLINE_INTERSECT +#ifdef INLINE_INTERSECT +#define INNERSECT(sect,p,n,v1,v2) { INTERSECT(sect,p,n,v1,v2); } +#else +#define INNERSECT(sect,p,n,v1,v2) intersect(sect,p,n,v1,v2) +#endif /* INLINE_INTERSECT */ + +/* ============================================================ */ +/* The folowing defines give a kludgy way of accessing the qmesh primitive */ + +/* +#define bgntmesh _emu_qmesh_bgnqmesh +#define endtmesh _emu_qmesh_endqmesh +#define c3f _emu_qmesh_c3f +#define n3f _emu_qmesh_n3f +#define v3f _emu_qmesh_v3f +*/ + +/* ============================================================ */ + +extern void up_sanity_check (gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3]); /* polyline */ + + +extern void draw_raw_style_end_cap (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble zval, /* where to draw cap */ + int frontwards); /* front or back cap */ + +extern void draw_round_style_cap_callback (int iloop, + double cap[][3], + float face_color[3], + gleDouble cut_vector[3], + gleDouble bisect_vector[3], + double norms[][3], + int frontwards); + +extern void draw_angle_style_front_cap (int ncp, + gleDouble bi[3], + gleDouble point_array[][3]); + +extern void extrusion_raw_join (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2],/* 2D contour normal vecs */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline */ + float color_array[][3], /* color of polyline */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + + +extern void extrusion_round_or_cut_join (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2],/* 2D contour normal vecs */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline */ + float color_array[][3], /* color of polyline */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + + +extern void extrusion_angle_join (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2],/* 2D contour normal vecs */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline */ + float color_array[][3], /* color of polyline */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + +/* -------------------------- end of file -------------------------------- */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glsmap.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glsmap.h new file mode 100644 index 0000000..baf54a7 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glsmap.h @@ -0,0 +1,137 @@ +#ifndef __glsmap_h__ +#define __glsmap_h__ + +/* Copyright (c) Mark J. Kilgard, 1998. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#if defined(_WIN32) + +/* Try hard to avoid including to avoid name space pollution, + but Win32's needs APIENTRY and WINGDIAPI defined properly. */ +# if 0 +# define WIN32_LEAN_AND_MEAN +# include +# else + /* XXX This is from Win32's */ +# ifndef APIENTRY +# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) +# define APIENTRY __stdcall +# else +# define APIENTRY +# endif +# endif +# ifndef CALLBACK + /* XXX This is from Win32's */ +# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +# endif + /* XXX This is from Win32's and */ +# ifndef WINGDIAPI +# define WINGDIAPI __declspec(dllimport) +# endif + /* XXX This is from Win32's */ +# ifndef _WCHAR_T_DEFINED +typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +# endif +# endif + +#pragma warning (disable:4244) /* Disable bogus conversion warnings. */ +#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ + +#endif /* _WIN32 */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + SMAP_CLEAR_SMAP_TEXTURE = 0x1, + SMAP_GENERATE_VIEW_MIPMAPS = 0x2, + SMAP_GENERATE_SMAP_MIPMAPS = 0x4, + SMAP_GENERATE_MIPMAPS = 0x6 /* both of above */ +} SphereMapFlags; + +/* Cube view enumerants. */ +enum { + SMAP_FRONT = 0, + SMAP_TOP = 1, + SMAP_BOTTOM = 2, + SMAP_LEFT = 3, + SMAP_RIGHT = 4, + SMAP_BACK = 5 +}; + +typedef struct _SphereMap SphereMap; + +extern SphereMap *smapCreateSphereMap(SphereMap *shareSmap); +extern void smapDestroySphereMap(SphereMap *smap); + +extern void smapConfigureSphereMapMesh(SphereMap *smap, int steps, int rings, int edgeExtend); + +extern void smapSetSphereMapTexObj(SphereMap *smap, GLuint texobj); +extern void smapSetViewTexObj(SphereMap *smap, GLuint texobj); +extern void smapSetViewTexObjs(SphereMap *smap, GLuint texobjs[6]); +extern void smapGetSphereMapTexObj(SphereMap *smap, GLuint *texobj); +extern void smapGetViewTexObj(SphereMap *smap, GLuint *texobj); +extern void smapGetViewTexObjs(SphereMap *smap, GLuint texobjs[6]); + +extern void smapSetFlags(SphereMap *smap, SphereMapFlags flags); +extern void smapGetFlags(SphereMap *smap, SphereMapFlags *flags); + +extern void smapSetViewOrigin(SphereMap *smap, GLint x, GLint y); +extern void smapSetSphereMapOrigin(SphereMap *smap, GLint x, GLint y); +extern void smapGetViewOrigin(SphereMap *smap, GLint *x, GLint *y); +extern void smapGetSphereMapOrigin(SphereMap *smap, GLint *x, GLint *y); + +extern void smapSetEye(SphereMap *smap, GLfloat eyex, GLfloat eyey, GLfloat eyez); +extern void smapSetEyeVector(SphereMap *smap, GLfloat *eye); +extern void smapSetUp(SphereMap *smap, GLfloat upx, GLfloat upy, GLfloat upz); +extern void smapSetUpVector(SphereMap *smap, GLfloat *up); +extern void smapSetObject(SphereMap *smap, GLfloat objx, GLfloat objy, GLfloat objz); +extern void smapSetObjectVector(SphereMap *smap, GLfloat *obj); +extern void smapGetEye(SphereMap *smap, GLfloat *eyex, GLfloat *eyey, GLfloat *eyez); +extern void smapGetEyeVector(SphereMap *smap, GLfloat *eye); +extern void smapGetUp(SphereMap *smap, GLfloat *upx, GLfloat *upy, GLfloat *upz); +extern void smapGetUpVector(SphereMap *smap, GLfloat *up); +extern void smapGetObject(SphereMap *smap, GLfloat *objx, GLfloat *objy, GLfloat *objz); +extern void smapGetObjectVector(SphereMap *smap, GLfloat *obj); + +extern void smapSetNearFar(SphereMap *smap, GLfloat viewNear, GLfloat viewFar); +extern void smapGetNearFar(SphereMap *smap, GLfloat *viewNear, GLfloat *viewFar); + +extern void smapSetSphereMapTexDim(SphereMap *smap, GLsizei texdim); +extern void smapSetViewTexDim(SphereMap *smap, GLsizei texdim); +extern void smapGetSphereMapTexDim(SphereMap *smap, GLsizei *texdim); +extern void smapGetViewTexDim(SphereMap *smap, GLsizei *texdim); + +extern void smapSetContextData(SphereMap *smap, void *context); +extern void smapGetContextData(SphereMap *smap, void **context); + +extern void smapSetPositionLightsFunc(SphereMap *smap, void (*positionLights)(int view, void *context)); +extern void smapSetDrawViewFunc(SphereMap *smap, void (*drawView)(int view, void *context)); +extern void smapGetPositionLightsFunc(SphereMap *smap, void (**positionLights)(int view, void *context)); +extern void smapGetDrawViewFunc(SphereMap *smap, void (**drawView)(int view, void *context)); + +extern void smapGenViewTex(SphereMap *smap, int view); +extern void smapGenViewTexs(SphereMap *smap); +extern void smapGenSphereMapFromViewTexs(SphereMap *smap); +extern void smapGenSphereMap(SphereMap *smap); +extern void smapGenSphereMapWithOneViewTex(SphereMap *smap); + +extern int smapRvecToSt(float rvec[3], float st[2]); +extern void smapStToRvec(float *st, float *rvec); + +#ifdef __cplusplus +} + +#endif +#endif /* __glsmap_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glsmapint.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glsmapint.h new file mode 100644 index 0000000..3620e7d --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glsmapint.h @@ -0,0 +1,102 @@ +#ifndef __glsmapint_h__ +#define __glsmapint_h__ + +/* Copyright (c) Mark J. Kilgard, 1998. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#include "glsmap.h" + +enum { X = 0, Y = 1, Z = 2 }; + +#define INITFACE(mesh) \ + int steps = mesh->steps; \ + int sqsteps = mesh->steps * mesh->steps + +#define FACE(side,y,x) \ + mesh->face[(side)*sqsteps + (y)*steps + (x)] + +#define FACExy(side,i,j) \ + (&FACE(side,i,j).x) + +#define FACEst(side,i,j) \ + (&FACE(side,i,j).s) + +#define INITBACK(mesh) \ + int allrings = mesh->rings + mesh->edgeExtend; \ + int ringedspokes = allrings * mesh->steps + +#define BACK(edge,ring,spoke) \ + mesh->back[(edge)*ringedspokes + (ring)*mesh->steps + (spoke)] + +#define BACKxy(edge,ring,spoke) \ + (&BACK(edge,ring,spoke).x) + +#define BACKst(edge,ring,spoke) \ + (&BACK(edge,ring,spoke).s) + +typedef struct _STXY { + GLfloat s, t; + GLfloat x, y; +} STXY; + +typedef struct _SphereMapMesh { + + int refcnt; + + int steps; + int rings; + int edgeExtend; + + STXY *face; + STXY *back; + +} SphereMapMesh; + +struct _SphereMap { + + /* Shared sphere map mesh vertex data. */ + SphereMapMesh *mesh; + + /* Texture object ids. */ + GLuint smapTexObj; + GLuint viewTexObjs[6]; + GLuint viewTexObj; + + /* Flags */ + SphereMapFlags flags; + + /* Texture dimensions must be a power of two. */ + int viewTexDim; /* view texture dimension */ + int smapTexDim; /* sphere map texture dimension */ + + /* Viewport origins for view and sphere map rendering. */ + int viewOrigin[2]; + int smapOrigin[2]; + + /* Viewing vectors. */ + GLfloat eye[3]; + GLfloat up[3]; + GLfloat obj[3]; + + /* Projection parameters. */ + GLfloat viewNear; + GLfloat viewFar; + + /* Rendering callbacks. */ + void (*positionLights)(int view, void *context); + void (*drawView)(int view, void *context); + + /* Application specified callback data. */ + void *context; + +}; + +/* Library internal routines. */ +extern void __smapDrawSphereMapMeshSide(SphereMapMesh *mesh, int side); +extern void __smapDrawSphereMapMeshBack(SphereMapMesh *mesh); +extern void __smapValidateSphereMapMesh(SphereMapMesh *mesh); + +#endif /* __glsmapint_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glut.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glut.h new file mode 100644 index 0000000..cbc6ebe --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glut.h @@ -0,0 +1,648 @@ +#ifndef __glut_h__ +#define __glut_h__ + +/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998. */ + +/* This program is freely distributable without licensing fees and is + provided without guarantee or warrantee expressed or implied. This + program is -not- in the public domain. */ +//#define GLUT_OF_007_HACK + +#if defined(_WIN32) + +/* GLUT 3.7 now tries to avoid including + to avoid name space pollution, but Win32's + needs APIENTRY and WINGDIAPI defined properly. */ +# if 0 +# define WIN32_LEAN_AND_MEAN +# include +# else + /* XXX This is from Win32's */ +# ifndef APIENTRY +# define GLUT_APIENTRY_DEFINED +# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) +# define APIENTRY __stdcall +# else +# define APIENTRY +# endif +# endif + /* XXX This is from Win32's */ +# ifndef CALLBACK +# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +# endif + /* XXX This is from Win32's and */ +# ifndef WINGDIAPI +# define GLUT_WINGDIAPI_DEFINED +# define WINGDIAPI __declspec(dllimport) +# endif + /* XXX This is from Win32's */ +# ifndef _WCHAR_T_DEFINED +typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +# endif +# endif + +#pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */ +#pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */ +#pragma comment (lib, "glu32.lib") /* link with OpenGL Utility lib */ +#pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */ + +#pragma warning (disable:4244) /* Disable bogus conversion warnings. */ +#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ + +#endif + +#if defined(__APPLE__) || defined(MACOSX) +#include +#include +#include +#else +#include +#include +#endif + +/* define APIENTRY and CALLBACK to null string if we aren't on Win32 */ +#if !defined(_WIN32) +#define APIENTRY +#define GLUT_APIENTRY_DEFINED +#define CALLBACK +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + GLUT API revision history: + + GLUT_API_VERSION is updated to reflect incompatible GLUT + API changes (interface changes, semantic changes, deletions, + or additions). + + GLUT_API_VERSION=1 First public release of GLUT. 11/29/94 + + GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling, + extension. Supports new input devices like tablet, dial and button + box, and Spaceball. Easy to query OpenGL extensions. + + GLUT_API_VERSION=3 glutMenuStatus added. + + GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer, + glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic + video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc, + glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat, + glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!). + + GLUT_API_VERSION=5 glutGetProcAddress (added by BrianP) +**/ +#ifndef GLUT_API_VERSION /* allow this to be overriden */ +#define GLUT_API_VERSION 5 +#endif + +/** + GLUT implementation revision history: + + GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT + API revisions and implementation revisions (ie, bug fixes). + + GLUT_XLIB_IMPLEMENTATION=1 mjk's first public release of + GLUT Xlib-based implementation. 11/29/94 + + GLUT_XLIB_IMPLEMENTATION=2 mjk's second public release of + GLUT Xlib-based implementation providing GLUT version 2 + interfaces. + + GLUT_XLIB_IMPLEMENTATION=3 mjk's GLUT 2.2 images. 4/17/95 + + GLUT_XLIB_IMPLEMENTATION=4 mjk's GLUT 2.3 images. 6/?/95 + + GLUT_XLIB_IMPLEMENTATION=5 mjk's GLUT 3.0 images. 10/?/95 + + GLUT_XLIB_IMPLEMENTATION=7 mjk's GLUT 3.1+ with glutWarpPoitner. 7/24/96 + + GLUT_XLIB_IMPLEMENTATION=8 mjk's GLUT 3.1+ with glutWarpPoitner + and video resize. 1/3/97 + + GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines. + + GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release. + + GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling. + + GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 beta with GameGLUT support. + + GLUT_XLIB_IMPLEMENTATION=14 mjk's GLUT 3.7 beta with f90gl friend interface. + + GLUT_XLIB_IMPLEMENTATION=15 mjk's GLUT 3.7 beta sync'ed with Mesa +**/ +#ifndef GLUT_XLIB_IMPLEMENTATION /* Allow this to be overriden. */ +#define GLUT_XLIB_IMPLEMENTATION 15 +#endif + +/** + MacOS X GLUT implementation revision history: + + GLUT_MACOSX_IMPLEMENTATION is updated to reflect MacOS X + specific GLUT API revisions and implementation revisions + (ie, bug fixes). + + GLUT_MACOSX_IMPLEMENTATION=1 glutSurfaceTexture. + + GLUT_MACOSX_IMPLEMENTATION=2 glutWMCloseFunc, glutCheckLoop. + +**/ +#ifndef GLUT_MACOSX_IMPLEMENTATION /* Allow this to be overriden. */ +#define GLUT_MACOSX_IMPLEMENTATION 2 +#endif + +/* Display mode bit masks. */ +#define GLUT_RGB 0 +#define GLUT_RGBA GLUT_RGB +#define GLUT_INDEX 1 +#define GLUT_SINGLE 0 +#define GLUT_DOUBLE 2 +#define GLUT_ACCUM 4 +#define GLUT_ALPHA 8 +#define GLUT_DEPTH 16 +#define GLUT_STENCIL 32 +#if (GLUT_API_VERSION >= 2) +#define GLUT_MULTISAMPLE 128 +#define GLUT_STEREO 256 +#endif +#if (GLUT_API_VERSION >= 3) +#define GLUT_LUMINANCE 512 +#endif +#define GLUT_NO_RECOVERY 1024 + +/* Mouse buttons. */ +#define GLUT_LEFT_BUTTON 0 +#define GLUT_MIDDLE_BUTTON 1 +#define GLUT_RIGHT_BUTTON 2 + +/* Mouse button state. */ +#define GLUT_DOWN 0 +#define GLUT_UP 1 + +#if (GLUT_API_VERSION >= 2) +/* function keys */ +#define GLUT_KEY_F1 1 +#define GLUT_KEY_F2 2 +#define GLUT_KEY_F3 3 +#define GLUT_KEY_F4 4 +#define GLUT_KEY_F5 5 +#define GLUT_KEY_F6 6 +#define GLUT_KEY_F7 7 +#define GLUT_KEY_F8 8 +#define GLUT_KEY_F9 9 +#define GLUT_KEY_F10 10 +#define GLUT_KEY_F11 11 +#define GLUT_KEY_F12 12 +/* directional keys */ +#define GLUT_KEY_LEFT 100 +#define GLUT_KEY_UP 101 +#define GLUT_KEY_RIGHT 102 +#define GLUT_KEY_DOWN 103 +#define GLUT_KEY_PAGE_UP 104 +#define GLUT_KEY_PAGE_DOWN 105 +#define GLUT_KEY_HOME 106 +#define GLUT_KEY_END 107 +#define GLUT_KEY_INSERT 108 +#endif + +/* Entry/exit state. */ +#define GLUT_LEFT 0 +#define GLUT_ENTERED 1 + +/* Menu usage state. */ +#define GLUT_MENU_NOT_IN_USE 0 +#define GLUT_MENU_IN_USE 1 + +/* Visibility state. */ +#define GLUT_NOT_VISIBLE 0 +#define GLUT_VISIBLE 1 + +/* Window status state. */ +#define GLUT_HIDDEN 0 +#define GLUT_FULLY_RETAINED 1 +#define GLUT_PARTIALLY_RETAINED 2 +#define GLUT_FULLY_COVERED 3 + +/* Color index component selection values. */ +#define GLUT_RED 0 +#define GLUT_GREEN 1 +#define GLUT_BLUE 2 + +/* Layers for use. */ +#define GLUT_NORMAL 0 +#define GLUT_OVERLAY 1 + +#if defined(_WIN32) +/* Stroke font constants (use these in GLUT program). */ +#define GLUT_STROKE_ROMAN ((void*)0) +#define GLUT_STROKE_MONO_ROMAN ((void*)1) + +/* Bitmap font constants (use these in GLUT program). */ +#define GLUT_BITMAP_9_BY_15 ((void*)2) +#define GLUT_BITMAP_8_BY_13 ((void*)3) +#define GLUT_BITMAP_TIMES_ROMAN_10 ((void*)4) +#define GLUT_BITMAP_TIMES_ROMAN_24 ((void*)5) +#if (GLUT_API_VERSION >= 3) +#define GLUT_BITMAP_HELVETICA_10 ((void*)6) +#define GLUT_BITMAP_HELVETICA_12 ((void*)7) +#define GLUT_BITMAP_HELVETICA_18 ((void*)8) +#endif +#else +/* Stroke font opaque addresses (use constants instead in source code). */ +extern void *glutStrokeRoman; +extern void *glutStrokeMonoRoman; + +/* Stroke font constants (use these in GLUT program). */ +#define GLUT_STROKE_ROMAN (&glutStrokeRoman) +#define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman) + +/* Bitmap font opaque addresses (use constants instead in source code). */ +extern void *glutBitmap9By15; +extern void *glutBitmap8By13; +extern void *glutBitmapTimesRoman10; +extern void *glutBitmapTimesRoman24; +extern void *glutBitmapHelvetica10; +extern void *glutBitmapHelvetica12; +extern void *glutBitmapHelvetica18; + +/* Bitmap font constants (use these in GLUT program). */ +#define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15) +#define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13) +#define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10) +#define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24) +#if (GLUT_API_VERSION >= 3) +#define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10) +#define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12) +#define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18) +#endif +#endif + +/* glutGet parameters. */ +#define GLUT_WINDOW_X 100 +#define GLUT_WINDOW_Y 101 +#define GLUT_WINDOW_WIDTH 102 +#define GLUT_WINDOW_HEIGHT 103 +#define GLUT_WINDOW_BUFFER_SIZE 104 +#define GLUT_WINDOW_STENCIL_SIZE 105 +#define GLUT_WINDOW_DEPTH_SIZE 106 +#define GLUT_WINDOW_RED_SIZE 107 +#define GLUT_WINDOW_GREEN_SIZE 108 +#define GLUT_WINDOW_BLUE_SIZE 109 +#define GLUT_WINDOW_ALPHA_SIZE 110 +#define GLUT_WINDOW_ACCUM_RED_SIZE 111 +#define GLUT_WINDOW_ACCUM_GREEN_SIZE 112 +#define GLUT_WINDOW_ACCUM_BLUE_SIZE 113 +#define GLUT_WINDOW_ACCUM_ALPHA_SIZE 114 +#define GLUT_WINDOW_DOUBLEBUFFER 115 +#define GLUT_WINDOW_RGBA 116 +#define GLUT_WINDOW_PARENT 117 +#define GLUT_WINDOW_NUM_CHILDREN 118 +#define GLUT_WINDOW_COLORMAP_SIZE 119 +#if (GLUT_API_VERSION >= 2) +#define GLUT_WINDOW_NUM_SAMPLES 120 +#define GLUT_WINDOW_STEREO 121 +#endif +#if (GLUT_API_VERSION >= 3) +#define GLUT_WINDOW_CURSOR 122 +#endif +#define GLUT_SCREEN_WIDTH 200 +#define GLUT_SCREEN_HEIGHT 201 +#define GLUT_SCREEN_WIDTH_MM 202 +#define GLUT_SCREEN_HEIGHT_MM 203 +#define GLUT_MENU_NUM_ITEMS 300 +#define GLUT_DISPLAY_MODE_POSSIBLE 400 +#define GLUT_INIT_WINDOW_X 500 +#define GLUT_INIT_WINDOW_Y 501 +#define GLUT_INIT_WINDOW_WIDTH 502 +#define GLUT_INIT_WINDOW_HEIGHT 503 +#define GLUT_INIT_DISPLAY_MODE 504 +#if (GLUT_API_VERSION >= 2) +#define GLUT_ELAPSED_TIME 700 +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +#define GLUT_WINDOW_FORMAT_ID 123 +#endif + +#if (GLUT_API_VERSION >= 2) +/* glutDeviceGet parameters. */ +#define GLUT_HAS_KEYBOARD 600 +#define GLUT_HAS_MOUSE 601 +#define GLUT_HAS_SPACEBALL 602 +#define GLUT_HAS_DIAL_AND_BUTTON_BOX 603 +#define GLUT_HAS_TABLET 604 +#define GLUT_NUM_MOUSE_BUTTONS 605 +#define GLUT_NUM_SPACEBALL_BUTTONS 606 +#define GLUT_NUM_BUTTON_BOX_BUTTONS 607 +#define GLUT_NUM_DIALS 608 +#define GLUT_NUM_TABLET_BUTTONS 609 +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +#define GLUT_DEVICE_IGNORE_KEY_REPEAT 610 +#define GLUT_DEVICE_KEY_REPEAT 611 +#define GLUT_HAS_JOYSTICK 612 +#define GLUT_OWNS_JOYSTICK 613 +#define GLUT_JOYSTICK_BUTTONS 614 +#define GLUT_JOYSTICK_AXES 615 +#define GLUT_JOYSTICK_POLL_RATE 616 +#endif + +#if (GLUT_API_VERSION >= 3) +/* glutLayerGet parameters. */ +#define GLUT_OVERLAY_POSSIBLE 800 +#define GLUT_LAYER_IN_USE 801 +#define GLUT_HAS_OVERLAY 802 +#define GLUT_TRANSPARENT_INDEX 803 +#define GLUT_NORMAL_DAMAGED 804 +#define GLUT_OVERLAY_DAMAGED 805 + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +/* glutVideoResizeGet parameters. */ +#define GLUT_VIDEO_RESIZE_POSSIBLE 900 +#define GLUT_VIDEO_RESIZE_IN_USE 901 +#define GLUT_VIDEO_RESIZE_X_DELTA 902 +#define GLUT_VIDEO_RESIZE_Y_DELTA 903 +#define GLUT_VIDEO_RESIZE_WIDTH_DELTA 904 +#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 905 +#define GLUT_VIDEO_RESIZE_X 906 +#define GLUT_VIDEO_RESIZE_Y 907 +#define GLUT_VIDEO_RESIZE_WIDTH 908 +#define GLUT_VIDEO_RESIZE_HEIGHT 909 +#endif + +/* glutUseLayer parameters. */ +#define GLUT_NORMAL 0 +#define GLUT_OVERLAY 1 + +/* glutGetModifiers return mask. */ +#define GLUT_ACTIVE_SHIFT 1 +#define GLUT_ACTIVE_CTRL 2 +#define GLUT_ACTIVE_ALT 4 + +/* glutSetCursor parameters. */ +/* Basic arrows. */ +#define GLUT_CURSOR_RIGHT_ARROW 0 +#define GLUT_CURSOR_LEFT_ARROW 1 +/* Symbolic cursor shapes. */ +#define GLUT_CURSOR_INFO 2 +#define GLUT_CURSOR_DESTROY 3 +#define GLUT_CURSOR_HELP 4 +#define GLUT_CURSOR_CYCLE 5 +#define GLUT_CURSOR_SPRAY 6 +#define GLUT_CURSOR_WAIT 7 +#define GLUT_CURSOR_TEXT 8 +#define GLUT_CURSOR_CROSSHAIR 9 +/* Directional cursors. */ +#define GLUT_CURSOR_UP_DOWN 10 +#define GLUT_CURSOR_LEFT_RIGHT 11 +/* Sizing cursors. */ +#define GLUT_CURSOR_TOP_SIDE 12 +#define GLUT_CURSOR_BOTTOM_SIDE 13 +#define GLUT_CURSOR_LEFT_SIDE 14 +#define GLUT_CURSOR_RIGHT_SIDE 15 +#define GLUT_CURSOR_TOP_LEFT_CORNER 16 +#define GLUT_CURSOR_TOP_RIGHT_CORNER 17 +#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 18 +#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 19 +/* Inherit from parent window. */ +#define GLUT_CURSOR_INHERIT 100 +/* Blank cursor. */ +#define GLUT_CURSOR_NONE 101 +/* Fullscreen crosshair (if available). */ +#define GLUT_CURSOR_FULL_CROSSHAIR 102 +#endif + +/* GLUT initialization sub-API. */ +extern void APIENTRY glutInit(int *argcp, char **argv); +extern void APIENTRY glutInitDisplayMode(unsigned int mode); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern void APIENTRY glutInitDisplayString(const char *string); +#endif +extern void APIENTRY glutInitWindowPosition(int x, int y); +extern void APIENTRY glutInitWindowSize(int width, int height); +extern void APIENTRY glutMainLoop(void); + +/* GLUT window sub-API. */ +extern int APIENTRY glutCreateWindow(const char *title); +extern int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height); +extern void APIENTRY glutDestroyWindow(int win); +extern void APIENTRY glutPostRedisplay(void); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) +extern void APIENTRY glutPostWindowRedisplay(int win); +#endif +extern void APIENTRY glutSwapBuffers(void); +extern int APIENTRY glutGetWindow(void); +extern void APIENTRY glutSetWindow(int win); +extern void APIENTRY glutSetWindowTitle(const char *title); +extern void APIENTRY glutSetIconTitle(const char *title); +extern void APIENTRY glutPositionWindow(int x, int y); +extern void APIENTRY glutReshapeWindow(int width, int height); +extern void APIENTRY glutPopWindow(void); +extern void APIENTRY glutPushWindow(void); +extern void APIENTRY glutIconifyWindow(void); +extern void APIENTRY glutShowWindow(void); +extern void APIENTRY glutHideWindow(void); +#if (GLUT_API_VERSION >= 3) +extern void APIENTRY glutFullScreen(void); +extern void APIENTRY glutSetCursor(int cursor); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern void APIENTRY glutWarpPointer(int x, int y); +#if (GLUT_MACOSX_IMPLEMENTATION >= 1) +/* surface texturing API Mac OS X specific +* Note: +* glutSurfaceTexture has been deprecated, use GL_EXT_framebuffer_object +*/ +#ifdef MAC_OS_X_VERSION_10_5 +extern void APIENTRY glutSurfaceTexture (GLenum target, GLenum internalformat, int surfacewin); AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5 +#else +extern void APIENTRY glutSurfaceTexture (GLenum target, GLenum internalformat, int surfacewin); +#endif +#endif +#if (GLUT_MACOSX_IMPLEMENTATION >= 2) +/* Mac OS X specific API */ +extern void APIENTRY glutWMCloseFunc(void (*func)(void)); +extern void APIENTRY glutCheckLoop(void); +#endif +#endif + +/* GLUT overlay sub-API. */ +extern void APIENTRY glutEstablishOverlay(void); +extern void APIENTRY glutRemoveOverlay(void); +extern void APIENTRY glutUseLayer(GLenum layer); +extern void APIENTRY glutPostOverlayRedisplay(void); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) +extern void APIENTRY glutPostWindowOverlayRedisplay(int win); +#endif +extern void APIENTRY glutShowOverlay(void); +extern void APIENTRY glutHideOverlay(void); +#endif + +/* GLUT menu sub-API. */ +extern int APIENTRY glutCreateMenu(void (*)(int)); +extern void APIENTRY glutDestroyMenu(int menu); +extern int APIENTRY glutGetMenu(void); +extern void APIENTRY glutSetMenu(int menu); +extern void APIENTRY glutAddMenuEntry(const char *label, int value); +extern void APIENTRY glutAddSubMenu(const char *label, int submenu); +extern void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value); +extern void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu); +extern void APIENTRY glutRemoveMenuItem(int item); +extern void APIENTRY glutAttachMenu(int button); +extern void APIENTRY glutDetachMenu(int button); + +/* GLUT window callback sub-API. */ +extern void APIENTRY glutDisplayFunc(void (*func)(void)); +extern void APIENTRY glutReshapeFunc(void (*func)(int width, int height)); +extern void APIENTRY glutKeyboardFunc(void (*func)(unsigned char key, int x, int y)); +extern void APIENTRY glutMouseFunc(void (*func)(int button, int state, int x, int y)); +extern void APIENTRY glutMotionFunc(void (*func)(int x, int y)); +extern void APIENTRY glutPassiveMotionFunc(void (*func)(int x, int y)); +extern void APIENTRY glutEntryFunc(void (*func)(int state)); +extern void APIENTRY glutVisibilityFunc(void (*func)(int state)); +extern void APIENTRY glutIdleFunc(void (*func)(void)); +extern void APIENTRY glutTimerFunc(unsigned int millis, void (*func)(int value), int value); +extern void APIENTRY glutMenuStateFunc(void (*func)(int state)); +#if (GLUT_API_VERSION >= 2) +extern void APIENTRY glutSpecialFunc(void (*func)(int key, int x, int y)); +extern void APIENTRY glutSpaceballMotionFunc(void (*func)(int x, int y, int z)); +extern void APIENTRY glutSpaceballRotateFunc(void (*func)(int x, int y, int z)); +extern void APIENTRY glutSpaceballButtonFunc(void (*func)(int button, int state)); +extern void APIENTRY glutButtonBoxFunc(void (*func)(int button, int state)); +extern void APIENTRY glutDialsFunc(void (*func)(int dial, int value)); +extern void APIENTRY glutTabletMotionFunc(void (*func)(int x, int y)); +extern void APIENTRY glutTabletButtonFunc(void (*func)(int button, int state, int x, int y)); +#if (GLUT_API_VERSION >= 3) +extern void APIENTRY glutMenuStatusFunc(void (*func)(int status, int x, int y)); +extern void APIENTRY glutOverlayDisplayFunc(void (*func)(void)); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern void APIENTRY glutWindowStatusFunc(void (*func)(int state)); +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +extern void APIENTRY glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y)); +extern void APIENTRY glutSpecialUpFunc(void (*func)(int key, int x, int y)); +extern void APIENTRY glutJoystickFunc(void (*func)(unsigned int buttonMask, int x, int y, int z), int pollInterval); +//#ifdef GLUT_OF_007_HACK +extern void APIENTRY glutDragEventFunc(void (*func)(char ** fileNames, int nFiles, int dragX, int dragY)); +//#endif +#endif +#endif +#endif + +/* GLUT color index sub-API. */ +extern void APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue); +extern GLfloat APIENTRY glutGetColor(int ndx, int component); +extern void APIENTRY glutCopyColormap(int win); + +/* GLUT state retrieval sub-API. */ +extern int APIENTRY glutGet(GLenum type); +extern int APIENTRY glutDeviceGet(GLenum type); +#if (GLUT_API_VERSION >= 2) +/* GLUT extension support sub-API */ +extern int APIENTRY glutExtensionSupported(const char *name); +#endif +#if (GLUT_API_VERSION >= 3) +extern int APIENTRY glutGetModifiers(void); +extern int APIENTRY glutLayerGet(GLenum type); +#endif +#if (GLUT_API_VERSION >= 5) +extern void * APIENTRY glutGetProcAddress(const char *procName); +#endif + +/* GLUT font sub-API */ +extern void APIENTRY glutBitmapCharacter(void *font, int character); +extern int APIENTRY glutBitmapWidth(void *font, int character); +extern void APIENTRY glutStrokeCharacter(void *font, int character); +extern int APIENTRY glutStrokeWidth(void *font, int character); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern int APIENTRY glutBitmapLength(void *font, const unsigned char *string); +extern int APIENTRY glutStrokeLength(void *font, const unsigned char *string); +#endif + +/* GLUT pre-built models sub-API */ +extern void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks); +extern void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); +extern void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); +extern void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); +extern void APIENTRY glutWireCube(GLdouble size); +extern void APIENTRY glutSolidCube(GLdouble size); +extern void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); +extern void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); +extern void APIENTRY glutWireDodecahedron(void); +extern void APIENTRY glutSolidDodecahedron(void); +extern void APIENTRY glutWireTeapot(GLdouble size); +extern void APIENTRY glutSolidTeapot(GLdouble size); +extern void APIENTRY glutWireOctahedron(void); +extern void APIENTRY glutSolidOctahedron(void); +extern void APIENTRY glutWireTetrahedron(void); +extern void APIENTRY glutSolidTetrahedron(void); +extern void APIENTRY glutWireIcosahedron(void); +extern void APIENTRY glutSolidIcosahedron(void); + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +/* GLUT video resize sub-API. */ +extern int APIENTRY glutVideoResizeGet(GLenum param); +extern void APIENTRY glutSetupVideoResizing(void); +extern void APIENTRY glutStopVideoResizing(void); +extern void APIENTRY glutVideoResize(int x, int y, int width, int height); +extern void APIENTRY glutVideoPan(int x, int y, int width, int height); + +/* GLUT debugging sub-API. */ +extern void APIENTRY glutReportErrors(void); +#endif + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +/* GLUT device control sub-API. */ +/* glutSetKeyRepeat modes. */ +#define GLUT_KEY_REPEAT_OFF 0 +#define GLUT_KEY_REPEAT_ON 1 +#define GLUT_KEY_REPEAT_DEFAULT 2 + +/* Joystick button masks. */ +#define GLUT_JOYSTICK_BUTTON_A 1 +#define GLUT_JOYSTICK_BUTTON_B 2 +#define GLUT_JOYSTICK_BUTTON_C 4 +#define GLUT_JOYSTICK_BUTTON_D 8 + +extern void APIENTRY glutIgnoreKeyRepeat(int ignore); +extern void APIENTRY glutSetKeyRepeat(int repeatMode); +extern void APIENTRY glutForceJoystickFunc(void); + +/* GLUT game mode sub-API. */ +/* glutGameModeGet. */ +#define GLUT_GAME_MODE_ACTIVE 0 +#define GLUT_GAME_MODE_POSSIBLE 1 +#define GLUT_GAME_MODE_WIDTH 2 +#define GLUT_GAME_MODE_HEIGHT 3 +#define GLUT_GAME_MODE_PIXEL_DEPTH 4 +#define GLUT_GAME_MODE_REFRESH_RATE 5 +#define GLUT_GAME_MODE_DISPLAY_CHANGED 6 + +extern void APIENTRY glutGameModeString(const char *string); +extern int APIENTRY glutEnterGameMode(void); +extern void APIENTRY glutLeaveGameMode(void); +extern int APIENTRY glutGameModeGet(GLenum mode); +#endif + +#ifdef __cplusplus +} + +#endif + +#ifdef GLUT_APIENTRY_DEFINED +# undef GLUT_APIENTRY_DEFINED +# undef APIENTRY +#endif + +#ifdef GLUT_WINGDIAPI_DEFINED +# undef GLUT_WINGDIAPI_DEFINED +# undef WINGDIAPI +#endif + +#endif /* __glut_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutbitmap.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutbitmap.h new file mode 100644 index 0000000..e29a016 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutbitmap.h @@ -0,0 +1,30 @@ +#ifndef __glutbitmap_h__ +#define __glutbitmap_h__ + +/* Copyright (c) Mark J. Kilgard, 1994. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#include "glut.h" + +typedef struct { + const GLsizei width; + const GLsizei height; + const GLfloat xorig; + const GLfloat yorig; + const GLfloat advance; + const GLubyte *bitmap; +} BitmapCharRec, *BitmapCharPtr; + +typedef struct { + const char *name; + const int num_chars; + const int first; + const BitmapCharRec * const *ch; +} BitmapFontRec, *BitmapFontPtr; + +typedef void *GLUTbitmapFont; + +#endif /* __glutbitmap_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutf90.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutf90.h new file mode 100644 index 0000000..f8a170b --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutf90.h @@ -0,0 +1,90 @@ +#ifndef __glutf90_h__ +#define __glutf90_h__ + +/* Copyright (c) Mark J. Kilgard & Willam F. Mitchell, 1998. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +/* This header provides the binding interface for William Mitchell's + f90gl Fortran 90 GLUT binding. Other GLUT language bindings + can and should use this interace. */ + +/* I appreciate the guidance from William Mitchell + (mitchell@cam.nist.gov) in developing this friend interface + for use by the f90gl package. See ../../README.fortran */ + +#include + +#ifndef GLUTCALLBACK + #define GLUTCALLBACK +#endif +#ifndef APIENTRY + #define APIENTRY +#endif + +/* Which callback enumerants for the __glutSetFCB/__glutGetFCB routines. */ +/* NOTE These values are part of a binary interface for the f90gl Fortran + 90 binding and so must NOT changes (additions are allowed). */ + +/* GLUTwindow callbacks. */ +#define GLUT_FCB_DISPLAY 0 /* GLUTdisplayFCB */ +#define GLUT_FCB_RESHAPE 1 /* GLUTreshapeFCB */ +#define GLUT_FCB_MOUSE 2 /* GLUTmouseFCB */ +#define GLUT_FCB_MOTION 3 /* GLUTmotionFCB */ +#define GLUT_FCB_PASSIVE 4 /* GLUTpassiveFCB */ +#define GLUT_FCB_ENTRY 5 /* GLUTentryFCB */ +#define GLUT_FCB_KEYBOARD 6 /* GLUTkeyboardFCB */ +#define GLUT_FCB_KEYBOARD_UP 7 /* GLUTkeyboardFCB */ +#define GLUT_FCB_WINDOW_STATUS 8 /* GLUTwindowStatusFCB */ +#define GLUT_FCB_VISIBILITY 9 /* GLUTvisibilityFCB */ +#define GLUT_FCB_SPECIAL 10 /* GLUTspecialFCB */ +#define GLUT_FCB_SPECIAL_UP 11 /* GLUTspecialFCB */ +#define GLUT_FCB_BUTTON_BOX 12 /* GLUTbuttonBoxFCB */ +#define GLUT_FCB_DIALS 13 /* GLUTdialsFCB */ +#define GLUT_FCB_SPACE_MOTION 14 /* GLUTspaceMotionFCB */ +#define GLUT_FCB_SPACE_ROTATE 15 /* GLUTspaceRotateFCB */ +#define GLUT_FCB_SPACE_BUTTON 16 /* GLUTspaceButtonFCB */ +#define GLUT_FCB_TABLET_MOTION 17 /* GLUTtabletMotionFCB */ +#define GLUT_FCB_TABLET_BUTTON 18 /* GLUTtabletButtonFCB */ +#define GLUT_FCB_JOYSTICK 19 /* GLUTjoystickFCB */ +#define GLUT_FCB_WMCLOSE 20 /* GLUTwmcloseFCB */ +/* Non-GLUTwindow callbacks. */ +#define GLUT_FCB_OVERLAY_DISPLAY 100 /* GLUTdisplayFCB */ +#define GLUT_FCB_SELECT 101 /* GLUTselectFCB */ +#define GLUT_FCB_TIMER 102 /* GLUTtimerFCB */ + +/* GLUT Fortran callback function types. */ +typedef void (GLUTCALLBACK *GLUTdisplayFCB) (void); +typedef void (GLUTCALLBACK *GLUTwmcloseFCB) (void); +typedef void (GLUTCALLBACK *GLUTreshapeFCB) (int *, int *); +/* NOTE the pressed key is int, not unsigned char for Fortran! */ +typedef void (GLUTCALLBACK *GLUTkeyboardFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTmouseFCB) (int *, int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTmotionFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTpassiveFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTentryFCB) (int *); +typedef void (GLUTCALLBACK *GLUTwindowStatusFCB) (int *); +typedef void (GLUTCALLBACK *GLUTvisibilityFCB) (int *); +typedef void (GLUTCALLBACK *GLUTspecialFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTbuttonBoxFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTdialsFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTspaceMotionFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTspaceRotateFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTspaceButtonFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTtabletMotionFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTtabletButtonFCB) (int *, int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTjoystickFCB) (unsigned int *buttonMask, int *x, int *y, int *z); + +typedef void (GLUTCALLBACK *GLUTselectFCB) (int *); +typedef void (GLUTCALLBACK *GLUTtimerFCB) (int *); +typedef void (GLUTCALLBACK *GLUTmenuStateFCB) (int *); /* DEPRICATED. */ +typedef void (GLUTCALLBACK *GLUTmenuStatusFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTidleFCB) (void); + +/* Functions that set and return Fortran callback functions. */ +extern void* APIENTRY __glutGetFCB(int which); +extern void APIENTRY __glutSetFCB(int which, void *func); + +#endif /* __glutf90_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutstroke.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutstroke.h new file mode 100644 index 0000000..cbc9e15 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/glutstroke.h @@ -0,0 +1,42 @@ +#ifndef __glutstroke_h__ +#define __glutstroke_h__ + +/* Copyright (c) Mark J. Kilgard, 1994. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#if defined(_WIN32) +#pragma warning (disable:4244) /* disable bogus conversion warnings */ +#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ +#endif + +typedef struct { + float x; + float y; +} CoordRec, *CoordPtr; + +typedef struct { + int num_coords; + const CoordRec *coord; +} StrokeRec, *StrokePtr; + +typedef struct { + int num_strokes; + const StrokeRec *stroke; + float center; + float right; +} StrokeCharRec, *StrokeCharPtr; + +typedef struct { + const char *name; + int num_chars; + const StrokeCharRec *ch; + float top; + float bottom; +} StrokeFontRec, *StrokeFontPtr; + +typedef void *GLUTstrokeFont; + +#endif /* __glutstroke_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/gutil.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/gutil.h new file mode 100644 index 0000000..f7ffcf3 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/gutil.h @@ -0,0 +1,89 @@ + +/* + * gutil.h + * + * FUNCTION: + * Provide utilities that allow rotation to occur + * around any axis. + * + * HISTORY: + * created by Linas Vepstas 1990 + * added single & double precision, June 1991, Linas Vepstas + */ + +#ifndef __GUTIL_H__ +#define __GUTIL_H__ + +#ifdef __GUTIL_DOUBLE +#define gutDouble double +#else +#define gutDouble float +#endif + + +#ifdef _NO_PROTO /* NO ANSI C PROTOTYPING */ + +/* Rotation Utilities */ +extern void rot_axis_f (); +extern void rot_about_axis_f (); +extern void rot_omega_f (); +extern void urot_axis_f (); +extern void urot_about_axis_f (); +extern void urot_omega_f (); + +/* double-precision versions */ +extern void rot_axis_d (); +extern void rot_about_axis_d (); +extern void rot_omega_d (); +extern void urot_axis_d (); +extern void urot_about_axis_d (); +extern void urot_omega_d (); + +/* viewpoint functions */ +extern void uview_direction_d (); +extern void uview_direction_f (); +extern void uviewpoint_d (); +extern void uviewpoint_f (); + +#else /* _NO_PROTO */ /* ANSI C PROTOTYPING */ + +/* Rotation Utilities */ +extern void rot_axis_f (float omega, float axis[3]); +extern void rot_about_axis_f (float angle, float axis[3]); +extern void rot_omega_f (float axis[3]); +extern void urot_axis_f (float m[4][4], float omega, float axis[3]); +extern void urot_about_axis_f (float m[4][4], float angle, float axis[3]); +extern void urot_omega_f (float m[4][4], float axis[3]); + +/* double-precision versions */ +extern void rot_axis_d (double omega, double axis[3]); +extern void rot_about_axis_d (double angle, double axis[3]); +extern void rot_omega_d (double axis[3]); +extern void urot_axis_d (double m[4][4], double omega, double axis[3]); +extern void urot_about_axis_d (double m[4][4], double angle, double axis[3]); +extern void urot_omega_d (double m[4][4], double axis[3]); + +/* viewpoint functions */ +extern void uview_direction_d (double m[4][4], /* returned */ + double v21[3], /* input */ + double up[3]); /* input */ + +extern void uview_direction_f (float m[4][4], /* returned */ + float v21[3], /* input */ + float up[3]); /* input */ + +extern void uviewpoint_d (double m[4][4], /* returned */ + double v1[3], /* input */ + double v2[3], /* input */ + double up[3]); /* input */ + +extern void uviewpoint_f (float m[4][4], /* returned */ + float v1[3], /* input */ + float v2[3], /* input */ + float up[3]); /* input */ + +#endif /* _NO_PROTO */ + +#endif /* _GUTIL_H__ */ + +/* ------------------- end of file ---------------------- */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/intersect.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/intersect.h new file mode 100644 index 0000000..f5ff7a5 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/intersect.h @@ -0,0 +1,391 @@ +/* + * FUNCTION: + * This file contains a number of utilities useful to 3D graphics in + * general, and to the generation of tubing and extrusions in particular + * + * HISTORY: + * Written by Linas Vepstas, August 1991 + * Updated to correctly handle degenerate cases, Linas, February 1993 + */ + +#include +#include "port.h" +#include "vvector.h" + +#define BACKWARDS_INTERSECT (2) + +/* ========================================================== */ +/* + * the Degenerate_Tolerance token represents the greatest amount by + * which different scales in a graphics environment can differ before + * they should be considered "degenerate". That is, when one vector is + * a million times longer than another, changces are that the second will + * be less than a pixel int, and therefore was probably meant to be + * degenerate (by the CAD package, etc.) But what should this tolerance + * be? At least 1 in onethousand (since screen sizes are 1K pixels), but + * les than 1 in 4 million (since this is the limit of single-precision + * floating point accuracy). Of course, if double precision were used, + * then the tolerance could be increased. + * + * Potentially, this naive assumption could cause problems if the CAD + * package attempts to zoom in on small details, and turns out, certain + * points should not hvae been degenerate. The problem presented here + * is that the tolerance could run out before single-precision ran + * out, and so the CAD packages would perceive this as a "bug". + * One alternative is to fiddle around & try to tighten the tolerance. + * However, the right alternative is to code the graphics pipeline in + * double-precision (and tighten the tolerance). + * + * By the way, note that Degernate Tolerance is a "dimensionless" + * quantitiy -- it has no units -- it does not measure feet, inches, + * millimeters or pixels. It is used only in the computations of ratios + * and relative lengths. + */ + +/* + * Right now, the tolerance is set to 2 parts in a million, which + * corresponds to a 19-bit distinction of mantissas. Note that + * single-precsion numbers have 24 bit mantissas. + */ + +#define DEGENERATE_TOLERANCE (0.000002) + +/* ========================================================== */ +/* + * The macro and subroutine INTERSECT are designed to compute the + * intersection of a line (defined by the points v1 and v2) and a plane + * (defined as plane which is normal to the vector n, and contains the + * point p). Both return the point sect, which is the point of + * interesection. + * + * This MACRO attemps to be fairly robust by checking for a divide by + * zero. + */ + +/* ========================================================== */ +/* + * HACK ALERT + * The intersection parameter t has the nice property that if t>1, + * then the intersection is "in front of" p1, and if t<0, then the + * intersection is "behind" p2. Unfortunately, as the intersecting plane + * and the line become parallel, t wraps through infinity -- i.e. t can + * become so large that t becomes "greater than infinity" and comes back + * as a negative number (i.e. winding number hopped by one unit). We + * have no way of detecting this situation without adding gazzillions + * of lines of code of topological algebra to detect the winding number; + * and this would be incredibly difficult, and ruin performance. + * + * Thus, we've installed a cheap hack for use by the "cut style" drawing + * routines. If t proves to be a large negative number (more negative + * than -5), then we assume that t was positive and wound through + * infinity. This makes most cuts look good, without introducing bogus + * cuts at infinity. + */ +/* ========================================================== */ + +#define INTERSECT(sect,p,n,v1,v2) \ +{ \ + gleDouble deno, numer, t, omt; \ + \ + deno = (v1[0] - v2[0]) * n[0]; \ + deno += (v1[1] - v2[1]) * n[1]; \ + deno += (v1[2] - v2[2]) * n[2]; \ + \ + if (deno == 0.0) { \ + VEC_COPY (n, v1); \ + /* printf ("Intersect: Warning: line is coplanar with plane \n"); */ \ + } else { \ + \ + numer = (p[0] - v2[0]) * n[0]; \ + numer += (p[1] - v2[1]) * n[1]; \ + numer += (p[2] - v2[2]) * n[2]; \ + \ + t = numer / deno; \ + omt = 1.0 - t; \ + \ + sect[0] = t * v1[0] + omt * v2[0]; \ + sect[1] = t * v1[1] + omt * v2[1]; \ + sect[2] = t * v1[2] + omt * v2[2]; \ + } \ +} + +/* ========================================================== */ +/* + * The macro and subroutine BISECTING_PLANE compute a normal vector that + * describes the bisecting plane between three points (v1, v2 and v3). + * This bisecting plane has the following properties: + * 1) it contains the point v2 + * 2) the angle it makes with v21 == v2 - v1 is equal to the angle it + * makes with v32 == v3 - v2 + * 3) it is perpendicular to the plane defined by v1, v2, v3. + * + * Having input v1, v2, and v3, it returns a unit vector n. + * + * In some cases, the user may specify degenerate points, and still + * expect "reasonable" or "obvious" behaviour. The "expected" + * behaviour for these degenerate cases is: + * + * 1) if v1 == v2 == v3, then return n=0 + * 2) if v1 == v2, then return v32 (normalized). + * 3) if v2 == v3, then return v21 (normalized). + * 4) if v1, v2 and v3 co-linear, then return v21 (normalized). + * + * Mathematically, these special cases "make sense" -- we just have to + * code around potential divide-by-zero's in the code below. + */ + +/* ========================================================== */ + +#define BISECTING_PLANE(valid,n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + double len21, len32; \ + double vdot; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_LENGTH (len21, v21); \ + VEC_LENGTH (len32, v32); \ + \ + if (len21 <= DEGENERATE_TOLERANCE * len32) { \ + \ + if (len32 == 0.0) { \ + /* all three points lie ontop of one-another */ \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + /* return a normalized copy of v32 as bisector */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (n, len32, v32); \ + valid = TRUE; \ + } \ + \ + } else { \ + \ + valid = TRUE; \ + \ + if (len32 <= DEGENERATE_TOLERANCE * len21) { \ + /* return a normalized copy of v21 as bisector */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (n, len21, v21); \ + \ + } else { \ + \ + /* normalize v21 to be of unit length */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (v21, len21, v21); \ + \ + /* normalize v32 to be of unit length */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (v32, len32, v32); \ + \ + VEC_DOT_PRODUCT (vdot, v32, v21); \ + \ + /* if vdot == 1 or -1, then points are colinear */ \ + if ((vdot >= (1.0-DEGENERATE_TOLERANCE)) || \ + (vdot <= (-1.0+DEGENERATE_TOLERANCE))) { \ + VEC_COPY (n, v21); \ + } else { \ + \ + /* go do the full computation */ \ + n[0] = vdot * (v32[0] + v21[0]) - v32[0] - v21[0]; \ + n[1] = vdot * (v32[1] + v21[1]) - v32[1] - v21[1]; \ + n[2] = vdot * (v32[2] + v21[2]) - v32[2] - v21[2]; \ + \ + /* if above if-test's passed, \ + * n should NEVER be of zero length */ \ + VEC_NORMALIZE (n); \ + } \ + } \ + } \ +} + +/* ========================================================== */ +/* + * The block of code below is ifdef'd out, and is here for reference + * purposes only. It performs the "mathematically right thing" for + * computing a bisecting plane, but is, unfortunately, subject ot noise + * in the presence of near degenerate points. Since computer graphics, + * due to sloppy coding, laziness, or correctness, is filled with + * degenerate points, we can't really use this version. The code above + * is far more appropriate for graphics. + */ + +#ifdef MATHEMATICALLY_EXACT_GRAPHICALLY_A_KILLER +#define BISECTING_PLANE(n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + double len21, len32; \ + double vdot; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_LENGTH (len21, v21); \ + VEC_LENGTH (len32, v32); \ + \ + if (len21 == 0.0) { \ + \ + if (len32 == 0.0) { \ + /* all three points lie ontop of one-another */ \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + /* return a normalized copy of v32 as bisector */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (n, len32, v32); \ + } \ + \ + } else { \ + \ + /* normalize v21 to be of unit length */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (v21, len21, v21); \ + \ + if (len32 == 0.0) { \ + /* return a normalized copy of v21 as bisector */ \ + VEC_COPY (n, v21); \ + } else { \ + \ + /* normalize v32 to be of unit length */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (v32, len32, v32); \ + \ + VEC_DOT_PRODUCT (vdot, v32, v21); \ + \ + /* if vdot == 1 or -1, then points are colinear */ \ + if ((vdot == 1.0) || (vdot == -1.0)) { \ + VEC_COPY (n, v21); \ + } else { \ + \ + /* go do the full computation */ \ + n[0] = vdot * (v32[0] + v21[0]) - v32[0] - v21[0]; \ + n[1] = vdot * (v32[1] + v21[1]) - v32[1] - v21[1]; \ + n[2] = vdot * (v32[2] + v21[2]) - v32[2] - v21[2]; \ + \ + /* if above if-test's passed, \ + * n should NEVER be of zero length */ \ + VEC_NORMALIZE (n); \ + } \ + } \ + } \ +} +#endif + +/* ========================================================== */ +/* + * This macro computes the plane perpendicular to the the plane + * defined by three points, and whose normal vector is givven as the + * difference between the two vectors ... + * + * (See way below for the "math" model if you want to understand this. + * The comments about relative errors above apply here.) + */ + +#define CUTTING_PLANE(valid,n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + double len21, len32; \ + double lendiff; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_LENGTH (len21, v21); \ + VEC_LENGTH (len32, v32); \ + \ + if (len21 <= DEGENERATE_TOLERANCE * len32) { \ + \ + if (len32 == 0.0) { \ + /* all three points lie ontop of one-another */ \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + /* return a normalized copy of v32 as cut-vector */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (n, len32, v32); \ + valid = TRUE; \ + } \ + \ + } else { \ + \ + valid = TRUE; \ + \ + if (len32 <= DEGENERATE_TOLERANCE * len21) { \ + /* return a normalized copy of v21 as cut vector */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (n, len21, v21); \ + } else { \ + \ + /* normalize v21 to be of unit length */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (v21, len21, v21); \ + \ + /* normalize v32 to be of unit length */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (v32, len32, v32); \ + \ + VEC_DIFF (n, v21, v32); \ + VEC_LENGTH (lendiff, n); \ + \ + /* if the perp vector is very small, then the two \ + * vectors are darn near collinear, and the cut \ + * vector is probably poorly defined. */ \ + if (lendiff < DEGENERATE_TOLERANCE) { \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + lendiff = 1.0 / lendiff; \ + VEC_SCALE (n, lendiff, n); \ + } \ + } \ + } \ +} + +/* ========================================================== */ + +#ifdef MATHEMATICALLY_EXACT_GRAPHICALLY_A_KILLER +#define CUTTING_PLANE(n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_NORMALIZE (v21); \ + VEC_NORMALIZE (v32); \ + \ + VEC_DIFF (n, v21, v32); \ + VEC_NORMALIZE (n); \ +} +#endif + + +/* ============================================================ */ +/* This macro is used in several places to cycle through a series of + * points to find the next non-degenerate point in a series */ + +#define FIND_NON_DEGENERATE_POINT(inext,npoints,len,diff,point_array) \ +{ \ + gleDouble slen; \ + gleDouble summa[3]; \ + \ + do { \ + /* get distance to next point */ \ + VEC_DIFF (diff, point_array[inext+1], point_array[inext]); \ + VEC_LENGTH (len, diff); \ + VEC_SUM (summa, point_array[inext+1], point_array[inext]); \ + VEC_LENGTH (slen, summa); \ + slen *= DEGENERATE_TOLERANCE; \ + inext ++; \ + } while ((len <= slen) && (inext < npoints-1)); \ +} + +/* ========================================================== */ + +extern int bisecting_plane (gleDouble n[3], /* returned */ + gleDouble v1[3], /* input */ + gleDouble v2[3], /* input */ + gleDouble v3[3]); /* input */ + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/port.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/port.h new file mode 100644 index 0000000..2827bbf --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/port.h @@ -0,0 +1,298 @@ + +/* + * port.h + * + * FUNCTION: + * This file contains defines for porting the tubing toolkit from GL to + * OpenGL to some callback scheme. + * + * HISTORY: + * Created by Linas Vepstas -- February 1993 + * Added auto texture coord generation hacks, Linas April 1994 + */ + +#ifndef __GLE_PORT_H__ +#define __GLE_PORT_H__ + + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +/* ====================================================== */ +/* Some compilers can't handle multiply-subscripted array's */ + +#ifdef FUNKY_C +typedef gleDouble gleVector; +#define AVAL(arr,n,i,j) arr(6*n+3*i+j) +#define VVAL(arr,n,i) arr(3*n+i) + +#else /* FUNKY_C */ +typedef double gleVector[3]; +typedef double glePoint[2]; +#define AVAL(arr,n,i,j) arr[n][i][j] +#define VVAL(arr,n,i) arr[n][i]; + +#endif /* FUNKY_C */ + +/* ====================================================== */ +/* These are used to convey info about topography to the + * texture mapping routines */ + +#define FRONT 1 +#define BACK 2 +#define FRONT_CAP 3 +#define BACK_CAP 4 +#define FILLET 5 + +/* ====================================================== */ + +#define __GLE_DOUBLE + +/* ====================================================== */ + +#ifdef __GLE_DOUBLE +#ifndef gleDouble + #define gleDouble double +#endif +#define urot_axis(a,b,c) urot_axis_d(a,b,c) +#define uview_direction(a,b,c) uview_direction_d(a,b,c) +#define uviewpoint(a,b,c,d) uviewpoint_d(a,b,c,d) +#define MULTMATRIX(m) MULTMATRIX_D(m) +#define LOADMATRIX(m) LOADMATRIX_D(m) +#define V3F(x,j,id) V3F_D(x,j,id) +#define N3F(x) N3F_D(x) +#define T2F(x,y) T2F_D(x,y) +#else +#define gleDouble float +#define urot_axis(a,b,c) urot_axis_f(a,b,c) +#define uview_direction(a,b,c) uview_direction_f(a,b,c) +#define uviewpoint(a,b,c,d) uviewpoint_f(a,b,c,d) +#define MULTMATRIX(m) MULTMATRIX_F(m) +#define LOADMATRIX(m) LOADMATRIX_F(m) +#define V3F(x,j,id) V3F_F(x,j,id) +#define N3F(x) N3F_F(x) +#define T2F(x,y) T2F_F(x,y) +#endif + +/* ====================================================== */ + +#if (defined DEBUG_GL_32 || DEBUG_OPENGL_10) +#undef GL_32 +#undef OPENGL_10 + +#define BGNTMESH(i,len) printf ("bgntmesh() \n"); +#define ENDTMESH() printf ("endtmesh() \n"); +#define BGNPOLYGON() printf ("bgnpolygon() \n"); +#define ENDPOLYGON() printf ("endpolygon() \n"); +#define V3F_F(x,j,id) printf ("v3f(x) %f %f %f \n", x[0], x[1], x[2]); +#define V3F_D(x,j,id) printf ("v3d(x) %f %f %f \n", x[0], x[1], x[2]); +#define N3F_F(x) printf ("n3f(x) %f %f %f \n", x[0], x[1], x[2]); +#define N3F_D(x) printf ("n3d(x) %f %f %f \n", x[0], x[1], x[2]); +#define C3F(x) printf ("c3f(x) %f %f %f \n", x[0], x[1], x[2]); + +#define POPMATRIX() printf ("popmatrix () \n"); +#define PUSHMATRIX() printf ("pushmatrix() \n"); +#define MULTMATRIX_F(x) MULTMATRIX_D(x) +#define LOADMATRIX_F(x) LOADMATRIX_D(x) + + +#define LOADMATRIX_D(x) { \ + int i, j; \ + printf ("loadmatrix (x) \n"); \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + printf ( "%f ", x[i][j]); \ + } \ + printf (" \n"); \ + } \ +} + +#define MULTMATRIX_D(x) { \ + int i, j; \ + printf ("multmatrix (x) \n"); \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + printf ( "%f ", x[i][j]); \ + } \ + printf (" \n"); \ + } \ +} + +#define __IS_LIGHTING_ON (1) + +#endif + +/* ====================================================== */ + +#ifdef GL_32 + +#include + +#define BGNTMESH(i,len) bgntmesh() +#define ENDTMESH() endtmesh() +#define BGNPOLYGON() bgnpolygon() +#define ENDPOLYGON() endpolygon() +#define V3F_F(x,j,id) v3f(x) +#define V3F_D(x,j,id) v3d(x) +#define N3F_F(x) n3f(x) +#define T2F_F(x,y) +#define T2F_D(x,y) +#define C3F(x) c3f(x) + +#define POPMATRIX() popmatrix () +#define PUSHMATRIX() pushmatrix() +#define MULTMATRIX_F(x) multmatrix (x) +#define LOADMATRIX_F(x) loadmatrix (x) + +#define N3F_D(x) { \ + float nnn[3]; \ + nnn[0] = (float) x[0]; \ + nnn[1] = (float) x[1]; \ + nnn[2] = (float) x[2]; \ + n3f (nnn); \ +} + +#define LOADMATRIX_D(x) { \ + int i, j; \ + float mmm[4][4]; \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + mmm[i][j] = (float) x[i][j]; \ + } \ + } \ + loadmatrix(mmm); \ +} + +#define MULTMATRIX_D(x) { \ + int i, j; \ + float mmm[4][4]; \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + mmm[i][j] = (float) x[i][j]; \ + } \ + } \ + multmatrix(mmm); \ +} + +/* #define __IS_LIGHTING_ON (MSINGLE == getmmode()) */ +#define __IS_LIGHTING_ON (extrusion_join_style & TUBE_LIGHTING_ON) + +#endif /* GL_32 */ + +/* ====================================================== */ +#ifdef OPENGL_10 + +#if defined(_WIN32) +#include +#pragma warning (disable:4244) /* disable bogus conversion warnings */ +#endif +#include +#include + +/* +#define N3F_F(x) { \ + float nnn[3]; \ + nnn[0] = - (float) x[0]; \ + nnn[1] = - (float) x[1]; \ + nnn[2] = - (float) x[2]; \ + glNormal3fv (nnn); \ +} +#define N3F_D(x) { \ + float nnn[3]; \ + nnn[0] = - (float) x[0]; \ + nnn[1] = - (float) x[1]; \ + nnn[2] = - (float) x[2]; \ + glNormal3fv (nnn); \ +} +*/ + +#define C3F(x) glColor3fv(x) +#define T2F_F(x,y) glTexCoord2f(x,y) +#define T2F_D(x,y) glTexCoord2d(x,y) + +#define POPMATRIX() glPopMatrix() +#define PUSHMATRIX() glPushMatrix() + +#define MULTMATRIX_F(x) glMultMatrixf ((const GLfloat *)x) +#define LOADMATRIX_F(x) glLoadMatrixf ((const GLfloat *)x) + +#define MULTMATRIX_D(x) glMultMatrixd ((const GLdouble *)x) +#define LOADMATRIX_D(x) glLoadMatrixd ((const GLdouble *)x) + +#define __IS_LIGHTING_ON (glIsEnabled(GL_LIGHTING)) + +/* ====================================================== */ +#ifdef AUTO_TEXTURE + +#define BGNTMESH(i,len) { \ + if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))(i,len);\ + glBegin (GL_TRIANGLE_STRIP); \ +} + +#define BGNPOLYGON() { \ + if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))();\ + glBegin (GL_POLYGON); \ +} + +#define N3F_F(x) { \ + if(_gle_gc -> n3f_gen_texture) (*(_gle_gc -> n3f_gen_texture))(x); \ + glNormal3fv(x); \ +} + +#define N3F_D(x) { \ + if(_gle_gc -> n3d_gen_texture) (*(_gle_gc -> n3d_gen_texture))(x); \ + glNormal3dv(x); \ +} + +#define V3F_F(x,j,id) { \ + if(_gle_gc -> v3f_gen_texture) (*(_gle_gc -> v3f_gen_texture))(x,j,id);\ + glVertex3fv(x); \ +} + +#define V3F_D(x,j,id) { \ + if(_gle_gc -> v3d_gen_texture) (*(_gle_gc -> v3d_gen_texture))(x,j,id); \ + glVertex3dv(x); \ +} + +#define ENDTMESH() { \ + if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \ + glEnd (); \ +} + +#define ENDPOLYGON() { \ + if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \ + glEnd (); \ +} + +/* ====================================================== */ +#else /* AUTO_TEXTURE */ + +#define BGNTMESH(i,len) glBegin (GL_TRIANGLE_STRIP); +#define BGNPOLYGON() glBegin (GL_POLYGON); + +#define N3F_F(x) glNormal3fv(x) +#define N3F_D(x) glNormal3dv(x) +#define V3F_F(x,j,id) glVertex3fv(x); +#define V3F_D(x,j,id) glVertex3dv(x); + +#define ENDTMESH() glEnd () +#define ENDPOLYGON() glEnd() + +#endif /* AUTO_TEXTURE */ + +#endif /* OPENGL_10 */ + +/* ====================================================== */ + + +#endif /* __GLE_PORT_H__ */ +/* ================== END OF FILE ======================= */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/rot.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/rot.h new file mode 100644 index 0000000..91083e9 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/rot.h @@ -0,0 +1,98 @@ + +/* + * rot.h + * + * FUNCTION: + * rotation matrix utilities + * + * HISTORY: + * Linas Vepstas Aug 1990 + */ + +/* ========================================================== */ +/* + * The MACROS below generate and return more traditional rotation + * matrices -- matrices for rotations about principal axes. + */ +/* ========================================================== */ + +#define ROTX_CS(m,cosine,sine) \ +{ \ + /* rotation about the x-axis */ \ + \ + m[0][0] = 1.0; \ + m[0][1] = 0.0; \ + m[0][2] = 0.0; \ + m[0][3] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = (cosine); \ + m[1][2] = (sine); \ + m[1][3] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = -(sine); \ + m[2][2] = (cosine); \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ + +#define ROTY_CS(m,cosine,sine) \ +{ \ + /* rotation about the y-axis */ \ + \ + m[0][0] = (cosine); \ + m[0][1] = 0.0; \ + m[0][2] = -(sine); \ + m[0][3] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = 1.0; \ + m[1][2] = 0.0; \ + m[1][3] = 0.0; \ + \ + m[2][0] = (sine); \ + m[2][1] = 0.0; \ + m[2][2] = (cosine); \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ + +#define ROTZ_CS(m,cosine,sine) \ +{ \ + /* rotation about the z-axis */ \ + \ + m[0][0] = (cosine); \ + m[0][1] = (sine); \ + m[0][2] = 0.0; \ + m[0][3] = 0.0; \ + \ + m[1][0] = -(sine); \ + m[1][1] = (cosine); \ + m[1][2] = 0.0; \ + m[1][3] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = 0.0; \ + m[2][2] = 1.0; \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/segment.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/segment.h new file mode 100644 index 0000000..8d1cf04 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/segment.h @@ -0,0 +1,98 @@ + +/* + * MODULE: segment.h + * + * FUNCTION: + * Contains function prototypes for segment drawing subroutines. + * These are used only internally, and are not to be exported to + * the user. + * + * HISTORY: + * Create by Linas Vepstas + * Added tube.h include to define gleDouble, tad February 2002 + */ + +/* ============================================================ */ + +#include "tube.h" + +extern void draw_segment_plain (int ncp, /* number of contour points */ + gleDouble front_contour[][3], + gleDouble back_contour[][3], + int inext, double len); + +extern void draw_segment_color (int ncp, /* number of contour points */ + gleDouble front_contour[][3], + gleDouble back_contour[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_segment_edge_n (int ncp, /* number of contour points */ + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + int inext, double len); + +extern void draw_segment_c_and_edge_n (int ncp, + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_segment_facet_n (int ncp, + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + int inext, double len); + +extern void draw_segment_c_and_facet_n (int ncp, + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +/* ============================================================ */ + +extern void draw_binorm_segment_edge_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + int inext, double len); + +extern void draw_binorm_segment_c_and_edge_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_binorm_segment_facet_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + int inext, double len); + +extern void draw_binorm_segment_c_and_facet_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_angle_style_back_cap (int ncp, /* number of contour points */ + gleDouble bi[3], /* biscetor */ + gleDouble point_array[][3]); /* polyline */ + +/* -------------------------- end of file -------------------------------- */ + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/tube.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/tube.h new file mode 100644 index 0000000..c303e19 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/tube.h @@ -0,0 +1,203 @@ +/* + * tube.h + * + * FUNCTION: + * Tubing and Extrusion header file. + * This file provides protypes and defines for the extrusion + * and tubing primitives. + * + * HISTORY: + * Linas Vepstas 1990, 1991 + */ + +#ifndef __TUBE_H__ +#define __TUBE_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + GLE API revision history: + + GLE_API_VERSION is updated to reflect GLE API changes (interface + changes, semantic changes, deletions, or additions). + + GLE_API_VERSION=228 GLUT 3.7 release of GLE. +**/ +#ifndef GLE_API_VERSION /* allow this to be overriden */ +#define GLE_API_VERSION 228 +#endif + +/* some types */ +#ifndef gleDouble + #define gleDouble double +#endif +typedef gleDouble gleAffine[2][3]; + +/* ====================================================== */ + +/* defines for tubing join styles */ +#define TUBE_JN_RAW 0x1 +#define TUBE_JN_ANGLE 0x2 +#define TUBE_JN_CUT 0x3 +#define TUBE_JN_ROUND 0x4 +#define TUBE_JN_MASK 0xf /* mask bits */ +#define TUBE_JN_CAP 0x10 + +/* determine how normal vectors are to be handled */ +#define TUBE_NORM_FACET 0x100 +#define TUBE_NORM_EDGE 0x200 +#define TUBE_NORM_PATH_EDGE 0x400 /* for spiral, lathe, helix primitives */ +#define TUBE_NORM_MASK 0xf00 /* mask bits */ + +/* closed or open countours */ +#define TUBE_CONTOUR_CLOSED 0x1000 + +#define GLE_TEXTURE_ENABLE 0x10000 +#define GLE_TEXTURE_STYLE_MASK 0xff +#define GLE_TEXTURE_VERTEX_FLAT 1 +#define GLE_TEXTURE_NORMAL_FLAT 2 +#define GLE_TEXTURE_VERTEX_CYL 3 +#define GLE_TEXTURE_NORMAL_CYL 4 +#define GLE_TEXTURE_VERTEX_SPH 5 +#define GLE_TEXTURE_NORMAL_SPH 6 +#define GLE_TEXTURE_VERTEX_MODEL_FLAT 7 +#define GLE_TEXTURE_NORMAL_MODEL_FLAT 8 +#define GLE_TEXTURE_VERTEX_MODEL_CYL 9 +#define GLE_TEXTURE_NORMAL_MODEL_CYL 10 +#define GLE_TEXTURE_VERTEX_MODEL_SPH 11 +#define GLE_TEXTURE_NORMAL_MODEL_SPH 12 + +#ifdef GL_32 +/* HACK for GL 3.2 -- needed because no way to tell if lighting is on. */ +#define TUBE_LIGHTING_ON 0x80000000 + +#define gleExtrusion extrusion +#define gleSetJoinStyle setjoinstyle +#define gleGetJoinStyle getjoinstyle +#define glePolyCone polycone +#define glePolyCylinder polycylinder +#define gleSuperExtrusion super_extrusion +#define gleTwistExtrusion twist_extrusion +#define gleSpiral spiral +#define gleLathe lathe +#define gleHelicoid helicoid +#define gleToroid toroid +#define gleScrew screw + +#endif /* GL_32 */ + +extern int gleGetJoinStyle (void); +extern void gleSetJoinStyle (int style); /* bitwise OR of flags */ +extern int gleGetNumSlices(void); +extern void gleSetNumSlices(int slices); + +/* draw polyclinder, specified as a polyline */ +extern void glePolyCylinder (int npoints, /* num points in polyline */ + gleDouble point_array[][3], /* polyline vertces */ + float color_array[][3], /* colors at polyline verts */ + gleDouble radius); /* radius of polycylinder */ + +/* draw polycone, specified as a polyline with radii */ +extern void glePolyCone (int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3], /* colors at polyline verts */ + gleDouble radius_array[]); /* cone radii at polyline verts */ + +/* extrude arbitrary 2D contour along arbitrary 3D path */ +extern void gleExtrusion (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3]); /* colors at polyline verts */ + +/* extrude 2D contour, specifying local rotations (twists) */ +extern void gleTwistExtrusion (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3], /* color at polyline verts */ + gleDouble twist_array[]); /* countour twists (in degrees) */ + +/* extrude 2D contour, specifying local affine tranformations */ +extern void gleSuperExtrusion (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3], /* color at polyline verts */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + +/* spiral moves contour along helical path by parallel transport */ +extern void gleSpiral (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* lathe moves contour along helical path by helically shearing 3D space */ +extern void gleLathe (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* similar to spiral, except contour is a circle */ +extern void gleHelicoid (gleDouble rToroid, /* circle contour (torus) radius */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* similar to lathe, except contour is a circle */ +extern void gleToroid (gleDouble rToroid, /* circle contour (torus) radius */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* draws a screw shape */ +extern void gleScrew (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + gleDouble startz, /* start of segment */ + gleDouble endz, /* end of segment */ + gleDouble twist); /* number of rotations */ + +extern void gleTextureMode (int mode); + +#ifdef __cplusplus +} + +#endif +#endif /* __TUBE_H__ */ +/* ================== END OF FILE ======================= */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/tube_gc.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/tube_gc.h new file mode 100644 index 0000000..ccd2853 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/tube_gc.h @@ -0,0 +1,78 @@ + +/* + * tube_gc.h + * + * FUNCTION: + * This file allows for easy changes to changes in the way the extrusion + * library handles state info (i.e. context). + * + * HISTORY: + * Linas Vepstas --- February 1993 + * Added auto texture coord generation hacks, Linas April 1994 + * Added tube.h include to define gleDouble, tad February 2002 + */ + +#include "tube.h" +#include "port.h" /* for gleVector */ + +typedef float gleColor[3]; +typedef double gleTwoVec[2]; + +typedef struct { + + /* public methods */ + void (*bgn_gen_texture) (int, double); + void (*n3f_gen_texture) (float *); + void (*n3d_gen_texture) (double *); + void (*v3f_gen_texture) (float *, int, int); + void (*v3d_gen_texture) (double *, int, int); + void (*end_gen_texture) (void); + + /* protected members -- "general knowledge" stuff */ + int join_style; + + /* arguments passed into extrusion code */ + int ncp; /* number of contour points */ + gleTwoVec *contour; /* 2D contour */ + gleTwoVec *cont_normal; /* 2D contour normals */ + gleDouble *up; /* up vector */ + int npoints; /* number of points in polyline */ + gleVector *point_array; /* path */ + gleColor *color_array; /* path colors */ + gleAffine *xform_array; /* contour xforms */ + + /* private members, used by texturing code */ + int num_vert; + int segment_number; + double segment_length; + double accum_seg_len; + double prev_x; + double prev_y; + + void (*save_bgn_gen_texture) (int, double); + void (*save_n3f_gen_texture) (float *); + void (*save_n3d_gen_texture) (double *); + void (*save_v3f_gen_texture) (float *, int, int); + void (*save_v3d_gen_texture) (double *, int, int); + void (*save_end_gen_texture) (void); + +} gleGC; + +extern gleGC *_gle_gc; +extern gleGC * gleCreateGC (void); + +#define INIT_GC() {if (!_gle_gc) _gle_gc = gleCreateGC(); } +#define extrusion_join_style (_gle_gc->join_style) + +#define __TUBE_CLOSE_CONTOUR (extrusion_join_style & TUBE_CONTOUR_CLOSED) +#define __TUBE_DRAW_CAP (extrusion_join_style & TUBE_JN_CAP) +#define __TUBE_DRAW_FACET_NORMALS (extrusion_join_style & TUBE_NORM_FACET) +#define __TUBE_DRAW_PATH_EDGE_NORMALS (extrusion_join_style & TUBE_NORM_PATH_EDGE) + +#define __TUBE_STYLE (extrusion_join_style & TUBE_JN_MASK) +#define __TUBE_RAW_JOIN (extrusion_join_style & TUBE_JN_RAW) +#define __TUBE_CUT_JOIN (extrusion_join_style & TUBE_JN_CUT) +#define __TUBE_ANGLE_JOIN (extrusion_join_style & TUBE_JN_ANGLE) +#define __TUBE_ROUND_JOIN (extrusion_join_style & TUBE_JN_ROUND) + +/* ======================= END OF FILE ========================== */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/vvector.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/vvector.h new file mode 100644 index 0000000..b58dcd6 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Headers/vvector.h @@ -0,0 +1,1339 @@ + +/* + * vvector.h + * + * FUNCTION: + * This file contains a number of utilities useful for handling + * 3D vectors + * + * HISTORY: + * Written by Linas Vepstas, August 1991 + * Added 2D code, March 1993 + * Added Outer products, C++ proofed, Linas Vepstas October 1993 + */ + +#ifndef __GUTIL_VECTOR_H__ +#define __GUTIL_VECTOR_H__ + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + + +#include +#include "port.h" + +/* ========================================================== */ +/* Zero out a 2D vector */ + +#define VEC_ZERO_2(a) \ +{ \ + (a)[0] = (a)[1] = 0.0; \ +} + +/* ========================================================== */ +/* Zero out a 3D vector */ + +#define VEC_ZERO(a) \ +{ \ + (a)[0] = (a)[1] = (a)[2] = 0.0; \ +} + +/* ========================================================== */ +/* Zero out a 4D vector */ + +#define VEC_ZERO_4(a) \ +{ \ + (a)[0] = (a)[1] = (a)[2] = (a)[3] = 0.0; \ +} + +/* ========================================================== */ +/* Vector copy */ + +#define VEC_COPY_2(b,a) \ +{ \ + (b)[0] = (a)[0]; \ + (b)[1] = (a)[1]; \ +} + +/* ========================================================== */ +/* Copy 3D vector */ + +#define VEC_COPY(b,a) \ +{ \ + (b)[0] = (a)[0]; \ + (b)[1] = (a)[1]; \ + (b)[2] = (a)[2]; \ +} + +/* ========================================================== */ +/* Copy 4D vector */ + +#define VEC_COPY_4(b,a) \ +{ \ + (b)[0] = (a)[0]; \ + (b)[1] = (a)[1]; \ + (b)[2] = (a)[2]; \ + (b)[3] = (a)[3]; \ +} + +/* ========================================================== */ +/* Vector difference */ + +#define VEC_DIFF_2(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] - (v1)[0]; \ + (v21)[1] = (v2)[1] - (v1)[1]; \ +} + +/* ========================================================== */ +/* Vector difference */ + +#define VEC_DIFF(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] - (v1)[0]; \ + (v21)[1] = (v2)[1] - (v1)[1]; \ + (v21)[2] = (v2)[2] - (v1)[2]; \ +} + +/* ========================================================== */ +/* Vector difference */ + +#define VEC_DIFF_4(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] - (v1)[0]; \ + (v21)[1] = (v2)[1] - (v1)[1]; \ + (v21)[2] = (v2)[2] - (v1)[2]; \ + (v21)[3] = (v2)[3] - (v1)[3]; \ +} + +/* ========================================================== */ +/* Vector sum */ + +#define VEC_SUM_2(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] + (v1)[0]; \ + (v21)[1] = (v2)[1] + (v1)[1]; \ +} + +/* ========================================================== */ +/* Vector sum */ + +#define VEC_SUM(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] + (v1)[0]; \ + (v21)[1] = (v2)[1] + (v1)[1]; \ + (v21)[2] = (v2)[2] + (v1)[2]; \ +} + +/* ========================================================== */ +/* Vector sum */ + +#define VEC_SUM_4(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] + (v1)[0]; \ + (v21)[1] = (v2)[1] + (v1)[1]; \ + (v21)[2] = (v2)[2] + (v1)[2]; \ + (v21)[3] = (v2)[3] + (v1)[3]; \ +} + +/* ========================================================== */ +/* scalar times vector */ + +#define VEC_SCALE_2(c,a,b) \ +{ \ + (c)[0] = (a)*(b)[0]; \ + (c)[1] = (a)*(b)[1]; \ +} + +/* ========================================================== */ +/* scalar times vector */ + +#define VEC_SCALE(c,a,b) \ +{ \ + (c)[0] = (a)*(b)[0]; \ + (c)[1] = (a)*(b)[1]; \ + (c)[2] = (a)*(b)[2]; \ +} + +/* ========================================================== */ +/* scalar times vector */ + +#define VEC_SCALE_4(c,a,b) \ +{ \ + (c)[0] = (a)*(b)[0]; \ + (c)[1] = (a)*(b)[1]; \ + (c)[2] = (a)*(b)[2]; \ + (c)[3] = (a)*(b)[3]; \ +} + +/* ========================================================== */ +/* accumulate scaled vector */ + +#define VEC_ACCUM_2(c,a,b) \ +{ \ + (c)[0] += (a)*(b)[0]; \ + (c)[1] += (a)*(b)[1]; \ +} + +/* ========================================================== */ +/* accumulate scaled vector */ + +#define VEC_ACCUM(c,a,b) \ +{ \ + (c)[0] += (a)*(b)[0]; \ + (c)[1] += (a)*(b)[1]; \ + (c)[2] += (a)*(b)[2]; \ +} + +/* ========================================================== */ +/* accumulate scaled vector */ + +#define VEC_ACCUM_4(c,a,b) \ +{ \ + (c)[0] += (a)*(b)[0]; \ + (c)[1] += (a)*(b)[1]; \ + (c)[2] += (a)*(b)[2]; \ + (c)[3] += (a)*(b)[3]; \ +} + +/* ========================================================== */ +/* Vector dot product */ + +#define VEC_DOT_PRODUCT_2(c,a,b) \ +{ \ + c = (a)[0]*(b)[0] + (a)[1]*(b)[1]; \ +} + +/* ========================================================== */ +/* Vector dot product */ + +#define VEC_DOT_PRODUCT(c,a,b) \ +{ \ + c = (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2]; \ +} + +/* ========================================================== */ +/* Vector dot product */ + +#define VEC_DOT_PRODUCT_4(c,a,b) \ +{ \ + c = (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2] + (a)[3]*(b)[3] ; \ +} + +/* ========================================================== */ +/* vector impact parameter (squared) */ + +#define VEC_IMPACT_SQ(bsq,direction,position) \ +{ \ + gleDouble vlen, llel; \ + VEC_DOT_PRODUCT (vlen, position, position); \ + VEC_DOT_PRODUCT (llel, direction, position); \ + bsq = vlen - llel*llel; \ +} + +/* ========================================================== */ +/* vector impact parameter */ + +#define VEC_IMPACT(bsq,direction,position) \ +{ \ + VEC_IMPACT_SQ(bsq,direction,position); \ + bsq = sqrt (bsq); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_LENGTH_2(vlen,a) \ +{ \ + vlen = a[0]*a[0] + a[1]*a[1]; \ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_LENGTH(vlen,a) \ +{ \ + vlen = (a)[0]*(a)[0] + (a)[1]*(a)[1]; \ + vlen += (a)[2]*(a)[2]; \ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_LENGTH_4(vlen,a) \ +{ \ + vlen = (a)[0]*(a)[0] + (a)[1]*(a)[1]; \ + vlen += (a)[2]*(a)[2]; \ + vlen += (a)[3] * (a)[3]; \ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* distance between two points */ + +#define VEC_DISTANCE(vlen,va,vb) \ +{ \ + gleDouble tmp[4]; \ + VEC_DIFF (tmp, vb, va); \ + VEC_LENGTH (vlen, tmp); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_CONJUGATE_LENGTH(vlen,a) \ +{ \ + vlen = 1.0 - a[0]*a[0] - a[1]*a[1] - a[2]*a[2];\ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_NORMALIZE(a) \ +{ \ + double vlen; \ + VEC_LENGTH (vlen,a); \ + if (vlen != 0.0) { \ + vlen = 1.0 / vlen; \ + a[0] *= vlen; \ + a[1] *= vlen; \ + a[2] *= vlen; \ + } \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_RENORMALIZE(a,newlen) \ +{ \ + double vlen; \ + VEC_LENGTH (vlen,a); \ + if (vlen != 0.0) { \ + vlen = newlen / vlen; \ + a[0] *= vlen; \ + a[1] *= vlen; \ + a[2] *= vlen; \ + } \ +} + +/* ========================================================== */ +/* 3D Vector cross product yeilding vector */ + +#define VEC_CROSS_PRODUCT(c,a,b) \ +{ \ + c[0] = (a)[1] * (b)[2] - (a)[2] * (b)[1]; \ + c[1] = (a)[2] * (b)[0] - (a)[0] * (b)[2]; \ + c[2] = (a)[0] * (b)[1] - (a)[1] * (b)[0]; \ +} + +/* ========================================================== */ +/* Vector perp -- assumes that n is of unit length + * accepts vector v, subtracts out any component parallel to n */ + +#define VEC_PERP(vp,v,n) \ +{ \ + double vdot; \ + \ + VEC_DOT_PRODUCT (vdot, v, n); \ + vp[0] = (v)[0] - (vdot) * (n)[0]; \ + vp[1] = (v)[1] - (vdot) * (n)[1]; \ + vp[2] = (v)[2] - (vdot) * (n)[2]; \ +} + +/* ========================================================== */ +/* Vector parallel -- assumes that n is of unit length + * accepts vector v, subtracts out any component perpendicular to n */ + +#define VEC_PARALLEL(vp,v,n) \ +{ \ + double vdot; \ + \ + VEC_DOT_PRODUCT (vdot, v, n); \ + vp[0] = (vdot) * (n)[0]; \ + vp[1] = (vdot) * (n)[1]; \ + vp[2] = (vdot) * (n)[2]; \ +} + +/* ========================================================== */ +/* Vector reflection -- assumes n is of unit length */ +/* Takes vector v, reflects it against reflector n, and returns vr */ + +#define VEC_REFLECT(vr,v,n) \ +{ \ + double vdot; \ + \ + VEC_DOT_PRODUCT (vdot, v, n); \ + vr[0] = (v)[0] - 2.0 * (vdot) * (n)[0]; \ + vr[1] = (v)[1] - 2.0 * (vdot) * (n)[1]; \ + vr[2] = (v)[2] - 2.0 * (vdot) * (n)[2]; \ +} + +/* ========================================================== */ +/* Vector blending */ +/* Takes two vectors a, b, blends them together */ + +#define VEC_BLEND(vr,sa,a,sb,b) \ +{ \ + \ + vr[0] = (sa) * (a)[0] + (sb) * (b)[0]; \ + vr[1] = (sa) * (a)[1] + (sb) * (b)[1]; \ + vr[2] = (sa) * (a)[2] + (sb) * (b)[2]; \ +} + +/* ========================================================== */ +/* Vector print */ + +#define VEC_PRINT_2(a) \ +{ \ + double vlen; \ + VEC_LENGTH_2 (vlen, a); \ + printf (" a is %f %f length of a is %f \n", a[0], a[1], vlen); \ +} + +/* ========================================================== */ +/* Vector print */ + +#define VEC_PRINT(a) \ +{ \ + double vlen; \ + VEC_LENGTH (vlen, (a)); \ + printf (" a is %f %f %f length of a is %f \n", (a)[0], (a)[1], (a)[2], vlen); \ +} + +/* ========================================================== */ +/* Vector print */ + +#define VEC_PRINT_4(a) \ +{ \ + double vlen; \ + VEC_LENGTH_4 (vlen, (a)); \ + printf (" a is %f %f %f %f length of a is %f \n", \ + (a)[0], (a)[1], (a)[2], (a)[3], vlen); \ +} + +/* ========================================================== */ +/* print matrix */ + +#define MAT_PRINT_4X4(mmm) { \ + int i,j; \ + printf ("matrix mmm is \n"); \ + if (mmm == NULL) { \ + printf (" Null \n"); \ + } else { \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + printf ("%f ", mmm[i][j]); \ + } \ + printf (" \n"); \ + } \ + } \ +} + +/* ========================================================== */ +/* print matrix */ + +#define MAT_PRINT_3X3(mmm) { \ + int i,j; \ + printf ("matrix mmm is \n"); \ + if (mmm == NULL) { \ + printf (" Null \n"); \ + } else { \ + for (i=0; i<3; i++) { \ + for (j=0; j<3; j++) { \ + printf ("%f ", mmm[i][j]); \ + } \ + printf (" \n"); \ + } \ + } \ +} + +/* ========================================================== */ +/* print matrix */ + +#define MAT_PRINT_2X3(mmm) { \ + int i,j; \ + printf ("matrix mmm is \n"); \ + if (mmm == NULL) { \ + printf (" Null \n"); \ + } else { \ + for (i=0; i<2; i++) { \ + for (j=0; j<3; j++) { \ + printf ("%f ", mmm[i][j]); \ + } \ + printf (" \n"); \ + } \ + } \ +} + +/* ========================================================== */ +/* initialize matrix */ + +#define IDENTIFY_MATRIX_3X3(m) \ +{ \ + m[0][0] = 1.0; \ + m[0][1] = 0.0; \ + m[0][2] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = 1.0; \ + m[1][2] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = 0.0; \ + m[2][2] = 1.0; \ +} + +/* ========================================================== */ +/* initialize matrix */ + +#define IDENTIFY_MATRIX_4X4(m) \ +{ \ + m[0][0] = 1.0; \ + m[0][1] = 0.0; \ + m[0][2] = 0.0; \ + m[0][3] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = 1.0; \ + m[1][2] = 0.0; \ + m[1][3] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = 0.0; \ + m[2][2] = 1.0; \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_2X2(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_2X3(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + b[0][2] = a[0][2]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[1][2]; \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_3X3(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + b[0][2] = a[0][2]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[1][2]; \ + \ + b[2][0] = a[2][0]; \ + b[2][1] = a[2][1]; \ + b[2][2] = a[2][2]; \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_4X4(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + b[0][2] = a[0][2]; \ + b[0][3] = a[0][3]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[1][2]; \ + b[1][3] = a[1][3]; \ + \ + b[2][0] = a[2][0]; \ + b[2][1] = a[2][1]; \ + b[2][2] = a[2][2]; \ + b[2][3] = a[2][3]; \ + \ + b[3][0] = a[3][0]; \ + b[3][1] = a[3][1]; \ + b[3][2] = a[3][2]; \ + b[3][3] = a[3][3]; \ +} + +/* ========================================================== */ +/* matrix transpose */ + +#define TRANSPOSE_MATRIX_2X2(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[1][0]; \ + \ + b[1][0] = a[0][1]; \ + b[1][1] = a[1][1]; \ +} + +/* ========================================================== */ +/* matrix transpose */ + +#define TRANSPOSE_MATRIX_3X3(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[1][0]; \ + b[0][2] = a[2][0]; \ + \ + b[1][0] = a[0][1]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[2][1]; \ + \ + b[2][0] = a[0][2]; \ + b[2][1] = a[1][2]; \ + b[2][2] = a[2][2]; \ +} + +/* ========================================================== */ +/* matrix transpose */ + +#define TRANSPOSE_MATRIX_4X4(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[1][0]; \ + b[0][2] = a[2][0]; \ + b[0][3] = a[3][0]; \ + \ + b[1][0] = a[0][1]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[2][1]; \ + b[1][3] = a[3][1]; \ + \ + b[2][0] = a[0][2]; \ + b[2][1] = a[1][2]; \ + b[2][2] = a[2][2]; \ + b[2][3] = a[3][2]; \ + \ + b[3][0] = a[0][3]; \ + b[3][1] = a[1][3]; \ + b[3][2] = a[2][3]; \ + b[3][3] = a[3][3]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define SCALE_MATRIX_2X2(b,s,a) \ +{ \ + b[0][0] = (s) * a[0][0]; \ + b[0][1] = (s) * a[0][1]; \ + \ + b[1][0] = (s) * a[1][0]; \ + b[1][1] = (s) * a[1][1]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define SCALE_MATRIX_3X3(b,s,a) \ +{ \ + b[0][0] = (s) * a[0][0]; \ + b[0][1] = (s) * a[0][1]; \ + b[0][2] = (s) * a[0][2]; \ + \ + b[1][0] = (s) * a[1][0]; \ + b[1][1] = (s) * a[1][1]; \ + b[1][2] = (s) * a[1][2]; \ + \ + b[2][0] = (s) * a[2][0]; \ + b[2][1] = (s) * a[2][1]; \ + b[2][2] = (s) * a[2][2]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define SCALE_MATRIX_4X4(b,s,a) \ +{ \ + b[0][0] = (s) * a[0][0]; \ + b[0][1] = (s) * a[0][1]; \ + b[0][2] = (s) * a[0][2]; \ + b[0][3] = (s) * a[0][3]; \ + \ + b[1][0] = (s) * a[1][0]; \ + b[1][1] = (s) * a[1][1]; \ + b[1][2] = (s) * a[1][2]; \ + b[1][3] = (s) * a[1][3]; \ + \ + b[2][0] = (s) * a[2][0]; \ + b[2][1] = (s) * a[2][1]; \ + b[2][2] = (s) * a[2][2]; \ + b[2][3] = (s) * a[2][3]; \ + \ + b[3][0] = s * a[3][0]; \ + b[3][1] = s * a[3][1]; \ + b[3][2] = s * a[3][2]; \ + b[3][3] = s * a[3][3]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define ACCUM_SCALE_MATRIX_2X2(b,s,a) \ +{ \ + b[0][0] += (s) * a[0][0]; \ + b[0][1] += (s) * a[0][1]; \ + \ + b[1][0] += (s) * a[1][0]; \ + b[1][1] += (s) * a[1][1]; \ +} + +/* +========================================================== */ +/* multiply matrix by scalar */ + +#define ACCUM_SCALE_MATRIX_3X3(b,s,a) \ +{ \ + b[0][0] += (s) * a[0][0]; \ + b[0][1] += (s) * a[0][1]; \ + b[0][2] += (s) * a[0][2]; \ + \ + b[1][0] += (s) * a[1][0]; \ + b[1][1] += (s) * a[1][1]; \ + b[1][2] += (s) * a[1][2]; \ + \ + b[2][0] += (s) * a[2][0]; \ + b[2][1] += (s) * a[2][1]; \ + b[2][2] += (s) * a[2][2]; \ +} + +/* +========================================================== */ +/* multiply matrix by scalar */ + +#define ACCUM_SCALE_MATRIX_4X4(b,s,a) \ +{ \ + b[0][0] += (s) * a[0][0]; \ + b[0][1] += (s) * a[0][1]; \ + b[0][2] += (s) * a[0][2]; \ + b[0][3] += (s) * a[0][3]; \ + \ + b[1][0] += (s) * a[1][0]; \ + b[1][1] += (s) * a[1][1]; \ + b[1][2] += (s) * a[1][2]; \ + b[1][3] += (s) * a[1][3]; \ + \ + b[2][0] += (s) * a[2][0]; \ + b[2][1] += (s) * a[2][1]; \ + b[2][2] += (s) * a[2][2]; \ + b[2][3] += (s) * a[2][3]; \ + \ + b[3][0] += (s) * a[3][0]; \ + b[3][1] += (s) * a[3][1]; \ + b[3][2] += (s) * a[3][2]; \ + b[3][3] += (s) * a[3][3]; \ +} + +/* +========================================================== */ +/* matrix product */ +/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ + +#define MATRIX_PRODUCT_2X2(c,a,b) \ +{ \ + c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]; \ + c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]; \ + \ + c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]; \ + c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]; \ + \ +} + +/* ========================================================== */ +/* matrix product */ +/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ + +#define MATRIX_PRODUCT_3X3(c,a,b) \ +{ \ + c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]; \ + c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]; \ + c[0][2] = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]; \ + \ + c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]; \ + c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]; \ + c[1][2] = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]; \ + \ + c[2][0] = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]; \ + c[2][1] = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]; \ + c[2][2] = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]; \ +} + +/* ========================================================== */ +/* matrix product */ +/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ + +#define MATRIX_PRODUCT_4X4(c,a,b) \ +{ \ + c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]+a[0][3]*b[3][0];\ + c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]+a[0][3]*b[3][1];\ + c[0][2] = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]+a[0][3]*b[3][2];\ + c[0][3] = a[0][0]*b[0][3]+a[0][1]*b[1][3]+a[0][2]*b[2][3]+a[0][3]*b[3][3];\ + \ + c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]+a[1][3]*b[3][0];\ + c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]+a[1][3]*b[3][1];\ + c[1][2] = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]+a[1][3]*b[3][2];\ + c[1][3] = a[1][0]*b[0][3]+a[1][1]*b[1][3]+a[1][2]*b[2][3]+a[1][3]*b[3][3];\ + \ + c[2][0] = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]+a[2][3]*b[3][0];\ + c[2][1] = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]+a[2][3]*b[3][1];\ + c[2][2] = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]+a[2][3]*b[3][2];\ + c[2][3] = a[2][0]*b[0][3]+a[2][1]*b[1][3]+a[2][2]*b[2][3]+a[2][3]*b[3][3];\ + \ + c[3][0] = a[3][0]*b[0][0]+a[3][1]*b[1][0]+a[3][2]*b[2][0]+a[3][3]*b[3][0];\ + c[3][1] = a[3][0]*b[0][1]+a[3][1]*b[1][1]+a[3][2]*b[2][1]+a[3][3]*b[3][1];\ + c[3][2] = a[3][0]*b[0][2]+a[3][1]*b[1][2]+a[3][2]*b[2][2]+a[3][3]*b[3][2];\ + c[3][3] = a[3][0]*b[0][3]+a[3][1]*b[1][3]+a[3][2]*b[2][3]+a[3][3]*b[3][3];\ +} + +/* ========================================================== */ +/* matrix times vector */ + +#define MAT_DOT_VEC_2X2(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1]; \ +} + +/* ========================================================== */ +/* matrix times vector */ + +#define MAT_DOT_VEC_3X3(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2]; \ + p[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2]; \ +} + +/* ========================================================== */ +/* matrix times vector */ + +#define MAT_DOT_VEC_4X4(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2] + m[0][3]*v[3]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2] + m[1][3]*v[3]; \ + p[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2] + m[2][3]*v[3]; \ + p[3] = m[3][0]*v[0] + m[3][1]*v[1] + m[3][2]*v[2] + m[3][3]*v[3]; \ +} + +/* ========================================================== */ +/* vector transpose times matrix */ +/* p[j] = v[0]*m[0][j] + v[1]*m[1][j] + v[2]*m[2][j]; */ + +#define VEC_DOT_MAT_3X3(p,v,m) \ +{ \ + p[0] = v[0]*m[0][0] + v[1]*m[1][0] + v[2]*m[2][0]; \ + p[1] = v[0]*m[0][1] + v[1]*m[1][1] + v[2]*m[2][1]; \ + p[2] = v[0]*m[0][2] + v[1]*m[1][2] + v[2]*m[2][2]; \ +} + +/* ========================================================== */ +/* affine matrix times vector */ +/* The matrix is assumed to be an affine matrix, with last two + * entries representing a translation */ + +#define MAT_DOT_VEC_2X3(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]; \ +} + +/* ========================================================== */ +/* inverse transpose of matrix times vector + * + * This macro computes inverse transpose of matrix m, + * and multiplies vector v into it, to yeild vector p + * + * DANGER !!! Do Not use this on normal vectors!!! + * It will leave normals the wrong length !!! + * See macro below for use on normals. + */ + +#define INV_TRANSP_MAT_DOT_VEC_2X2(p,m,v) \ +{ \ + gleDouble det; \ + \ + det = m[0][0]*m[1][1] - m[0][1]*m[1][0]; \ + p[0] = m[1][1]*v[0] - m[1][0]*v[1]; \ + p[1] = - m[0][1]*v[0] + m[0][0]*v[1]; \ + \ + /* if matrix not singular, and not orthonormal, then renormalize */ \ + if ((det!=1.0) && (det != 0.0)) { \ + det = 1.0 / det; \ + p[0] *= det; \ + p[1] *= det; \ + } \ +} + +/* ========================================================== */ +/* transform normal vector by inverse transpose of matrix + * and then renormalize the vector + * + * This macro computes inverse transpose of matrix m, + * and multiplies vector v into it, to yeild vector p + * Vector p is then normalized. + */ + + +#define NORM_XFORM_2X2(p,m,v) \ +{ \ + double mlen; \ + \ + /* do nothing if off-diagonals are zero and diagonals are \ + * equal */ \ + if ((m[0][1] != 0.0) || (m[1][0] != 0.0) || (m[0][0] != m[1][1])) { \ + p[0] = m[1][1]*v[0] - m[1][0]*v[1]; \ + p[1] = - m[0][1]*v[0] + m[0][0]*v[1]; \ + \ + mlen = p[0]*p[0] + p[1]*p[1]; \ + mlen = 1.0 / sqrt (mlen); \ + p[0] *= mlen; \ + p[1] *= mlen; \ + } else { \ + VEC_COPY_2 (p, v); \ + } \ +} + +/* ========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define OUTER_PRODUCT_2X2(m,v,t) \ +{ \ + m[0][0] = v[0] * t[0]; \ + m[0][1] = v[0] * t[1]; \ + \ + m[1][0] = v[1] * t[0]; \ + m[1][1] = v[1] * t[1]; \ +} + +/* ========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define OUTER_PRODUCT_3X3(m,v,t) \ +{ \ + m[0][0] = v[0] * t[0]; \ + m[0][1] = v[0] * t[1]; \ + m[0][2] = v[0] * t[2]; \ + \ + m[1][0] = v[1] * t[0]; \ + m[1][1] = v[1] * t[1]; \ + m[1][2] = v[1] * t[2]; \ + \ + m[2][0] = v[2] * t[0]; \ + m[2][1] = v[2] * t[1]; \ + m[2][2] = v[2] * t[2]; \ +} + +/* ========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define OUTER_PRODUCT_4X4(m,v,t) \ +{ \ + m[0][0] = v[0] * t[0]; \ + m[0][1] = v[0] * t[1]; \ + m[0][2] = v[0] * t[2]; \ + m[0][3] = v[0] * t[3]; \ + \ + m[1][0] = v[1] * t[0]; \ + m[1][1] = v[1] * t[1]; \ + m[1][2] = v[1] * t[2]; \ + m[1][3] = v[1] * t[3]; \ + \ + m[2][0] = v[2] * t[0]; \ + m[2][1] = v[2] * t[1]; \ + m[2][2] = v[2] * t[2]; \ + m[2][3] = v[2] * t[3]; \ + \ + m[3][0] = v[3] * t[0]; \ + m[3][1] = v[3] * t[1]; \ + m[3][2] = v[3] * t[2]; \ + m[3][3] = v[3] * t[3]; \ +} + +/* +========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define ACCUM_OUTER_PRODUCT_2X2(m,v,t) \ +{ \ + m[0][0] += v[0] * t[0]; \ + m[0][1] += v[0] * t[1]; \ + \ + m[1][0] += v[1] * t[0]; \ + m[1][1] += v[1] * t[1]; \ +} + +/* +========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define ACCUM_OUTER_PRODUCT_3X3(m,v,t) \ +{ \ + m[0][0] += v[0] * t[0]; \ + m[0][1] += v[0] * t[1]; \ + m[0][2] += v[0] * t[2]; \ + \ + m[1][0] += v[1] * t[0]; \ + m[1][1] += v[1] * t[1]; \ + m[1][2] += v[1] * t[2]; \ + \ + m[2][0] += v[2] * t[0]; \ + m[2][1] += v[2] * t[1]; \ + m[2][2] += v[2] * t[2]; \ +} + +/* +========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define ACCUM_OUTER_PRODUCT_4X4(m,v,t) \ +{ \ + m[0][0] += v[0] * t[0]; \ + m[0][1] += v[0] * t[1]; \ + m[0][2] += v[0] * t[2]; \ + m[0][3] += v[0] * t[3]; \ + \ + m[1][0] += v[1] * t[0]; \ + m[1][1] += v[1] * t[1]; \ + m[1][2] += v[1] * t[2]; \ + m[1][3] += v[1] * t[3]; \ + \ + m[2][0] += v[2] * t[0]; \ + m[2][1] += v[2] * t[1]; \ + m[2][2] += v[2] * t[2]; \ + m[2][3] += v[2] * t[3]; \ + \ + m[3][0] += v[3] * t[0]; \ + m[3][1] += v[3] * t[1]; \ + m[3][2] += v[3] * t[2]; \ + m[3][3] += v[3] * t[3]; \ +} + +/* +========================================================== */ +/* determinant of matrix + * + * Computes determinant of matrix m, returning d + */ + +#define DETERMINANT_2X2(d,m) \ +{ \ + d = m[0][0] * m[1][1] - m[0][1] * m[1][0]; \ +} + +/* ========================================================== */ +/* determinant of matrix + * + * Computes determinant of matrix m, returning d + */ + +#define DETERMINANT_3X3(d,m) \ +{ \ + d = m[0][0] * (m[1][1]*m[2][2] - m[1][2] * m[2][1]); \ + d -= m[0][1] * (m[1][0]*m[2][2] - m[1][2] * m[2][0]); \ + d += m[0][2] * (m[1][0]*m[2][1] - m[1][1] * m[2][0]); \ +} + +/* ========================================================== */ +/* i,j,th cofactor of a 4x4 matrix + * + */ + +#define COFACTOR_4X4_IJ(fac,m,i,j) \ +{ \ + int ii[4], jj[4], k; \ + \ + /* compute which row, columnt to skip */ \ + for (k=0; k + + + + IBDocumentLocation + 4 104 410 240 0 0 1152 848 + IBEditorPositions + + 29 + 19 615 246 44 0 0 1152 848 + + IBFramework Version + 291.0 + IBGroupedObjects + + IBLastGroupID + 1 + IBOpenObjects + + 29 + + IBSystem Version + 6I32 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUT.nib/objects.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUT.nib/objects.nib new file mode 100644 index 0000000..8a7140e Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUT.nib/objects.nib differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/classes.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/classes.nib new file mode 100644 index 0000000..7e85eb1 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/classes.nib @@ -0,0 +1,13 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {toggleWindow = id; }; + CLASS = GLUTClipboardController; + LANGUAGE = ObjC; + OUTLETS = {_infoText = id; _scrollView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/info.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/info.nib new file mode 100644 index 0000000..867735d --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 63 221 356 240 0 0 1600 1178 + IBFramework Version + 263.2 + IBSystem Version + 5S41 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/objects.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/objects.nib new file mode 100644 index 0000000..29125d4 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTClipboard.nib/objects.nib differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/classes.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/classes.nib new file mode 100644 index 0000000..c675963 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/classes.nib @@ -0,0 +1,73 @@ +{ + IBClasses = ( + { + ACTIONS = {save = id; saveAs = id; }; + CLASS = FirstResponder; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; + }, + { + ACTIONS = { + cancel = id; + joyAssign = id; + joyDevice = id; + joyElement = id; + joyInvert = id; + launchDebugMode = id; + launchGamemodeCaptureSingle = id; + launchIconic = id; + launchUseCurrWD = id; + launchUseExtDesktop = id; + launchUseMacOSCoords = id; + mouseEanbleEmulation = id; + mouseMiddleMenu = id; + mouseRightMenu = id; + ok = id; + spaceAssign = id; + spaceDevice = id; + spaceElement = id; + spaceInvert = id; + }; + CLASS = GLUTPreferencesController; + LANGUAGE = ObjC; + OUTLETS = { + joyAssign = NSButton; + joyAssignNote = NSTextField; + joyAssignWarningIcon = NSImageView; + joyDeviceMenu = NSPopUpButton; + joyElement = NSTextField; + joyInputMenu = NSPopUpButton; + joyInverted = NSButton; + launchDebugMode = NSButton; + launchFadeTime = NSTextField; + launchGamemodeCaptureSingle = NSButton; + launchIconic = NSButton; + launchInitHeight = NSTextField; + launchInitWidth = NSTextField; + launchInitX = NSTextField; + launchInitY = NSTextField; + launchMenuIdle = NSTextField; + launchSyncToVBL = NSButton; + launchUseCurrWD = NSButton; + launchUseExtendedDesktop = NSButton; + launchUseMacOSXCoords = NSButton; + mouseAssignWarningIcon = NSImageView; + mouseAssignWarningText = NSTextField; + mouseDetected = NSTextField; + mouseEmulation = NSButton; + mouseMiddleConfigMenu = NSPopUpButton; + mouseRightConfigMenu = NSPopUpButton; + prefsTabView = NSTabView; + spaceAssign = NSButton; + spaceAssignNote = NSTextField; + spaceAssignWarningIcon = NSImageView; + spaceDeviceMenu = NSPopUpButton; + spaceElement = NSTextField; + spaceInputMenu = NSPopUpButton; + spaceInverted = NSButton; + }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/info.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/info.nib new file mode 100644 index 0000000..216c8dc --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 16 329 410 240 0 0 1920 1178 + IBFramework Version + 439.0 + IBOpenObjects + + 205 + + IBSystem Version + 8G32 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/objects.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/objects.nib new file mode 100644 index 0000000..7598f2c Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTPreferences.nib/objects.nib differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTUI.strings b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTUI.strings new file mode 100644 index 0000000..6db3c5c Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/GLUTUI.strings differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/InfoPlist.strings b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..6f78b89 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/English.lproj/InfoPlist.strings differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/Info.plist b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/Info.plist new file mode 100644 index 0000000..e8fc9d6 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + GLUT + CFBundleGetInfoString + 3.4.0, Copyright (c) 2001-2008 Apple Inc., All Rights Reserved + CFBundleIdentifier + com.apple.glut + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.4.0 + CFBundleSignature + ???? + CFBundleVersion + GLUT-3.4.0 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/blankCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/blankCursor.tiff new file mode 100644 index 0000000..a2b0cf1 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/blankCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomCursor.tiff new file mode 100644 index 0000000..c3f4795 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomleftCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomleftCursor.tiff new file mode 100644 index 0000000..274529f Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomleftCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomrightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomrightCursor.tiff new file mode 100644 index 0000000..dec4252 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/bottomrightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/crossCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/crossCursor.tiff new file mode 100644 index 0000000..8536c0e Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/crossCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/cycleCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/cycleCursor.tiff new file mode 100644 index 0000000..34b52f6 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/cycleCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/destroyCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/destroyCursor.tiff new file mode 100644 index 0000000..9e3a1cb Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/destroyCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/fingerCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/fingerCursor.tiff new file mode 100644 index 0000000..0087c66 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/fingerCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/helpCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/helpCursor.tiff new file mode 100644 index 0000000..fc4a88a Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/helpCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/leftCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/leftCursor.tiff new file mode 100644 index 0000000..852b69b Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/leftCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/leftRightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/leftRightCursor.tiff new file mode 100644 index 0000000..37fe393 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/leftRightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/rightArrowCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/rightArrowCursor.tiff new file mode 100644 index 0000000..d852616 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/rightArrowCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/rightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/rightCursor.tiff new file mode 100644 index 0000000..9781f22 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/rightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/sprayCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/sprayCursor.tiff new file mode 100644 index 0000000..9bec966 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/sprayCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/topCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/topCursor.tiff new file mode 100644 index 0000000..e4df0de Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/topCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/topleftCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/topleftCursor.tiff new file mode 100644 index 0000000..43cf97f Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/topleftCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/toprightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/toprightCursor.tiff new file mode 100644 index 0000000..429b01b Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/toprightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/upDownCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/upDownCursor.tiff new file mode 100644 index 0000000..1605063 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/upDownCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/waitCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/waitCursor.tiff new file mode 100644 index 0000000..81ba1aa Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Resources/waitCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/GLUT b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/GLUT new file mode 100644 index 0000000..babc6b1 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/GLUT differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/copy.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/copy.h new file mode 100644 index 0000000..a5116e2 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/copy.h @@ -0,0 +1,18 @@ + +/* + * + * Written By Linas Vepstas November 1991 + */ + + +#define COPY_THREE_WORDS(A,B) { \ + struct three_words { int a, b, c, }; \ + *(struct three_words *) (A) = *(struct three_words *) (B); \ +} + +#define COPY_FOUR_WORDS(A,B) { \ + struct four_words { int a, b, c, d, }; \ + *(struct four_words *) (A) = *(struct four_words *) (B); \ +} + +/* ============================================================= */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/extrude.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/extrude.h new file mode 100644 index 0000000..658699e --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/extrude.h @@ -0,0 +1,96 @@ + +/* + * extrude.h + * + * FUNCTION: + * prototypes for privately used subroutines for the tubing library + * + * HISTORY: + * Linas Vepstas 1991 + */ + +#include "port.h" /* for gleDouble */ + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +/* ============================================================ */ +/* + * Provides choice of calling subroutine, vs. invoking macro. + * Basically, inlines the source, or not. + * Trades performance for executable size. + */ + +#define INLINE_INTERSECT +#ifdef INLINE_INTERSECT +#define INNERSECT(sect,p,n,v1,v2) { INTERSECT(sect,p,n,v1,v2); } +#else +#define INNERSECT(sect,p,n,v1,v2) intersect(sect,p,n,v1,v2) +#endif /* INLINE_INTERSECT */ + +/* ============================================================ */ +/* The folowing defines give a kludgy way of accessing the qmesh primitive */ + +/* +#define bgntmesh _emu_qmesh_bgnqmesh +#define endtmesh _emu_qmesh_endqmesh +#define c3f _emu_qmesh_c3f +#define n3f _emu_qmesh_n3f +#define v3f _emu_qmesh_v3f +*/ + +/* ============================================================ */ + +extern void up_sanity_check (gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3]); /* polyline */ + + +extern void draw_raw_style_end_cap (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble zval, /* where to draw cap */ + int frontwards); /* front or back cap */ + +extern void draw_round_style_cap_callback (int iloop, + double cap[][3], + float face_color[3], + gleDouble cut_vector[3], + gleDouble bisect_vector[3], + double norms[][3], + int frontwards); + +extern void draw_angle_style_front_cap (int ncp, + gleDouble bi[3], + gleDouble point_array[][3]); + +extern void extrusion_raw_join (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2],/* 2D contour normal vecs */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline */ + float color_array[][3], /* color of polyline */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + + +extern void extrusion_round_or_cut_join (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2],/* 2D contour normal vecs */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline */ + float color_array[][3], /* color of polyline */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + + +extern void extrusion_angle_join (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2],/* 2D contour normal vecs */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline */ + float color_array[][3], /* color of polyline */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + +/* -------------------------- end of file -------------------------------- */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmap.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmap.h new file mode 100644 index 0000000..baf54a7 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmap.h @@ -0,0 +1,137 @@ +#ifndef __glsmap_h__ +#define __glsmap_h__ + +/* Copyright (c) Mark J. Kilgard, 1998. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#if defined(_WIN32) + +/* Try hard to avoid including to avoid name space pollution, + but Win32's needs APIENTRY and WINGDIAPI defined properly. */ +# if 0 +# define WIN32_LEAN_AND_MEAN +# include +# else + /* XXX This is from Win32's */ +# ifndef APIENTRY +# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) +# define APIENTRY __stdcall +# else +# define APIENTRY +# endif +# endif +# ifndef CALLBACK + /* XXX This is from Win32's */ +# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +# endif + /* XXX This is from Win32's and */ +# ifndef WINGDIAPI +# define WINGDIAPI __declspec(dllimport) +# endif + /* XXX This is from Win32's */ +# ifndef _WCHAR_T_DEFINED +typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +# endif +# endif + +#pragma warning (disable:4244) /* Disable bogus conversion warnings. */ +#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ + +#endif /* _WIN32 */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + SMAP_CLEAR_SMAP_TEXTURE = 0x1, + SMAP_GENERATE_VIEW_MIPMAPS = 0x2, + SMAP_GENERATE_SMAP_MIPMAPS = 0x4, + SMAP_GENERATE_MIPMAPS = 0x6 /* both of above */ +} SphereMapFlags; + +/* Cube view enumerants. */ +enum { + SMAP_FRONT = 0, + SMAP_TOP = 1, + SMAP_BOTTOM = 2, + SMAP_LEFT = 3, + SMAP_RIGHT = 4, + SMAP_BACK = 5 +}; + +typedef struct _SphereMap SphereMap; + +extern SphereMap *smapCreateSphereMap(SphereMap *shareSmap); +extern void smapDestroySphereMap(SphereMap *smap); + +extern void smapConfigureSphereMapMesh(SphereMap *smap, int steps, int rings, int edgeExtend); + +extern void smapSetSphereMapTexObj(SphereMap *smap, GLuint texobj); +extern void smapSetViewTexObj(SphereMap *smap, GLuint texobj); +extern void smapSetViewTexObjs(SphereMap *smap, GLuint texobjs[6]); +extern void smapGetSphereMapTexObj(SphereMap *smap, GLuint *texobj); +extern void smapGetViewTexObj(SphereMap *smap, GLuint *texobj); +extern void smapGetViewTexObjs(SphereMap *smap, GLuint texobjs[6]); + +extern void smapSetFlags(SphereMap *smap, SphereMapFlags flags); +extern void smapGetFlags(SphereMap *smap, SphereMapFlags *flags); + +extern void smapSetViewOrigin(SphereMap *smap, GLint x, GLint y); +extern void smapSetSphereMapOrigin(SphereMap *smap, GLint x, GLint y); +extern void smapGetViewOrigin(SphereMap *smap, GLint *x, GLint *y); +extern void smapGetSphereMapOrigin(SphereMap *smap, GLint *x, GLint *y); + +extern void smapSetEye(SphereMap *smap, GLfloat eyex, GLfloat eyey, GLfloat eyez); +extern void smapSetEyeVector(SphereMap *smap, GLfloat *eye); +extern void smapSetUp(SphereMap *smap, GLfloat upx, GLfloat upy, GLfloat upz); +extern void smapSetUpVector(SphereMap *smap, GLfloat *up); +extern void smapSetObject(SphereMap *smap, GLfloat objx, GLfloat objy, GLfloat objz); +extern void smapSetObjectVector(SphereMap *smap, GLfloat *obj); +extern void smapGetEye(SphereMap *smap, GLfloat *eyex, GLfloat *eyey, GLfloat *eyez); +extern void smapGetEyeVector(SphereMap *smap, GLfloat *eye); +extern void smapGetUp(SphereMap *smap, GLfloat *upx, GLfloat *upy, GLfloat *upz); +extern void smapGetUpVector(SphereMap *smap, GLfloat *up); +extern void smapGetObject(SphereMap *smap, GLfloat *objx, GLfloat *objy, GLfloat *objz); +extern void smapGetObjectVector(SphereMap *smap, GLfloat *obj); + +extern void smapSetNearFar(SphereMap *smap, GLfloat viewNear, GLfloat viewFar); +extern void smapGetNearFar(SphereMap *smap, GLfloat *viewNear, GLfloat *viewFar); + +extern void smapSetSphereMapTexDim(SphereMap *smap, GLsizei texdim); +extern void smapSetViewTexDim(SphereMap *smap, GLsizei texdim); +extern void smapGetSphereMapTexDim(SphereMap *smap, GLsizei *texdim); +extern void smapGetViewTexDim(SphereMap *smap, GLsizei *texdim); + +extern void smapSetContextData(SphereMap *smap, void *context); +extern void smapGetContextData(SphereMap *smap, void **context); + +extern void smapSetPositionLightsFunc(SphereMap *smap, void (*positionLights)(int view, void *context)); +extern void smapSetDrawViewFunc(SphereMap *smap, void (*drawView)(int view, void *context)); +extern void smapGetPositionLightsFunc(SphereMap *smap, void (**positionLights)(int view, void *context)); +extern void smapGetDrawViewFunc(SphereMap *smap, void (**drawView)(int view, void *context)); + +extern void smapGenViewTex(SphereMap *smap, int view); +extern void smapGenViewTexs(SphereMap *smap); +extern void smapGenSphereMapFromViewTexs(SphereMap *smap); +extern void smapGenSphereMap(SphereMap *smap); +extern void smapGenSphereMapWithOneViewTex(SphereMap *smap); + +extern int smapRvecToSt(float rvec[3], float st[2]); +extern void smapStToRvec(float *st, float *rvec); + +#ifdef __cplusplus +} + +#endif +#endif /* __glsmap_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmapint.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmapint.h new file mode 100644 index 0000000..3620e7d --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmapint.h @@ -0,0 +1,102 @@ +#ifndef __glsmapint_h__ +#define __glsmapint_h__ + +/* Copyright (c) Mark J. Kilgard, 1998. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#include "glsmap.h" + +enum { X = 0, Y = 1, Z = 2 }; + +#define INITFACE(mesh) \ + int steps = mesh->steps; \ + int sqsteps = mesh->steps * mesh->steps + +#define FACE(side,y,x) \ + mesh->face[(side)*sqsteps + (y)*steps + (x)] + +#define FACExy(side,i,j) \ + (&FACE(side,i,j).x) + +#define FACEst(side,i,j) \ + (&FACE(side,i,j).s) + +#define INITBACK(mesh) \ + int allrings = mesh->rings + mesh->edgeExtend; \ + int ringedspokes = allrings * mesh->steps + +#define BACK(edge,ring,spoke) \ + mesh->back[(edge)*ringedspokes + (ring)*mesh->steps + (spoke)] + +#define BACKxy(edge,ring,spoke) \ + (&BACK(edge,ring,spoke).x) + +#define BACKst(edge,ring,spoke) \ + (&BACK(edge,ring,spoke).s) + +typedef struct _STXY { + GLfloat s, t; + GLfloat x, y; +} STXY; + +typedef struct _SphereMapMesh { + + int refcnt; + + int steps; + int rings; + int edgeExtend; + + STXY *face; + STXY *back; + +} SphereMapMesh; + +struct _SphereMap { + + /* Shared sphere map mesh vertex data. */ + SphereMapMesh *mesh; + + /* Texture object ids. */ + GLuint smapTexObj; + GLuint viewTexObjs[6]; + GLuint viewTexObj; + + /* Flags */ + SphereMapFlags flags; + + /* Texture dimensions must be a power of two. */ + int viewTexDim; /* view texture dimension */ + int smapTexDim; /* sphere map texture dimension */ + + /* Viewport origins for view and sphere map rendering. */ + int viewOrigin[2]; + int smapOrigin[2]; + + /* Viewing vectors. */ + GLfloat eye[3]; + GLfloat up[3]; + GLfloat obj[3]; + + /* Projection parameters. */ + GLfloat viewNear; + GLfloat viewFar; + + /* Rendering callbacks. */ + void (*positionLights)(int view, void *context); + void (*drawView)(int view, void *context); + + /* Application specified callback data. */ + void *context; + +}; + +/* Library internal routines. */ +extern void __smapDrawSphereMapMeshSide(SphereMapMesh *mesh, int side); +extern void __smapDrawSphereMapMeshBack(SphereMapMesh *mesh); +extern void __smapValidateSphereMapMesh(SphereMapMesh *mesh); + +#endif /* __glsmapint_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glut.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glut.h new file mode 100644 index 0000000..cbc6ebe --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glut.h @@ -0,0 +1,648 @@ +#ifndef __glut_h__ +#define __glut_h__ + +/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998. */ + +/* This program is freely distributable without licensing fees and is + provided without guarantee or warrantee expressed or implied. This + program is -not- in the public domain. */ +//#define GLUT_OF_007_HACK + +#if defined(_WIN32) + +/* GLUT 3.7 now tries to avoid including + to avoid name space pollution, but Win32's + needs APIENTRY and WINGDIAPI defined properly. */ +# if 0 +# define WIN32_LEAN_AND_MEAN +# include +# else + /* XXX This is from Win32's */ +# ifndef APIENTRY +# define GLUT_APIENTRY_DEFINED +# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) +# define APIENTRY __stdcall +# else +# define APIENTRY +# endif +# endif + /* XXX This is from Win32's */ +# ifndef CALLBACK +# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +# endif + /* XXX This is from Win32's and */ +# ifndef WINGDIAPI +# define GLUT_WINGDIAPI_DEFINED +# define WINGDIAPI __declspec(dllimport) +# endif + /* XXX This is from Win32's */ +# ifndef _WCHAR_T_DEFINED +typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +# endif +# endif + +#pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */ +#pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */ +#pragma comment (lib, "glu32.lib") /* link with OpenGL Utility lib */ +#pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */ + +#pragma warning (disable:4244) /* Disable bogus conversion warnings. */ +#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ + +#endif + +#if defined(__APPLE__) || defined(MACOSX) +#include +#include +#include +#else +#include +#include +#endif + +/* define APIENTRY and CALLBACK to null string if we aren't on Win32 */ +#if !defined(_WIN32) +#define APIENTRY +#define GLUT_APIENTRY_DEFINED +#define CALLBACK +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + GLUT API revision history: + + GLUT_API_VERSION is updated to reflect incompatible GLUT + API changes (interface changes, semantic changes, deletions, + or additions). + + GLUT_API_VERSION=1 First public release of GLUT. 11/29/94 + + GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling, + extension. Supports new input devices like tablet, dial and button + box, and Spaceball. Easy to query OpenGL extensions. + + GLUT_API_VERSION=3 glutMenuStatus added. + + GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer, + glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic + video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc, + glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat, + glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!). + + GLUT_API_VERSION=5 glutGetProcAddress (added by BrianP) +**/ +#ifndef GLUT_API_VERSION /* allow this to be overriden */ +#define GLUT_API_VERSION 5 +#endif + +/** + GLUT implementation revision history: + + GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT + API revisions and implementation revisions (ie, bug fixes). + + GLUT_XLIB_IMPLEMENTATION=1 mjk's first public release of + GLUT Xlib-based implementation. 11/29/94 + + GLUT_XLIB_IMPLEMENTATION=2 mjk's second public release of + GLUT Xlib-based implementation providing GLUT version 2 + interfaces. + + GLUT_XLIB_IMPLEMENTATION=3 mjk's GLUT 2.2 images. 4/17/95 + + GLUT_XLIB_IMPLEMENTATION=4 mjk's GLUT 2.3 images. 6/?/95 + + GLUT_XLIB_IMPLEMENTATION=5 mjk's GLUT 3.0 images. 10/?/95 + + GLUT_XLIB_IMPLEMENTATION=7 mjk's GLUT 3.1+ with glutWarpPoitner. 7/24/96 + + GLUT_XLIB_IMPLEMENTATION=8 mjk's GLUT 3.1+ with glutWarpPoitner + and video resize. 1/3/97 + + GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines. + + GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release. + + GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling. + + GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 beta with GameGLUT support. + + GLUT_XLIB_IMPLEMENTATION=14 mjk's GLUT 3.7 beta with f90gl friend interface. + + GLUT_XLIB_IMPLEMENTATION=15 mjk's GLUT 3.7 beta sync'ed with Mesa +**/ +#ifndef GLUT_XLIB_IMPLEMENTATION /* Allow this to be overriden. */ +#define GLUT_XLIB_IMPLEMENTATION 15 +#endif + +/** + MacOS X GLUT implementation revision history: + + GLUT_MACOSX_IMPLEMENTATION is updated to reflect MacOS X + specific GLUT API revisions and implementation revisions + (ie, bug fixes). + + GLUT_MACOSX_IMPLEMENTATION=1 glutSurfaceTexture. + + GLUT_MACOSX_IMPLEMENTATION=2 glutWMCloseFunc, glutCheckLoop. + +**/ +#ifndef GLUT_MACOSX_IMPLEMENTATION /* Allow this to be overriden. */ +#define GLUT_MACOSX_IMPLEMENTATION 2 +#endif + +/* Display mode bit masks. */ +#define GLUT_RGB 0 +#define GLUT_RGBA GLUT_RGB +#define GLUT_INDEX 1 +#define GLUT_SINGLE 0 +#define GLUT_DOUBLE 2 +#define GLUT_ACCUM 4 +#define GLUT_ALPHA 8 +#define GLUT_DEPTH 16 +#define GLUT_STENCIL 32 +#if (GLUT_API_VERSION >= 2) +#define GLUT_MULTISAMPLE 128 +#define GLUT_STEREO 256 +#endif +#if (GLUT_API_VERSION >= 3) +#define GLUT_LUMINANCE 512 +#endif +#define GLUT_NO_RECOVERY 1024 + +/* Mouse buttons. */ +#define GLUT_LEFT_BUTTON 0 +#define GLUT_MIDDLE_BUTTON 1 +#define GLUT_RIGHT_BUTTON 2 + +/* Mouse button state. */ +#define GLUT_DOWN 0 +#define GLUT_UP 1 + +#if (GLUT_API_VERSION >= 2) +/* function keys */ +#define GLUT_KEY_F1 1 +#define GLUT_KEY_F2 2 +#define GLUT_KEY_F3 3 +#define GLUT_KEY_F4 4 +#define GLUT_KEY_F5 5 +#define GLUT_KEY_F6 6 +#define GLUT_KEY_F7 7 +#define GLUT_KEY_F8 8 +#define GLUT_KEY_F9 9 +#define GLUT_KEY_F10 10 +#define GLUT_KEY_F11 11 +#define GLUT_KEY_F12 12 +/* directional keys */ +#define GLUT_KEY_LEFT 100 +#define GLUT_KEY_UP 101 +#define GLUT_KEY_RIGHT 102 +#define GLUT_KEY_DOWN 103 +#define GLUT_KEY_PAGE_UP 104 +#define GLUT_KEY_PAGE_DOWN 105 +#define GLUT_KEY_HOME 106 +#define GLUT_KEY_END 107 +#define GLUT_KEY_INSERT 108 +#endif + +/* Entry/exit state. */ +#define GLUT_LEFT 0 +#define GLUT_ENTERED 1 + +/* Menu usage state. */ +#define GLUT_MENU_NOT_IN_USE 0 +#define GLUT_MENU_IN_USE 1 + +/* Visibility state. */ +#define GLUT_NOT_VISIBLE 0 +#define GLUT_VISIBLE 1 + +/* Window status state. */ +#define GLUT_HIDDEN 0 +#define GLUT_FULLY_RETAINED 1 +#define GLUT_PARTIALLY_RETAINED 2 +#define GLUT_FULLY_COVERED 3 + +/* Color index component selection values. */ +#define GLUT_RED 0 +#define GLUT_GREEN 1 +#define GLUT_BLUE 2 + +/* Layers for use. */ +#define GLUT_NORMAL 0 +#define GLUT_OVERLAY 1 + +#if defined(_WIN32) +/* Stroke font constants (use these in GLUT program). */ +#define GLUT_STROKE_ROMAN ((void*)0) +#define GLUT_STROKE_MONO_ROMAN ((void*)1) + +/* Bitmap font constants (use these in GLUT program). */ +#define GLUT_BITMAP_9_BY_15 ((void*)2) +#define GLUT_BITMAP_8_BY_13 ((void*)3) +#define GLUT_BITMAP_TIMES_ROMAN_10 ((void*)4) +#define GLUT_BITMAP_TIMES_ROMAN_24 ((void*)5) +#if (GLUT_API_VERSION >= 3) +#define GLUT_BITMAP_HELVETICA_10 ((void*)6) +#define GLUT_BITMAP_HELVETICA_12 ((void*)7) +#define GLUT_BITMAP_HELVETICA_18 ((void*)8) +#endif +#else +/* Stroke font opaque addresses (use constants instead in source code). */ +extern void *glutStrokeRoman; +extern void *glutStrokeMonoRoman; + +/* Stroke font constants (use these in GLUT program). */ +#define GLUT_STROKE_ROMAN (&glutStrokeRoman) +#define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman) + +/* Bitmap font opaque addresses (use constants instead in source code). */ +extern void *glutBitmap9By15; +extern void *glutBitmap8By13; +extern void *glutBitmapTimesRoman10; +extern void *glutBitmapTimesRoman24; +extern void *glutBitmapHelvetica10; +extern void *glutBitmapHelvetica12; +extern void *glutBitmapHelvetica18; + +/* Bitmap font constants (use these in GLUT program). */ +#define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15) +#define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13) +#define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10) +#define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24) +#if (GLUT_API_VERSION >= 3) +#define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10) +#define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12) +#define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18) +#endif +#endif + +/* glutGet parameters. */ +#define GLUT_WINDOW_X 100 +#define GLUT_WINDOW_Y 101 +#define GLUT_WINDOW_WIDTH 102 +#define GLUT_WINDOW_HEIGHT 103 +#define GLUT_WINDOW_BUFFER_SIZE 104 +#define GLUT_WINDOW_STENCIL_SIZE 105 +#define GLUT_WINDOW_DEPTH_SIZE 106 +#define GLUT_WINDOW_RED_SIZE 107 +#define GLUT_WINDOW_GREEN_SIZE 108 +#define GLUT_WINDOW_BLUE_SIZE 109 +#define GLUT_WINDOW_ALPHA_SIZE 110 +#define GLUT_WINDOW_ACCUM_RED_SIZE 111 +#define GLUT_WINDOW_ACCUM_GREEN_SIZE 112 +#define GLUT_WINDOW_ACCUM_BLUE_SIZE 113 +#define GLUT_WINDOW_ACCUM_ALPHA_SIZE 114 +#define GLUT_WINDOW_DOUBLEBUFFER 115 +#define GLUT_WINDOW_RGBA 116 +#define GLUT_WINDOW_PARENT 117 +#define GLUT_WINDOW_NUM_CHILDREN 118 +#define GLUT_WINDOW_COLORMAP_SIZE 119 +#if (GLUT_API_VERSION >= 2) +#define GLUT_WINDOW_NUM_SAMPLES 120 +#define GLUT_WINDOW_STEREO 121 +#endif +#if (GLUT_API_VERSION >= 3) +#define GLUT_WINDOW_CURSOR 122 +#endif +#define GLUT_SCREEN_WIDTH 200 +#define GLUT_SCREEN_HEIGHT 201 +#define GLUT_SCREEN_WIDTH_MM 202 +#define GLUT_SCREEN_HEIGHT_MM 203 +#define GLUT_MENU_NUM_ITEMS 300 +#define GLUT_DISPLAY_MODE_POSSIBLE 400 +#define GLUT_INIT_WINDOW_X 500 +#define GLUT_INIT_WINDOW_Y 501 +#define GLUT_INIT_WINDOW_WIDTH 502 +#define GLUT_INIT_WINDOW_HEIGHT 503 +#define GLUT_INIT_DISPLAY_MODE 504 +#if (GLUT_API_VERSION >= 2) +#define GLUT_ELAPSED_TIME 700 +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +#define GLUT_WINDOW_FORMAT_ID 123 +#endif + +#if (GLUT_API_VERSION >= 2) +/* glutDeviceGet parameters. */ +#define GLUT_HAS_KEYBOARD 600 +#define GLUT_HAS_MOUSE 601 +#define GLUT_HAS_SPACEBALL 602 +#define GLUT_HAS_DIAL_AND_BUTTON_BOX 603 +#define GLUT_HAS_TABLET 604 +#define GLUT_NUM_MOUSE_BUTTONS 605 +#define GLUT_NUM_SPACEBALL_BUTTONS 606 +#define GLUT_NUM_BUTTON_BOX_BUTTONS 607 +#define GLUT_NUM_DIALS 608 +#define GLUT_NUM_TABLET_BUTTONS 609 +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +#define GLUT_DEVICE_IGNORE_KEY_REPEAT 610 +#define GLUT_DEVICE_KEY_REPEAT 611 +#define GLUT_HAS_JOYSTICK 612 +#define GLUT_OWNS_JOYSTICK 613 +#define GLUT_JOYSTICK_BUTTONS 614 +#define GLUT_JOYSTICK_AXES 615 +#define GLUT_JOYSTICK_POLL_RATE 616 +#endif + +#if (GLUT_API_VERSION >= 3) +/* glutLayerGet parameters. */ +#define GLUT_OVERLAY_POSSIBLE 800 +#define GLUT_LAYER_IN_USE 801 +#define GLUT_HAS_OVERLAY 802 +#define GLUT_TRANSPARENT_INDEX 803 +#define GLUT_NORMAL_DAMAGED 804 +#define GLUT_OVERLAY_DAMAGED 805 + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +/* glutVideoResizeGet parameters. */ +#define GLUT_VIDEO_RESIZE_POSSIBLE 900 +#define GLUT_VIDEO_RESIZE_IN_USE 901 +#define GLUT_VIDEO_RESIZE_X_DELTA 902 +#define GLUT_VIDEO_RESIZE_Y_DELTA 903 +#define GLUT_VIDEO_RESIZE_WIDTH_DELTA 904 +#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 905 +#define GLUT_VIDEO_RESIZE_X 906 +#define GLUT_VIDEO_RESIZE_Y 907 +#define GLUT_VIDEO_RESIZE_WIDTH 908 +#define GLUT_VIDEO_RESIZE_HEIGHT 909 +#endif + +/* glutUseLayer parameters. */ +#define GLUT_NORMAL 0 +#define GLUT_OVERLAY 1 + +/* glutGetModifiers return mask. */ +#define GLUT_ACTIVE_SHIFT 1 +#define GLUT_ACTIVE_CTRL 2 +#define GLUT_ACTIVE_ALT 4 + +/* glutSetCursor parameters. */ +/* Basic arrows. */ +#define GLUT_CURSOR_RIGHT_ARROW 0 +#define GLUT_CURSOR_LEFT_ARROW 1 +/* Symbolic cursor shapes. */ +#define GLUT_CURSOR_INFO 2 +#define GLUT_CURSOR_DESTROY 3 +#define GLUT_CURSOR_HELP 4 +#define GLUT_CURSOR_CYCLE 5 +#define GLUT_CURSOR_SPRAY 6 +#define GLUT_CURSOR_WAIT 7 +#define GLUT_CURSOR_TEXT 8 +#define GLUT_CURSOR_CROSSHAIR 9 +/* Directional cursors. */ +#define GLUT_CURSOR_UP_DOWN 10 +#define GLUT_CURSOR_LEFT_RIGHT 11 +/* Sizing cursors. */ +#define GLUT_CURSOR_TOP_SIDE 12 +#define GLUT_CURSOR_BOTTOM_SIDE 13 +#define GLUT_CURSOR_LEFT_SIDE 14 +#define GLUT_CURSOR_RIGHT_SIDE 15 +#define GLUT_CURSOR_TOP_LEFT_CORNER 16 +#define GLUT_CURSOR_TOP_RIGHT_CORNER 17 +#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 18 +#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 19 +/* Inherit from parent window. */ +#define GLUT_CURSOR_INHERIT 100 +/* Blank cursor. */ +#define GLUT_CURSOR_NONE 101 +/* Fullscreen crosshair (if available). */ +#define GLUT_CURSOR_FULL_CROSSHAIR 102 +#endif + +/* GLUT initialization sub-API. */ +extern void APIENTRY glutInit(int *argcp, char **argv); +extern void APIENTRY glutInitDisplayMode(unsigned int mode); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern void APIENTRY glutInitDisplayString(const char *string); +#endif +extern void APIENTRY glutInitWindowPosition(int x, int y); +extern void APIENTRY glutInitWindowSize(int width, int height); +extern void APIENTRY glutMainLoop(void); + +/* GLUT window sub-API. */ +extern int APIENTRY glutCreateWindow(const char *title); +extern int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height); +extern void APIENTRY glutDestroyWindow(int win); +extern void APIENTRY glutPostRedisplay(void); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) +extern void APIENTRY glutPostWindowRedisplay(int win); +#endif +extern void APIENTRY glutSwapBuffers(void); +extern int APIENTRY glutGetWindow(void); +extern void APIENTRY glutSetWindow(int win); +extern void APIENTRY glutSetWindowTitle(const char *title); +extern void APIENTRY glutSetIconTitle(const char *title); +extern void APIENTRY glutPositionWindow(int x, int y); +extern void APIENTRY glutReshapeWindow(int width, int height); +extern void APIENTRY glutPopWindow(void); +extern void APIENTRY glutPushWindow(void); +extern void APIENTRY glutIconifyWindow(void); +extern void APIENTRY glutShowWindow(void); +extern void APIENTRY glutHideWindow(void); +#if (GLUT_API_VERSION >= 3) +extern void APIENTRY glutFullScreen(void); +extern void APIENTRY glutSetCursor(int cursor); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern void APIENTRY glutWarpPointer(int x, int y); +#if (GLUT_MACOSX_IMPLEMENTATION >= 1) +/* surface texturing API Mac OS X specific +* Note: +* glutSurfaceTexture has been deprecated, use GL_EXT_framebuffer_object +*/ +#ifdef MAC_OS_X_VERSION_10_5 +extern void APIENTRY glutSurfaceTexture (GLenum target, GLenum internalformat, int surfacewin); AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5 +#else +extern void APIENTRY glutSurfaceTexture (GLenum target, GLenum internalformat, int surfacewin); +#endif +#endif +#if (GLUT_MACOSX_IMPLEMENTATION >= 2) +/* Mac OS X specific API */ +extern void APIENTRY glutWMCloseFunc(void (*func)(void)); +extern void APIENTRY glutCheckLoop(void); +#endif +#endif + +/* GLUT overlay sub-API. */ +extern void APIENTRY glutEstablishOverlay(void); +extern void APIENTRY glutRemoveOverlay(void); +extern void APIENTRY glutUseLayer(GLenum layer); +extern void APIENTRY glutPostOverlayRedisplay(void); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) +extern void APIENTRY glutPostWindowOverlayRedisplay(int win); +#endif +extern void APIENTRY glutShowOverlay(void); +extern void APIENTRY glutHideOverlay(void); +#endif + +/* GLUT menu sub-API. */ +extern int APIENTRY glutCreateMenu(void (*)(int)); +extern void APIENTRY glutDestroyMenu(int menu); +extern int APIENTRY glutGetMenu(void); +extern void APIENTRY glutSetMenu(int menu); +extern void APIENTRY glutAddMenuEntry(const char *label, int value); +extern void APIENTRY glutAddSubMenu(const char *label, int submenu); +extern void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value); +extern void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu); +extern void APIENTRY glutRemoveMenuItem(int item); +extern void APIENTRY glutAttachMenu(int button); +extern void APIENTRY glutDetachMenu(int button); + +/* GLUT window callback sub-API. */ +extern void APIENTRY glutDisplayFunc(void (*func)(void)); +extern void APIENTRY glutReshapeFunc(void (*func)(int width, int height)); +extern void APIENTRY glutKeyboardFunc(void (*func)(unsigned char key, int x, int y)); +extern void APIENTRY glutMouseFunc(void (*func)(int button, int state, int x, int y)); +extern void APIENTRY glutMotionFunc(void (*func)(int x, int y)); +extern void APIENTRY glutPassiveMotionFunc(void (*func)(int x, int y)); +extern void APIENTRY glutEntryFunc(void (*func)(int state)); +extern void APIENTRY glutVisibilityFunc(void (*func)(int state)); +extern void APIENTRY glutIdleFunc(void (*func)(void)); +extern void APIENTRY glutTimerFunc(unsigned int millis, void (*func)(int value), int value); +extern void APIENTRY glutMenuStateFunc(void (*func)(int state)); +#if (GLUT_API_VERSION >= 2) +extern void APIENTRY glutSpecialFunc(void (*func)(int key, int x, int y)); +extern void APIENTRY glutSpaceballMotionFunc(void (*func)(int x, int y, int z)); +extern void APIENTRY glutSpaceballRotateFunc(void (*func)(int x, int y, int z)); +extern void APIENTRY glutSpaceballButtonFunc(void (*func)(int button, int state)); +extern void APIENTRY glutButtonBoxFunc(void (*func)(int button, int state)); +extern void APIENTRY glutDialsFunc(void (*func)(int dial, int value)); +extern void APIENTRY glutTabletMotionFunc(void (*func)(int x, int y)); +extern void APIENTRY glutTabletButtonFunc(void (*func)(int button, int state, int x, int y)); +#if (GLUT_API_VERSION >= 3) +extern void APIENTRY glutMenuStatusFunc(void (*func)(int status, int x, int y)); +extern void APIENTRY glutOverlayDisplayFunc(void (*func)(void)); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern void APIENTRY glutWindowStatusFunc(void (*func)(int state)); +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +extern void APIENTRY glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y)); +extern void APIENTRY glutSpecialUpFunc(void (*func)(int key, int x, int y)); +extern void APIENTRY glutJoystickFunc(void (*func)(unsigned int buttonMask, int x, int y, int z), int pollInterval); +//#ifdef GLUT_OF_007_HACK +extern void APIENTRY glutDragEventFunc(void (*func)(char ** fileNames, int nFiles, int dragX, int dragY)); +//#endif +#endif +#endif +#endif + +/* GLUT color index sub-API. */ +extern void APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue); +extern GLfloat APIENTRY glutGetColor(int ndx, int component); +extern void APIENTRY glutCopyColormap(int win); + +/* GLUT state retrieval sub-API. */ +extern int APIENTRY glutGet(GLenum type); +extern int APIENTRY glutDeviceGet(GLenum type); +#if (GLUT_API_VERSION >= 2) +/* GLUT extension support sub-API */ +extern int APIENTRY glutExtensionSupported(const char *name); +#endif +#if (GLUT_API_VERSION >= 3) +extern int APIENTRY glutGetModifiers(void); +extern int APIENTRY glutLayerGet(GLenum type); +#endif +#if (GLUT_API_VERSION >= 5) +extern void * APIENTRY glutGetProcAddress(const char *procName); +#endif + +/* GLUT font sub-API */ +extern void APIENTRY glutBitmapCharacter(void *font, int character); +extern int APIENTRY glutBitmapWidth(void *font, int character); +extern void APIENTRY glutStrokeCharacter(void *font, int character); +extern int APIENTRY glutStrokeWidth(void *font, int character); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern int APIENTRY glutBitmapLength(void *font, const unsigned char *string); +extern int APIENTRY glutStrokeLength(void *font, const unsigned char *string); +#endif + +/* GLUT pre-built models sub-API */ +extern void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks); +extern void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); +extern void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); +extern void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); +extern void APIENTRY glutWireCube(GLdouble size); +extern void APIENTRY glutSolidCube(GLdouble size); +extern void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); +extern void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); +extern void APIENTRY glutWireDodecahedron(void); +extern void APIENTRY glutSolidDodecahedron(void); +extern void APIENTRY glutWireTeapot(GLdouble size); +extern void APIENTRY glutSolidTeapot(GLdouble size); +extern void APIENTRY glutWireOctahedron(void); +extern void APIENTRY glutSolidOctahedron(void); +extern void APIENTRY glutWireTetrahedron(void); +extern void APIENTRY glutSolidTetrahedron(void); +extern void APIENTRY glutWireIcosahedron(void); +extern void APIENTRY glutSolidIcosahedron(void); + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +/* GLUT video resize sub-API. */ +extern int APIENTRY glutVideoResizeGet(GLenum param); +extern void APIENTRY glutSetupVideoResizing(void); +extern void APIENTRY glutStopVideoResizing(void); +extern void APIENTRY glutVideoResize(int x, int y, int width, int height); +extern void APIENTRY glutVideoPan(int x, int y, int width, int height); + +/* GLUT debugging sub-API. */ +extern void APIENTRY glutReportErrors(void); +#endif + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +/* GLUT device control sub-API. */ +/* glutSetKeyRepeat modes. */ +#define GLUT_KEY_REPEAT_OFF 0 +#define GLUT_KEY_REPEAT_ON 1 +#define GLUT_KEY_REPEAT_DEFAULT 2 + +/* Joystick button masks. */ +#define GLUT_JOYSTICK_BUTTON_A 1 +#define GLUT_JOYSTICK_BUTTON_B 2 +#define GLUT_JOYSTICK_BUTTON_C 4 +#define GLUT_JOYSTICK_BUTTON_D 8 + +extern void APIENTRY glutIgnoreKeyRepeat(int ignore); +extern void APIENTRY glutSetKeyRepeat(int repeatMode); +extern void APIENTRY glutForceJoystickFunc(void); + +/* GLUT game mode sub-API. */ +/* glutGameModeGet. */ +#define GLUT_GAME_MODE_ACTIVE 0 +#define GLUT_GAME_MODE_POSSIBLE 1 +#define GLUT_GAME_MODE_WIDTH 2 +#define GLUT_GAME_MODE_HEIGHT 3 +#define GLUT_GAME_MODE_PIXEL_DEPTH 4 +#define GLUT_GAME_MODE_REFRESH_RATE 5 +#define GLUT_GAME_MODE_DISPLAY_CHANGED 6 + +extern void APIENTRY glutGameModeString(const char *string); +extern int APIENTRY glutEnterGameMode(void); +extern void APIENTRY glutLeaveGameMode(void); +extern int APIENTRY glutGameModeGet(GLenum mode); +#endif + +#ifdef __cplusplus +} + +#endif + +#ifdef GLUT_APIENTRY_DEFINED +# undef GLUT_APIENTRY_DEFINED +# undef APIENTRY +#endif + +#ifdef GLUT_WINGDIAPI_DEFINED +# undef GLUT_WINGDIAPI_DEFINED +# undef WINGDIAPI +#endif + +#endif /* __glut_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutbitmap.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutbitmap.h new file mode 100644 index 0000000..e29a016 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutbitmap.h @@ -0,0 +1,30 @@ +#ifndef __glutbitmap_h__ +#define __glutbitmap_h__ + +/* Copyright (c) Mark J. Kilgard, 1994. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#include "glut.h" + +typedef struct { + const GLsizei width; + const GLsizei height; + const GLfloat xorig; + const GLfloat yorig; + const GLfloat advance; + const GLubyte *bitmap; +} BitmapCharRec, *BitmapCharPtr; + +typedef struct { + const char *name; + const int num_chars; + const int first; + const BitmapCharRec * const *ch; +} BitmapFontRec, *BitmapFontPtr; + +typedef void *GLUTbitmapFont; + +#endif /* __glutbitmap_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutf90.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutf90.h new file mode 100644 index 0000000..f8a170b --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutf90.h @@ -0,0 +1,90 @@ +#ifndef __glutf90_h__ +#define __glutf90_h__ + +/* Copyright (c) Mark J. Kilgard & Willam F. Mitchell, 1998. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +/* This header provides the binding interface for William Mitchell's + f90gl Fortran 90 GLUT binding. Other GLUT language bindings + can and should use this interace. */ + +/* I appreciate the guidance from William Mitchell + (mitchell@cam.nist.gov) in developing this friend interface + for use by the f90gl package. See ../../README.fortran */ + +#include + +#ifndef GLUTCALLBACK + #define GLUTCALLBACK +#endif +#ifndef APIENTRY + #define APIENTRY +#endif + +/* Which callback enumerants for the __glutSetFCB/__glutGetFCB routines. */ +/* NOTE These values are part of a binary interface for the f90gl Fortran + 90 binding and so must NOT changes (additions are allowed). */ + +/* GLUTwindow callbacks. */ +#define GLUT_FCB_DISPLAY 0 /* GLUTdisplayFCB */ +#define GLUT_FCB_RESHAPE 1 /* GLUTreshapeFCB */ +#define GLUT_FCB_MOUSE 2 /* GLUTmouseFCB */ +#define GLUT_FCB_MOTION 3 /* GLUTmotionFCB */ +#define GLUT_FCB_PASSIVE 4 /* GLUTpassiveFCB */ +#define GLUT_FCB_ENTRY 5 /* GLUTentryFCB */ +#define GLUT_FCB_KEYBOARD 6 /* GLUTkeyboardFCB */ +#define GLUT_FCB_KEYBOARD_UP 7 /* GLUTkeyboardFCB */ +#define GLUT_FCB_WINDOW_STATUS 8 /* GLUTwindowStatusFCB */ +#define GLUT_FCB_VISIBILITY 9 /* GLUTvisibilityFCB */ +#define GLUT_FCB_SPECIAL 10 /* GLUTspecialFCB */ +#define GLUT_FCB_SPECIAL_UP 11 /* GLUTspecialFCB */ +#define GLUT_FCB_BUTTON_BOX 12 /* GLUTbuttonBoxFCB */ +#define GLUT_FCB_DIALS 13 /* GLUTdialsFCB */ +#define GLUT_FCB_SPACE_MOTION 14 /* GLUTspaceMotionFCB */ +#define GLUT_FCB_SPACE_ROTATE 15 /* GLUTspaceRotateFCB */ +#define GLUT_FCB_SPACE_BUTTON 16 /* GLUTspaceButtonFCB */ +#define GLUT_FCB_TABLET_MOTION 17 /* GLUTtabletMotionFCB */ +#define GLUT_FCB_TABLET_BUTTON 18 /* GLUTtabletButtonFCB */ +#define GLUT_FCB_JOYSTICK 19 /* GLUTjoystickFCB */ +#define GLUT_FCB_WMCLOSE 20 /* GLUTwmcloseFCB */ +/* Non-GLUTwindow callbacks. */ +#define GLUT_FCB_OVERLAY_DISPLAY 100 /* GLUTdisplayFCB */ +#define GLUT_FCB_SELECT 101 /* GLUTselectFCB */ +#define GLUT_FCB_TIMER 102 /* GLUTtimerFCB */ + +/* GLUT Fortran callback function types. */ +typedef void (GLUTCALLBACK *GLUTdisplayFCB) (void); +typedef void (GLUTCALLBACK *GLUTwmcloseFCB) (void); +typedef void (GLUTCALLBACK *GLUTreshapeFCB) (int *, int *); +/* NOTE the pressed key is int, not unsigned char for Fortran! */ +typedef void (GLUTCALLBACK *GLUTkeyboardFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTmouseFCB) (int *, int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTmotionFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTpassiveFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTentryFCB) (int *); +typedef void (GLUTCALLBACK *GLUTwindowStatusFCB) (int *); +typedef void (GLUTCALLBACK *GLUTvisibilityFCB) (int *); +typedef void (GLUTCALLBACK *GLUTspecialFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTbuttonBoxFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTdialsFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTspaceMotionFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTspaceRotateFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTspaceButtonFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTtabletMotionFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTtabletButtonFCB) (int *, int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTjoystickFCB) (unsigned int *buttonMask, int *x, int *y, int *z); + +typedef void (GLUTCALLBACK *GLUTselectFCB) (int *); +typedef void (GLUTCALLBACK *GLUTtimerFCB) (int *); +typedef void (GLUTCALLBACK *GLUTmenuStateFCB) (int *); /* DEPRICATED. */ +typedef void (GLUTCALLBACK *GLUTmenuStatusFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTidleFCB) (void); + +/* Functions that set and return Fortran callback functions. */ +extern void* APIENTRY __glutGetFCB(int which); +extern void APIENTRY __glutSetFCB(int which, void *func); + +#endif /* __glutf90_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutstroke.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutstroke.h new file mode 100644 index 0000000..cbc9e15 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutstroke.h @@ -0,0 +1,42 @@ +#ifndef __glutstroke_h__ +#define __glutstroke_h__ + +/* Copyright (c) Mark J. Kilgard, 1994. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#if defined(_WIN32) +#pragma warning (disable:4244) /* disable bogus conversion warnings */ +#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ +#endif + +typedef struct { + float x; + float y; +} CoordRec, *CoordPtr; + +typedef struct { + int num_coords; + const CoordRec *coord; +} StrokeRec, *StrokePtr; + +typedef struct { + int num_strokes; + const StrokeRec *stroke; + float center; + float right; +} StrokeCharRec, *StrokeCharPtr; + +typedef struct { + const char *name; + int num_chars; + const StrokeCharRec *ch; + float top; + float bottom; +} StrokeFontRec, *StrokeFontPtr; + +typedef void *GLUTstrokeFont; + +#endif /* __glutstroke_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/gutil.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/gutil.h new file mode 100644 index 0000000..f7ffcf3 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/gutil.h @@ -0,0 +1,89 @@ + +/* + * gutil.h + * + * FUNCTION: + * Provide utilities that allow rotation to occur + * around any axis. + * + * HISTORY: + * created by Linas Vepstas 1990 + * added single & double precision, June 1991, Linas Vepstas + */ + +#ifndef __GUTIL_H__ +#define __GUTIL_H__ + +#ifdef __GUTIL_DOUBLE +#define gutDouble double +#else +#define gutDouble float +#endif + + +#ifdef _NO_PROTO /* NO ANSI C PROTOTYPING */ + +/* Rotation Utilities */ +extern void rot_axis_f (); +extern void rot_about_axis_f (); +extern void rot_omega_f (); +extern void urot_axis_f (); +extern void urot_about_axis_f (); +extern void urot_omega_f (); + +/* double-precision versions */ +extern void rot_axis_d (); +extern void rot_about_axis_d (); +extern void rot_omega_d (); +extern void urot_axis_d (); +extern void urot_about_axis_d (); +extern void urot_omega_d (); + +/* viewpoint functions */ +extern void uview_direction_d (); +extern void uview_direction_f (); +extern void uviewpoint_d (); +extern void uviewpoint_f (); + +#else /* _NO_PROTO */ /* ANSI C PROTOTYPING */ + +/* Rotation Utilities */ +extern void rot_axis_f (float omega, float axis[3]); +extern void rot_about_axis_f (float angle, float axis[3]); +extern void rot_omega_f (float axis[3]); +extern void urot_axis_f (float m[4][4], float omega, float axis[3]); +extern void urot_about_axis_f (float m[4][4], float angle, float axis[3]); +extern void urot_omega_f (float m[4][4], float axis[3]); + +/* double-precision versions */ +extern void rot_axis_d (double omega, double axis[3]); +extern void rot_about_axis_d (double angle, double axis[3]); +extern void rot_omega_d (double axis[3]); +extern void urot_axis_d (double m[4][4], double omega, double axis[3]); +extern void urot_about_axis_d (double m[4][4], double angle, double axis[3]); +extern void urot_omega_d (double m[4][4], double axis[3]); + +/* viewpoint functions */ +extern void uview_direction_d (double m[4][4], /* returned */ + double v21[3], /* input */ + double up[3]); /* input */ + +extern void uview_direction_f (float m[4][4], /* returned */ + float v21[3], /* input */ + float up[3]); /* input */ + +extern void uviewpoint_d (double m[4][4], /* returned */ + double v1[3], /* input */ + double v2[3], /* input */ + double up[3]); /* input */ + +extern void uviewpoint_f (float m[4][4], /* returned */ + float v1[3], /* input */ + float v2[3], /* input */ + float up[3]); /* input */ + +#endif /* _NO_PROTO */ + +#endif /* _GUTIL_H__ */ + +/* ------------------- end of file ---------------------- */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/intersect.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/intersect.h new file mode 100644 index 0000000..f5ff7a5 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/intersect.h @@ -0,0 +1,391 @@ +/* + * FUNCTION: + * This file contains a number of utilities useful to 3D graphics in + * general, and to the generation of tubing and extrusions in particular + * + * HISTORY: + * Written by Linas Vepstas, August 1991 + * Updated to correctly handle degenerate cases, Linas, February 1993 + */ + +#include +#include "port.h" +#include "vvector.h" + +#define BACKWARDS_INTERSECT (2) + +/* ========================================================== */ +/* + * the Degenerate_Tolerance token represents the greatest amount by + * which different scales in a graphics environment can differ before + * they should be considered "degenerate". That is, when one vector is + * a million times longer than another, changces are that the second will + * be less than a pixel int, and therefore was probably meant to be + * degenerate (by the CAD package, etc.) But what should this tolerance + * be? At least 1 in onethousand (since screen sizes are 1K pixels), but + * les than 1 in 4 million (since this is the limit of single-precision + * floating point accuracy). Of course, if double precision were used, + * then the tolerance could be increased. + * + * Potentially, this naive assumption could cause problems if the CAD + * package attempts to zoom in on small details, and turns out, certain + * points should not hvae been degenerate. The problem presented here + * is that the tolerance could run out before single-precision ran + * out, and so the CAD packages would perceive this as a "bug". + * One alternative is to fiddle around & try to tighten the tolerance. + * However, the right alternative is to code the graphics pipeline in + * double-precision (and tighten the tolerance). + * + * By the way, note that Degernate Tolerance is a "dimensionless" + * quantitiy -- it has no units -- it does not measure feet, inches, + * millimeters or pixels. It is used only in the computations of ratios + * and relative lengths. + */ + +/* + * Right now, the tolerance is set to 2 parts in a million, which + * corresponds to a 19-bit distinction of mantissas. Note that + * single-precsion numbers have 24 bit mantissas. + */ + +#define DEGENERATE_TOLERANCE (0.000002) + +/* ========================================================== */ +/* + * The macro and subroutine INTERSECT are designed to compute the + * intersection of a line (defined by the points v1 and v2) and a plane + * (defined as plane which is normal to the vector n, and contains the + * point p). Both return the point sect, which is the point of + * interesection. + * + * This MACRO attemps to be fairly robust by checking for a divide by + * zero. + */ + +/* ========================================================== */ +/* + * HACK ALERT + * The intersection parameter t has the nice property that if t>1, + * then the intersection is "in front of" p1, and if t<0, then the + * intersection is "behind" p2. Unfortunately, as the intersecting plane + * and the line become parallel, t wraps through infinity -- i.e. t can + * become so large that t becomes "greater than infinity" and comes back + * as a negative number (i.e. winding number hopped by one unit). We + * have no way of detecting this situation without adding gazzillions + * of lines of code of topological algebra to detect the winding number; + * and this would be incredibly difficult, and ruin performance. + * + * Thus, we've installed a cheap hack for use by the "cut style" drawing + * routines. If t proves to be a large negative number (more negative + * than -5), then we assume that t was positive and wound through + * infinity. This makes most cuts look good, without introducing bogus + * cuts at infinity. + */ +/* ========================================================== */ + +#define INTERSECT(sect,p,n,v1,v2) \ +{ \ + gleDouble deno, numer, t, omt; \ + \ + deno = (v1[0] - v2[0]) * n[0]; \ + deno += (v1[1] - v2[1]) * n[1]; \ + deno += (v1[2] - v2[2]) * n[2]; \ + \ + if (deno == 0.0) { \ + VEC_COPY (n, v1); \ + /* printf ("Intersect: Warning: line is coplanar with plane \n"); */ \ + } else { \ + \ + numer = (p[0] - v2[0]) * n[0]; \ + numer += (p[1] - v2[1]) * n[1]; \ + numer += (p[2] - v2[2]) * n[2]; \ + \ + t = numer / deno; \ + omt = 1.0 - t; \ + \ + sect[0] = t * v1[0] + omt * v2[0]; \ + sect[1] = t * v1[1] + omt * v2[1]; \ + sect[2] = t * v1[2] + omt * v2[2]; \ + } \ +} + +/* ========================================================== */ +/* + * The macro and subroutine BISECTING_PLANE compute a normal vector that + * describes the bisecting plane between three points (v1, v2 and v3). + * This bisecting plane has the following properties: + * 1) it contains the point v2 + * 2) the angle it makes with v21 == v2 - v1 is equal to the angle it + * makes with v32 == v3 - v2 + * 3) it is perpendicular to the plane defined by v1, v2, v3. + * + * Having input v1, v2, and v3, it returns a unit vector n. + * + * In some cases, the user may specify degenerate points, and still + * expect "reasonable" or "obvious" behaviour. The "expected" + * behaviour for these degenerate cases is: + * + * 1) if v1 == v2 == v3, then return n=0 + * 2) if v1 == v2, then return v32 (normalized). + * 3) if v2 == v3, then return v21 (normalized). + * 4) if v1, v2 and v3 co-linear, then return v21 (normalized). + * + * Mathematically, these special cases "make sense" -- we just have to + * code around potential divide-by-zero's in the code below. + */ + +/* ========================================================== */ + +#define BISECTING_PLANE(valid,n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + double len21, len32; \ + double vdot; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_LENGTH (len21, v21); \ + VEC_LENGTH (len32, v32); \ + \ + if (len21 <= DEGENERATE_TOLERANCE * len32) { \ + \ + if (len32 == 0.0) { \ + /* all three points lie ontop of one-another */ \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + /* return a normalized copy of v32 as bisector */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (n, len32, v32); \ + valid = TRUE; \ + } \ + \ + } else { \ + \ + valid = TRUE; \ + \ + if (len32 <= DEGENERATE_TOLERANCE * len21) { \ + /* return a normalized copy of v21 as bisector */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (n, len21, v21); \ + \ + } else { \ + \ + /* normalize v21 to be of unit length */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (v21, len21, v21); \ + \ + /* normalize v32 to be of unit length */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (v32, len32, v32); \ + \ + VEC_DOT_PRODUCT (vdot, v32, v21); \ + \ + /* if vdot == 1 or -1, then points are colinear */ \ + if ((vdot >= (1.0-DEGENERATE_TOLERANCE)) || \ + (vdot <= (-1.0+DEGENERATE_TOLERANCE))) { \ + VEC_COPY (n, v21); \ + } else { \ + \ + /* go do the full computation */ \ + n[0] = vdot * (v32[0] + v21[0]) - v32[0] - v21[0]; \ + n[1] = vdot * (v32[1] + v21[1]) - v32[1] - v21[1]; \ + n[2] = vdot * (v32[2] + v21[2]) - v32[2] - v21[2]; \ + \ + /* if above if-test's passed, \ + * n should NEVER be of zero length */ \ + VEC_NORMALIZE (n); \ + } \ + } \ + } \ +} + +/* ========================================================== */ +/* + * The block of code below is ifdef'd out, and is here for reference + * purposes only. It performs the "mathematically right thing" for + * computing a bisecting plane, but is, unfortunately, subject ot noise + * in the presence of near degenerate points. Since computer graphics, + * due to sloppy coding, laziness, or correctness, is filled with + * degenerate points, we can't really use this version. The code above + * is far more appropriate for graphics. + */ + +#ifdef MATHEMATICALLY_EXACT_GRAPHICALLY_A_KILLER +#define BISECTING_PLANE(n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + double len21, len32; \ + double vdot; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_LENGTH (len21, v21); \ + VEC_LENGTH (len32, v32); \ + \ + if (len21 == 0.0) { \ + \ + if (len32 == 0.0) { \ + /* all three points lie ontop of one-another */ \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + /* return a normalized copy of v32 as bisector */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (n, len32, v32); \ + } \ + \ + } else { \ + \ + /* normalize v21 to be of unit length */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (v21, len21, v21); \ + \ + if (len32 == 0.0) { \ + /* return a normalized copy of v21 as bisector */ \ + VEC_COPY (n, v21); \ + } else { \ + \ + /* normalize v32 to be of unit length */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (v32, len32, v32); \ + \ + VEC_DOT_PRODUCT (vdot, v32, v21); \ + \ + /* if vdot == 1 or -1, then points are colinear */ \ + if ((vdot == 1.0) || (vdot == -1.0)) { \ + VEC_COPY (n, v21); \ + } else { \ + \ + /* go do the full computation */ \ + n[0] = vdot * (v32[0] + v21[0]) - v32[0] - v21[0]; \ + n[1] = vdot * (v32[1] + v21[1]) - v32[1] - v21[1]; \ + n[2] = vdot * (v32[2] + v21[2]) - v32[2] - v21[2]; \ + \ + /* if above if-test's passed, \ + * n should NEVER be of zero length */ \ + VEC_NORMALIZE (n); \ + } \ + } \ + } \ +} +#endif + +/* ========================================================== */ +/* + * This macro computes the plane perpendicular to the the plane + * defined by three points, and whose normal vector is givven as the + * difference between the two vectors ... + * + * (See way below for the "math" model if you want to understand this. + * The comments about relative errors above apply here.) + */ + +#define CUTTING_PLANE(valid,n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + double len21, len32; \ + double lendiff; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_LENGTH (len21, v21); \ + VEC_LENGTH (len32, v32); \ + \ + if (len21 <= DEGENERATE_TOLERANCE * len32) { \ + \ + if (len32 == 0.0) { \ + /* all three points lie ontop of one-another */ \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + /* return a normalized copy of v32 as cut-vector */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (n, len32, v32); \ + valid = TRUE; \ + } \ + \ + } else { \ + \ + valid = TRUE; \ + \ + if (len32 <= DEGENERATE_TOLERANCE * len21) { \ + /* return a normalized copy of v21 as cut vector */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (n, len21, v21); \ + } else { \ + \ + /* normalize v21 to be of unit length */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (v21, len21, v21); \ + \ + /* normalize v32 to be of unit length */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (v32, len32, v32); \ + \ + VEC_DIFF (n, v21, v32); \ + VEC_LENGTH (lendiff, n); \ + \ + /* if the perp vector is very small, then the two \ + * vectors are darn near collinear, and the cut \ + * vector is probably poorly defined. */ \ + if (lendiff < DEGENERATE_TOLERANCE) { \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + lendiff = 1.0 / lendiff; \ + VEC_SCALE (n, lendiff, n); \ + } \ + } \ + } \ +} + +/* ========================================================== */ + +#ifdef MATHEMATICALLY_EXACT_GRAPHICALLY_A_KILLER +#define CUTTING_PLANE(n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_NORMALIZE (v21); \ + VEC_NORMALIZE (v32); \ + \ + VEC_DIFF (n, v21, v32); \ + VEC_NORMALIZE (n); \ +} +#endif + + +/* ============================================================ */ +/* This macro is used in several places to cycle through a series of + * points to find the next non-degenerate point in a series */ + +#define FIND_NON_DEGENERATE_POINT(inext,npoints,len,diff,point_array) \ +{ \ + gleDouble slen; \ + gleDouble summa[3]; \ + \ + do { \ + /* get distance to next point */ \ + VEC_DIFF (diff, point_array[inext+1], point_array[inext]); \ + VEC_LENGTH (len, diff); \ + VEC_SUM (summa, point_array[inext+1], point_array[inext]); \ + VEC_LENGTH (slen, summa); \ + slen *= DEGENERATE_TOLERANCE; \ + inext ++; \ + } while ((len <= slen) && (inext < npoints-1)); \ +} + +/* ========================================================== */ + +extern int bisecting_plane (gleDouble n[3], /* returned */ + gleDouble v1[3], /* input */ + gleDouble v2[3], /* input */ + gleDouble v3[3]); /* input */ + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/port.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/port.h new file mode 100644 index 0000000..2827bbf --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/port.h @@ -0,0 +1,298 @@ + +/* + * port.h + * + * FUNCTION: + * This file contains defines for porting the tubing toolkit from GL to + * OpenGL to some callback scheme. + * + * HISTORY: + * Created by Linas Vepstas -- February 1993 + * Added auto texture coord generation hacks, Linas April 1994 + */ + +#ifndef __GLE_PORT_H__ +#define __GLE_PORT_H__ + + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +/* ====================================================== */ +/* Some compilers can't handle multiply-subscripted array's */ + +#ifdef FUNKY_C +typedef gleDouble gleVector; +#define AVAL(arr,n,i,j) arr(6*n+3*i+j) +#define VVAL(arr,n,i) arr(3*n+i) + +#else /* FUNKY_C */ +typedef double gleVector[3]; +typedef double glePoint[2]; +#define AVAL(arr,n,i,j) arr[n][i][j] +#define VVAL(arr,n,i) arr[n][i]; + +#endif /* FUNKY_C */ + +/* ====================================================== */ +/* These are used to convey info about topography to the + * texture mapping routines */ + +#define FRONT 1 +#define BACK 2 +#define FRONT_CAP 3 +#define BACK_CAP 4 +#define FILLET 5 + +/* ====================================================== */ + +#define __GLE_DOUBLE + +/* ====================================================== */ + +#ifdef __GLE_DOUBLE +#ifndef gleDouble + #define gleDouble double +#endif +#define urot_axis(a,b,c) urot_axis_d(a,b,c) +#define uview_direction(a,b,c) uview_direction_d(a,b,c) +#define uviewpoint(a,b,c,d) uviewpoint_d(a,b,c,d) +#define MULTMATRIX(m) MULTMATRIX_D(m) +#define LOADMATRIX(m) LOADMATRIX_D(m) +#define V3F(x,j,id) V3F_D(x,j,id) +#define N3F(x) N3F_D(x) +#define T2F(x,y) T2F_D(x,y) +#else +#define gleDouble float +#define urot_axis(a,b,c) urot_axis_f(a,b,c) +#define uview_direction(a,b,c) uview_direction_f(a,b,c) +#define uviewpoint(a,b,c,d) uviewpoint_f(a,b,c,d) +#define MULTMATRIX(m) MULTMATRIX_F(m) +#define LOADMATRIX(m) LOADMATRIX_F(m) +#define V3F(x,j,id) V3F_F(x,j,id) +#define N3F(x) N3F_F(x) +#define T2F(x,y) T2F_F(x,y) +#endif + +/* ====================================================== */ + +#if (defined DEBUG_GL_32 || DEBUG_OPENGL_10) +#undef GL_32 +#undef OPENGL_10 + +#define BGNTMESH(i,len) printf ("bgntmesh() \n"); +#define ENDTMESH() printf ("endtmesh() \n"); +#define BGNPOLYGON() printf ("bgnpolygon() \n"); +#define ENDPOLYGON() printf ("endpolygon() \n"); +#define V3F_F(x,j,id) printf ("v3f(x) %f %f %f \n", x[0], x[1], x[2]); +#define V3F_D(x,j,id) printf ("v3d(x) %f %f %f \n", x[0], x[1], x[2]); +#define N3F_F(x) printf ("n3f(x) %f %f %f \n", x[0], x[1], x[2]); +#define N3F_D(x) printf ("n3d(x) %f %f %f \n", x[0], x[1], x[2]); +#define C3F(x) printf ("c3f(x) %f %f %f \n", x[0], x[1], x[2]); + +#define POPMATRIX() printf ("popmatrix () \n"); +#define PUSHMATRIX() printf ("pushmatrix() \n"); +#define MULTMATRIX_F(x) MULTMATRIX_D(x) +#define LOADMATRIX_F(x) LOADMATRIX_D(x) + + +#define LOADMATRIX_D(x) { \ + int i, j; \ + printf ("loadmatrix (x) \n"); \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + printf ( "%f ", x[i][j]); \ + } \ + printf (" \n"); \ + } \ +} + +#define MULTMATRIX_D(x) { \ + int i, j; \ + printf ("multmatrix (x) \n"); \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + printf ( "%f ", x[i][j]); \ + } \ + printf (" \n"); \ + } \ +} + +#define __IS_LIGHTING_ON (1) + +#endif + +/* ====================================================== */ + +#ifdef GL_32 + +#include + +#define BGNTMESH(i,len) bgntmesh() +#define ENDTMESH() endtmesh() +#define BGNPOLYGON() bgnpolygon() +#define ENDPOLYGON() endpolygon() +#define V3F_F(x,j,id) v3f(x) +#define V3F_D(x,j,id) v3d(x) +#define N3F_F(x) n3f(x) +#define T2F_F(x,y) +#define T2F_D(x,y) +#define C3F(x) c3f(x) + +#define POPMATRIX() popmatrix () +#define PUSHMATRIX() pushmatrix() +#define MULTMATRIX_F(x) multmatrix (x) +#define LOADMATRIX_F(x) loadmatrix (x) + +#define N3F_D(x) { \ + float nnn[3]; \ + nnn[0] = (float) x[0]; \ + nnn[1] = (float) x[1]; \ + nnn[2] = (float) x[2]; \ + n3f (nnn); \ +} + +#define LOADMATRIX_D(x) { \ + int i, j; \ + float mmm[4][4]; \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + mmm[i][j] = (float) x[i][j]; \ + } \ + } \ + loadmatrix(mmm); \ +} + +#define MULTMATRIX_D(x) { \ + int i, j; \ + float mmm[4][4]; \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + mmm[i][j] = (float) x[i][j]; \ + } \ + } \ + multmatrix(mmm); \ +} + +/* #define __IS_LIGHTING_ON (MSINGLE == getmmode()) */ +#define __IS_LIGHTING_ON (extrusion_join_style & TUBE_LIGHTING_ON) + +#endif /* GL_32 */ + +/* ====================================================== */ +#ifdef OPENGL_10 + +#if defined(_WIN32) +#include +#pragma warning (disable:4244) /* disable bogus conversion warnings */ +#endif +#include +#include + +/* +#define N3F_F(x) { \ + float nnn[3]; \ + nnn[0] = - (float) x[0]; \ + nnn[1] = - (float) x[1]; \ + nnn[2] = - (float) x[2]; \ + glNormal3fv (nnn); \ +} +#define N3F_D(x) { \ + float nnn[3]; \ + nnn[0] = - (float) x[0]; \ + nnn[1] = - (float) x[1]; \ + nnn[2] = - (float) x[2]; \ + glNormal3fv (nnn); \ +} +*/ + +#define C3F(x) glColor3fv(x) +#define T2F_F(x,y) glTexCoord2f(x,y) +#define T2F_D(x,y) glTexCoord2d(x,y) + +#define POPMATRIX() glPopMatrix() +#define PUSHMATRIX() glPushMatrix() + +#define MULTMATRIX_F(x) glMultMatrixf ((const GLfloat *)x) +#define LOADMATRIX_F(x) glLoadMatrixf ((const GLfloat *)x) + +#define MULTMATRIX_D(x) glMultMatrixd ((const GLdouble *)x) +#define LOADMATRIX_D(x) glLoadMatrixd ((const GLdouble *)x) + +#define __IS_LIGHTING_ON (glIsEnabled(GL_LIGHTING)) + +/* ====================================================== */ +#ifdef AUTO_TEXTURE + +#define BGNTMESH(i,len) { \ + if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))(i,len);\ + glBegin (GL_TRIANGLE_STRIP); \ +} + +#define BGNPOLYGON() { \ + if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))();\ + glBegin (GL_POLYGON); \ +} + +#define N3F_F(x) { \ + if(_gle_gc -> n3f_gen_texture) (*(_gle_gc -> n3f_gen_texture))(x); \ + glNormal3fv(x); \ +} + +#define N3F_D(x) { \ + if(_gle_gc -> n3d_gen_texture) (*(_gle_gc -> n3d_gen_texture))(x); \ + glNormal3dv(x); \ +} + +#define V3F_F(x,j,id) { \ + if(_gle_gc -> v3f_gen_texture) (*(_gle_gc -> v3f_gen_texture))(x,j,id);\ + glVertex3fv(x); \ +} + +#define V3F_D(x,j,id) { \ + if(_gle_gc -> v3d_gen_texture) (*(_gle_gc -> v3d_gen_texture))(x,j,id); \ + glVertex3dv(x); \ +} + +#define ENDTMESH() { \ + if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \ + glEnd (); \ +} + +#define ENDPOLYGON() { \ + if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \ + glEnd (); \ +} + +/* ====================================================== */ +#else /* AUTO_TEXTURE */ + +#define BGNTMESH(i,len) glBegin (GL_TRIANGLE_STRIP); +#define BGNPOLYGON() glBegin (GL_POLYGON); + +#define N3F_F(x) glNormal3fv(x) +#define N3F_D(x) glNormal3dv(x) +#define V3F_F(x,j,id) glVertex3fv(x); +#define V3F_D(x,j,id) glVertex3dv(x); + +#define ENDTMESH() glEnd () +#define ENDPOLYGON() glEnd() + +#endif /* AUTO_TEXTURE */ + +#endif /* OPENGL_10 */ + +/* ====================================================== */ + + +#endif /* __GLE_PORT_H__ */ +/* ================== END OF FILE ======================= */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/rot.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/rot.h new file mode 100644 index 0000000..91083e9 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/rot.h @@ -0,0 +1,98 @@ + +/* + * rot.h + * + * FUNCTION: + * rotation matrix utilities + * + * HISTORY: + * Linas Vepstas Aug 1990 + */ + +/* ========================================================== */ +/* + * The MACROS below generate and return more traditional rotation + * matrices -- matrices for rotations about principal axes. + */ +/* ========================================================== */ + +#define ROTX_CS(m,cosine,sine) \ +{ \ + /* rotation about the x-axis */ \ + \ + m[0][0] = 1.0; \ + m[0][1] = 0.0; \ + m[0][2] = 0.0; \ + m[0][3] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = (cosine); \ + m[1][2] = (sine); \ + m[1][3] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = -(sine); \ + m[2][2] = (cosine); \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ + +#define ROTY_CS(m,cosine,sine) \ +{ \ + /* rotation about the y-axis */ \ + \ + m[0][0] = (cosine); \ + m[0][1] = 0.0; \ + m[0][2] = -(sine); \ + m[0][3] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = 1.0; \ + m[1][2] = 0.0; \ + m[1][3] = 0.0; \ + \ + m[2][0] = (sine); \ + m[2][1] = 0.0; \ + m[2][2] = (cosine); \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ + +#define ROTZ_CS(m,cosine,sine) \ +{ \ + /* rotation about the z-axis */ \ + \ + m[0][0] = (cosine); \ + m[0][1] = (sine); \ + m[0][2] = 0.0; \ + m[0][3] = 0.0; \ + \ + m[1][0] = -(sine); \ + m[1][1] = (cosine); \ + m[1][2] = 0.0; \ + m[1][3] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = 0.0; \ + m[2][2] = 1.0; \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/segment.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/segment.h new file mode 100644 index 0000000..8d1cf04 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/segment.h @@ -0,0 +1,98 @@ + +/* + * MODULE: segment.h + * + * FUNCTION: + * Contains function prototypes for segment drawing subroutines. + * These are used only internally, and are not to be exported to + * the user. + * + * HISTORY: + * Create by Linas Vepstas + * Added tube.h include to define gleDouble, tad February 2002 + */ + +/* ============================================================ */ + +#include "tube.h" + +extern void draw_segment_plain (int ncp, /* number of contour points */ + gleDouble front_contour[][3], + gleDouble back_contour[][3], + int inext, double len); + +extern void draw_segment_color (int ncp, /* number of contour points */ + gleDouble front_contour[][3], + gleDouble back_contour[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_segment_edge_n (int ncp, /* number of contour points */ + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + int inext, double len); + +extern void draw_segment_c_and_edge_n (int ncp, + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_segment_facet_n (int ncp, + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + int inext, double len); + +extern void draw_segment_c_and_facet_n (int ncp, + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +/* ============================================================ */ + +extern void draw_binorm_segment_edge_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + int inext, double len); + +extern void draw_binorm_segment_c_and_edge_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_binorm_segment_facet_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + int inext, double len); + +extern void draw_binorm_segment_c_and_facet_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_angle_style_back_cap (int ncp, /* number of contour points */ + gleDouble bi[3], /* biscetor */ + gleDouble point_array[][3]); /* polyline */ + +/* -------------------------- end of file -------------------------------- */ + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube.h new file mode 100644 index 0000000..c303e19 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube.h @@ -0,0 +1,203 @@ +/* + * tube.h + * + * FUNCTION: + * Tubing and Extrusion header file. + * This file provides protypes and defines for the extrusion + * and tubing primitives. + * + * HISTORY: + * Linas Vepstas 1990, 1991 + */ + +#ifndef __TUBE_H__ +#define __TUBE_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + GLE API revision history: + + GLE_API_VERSION is updated to reflect GLE API changes (interface + changes, semantic changes, deletions, or additions). + + GLE_API_VERSION=228 GLUT 3.7 release of GLE. +**/ +#ifndef GLE_API_VERSION /* allow this to be overriden */ +#define GLE_API_VERSION 228 +#endif + +/* some types */ +#ifndef gleDouble + #define gleDouble double +#endif +typedef gleDouble gleAffine[2][3]; + +/* ====================================================== */ + +/* defines for tubing join styles */ +#define TUBE_JN_RAW 0x1 +#define TUBE_JN_ANGLE 0x2 +#define TUBE_JN_CUT 0x3 +#define TUBE_JN_ROUND 0x4 +#define TUBE_JN_MASK 0xf /* mask bits */ +#define TUBE_JN_CAP 0x10 + +/* determine how normal vectors are to be handled */ +#define TUBE_NORM_FACET 0x100 +#define TUBE_NORM_EDGE 0x200 +#define TUBE_NORM_PATH_EDGE 0x400 /* for spiral, lathe, helix primitives */ +#define TUBE_NORM_MASK 0xf00 /* mask bits */ + +/* closed or open countours */ +#define TUBE_CONTOUR_CLOSED 0x1000 + +#define GLE_TEXTURE_ENABLE 0x10000 +#define GLE_TEXTURE_STYLE_MASK 0xff +#define GLE_TEXTURE_VERTEX_FLAT 1 +#define GLE_TEXTURE_NORMAL_FLAT 2 +#define GLE_TEXTURE_VERTEX_CYL 3 +#define GLE_TEXTURE_NORMAL_CYL 4 +#define GLE_TEXTURE_VERTEX_SPH 5 +#define GLE_TEXTURE_NORMAL_SPH 6 +#define GLE_TEXTURE_VERTEX_MODEL_FLAT 7 +#define GLE_TEXTURE_NORMAL_MODEL_FLAT 8 +#define GLE_TEXTURE_VERTEX_MODEL_CYL 9 +#define GLE_TEXTURE_NORMAL_MODEL_CYL 10 +#define GLE_TEXTURE_VERTEX_MODEL_SPH 11 +#define GLE_TEXTURE_NORMAL_MODEL_SPH 12 + +#ifdef GL_32 +/* HACK for GL 3.2 -- needed because no way to tell if lighting is on. */ +#define TUBE_LIGHTING_ON 0x80000000 + +#define gleExtrusion extrusion +#define gleSetJoinStyle setjoinstyle +#define gleGetJoinStyle getjoinstyle +#define glePolyCone polycone +#define glePolyCylinder polycylinder +#define gleSuperExtrusion super_extrusion +#define gleTwistExtrusion twist_extrusion +#define gleSpiral spiral +#define gleLathe lathe +#define gleHelicoid helicoid +#define gleToroid toroid +#define gleScrew screw + +#endif /* GL_32 */ + +extern int gleGetJoinStyle (void); +extern void gleSetJoinStyle (int style); /* bitwise OR of flags */ +extern int gleGetNumSlices(void); +extern void gleSetNumSlices(int slices); + +/* draw polyclinder, specified as a polyline */ +extern void glePolyCylinder (int npoints, /* num points in polyline */ + gleDouble point_array[][3], /* polyline vertces */ + float color_array[][3], /* colors at polyline verts */ + gleDouble radius); /* radius of polycylinder */ + +/* draw polycone, specified as a polyline with radii */ +extern void glePolyCone (int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3], /* colors at polyline verts */ + gleDouble radius_array[]); /* cone radii at polyline verts */ + +/* extrude arbitrary 2D contour along arbitrary 3D path */ +extern void gleExtrusion (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3]); /* colors at polyline verts */ + +/* extrude 2D contour, specifying local rotations (twists) */ +extern void gleTwistExtrusion (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3], /* color at polyline verts */ + gleDouble twist_array[]); /* countour twists (in degrees) */ + +/* extrude 2D contour, specifying local affine tranformations */ +extern void gleSuperExtrusion (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3], /* color at polyline verts */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + +/* spiral moves contour along helical path by parallel transport */ +extern void gleSpiral (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* lathe moves contour along helical path by helically shearing 3D space */ +extern void gleLathe (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* similar to spiral, except contour is a circle */ +extern void gleHelicoid (gleDouble rToroid, /* circle contour (torus) radius */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* similar to lathe, except contour is a circle */ +extern void gleToroid (gleDouble rToroid, /* circle contour (torus) radius */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* draws a screw shape */ +extern void gleScrew (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + gleDouble startz, /* start of segment */ + gleDouble endz, /* end of segment */ + gleDouble twist); /* number of rotations */ + +extern void gleTextureMode (int mode); + +#ifdef __cplusplus +} + +#endif +#endif /* __TUBE_H__ */ +/* ================== END OF FILE ======================= */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube_gc.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube_gc.h new file mode 100644 index 0000000..ccd2853 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube_gc.h @@ -0,0 +1,78 @@ + +/* + * tube_gc.h + * + * FUNCTION: + * This file allows for easy changes to changes in the way the extrusion + * library handles state info (i.e. context). + * + * HISTORY: + * Linas Vepstas --- February 1993 + * Added auto texture coord generation hacks, Linas April 1994 + * Added tube.h include to define gleDouble, tad February 2002 + */ + +#include "tube.h" +#include "port.h" /* for gleVector */ + +typedef float gleColor[3]; +typedef double gleTwoVec[2]; + +typedef struct { + + /* public methods */ + void (*bgn_gen_texture) (int, double); + void (*n3f_gen_texture) (float *); + void (*n3d_gen_texture) (double *); + void (*v3f_gen_texture) (float *, int, int); + void (*v3d_gen_texture) (double *, int, int); + void (*end_gen_texture) (void); + + /* protected members -- "general knowledge" stuff */ + int join_style; + + /* arguments passed into extrusion code */ + int ncp; /* number of contour points */ + gleTwoVec *contour; /* 2D contour */ + gleTwoVec *cont_normal; /* 2D contour normals */ + gleDouble *up; /* up vector */ + int npoints; /* number of points in polyline */ + gleVector *point_array; /* path */ + gleColor *color_array; /* path colors */ + gleAffine *xform_array; /* contour xforms */ + + /* private members, used by texturing code */ + int num_vert; + int segment_number; + double segment_length; + double accum_seg_len; + double prev_x; + double prev_y; + + void (*save_bgn_gen_texture) (int, double); + void (*save_n3f_gen_texture) (float *); + void (*save_n3d_gen_texture) (double *); + void (*save_v3f_gen_texture) (float *, int, int); + void (*save_v3d_gen_texture) (double *, int, int); + void (*save_end_gen_texture) (void); + +} gleGC; + +extern gleGC *_gle_gc; +extern gleGC * gleCreateGC (void); + +#define INIT_GC() {if (!_gle_gc) _gle_gc = gleCreateGC(); } +#define extrusion_join_style (_gle_gc->join_style) + +#define __TUBE_CLOSE_CONTOUR (extrusion_join_style & TUBE_CONTOUR_CLOSED) +#define __TUBE_DRAW_CAP (extrusion_join_style & TUBE_JN_CAP) +#define __TUBE_DRAW_FACET_NORMALS (extrusion_join_style & TUBE_NORM_FACET) +#define __TUBE_DRAW_PATH_EDGE_NORMALS (extrusion_join_style & TUBE_NORM_PATH_EDGE) + +#define __TUBE_STYLE (extrusion_join_style & TUBE_JN_MASK) +#define __TUBE_RAW_JOIN (extrusion_join_style & TUBE_JN_RAW) +#define __TUBE_CUT_JOIN (extrusion_join_style & TUBE_JN_CUT) +#define __TUBE_ANGLE_JOIN (extrusion_join_style & TUBE_JN_ANGLE) +#define __TUBE_ROUND_JOIN (extrusion_join_style & TUBE_JN_ROUND) + +/* ======================= END OF FILE ========================== */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/vvector.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/vvector.h new file mode 100644 index 0000000..b58dcd6 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/vvector.h @@ -0,0 +1,1339 @@ + +/* + * vvector.h + * + * FUNCTION: + * This file contains a number of utilities useful for handling + * 3D vectors + * + * HISTORY: + * Written by Linas Vepstas, August 1991 + * Added 2D code, March 1993 + * Added Outer products, C++ proofed, Linas Vepstas October 1993 + */ + +#ifndef __GUTIL_VECTOR_H__ +#define __GUTIL_VECTOR_H__ + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + + +#include +#include "port.h" + +/* ========================================================== */ +/* Zero out a 2D vector */ + +#define VEC_ZERO_2(a) \ +{ \ + (a)[0] = (a)[1] = 0.0; \ +} + +/* ========================================================== */ +/* Zero out a 3D vector */ + +#define VEC_ZERO(a) \ +{ \ + (a)[0] = (a)[1] = (a)[2] = 0.0; \ +} + +/* ========================================================== */ +/* Zero out a 4D vector */ + +#define VEC_ZERO_4(a) \ +{ \ + (a)[0] = (a)[1] = (a)[2] = (a)[3] = 0.0; \ +} + +/* ========================================================== */ +/* Vector copy */ + +#define VEC_COPY_2(b,a) \ +{ \ + (b)[0] = (a)[0]; \ + (b)[1] = (a)[1]; \ +} + +/* ========================================================== */ +/* Copy 3D vector */ + +#define VEC_COPY(b,a) \ +{ \ + (b)[0] = (a)[0]; \ + (b)[1] = (a)[1]; \ + (b)[2] = (a)[2]; \ +} + +/* ========================================================== */ +/* Copy 4D vector */ + +#define VEC_COPY_4(b,a) \ +{ \ + (b)[0] = (a)[0]; \ + (b)[1] = (a)[1]; \ + (b)[2] = (a)[2]; \ + (b)[3] = (a)[3]; \ +} + +/* ========================================================== */ +/* Vector difference */ + +#define VEC_DIFF_2(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] - (v1)[0]; \ + (v21)[1] = (v2)[1] - (v1)[1]; \ +} + +/* ========================================================== */ +/* Vector difference */ + +#define VEC_DIFF(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] - (v1)[0]; \ + (v21)[1] = (v2)[1] - (v1)[1]; \ + (v21)[2] = (v2)[2] - (v1)[2]; \ +} + +/* ========================================================== */ +/* Vector difference */ + +#define VEC_DIFF_4(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] - (v1)[0]; \ + (v21)[1] = (v2)[1] - (v1)[1]; \ + (v21)[2] = (v2)[2] - (v1)[2]; \ + (v21)[3] = (v2)[3] - (v1)[3]; \ +} + +/* ========================================================== */ +/* Vector sum */ + +#define VEC_SUM_2(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] + (v1)[0]; \ + (v21)[1] = (v2)[1] + (v1)[1]; \ +} + +/* ========================================================== */ +/* Vector sum */ + +#define VEC_SUM(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] + (v1)[0]; \ + (v21)[1] = (v2)[1] + (v1)[1]; \ + (v21)[2] = (v2)[2] + (v1)[2]; \ +} + +/* ========================================================== */ +/* Vector sum */ + +#define VEC_SUM_4(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] + (v1)[0]; \ + (v21)[1] = (v2)[1] + (v1)[1]; \ + (v21)[2] = (v2)[2] + (v1)[2]; \ + (v21)[3] = (v2)[3] + (v1)[3]; \ +} + +/* ========================================================== */ +/* scalar times vector */ + +#define VEC_SCALE_2(c,a,b) \ +{ \ + (c)[0] = (a)*(b)[0]; \ + (c)[1] = (a)*(b)[1]; \ +} + +/* ========================================================== */ +/* scalar times vector */ + +#define VEC_SCALE(c,a,b) \ +{ \ + (c)[0] = (a)*(b)[0]; \ + (c)[1] = (a)*(b)[1]; \ + (c)[2] = (a)*(b)[2]; \ +} + +/* ========================================================== */ +/* scalar times vector */ + +#define VEC_SCALE_4(c,a,b) \ +{ \ + (c)[0] = (a)*(b)[0]; \ + (c)[1] = (a)*(b)[1]; \ + (c)[2] = (a)*(b)[2]; \ + (c)[3] = (a)*(b)[3]; \ +} + +/* ========================================================== */ +/* accumulate scaled vector */ + +#define VEC_ACCUM_2(c,a,b) \ +{ \ + (c)[0] += (a)*(b)[0]; \ + (c)[1] += (a)*(b)[1]; \ +} + +/* ========================================================== */ +/* accumulate scaled vector */ + +#define VEC_ACCUM(c,a,b) \ +{ \ + (c)[0] += (a)*(b)[0]; \ + (c)[1] += (a)*(b)[1]; \ + (c)[2] += (a)*(b)[2]; \ +} + +/* ========================================================== */ +/* accumulate scaled vector */ + +#define VEC_ACCUM_4(c,a,b) \ +{ \ + (c)[0] += (a)*(b)[0]; \ + (c)[1] += (a)*(b)[1]; \ + (c)[2] += (a)*(b)[2]; \ + (c)[3] += (a)*(b)[3]; \ +} + +/* ========================================================== */ +/* Vector dot product */ + +#define VEC_DOT_PRODUCT_2(c,a,b) \ +{ \ + c = (a)[0]*(b)[0] + (a)[1]*(b)[1]; \ +} + +/* ========================================================== */ +/* Vector dot product */ + +#define VEC_DOT_PRODUCT(c,a,b) \ +{ \ + c = (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2]; \ +} + +/* ========================================================== */ +/* Vector dot product */ + +#define VEC_DOT_PRODUCT_4(c,a,b) \ +{ \ + c = (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2] + (a)[3]*(b)[3] ; \ +} + +/* ========================================================== */ +/* vector impact parameter (squared) */ + +#define VEC_IMPACT_SQ(bsq,direction,position) \ +{ \ + gleDouble vlen, llel; \ + VEC_DOT_PRODUCT (vlen, position, position); \ + VEC_DOT_PRODUCT (llel, direction, position); \ + bsq = vlen - llel*llel; \ +} + +/* ========================================================== */ +/* vector impact parameter */ + +#define VEC_IMPACT(bsq,direction,position) \ +{ \ + VEC_IMPACT_SQ(bsq,direction,position); \ + bsq = sqrt (bsq); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_LENGTH_2(vlen,a) \ +{ \ + vlen = a[0]*a[0] + a[1]*a[1]; \ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_LENGTH(vlen,a) \ +{ \ + vlen = (a)[0]*(a)[0] + (a)[1]*(a)[1]; \ + vlen += (a)[2]*(a)[2]; \ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_LENGTH_4(vlen,a) \ +{ \ + vlen = (a)[0]*(a)[0] + (a)[1]*(a)[1]; \ + vlen += (a)[2]*(a)[2]; \ + vlen += (a)[3] * (a)[3]; \ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* distance between two points */ + +#define VEC_DISTANCE(vlen,va,vb) \ +{ \ + gleDouble tmp[4]; \ + VEC_DIFF (tmp, vb, va); \ + VEC_LENGTH (vlen, tmp); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_CONJUGATE_LENGTH(vlen,a) \ +{ \ + vlen = 1.0 - a[0]*a[0] - a[1]*a[1] - a[2]*a[2];\ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_NORMALIZE(a) \ +{ \ + double vlen; \ + VEC_LENGTH (vlen,a); \ + if (vlen != 0.0) { \ + vlen = 1.0 / vlen; \ + a[0] *= vlen; \ + a[1] *= vlen; \ + a[2] *= vlen; \ + } \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_RENORMALIZE(a,newlen) \ +{ \ + double vlen; \ + VEC_LENGTH (vlen,a); \ + if (vlen != 0.0) { \ + vlen = newlen / vlen; \ + a[0] *= vlen; \ + a[1] *= vlen; \ + a[2] *= vlen; \ + } \ +} + +/* ========================================================== */ +/* 3D Vector cross product yeilding vector */ + +#define VEC_CROSS_PRODUCT(c,a,b) \ +{ \ + c[0] = (a)[1] * (b)[2] - (a)[2] * (b)[1]; \ + c[1] = (a)[2] * (b)[0] - (a)[0] * (b)[2]; \ + c[2] = (a)[0] * (b)[1] - (a)[1] * (b)[0]; \ +} + +/* ========================================================== */ +/* Vector perp -- assumes that n is of unit length + * accepts vector v, subtracts out any component parallel to n */ + +#define VEC_PERP(vp,v,n) \ +{ \ + double vdot; \ + \ + VEC_DOT_PRODUCT (vdot, v, n); \ + vp[0] = (v)[0] - (vdot) * (n)[0]; \ + vp[1] = (v)[1] - (vdot) * (n)[1]; \ + vp[2] = (v)[2] - (vdot) * (n)[2]; \ +} + +/* ========================================================== */ +/* Vector parallel -- assumes that n is of unit length + * accepts vector v, subtracts out any component perpendicular to n */ + +#define VEC_PARALLEL(vp,v,n) \ +{ \ + double vdot; \ + \ + VEC_DOT_PRODUCT (vdot, v, n); \ + vp[0] = (vdot) * (n)[0]; \ + vp[1] = (vdot) * (n)[1]; \ + vp[2] = (vdot) * (n)[2]; \ +} + +/* ========================================================== */ +/* Vector reflection -- assumes n is of unit length */ +/* Takes vector v, reflects it against reflector n, and returns vr */ + +#define VEC_REFLECT(vr,v,n) \ +{ \ + double vdot; \ + \ + VEC_DOT_PRODUCT (vdot, v, n); \ + vr[0] = (v)[0] - 2.0 * (vdot) * (n)[0]; \ + vr[1] = (v)[1] - 2.0 * (vdot) * (n)[1]; \ + vr[2] = (v)[2] - 2.0 * (vdot) * (n)[2]; \ +} + +/* ========================================================== */ +/* Vector blending */ +/* Takes two vectors a, b, blends them together */ + +#define VEC_BLEND(vr,sa,a,sb,b) \ +{ \ + \ + vr[0] = (sa) * (a)[0] + (sb) * (b)[0]; \ + vr[1] = (sa) * (a)[1] + (sb) * (b)[1]; \ + vr[2] = (sa) * (a)[2] + (sb) * (b)[2]; \ +} + +/* ========================================================== */ +/* Vector print */ + +#define VEC_PRINT_2(a) \ +{ \ + double vlen; \ + VEC_LENGTH_2 (vlen, a); \ + printf (" a is %f %f length of a is %f \n", a[0], a[1], vlen); \ +} + +/* ========================================================== */ +/* Vector print */ + +#define VEC_PRINT(a) \ +{ \ + double vlen; \ + VEC_LENGTH (vlen, (a)); \ + printf (" a is %f %f %f length of a is %f \n", (a)[0], (a)[1], (a)[2], vlen); \ +} + +/* ========================================================== */ +/* Vector print */ + +#define VEC_PRINT_4(a) \ +{ \ + double vlen; \ + VEC_LENGTH_4 (vlen, (a)); \ + printf (" a is %f %f %f %f length of a is %f \n", \ + (a)[0], (a)[1], (a)[2], (a)[3], vlen); \ +} + +/* ========================================================== */ +/* print matrix */ + +#define MAT_PRINT_4X4(mmm) { \ + int i,j; \ + printf ("matrix mmm is \n"); \ + if (mmm == NULL) { \ + printf (" Null \n"); \ + } else { \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + printf ("%f ", mmm[i][j]); \ + } \ + printf (" \n"); \ + } \ + } \ +} + +/* ========================================================== */ +/* print matrix */ + +#define MAT_PRINT_3X3(mmm) { \ + int i,j; \ + printf ("matrix mmm is \n"); \ + if (mmm == NULL) { \ + printf (" Null \n"); \ + } else { \ + for (i=0; i<3; i++) { \ + for (j=0; j<3; j++) { \ + printf ("%f ", mmm[i][j]); \ + } \ + printf (" \n"); \ + } \ + } \ +} + +/* ========================================================== */ +/* print matrix */ + +#define MAT_PRINT_2X3(mmm) { \ + int i,j; \ + printf ("matrix mmm is \n"); \ + if (mmm == NULL) { \ + printf (" Null \n"); \ + } else { \ + for (i=0; i<2; i++) { \ + for (j=0; j<3; j++) { \ + printf ("%f ", mmm[i][j]); \ + } \ + printf (" \n"); \ + } \ + } \ +} + +/* ========================================================== */ +/* initialize matrix */ + +#define IDENTIFY_MATRIX_3X3(m) \ +{ \ + m[0][0] = 1.0; \ + m[0][1] = 0.0; \ + m[0][2] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = 1.0; \ + m[1][2] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = 0.0; \ + m[2][2] = 1.0; \ +} + +/* ========================================================== */ +/* initialize matrix */ + +#define IDENTIFY_MATRIX_4X4(m) \ +{ \ + m[0][0] = 1.0; \ + m[0][1] = 0.0; \ + m[0][2] = 0.0; \ + m[0][3] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = 1.0; \ + m[1][2] = 0.0; \ + m[1][3] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = 0.0; \ + m[2][2] = 1.0; \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_2X2(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_2X3(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + b[0][2] = a[0][2]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[1][2]; \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_3X3(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + b[0][2] = a[0][2]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[1][2]; \ + \ + b[2][0] = a[2][0]; \ + b[2][1] = a[2][1]; \ + b[2][2] = a[2][2]; \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_4X4(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + b[0][2] = a[0][2]; \ + b[0][3] = a[0][3]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[1][2]; \ + b[1][3] = a[1][3]; \ + \ + b[2][0] = a[2][0]; \ + b[2][1] = a[2][1]; \ + b[2][2] = a[2][2]; \ + b[2][3] = a[2][3]; \ + \ + b[3][0] = a[3][0]; \ + b[3][1] = a[3][1]; \ + b[3][2] = a[3][2]; \ + b[3][3] = a[3][3]; \ +} + +/* ========================================================== */ +/* matrix transpose */ + +#define TRANSPOSE_MATRIX_2X2(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[1][0]; \ + \ + b[1][0] = a[0][1]; \ + b[1][1] = a[1][1]; \ +} + +/* ========================================================== */ +/* matrix transpose */ + +#define TRANSPOSE_MATRIX_3X3(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[1][0]; \ + b[0][2] = a[2][0]; \ + \ + b[1][0] = a[0][1]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[2][1]; \ + \ + b[2][0] = a[0][2]; \ + b[2][1] = a[1][2]; \ + b[2][2] = a[2][2]; \ +} + +/* ========================================================== */ +/* matrix transpose */ + +#define TRANSPOSE_MATRIX_4X4(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[1][0]; \ + b[0][2] = a[2][0]; \ + b[0][3] = a[3][0]; \ + \ + b[1][0] = a[0][1]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[2][1]; \ + b[1][3] = a[3][1]; \ + \ + b[2][0] = a[0][2]; \ + b[2][1] = a[1][2]; \ + b[2][2] = a[2][2]; \ + b[2][3] = a[3][2]; \ + \ + b[3][0] = a[0][3]; \ + b[3][1] = a[1][3]; \ + b[3][2] = a[2][3]; \ + b[3][3] = a[3][3]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define SCALE_MATRIX_2X2(b,s,a) \ +{ \ + b[0][0] = (s) * a[0][0]; \ + b[0][1] = (s) * a[0][1]; \ + \ + b[1][0] = (s) * a[1][0]; \ + b[1][1] = (s) * a[1][1]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define SCALE_MATRIX_3X3(b,s,a) \ +{ \ + b[0][0] = (s) * a[0][0]; \ + b[0][1] = (s) * a[0][1]; \ + b[0][2] = (s) * a[0][2]; \ + \ + b[1][0] = (s) * a[1][0]; \ + b[1][1] = (s) * a[1][1]; \ + b[1][2] = (s) * a[1][2]; \ + \ + b[2][0] = (s) * a[2][0]; \ + b[2][1] = (s) * a[2][1]; \ + b[2][2] = (s) * a[2][2]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define SCALE_MATRIX_4X4(b,s,a) \ +{ \ + b[0][0] = (s) * a[0][0]; \ + b[0][1] = (s) * a[0][1]; \ + b[0][2] = (s) * a[0][2]; \ + b[0][3] = (s) * a[0][3]; \ + \ + b[1][0] = (s) * a[1][0]; \ + b[1][1] = (s) * a[1][1]; \ + b[1][2] = (s) * a[1][2]; \ + b[1][3] = (s) * a[1][3]; \ + \ + b[2][0] = (s) * a[2][0]; \ + b[2][1] = (s) * a[2][1]; \ + b[2][2] = (s) * a[2][2]; \ + b[2][3] = (s) * a[2][3]; \ + \ + b[3][0] = s * a[3][0]; \ + b[3][1] = s * a[3][1]; \ + b[3][2] = s * a[3][2]; \ + b[3][3] = s * a[3][3]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define ACCUM_SCALE_MATRIX_2X2(b,s,a) \ +{ \ + b[0][0] += (s) * a[0][0]; \ + b[0][1] += (s) * a[0][1]; \ + \ + b[1][0] += (s) * a[1][0]; \ + b[1][1] += (s) * a[1][1]; \ +} + +/* +========================================================== */ +/* multiply matrix by scalar */ + +#define ACCUM_SCALE_MATRIX_3X3(b,s,a) \ +{ \ + b[0][0] += (s) * a[0][0]; \ + b[0][1] += (s) * a[0][1]; \ + b[0][2] += (s) * a[0][2]; \ + \ + b[1][0] += (s) * a[1][0]; \ + b[1][1] += (s) * a[1][1]; \ + b[1][2] += (s) * a[1][2]; \ + \ + b[2][0] += (s) * a[2][0]; \ + b[2][1] += (s) * a[2][1]; \ + b[2][2] += (s) * a[2][2]; \ +} + +/* +========================================================== */ +/* multiply matrix by scalar */ + +#define ACCUM_SCALE_MATRIX_4X4(b,s,a) \ +{ \ + b[0][0] += (s) * a[0][0]; \ + b[0][1] += (s) * a[0][1]; \ + b[0][2] += (s) * a[0][2]; \ + b[0][3] += (s) * a[0][3]; \ + \ + b[1][0] += (s) * a[1][0]; \ + b[1][1] += (s) * a[1][1]; \ + b[1][2] += (s) * a[1][2]; \ + b[1][3] += (s) * a[1][3]; \ + \ + b[2][0] += (s) * a[2][0]; \ + b[2][1] += (s) * a[2][1]; \ + b[2][2] += (s) * a[2][2]; \ + b[2][3] += (s) * a[2][3]; \ + \ + b[3][0] += (s) * a[3][0]; \ + b[3][1] += (s) * a[3][1]; \ + b[3][2] += (s) * a[3][2]; \ + b[3][3] += (s) * a[3][3]; \ +} + +/* +========================================================== */ +/* matrix product */ +/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ + +#define MATRIX_PRODUCT_2X2(c,a,b) \ +{ \ + c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]; \ + c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]; \ + \ + c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]; \ + c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]; \ + \ +} + +/* ========================================================== */ +/* matrix product */ +/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ + +#define MATRIX_PRODUCT_3X3(c,a,b) \ +{ \ + c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]; \ + c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]; \ + c[0][2] = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]; \ + \ + c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]; \ + c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]; \ + c[1][2] = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]; \ + \ + c[2][0] = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]; \ + c[2][1] = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]; \ + c[2][2] = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]; \ +} + +/* ========================================================== */ +/* matrix product */ +/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ + +#define MATRIX_PRODUCT_4X4(c,a,b) \ +{ \ + c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]+a[0][3]*b[3][0];\ + c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]+a[0][3]*b[3][1];\ + c[0][2] = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]+a[0][3]*b[3][2];\ + c[0][3] = a[0][0]*b[0][3]+a[0][1]*b[1][3]+a[0][2]*b[2][3]+a[0][3]*b[3][3];\ + \ + c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]+a[1][3]*b[3][0];\ + c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]+a[1][3]*b[3][1];\ + c[1][2] = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]+a[1][3]*b[3][2];\ + c[1][3] = a[1][0]*b[0][3]+a[1][1]*b[1][3]+a[1][2]*b[2][3]+a[1][3]*b[3][3];\ + \ + c[2][0] = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]+a[2][3]*b[3][0];\ + c[2][1] = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]+a[2][3]*b[3][1];\ + c[2][2] = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]+a[2][3]*b[3][2];\ + c[2][3] = a[2][0]*b[0][3]+a[2][1]*b[1][3]+a[2][2]*b[2][3]+a[2][3]*b[3][3];\ + \ + c[3][0] = a[3][0]*b[0][0]+a[3][1]*b[1][0]+a[3][2]*b[2][0]+a[3][3]*b[3][0];\ + c[3][1] = a[3][0]*b[0][1]+a[3][1]*b[1][1]+a[3][2]*b[2][1]+a[3][3]*b[3][1];\ + c[3][2] = a[3][0]*b[0][2]+a[3][1]*b[1][2]+a[3][2]*b[2][2]+a[3][3]*b[3][2];\ + c[3][3] = a[3][0]*b[0][3]+a[3][1]*b[1][3]+a[3][2]*b[2][3]+a[3][3]*b[3][3];\ +} + +/* ========================================================== */ +/* matrix times vector */ + +#define MAT_DOT_VEC_2X2(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1]; \ +} + +/* ========================================================== */ +/* matrix times vector */ + +#define MAT_DOT_VEC_3X3(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2]; \ + p[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2]; \ +} + +/* ========================================================== */ +/* matrix times vector */ + +#define MAT_DOT_VEC_4X4(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2] + m[0][3]*v[3]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2] + m[1][3]*v[3]; \ + p[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2] + m[2][3]*v[3]; \ + p[3] = m[3][0]*v[0] + m[3][1]*v[1] + m[3][2]*v[2] + m[3][3]*v[3]; \ +} + +/* ========================================================== */ +/* vector transpose times matrix */ +/* p[j] = v[0]*m[0][j] + v[1]*m[1][j] + v[2]*m[2][j]; */ + +#define VEC_DOT_MAT_3X3(p,v,m) \ +{ \ + p[0] = v[0]*m[0][0] + v[1]*m[1][0] + v[2]*m[2][0]; \ + p[1] = v[0]*m[0][1] + v[1]*m[1][1] + v[2]*m[2][1]; \ + p[2] = v[0]*m[0][2] + v[1]*m[1][2] + v[2]*m[2][2]; \ +} + +/* ========================================================== */ +/* affine matrix times vector */ +/* The matrix is assumed to be an affine matrix, with last two + * entries representing a translation */ + +#define MAT_DOT_VEC_2X3(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]; \ +} + +/* ========================================================== */ +/* inverse transpose of matrix times vector + * + * This macro computes inverse transpose of matrix m, + * and multiplies vector v into it, to yeild vector p + * + * DANGER !!! Do Not use this on normal vectors!!! + * It will leave normals the wrong length !!! + * See macro below for use on normals. + */ + +#define INV_TRANSP_MAT_DOT_VEC_2X2(p,m,v) \ +{ \ + gleDouble det; \ + \ + det = m[0][0]*m[1][1] - m[0][1]*m[1][0]; \ + p[0] = m[1][1]*v[0] - m[1][0]*v[1]; \ + p[1] = - m[0][1]*v[0] + m[0][0]*v[1]; \ + \ + /* if matrix not singular, and not orthonormal, then renormalize */ \ + if ((det!=1.0) && (det != 0.0)) { \ + det = 1.0 / det; \ + p[0] *= det; \ + p[1] *= det; \ + } \ +} + +/* ========================================================== */ +/* transform normal vector by inverse transpose of matrix + * and then renormalize the vector + * + * This macro computes inverse transpose of matrix m, + * and multiplies vector v into it, to yeild vector p + * Vector p is then normalized. + */ + + +#define NORM_XFORM_2X2(p,m,v) \ +{ \ + double mlen; \ + \ + /* do nothing if off-diagonals are zero and diagonals are \ + * equal */ \ + if ((m[0][1] != 0.0) || (m[1][0] != 0.0) || (m[0][0] != m[1][1])) { \ + p[0] = m[1][1]*v[0] - m[1][0]*v[1]; \ + p[1] = - m[0][1]*v[0] + m[0][0]*v[1]; \ + \ + mlen = p[0]*p[0] + p[1]*p[1]; \ + mlen = 1.0 / sqrt (mlen); \ + p[0] *= mlen; \ + p[1] *= mlen; \ + } else { \ + VEC_COPY_2 (p, v); \ + } \ +} + +/* ========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define OUTER_PRODUCT_2X2(m,v,t) \ +{ \ + m[0][0] = v[0] * t[0]; \ + m[0][1] = v[0] * t[1]; \ + \ + m[1][0] = v[1] * t[0]; \ + m[1][1] = v[1] * t[1]; \ +} + +/* ========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define OUTER_PRODUCT_3X3(m,v,t) \ +{ \ + m[0][0] = v[0] * t[0]; \ + m[0][1] = v[0] * t[1]; \ + m[0][2] = v[0] * t[2]; \ + \ + m[1][0] = v[1] * t[0]; \ + m[1][1] = v[1] * t[1]; \ + m[1][2] = v[1] * t[2]; \ + \ + m[2][0] = v[2] * t[0]; \ + m[2][1] = v[2] * t[1]; \ + m[2][2] = v[2] * t[2]; \ +} + +/* ========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define OUTER_PRODUCT_4X4(m,v,t) \ +{ \ + m[0][0] = v[0] * t[0]; \ + m[0][1] = v[0] * t[1]; \ + m[0][2] = v[0] * t[2]; \ + m[0][3] = v[0] * t[3]; \ + \ + m[1][0] = v[1] * t[0]; \ + m[1][1] = v[1] * t[1]; \ + m[1][2] = v[1] * t[2]; \ + m[1][3] = v[1] * t[3]; \ + \ + m[2][0] = v[2] * t[0]; \ + m[2][1] = v[2] * t[1]; \ + m[2][2] = v[2] * t[2]; \ + m[2][3] = v[2] * t[3]; \ + \ + m[3][0] = v[3] * t[0]; \ + m[3][1] = v[3] * t[1]; \ + m[3][2] = v[3] * t[2]; \ + m[3][3] = v[3] * t[3]; \ +} + +/* +========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define ACCUM_OUTER_PRODUCT_2X2(m,v,t) \ +{ \ + m[0][0] += v[0] * t[0]; \ + m[0][1] += v[0] * t[1]; \ + \ + m[1][0] += v[1] * t[0]; \ + m[1][1] += v[1] * t[1]; \ +} + +/* +========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define ACCUM_OUTER_PRODUCT_3X3(m,v,t) \ +{ \ + m[0][0] += v[0] * t[0]; \ + m[0][1] += v[0] * t[1]; \ + m[0][2] += v[0] * t[2]; \ + \ + m[1][0] += v[1] * t[0]; \ + m[1][1] += v[1] * t[1]; \ + m[1][2] += v[1] * t[2]; \ + \ + m[2][0] += v[2] * t[0]; \ + m[2][1] += v[2] * t[1]; \ + m[2][2] += v[2] * t[2]; \ +} + +/* +========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define ACCUM_OUTER_PRODUCT_4X4(m,v,t) \ +{ \ + m[0][0] += v[0] * t[0]; \ + m[0][1] += v[0] * t[1]; \ + m[0][2] += v[0] * t[2]; \ + m[0][3] += v[0] * t[3]; \ + \ + m[1][0] += v[1] * t[0]; \ + m[1][1] += v[1] * t[1]; \ + m[1][2] += v[1] * t[2]; \ + m[1][3] += v[1] * t[3]; \ + \ + m[2][0] += v[2] * t[0]; \ + m[2][1] += v[2] * t[1]; \ + m[2][2] += v[2] * t[2]; \ + m[2][3] += v[2] * t[3]; \ + \ + m[3][0] += v[3] * t[0]; \ + m[3][1] += v[3] * t[1]; \ + m[3][2] += v[3] * t[2]; \ + m[3][3] += v[3] * t[3]; \ +} + +/* +========================================================== */ +/* determinant of matrix + * + * Computes determinant of matrix m, returning d + */ + +#define DETERMINANT_2X2(d,m) \ +{ \ + d = m[0][0] * m[1][1] - m[0][1] * m[1][0]; \ +} + +/* ========================================================== */ +/* determinant of matrix + * + * Computes determinant of matrix m, returning d + */ + +#define DETERMINANT_3X3(d,m) \ +{ \ + d = m[0][0] * (m[1][1]*m[2][2] - m[1][2] * m[2][1]); \ + d -= m[0][1] * (m[1][0]*m[2][2] - m[1][2] * m[2][0]); \ + d += m[0][2] * (m[1][0]*m[2][1] - m[1][1] * m[2][0]); \ +} + +/* ========================================================== */ +/* i,j,th cofactor of a 4x4 matrix + * + */ + +#define COFACTOR_4X4_IJ(fac,m,i,j) \ +{ \ + int ii[4], jj[4], k; \ + \ + /* compute which row, columnt to skip */ \ + for (k=0; k + + + + IBDocumentLocation + 4 104 410 240 0 0 1152 848 + IBEditorPositions + + 29 + 19 615 246 44 0 0 1152 848 + + IBFramework Version + 291.0 + IBGroupedObjects + + IBLastGroupID + 1 + IBOpenObjects + + 29 + + IBSystem Version + 6I32 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUT.nib/objects.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUT.nib/objects.nib new file mode 100644 index 0000000..8a7140e Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUT.nib/objects.nib differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/classes.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/classes.nib new file mode 100644 index 0000000..7e85eb1 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/classes.nib @@ -0,0 +1,13 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {toggleWindow = id; }; + CLASS = GLUTClipboardController; + LANGUAGE = ObjC; + OUTLETS = {_infoText = id; _scrollView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/info.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/info.nib new file mode 100644 index 0000000..867735d --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 63 221 356 240 0 0 1600 1178 + IBFramework Version + 263.2 + IBSystem Version + 5S41 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/objects.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/objects.nib new file mode 100644 index 0000000..29125d4 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/objects.nib differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/classes.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/classes.nib new file mode 100644 index 0000000..c675963 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/classes.nib @@ -0,0 +1,73 @@ +{ + IBClasses = ( + { + ACTIONS = {save = id; saveAs = id; }; + CLASS = FirstResponder; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; + }, + { + ACTIONS = { + cancel = id; + joyAssign = id; + joyDevice = id; + joyElement = id; + joyInvert = id; + launchDebugMode = id; + launchGamemodeCaptureSingle = id; + launchIconic = id; + launchUseCurrWD = id; + launchUseExtDesktop = id; + launchUseMacOSCoords = id; + mouseEanbleEmulation = id; + mouseMiddleMenu = id; + mouseRightMenu = id; + ok = id; + spaceAssign = id; + spaceDevice = id; + spaceElement = id; + spaceInvert = id; + }; + CLASS = GLUTPreferencesController; + LANGUAGE = ObjC; + OUTLETS = { + joyAssign = NSButton; + joyAssignNote = NSTextField; + joyAssignWarningIcon = NSImageView; + joyDeviceMenu = NSPopUpButton; + joyElement = NSTextField; + joyInputMenu = NSPopUpButton; + joyInverted = NSButton; + launchDebugMode = NSButton; + launchFadeTime = NSTextField; + launchGamemodeCaptureSingle = NSButton; + launchIconic = NSButton; + launchInitHeight = NSTextField; + launchInitWidth = NSTextField; + launchInitX = NSTextField; + launchInitY = NSTextField; + launchMenuIdle = NSTextField; + launchSyncToVBL = NSButton; + launchUseCurrWD = NSButton; + launchUseExtendedDesktop = NSButton; + launchUseMacOSXCoords = NSButton; + mouseAssignWarningIcon = NSImageView; + mouseAssignWarningText = NSTextField; + mouseDetected = NSTextField; + mouseEmulation = NSButton; + mouseMiddleConfigMenu = NSPopUpButton; + mouseRightConfigMenu = NSPopUpButton; + prefsTabView = NSTabView; + spaceAssign = NSButton; + spaceAssignNote = NSTextField; + spaceAssignWarningIcon = NSImageView; + spaceDeviceMenu = NSPopUpButton; + spaceElement = NSTextField; + spaceInputMenu = NSPopUpButton; + spaceInverted = NSButton; + }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/info.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/info.nib new file mode 100644 index 0000000..216c8dc --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 16 329 410 240 0 0 1920 1178 + IBFramework Version + 439.0 + IBOpenObjects + + 205 + + IBSystem Version + 8G32 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/objects.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/objects.nib new file mode 100644 index 0000000..7598f2c Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/objects.nib differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTUI.strings b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTUI.strings new file mode 100644 index 0000000..6db3c5c Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTUI.strings differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/InfoPlist.strings b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..6f78b89 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/InfoPlist.strings differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/Info.plist b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/Info.plist new file mode 100644 index 0000000..e8fc9d6 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + GLUT + CFBundleGetInfoString + 3.4.0, Copyright (c) 2001-2008 Apple Inc., All Rights Reserved + CFBundleIdentifier + com.apple.glut + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.4.0 + CFBundleSignature + ???? + CFBundleVersion + GLUT-3.4.0 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/blankCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/blankCursor.tiff new file mode 100644 index 0000000..a2b0cf1 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/blankCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomCursor.tiff new file mode 100644 index 0000000..c3f4795 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomleftCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomleftCursor.tiff new file mode 100644 index 0000000..274529f Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomleftCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomrightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomrightCursor.tiff new file mode 100644 index 0000000..dec4252 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomrightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/crossCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/crossCursor.tiff new file mode 100644 index 0000000..8536c0e Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/crossCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/cycleCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/cycleCursor.tiff new file mode 100644 index 0000000..34b52f6 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/cycleCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/destroyCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/destroyCursor.tiff new file mode 100644 index 0000000..9e3a1cb Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/destroyCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/fingerCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/fingerCursor.tiff new file mode 100644 index 0000000..0087c66 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/fingerCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/helpCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/helpCursor.tiff new file mode 100644 index 0000000..fc4a88a Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/helpCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftCursor.tiff new file mode 100644 index 0000000..852b69b Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftRightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftRightCursor.tiff new file mode 100644 index 0000000..37fe393 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftRightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightArrowCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightArrowCursor.tiff new file mode 100644 index 0000000..d852616 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightArrowCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightCursor.tiff new file mode 100644 index 0000000..9781f22 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/sprayCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/sprayCursor.tiff new file mode 100644 index 0000000..9bec966 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/sprayCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topCursor.tiff new file mode 100644 index 0000000..e4df0de Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topleftCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topleftCursor.tiff new file mode 100644 index 0000000..43cf97f Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topleftCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/toprightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/toprightCursor.tiff new file mode 100644 index 0000000..429b01b Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/toprightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/upDownCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/upDownCursor.tiff new file mode 100644 index 0000000..1605063 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/upDownCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/waitCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/waitCursor.tiff new file mode 100644 index 0000000..81ba1aa Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/waitCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/GLUT b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/GLUT new file mode 100644 index 0000000..babc6b1 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/GLUT differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/copy.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/copy.h new file mode 100644 index 0000000..a5116e2 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/copy.h @@ -0,0 +1,18 @@ + +/* + * + * Written By Linas Vepstas November 1991 + */ + + +#define COPY_THREE_WORDS(A,B) { \ + struct three_words { int a, b, c, }; \ + *(struct three_words *) (A) = *(struct three_words *) (B); \ +} + +#define COPY_FOUR_WORDS(A,B) { \ + struct four_words { int a, b, c, d, }; \ + *(struct four_words *) (A) = *(struct four_words *) (B); \ +} + +/* ============================================================= */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/extrude.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/extrude.h new file mode 100644 index 0000000..658699e --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/extrude.h @@ -0,0 +1,96 @@ + +/* + * extrude.h + * + * FUNCTION: + * prototypes for privately used subroutines for the tubing library + * + * HISTORY: + * Linas Vepstas 1991 + */ + +#include "port.h" /* for gleDouble */ + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +/* ============================================================ */ +/* + * Provides choice of calling subroutine, vs. invoking macro. + * Basically, inlines the source, or not. + * Trades performance for executable size. + */ + +#define INLINE_INTERSECT +#ifdef INLINE_INTERSECT +#define INNERSECT(sect,p,n,v1,v2) { INTERSECT(sect,p,n,v1,v2); } +#else +#define INNERSECT(sect,p,n,v1,v2) intersect(sect,p,n,v1,v2) +#endif /* INLINE_INTERSECT */ + +/* ============================================================ */ +/* The folowing defines give a kludgy way of accessing the qmesh primitive */ + +/* +#define bgntmesh _emu_qmesh_bgnqmesh +#define endtmesh _emu_qmesh_endqmesh +#define c3f _emu_qmesh_c3f +#define n3f _emu_qmesh_n3f +#define v3f _emu_qmesh_v3f +*/ + +/* ============================================================ */ + +extern void up_sanity_check (gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3]); /* polyline */ + + +extern void draw_raw_style_end_cap (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble zval, /* where to draw cap */ + int frontwards); /* front or back cap */ + +extern void draw_round_style_cap_callback (int iloop, + double cap[][3], + float face_color[3], + gleDouble cut_vector[3], + gleDouble bisect_vector[3], + double norms[][3], + int frontwards); + +extern void draw_angle_style_front_cap (int ncp, + gleDouble bi[3], + gleDouble point_array[][3]); + +extern void extrusion_raw_join (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2],/* 2D contour normal vecs */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline */ + float color_array[][3], /* color of polyline */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + + +extern void extrusion_round_or_cut_join (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2],/* 2D contour normal vecs */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline */ + float color_array[][3], /* color of polyline */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + + +extern void extrusion_angle_join (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2],/* 2D contour normal vecs */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline */ + float color_array[][3], /* color of polyline */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + +/* -------------------------- end of file -------------------------------- */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glsmap.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glsmap.h new file mode 100644 index 0000000..baf54a7 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glsmap.h @@ -0,0 +1,137 @@ +#ifndef __glsmap_h__ +#define __glsmap_h__ + +/* Copyright (c) Mark J. Kilgard, 1998. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#if defined(_WIN32) + +/* Try hard to avoid including to avoid name space pollution, + but Win32's needs APIENTRY and WINGDIAPI defined properly. */ +# if 0 +# define WIN32_LEAN_AND_MEAN +# include +# else + /* XXX This is from Win32's */ +# ifndef APIENTRY +# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) +# define APIENTRY __stdcall +# else +# define APIENTRY +# endif +# endif +# ifndef CALLBACK + /* XXX This is from Win32's */ +# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +# endif + /* XXX This is from Win32's and */ +# ifndef WINGDIAPI +# define WINGDIAPI __declspec(dllimport) +# endif + /* XXX This is from Win32's */ +# ifndef _WCHAR_T_DEFINED +typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +# endif +# endif + +#pragma warning (disable:4244) /* Disable bogus conversion warnings. */ +#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ + +#endif /* _WIN32 */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + SMAP_CLEAR_SMAP_TEXTURE = 0x1, + SMAP_GENERATE_VIEW_MIPMAPS = 0x2, + SMAP_GENERATE_SMAP_MIPMAPS = 0x4, + SMAP_GENERATE_MIPMAPS = 0x6 /* both of above */ +} SphereMapFlags; + +/* Cube view enumerants. */ +enum { + SMAP_FRONT = 0, + SMAP_TOP = 1, + SMAP_BOTTOM = 2, + SMAP_LEFT = 3, + SMAP_RIGHT = 4, + SMAP_BACK = 5 +}; + +typedef struct _SphereMap SphereMap; + +extern SphereMap *smapCreateSphereMap(SphereMap *shareSmap); +extern void smapDestroySphereMap(SphereMap *smap); + +extern void smapConfigureSphereMapMesh(SphereMap *smap, int steps, int rings, int edgeExtend); + +extern void smapSetSphereMapTexObj(SphereMap *smap, GLuint texobj); +extern void smapSetViewTexObj(SphereMap *smap, GLuint texobj); +extern void smapSetViewTexObjs(SphereMap *smap, GLuint texobjs[6]); +extern void smapGetSphereMapTexObj(SphereMap *smap, GLuint *texobj); +extern void smapGetViewTexObj(SphereMap *smap, GLuint *texobj); +extern void smapGetViewTexObjs(SphereMap *smap, GLuint texobjs[6]); + +extern void smapSetFlags(SphereMap *smap, SphereMapFlags flags); +extern void smapGetFlags(SphereMap *smap, SphereMapFlags *flags); + +extern void smapSetViewOrigin(SphereMap *smap, GLint x, GLint y); +extern void smapSetSphereMapOrigin(SphereMap *smap, GLint x, GLint y); +extern void smapGetViewOrigin(SphereMap *smap, GLint *x, GLint *y); +extern void smapGetSphereMapOrigin(SphereMap *smap, GLint *x, GLint *y); + +extern void smapSetEye(SphereMap *smap, GLfloat eyex, GLfloat eyey, GLfloat eyez); +extern void smapSetEyeVector(SphereMap *smap, GLfloat *eye); +extern void smapSetUp(SphereMap *smap, GLfloat upx, GLfloat upy, GLfloat upz); +extern void smapSetUpVector(SphereMap *smap, GLfloat *up); +extern void smapSetObject(SphereMap *smap, GLfloat objx, GLfloat objy, GLfloat objz); +extern void smapSetObjectVector(SphereMap *smap, GLfloat *obj); +extern void smapGetEye(SphereMap *smap, GLfloat *eyex, GLfloat *eyey, GLfloat *eyez); +extern void smapGetEyeVector(SphereMap *smap, GLfloat *eye); +extern void smapGetUp(SphereMap *smap, GLfloat *upx, GLfloat *upy, GLfloat *upz); +extern void smapGetUpVector(SphereMap *smap, GLfloat *up); +extern void smapGetObject(SphereMap *smap, GLfloat *objx, GLfloat *objy, GLfloat *objz); +extern void smapGetObjectVector(SphereMap *smap, GLfloat *obj); + +extern void smapSetNearFar(SphereMap *smap, GLfloat viewNear, GLfloat viewFar); +extern void smapGetNearFar(SphereMap *smap, GLfloat *viewNear, GLfloat *viewFar); + +extern void smapSetSphereMapTexDim(SphereMap *smap, GLsizei texdim); +extern void smapSetViewTexDim(SphereMap *smap, GLsizei texdim); +extern void smapGetSphereMapTexDim(SphereMap *smap, GLsizei *texdim); +extern void smapGetViewTexDim(SphereMap *smap, GLsizei *texdim); + +extern void smapSetContextData(SphereMap *smap, void *context); +extern void smapGetContextData(SphereMap *smap, void **context); + +extern void smapSetPositionLightsFunc(SphereMap *smap, void (*positionLights)(int view, void *context)); +extern void smapSetDrawViewFunc(SphereMap *smap, void (*drawView)(int view, void *context)); +extern void smapGetPositionLightsFunc(SphereMap *smap, void (**positionLights)(int view, void *context)); +extern void smapGetDrawViewFunc(SphereMap *smap, void (**drawView)(int view, void *context)); + +extern void smapGenViewTex(SphereMap *smap, int view); +extern void smapGenViewTexs(SphereMap *smap); +extern void smapGenSphereMapFromViewTexs(SphereMap *smap); +extern void smapGenSphereMap(SphereMap *smap); +extern void smapGenSphereMapWithOneViewTex(SphereMap *smap); + +extern int smapRvecToSt(float rvec[3], float st[2]); +extern void smapStToRvec(float *st, float *rvec); + +#ifdef __cplusplus +} + +#endif +#endif /* __glsmap_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glsmapint.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glsmapint.h new file mode 100644 index 0000000..3620e7d --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glsmapint.h @@ -0,0 +1,102 @@ +#ifndef __glsmapint_h__ +#define __glsmapint_h__ + +/* Copyright (c) Mark J. Kilgard, 1998. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#include "glsmap.h" + +enum { X = 0, Y = 1, Z = 2 }; + +#define INITFACE(mesh) \ + int steps = mesh->steps; \ + int sqsteps = mesh->steps * mesh->steps + +#define FACE(side,y,x) \ + mesh->face[(side)*sqsteps + (y)*steps + (x)] + +#define FACExy(side,i,j) \ + (&FACE(side,i,j).x) + +#define FACEst(side,i,j) \ + (&FACE(side,i,j).s) + +#define INITBACK(mesh) \ + int allrings = mesh->rings + mesh->edgeExtend; \ + int ringedspokes = allrings * mesh->steps + +#define BACK(edge,ring,spoke) \ + mesh->back[(edge)*ringedspokes + (ring)*mesh->steps + (spoke)] + +#define BACKxy(edge,ring,spoke) \ + (&BACK(edge,ring,spoke).x) + +#define BACKst(edge,ring,spoke) \ + (&BACK(edge,ring,spoke).s) + +typedef struct _STXY { + GLfloat s, t; + GLfloat x, y; +} STXY; + +typedef struct _SphereMapMesh { + + int refcnt; + + int steps; + int rings; + int edgeExtend; + + STXY *face; + STXY *back; + +} SphereMapMesh; + +struct _SphereMap { + + /* Shared sphere map mesh vertex data. */ + SphereMapMesh *mesh; + + /* Texture object ids. */ + GLuint smapTexObj; + GLuint viewTexObjs[6]; + GLuint viewTexObj; + + /* Flags */ + SphereMapFlags flags; + + /* Texture dimensions must be a power of two. */ + int viewTexDim; /* view texture dimension */ + int smapTexDim; /* sphere map texture dimension */ + + /* Viewport origins for view and sphere map rendering. */ + int viewOrigin[2]; + int smapOrigin[2]; + + /* Viewing vectors. */ + GLfloat eye[3]; + GLfloat up[3]; + GLfloat obj[3]; + + /* Projection parameters. */ + GLfloat viewNear; + GLfloat viewFar; + + /* Rendering callbacks. */ + void (*positionLights)(int view, void *context); + void (*drawView)(int view, void *context); + + /* Application specified callback data. */ + void *context; + +}; + +/* Library internal routines. */ +extern void __smapDrawSphereMapMeshSide(SphereMapMesh *mesh, int side); +extern void __smapDrawSphereMapMeshBack(SphereMapMesh *mesh); +extern void __smapValidateSphereMapMesh(SphereMapMesh *mesh); + +#endif /* __glsmapint_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glut.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glut.h new file mode 100644 index 0000000..cbc6ebe --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glut.h @@ -0,0 +1,648 @@ +#ifndef __glut_h__ +#define __glut_h__ + +/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998. */ + +/* This program is freely distributable without licensing fees and is + provided without guarantee or warrantee expressed or implied. This + program is -not- in the public domain. */ +//#define GLUT_OF_007_HACK + +#if defined(_WIN32) + +/* GLUT 3.7 now tries to avoid including + to avoid name space pollution, but Win32's + needs APIENTRY and WINGDIAPI defined properly. */ +# if 0 +# define WIN32_LEAN_AND_MEAN +# include +# else + /* XXX This is from Win32's */ +# ifndef APIENTRY +# define GLUT_APIENTRY_DEFINED +# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) +# define APIENTRY __stdcall +# else +# define APIENTRY +# endif +# endif + /* XXX This is from Win32's */ +# ifndef CALLBACK +# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +# endif + /* XXX This is from Win32's and */ +# ifndef WINGDIAPI +# define GLUT_WINGDIAPI_DEFINED +# define WINGDIAPI __declspec(dllimport) +# endif + /* XXX This is from Win32's */ +# ifndef _WCHAR_T_DEFINED +typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +# endif +# endif + +#pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */ +#pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */ +#pragma comment (lib, "glu32.lib") /* link with OpenGL Utility lib */ +#pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */ + +#pragma warning (disable:4244) /* Disable bogus conversion warnings. */ +#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ + +#endif + +#if defined(__APPLE__) || defined(MACOSX) +#include +#include +#include +#else +#include +#include +#endif + +/* define APIENTRY and CALLBACK to null string if we aren't on Win32 */ +#if !defined(_WIN32) +#define APIENTRY +#define GLUT_APIENTRY_DEFINED +#define CALLBACK +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + GLUT API revision history: + + GLUT_API_VERSION is updated to reflect incompatible GLUT + API changes (interface changes, semantic changes, deletions, + or additions). + + GLUT_API_VERSION=1 First public release of GLUT. 11/29/94 + + GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling, + extension. Supports new input devices like tablet, dial and button + box, and Spaceball. Easy to query OpenGL extensions. + + GLUT_API_VERSION=3 glutMenuStatus added. + + GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer, + glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic + video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc, + glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat, + glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!). + + GLUT_API_VERSION=5 glutGetProcAddress (added by BrianP) +**/ +#ifndef GLUT_API_VERSION /* allow this to be overriden */ +#define GLUT_API_VERSION 5 +#endif + +/** + GLUT implementation revision history: + + GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT + API revisions and implementation revisions (ie, bug fixes). + + GLUT_XLIB_IMPLEMENTATION=1 mjk's first public release of + GLUT Xlib-based implementation. 11/29/94 + + GLUT_XLIB_IMPLEMENTATION=2 mjk's second public release of + GLUT Xlib-based implementation providing GLUT version 2 + interfaces. + + GLUT_XLIB_IMPLEMENTATION=3 mjk's GLUT 2.2 images. 4/17/95 + + GLUT_XLIB_IMPLEMENTATION=4 mjk's GLUT 2.3 images. 6/?/95 + + GLUT_XLIB_IMPLEMENTATION=5 mjk's GLUT 3.0 images. 10/?/95 + + GLUT_XLIB_IMPLEMENTATION=7 mjk's GLUT 3.1+ with glutWarpPoitner. 7/24/96 + + GLUT_XLIB_IMPLEMENTATION=8 mjk's GLUT 3.1+ with glutWarpPoitner + and video resize. 1/3/97 + + GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines. + + GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release. + + GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling. + + GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 beta with GameGLUT support. + + GLUT_XLIB_IMPLEMENTATION=14 mjk's GLUT 3.7 beta with f90gl friend interface. + + GLUT_XLIB_IMPLEMENTATION=15 mjk's GLUT 3.7 beta sync'ed with Mesa +**/ +#ifndef GLUT_XLIB_IMPLEMENTATION /* Allow this to be overriden. */ +#define GLUT_XLIB_IMPLEMENTATION 15 +#endif + +/** + MacOS X GLUT implementation revision history: + + GLUT_MACOSX_IMPLEMENTATION is updated to reflect MacOS X + specific GLUT API revisions and implementation revisions + (ie, bug fixes). + + GLUT_MACOSX_IMPLEMENTATION=1 glutSurfaceTexture. + + GLUT_MACOSX_IMPLEMENTATION=2 glutWMCloseFunc, glutCheckLoop. + +**/ +#ifndef GLUT_MACOSX_IMPLEMENTATION /* Allow this to be overriden. */ +#define GLUT_MACOSX_IMPLEMENTATION 2 +#endif + +/* Display mode bit masks. */ +#define GLUT_RGB 0 +#define GLUT_RGBA GLUT_RGB +#define GLUT_INDEX 1 +#define GLUT_SINGLE 0 +#define GLUT_DOUBLE 2 +#define GLUT_ACCUM 4 +#define GLUT_ALPHA 8 +#define GLUT_DEPTH 16 +#define GLUT_STENCIL 32 +#if (GLUT_API_VERSION >= 2) +#define GLUT_MULTISAMPLE 128 +#define GLUT_STEREO 256 +#endif +#if (GLUT_API_VERSION >= 3) +#define GLUT_LUMINANCE 512 +#endif +#define GLUT_NO_RECOVERY 1024 + +/* Mouse buttons. */ +#define GLUT_LEFT_BUTTON 0 +#define GLUT_MIDDLE_BUTTON 1 +#define GLUT_RIGHT_BUTTON 2 + +/* Mouse button state. */ +#define GLUT_DOWN 0 +#define GLUT_UP 1 + +#if (GLUT_API_VERSION >= 2) +/* function keys */ +#define GLUT_KEY_F1 1 +#define GLUT_KEY_F2 2 +#define GLUT_KEY_F3 3 +#define GLUT_KEY_F4 4 +#define GLUT_KEY_F5 5 +#define GLUT_KEY_F6 6 +#define GLUT_KEY_F7 7 +#define GLUT_KEY_F8 8 +#define GLUT_KEY_F9 9 +#define GLUT_KEY_F10 10 +#define GLUT_KEY_F11 11 +#define GLUT_KEY_F12 12 +/* directional keys */ +#define GLUT_KEY_LEFT 100 +#define GLUT_KEY_UP 101 +#define GLUT_KEY_RIGHT 102 +#define GLUT_KEY_DOWN 103 +#define GLUT_KEY_PAGE_UP 104 +#define GLUT_KEY_PAGE_DOWN 105 +#define GLUT_KEY_HOME 106 +#define GLUT_KEY_END 107 +#define GLUT_KEY_INSERT 108 +#endif + +/* Entry/exit state. */ +#define GLUT_LEFT 0 +#define GLUT_ENTERED 1 + +/* Menu usage state. */ +#define GLUT_MENU_NOT_IN_USE 0 +#define GLUT_MENU_IN_USE 1 + +/* Visibility state. */ +#define GLUT_NOT_VISIBLE 0 +#define GLUT_VISIBLE 1 + +/* Window status state. */ +#define GLUT_HIDDEN 0 +#define GLUT_FULLY_RETAINED 1 +#define GLUT_PARTIALLY_RETAINED 2 +#define GLUT_FULLY_COVERED 3 + +/* Color index component selection values. */ +#define GLUT_RED 0 +#define GLUT_GREEN 1 +#define GLUT_BLUE 2 + +/* Layers for use. */ +#define GLUT_NORMAL 0 +#define GLUT_OVERLAY 1 + +#if defined(_WIN32) +/* Stroke font constants (use these in GLUT program). */ +#define GLUT_STROKE_ROMAN ((void*)0) +#define GLUT_STROKE_MONO_ROMAN ((void*)1) + +/* Bitmap font constants (use these in GLUT program). */ +#define GLUT_BITMAP_9_BY_15 ((void*)2) +#define GLUT_BITMAP_8_BY_13 ((void*)3) +#define GLUT_BITMAP_TIMES_ROMAN_10 ((void*)4) +#define GLUT_BITMAP_TIMES_ROMAN_24 ((void*)5) +#if (GLUT_API_VERSION >= 3) +#define GLUT_BITMAP_HELVETICA_10 ((void*)6) +#define GLUT_BITMAP_HELVETICA_12 ((void*)7) +#define GLUT_BITMAP_HELVETICA_18 ((void*)8) +#endif +#else +/* Stroke font opaque addresses (use constants instead in source code). */ +extern void *glutStrokeRoman; +extern void *glutStrokeMonoRoman; + +/* Stroke font constants (use these in GLUT program). */ +#define GLUT_STROKE_ROMAN (&glutStrokeRoman) +#define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman) + +/* Bitmap font opaque addresses (use constants instead in source code). */ +extern void *glutBitmap9By15; +extern void *glutBitmap8By13; +extern void *glutBitmapTimesRoman10; +extern void *glutBitmapTimesRoman24; +extern void *glutBitmapHelvetica10; +extern void *glutBitmapHelvetica12; +extern void *glutBitmapHelvetica18; + +/* Bitmap font constants (use these in GLUT program). */ +#define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15) +#define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13) +#define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10) +#define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24) +#if (GLUT_API_VERSION >= 3) +#define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10) +#define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12) +#define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18) +#endif +#endif + +/* glutGet parameters. */ +#define GLUT_WINDOW_X 100 +#define GLUT_WINDOW_Y 101 +#define GLUT_WINDOW_WIDTH 102 +#define GLUT_WINDOW_HEIGHT 103 +#define GLUT_WINDOW_BUFFER_SIZE 104 +#define GLUT_WINDOW_STENCIL_SIZE 105 +#define GLUT_WINDOW_DEPTH_SIZE 106 +#define GLUT_WINDOW_RED_SIZE 107 +#define GLUT_WINDOW_GREEN_SIZE 108 +#define GLUT_WINDOW_BLUE_SIZE 109 +#define GLUT_WINDOW_ALPHA_SIZE 110 +#define GLUT_WINDOW_ACCUM_RED_SIZE 111 +#define GLUT_WINDOW_ACCUM_GREEN_SIZE 112 +#define GLUT_WINDOW_ACCUM_BLUE_SIZE 113 +#define GLUT_WINDOW_ACCUM_ALPHA_SIZE 114 +#define GLUT_WINDOW_DOUBLEBUFFER 115 +#define GLUT_WINDOW_RGBA 116 +#define GLUT_WINDOW_PARENT 117 +#define GLUT_WINDOW_NUM_CHILDREN 118 +#define GLUT_WINDOW_COLORMAP_SIZE 119 +#if (GLUT_API_VERSION >= 2) +#define GLUT_WINDOW_NUM_SAMPLES 120 +#define GLUT_WINDOW_STEREO 121 +#endif +#if (GLUT_API_VERSION >= 3) +#define GLUT_WINDOW_CURSOR 122 +#endif +#define GLUT_SCREEN_WIDTH 200 +#define GLUT_SCREEN_HEIGHT 201 +#define GLUT_SCREEN_WIDTH_MM 202 +#define GLUT_SCREEN_HEIGHT_MM 203 +#define GLUT_MENU_NUM_ITEMS 300 +#define GLUT_DISPLAY_MODE_POSSIBLE 400 +#define GLUT_INIT_WINDOW_X 500 +#define GLUT_INIT_WINDOW_Y 501 +#define GLUT_INIT_WINDOW_WIDTH 502 +#define GLUT_INIT_WINDOW_HEIGHT 503 +#define GLUT_INIT_DISPLAY_MODE 504 +#if (GLUT_API_VERSION >= 2) +#define GLUT_ELAPSED_TIME 700 +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +#define GLUT_WINDOW_FORMAT_ID 123 +#endif + +#if (GLUT_API_VERSION >= 2) +/* glutDeviceGet parameters. */ +#define GLUT_HAS_KEYBOARD 600 +#define GLUT_HAS_MOUSE 601 +#define GLUT_HAS_SPACEBALL 602 +#define GLUT_HAS_DIAL_AND_BUTTON_BOX 603 +#define GLUT_HAS_TABLET 604 +#define GLUT_NUM_MOUSE_BUTTONS 605 +#define GLUT_NUM_SPACEBALL_BUTTONS 606 +#define GLUT_NUM_BUTTON_BOX_BUTTONS 607 +#define GLUT_NUM_DIALS 608 +#define GLUT_NUM_TABLET_BUTTONS 609 +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +#define GLUT_DEVICE_IGNORE_KEY_REPEAT 610 +#define GLUT_DEVICE_KEY_REPEAT 611 +#define GLUT_HAS_JOYSTICK 612 +#define GLUT_OWNS_JOYSTICK 613 +#define GLUT_JOYSTICK_BUTTONS 614 +#define GLUT_JOYSTICK_AXES 615 +#define GLUT_JOYSTICK_POLL_RATE 616 +#endif + +#if (GLUT_API_VERSION >= 3) +/* glutLayerGet parameters. */ +#define GLUT_OVERLAY_POSSIBLE 800 +#define GLUT_LAYER_IN_USE 801 +#define GLUT_HAS_OVERLAY 802 +#define GLUT_TRANSPARENT_INDEX 803 +#define GLUT_NORMAL_DAMAGED 804 +#define GLUT_OVERLAY_DAMAGED 805 + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +/* glutVideoResizeGet parameters. */ +#define GLUT_VIDEO_RESIZE_POSSIBLE 900 +#define GLUT_VIDEO_RESIZE_IN_USE 901 +#define GLUT_VIDEO_RESIZE_X_DELTA 902 +#define GLUT_VIDEO_RESIZE_Y_DELTA 903 +#define GLUT_VIDEO_RESIZE_WIDTH_DELTA 904 +#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 905 +#define GLUT_VIDEO_RESIZE_X 906 +#define GLUT_VIDEO_RESIZE_Y 907 +#define GLUT_VIDEO_RESIZE_WIDTH 908 +#define GLUT_VIDEO_RESIZE_HEIGHT 909 +#endif + +/* glutUseLayer parameters. */ +#define GLUT_NORMAL 0 +#define GLUT_OVERLAY 1 + +/* glutGetModifiers return mask. */ +#define GLUT_ACTIVE_SHIFT 1 +#define GLUT_ACTIVE_CTRL 2 +#define GLUT_ACTIVE_ALT 4 + +/* glutSetCursor parameters. */ +/* Basic arrows. */ +#define GLUT_CURSOR_RIGHT_ARROW 0 +#define GLUT_CURSOR_LEFT_ARROW 1 +/* Symbolic cursor shapes. */ +#define GLUT_CURSOR_INFO 2 +#define GLUT_CURSOR_DESTROY 3 +#define GLUT_CURSOR_HELP 4 +#define GLUT_CURSOR_CYCLE 5 +#define GLUT_CURSOR_SPRAY 6 +#define GLUT_CURSOR_WAIT 7 +#define GLUT_CURSOR_TEXT 8 +#define GLUT_CURSOR_CROSSHAIR 9 +/* Directional cursors. */ +#define GLUT_CURSOR_UP_DOWN 10 +#define GLUT_CURSOR_LEFT_RIGHT 11 +/* Sizing cursors. */ +#define GLUT_CURSOR_TOP_SIDE 12 +#define GLUT_CURSOR_BOTTOM_SIDE 13 +#define GLUT_CURSOR_LEFT_SIDE 14 +#define GLUT_CURSOR_RIGHT_SIDE 15 +#define GLUT_CURSOR_TOP_LEFT_CORNER 16 +#define GLUT_CURSOR_TOP_RIGHT_CORNER 17 +#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 18 +#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 19 +/* Inherit from parent window. */ +#define GLUT_CURSOR_INHERIT 100 +/* Blank cursor. */ +#define GLUT_CURSOR_NONE 101 +/* Fullscreen crosshair (if available). */ +#define GLUT_CURSOR_FULL_CROSSHAIR 102 +#endif + +/* GLUT initialization sub-API. */ +extern void APIENTRY glutInit(int *argcp, char **argv); +extern void APIENTRY glutInitDisplayMode(unsigned int mode); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern void APIENTRY glutInitDisplayString(const char *string); +#endif +extern void APIENTRY glutInitWindowPosition(int x, int y); +extern void APIENTRY glutInitWindowSize(int width, int height); +extern void APIENTRY glutMainLoop(void); + +/* GLUT window sub-API. */ +extern int APIENTRY glutCreateWindow(const char *title); +extern int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height); +extern void APIENTRY glutDestroyWindow(int win); +extern void APIENTRY glutPostRedisplay(void); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) +extern void APIENTRY glutPostWindowRedisplay(int win); +#endif +extern void APIENTRY glutSwapBuffers(void); +extern int APIENTRY glutGetWindow(void); +extern void APIENTRY glutSetWindow(int win); +extern void APIENTRY glutSetWindowTitle(const char *title); +extern void APIENTRY glutSetIconTitle(const char *title); +extern void APIENTRY glutPositionWindow(int x, int y); +extern void APIENTRY glutReshapeWindow(int width, int height); +extern void APIENTRY glutPopWindow(void); +extern void APIENTRY glutPushWindow(void); +extern void APIENTRY glutIconifyWindow(void); +extern void APIENTRY glutShowWindow(void); +extern void APIENTRY glutHideWindow(void); +#if (GLUT_API_VERSION >= 3) +extern void APIENTRY glutFullScreen(void); +extern void APIENTRY glutSetCursor(int cursor); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern void APIENTRY glutWarpPointer(int x, int y); +#if (GLUT_MACOSX_IMPLEMENTATION >= 1) +/* surface texturing API Mac OS X specific +* Note: +* glutSurfaceTexture has been deprecated, use GL_EXT_framebuffer_object +*/ +#ifdef MAC_OS_X_VERSION_10_5 +extern void APIENTRY glutSurfaceTexture (GLenum target, GLenum internalformat, int surfacewin); AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5 +#else +extern void APIENTRY glutSurfaceTexture (GLenum target, GLenum internalformat, int surfacewin); +#endif +#endif +#if (GLUT_MACOSX_IMPLEMENTATION >= 2) +/* Mac OS X specific API */ +extern void APIENTRY glutWMCloseFunc(void (*func)(void)); +extern void APIENTRY glutCheckLoop(void); +#endif +#endif + +/* GLUT overlay sub-API. */ +extern void APIENTRY glutEstablishOverlay(void); +extern void APIENTRY glutRemoveOverlay(void); +extern void APIENTRY glutUseLayer(GLenum layer); +extern void APIENTRY glutPostOverlayRedisplay(void); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) +extern void APIENTRY glutPostWindowOverlayRedisplay(int win); +#endif +extern void APIENTRY glutShowOverlay(void); +extern void APIENTRY glutHideOverlay(void); +#endif + +/* GLUT menu sub-API. */ +extern int APIENTRY glutCreateMenu(void (*)(int)); +extern void APIENTRY glutDestroyMenu(int menu); +extern int APIENTRY glutGetMenu(void); +extern void APIENTRY glutSetMenu(int menu); +extern void APIENTRY glutAddMenuEntry(const char *label, int value); +extern void APIENTRY glutAddSubMenu(const char *label, int submenu); +extern void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value); +extern void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu); +extern void APIENTRY glutRemoveMenuItem(int item); +extern void APIENTRY glutAttachMenu(int button); +extern void APIENTRY glutDetachMenu(int button); + +/* GLUT window callback sub-API. */ +extern void APIENTRY glutDisplayFunc(void (*func)(void)); +extern void APIENTRY glutReshapeFunc(void (*func)(int width, int height)); +extern void APIENTRY glutKeyboardFunc(void (*func)(unsigned char key, int x, int y)); +extern void APIENTRY glutMouseFunc(void (*func)(int button, int state, int x, int y)); +extern void APIENTRY glutMotionFunc(void (*func)(int x, int y)); +extern void APIENTRY glutPassiveMotionFunc(void (*func)(int x, int y)); +extern void APIENTRY glutEntryFunc(void (*func)(int state)); +extern void APIENTRY glutVisibilityFunc(void (*func)(int state)); +extern void APIENTRY glutIdleFunc(void (*func)(void)); +extern void APIENTRY glutTimerFunc(unsigned int millis, void (*func)(int value), int value); +extern void APIENTRY glutMenuStateFunc(void (*func)(int state)); +#if (GLUT_API_VERSION >= 2) +extern void APIENTRY glutSpecialFunc(void (*func)(int key, int x, int y)); +extern void APIENTRY glutSpaceballMotionFunc(void (*func)(int x, int y, int z)); +extern void APIENTRY glutSpaceballRotateFunc(void (*func)(int x, int y, int z)); +extern void APIENTRY glutSpaceballButtonFunc(void (*func)(int button, int state)); +extern void APIENTRY glutButtonBoxFunc(void (*func)(int button, int state)); +extern void APIENTRY glutDialsFunc(void (*func)(int dial, int value)); +extern void APIENTRY glutTabletMotionFunc(void (*func)(int x, int y)); +extern void APIENTRY glutTabletButtonFunc(void (*func)(int button, int state, int x, int y)); +#if (GLUT_API_VERSION >= 3) +extern void APIENTRY glutMenuStatusFunc(void (*func)(int status, int x, int y)); +extern void APIENTRY glutOverlayDisplayFunc(void (*func)(void)); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern void APIENTRY glutWindowStatusFunc(void (*func)(int state)); +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +extern void APIENTRY glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y)); +extern void APIENTRY glutSpecialUpFunc(void (*func)(int key, int x, int y)); +extern void APIENTRY glutJoystickFunc(void (*func)(unsigned int buttonMask, int x, int y, int z), int pollInterval); +//#ifdef GLUT_OF_007_HACK +extern void APIENTRY glutDragEventFunc(void (*func)(char ** fileNames, int nFiles, int dragX, int dragY)); +//#endif +#endif +#endif +#endif + +/* GLUT color index sub-API. */ +extern void APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue); +extern GLfloat APIENTRY glutGetColor(int ndx, int component); +extern void APIENTRY glutCopyColormap(int win); + +/* GLUT state retrieval sub-API. */ +extern int APIENTRY glutGet(GLenum type); +extern int APIENTRY glutDeviceGet(GLenum type); +#if (GLUT_API_VERSION >= 2) +/* GLUT extension support sub-API */ +extern int APIENTRY glutExtensionSupported(const char *name); +#endif +#if (GLUT_API_VERSION >= 3) +extern int APIENTRY glutGetModifiers(void); +extern int APIENTRY glutLayerGet(GLenum type); +#endif +#if (GLUT_API_VERSION >= 5) +extern void * APIENTRY glutGetProcAddress(const char *procName); +#endif + +/* GLUT font sub-API */ +extern void APIENTRY glutBitmapCharacter(void *font, int character); +extern int APIENTRY glutBitmapWidth(void *font, int character); +extern void APIENTRY glutStrokeCharacter(void *font, int character); +extern int APIENTRY glutStrokeWidth(void *font, int character); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +extern int APIENTRY glutBitmapLength(void *font, const unsigned char *string); +extern int APIENTRY glutStrokeLength(void *font, const unsigned char *string); +#endif + +/* GLUT pre-built models sub-API */ +extern void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks); +extern void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); +extern void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); +extern void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); +extern void APIENTRY glutWireCube(GLdouble size); +extern void APIENTRY glutSolidCube(GLdouble size); +extern void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); +extern void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); +extern void APIENTRY glutWireDodecahedron(void); +extern void APIENTRY glutSolidDodecahedron(void); +extern void APIENTRY glutWireTeapot(GLdouble size); +extern void APIENTRY glutSolidTeapot(GLdouble size); +extern void APIENTRY glutWireOctahedron(void); +extern void APIENTRY glutSolidOctahedron(void); +extern void APIENTRY glutWireTetrahedron(void); +extern void APIENTRY glutSolidTetrahedron(void); +extern void APIENTRY glutWireIcosahedron(void); +extern void APIENTRY glutSolidIcosahedron(void); + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +/* GLUT video resize sub-API. */ +extern int APIENTRY glutVideoResizeGet(GLenum param); +extern void APIENTRY glutSetupVideoResizing(void); +extern void APIENTRY glutStopVideoResizing(void); +extern void APIENTRY glutVideoResize(int x, int y, int width, int height); +extern void APIENTRY glutVideoPan(int x, int y, int width, int height); + +/* GLUT debugging sub-API. */ +extern void APIENTRY glutReportErrors(void); +#endif + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +/* GLUT device control sub-API. */ +/* glutSetKeyRepeat modes. */ +#define GLUT_KEY_REPEAT_OFF 0 +#define GLUT_KEY_REPEAT_ON 1 +#define GLUT_KEY_REPEAT_DEFAULT 2 + +/* Joystick button masks. */ +#define GLUT_JOYSTICK_BUTTON_A 1 +#define GLUT_JOYSTICK_BUTTON_B 2 +#define GLUT_JOYSTICK_BUTTON_C 4 +#define GLUT_JOYSTICK_BUTTON_D 8 + +extern void APIENTRY glutIgnoreKeyRepeat(int ignore); +extern void APIENTRY glutSetKeyRepeat(int repeatMode); +extern void APIENTRY glutForceJoystickFunc(void); + +/* GLUT game mode sub-API. */ +/* glutGameModeGet. */ +#define GLUT_GAME_MODE_ACTIVE 0 +#define GLUT_GAME_MODE_POSSIBLE 1 +#define GLUT_GAME_MODE_WIDTH 2 +#define GLUT_GAME_MODE_HEIGHT 3 +#define GLUT_GAME_MODE_PIXEL_DEPTH 4 +#define GLUT_GAME_MODE_REFRESH_RATE 5 +#define GLUT_GAME_MODE_DISPLAY_CHANGED 6 + +extern void APIENTRY glutGameModeString(const char *string); +extern int APIENTRY glutEnterGameMode(void); +extern void APIENTRY glutLeaveGameMode(void); +extern int APIENTRY glutGameModeGet(GLenum mode); +#endif + +#ifdef __cplusplus +} + +#endif + +#ifdef GLUT_APIENTRY_DEFINED +# undef GLUT_APIENTRY_DEFINED +# undef APIENTRY +#endif + +#ifdef GLUT_WINGDIAPI_DEFINED +# undef GLUT_WINGDIAPI_DEFINED +# undef WINGDIAPI +#endif + +#endif /* __glut_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutbitmap.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutbitmap.h new file mode 100644 index 0000000..e29a016 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutbitmap.h @@ -0,0 +1,30 @@ +#ifndef __glutbitmap_h__ +#define __glutbitmap_h__ + +/* Copyright (c) Mark J. Kilgard, 1994. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#include "glut.h" + +typedef struct { + const GLsizei width; + const GLsizei height; + const GLfloat xorig; + const GLfloat yorig; + const GLfloat advance; + const GLubyte *bitmap; +} BitmapCharRec, *BitmapCharPtr; + +typedef struct { + const char *name; + const int num_chars; + const int first; + const BitmapCharRec * const *ch; +} BitmapFontRec, *BitmapFontPtr; + +typedef void *GLUTbitmapFont; + +#endif /* __glutbitmap_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutf90.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutf90.h new file mode 100644 index 0000000..f8a170b --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutf90.h @@ -0,0 +1,90 @@ +#ifndef __glutf90_h__ +#define __glutf90_h__ + +/* Copyright (c) Mark J. Kilgard & Willam F. Mitchell, 1998. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +/* This header provides the binding interface for William Mitchell's + f90gl Fortran 90 GLUT binding. Other GLUT language bindings + can and should use this interace. */ + +/* I appreciate the guidance from William Mitchell + (mitchell@cam.nist.gov) in developing this friend interface + for use by the f90gl package. See ../../README.fortran */ + +#include + +#ifndef GLUTCALLBACK + #define GLUTCALLBACK +#endif +#ifndef APIENTRY + #define APIENTRY +#endif + +/* Which callback enumerants for the __glutSetFCB/__glutGetFCB routines. */ +/* NOTE These values are part of a binary interface for the f90gl Fortran + 90 binding and so must NOT changes (additions are allowed). */ + +/* GLUTwindow callbacks. */ +#define GLUT_FCB_DISPLAY 0 /* GLUTdisplayFCB */ +#define GLUT_FCB_RESHAPE 1 /* GLUTreshapeFCB */ +#define GLUT_FCB_MOUSE 2 /* GLUTmouseFCB */ +#define GLUT_FCB_MOTION 3 /* GLUTmotionFCB */ +#define GLUT_FCB_PASSIVE 4 /* GLUTpassiveFCB */ +#define GLUT_FCB_ENTRY 5 /* GLUTentryFCB */ +#define GLUT_FCB_KEYBOARD 6 /* GLUTkeyboardFCB */ +#define GLUT_FCB_KEYBOARD_UP 7 /* GLUTkeyboardFCB */ +#define GLUT_FCB_WINDOW_STATUS 8 /* GLUTwindowStatusFCB */ +#define GLUT_FCB_VISIBILITY 9 /* GLUTvisibilityFCB */ +#define GLUT_FCB_SPECIAL 10 /* GLUTspecialFCB */ +#define GLUT_FCB_SPECIAL_UP 11 /* GLUTspecialFCB */ +#define GLUT_FCB_BUTTON_BOX 12 /* GLUTbuttonBoxFCB */ +#define GLUT_FCB_DIALS 13 /* GLUTdialsFCB */ +#define GLUT_FCB_SPACE_MOTION 14 /* GLUTspaceMotionFCB */ +#define GLUT_FCB_SPACE_ROTATE 15 /* GLUTspaceRotateFCB */ +#define GLUT_FCB_SPACE_BUTTON 16 /* GLUTspaceButtonFCB */ +#define GLUT_FCB_TABLET_MOTION 17 /* GLUTtabletMotionFCB */ +#define GLUT_FCB_TABLET_BUTTON 18 /* GLUTtabletButtonFCB */ +#define GLUT_FCB_JOYSTICK 19 /* GLUTjoystickFCB */ +#define GLUT_FCB_WMCLOSE 20 /* GLUTwmcloseFCB */ +/* Non-GLUTwindow callbacks. */ +#define GLUT_FCB_OVERLAY_DISPLAY 100 /* GLUTdisplayFCB */ +#define GLUT_FCB_SELECT 101 /* GLUTselectFCB */ +#define GLUT_FCB_TIMER 102 /* GLUTtimerFCB */ + +/* GLUT Fortran callback function types. */ +typedef void (GLUTCALLBACK *GLUTdisplayFCB) (void); +typedef void (GLUTCALLBACK *GLUTwmcloseFCB) (void); +typedef void (GLUTCALLBACK *GLUTreshapeFCB) (int *, int *); +/* NOTE the pressed key is int, not unsigned char for Fortran! */ +typedef void (GLUTCALLBACK *GLUTkeyboardFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTmouseFCB) (int *, int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTmotionFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTpassiveFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTentryFCB) (int *); +typedef void (GLUTCALLBACK *GLUTwindowStatusFCB) (int *); +typedef void (GLUTCALLBACK *GLUTvisibilityFCB) (int *); +typedef void (GLUTCALLBACK *GLUTspecialFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTbuttonBoxFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTdialsFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTspaceMotionFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTspaceRotateFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTspaceButtonFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTtabletMotionFCB) (int *, int *); +typedef void (GLUTCALLBACK *GLUTtabletButtonFCB) (int *, int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTjoystickFCB) (unsigned int *buttonMask, int *x, int *y, int *z); + +typedef void (GLUTCALLBACK *GLUTselectFCB) (int *); +typedef void (GLUTCALLBACK *GLUTtimerFCB) (int *); +typedef void (GLUTCALLBACK *GLUTmenuStateFCB) (int *); /* DEPRICATED. */ +typedef void (GLUTCALLBACK *GLUTmenuStatusFCB) (int *, int *, int *); +typedef void (GLUTCALLBACK *GLUTidleFCB) (void); + +/* Functions that set and return Fortran callback functions. */ +extern void* APIENTRY __glutGetFCB(int which); +extern void APIENTRY __glutSetFCB(int which, void *func); + +#endif /* __glutf90_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutstroke.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutstroke.h new file mode 100644 index 0000000..cbc9e15 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/glutstroke.h @@ -0,0 +1,42 @@ +#ifndef __glutstroke_h__ +#define __glutstroke_h__ + +/* Copyright (c) Mark J. Kilgard, 1994. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +#if defined(_WIN32) +#pragma warning (disable:4244) /* disable bogus conversion warnings */ +#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ +#endif + +typedef struct { + float x; + float y; +} CoordRec, *CoordPtr; + +typedef struct { + int num_coords; + const CoordRec *coord; +} StrokeRec, *StrokePtr; + +typedef struct { + int num_strokes; + const StrokeRec *stroke; + float center; + float right; +} StrokeCharRec, *StrokeCharPtr; + +typedef struct { + const char *name; + int num_chars; + const StrokeCharRec *ch; + float top; + float bottom; +} StrokeFontRec, *StrokeFontPtr; + +typedef void *GLUTstrokeFont; + +#endif /* __glutstroke_h__ */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/gutil.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/gutil.h new file mode 100644 index 0000000..f7ffcf3 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/gutil.h @@ -0,0 +1,89 @@ + +/* + * gutil.h + * + * FUNCTION: + * Provide utilities that allow rotation to occur + * around any axis. + * + * HISTORY: + * created by Linas Vepstas 1990 + * added single & double precision, June 1991, Linas Vepstas + */ + +#ifndef __GUTIL_H__ +#define __GUTIL_H__ + +#ifdef __GUTIL_DOUBLE +#define gutDouble double +#else +#define gutDouble float +#endif + + +#ifdef _NO_PROTO /* NO ANSI C PROTOTYPING */ + +/* Rotation Utilities */ +extern void rot_axis_f (); +extern void rot_about_axis_f (); +extern void rot_omega_f (); +extern void urot_axis_f (); +extern void urot_about_axis_f (); +extern void urot_omega_f (); + +/* double-precision versions */ +extern void rot_axis_d (); +extern void rot_about_axis_d (); +extern void rot_omega_d (); +extern void urot_axis_d (); +extern void urot_about_axis_d (); +extern void urot_omega_d (); + +/* viewpoint functions */ +extern void uview_direction_d (); +extern void uview_direction_f (); +extern void uviewpoint_d (); +extern void uviewpoint_f (); + +#else /* _NO_PROTO */ /* ANSI C PROTOTYPING */ + +/* Rotation Utilities */ +extern void rot_axis_f (float omega, float axis[3]); +extern void rot_about_axis_f (float angle, float axis[3]); +extern void rot_omega_f (float axis[3]); +extern void urot_axis_f (float m[4][4], float omega, float axis[3]); +extern void urot_about_axis_f (float m[4][4], float angle, float axis[3]); +extern void urot_omega_f (float m[4][4], float axis[3]); + +/* double-precision versions */ +extern void rot_axis_d (double omega, double axis[3]); +extern void rot_about_axis_d (double angle, double axis[3]); +extern void rot_omega_d (double axis[3]); +extern void urot_axis_d (double m[4][4], double omega, double axis[3]); +extern void urot_about_axis_d (double m[4][4], double angle, double axis[3]); +extern void urot_omega_d (double m[4][4], double axis[3]); + +/* viewpoint functions */ +extern void uview_direction_d (double m[4][4], /* returned */ + double v21[3], /* input */ + double up[3]); /* input */ + +extern void uview_direction_f (float m[4][4], /* returned */ + float v21[3], /* input */ + float up[3]); /* input */ + +extern void uviewpoint_d (double m[4][4], /* returned */ + double v1[3], /* input */ + double v2[3], /* input */ + double up[3]); /* input */ + +extern void uviewpoint_f (float m[4][4], /* returned */ + float v1[3], /* input */ + float v2[3], /* input */ + float up[3]); /* input */ + +#endif /* _NO_PROTO */ + +#endif /* _GUTIL_H__ */ + +/* ------------------- end of file ---------------------- */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/intersect.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/intersect.h new file mode 100644 index 0000000..f5ff7a5 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/intersect.h @@ -0,0 +1,391 @@ +/* + * FUNCTION: + * This file contains a number of utilities useful to 3D graphics in + * general, and to the generation of tubing and extrusions in particular + * + * HISTORY: + * Written by Linas Vepstas, August 1991 + * Updated to correctly handle degenerate cases, Linas, February 1993 + */ + +#include +#include "port.h" +#include "vvector.h" + +#define BACKWARDS_INTERSECT (2) + +/* ========================================================== */ +/* + * the Degenerate_Tolerance token represents the greatest amount by + * which different scales in a graphics environment can differ before + * they should be considered "degenerate". That is, when one vector is + * a million times longer than another, changces are that the second will + * be less than a pixel int, and therefore was probably meant to be + * degenerate (by the CAD package, etc.) But what should this tolerance + * be? At least 1 in onethousand (since screen sizes are 1K pixels), but + * les than 1 in 4 million (since this is the limit of single-precision + * floating point accuracy). Of course, if double precision were used, + * then the tolerance could be increased. + * + * Potentially, this naive assumption could cause problems if the CAD + * package attempts to zoom in on small details, and turns out, certain + * points should not hvae been degenerate. The problem presented here + * is that the tolerance could run out before single-precision ran + * out, and so the CAD packages would perceive this as a "bug". + * One alternative is to fiddle around & try to tighten the tolerance. + * However, the right alternative is to code the graphics pipeline in + * double-precision (and tighten the tolerance). + * + * By the way, note that Degernate Tolerance is a "dimensionless" + * quantitiy -- it has no units -- it does not measure feet, inches, + * millimeters or pixels. It is used only in the computations of ratios + * and relative lengths. + */ + +/* + * Right now, the tolerance is set to 2 parts in a million, which + * corresponds to a 19-bit distinction of mantissas. Note that + * single-precsion numbers have 24 bit mantissas. + */ + +#define DEGENERATE_TOLERANCE (0.000002) + +/* ========================================================== */ +/* + * The macro and subroutine INTERSECT are designed to compute the + * intersection of a line (defined by the points v1 and v2) and a plane + * (defined as plane which is normal to the vector n, and contains the + * point p). Both return the point sect, which is the point of + * interesection. + * + * This MACRO attemps to be fairly robust by checking for a divide by + * zero. + */ + +/* ========================================================== */ +/* + * HACK ALERT + * The intersection parameter t has the nice property that if t>1, + * then the intersection is "in front of" p1, and if t<0, then the + * intersection is "behind" p2. Unfortunately, as the intersecting plane + * and the line become parallel, t wraps through infinity -- i.e. t can + * become so large that t becomes "greater than infinity" and comes back + * as a negative number (i.e. winding number hopped by one unit). We + * have no way of detecting this situation without adding gazzillions + * of lines of code of topological algebra to detect the winding number; + * and this would be incredibly difficult, and ruin performance. + * + * Thus, we've installed a cheap hack for use by the "cut style" drawing + * routines. If t proves to be a large negative number (more negative + * than -5), then we assume that t was positive and wound through + * infinity. This makes most cuts look good, without introducing bogus + * cuts at infinity. + */ +/* ========================================================== */ + +#define INTERSECT(sect,p,n,v1,v2) \ +{ \ + gleDouble deno, numer, t, omt; \ + \ + deno = (v1[0] - v2[0]) * n[0]; \ + deno += (v1[1] - v2[1]) * n[1]; \ + deno += (v1[2] - v2[2]) * n[2]; \ + \ + if (deno == 0.0) { \ + VEC_COPY (n, v1); \ + /* printf ("Intersect: Warning: line is coplanar with plane \n"); */ \ + } else { \ + \ + numer = (p[0] - v2[0]) * n[0]; \ + numer += (p[1] - v2[1]) * n[1]; \ + numer += (p[2] - v2[2]) * n[2]; \ + \ + t = numer / deno; \ + omt = 1.0 - t; \ + \ + sect[0] = t * v1[0] + omt * v2[0]; \ + sect[1] = t * v1[1] + omt * v2[1]; \ + sect[2] = t * v1[2] + omt * v2[2]; \ + } \ +} + +/* ========================================================== */ +/* + * The macro and subroutine BISECTING_PLANE compute a normal vector that + * describes the bisecting plane between three points (v1, v2 and v3). + * This bisecting plane has the following properties: + * 1) it contains the point v2 + * 2) the angle it makes with v21 == v2 - v1 is equal to the angle it + * makes with v32 == v3 - v2 + * 3) it is perpendicular to the plane defined by v1, v2, v3. + * + * Having input v1, v2, and v3, it returns a unit vector n. + * + * In some cases, the user may specify degenerate points, and still + * expect "reasonable" or "obvious" behaviour. The "expected" + * behaviour for these degenerate cases is: + * + * 1) if v1 == v2 == v3, then return n=0 + * 2) if v1 == v2, then return v32 (normalized). + * 3) if v2 == v3, then return v21 (normalized). + * 4) if v1, v2 and v3 co-linear, then return v21 (normalized). + * + * Mathematically, these special cases "make sense" -- we just have to + * code around potential divide-by-zero's in the code below. + */ + +/* ========================================================== */ + +#define BISECTING_PLANE(valid,n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + double len21, len32; \ + double vdot; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_LENGTH (len21, v21); \ + VEC_LENGTH (len32, v32); \ + \ + if (len21 <= DEGENERATE_TOLERANCE * len32) { \ + \ + if (len32 == 0.0) { \ + /* all three points lie ontop of one-another */ \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + /* return a normalized copy of v32 as bisector */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (n, len32, v32); \ + valid = TRUE; \ + } \ + \ + } else { \ + \ + valid = TRUE; \ + \ + if (len32 <= DEGENERATE_TOLERANCE * len21) { \ + /* return a normalized copy of v21 as bisector */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (n, len21, v21); \ + \ + } else { \ + \ + /* normalize v21 to be of unit length */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (v21, len21, v21); \ + \ + /* normalize v32 to be of unit length */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (v32, len32, v32); \ + \ + VEC_DOT_PRODUCT (vdot, v32, v21); \ + \ + /* if vdot == 1 or -1, then points are colinear */ \ + if ((vdot >= (1.0-DEGENERATE_TOLERANCE)) || \ + (vdot <= (-1.0+DEGENERATE_TOLERANCE))) { \ + VEC_COPY (n, v21); \ + } else { \ + \ + /* go do the full computation */ \ + n[0] = vdot * (v32[0] + v21[0]) - v32[0] - v21[0]; \ + n[1] = vdot * (v32[1] + v21[1]) - v32[1] - v21[1]; \ + n[2] = vdot * (v32[2] + v21[2]) - v32[2] - v21[2]; \ + \ + /* if above if-test's passed, \ + * n should NEVER be of zero length */ \ + VEC_NORMALIZE (n); \ + } \ + } \ + } \ +} + +/* ========================================================== */ +/* + * The block of code below is ifdef'd out, and is here for reference + * purposes only. It performs the "mathematically right thing" for + * computing a bisecting plane, but is, unfortunately, subject ot noise + * in the presence of near degenerate points. Since computer graphics, + * due to sloppy coding, laziness, or correctness, is filled with + * degenerate points, we can't really use this version. The code above + * is far more appropriate for graphics. + */ + +#ifdef MATHEMATICALLY_EXACT_GRAPHICALLY_A_KILLER +#define BISECTING_PLANE(n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + double len21, len32; \ + double vdot; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_LENGTH (len21, v21); \ + VEC_LENGTH (len32, v32); \ + \ + if (len21 == 0.0) { \ + \ + if (len32 == 0.0) { \ + /* all three points lie ontop of one-another */ \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + /* return a normalized copy of v32 as bisector */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (n, len32, v32); \ + } \ + \ + } else { \ + \ + /* normalize v21 to be of unit length */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (v21, len21, v21); \ + \ + if (len32 == 0.0) { \ + /* return a normalized copy of v21 as bisector */ \ + VEC_COPY (n, v21); \ + } else { \ + \ + /* normalize v32 to be of unit length */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (v32, len32, v32); \ + \ + VEC_DOT_PRODUCT (vdot, v32, v21); \ + \ + /* if vdot == 1 or -1, then points are colinear */ \ + if ((vdot == 1.0) || (vdot == -1.0)) { \ + VEC_COPY (n, v21); \ + } else { \ + \ + /* go do the full computation */ \ + n[0] = vdot * (v32[0] + v21[0]) - v32[0] - v21[0]; \ + n[1] = vdot * (v32[1] + v21[1]) - v32[1] - v21[1]; \ + n[2] = vdot * (v32[2] + v21[2]) - v32[2] - v21[2]; \ + \ + /* if above if-test's passed, \ + * n should NEVER be of zero length */ \ + VEC_NORMALIZE (n); \ + } \ + } \ + } \ +} +#endif + +/* ========================================================== */ +/* + * This macro computes the plane perpendicular to the the plane + * defined by three points, and whose normal vector is givven as the + * difference between the two vectors ... + * + * (See way below for the "math" model if you want to understand this. + * The comments about relative errors above apply here.) + */ + +#define CUTTING_PLANE(valid,n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + double len21, len32; \ + double lendiff; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_LENGTH (len21, v21); \ + VEC_LENGTH (len32, v32); \ + \ + if (len21 <= DEGENERATE_TOLERANCE * len32) { \ + \ + if (len32 == 0.0) { \ + /* all three points lie ontop of one-another */ \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + /* return a normalized copy of v32 as cut-vector */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (n, len32, v32); \ + valid = TRUE; \ + } \ + \ + } else { \ + \ + valid = TRUE; \ + \ + if (len32 <= DEGENERATE_TOLERANCE * len21) { \ + /* return a normalized copy of v21 as cut vector */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (n, len21, v21); \ + } else { \ + \ + /* normalize v21 to be of unit length */ \ + len21 = 1.0 / len21; \ + VEC_SCALE (v21, len21, v21); \ + \ + /* normalize v32 to be of unit length */ \ + len32 = 1.0 / len32; \ + VEC_SCALE (v32, len32, v32); \ + \ + VEC_DIFF (n, v21, v32); \ + VEC_LENGTH (lendiff, n); \ + \ + /* if the perp vector is very small, then the two \ + * vectors are darn near collinear, and the cut \ + * vector is probably poorly defined. */ \ + if (lendiff < DEGENERATE_TOLERANCE) { \ + VEC_ZERO (n); \ + valid = FALSE; \ + } else { \ + lendiff = 1.0 / lendiff; \ + VEC_SCALE (n, lendiff, n); \ + } \ + } \ + } \ +} + +/* ========================================================== */ + +#ifdef MATHEMATICALLY_EXACT_GRAPHICALLY_A_KILLER +#define CUTTING_PLANE(n,v1,v2,v3) \ +{ \ + double v21[3], v32[3]; \ + \ + VEC_DIFF (v21, v2, v1); \ + VEC_DIFF (v32, v3, v2); \ + \ + VEC_NORMALIZE (v21); \ + VEC_NORMALIZE (v32); \ + \ + VEC_DIFF (n, v21, v32); \ + VEC_NORMALIZE (n); \ +} +#endif + + +/* ============================================================ */ +/* This macro is used in several places to cycle through a series of + * points to find the next non-degenerate point in a series */ + +#define FIND_NON_DEGENERATE_POINT(inext,npoints,len,diff,point_array) \ +{ \ + gleDouble slen; \ + gleDouble summa[3]; \ + \ + do { \ + /* get distance to next point */ \ + VEC_DIFF (diff, point_array[inext+1], point_array[inext]); \ + VEC_LENGTH (len, diff); \ + VEC_SUM (summa, point_array[inext+1], point_array[inext]); \ + VEC_LENGTH (slen, summa); \ + slen *= DEGENERATE_TOLERANCE; \ + inext ++; \ + } while ((len <= slen) && (inext < npoints-1)); \ +} + +/* ========================================================== */ + +extern int bisecting_plane (gleDouble n[3], /* returned */ + gleDouble v1[3], /* input */ + gleDouble v2[3], /* input */ + gleDouble v3[3]); /* input */ + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/port.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/port.h new file mode 100644 index 0000000..2827bbf --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/port.h @@ -0,0 +1,298 @@ + +/* + * port.h + * + * FUNCTION: + * This file contains defines for porting the tubing toolkit from GL to + * OpenGL to some callback scheme. + * + * HISTORY: + * Created by Linas Vepstas -- February 1993 + * Added auto texture coord generation hacks, Linas April 1994 + */ + +#ifndef __GLE_PORT_H__ +#define __GLE_PORT_H__ + + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +/* ====================================================== */ +/* Some compilers can't handle multiply-subscripted array's */ + +#ifdef FUNKY_C +typedef gleDouble gleVector; +#define AVAL(arr,n,i,j) arr(6*n+3*i+j) +#define VVAL(arr,n,i) arr(3*n+i) + +#else /* FUNKY_C */ +typedef double gleVector[3]; +typedef double glePoint[2]; +#define AVAL(arr,n,i,j) arr[n][i][j] +#define VVAL(arr,n,i) arr[n][i]; + +#endif /* FUNKY_C */ + +/* ====================================================== */ +/* These are used to convey info about topography to the + * texture mapping routines */ + +#define FRONT 1 +#define BACK 2 +#define FRONT_CAP 3 +#define BACK_CAP 4 +#define FILLET 5 + +/* ====================================================== */ + +#define __GLE_DOUBLE + +/* ====================================================== */ + +#ifdef __GLE_DOUBLE +#ifndef gleDouble + #define gleDouble double +#endif +#define urot_axis(a,b,c) urot_axis_d(a,b,c) +#define uview_direction(a,b,c) uview_direction_d(a,b,c) +#define uviewpoint(a,b,c,d) uviewpoint_d(a,b,c,d) +#define MULTMATRIX(m) MULTMATRIX_D(m) +#define LOADMATRIX(m) LOADMATRIX_D(m) +#define V3F(x,j,id) V3F_D(x,j,id) +#define N3F(x) N3F_D(x) +#define T2F(x,y) T2F_D(x,y) +#else +#define gleDouble float +#define urot_axis(a,b,c) urot_axis_f(a,b,c) +#define uview_direction(a,b,c) uview_direction_f(a,b,c) +#define uviewpoint(a,b,c,d) uviewpoint_f(a,b,c,d) +#define MULTMATRIX(m) MULTMATRIX_F(m) +#define LOADMATRIX(m) LOADMATRIX_F(m) +#define V3F(x,j,id) V3F_F(x,j,id) +#define N3F(x) N3F_F(x) +#define T2F(x,y) T2F_F(x,y) +#endif + +/* ====================================================== */ + +#if (defined DEBUG_GL_32 || DEBUG_OPENGL_10) +#undef GL_32 +#undef OPENGL_10 + +#define BGNTMESH(i,len) printf ("bgntmesh() \n"); +#define ENDTMESH() printf ("endtmesh() \n"); +#define BGNPOLYGON() printf ("bgnpolygon() \n"); +#define ENDPOLYGON() printf ("endpolygon() \n"); +#define V3F_F(x,j,id) printf ("v3f(x) %f %f %f \n", x[0], x[1], x[2]); +#define V3F_D(x,j,id) printf ("v3d(x) %f %f %f \n", x[0], x[1], x[2]); +#define N3F_F(x) printf ("n3f(x) %f %f %f \n", x[0], x[1], x[2]); +#define N3F_D(x) printf ("n3d(x) %f %f %f \n", x[0], x[1], x[2]); +#define C3F(x) printf ("c3f(x) %f %f %f \n", x[0], x[1], x[2]); + +#define POPMATRIX() printf ("popmatrix () \n"); +#define PUSHMATRIX() printf ("pushmatrix() \n"); +#define MULTMATRIX_F(x) MULTMATRIX_D(x) +#define LOADMATRIX_F(x) LOADMATRIX_D(x) + + +#define LOADMATRIX_D(x) { \ + int i, j; \ + printf ("loadmatrix (x) \n"); \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + printf ( "%f ", x[i][j]); \ + } \ + printf (" \n"); \ + } \ +} + +#define MULTMATRIX_D(x) { \ + int i, j; \ + printf ("multmatrix (x) \n"); \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + printf ( "%f ", x[i][j]); \ + } \ + printf (" \n"); \ + } \ +} + +#define __IS_LIGHTING_ON (1) + +#endif + +/* ====================================================== */ + +#ifdef GL_32 + +#include + +#define BGNTMESH(i,len) bgntmesh() +#define ENDTMESH() endtmesh() +#define BGNPOLYGON() bgnpolygon() +#define ENDPOLYGON() endpolygon() +#define V3F_F(x,j,id) v3f(x) +#define V3F_D(x,j,id) v3d(x) +#define N3F_F(x) n3f(x) +#define T2F_F(x,y) +#define T2F_D(x,y) +#define C3F(x) c3f(x) + +#define POPMATRIX() popmatrix () +#define PUSHMATRIX() pushmatrix() +#define MULTMATRIX_F(x) multmatrix (x) +#define LOADMATRIX_F(x) loadmatrix (x) + +#define N3F_D(x) { \ + float nnn[3]; \ + nnn[0] = (float) x[0]; \ + nnn[1] = (float) x[1]; \ + nnn[2] = (float) x[2]; \ + n3f (nnn); \ +} + +#define LOADMATRIX_D(x) { \ + int i, j; \ + float mmm[4][4]; \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + mmm[i][j] = (float) x[i][j]; \ + } \ + } \ + loadmatrix(mmm); \ +} + +#define MULTMATRIX_D(x) { \ + int i, j; \ + float mmm[4][4]; \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + mmm[i][j] = (float) x[i][j]; \ + } \ + } \ + multmatrix(mmm); \ +} + +/* #define __IS_LIGHTING_ON (MSINGLE == getmmode()) */ +#define __IS_LIGHTING_ON (extrusion_join_style & TUBE_LIGHTING_ON) + +#endif /* GL_32 */ + +/* ====================================================== */ +#ifdef OPENGL_10 + +#if defined(_WIN32) +#include +#pragma warning (disable:4244) /* disable bogus conversion warnings */ +#endif +#include +#include + +/* +#define N3F_F(x) { \ + float nnn[3]; \ + nnn[0] = - (float) x[0]; \ + nnn[1] = - (float) x[1]; \ + nnn[2] = - (float) x[2]; \ + glNormal3fv (nnn); \ +} +#define N3F_D(x) { \ + float nnn[3]; \ + nnn[0] = - (float) x[0]; \ + nnn[1] = - (float) x[1]; \ + nnn[2] = - (float) x[2]; \ + glNormal3fv (nnn); \ +} +*/ + +#define C3F(x) glColor3fv(x) +#define T2F_F(x,y) glTexCoord2f(x,y) +#define T2F_D(x,y) glTexCoord2d(x,y) + +#define POPMATRIX() glPopMatrix() +#define PUSHMATRIX() glPushMatrix() + +#define MULTMATRIX_F(x) glMultMatrixf ((const GLfloat *)x) +#define LOADMATRIX_F(x) glLoadMatrixf ((const GLfloat *)x) + +#define MULTMATRIX_D(x) glMultMatrixd ((const GLdouble *)x) +#define LOADMATRIX_D(x) glLoadMatrixd ((const GLdouble *)x) + +#define __IS_LIGHTING_ON (glIsEnabled(GL_LIGHTING)) + +/* ====================================================== */ +#ifdef AUTO_TEXTURE + +#define BGNTMESH(i,len) { \ + if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))(i,len);\ + glBegin (GL_TRIANGLE_STRIP); \ +} + +#define BGNPOLYGON() { \ + if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))();\ + glBegin (GL_POLYGON); \ +} + +#define N3F_F(x) { \ + if(_gle_gc -> n3f_gen_texture) (*(_gle_gc -> n3f_gen_texture))(x); \ + glNormal3fv(x); \ +} + +#define N3F_D(x) { \ + if(_gle_gc -> n3d_gen_texture) (*(_gle_gc -> n3d_gen_texture))(x); \ + glNormal3dv(x); \ +} + +#define V3F_F(x,j,id) { \ + if(_gle_gc -> v3f_gen_texture) (*(_gle_gc -> v3f_gen_texture))(x,j,id);\ + glVertex3fv(x); \ +} + +#define V3F_D(x,j,id) { \ + if(_gle_gc -> v3d_gen_texture) (*(_gle_gc -> v3d_gen_texture))(x,j,id); \ + glVertex3dv(x); \ +} + +#define ENDTMESH() { \ + if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \ + glEnd (); \ +} + +#define ENDPOLYGON() { \ + if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \ + glEnd (); \ +} + +/* ====================================================== */ +#else /* AUTO_TEXTURE */ + +#define BGNTMESH(i,len) glBegin (GL_TRIANGLE_STRIP); +#define BGNPOLYGON() glBegin (GL_POLYGON); + +#define N3F_F(x) glNormal3fv(x) +#define N3F_D(x) glNormal3dv(x) +#define V3F_F(x,j,id) glVertex3fv(x); +#define V3F_D(x,j,id) glVertex3dv(x); + +#define ENDTMESH() glEnd () +#define ENDPOLYGON() glEnd() + +#endif /* AUTO_TEXTURE */ + +#endif /* OPENGL_10 */ + +/* ====================================================== */ + + +#endif /* __GLE_PORT_H__ */ +/* ================== END OF FILE ======================= */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/rot.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/rot.h new file mode 100644 index 0000000..91083e9 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/rot.h @@ -0,0 +1,98 @@ + +/* + * rot.h + * + * FUNCTION: + * rotation matrix utilities + * + * HISTORY: + * Linas Vepstas Aug 1990 + */ + +/* ========================================================== */ +/* + * The MACROS below generate and return more traditional rotation + * matrices -- matrices for rotations about principal axes. + */ +/* ========================================================== */ + +#define ROTX_CS(m,cosine,sine) \ +{ \ + /* rotation about the x-axis */ \ + \ + m[0][0] = 1.0; \ + m[0][1] = 0.0; \ + m[0][2] = 0.0; \ + m[0][3] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = (cosine); \ + m[1][2] = (sine); \ + m[1][3] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = -(sine); \ + m[2][2] = (cosine); \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ + +#define ROTY_CS(m,cosine,sine) \ +{ \ + /* rotation about the y-axis */ \ + \ + m[0][0] = (cosine); \ + m[0][1] = 0.0; \ + m[0][2] = -(sine); \ + m[0][3] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = 1.0; \ + m[1][2] = 0.0; \ + m[1][3] = 0.0; \ + \ + m[2][0] = (sine); \ + m[2][1] = 0.0; \ + m[2][2] = (cosine); \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ + +#define ROTZ_CS(m,cosine,sine) \ +{ \ + /* rotation about the z-axis */ \ + \ + m[0][0] = (cosine); \ + m[0][1] = (sine); \ + m[0][2] = 0.0; \ + m[0][3] = 0.0; \ + \ + m[1][0] = -(sine); \ + m[1][1] = (cosine); \ + m[1][2] = 0.0; \ + m[1][3] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = 0.0; \ + m[2][2] = 1.0; \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/segment.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/segment.h new file mode 100644 index 0000000..8d1cf04 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/segment.h @@ -0,0 +1,98 @@ + +/* + * MODULE: segment.h + * + * FUNCTION: + * Contains function prototypes for segment drawing subroutines. + * These are used only internally, and are not to be exported to + * the user. + * + * HISTORY: + * Create by Linas Vepstas + * Added tube.h include to define gleDouble, tad February 2002 + */ + +/* ============================================================ */ + +#include "tube.h" + +extern void draw_segment_plain (int ncp, /* number of contour points */ + gleDouble front_contour[][3], + gleDouble back_contour[][3], + int inext, double len); + +extern void draw_segment_color (int ncp, /* number of contour points */ + gleDouble front_contour[][3], + gleDouble back_contour[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_segment_edge_n (int ncp, /* number of contour points */ + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + int inext, double len); + +extern void draw_segment_c_and_edge_n (int ncp, + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_segment_facet_n (int ncp, + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + int inext, double len); + +extern void draw_segment_c_and_facet_n (int ncp, + gleDouble front_contour[][3], + gleDouble back_contour[][3], + double norm_cont[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +/* ============================================================ */ + +extern void draw_binorm_segment_edge_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + int inext, double len); + +extern void draw_binorm_segment_c_and_edge_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_binorm_segment_facet_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + int inext, double len); + +extern void draw_binorm_segment_c_and_facet_n (int ncp, + double front_contour[][3], + double back_contour[][3], + double front_norm[][3], + double back_norm[][3], + float color_last[3], + float color_next[3], + int inext, double len); + +extern void draw_angle_style_back_cap (int ncp, /* number of contour points */ + gleDouble bi[3], /* biscetor */ + gleDouble point_array[][3]); /* polyline */ + +/* -------------------------- end of file -------------------------------- */ + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/tube.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/tube.h new file mode 100644 index 0000000..c303e19 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/tube.h @@ -0,0 +1,203 @@ +/* + * tube.h + * + * FUNCTION: + * Tubing and Extrusion header file. + * This file provides protypes and defines for the extrusion + * and tubing primitives. + * + * HISTORY: + * Linas Vepstas 1990, 1991 + */ + +#ifndef __TUBE_H__ +#define __TUBE_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + GLE API revision history: + + GLE_API_VERSION is updated to reflect GLE API changes (interface + changes, semantic changes, deletions, or additions). + + GLE_API_VERSION=228 GLUT 3.7 release of GLE. +**/ +#ifndef GLE_API_VERSION /* allow this to be overriden */ +#define GLE_API_VERSION 228 +#endif + +/* some types */ +#ifndef gleDouble + #define gleDouble double +#endif +typedef gleDouble gleAffine[2][3]; + +/* ====================================================== */ + +/* defines for tubing join styles */ +#define TUBE_JN_RAW 0x1 +#define TUBE_JN_ANGLE 0x2 +#define TUBE_JN_CUT 0x3 +#define TUBE_JN_ROUND 0x4 +#define TUBE_JN_MASK 0xf /* mask bits */ +#define TUBE_JN_CAP 0x10 + +/* determine how normal vectors are to be handled */ +#define TUBE_NORM_FACET 0x100 +#define TUBE_NORM_EDGE 0x200 +#define TUBE_NORM_PATH_EDGE 0x400 /* for spiral, lathe, helix primitives */ +#define TUBE_NORM_MASK 0xf00 /* mask bits */ + +/* closed or open countours */ +#define TUBE_CONTOUR_CLOSED 0x1000 + +#define GLE_TEXTURE_ENABLE 0x10000 +#define GLE_TEXTURE_STYLE_MASK 0xff +#define GLE_TEXTURE_VERTEX_FLAT 1 +#define GLE_TEXTURE_NORMAL_FLAT 2 +#define GLE_TEXTURE_VERTEX_CYL 3 +#define GLE_TEXTURE_NORMAL_CYL 4 +#define GLE_TEXTURE_VERTEX_SPH 5 +#define GLE_TEXTURE_NORMAL_SPH 6 +#define GLE_TEXTURE_VERTEX_MODEL_FLAT 7 +#define GLE_TEXTURE_NORMAL_MODEL_FLAT 8 +#define GLE_TEXTURE_VERTEX_MODEL_CYL 9 +#define GLE_TEXTURE_NORMAL_MODEL_CYL 10 +#define GLE_TEXTURE_VERTEX_MODEL_SPH 11 +#define GLE_TEXTURE_NORMAL_MODEL_SPH 12 + +#ifdef GL_32 +/* HACK for GL 3.2 -- needed because no way to tell if lighting is on. */ +#define TUBE_LIGHTING_ON 0x80000000 + +#define gleExtrusion extrusion +#define gleSetJoinStyle setjoinstyle +#define gleGetJoinStyle getjoinstyle +#define glePolyCone polycone +#define glePolyCylinder polycylinder +#define gleSuperExtrusion super_extrusion +#define gleTwistExtrusion twist_extrusion +#define gleSpiral spiral +#define gleLathe lathe +#define gleHelicoid helicoid +#define gleToroid toroid +#define gleScrew screw + +#endif /* GL_32 */ + +extern int gleGetJoinStyle (void); +extern void gleSetJoinStyle (int style); /* bitwise OR of flags */ +extern int gleGetNumSlices(void); +extern void gleSetNumSlices(int slices); + +/* draw polyclinder, specified as a polyline */ +extern void glePolyCylinder (int npoints, /* num points in polyline */ + gleDouble point_array[][3], /* polyline vertces */ + float color_array[][3], /* colors at polyline verts */ + gleDouble radius); /* radius of polycylinder */ + +/* draw polycone, specified as a polyline with radii */ +extern void glePolyCone (int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3], /* colors at polyline verts */ + gleDouble radius_array[]); /* cone radii at polyline verts */ + +/* extrude arbitrary 2D contour along arbitrary 3D path */ +extern void gleExtrusion (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3]); /* colors at polyline verts */ + +/* extrude 2D contour, specifying local rotations (twists) */ +extern void gleTwistExtrusion (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3], /* color at polyline verts */ + gleDouble twist_array[]); /* countour twists (in degrees) */ + +/* extrude 2D contour, specifying local affine tranformations */ +extern void gleSuperExtrusion (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + int npoints, /* numpoints in poly-line */ + gleDouble point_array[][3], /* polyline vertices */ + float color_array[][3], /* color at polyline verts */ + gleDouble xform_array[][2][3]); /* 2D contour xforms */ + +/* spiral moves contour along helical path by parallel transport */ +extern void gleSpiral (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* lathe moves contour along helical path by helically shearing 3D space */ +extern void gleLathe (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* similar to spiral, except contour is a circle */ +extern void gleHelicoid (gleDouble rToroid, /* circle contour (torus) radius */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* similar to lathe, except contour is a circle */ +extern void gleToroid (gleDouble rToroid, /* circle contour (torus) radius */ + gleDouble startRadius, /* spiral starts in x-y plane */ + gleDouble drdTheta, /* change in radius per revolution */ + gleDouble startZ, /* starting z value */ + gleDouble dzdTheta, /* change in Z per revolution */ + gleDouble startXform[2][3], /* starting contour affine xform */ + gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */ + gleDouble startTheta, /* start angle in x-y plane */ + gleDouble sweepTheta); /* degrees to spiral around */ + +/* draws a screw shape */ +extern void gleScrew (int ncp, /* number of contour points */ + gleDouble contour[][2], /* 2D contour */ + gleDouble cont_normal[][2], /* 2D contour normals */ + gleDouble up[3], /* up vector for contour */ + gleDouble startz, /* start of segment */ + gleDouble endz, /* end of segment */ + gleDouble twist); /* number of rotations */ + +extern void gleTextureMode (int mode); + +#ifdef __cplusplus +} + +#endif +#endif /* __TUBE_H__ */ +/* ================== END OF FILE ======================= */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/tube_gc.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/tube_gc.h new file mode 100644 index 0000000..ccd2853 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/tube_gc.h @@ -0,0 +1,78 @@ + +/* + * tube_gc.h + * + * FUNCTION: + * This file allows for easy changes to changes in the way the extrusion + * library handles state info (i.e. context). + * + * HISTORY: + * Linas Vepstas --- February 1993 + * Added auto texture coord generation hacks, Linas April 1994 + * Added tube.h include to define gleDouble, tad February 2002 + */ + +#include "tube.h" +#include "port.h" /* for gleVector */ + +typedef float gleColor[3]; +typedef double gleTwoVec[2]; + +typedef struct { + + /* public methods */ + void (*bgn_gen_texture) (int, double); + void (*n3f_gen_texture) (float *); + void (*n3d_gen_texture) (double *); + void (*v3f_gen_texture) (float *, int, int); + void (*v3d_gen_texture) (double *, int, int); + void (*end_gen_texture) (void); + + /* protected members -- "general knowledge" stuff */ + int join_style; + + /* arguments passed into extrusion code */ + int ncp; /* number of contour points */ + gleTwoVec *contour; /* 2D contour */ + gleTwoVec *cont_normal; /* 2D contour normals */ + gleDouble *up; /* up vector */ + int npoints; /* number of points in polyline */ + gleVector *point_array; /* path */ + gleColor *color_array; /* path colors */ + gleAffine *xform_array; /* contour xforms */ + + /* private members, used by texturing code */ + int num_vert; + int segment_number; + double segment_length; + double accum_seg_len; + double prev_x; + double prev_y; + + void (*save_bgn_gen_texture) (int, double); + void (*save_n3f_gen_texture) (float *); + void (*save_n3d_gen_texture) (double *); + void (*save_v3f_gen_texture) (float *, int, int); + void (*save_v3d_gen_texture) (double *, int, int); + void (*save_end_gen_texture) (void); + +} gleGC; + +extern gleGC *_gle_gc; +extern gleGC * gleCreateGC (void); + +#define INIT_GC() {if (!_gle_gc) _gle_gc = gleCreateGC(); } +#define extrusion_join_style (_gle_gc->join_style) + +#define __TUBE_CLOSE_CONTOUR (extrusion_join_style & TUBE_CONTOUR_CLOSED) +#define __TUBE_DRAW_CAP (extrusion_join_style & TUBE_JN_CAP) +#define __TUBE_DRAW_FACET_NORMALS (extrusion_join_style & TUBE_NORM_FACET) +#define __TUBE_DRAW_PATH_EDGE_NORMALS (extrusion_join_style & TUBE_NORM_PATH_EDGE) + +#define __TUBE_STYLE (extrusion_join_style & TUBE_JN_MASK) +#define __TUBE_RAW_JOIN (extrusion_join_style & TUBE_JN_RAW) +#define __TUBE_CUT_JOIN (extrusion_join_style & TUBE_JN_CUT) +#define __TUBE_ANGLE_JOIN (extrusion_join_style & TUBE_JN_ANGLE) +#define __TUBE_ROUND_JOIN (extrusion_join_style & TUBE_JN_ROUND) + +/* ======================= END OF FILE ========================== */ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/vvector.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/vvector.h new file mode 100644 index 0000000..b58dcd6 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Headers/vvector.h @@ -0,0 +1,1339 @@ + +/* + * vvector.h + * + * FUNCTION: + * This file contains a number of utilities useful for handling + * 3D vectors + * + * HISTORY: + * Written by Linas Vepstas, August 1991 + * Added 2D code, March 1993 + * Added Outer products, C++ proofed, Linas Vepstas October 1993 + */ + +#ifndef __GUTIL_VECTOR_H__ +#define __GUTIL_VECTOR_H__ + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + + +#include +#include "port.h" + +/* ========================================================== */ +/* Zero out a 2D vector */ + +#define VEC_ZERO_2(a) \ +{ \ + (a)[0] = (a)[1] = 0.0; \ +} + +/* ========================================================== */ +/* Zero out a 3D vector */ + +#define VEC_ZERO(a) \ +{ \ + (a)[0] = (a)[1] = (a)[2] = 0.0; \ +} + +/* ========================================================== */ +/* Zero out a 4D vector */ + +#define VEC_ZERO_4(a) \ +{ \ + (a)[0] = (a)[1] = (a)[2] = (a)[3] = 0.0; \ +} + +/* ========================================================== */ +/* Vector copy */ + +#define VEC_COPY_2(b,a) \ +{ \ + (b)[0] = (a)[0]; \ + (b)[1] = (a)[1]; \ +} + +/* ========================================================== */ +/* Copy 3D vector */ + +#define VEC_COPY(b,a) \ +{ \ + (b)[0] = (a)[0]; \ + (b)[1] = (a)[1]; \ + (b)[2] = (a)[2]; \ +} + +/* ========================================================== */ +/* Copy 4D vector */ + +#define VEC_COPY_4(b,a) \ +{ \ + (b)[0] = (a)[0]; \ + (b)[1] = (a)[1]; \ + (b)[2] = (a)[2]; \ + (b)[3] = (a)[3]; \ +} + +/* ========================================================== */ +/* Vector difference */ + +#define VEC_DIFF_2(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] - (v1)[0]; \ + (v21)[1] = (v2)[1] - (v1)[1]; \ +} + +/* ========================================================== */ +/* Vector difference */ + +#define VEC_DIFF(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] - (v1)[0]; \ + (v21)[1] = (v2)[1] - (v1)[1]; \ + (v21)[2] = (v2)[2] - (v1)[2]; \ +} + +/* ========================================================== */ +/* Vector difference */ + +#define VEC_DIFF_4(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] - (v1)[0]; \ + (v21)[1] = (v2)[1] - (v1)[1]; \ + (v21)[2] = (v2)[2] - (v1)[2]; \ + (v21)[3] = (v2)[3] - (v1)[3]; \ +} + +/* ========================================================== */ +/* Vector sum */ + +#define VEC_SUM_2(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] + (v1)[0]; \ + (v21)[1] = (v2)[1] + (v1)[1]; \ +} + +/* ========================================================== */ +/* Vector sum */ + +#define VEC_SUM(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] + (v1)[0]; \ + (v21)[1] = (v2)[1] + (v1)[1]; \ + (v21)[2] = (v2)[2] + (v1)[2]; \ +} + +/* ========================================================== */ +/* Vector sum */ + +#define VEC_SUM_4(v21,v2,v1) \ +{ \ + (v21)[0] = (v2)[0] + (v1)[0]; \ + (v21)[1] = (v2)[1] + (v1)[1]; \ + (v21)[2] = (v2)[2] + (v1)[2]; \ + (v21)[3] = (v2)[3] + (v1)[3]; \ +} + +/* ========================================================== */ +/* scalar times vector */ + +#define VEC_SCALE_2(c,a,b) \ +{ \ + (c)[0] = (a)*(b)[0]; \ + (c)[1] = (a)*(b)[1]; \ +} + +/* ========================================================== */ +/* scalar times vector */ + +#define VEC_SCALE(c,a,b) \ +{ \ + (c)[0] = (a)*(b)[0]; \ + (c)[1] = (a)*(b)[1]; \ + (c)[2] = (a)*(b)[2]; \ +} + +/* ========================================================== */ +/* scalar times vector */ + +#define VEC_SCALE_4(c,a,b) \ +{ \ + (c)[0] = (a)*(b)[0]; \ + (c)[1] = (a)*(b)[1]; \ + (c)[2] = (a)*(b)[2]; \ + (c)[3] = (a)*(b)[3]; \ +} + +/* ========================================================== */ +/* accumulate scaled vector */ + +#define VEC_ACCUM_2(c,a,b) \ +{ \ + (c)[0] += (a)*(b)[0]; \ + (c)[1] += (a)*(b)[1]; \ +} + +/* ========================================================== */ +/* accumulate scaled vector */ + +#define VEC_ACCUM(c,a,b) \ +{ \ + (c)[0] += (a)*(b)[0]; \ + (c)[1] += (a)*(b)[1]; \ + (c)[2] += (a)*(b)[2]; \ +} + +/* ========================================================== */ +/* accumulate scaled vector */ + +#define VEC_ACCUM_4(c,a,b) \ +{ \ + (c)[0] += (a)*(b)[0]; \ + (c)[1] += (a)*(b)[1]; \ + (c)[2] += (a)*(b)[2]; \ + (c)[3] += (a)*(b)[3]; \ +} + +/* ========================================================== */ +/* Vector dot product */ + +#define VEC_DOT_PRODUCT_2(c,a,b) \ +{ \ + c = (a)[0]*(b)[0] + (a)[1]*(b)[1]; \ +} + +/* ========================================================== */ +/* Vector dot product */ + +#define VEC_DOT_PRODUCT(c,a,b) \ +{ \ + c = (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2]; \ +} + +/* ========================================================== */ +/* Vector dot product */ + +#define VEC_DOT_PRODUCT_4(c,a,b) \ +{ \ + c = (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2] + (a)[3]*(b)[3] ; \ +} + +/* ========================================================== */ +/* vector impact parameter (squared) */ + +#define VEC_IMPACT_SQ(bsq,direction,position) \ +{ \ + gleDouble vlen, llel; \ + VEC_DOT_PRODUCT (vlen, position, position); \ + VEC_DOT_PRODUCT (llel, direction, position); \ + bsq = vlen - llel*llel; \ +} + +/* ========================================================== */ +/* vector impact parameter */ + +#define VEC_IMPACT(bsq,direction,position) \ +{ \ + VEC_IMPACT_SQ(bsq,direction,position); \ + bsq = sqrt (bsq); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_LENGTH_2(vlen,a) \ +{ \ + vlen = a[0]*a[0] + a[1]*a[1]; \ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_LENGTH(vlen,a) \ +{ \ + vlen = (a)[0]*(a)[0] + (a)[1]*(a)[1]; \ + vlen += (a)[2]*(a)[2]; \ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_LENGTH_4(vlen,a) \ +{ \ + vlen = (a)[0]*(a)[0] + (a)[1]*(a)[1]; \ + vlen += (a)[2]*(a)[2]; \ + vlen += (a)[3] * (a)[3]; \ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* distance between two points */ + +#define VEC_DISTANCE(vlen,va,vb) \ +{ \ + gleDouble tmp[4]; \ + VEC_DIFF (tmp, vb, va); \ + VEC_LENGTH (vlen, tmp); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_CONJUGATE_LENGTH(vlen,a) \ +{ \ + vlen = 1.0 - a[0]*a[0] - a[1]*a[1] - a[2]*a[2];\ + vlen = sqrt (vlen); \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_NORMALIZE(a) \ +{ \ + double vlen; \ + VEC_LENGTH (vlen,a); \ + if (vlen != 0.0) { \ + vlen = 1.0 / vlen; \ + a[0] *= vlen; \ + a[1] *= vlen; \ + a[2] *= vlen; \ + } \ +} + +/* ========================================================== */ +/* Vector length */ + +#define VEC_RENORMALIZE(a,newlen) \ +{ \ + double vlen; \ + VEC_LENGTH (vlen,a); \ + if (vlen != 0.0) { \ + vlen = newlen / vlen; \ + a[0] *= vlen; \ + a[1] *= vlen; \ + a[2] *= vlen; \ + } \ +} + +/* ========================================================== */ +/* 3D Vector cross product yeilding vector */ + +#define VEC_CROSS_PRODUCT(c,a,b) \ +{ \ + c[0] = (a)[1] * (b)[2] - (a)[2] * (b)[1]; \ + c[1] = (a)[2] * (b)[0] - (a)[0] * (b)[2]; \ + c[2] = (a)[0] * (b)[1] - (a)[1] * (b)[0]; \ +} + +/* ========================================================== */ +/* Vector perp -- assumes that n is of unit length + * accepts vector v, subtracts out any component parallel to n */ + +#define VEC_PERP(vp,v,n) \ +{ \ + double vdot; \ + \ + VEC_DOT_PRODUCT (vdot, v, n); \ + vp[0] = (v)[0] - (vdot) * (n)[0]; \ + vp[1] = (v)[1] - (vdot) * (n)[1]; \ + vp[2] = (v)[2] - (vdot) * (n)[2]; \ +} + +/* ========================================================== */ +/* Vector parallel -- assumes that n is of unit length + * accepts vector v, subtracts out any component perpendicular to n */ + +#define VEC_PARALLEL(vp,v,n) \ +{ \ + double vdot; \ + \ + VEC_DOT_PRODUCT (vdot, v, n); \ + vp[0] = (vdot) * (n)[0]; \ + vp[1] = (vdot) * (n)[1]; \ + vp[2] = (vdot) * (n)[2]; \ +} + +/* ========================================================== */ +/* Vector reflection -- assumes n is of unit length */ +/* Takes vector v, reflects it against reflector n, and returns vr */ + +#define VEC_REFLECT(vr,v,n) \ +{ \ + double vdot; \ + \ + VEC_DOT_PRODUCT (vdot, v, n); \ + vr[0] = (v)[0] - 2.0 * (vdot) * (n)[0]; \ + vr[1] = (v)[1] - 2.0 * (vdot) * (n)[1]; \ + vr[2] = (v)[2] - 2.0 * (vdot) * (n)[2]; \ +} + +/* ========================================================== */ +/* Vector blending */ +/* Takes two vectors a, b, blends them together */ + +#define VEC_BLEND(vr,sa,a,sb,b) \ +{ \ + \ + vr[0] = (sa) * (a)[0] + (sb) * (b)[0]; \ + vr[1] = (sa) * (a)[1] + (sb) * (b)[1]; \ + vr[2] = (sa) * (a)[2] + (sb) * (b)[2]; \ +} + +/* ========================================================== */ +/* Vector print */ + +#define VEC_PRINT_2(a) \ +{ \ + double vlen; \ + VEC_LENGTH_2 (vlen, a); \ + printf (" a is %f %f length of a is %f \n", a[0], a[1], vlen); \ +} + +/* ========================================================== */ +/* Vector print */ + +#define VEC_PRINT(a) \ +{ \ + double vlen; \ + VEC_LENGTH (vlen, (a)); \ + printf (" a is %f %f %f length of a is %f \n", (a)[0], (a)[1], (a)[2], vlen); \ +} + +/* ========================================================== */ +/* Vector print */ + +#define VEC_PRINT_4(a) \ +{ \ + double vlen; \ + VEC_LENGTH_4 (vlen, (a)); \ + printf (" a is %f %f %f %f length of a is %f \n", \ + (a)[0], (a)[1], (a)[2], (a)[3], vlen); \ +} + +/* ========================================================== */ +/* print matrix */ + +#define MAT_PRINT_4X4(mmm) { \ + int i,j; \ + printf ("matrix mmm is \n"); \ + if (mmm == NULL) { \ + printf (" Null \n"); \ + } else { \ + for (i=0; i<4; i++) { \ + for (j=0; j<4; j++) { \ + printf ("%f ", mmm[i][j]); \ + } \ + printf (" \n"); \ + } \ + } \ +} + +/* ========================================================== */ +/* print matrix */ + +#define MAT_PRINT_3X3(mmm) { \ + int i,j; \ + printf ("matrix mmm is \n"); \ + if (mmm == NULL) { \ + printf (" Null \n"); \ + } else { \ + for (i=0; i<3; i++) { \ + for (j=0; j<3; j++) { \ + printf ("%f ", mmm[i][j]); \ + } \ + printf (" \n"); \ + } \ + } \ +} + +/* ========================================================== */ +/* print matrix */ + +#define MAT_PRINT_2X3(mmm) { \ + int i,j; \ + printf ("matrix mmm is \n"); \ + if (mmm == NULL) { \ + printf (" Null \n"); \ + } else { \ + for (i=0; i<2; i++) { \ + for (j=0; j<3; j++) { \ + printf ("%f ", mmm[i][j]); \ + } \ + printf (" \n"); \ + } \ + } \ +} + +/* ========================================================== */ +/* initialize matrix */ + +#define IDENTIFY_MATRIX_3X3(m) \ +{ \ + m[0][0] = 1.0; \ + m[0][1] = 0.0; \ + m[0][2] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = 1.0; \ + m[1][2] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = 0.0; \ + m[2][2] = 1.0; \ +} + +/* ========================================================== */ +/* initialize matrix */ + +#define IDENTIFY_MATRIX_4X4(m) \ +{ \ + m[0][0] = 1.0; \ + m[0][1] = 0.0; \ + m[0][2] = 0.0; \ + m[0][3] = 0.0; \ + \ + m[1][0] = 0.0; \ + m[1][1] = 1.0; \ + m[1][2] = 0.0; \ + m[1][3] = 0.0; \ + \ + m[2][0] = 0.0; \ + m[2][1] = 0.0; \ + m[2][2] = 1.0; \ + m[2][3] = 0.0; \ + \ + m[3][0] = 0.0; \ + m[3][1] = 0.0; \ + m[3][2] = 0.0; \ + m[3][3] = 1.0; \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_2X2(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_2X3(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + b[0][2] = a[0][2]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[1][2]; \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_3X3(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + b[0][2] = a[0][2]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[1][2]; \ + \ + b[2][0] = a[2][0]; \ + b[2][1] = a[2][1]; \ + b[2][2] = a[2][2]; \ +} + +/* ========================================================== */ +/* matrix copy */ + +#define COPY_MATRIX_4X4(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[0][1]; \ + b[0][2] = a[0][2]; \ + b[0][3] = a[0][3]; \ + \ + b[1][0] = a[1][0]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[1][2]; \ + b[1][3] = a[1][3]; \ + \ + b[2][0] = a[2][0]; \ + b[2][1] = a[2][1]; \ + b[2][2] = a[2][2]; \ + b[2][3] = a[2][3]; \ + \ + b[3][0] = a[3][0]; \ + b[3][1] = a[3][1]; \ + b[3][2] = a[3][2]; \ + b[3][3] = a[3][3]; \ +} + +/* ========================================================== */ +/* matrix transpose */ + +#define TRANSPOSE_MATRIX_2X2(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[1][0]; \ + \ + b[1][0] = a[0][1]; \ + b[1][1] = a[1][1]; \ +} + +/* ========================================================== */ +/* matrix transpose */ + +#define TRANSPOSE_MATRIX_3X3(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[1][0]; \ + b[0][2] = a[2][0]; \ + \ + b[1][0] = a[0][1]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[2][1]; \ + \ + b[2][0] = a[0][2]; \ + b[2][1] = a[1][2]; \ + b[2][2] = a[2][2]; \ +} + +/* ========================================================== */ +/* matrix transpose */ + +#define TRANSPOSE_MATRIX_4X4(b,a) \ +{ \ + b[0][0] = a[0][0]; \ + b[0][1] = a[1][0]; \ + b[0][2] = a[2][0]; \ + b[0][3] = a[3][0]; \ + \ + b[1][0] = a[0][1]; \ + b[1][1] = a[1][1]; \ + b[1][2] = a[2][1]; \ + b[1][3] = a[3][1]; \ + \ + b[2][0] = a[0][2]; \ + b[2][1] = a[1][2]; \ + b[2][2] = a[2][2]; \ + b[2][3] = a[3][2]; \ + \ + b[3][0] = a[0][3]; \ + b[3][1] = a[1][3]; \ + b[3][2] = a[2][3]; \ + b[3][3] = a[3][3]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define SCALE_MATRIX_2X2(b,s,a) \ +{ \ + b[0][0] = (s) * a[0][0]; \ + b[0][1] = (s) * a[0][1]; \ + \ + b[1][0] = (s) * a[1][0]; \ + b[1][1] = (s) * a[1][1]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define SCALE_MATRIX_3X3(b,s,a) \ +{ \ + b[0][0] = (s) * a[0][0]; \ + b[0][1] = (s) * a[0][1]; \ + b[0][2] = (s) * a[0][2]; \ + \ + b[1][0] = (s) * a[1][0]; \ + b[1][1] = (s) * a[1][1]; \ + b[1][2] = (s) * a[1][2]; \ + \ + b[2][0] = (s) * a[2][0]; \ + b[2][1] = (s) * a[2][1]; \ + b[2][2] = (s) * a[2][2]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define SCALE_MATRIX_4X4(b,s,a) \ +{ \ + b[0][0] = (s) * a[0][0]; \ + b[0][1] = (s) * a[0][1]; \ + b[0][2] = (s) * a[0][2]; \ + b[0][3] = (s) * a[0][3]; \ + \ + b[1][0] = (s) * a[1][0]; \ + b[1][1] = (s) * a[1][1]; \ + b[1][2] = (s) * a[1][2]; \ + b[1][3] = (s) * a[1][3]; \ + \ + b[2][0] = (s) * a[2][0]; \ + b[2][1] = (s) * a[2][1]; \ + b[2][2] = (s) * a[2][2]; \ + b[2][3] = (s) * a[2][3]; \ + \ + b[3][0] = s * a[3][0]; \ + b[3][1] = s * a[3][1]; \ + b[3][2] = s * a[3][2]; \ + b[3][3] = s * a[3][3]; \ +} + +/* ========================================================== */ +/* multiply matrix by scalar */ + +#define ACCUM_SCALE_MATRIX_2X2(b,s,a) \ +{ \ + b[0][0] += (s) * a[0][0]; \ + b[0][1] += (s) * a[0][1]; \ + \ + b[1][0] += (s) * a[1][0]; \ + b[1][1] += (s) * a[1][1]; \ +} + +/* +========================================================== */ +/* multiply matrix by scalar */ + +#define ACCUM_SCALE_MATRIX_3X3(b,s,a) \ +{ \ + b[0][0] += (s) * a[0][0]; \ + b[0][1] += (s) * a[0][1]; \ + b[0][2] += (s) * a[0][2]; \ + \ + b[1][0] += (s) * a[1][0]; \ + b[1][1] += (s) * a[1][1]; \ + b[1][2] += (s) * a[1][2]; \ + \ + b[2][0] += (s) * a[2][0]; \ + b[2][1] += (s) * a[2][1]; \ + b[2][2] += (s) * a[2][2]; \ +} + +/* +========================================================== */ +/* multiply matrix by scalar */ + +#define ACCUM_SCALE_MATRIX_4X4(b,s,a) \ +{ \ + b[0][0] += (s) * a[0][0]; \ + b[0][1] += (s) * a[0][1]; \ + b[0][2] += (s) * a[0][2]; \ + b[0][3] += (s) * a[0][3]; \ + \ + b[1][0] += (s) * a[1][0]; \ + b[1][1] += (s) * a[1][1]; \ + b[1][2] += (s) * a[1][2]; \ + b[1][3] += (s) * a[1][3]; \ + \ + b[2][0] += (s) * a[2][0]; \ + b[2][1] += (s) * a[2][1]; \ + b[2][2] += (s) * a[2][2]; \ + b[2][3] += (s) * a[2][3]; \ + \ + b[3][0] += (s) * a[3][0]; \ + b[3][1] += (s) * a[3][1]; \ + b[3][2] += (s) * a[3][2]; \ + b[3][3] += (s) * a[3][3]; \ +} + +/* +========================================================== */ +/* matrix product */ +/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ + +#define MATRIX_PRODUCT_2X2(c,a,b) \ +{ \ + c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]; \ + c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]; \ + \ + c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]; \ + c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]; \ + \ +} + +/* ========================================================== */ +/* matrix product */ +/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ + +#define MATRIX_PRODUCT_3X3(c,a,b) \ +{ \ + c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]; \ + c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]; \ + c[0][2] = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]; \ + \ + c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]; \ + c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]; \ + c[1][2] = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]; \ + \ + c[2][0] = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]; \ + c[2][1] = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]; \ + c[2][2] = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]; \ +} + +/* ========================================================== */ +/* matrix product */ +/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ + +#define MATRIX_PRODUCT_4X4(c,a,b) \ +{ \ + c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]+a[0][3]*b[3][0];\ + c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]+a[0][3]*b[3][1];\ + c[0][2] = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]+a[0][3]*b[3][2];\ + c[0][3] = a[0][0]*b[0][3]+a[0][1]*b[1][3]+a[0][2]*b[2][3]+a[0][3]*b[3][3];\ + \ + c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]+a[1][3]*b[3][0];\ + c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]+a[1][3]*b[3][1];\ + c[1][2] = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]+a[1][3]*b[3][2];\ + c[1][3] = a[1][0]*b[0][3]+a[1][1]*b[1][3]+a[1][2]*b[2][3]+a[1][3]*b[3][3];\ + \ + c[2][0] = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]+a[2][3]*b[3][0];\ + c[2][1] = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]+a[2][3]*b[3][1];\ + c[2][2] = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]+a[2][3]*b[3][2];\ + c[2][3] = a[2][0]*b[0][3]+a[2][1]*b[1][3]+a[2][2]*b[2][3]+a[2][3]*b[3][3];\ + \ + c[3][0] = a[3][0]*b[0][0]+a[3][1]*b[1][0]+a[3][2]*b[2][0]+a[3][3]*b[3][0];\ + c[3][1] = a[3][0]*b[0][1]+a[3][1]*b[1][1]+a[3][2]*b[2][1]+a[3][3]*b[3][1];\ + c[3][2] = a[3][0]*b[0][2]+a[3][1]*b[1][2]+a[3][2]*b[2][2]+a[3][3]*b[3][2];\ + c[3][3] = a[3][0]*b[0][3]+a[3][1]*b[1][3]+a[3][2]*b[2][3]+a[3][3]*b[3][3];\ +} + +/* ========================================================== */ +/* matrix times vector */ + +#define MAT_DOT_VEC_2X2(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1]; \ +} + +/* ========================================================== */ +/* matrix times vector */ + +#define MAT_DOT_VEC_3X3(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2]; \ + p[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2]; \ +} + +/* ========================================================== */ +/* matrix times vector */ + +#define MAT_DOT_VEC_4X4(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2] + m[0][3]*v[3]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2] + m[1][3]*v[3]; \ + p[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2] + m[2][3]*v[3]; \ + p[3] = m[3][0]*v[0] + m[3][1]*v[1] + m[3][2]*v[2] + m[3][3]*v[3]; \ +} + +/* ========================================================== */ +/* vector transpose times matrix */ +/* p[j] = v[0]*m[0][j] + v[1]*m[1][j] + v[2]*m[2][j]; */ + +#define VEC_DOT_MAT_3X3(p,v,m) \ +{ \ + p[0] = v[0]*m[0][0] + v[1]*m[1][0] + v[2]*m[2][0]; \ + p[1] = v[0]*m[0][1] + v[1]*m[1][1] + v[2]*m[2][1]; \ + p[2] = v[0]*m[0][2] + v[1]*m[1][2] + v[2]*m[2][2]; \ +} + +/* ========================================================== */ +/* affine matrix times vector */ +/* The matrix is assumed to be an affine matrix, with last two + * entries representing a translation */ + +#define MAT_DOT_VEC_2X3(p,m,v) \ +{ \ + p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]; \ + p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]; \ +} + +/* ========================================================== */ +/* inverse transpose of matrix times vector + * + * This macro computes inverse transpose of matrix m, + * and multiplies vector v into it, to yeild vector p + * + * DANGER !!! Do Not use this on normal vectors!!! + * It will leave normals the wrong length !!! + * See macro below for use on normals. + */ + +#define INV_TRANSP_MAT_DOT_VEC_2X2(p,m,v) \ +{ \ + gleDouble det; \ + \ + det = m[0][0]*m[1][1] - m[0][1]*m[1][0]; \ + p[0] = m[1][1]*v[0] - m[1][0]*v[1]; \ + p[1] = - m[0][1]*v[0] + m[0][0]*v[1]; \ + \ + /* if matrix not singular, and not orthonormal, then renormalize */ \ + if ((det!=1.0) && (det != 0.0)) { \ + det = 1.0 / det; \ + p[0] *= det; \ + p[1] *= det; \ + } \ +} + +/* ========================================================== */ +/* transform normal vector by inverse transpose of matrix + * and then renormalize the vector + * + * This macro computes inverse transpose of matrix m, + * and multiplies vector v into it, to yeild vector p + * Vector p is then normalized. + */ + + +#define NORM_XFORM_2X2(p,m,v) \ +{ \ + double mlen; \ + \ + /* do nothing if off-diagonals are zero and diagonals are \ + * equal */ \ + if ((m[0][1] != 0.0) || (m[1][0] != 0.0) || (m[0][0] != m[1][1])) { \ + p[0] = m[1][1]*v[0] - m[1][0]*v[1]; \ + p[1] = - m[0][1]*v[0] + m[0][0]*v[1]; \ + \ + mlen = p[0]*p[0] + p[1]*p[1]; \ + mlen = 1.0 / sqrt (mlen); \ + p[0] *= mlen; \ + p[1] *= mlen; \ + } else { \ + VEC_COPY_2 (p, v); \ + } \ +} + +/* ========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define OUTER_PRODUCT_2X2(m,v,t) \ +{ \ + m[0][0] = v[0] * t[0]; \ + m[0][1] = v[0] * t[1]; \ + \ + m[1][0] = v[1] * t[0]; \ + m[1][1] = v[1] * t[1]; \ +} + +/* ========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define OUTER_PRODUCT_3X3(m,v,t) \ +{ \ + m[0][0] = v[0] * t[0]; \ + m[0][1] = v[0] * t[1]; \ + m[0][2] = v[0] * t[2]; \ + \ + m[1][0] = v[1] * t[0]; \ + m[1][1] = v[1] * t[1]; \ + m[1][2] = v[1] * t[2]; \ + \ + m[2][0] = v[2] * t[0]; \ + m[2][1] = v[2] * t[1]; \ + m[2][2] = v[2] * t[2]; \ +} + +/* ========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define OUTER_PRODUCT_4X4(m,v,t) \ +{ \ + m[0][0] = v[0] * t[0]; \ + m[0][1] = v[0] * t[1]; \ + m[0][2] = v[0] * t[2]; \ + m[0][3] = v[0] * t[3]; \ + \ + m[1][0] = v[1] * t[0]; \ + m[1][1] = v[1] * t[1]; \ + m[1][2] = v[1] * t[2]; \ + m[1][3] = v[1] * t[3]; \ + \ + m[2][0] = v[2] * t[0]; \ + m[2][1] = v[2] * t[1]; \ + m[2][2] = v[2] * t[2]; \ + m[2][3] = v[2] * t[3]; \ + \ + m[3][0] = v[3] * t[0]; \ + m[3][1] = v[3] * t[1]; \ + m[3][2] = v[3] * t[2]; \ + m[3][3] = v[3] * t[3]; \ +} + +/* +========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define ACCUM_OUTER_PRODUCT_2X2(m,v,t) \ +{ \ + m[0][0] += v[0] * t[0]; \ + m[0][1] += v[0] * t[1]; \ + \ + m[1][0] += v[1] * t[0]; \ + m[1][1] += v[1] * t[1]; \ +} + +/* +========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define ACCUM_OUTER_PRODUCT_3X3(m,v,t) \ +{ \ + m[0][0] += v[0] * t[0]; \ + m[0][1] += v[0] * t[1]; \ + m[0][2] += v[0] * t[2]; \ + \ + m[1][0] += v[1] * t[0]; \ + m[1][1] += v[1] * t[1]; \ + m[1][2] += v[1] * t[2]; \ + \ + m[2][0] += v[2] * t[0]; \ + m[2][1] += v[2] * t[1]; \ + m[2][2] += v[2] * t[2]; \ +} + +/* +========================================================== */ +/* outer product of vector times vector transpose + * + * The outer product of vector v and vector transpose t yeilds + * dyadic matrix m. + */ + +#define ACCUM_OUTER_PRODUCT_4X4(m,v,t) \ +{ \ + m[0][0] += v[0] * t[0]; \ + m[0][1] += v[0] * t[1]; \ + m[0][2] += v[0] * t[2]; \ + m[0][3] += v[0] * t[3]; \ + \ + m[1][0] += v[1] * t[0]; \ + m[1][1] += v[1] * t[1]; \ + m[1][2] += v[1] * t[2]; \ + m[1][3] += v[1] * t[3]; \ + \ + m[2][0] += v[2] * t[0]; \ + m[2][1] += v[2] * t[1]; \ + m[2][2] += v[2] * t[2]; \ + m[2][3] += v[2] * t[3]; \ + \ + m[3][0] += v[3] * t[0]; \ + m[3][1] += v[3] * t[1]; \ + m[3][2] += v[3] * t[2]; \ + m[3][3] += v[3] * t[3]; \ +} + +/* +========================================================== */ +/* determinant of matrix + * + * Computes determinant of matrix m, returning d + */ + +#define DETERMINANT_2X2(d,m) \ +{ \ + d = m[0][0] * m[1][1] - m[0][1] * m[1][0]; \ +} + +/* ========================================================== */ +/* determinant of matrix + * + * Computes determinant of matrix m, returning d + */ + +#define DETERMINANT_3X3(d,m) \ +{ \ + d = m[0][0] * (m[1][1]*m[2][2] - m[1][2] * m[2][1]); \ + d -= m[0][1] * (m[1][0]*m[2][2] - m[1][2] * m[2][0]); \ + d += m[0][2] * (m[1][0]*m[2][1] - m[1][1] * m[2][0]); \ +} + +/* ========================================================== */ +/* i,j,th cofactor of a 4x4 matrix + * + */ + +#define COFACTOR_4X4_IJ(fac,m,i,j) \ +{ \ + int ii[4], jj[4], k; \ + \ + /* compute which row, columnt to skip */ \ + for (k=0; k + + + + IBDocumentLocation + 4 104 410 240 0 0 1152 848 + IBEditorPositions + + 29 + 19 615 246 44 0 0 1152 848 + + IBFramework Version + 291.0 + IBGroupedObjects + + IBLastGroupID + 1 + IBOpenObjects + + 29 + + IBSystem Version + 6I32 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUT.nib/objects.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUT.nib/objects.nib new file mode 100644 index 0000000..8a7140e Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUT.nib/objects.nib differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/classes.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/classes.nib new file mode 100644 index 0000000..7e85eb1 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/classes.nib @@ -0,0 +1,13 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {toggleWindow = id; }; + CLASS = GLUTClipboardController; + LANGUAGE = ObjC; + OUTLETS = {_infoText = id; _scrollView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/info.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/info.nib new file mode 100644 index 0000000..867735d --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 63 221 356 240 0 0 1600 1178 + IBFramework Version + 263.2 + IBSystem Version + 5S41 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/objects.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/objects.nib new file mode 100644 index 0000000..29125d4 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTClipboard.nib/objects.nib differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/classes.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/classes.nib new file mode 100644 index 0000000..c675963 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/classes.nib @@ -0,0 +1,73 @@ +{ + IBClasses = ( + { + ACTIONS = {save = id; saveAs = id; }; + CLASS = FirstResponder; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; + }, + { + ACTIONS = { + cancel = id; + joyAssign = id; + joyDevice = id; + joyElement = id; + joyInvert = id; + launchDebugMode = id; + launchGamemodeCaptureSingle = id; + launchIconic = id; + launchUseCurrWD = id; + launchUseExtDesktop = id; + launchUseMacOSCoords = id; + mouseEanbleEmulation = id; + mouseMiddleMenu = id; + mouseRightMenu = id; + ok = id; + spaceAssign = id; + spaceDevice = id; + spaceElement = id; + spaceInvert = id; + }; + CLASS = GLUTPreferencesController; + LANGUAGE = ObjC; + OUTLETS = { + joyAssign = NSButton; + joyAssignNote = NSTextField; + joyAssignWarningIcon = NSImageView; + joyDeviceMenu = NSPopUpButton; + joyElement = NSTextField; + joyInputMenu = NSPopUpButton; + joyInverted = NSButton; + launchDebugMode = NSButton; + launchFadeTime = NSTextField; + launchGamemodeCaptureSingle = NSButton; + launchIconic = NSButton; + launchInitHeight = NSTextField; + launchInitWidth = NSTextField; + launchInitX = NSTextField; + launchInitY = NSTextField; + launchMenuIdle = NSTextField; + launchSyncToVBL = NSButton; + launchUseCurrWD = NSButton; + launchUseExtendedDesktop = NSButton; + launchUseMacOSXCoords = NSButton; + mouseAssignWarningIcon = NSImageView; + mouseAssignWarningText = NSTextField; + mouseDetected = NSTextField; + mouseEmulation = NSButton; + mouseMiddleConfigMenu = NSPopUpButton; + mouseRightConfigMenu = NSPopUpButton; + prefsTabView = NSTabView; + spaceAssign = NSButton; + spaceAssignNote = NSTextField; + spaceAssignWarningIcon = NSImageView; + spaceDeviceMenu = NSPopUpButton; + spaceElement = NSTextField; + spaceInputMenu = NSPopUpButton; + spaceInverted = NSButton; + }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/info.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/info.nib new file mode 100644 index 0000000..216c8dc --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 16 329 410 240 0 0 1920 1178 + IBFramework Version + 439.0 + IBOpenObjects + + 205 + + IBSystem Version + 8G32 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/objects.nib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/objects.nib new file mode 100644 index 0000000..7598f2c Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTPreferences.nib/objects.nib differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTUI.strings b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTUI.strings new file mode 100644 index 0000000..6db3c5c Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/GLUTUI.strings differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..6f78b89 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/Info.plist b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/Info.plist new file mode 100644 index 0000000..e8fc9d6 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + GLUT + CFBundleGetInfoString + 3.4.0, Copyright (c) 2001-2008 Apple Inc., All Rights Reserved + CFBundleIdentifier + com.apple.glut + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.4.0 + CFBundleSignature + ???? + CFBundleVersion + GLUT-3.4.0 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/blankCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/blankCursor.tiff new file mode 100644 index 0000000..a2b0cf1 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/blankCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomCursor.tiff new file mode 100644 index 0000000..c3f4795 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomleftCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomleftCursor.tiff new file mode 100644 index 0000000..274529f Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomleftCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomrightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomrightCursor.tiff new file mode 100644 index 0000000..dec4252 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/bottomrightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/crossCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/crossCursor.tiff new file mode 100644 index 0000000..8536c0e Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/crossCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/cycleCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/cycleCursor.tiff new file mode 100644 index 0000000..34b52f6 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/cycleCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/destroyCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/destroyCursor.tiff new file mode 100644 index 0000000..9e3a1cb Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/destroyCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/fingerCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/fingerCursor.tiff new file mode 100644 index 0000000..0087c66 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/fingerCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/helpCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/helpCursor.tiff new file mode 100644 index 0000000..fc4a88a Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/helpCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/leftCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/leftCursor.tiff new file mode 100644 index 0000000..852b69b Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/leftCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/leftRightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/leftRightCursor.tiff new file mode 100644 index 0000000..37fe393 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/leftRightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/rightArrowCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/rightArrowCursor.tiff new file mode 100644 index 0000000..d852616 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/rightArrowCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/rightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/rightCursor.tiff new file mode 100644 index 0000000..9781f22 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/rightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/sprayCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/sprayCursor.tiff new file mode 100644 index 0000000..9bec966 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/sprayCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/topCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/topCursor.tiff new file mode 100644 index 0000000..e4df0de Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/topCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/topleftCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/topleftCursor.tiff new file mode 100644 index 0000000..43cf97f Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/topleftCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/toprightCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/toprightCursor.tiff new file mode 100644 index 0000000..429b01b Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/toprightCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/upDownCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/upDownCursor.tiff new file mode 100644 index 0000000..1605063 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/upDownCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/waitCursor.tiff b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/waitCursor.tiff new file mode 100644 index 0000000..81ba1aa Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current/Resources/waitCursor.tiff differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Info.plist b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Info.plist new file mode 100644 index 0000000..d7ae794 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Info.plist @@ -0,0 +1,38 @@ + + + + + BuildMachineOSBuild + 14D2134 + CFBundleDevelopmentRegion + English + CFBundleExecutable + emptyExampleDebug + CFBundleIconFile + icon-debug.icns + CFBundleIdentifier + cc.openFrameworks.ofapp + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 6D2105 + DTPlatformVersion + GM + DTSDKBuild + 14D125 + DTSDKName + macosx10.10 + DTXcode + 0632 + DTXcodeBuild + 6D2105 + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/MacOS/emptyExampleDebug b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/MacOS/emptyExampleDebug new file mode 100755 index 0000000..3784d27 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/MacOS/emptyExampleDebug differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/MacOS/libfmodex.dylib b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/MacOS/libfmodex.dylib new file mode 100644 index 0000000..bea90a1 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/MacOS/libfmodex.dylib differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/PkgInfo b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/PkgInfo new file mode 100644 index 0000000..bd04210 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPL???? \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Resources/icon-debug.icns b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Resources/icon-debug.icns new file mode 100644 index 0000000..9b2d976 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/bin/emptyExampleDebug.app/Contents/Resources/icon-debug.icns differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/config.make b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/config.make new file mode 100644 index 0000000..df10f64 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/config.make @@ -0,0 +1,142 @@ +################################################################################ +# CONFIGURE PROJECT MAKEFILE (optional) +# This file is where we make project specific configurations. +################################################################################ + +################################################################################ +# OF ROOT +# The location of your root openFrameworks installation +# (default) OF_ROOT = ../../.. +################################################################################ +# OF_ROOT = ../../.. + +################################################################################ +# PROJECT ROOT +# The location of the project - a starting place for searching for files +# (default) PROJECT_ROOT = . (this directory) +# +################################################################################ +# PROJECT_ROOT = . + +################################################################################ +# PROJECT SPECIFIC CHECKS +# This is a project defined section to create internal makefile flags to +# conditionally enable or disable the addition of various features within +# this makefile. For instance, if you want to make changes based on whether +# GTK is installed, one might test that here and create a variable to check. +################################################################################ +# None + +################################################################################ +# PROJECT EXTERNAL SOURCE PATHS +# These are fully qualified paths that are not within the PROJECT_ROOT folder. +# Like source folders in the PROJECT_ROOT, these paths are subject to +# exlclusion via the PROJECT_EXLCUSIONS list. +# +# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXTERNAL_SOURCE_PATHS = + +################################################################################ +# PROJECT EXCLUSIONS +# These makefiles assume that all folders in your current project directory +# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations +# to look for source code. The any folders or files that match any of the +# items in the PROJECT_EXCLUSIONS list below will be ignored. +# +# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete +# string unless teh user adds a wildcard (%) operator to match subdirectories. +# GNU make only allows one wildcard for matching. The second wildcard (%) is +# treated literally. +# +# (default) PROJECT_EXCLUSIONS = (blank) +# +# Will automatically exclude the following: +# +# $(PROJECT_ROOT)/bin% +# $(PROJECT_ROOT)/obj% +# $(PROJECT_ROOT)/%.xcodeproj +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXCLUSIONS = + +################################################################################ +# PROJECT LINKER FLAGS +# These flags will be sent to the linker when compiling the executable. +# +# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ + +# Currently, shared libraries that are needed are copied to the +# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to +# add a runtime path to search for those shared libraries, since they aren't +# incorporated directly into the final executable application binary. +# TODO: should this be a default setting? +# PROJECT_LDFLAGS=-Wl,-rpath=./libs + +################################################################################ +# PROJECT DEFINES +# Create a space-delimited list of DEFINES. The list will be converted into +# CFLAGS with the "-D" flag later in the makefile. +# +# (default) PROJECT_DEFINES = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_DEFINES = + +################################################################################ +# PROJECT CFLAGS +# This is a list of fully qualified CFLAGS required when compiling for this +# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS +# defined in your platform specific core configuration files. These flags are +# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. +# +# (default) PROJECT_CFLAGS = (blank) +# +# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in +# your platform specific configuration file will be applied by default and +# further flags here may not be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CFLAGS = + +################################################################################ +# PROJECT OPTIMIZATION CFLAGS +# These are lists of CFLAGS that are target-specific. While any flags could +# be conditionally added, they are usually limited to optimization flags. +# These flags are added BEFORE the PROJECT_CFLAGS. +# +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) +# +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) +# +# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the +# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration +# file will be applied by default and further optimization flags here may not +# be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = + +################################################################################ +# PROJECT COMPILERS +# Custom compilers can be set for CC and CXX +# (default) PROJECT_CXX = (blank) +# (default) PROJECT_CC = (blank) +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CXX = +# PROJECT_CC = diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/project.pbxproj b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..0768c9d --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/project.pbxproj @@ -0,0 +1,644 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 8AAB6B911B2F3C2A00F5E531 /* fft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AAB6B7E1B2F3C2A00F5E531 /* fft.cpp */; }; + 8AAB6B921B2F3C2A00F5E531 /* maxiAtoms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AAB6B801B2F3C2A00F5E531 /* maxiAtoms.cpp */; }; + 8AAB6B931B2F3C2A00F5E531 /* maxiBark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AAB6B821B2F3C2A00F5E531 /* maxiBark.cpp */; }; + 8AAB6B941B2F3C2A00F5E531 /* maxiFFT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AAB6B841B2F3C2A00F5E531 /* maxiFFT.cpp */; }; + 8AAB6B951B2F3C2A00F5E531 /* maxiGrains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AAB6B861B2F3C2A00F5E531 /* maxiGrains.cpp */; }; + 8AAB6B961B2F3C2A00F5E531 /* maxiMFCC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AAB6B881B2F3C2A00F5E531 /* maxiMFCC.cpp */; }; + 8AAB6B971B2F3C2A00F5E531 /* maximilian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AAB6B8A1B2F3C2A00F5E531 /* maximilian.cpp */; }; + 8AAB6B981B2F3C2A00F5E531 /* stb_vorbis.c in Sources */ = {isa = PBXBuildFile; fileRef = 8AAB6B8D1B2F3C2A00F5E531 /* stb_vorbis.c */; }; + BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; + E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; + E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; }; + E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; }; + E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */; }; + E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */; }; + E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */; }; + E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9770E8CC7DD009D7055 /* CoreServices.framework */; }; + E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9790E8CC7DD009D7055 /* OpenGL.framework */; }; + E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */; }; + E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; + E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; }; + E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424410CC5A17004149E2 /* AppKit.framework */; }; + E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424510CC5A17004149E2 /* Cocoa.framework */; }; + E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424610CC5A17004149E2 /* IOKit.framework */; }; + E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; + E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */; }; + E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E715D3B6510020DFD4 /* QTKit.framework */; }; + E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7F985F515E0DE99003869B5 /* Accelerate.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E4B27C1510CBEB8E00536013; + remoteInfo = openFrameworks; + }; + E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = E4B27C1410CBEB8E00536013; + remoteInfo = openFrameworks; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + E4C2427710CC5ABF004149E2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 8AAB6B7C1B2F3C2A00F5E531 /* install.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = install.xml; sourceTree = ""; }; + 8AAB6B7E1B2F3C2A00F5E531 /* fft.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fft.cpp; sourceTree = ""; }; + 8AAB6B7F1B2F3C2A00F5E531 /* fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fft.h; sourceTree = ""; }; + 8AAB6B801B2F3C2A00F5E531 /* maxiAtoms.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maxiAtoms.cpp; sourceTree = ""; }; + 8AAB6B811B2F3C2A00F5E531 /* maxiAtoms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxiAtoms.h; sourceTree = ""; }; + 8AAB6B821B2F3C2A00F5E531 /* maxiBark.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maxiBark.cpp; sourceTree = ""; }; + 8AAB6B831B2F3C2A00F5E531 /* maxiBark.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxiBark.h; sourceTree = ""; }; + 8AAB6B841B2F3C2A00F5E531 /* maxiFFT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maxiFFT.cpp; sourceTree = ""; }; + 8AAB6B851B2F3C2A00F5E531 /* maxiFFT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxiFFT.h; sourceTree = ""; }; + 8AAB6B861B2F3C2A00F5E531 /* maxiGrains.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maxiGrains.cpp; sourceTree = ""; }; + 8AAB6B871B2F3C2A00F5E531 /* maxiGrains.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxiGrains.h; sourceTree = ""; }; + 8AAB6B881B2F3C2A00F5E531 /* maxiMFCC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maxiMFCC.cpp; sourceTree = ""; }; + 8AAB6B891B2F3C2A00F5E531 /* maxiMFCC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxiMFCC.h; sourceTree = ""; }; + 8AAB6B8A1B2F3C2A00F5E531 /* maximilian.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maximilian.cpp; sourceTree = ""; }; + 8AAB6B8B1B2F3C2A00F5E531 /* maximilian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maximilian.h; sourceTree = ""; }; + 8AAB6B8C1B2F3C2A00F5E531 /* sineTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sineTable.h; sourceTree = ""; }; + 8AAB6B8D1B2F3C2A00F5E531 /* stb_vorbis.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stb_vorbis.c; sourceTree = ""; }; + 8AAB6B8E1B2F3C2A00F5E531 /* stb_vorbis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stb_vorbis.h; sourceTree = ""; }; + 8AAB6B901B2F3C2A00F5E531 /* ofxMaxim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxMaxim.h; sourceTree = ""; }; + BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; }; + E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; + E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; + E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; + E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; + E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; + E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + E45BE9770E8CC7DD009D7055 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + E45BE9790E8CC7DD009D7055 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; + E4B69B5B0A3A1756003C02F2 /* emptyExampleDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = emptyExampleDebug.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; + E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofApp.cpp; path = src/ofApp.cpp; sourceTree = SOURCE_ROOT; }; + E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = src/ofApp.h; sourceTree = SOURCE_ROOT; }; + E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; }; + E4C2424410CC5A17004149E2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + E4C2424510CC5A17004149E2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + E4C2424610CC5A17004149E2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; + E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; + E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = ""; }; + E7E077E715D3B6510020DFD4 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; }; + E7F985F515E0DE99003869B5 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E4B69B590A3A1756003C02F2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */, + E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */, + E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */, + E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, + E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */, + E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */, + E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */, + E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */, + E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */, + E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */, + E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */, + E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */, + E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */, + E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */, + E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */, + E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 8AAB6B7B1B2F3C2A00F5E531 /* ofxMaxim */ = { + isa = PBXGroup; + children = ( + 8AAB6B7C1B2F3C2A00F5E531 /* install.xml */, + 8AAB6B7D1B2F3C2A00F5E531 /* libs */, + 8AAB6B8F1B2F3C2A00F5E531 /* src */, + ); + path = ofxMaxim; + sourceTree = ""; + }; + 8AAB6B7D1B2F3C2A00F5E531 /* libs */ = { + isa = PBXGroup; + children = ( + 8AAB6B7E1B2F3C2A00F5E531 /* fft.cpp */, + 8AAB6B7F1B2F3C2A00F5E531 /* fft.h */, + 8AAB6B801B2F3C2A00F5E531 /* maxiAtoms.cpp */, + 8AAB6B811B2F3C2A00F5E531 /* maxiAtoms.h */, + 8AAB6B821B2F3C2A00F5E531 /* maxiBark.cpp */, + 8AAB6B831B2F3C2A00F5E531 /* maxiBark.h */, + 8AAB6B841B2F3C2A00F5E531 /* maxiFFT.cpp */, + 8AAB6B851B2F3C2A00F5E531 /* maxiFFT.h */, + 8AAB6B861B2F3C2A00F5E531 /* maxiGrains.cpp */, + 8AAB6B871B2F3C2A00F5E531 /* maxiGrains.h */, + 8AAB6B881B2F3C2A00F5E531 /* maxiMFCC.cpp */, + 8AAB6B891B2F3C2A00F5E531 /* maxiMFCC.h */, + 8AAB6B8A1B2F3C2A00F5E531 /* maximilian.cpp */, + 8AAB6B8B1B2F3C2A00F5E531 /* maximilian.h */, + 8AAB6B8C1B2F3C2A00F5E531 /* sineTable.h */, + 8AAB6B8D1B2F3C2A00F5E531 /* stb_vorbis.c */, + 8AAB6B8E1B2F3C2A00F5E531 /* stb_vorbis.h */, + ); + path = libs; + sourceTree = ""; + }; + 8AAB6B8F1B2F3C2A00F5E531 /* src */ = { + isa = PBXGroup; + children = ( + 8AAB6B901B2F3C2A00F5E531 /* ofxMaxim.h */, + ); + path = src; + sourceTree = ""; + }; + BB4B014C10F69532006C3DED /* addons */ = { + isa = PBXGroup; + children = ( + 8AAB6B7B1B2F3C2A00F5E531 /* ofxMaxim */, + ); + name = addons; + sourceTree = ""; + }; + BBAB23C913894ECA00AA2426 /* system frameworks */ = { + isa = PBXGroup; + children = ( + E7F985F515E0DE99003869B5 /* Accelerate.framework */, + E4C2424410CC5A17004149E2 /* AppKit.framework */, + E4C2424510CC5A17004149E2 /* Cocoa.framework */, + E4C2424610CC5A17004149E2 /* IOKit.framework */, + E45BE9710E8CC7DD009D7055 /* AGL.framework */, + E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */, + E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */, + E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */, + E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */, + E45BE9770E8CC7DD009D7055 /* CoreServices.framework */, + E45BE9790E8CC7DD009D7055 /* OpenGL.framework */, + E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */, + E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */, + E7E077E715D3B6510020DFD4 /* QTKit.framework */, + ); + name = "system frameworks"; + sourceTree = ""; + }; + BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */ = { + isa = PBXGroup; + children = ( + BBAB23BE13894E4700AA2426 /* GLUT.framework */, + ); + name = "3rd party frameworks"; + sourceTree = ""; + }; + E4328144138ABC890047C5CB /* Products */ = { + isa = PBXGroup; + children = ( + E4328148138ABC890047C5CB /* openFrameworksDebug.a */, + ); + name = Products; + sourceTree = ""; + }; + E45BE5980E8CC70C009D7055 /* frameworks */ = { + isa = PBXGroup; + children = ( + BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */, + BBAB23C913894ECA00AA2426 /* system frameworks */, + ); + name = frameworks; + sourceTree = ""; + }; + E4B69B4A0A3A1720003C02F2 = { + isa = PBXGroup; + children = ( + E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */, + E4EB6923138AFD0F00A09F29 /* Project.xcconfig */, + E4B69E1C0A3A1BDC003C02F2 /* src */, + E4EEC9E9138DF44700A80321 /* openFrameworks */, + BB4B014C10F69532006C3DED /* addons */, + E45BE5980E8CC70C009D7055 /* frameworks */, + E4B69B5B0A3A1756003C02F2 /* emptyExampleDebug.app */, + ); + sourceTree = ""; + }; + E4B69E1C0A3A1BDC003C02F2 /* src */ = { + isa = PBXGroup; + children = ( + E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, + E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */, + E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */, + ); + path = src; + sourceTree = SOURCE_ROOT; + }; + E4EEC9E9138DF44700A80321 /* openFrameworks */ = { + isa = PBXGroup; + children = ( + E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */, + E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */, + ); + name = openFrameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E4B69B5A0A3A1756003C02F2 /* emptyExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "emptyExample" */; + buildPhases = ( + E4B69B580A3A1756003C02F2 /* Sources */, + E4B69B590A3A1756003C02F2 /* Frameworks */, + E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, + E4C2427710CC5ABF004149E2 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + E4EEB9AC138B136A00A80321 /* PBXTargetDependency */, + ); + name = emptyExample; + productName = myOFApp; + productReference = E4B69B5B0A3A1756003C02F2 /* emptyExampleDebug.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E4B69B4C0A3A1720003C02F2 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0460; + }; + buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "emptyExample" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = E4B69B4A0A3A1720003C02F2; + productRefGroup = E4B69B4A0A3A1720003C02F2; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = E4328144138ABC890047C5CB /* Products */; + ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + E4B69B5A0A3A1756003C02F2 /* emptyExample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = openFrameworksDebug.a; + remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXShellScriptBuildPhase section */ + E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cp -f ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/libfmodex.dylib\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\ncp -f \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E4B69B580A3A1756003C02F2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8AAB6B981B2F3C2A00F5E531 /* stb_vorbis.c in Sources */, + 8AAB6B911B2F3C2A00F5E531 /* fft.cpp in Sources */, + 8AAB6B941B2F3C2A00F5E531 /* maxiFFT.cpp in Sources */, + 8AAB6B921B2F3C2A00F5E531 /* maxiAtoms.cpp in Sources */, + 8AAB6B931B2F3C2A00F5E531 /* maxiBark.cpp in Sources */, + E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, + 8AAB6B971B2F3C2A00F5E531 /* maximilian.cpp in Sources */, + 8AAB6B961B2F3C2A00F5E531 /* maxiMFCC.cpp in Sources */, + 8AAB6B951B2F3C2A00F5E531 /* maxiGrains.cpp in Sources */, + E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = openFrameworks; + targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + E4B69B4E0A3A1720003C02F2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + ARCHS = "$(NATIVE_ARCH)"; + CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + src, + ); + MACOSX_DEPLOYMENT_TARGET = 10.6; + OTHER_CPLUSPLUSFLAGS = ( + "-D__MACOSX_CORE__", + "-lpthread", + "-mtune=native", + ); + SDKROOT = macosx; + }; + name = Debug; + }; + E4B69B4F0A3A1720003C02F2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + ARCHS = "$(NATIVE_ARCH)"; + CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; + COPY_PHASE_STRIP = YES; + DEAD_CODE_STRIPPING = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_UNROLL_LOOPS = YES; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + src, + ); + MACOSX_DEPLOYMENT_TARGET = 10.6; + OTHER_CPLUSPLUSFLAGS = ( + "-D__MACOSX_CORE__", + "-lpthread", + "-mtune=native", + ); + SDKROOT = macosx; + }; + name = Release; + }; + E4B69B600A3A1757003C02F2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + ICON = "$(ICON_NAME_DEBUG)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_52)", + ); + PRODUCT_NAME = "$(TARGET_NAME)Debug"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + E4B69B610A3A1757003C02F2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + ICON = "$(ICON_NAME_RELEASE)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "emptyExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4B69B4E0A3A1720003C02F2 /* Debug */, + E4B69B4F0A3A1720003C02F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "emptyExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4B69B600A3A1757003C02F2 /* Debug */, + E4B69B610A3A1757003C02F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */; +} diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..dc98145 Binary files /dev/null and b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcshareddata/xcschemes/emptyExample Debug.xcscheme b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcshareddata/xcschemes/emptyExample Debug.xcscheme new file mode 100644 index 0000000..06ebf54 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcshareddata/xcschemes/emptyExample Debug.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcshareddata/xcschemes/emptyExample Release.xcscheme b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcshareddata/xcschemes/emptyExample Release.xcscheme new file mode 100644 index 0000000..6d32390 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcshareddata/xcschemes/emptyExample Release.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcuserdata/michaelgrierson.xcuserdatad/xcschemes/xcschememanagement.plist b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcuserdata/michaelgrierson.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..13dfb6e --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/emptyExample.xcodeproj/xcuserdata/michaelgrierson.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SuppressBuildableAutocreation + + E4B69B5A0A3A1756003C02F2 + + primary + + + + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/install.xml b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/install.xml new file mode 100644 index 0000000..e42de73 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/install.xml @@ -0,0 +1,37 @@ + + 0.1 + Goldsmiths Creative Computing + http://www.maximilian.strangeloop.co.uk/ + + + + + + + + + + + + ../../../addons/ofxMaxim/src/ofxMaxim.h + + + + ../../../addons/ofxMaxim/libs/fft.h + ../../../addons/ofxMaxim/libs/fft.cpp + ../../../addons/ofxMaxim/libs/fftOctaveAnalyzer.h + ../../../addons/ofxMaxim/libs/fftOctaveAnalyzer.cpp + ../../../addons/ofxMaxim/libs/maxiBark.cpp + ../../../addons/ofxMaxim/libs/maxiBark.h + ../../../addons/ofxMaxim/libs/maximilian.h + ../../../addons/ofxMaxim/libs/maximilian.cpp + + + + + + ../../../addons/ofxMaxim/src + ../../../addons/ofxMaxim/libs + + + \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/fft.cpp b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/fft.cpp new file mode 100644 index 0000000..85a7aa9 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/fft.cpp @@ -0,0 +1,584 @@ +/* + * maximilian + * platform independent synthesis library using portaudio or rtaudio + * + * Created by Mick Grierson on 29/12/2009. + * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved. + * Thanks to the Goldsmiths Creative Computing Team. + * Special thanks to Arturo Castro for the PortAudio implementation. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +/* + + fft.cpp + + Based on K+R Numerical recipes in C and some other stuff hacked about. + + */ + +#include "fft.h" +#include +#include +#include +#include + +int **gFFTBitTable = NULL; +const int MaxFastBits = 16; + +int IsPowerOfTwo(int x) +{ + if (x < 2) + return false; + + if (x & (x - 1)) + return false; + + return true; +} + +int NumberOfBitsNeeded(int PowerOfTwo) +{ + int i; + + if (PowerOfTwo < 2) { + fprintf(stderr, "Error: FFT called with size %d\n", PowerOfTwo); + exit(1); + } + + for (i = 0;; i++) + if (PowerOfTwo & (1 << i)) + return i; +} + +int ReverseBits(int index, int NumBits) +{ + int i, rev; + + for (i = rev = 0; i < NumBits; i++) { + rev = (rev << 1) | (index & 1); + index >>= 1; + } + + return rev; +} + +void InitFFT() +{ + // gFFTBitTable = new int *[MaxFastBits]; + //use malloc for 16 byte alignment + gFFTBitTable = (int**) malloc(MaxFastBits * sizeof(int*)); + + int len = 2; + for (int b = 1; b <= MaxFastBits; b++) { + + // gFFTBitTable[b - 1] = new int[len]; + gFFTBitTable[b - 1] = (int*) malloc(len * sizeof(int)); + + for (int i = 0; i < len; i++) + gFFTBitTable[b - 1][i] = ReverseBits(i, b); + + len <<= 1; + } +} + +inline int FastReverseBits(int i, int NumBits) +{ + if (NumBits <= MaxFastBits) + return gFFTBitTable[NumBits - 1][i]; + else + return ReverseBits(i, NumBits); +} + +/* + * Complex Fast Fourier Transform + */ + +void FFT(int NumSamples, + bool InverseTransform, + float *RealIn, float *ImagIn, float *RealOut, float *ImagOut) +{ + int NumBits; /* Number of bits needed to store indices */ + int i, j, k, n; + int BlockSize, BlockEnd; + + double angle_numerator = 2.0 * M_PI; + float tr, ti; /* temp real, temp imaginary */ + + if (!IsPowerOfTwo(NumSamples)) { + fprintf(stderr, "%d is not a power of two\n", NumSamples); + exit(1); + } + + if (!gFFTBitTable) + InitFFT(); + + if (InverseTransform) + angle_numerator = -angle_numerator; + + NumBits = NumberOfBitsNeeded(NumSamples); + + /* + ** Do simultaneous data copy and bit-reversal ordering into outputs... + */ + + for (i = 0; i < NumSamples; i++) { + j = FastReverseBits(i, NumBits); + RealOut[j] = RealIn[i]; + ImagOut[j] = (ImagIn == NULL) ? 0.0 : ImagIn[i]; + } + + /* + ** Do the FFT itself... + */ + + BlockEnd = 1; + for (BlockSize = 2; BlockSize <= NumSamples; BlockSize <<= 1) { + + double delta_angle = angle_numerator / (double) BlockSize; + + float sm2 = sin(-2 * delta_angle); + float sm1 = sin(-delta_angle); + float cm2 = cos(-2 * delta_angle); + float cm1 = cos(-delta_angle); + float w = 2 * cm1; + float ar0, ar1, ar2, ai0, ai1, ai2; + + for (i = 0; i < NumSamples; i += BlockSize) { + ar2 = cm2; + ar1 = cm1; + + ai2 = sm2; + ai1 = sm1; + + for (j = i, n = 0; n < BlockEnd; j++, n++) { + ar0 = w * ar1 - ar2; + ar2 = ar1; + ar1 = ar0; + + ai0 = w * ai1 - ai2; + ai2 = ai1; + ai1 = ai0; + + k = j + BlockEnd; + tr = ar0 * RealOut[k] - ai0 * ImagOut[k]; + ti = ar0 * ImagOut[k] + ai0 * RealOut[k]; + + RealOut[k] = RealOut[j] - tr; + ImagOut[k] = ImagOut[j] - ti; + + RealOut[j] += tr; + ImagOut[j] += ti; + } + } + + BlockEnd = BlockSize; + } + + /* + ** Need to normalize if inverse transform... + */ + + if (InverseTransform) { + float denom = (float) NumSamples; + + for (i = 0; i < NumSamples; i++) { + RealOut[i] /= denom; + ImagOut[i] /= denom; + } + } +} + +/* + * Real Fast Fourier Transform + * + * This function was based on the code in Numerical Recipes in C. + * In Num. Rec., the inner loop is based on a single 1-based array + * of interleaved real and imaginary numbers. Because we have two + * separate zero-based arrays, our indices are quite different. + * Here is the correspondence between Num. Rec. indices and our indices: + * + * i1 <-> real[i] + * i2 <-> imag[i] + * i3 <-> real[n/2-i] + * i4 <-> imag[n/2-i] + */ + +void RealFFT(int NumSamples, float *RealIn, float *RealOut, float *ImagOut) +{ + int Half = NumSamples / 2; + int i; + + float theta = M_PI / Half; + + float *tmpReal = (float*) malloc(Half * sizeof(float)); + float *tmpImag = (float*) malloc(Half * sizeof(float)); + + for (i = 0; i < Half; i++) { + tmpReal[i] = RealIn[2 * i]; + tmpImag[i] = RealIn[2 * i + 1]; + } + + FFT(Half, 0, tmpReal, tmpImag, RealOut, ImagOut); + + float wtemp = float (sin(0.5 * theta)); + + float wpr = -2.0 * wtemp * wtemp; + float wpi = float (sin(theta)); + float wr = 1.0 + wpr; + float wi = wpi; + + int i3; + + float h1r, h1i, h2r, h2i; + + for (i = 1; i < Half / 2; i++) { + + i3 = Half - i; + + h1r = 0.5 * (RealOut[i] + RealOut[i3]); + h1i = 0.5 * (ImagOut[i] - ImagOut[i3]); + h2r = 0.5 * (ImagOut[i] + ImagOut[i3]); + h2i = -0.5 * (RealOut[i] - RealOut[i3]); + + RealOut[i] = h1r + wr * h2r - wi * h2i; + ImagOut[i] = h1i + wr * h2i + wi * h2r; + RealOut[i3] = h1r - wr * h2r + wi * h2i; + ImagOut[i3] = -h1i + wr * h2i + wi * h2r; + + wr = (wtemp = wr) * wpr - wi * wpi + wr; + wi = wi * wpr + wtemp * wpi + wi; + } + + RealOut[0] = (h1r = RealOut[0]) + ImagOut[0]; + ImagOut[0] = h1r - ImagOut[0]; + + free(tmpReal); + free(tmpImag); +} + +/* + * PowerSpectrum + * + * This function computes the same as RealFFT, above, but + * adds the squares of the real and imaginary part of each + * coefficient, extracting the power and throwing away the + * phase. + * + * For speed, it does not call RealFFT, but duplicates some + * of its code. + */ + +void PowerSpectrum(int NumSamples, float *In, float *Out) +{ + int Half = NumSamples / 2; + int i; + + float theta = M_PI / Half; + + float *tmpReal = new float[Half]; + float *tmpImag = new float[Half]; + float *RealOut = new float[Half]; + float *ImagOut = new float[Half]; + + for (i = 0; i < Half; i++) { + tmpReal[i] = In[2 * i]; + tmpImag[i] = In[2 * i + 1]; + } + + FFT(Half, 0, tmpReal, tmpImag, RealOut, ImagOut); + + float wtemp = float (sin(0.5 * theta)); + + float wpr = -2.0 * wtemp * wtemp; + float wpi = float (sin(theta)); + float wr = 1.0 + wpr; + float wi = wpi; + + int i3; + + float h1r, h1i, h2r, h2i, rt, it; + //float total=0; + + for (i = 1; i < Half / 2; i++) { + + i3 = Half - i; + + h1r = 0.5 * (RealOut[i] + RealOut[i3]); + h1i = 0.5 * (ImagOut[i] - ImagOut[i3]); + h2r = 0.5 * (ImagOut[i] + ImagOut[i3]); + h2i = -0.5 * (RealOut[i] - RealOut[i3]); + + rt = h1r + wr * h2r - wi * h2i; //printf("Realout%i = %f",i,rt);total+=fabs(rt); + it = h1i + wr * h2i + wi * h2r; // printf(" Imageout%i = %f\n",i,it); + + Out[i] = rt * rt + it * it; + + rt = h1r - wr * h2r + wi * h2i; + it = -h1i + wr * h2i + wi * h2r; + + Out[i3] = rt * rt + it * it; + + wr = (wtemp = wr) * wpr - wi * wpi + wr; + wi = wi * wpr + wtemp * wpi + wi; + } + //printf("total = %f\n",total); + rt = (h1r = RealOut[0]) + ImagOut[0]; + it = h1r - ImagOut[0]; + Out[0] = rt * rt + it * it; + + rt = RealOut[Half / 2]; + it = ImagOut[Half / 2]; + Out[Half / 2] = rt * rt + it * it; + + delete[]tmpReal; + delete[]tmpImag; + delete[]RealOut; + delete[]ImagOut; +} + +void WindowFunc(int whichFunction, int NumSamples, float *in) +{ + int i; + + if (whichFunction == 1) { + // Bartlett (triangular) window + for (i = 0; i < NumSamples / 2; i++) { + in[i] *= (i / (float) (NumSamples / 2)); + in[i + (NumSamples / 2)] *= + (1.0 - (i / (float) (NumSamples / 2))); + } + } + + if (whichFunction == 2) { + // Hamming + for (i = 0; i < NumSamples; i++) + in[i] *= 0.54 - 0.46 * cos(2 * M_PI * i / (NumSamples - 1)); + } + + if (whichFunction == 3) { + // Hanning + for (i = 0; i < NumSamples; i++) + in[i] *= 0.50 - 0.50 * cos(2 * M_PI * i / (NumSamples - 1)); + } +} + +void fft::genWindow(int whichFunction, int NumSamples, float *window) +{ + int i; + + if (whichFunction == 1) { + // Bartlett (triangular) window + for (i = 0; i < NumSamples / 2; i++) { + window[i] = (i / (float) (NumSamples / 2)); + window[i + (NumSamples / 2)] = + (1.0 - (i / (float) (NumSamples / 2))); + } + } + + if (whichFunction == 2) { + // Hamming + for (i = 0; i < NumSamples; i++) + window[i] = 0.54 - 0.46 * cos(2 * M_PI * i / (NumSamples - 1)); + } + + if (whichFunction == 3) { + // Hanning + for (i = 0; i < NumSamples; i++) + window[i] = 0.50 - 0.50 * cos(2 * M_PI * i / (NumSamples - 1)); + } +} + +/* constructor */ +fft::fft(int fftSize) { + n = fftSize; + half = fftSize / 2; + //use malloc for 16 byte alignment + in_real = (float *) malloc(n * sizeof(float)); + in_img = (float *) malloc(n * sizeof(float)); + out_real = (float *) malloc(n * sizeof(float)); + out_img = (float *) malloc(n * sizeof(float)); + +#ifdef __APPLE_CC__ + log2n = log2(n); + A.realp = (float *) malloc(half * sizeof(float)); + A.imagp = (float *) malloc(half * sizeof(float)); + setupReal = vDSP_create_fftsetup(log2n, FFT_RADIX2); + if (setupReal == NULL) { + printf("\nFFT_Setup failed to allocate enough memory for" + "the real FFT.\n"); + } + polar = (float *) malloc(n * sizeof(float)); +#endif +} + +/* destructor */ +fft::~fft() { + delete[] in_real, out_real, in_img, out_img; +#ifdef __APPLE_CC__ + vDSP_destroy_fftsetup(setupReal); + delete[] A.realp; + delete[] A.imagp; + delete[] polar; +#endif + +} + +/* Calculate the power spectrum */ +void fft::powerSpectrum(int start, float *data, float *window, float *magnitude,float *phase) { + int i; + + //windowing + for (i = 0; i < n; i++) { + in_real[i] = data[start + i] * window[i]; + } + + + RealFFT(n, in_real, out_real, out_img); + + for (i = 0; i < half; i++) { + /* compute power */ + float power = out_real[i]*out_real[i] + out_img[i]*out_img[i]; + /* compute magnitude and phase */ + magnitude[i] = sqrt(power); + phase[i] = atan2(out_img[i],out_real[i]); + + // if (magnitude[i] < 0.000001){ // less than 0.1 nV + // magnitude[i] = 0; // out of range + // } else { + // magnitude[i] = 20.0*log10(magnitude[i] + 1); // get to to db scale + // } + } + +} + +void fft::convToDB(float *in, float *out) { + for (int i = 0; i < half; i++) { + if (in[i] < 0.000001){ // less than 0.1 nV + out[i] = 0; // out of range + } else { + out[i] = 20.0*log10(in[i] + 1); // get to to db scale + } + } +} + + +#ifdef __APPLE_CC__ + +/* Calculate the power spectrum */ +void fft::powerSpectrum_vdsp(int start, float *data, float *window, float *magnitude,float *phase) { + + uint32_t i; + + //multiply by window + vDSP_vmul(data, 1, window, 1, in_real, 1, n); + + //convert to split complex format - evens and odds + vDSP_ctoz((COMPLEX *) in_real, 2, &A, 1, half); + + + //calc fft + vDSP_fft_zrip(setupReal, &A, 1, log2n, FFT_FORWARD); + + //scale by 2 (see vDSP docs) + static float scale=0.5 ; + vDSP_vsmul(A.realp, 1, &scale, A.realp, 1, half); + vDSP_vsmul(A.imagp, 1, &scale, A.imagp, 1, half); + + //back to split complex format + vDSP_ztoc(&A, 1, (COMPLEX*) out_real, 2, half); + + //convert to polar + vDSP_polar(out_real, 2, polar, 2, half); + + for (i = 0; i < half; i++) { + magnitude[i]=polar[2*i]; + phase[i]=polar[2*i + 1]; + } + + + +} + +void fft::convToDB_vdsp(float *in, float *out) { + float ref = 1.0; + vDSP_vdbcon(in, 1, &ref, out, 1, half, 1); + //get rid of any -infs + float vmin=0.0; + float vmax=9999999.0; + vDSP_vclip(out, 1, &vmin, &vmax, out, 1, half); +} + +#endif + +void fft::inversePowerSpectrum(int start, float *finalOut, float *window, float *magnitude,float *phase) { + int i; + + /* get real and imag part */ + for (i = 0; i < half; i++) { + // float mag = pow(10.0, magnitude[i] / 20.0) - 1.0; + // in_real[i] = mag *cos(phase[i]); + // in_img[i] = mag *sin(phase[i]); + in_real[i] = magnitude[i] *cos(phase[i]); + in_img[i] = magnitude[i] *sin(phase[i]); + } + + /* zero negative frequencies */ + memset(in_real+half, half, 0.0); + memset(in_img+half, half, 0.0); + + FFT(n, 1, in_real, in_img, out_real, out_img); // second parameter indicates inverse transform + + for (i = 0; i < n; i++) { + finalOut[start + i] += out_real[i] * window[i] + ; + } + +} + + +#ifdef __APPLE_CC__ +void fft::inversePowerSpectrum_vdsp(int start, float *finalOut, float *window, float *magnitude,float *phase) { + uint32_t i; + + for (i = 0; i < half; i++) { + // polar[2*i] = pow(10.0, magnitude[i] / 20.0) - 1.0; + polar[2*i] = magnitude[i]; + polar[2*i + 1] = phase[i]; + } + + vDSP_rect(polar, 2, in_real, 2, half); + + vDSP_ctoz((COMPLEX*) in_real, 2, &A, 1, half); + vDSP_fft_zrip(setupReal, &A, 1, log2n, FFT_INVERSE); + vDSP_ztoc(&A, 1, (COMPLEX*) out_real, 2, half); + + float scale = 1./n; + vDSP_vsmul(out_real, 1, &scale, out_real, 1, n); + + //multiply by window + vDSP_vmul(out_real, 1, window, 1, finalOut, 1, n); + +} + +#endif diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/fft.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/fft.h new file mode 100644 index 0000000..7f0e688 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/fft.h @@ -0,0 +1,79 @@ +/* + * maximilian + * platform independent synthesis library using portaudio or rtaudio + * + * Created by Mick Grierson on 29/12/2009. + * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved. + * Thanks to the Goldsmiths Creative Computing Team. + * Special thanks to Arturo Castro for the PortAudio implementation. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _FFT +#define _FFT + +#ifndef M_PI +#define M_PI 3.14159265358979323846 /* pi */ +#endif + +#ifdef __APPLE_CC__ +#include +#endif + + + +class fft { + +public: + + fft(int fftSize); + ~fft(); + + int n; //fftSize + int half; //halfFFTSize + + float *in_real, *out_real, *in_img, *out_img; + +#ifdef __APPLE_CC__ + int log2n; //log2(n); + FFTSetup setupReal; + COMPLEX_SPLIT A; + float *polar; + void powerSpectrum_vdsp(int start, float *data, float *window, float *magnitude,float *phase); + void inversePowerSpectrum_vdsp(int start, float *finalOut, float *window, float *magnitude,float *phase); + void convToDB_vdsp(float *in, float *out); +#endif + + /* Calculate the power spectrum */ + void powerSpectrum(int start, float *data, float *window, float *magnitude, float *phase); + /* ... the inverse */ + void inversePowerSpectrum(int start, float *finalOut, float *window, float *magnitude,float *phase); + void convToDB(float *in, float *out); + + static void genWindow(int whichFunction, int NumSamples, float *window); + +}; + + +#endif diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiAtoms.cpp b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiAtoms.cpp new file mode 100644 index 0000000..14f5ea8 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiAtoms.cpp @@ -0,0 +1,219 @@ +/* + * gabor.cpp + * mp + * + * Created by Chris on 01/11/2011. + * Copyright 2011 Goldsmiths Creative Computing. All rights reserved. + * + */ + +#include "maxiAtoms.h" +#include +#include +#include "sineTable.h" +#ifdef __APPLE_CC__ +#include +#warning ofxMaxim: Please link against the accelerate framework. +#endif + +//#include "tinyxml.h" + +float sineBuffer2[514]={0,0.012268,0.024536,0.036804,0.049042,0.06131,0.073547,0.085785,0.097992,0.1102,0.12241,0.13455,0.1467,0.15884,0.17093,0.18301,0.19507,0.20709,0.21909,0.23105,0.24295,0.25485,0.26669,0.2785,0.29025,0.30197,0.31366,0.32529,0.33685,0.34839,0.35986,0.37128,0.38266,0.39395,0.40521,0.41641,0.42752,0.4386,0.44958,0.46051,0.47137,0.48215,0.49286,0.50351,0.51407,0.52457,0.53497,0.54529,0.55554,0.5657,0.57578,0.58575,0.59567,0.60547,0.6152,0.62482,0.63437,0.6438,0.65314,0.66238,0.67151,0.68057,0.68951,0.69833,0.70706,0.7157,0.72421,0.7326,0.74091,0.74908,0.75717,0.76514,0.77298,0.7807,0.7883,0.79581,0.80316,0.81042,0.81754,0.82455,0.83142,0.8382,0.84482,0.85132,0.8577,0.86392,0.87006,0.87604,0.88187,0.8876,0.89319,0.89862,0.90396,0.90912,0.91415,0.91907,0.92383,0.92847,0.93295,0.93729,0.9415,0.94556,0.94949,0.95325,0.95691,0.96039,0.96375,0.96692,0.97,0.9729,0.97565,0.97827,0.98074,0.98306,0.98523,0.98724,0.98914,0.99084,0.99243,0.99387,0.99515,0.99628,0.99725,0.99808,0.99875,0.99927,0.99966,0.99988,0.99997,0.99988,0.99966,0.99927,0.99875,0.99808,0.99725,0.99628,0.99515,0.99387,0.99243,0.99084,0.98914,0.98724,0.98523,0.98306,0.98074,0.97827,0.97565,0.9729,0.97,0.96692,0.96375,0.96039,0.95691,0.95325,0.94949,0.94556,0.9415,0.93729,0.93295,0.92847,0.92383,0.91907,0.91415,0.90912,0.90396,0.89862,0.89319,0.8876,0.88187,0.87604,0.87006,0.86392,0.8577,0.85132,0.84482,0.8382,0.83142,0.82455,0.81754,0.81042,0.80316,0.79581,0.7883,0.7807,0.77298,0.76514,0.75717,0.74908,0.74091,0.7326,0.72421,0.7157,0.70706,0.69833,0.68951,0.68057,0.67151,0.66238,0.65314,0.6438,0.63437,0.62482,0.6152,0.60547,0.59567,0.58575,0.57578,0.5657,0.55554,0.54529,0.53497,0.52457,0.51407,0.50351,0.49286,0.48215,0.47137,0.46051,0.44958,0.4386,0.42752,0.41641,0.40521,0.39395,0.38266,0.37128,0.35986,0.34839,0.33685,0.32529,0.31366,0.30197,0.29025,0.2785,0.26669,0.25485,0.24295,0.23105,0.21909,0.20709,0.19507,0.18301,0.17093,0.15884,0.1467,0.13455,0.12241,0.1102,0.097992,0.085785,0.073547,0.06131,0.049042,0.036804,0.024536,0.012268,0,-0.012268,-0.024536,-0.036804,-0.049042,-0.06131,-0.073547,-0.085785,-0.097992,-0.1102,-0.12241,-0.13455,-0.1467,-0.15884,-0.17093,-0.18301,-0.19507,-0.20709,-0.21909,-0.23105,-0.24295,-0.25485,-0.26669,-0.2785,-0.29025,-0.30197,-0.31366,-0.32529,-0.33685,-0.34839,-0.35986,-0.37128,-0.38266,-0.39395,-0.40521,-0.41641,-0.42752,-0.4386,-0.44958,-0.46051,-0.47137,-0.48215,-0.49286,-0.50351,-0.51407,-0.52457,-0.53497,-0.54529,-0.55554,-0.5657,-0.57578,-0.58575,-0.59567,-0.60547,-0.6152,-0.62482,-0.63437,-0.6438,-0.65314,-0.66238,-0.67151,-0.68057,-0.68951,-0.69833,-0.70706,-0.7157,-0.72421,-0.7326,-0.74091,-0.74908,-0.75717,-0.76514,-0.77298,-0.7807,-0.7883,-0.79581,-0.80316,-0.81042,-0.81754,-0.82455,-0.83142,-0.8382,-0.84482,-0.85132,-0.8577,-0.86392,-0.87006,-0.87604,-0.88187,-0.8876,-0.89319,-0.89862,-0.90396,-0.90912,-0.91415,-0.91907,-0.92383,-0.92847,-0.93295,-0.93729,-0.9415,-0.94556,-0.94949,-0.95325,-0.95691,-0.96039,-0.96375,-0.96692,-0.97,-0.9729,-0.97565,-0.97827,-0.98074,-0.98306,-0.98523,-0.98724,-0.98914,-0.99084,-0.99243,-0.99387,-0.99515,-0.99628,-0.99725,-0.99808,-0.99875,-0.99927,-0.99966,-0.99988,-0.99997,-0.99988,-0.99966,-0.99927,-0.99875,-0.99808,-0.99725,-0.99628,-0.99515,-0.99387,-0.99243,-0.99084,-0.98914,-0.98724,-0.98523,-0.98306,-0.98074,-0.97827,-0.97565,-0.9729,-0.97,-0.96692,-0.96375,-0.96039,-0.95691,-0.95325,-0.94949,-0.94556,-0.9415,-0.93729,-0.93295,-0.92847,-0.92383,-0.91907,-0.91415,-0.90912,-0.90396,-0.89862,-0.89319,-0.8876,-0.88187,-0.87604,-0.87006,-0.86392,-0.8577,-0.85132,-0.84482,-0.8382,-0.83142,-0.82455,-0.81754,-0.81042,-0.80316,-0.79581,-0.7883,-0.7807,-0.77298,-0.76514,-0.75717,-0.74908,-0.74091,-0.7326,-0.72421,-0.7157,-0.70706,-0.69833,-0.68951,-0.68057,-0.67151,-0.66238,-0.65314,-0.6438,-0.63437,-0.62482,-0.6152,-0.60547,-0.59567,-0.58575,-0.57578,-0.5657,-0.55554,-0.54529,-0.53497,-0.52457,-0.51407,-0.50351,-0.49286,-0.48215,-0.47137,-0.46051,-0.44958,-0.4386,-0.42752,-0.41641,-0.40521,-0.39395,-0.38266,-0.37128,-0.35986,-0.34839,-0.33685,-0.32529,-0.31366,-0.30197,-0.29025,-0.2785,-0.26669,-0.25485,-0.24295,-0.23105,-0.21909,-0.20709,-0.19507,-0.18301,-0.17093,-0.15884,-0.1467,-0.13455,-0.12241,-0.1102,-0.097992,-0.085785,-0.073547,-0.06131,-0.049042,-0.036804,-0.024536,-0.012268,0,0.012268 +}; + + +maxiGrainWindowCache maxiCollider::envCache = maxiGrainWindowCache(); + +inline void maxiCollider::createGabor(flArr &atom, const float freq, const float sampleRate, const unsigned length, + float startPhase, const float kurtotis, const float amp) { + atom.resize(length); + flArr sine; + sine.resize(length); + +// float gausDivisor = (-2.0 * kurtotis * kurtotis); +// float phase =-1.0; + + double *env = maxiCollider::envCache.getWindow(length); +#ifdef __APPLE_CC__ + vDSP_vdpsp(env, 1, &atom[0], 1, length); +#else + for(unsigned i=0; i < length; i++) { + atom[i] = env[i]; + } +#endif + +//#ifdef __APPLE_CC__ +// vDSP_vramp(&phase, &inc, &atom[0], 1, length); +// vDSP_vsq(&atom[0], 1, &atom[0], 1, length); +// vDSP_vsdiv(&atom[0], 1, &gausDivisor, &atom[0], 1, length); +// for(uint i=0; i < length; i++) atom[i] = exp(atom[i]); +//#else +// for(uint i=0; i < length; i++) { +// //gaussian envelope +// atom[i] = exp((phase* phase) / gausDivisor); +// phase += inc; +// } +//#endif + + float cycleLen = sampleRate / freq; + float maxPhase = length / cycleLen; + float inc = 1.0 / length; + + +#ifdef __APPLE_CC__ + flArr interpConstants; + interpConstants.resize(length); + float phase = 0.0; + vDSP_vramp(&phase, &inc, &interpConstants[0], 1, length); + vDSP_vsmsa(&interpConstants[0], 1, &maxPhase, &startPhase, &interpConstants[0], 1, length); + float waveTableLength = 512; + vDSP_vsmul(&interpConstants[0], 1, &waveTableLength, &interpConstants[0], 1, length); + for(uint i=0; i < length; i++) { + interpConstants[i] = fmod(interpConstants[i], 512.0f); + } + vDSP_vlint(sineBuffer2, &interpConstants[0], 1, &sine[0], 1, length, 514); + vDSP_vmul(&atom[0], 1, &sine[0], 1, &atom[0], 1, length); + vDSP_vsmul(&atom[0], 1, &, &atom[0], 1, length); +#else + maxPhase *= TWOPI; + for(unsigned int i=0; i < length; i++) { + //multiply by sinewave + float x = inc * i; + sine[i] = sin((x * maxPhase) + startPhase); + } + for(unsigned int i=0; i < length; i++) { + atom[i] *= sine[i]; + atom[i] *= amp; + } +#endif +} + + + +maxiAccelerator::maxiAccelerator() { + sampleIdx = 0; +} + +void maxiAccelerator::addAtom(flArr &atom, unsigned int offset) { + queuedAtom quAtom; + quAtom.atom = atom; + quAtom.startTime = sampleIdx + offset; + quAtom.pos = 0; + atomQueue.push_back(quAtom); +} + +void maxiAccelerator::fillNextBuffer(float *buffer, unsigned int bufferLength) { + queuedAtomList::iterator it = atomQueue.begin(); + while(it != atomQueue.end()) { + int atomStart = (*it).startTime + (*it).pos; + //include in this frame? + if (atomStart >= sampleIdx && atomStart < sampleIdx + bufferLength) { + //copy into buffer + int renderLength = min((int)bufferLength,(int)( (*it).atom.size() - (*it).pos)); + for(int i=0; i < renderLength; i++) { + buffer[i] += (*it).atom[i + (*it).pos]; + } + (*it).pos += renderLength; + } + if ((*it).pos == (*it).atom.size()) { + it = atomQueue.erase(it); + }else { + it++; + } + + } + sampleIdx += bufferLength; +} + +//bool maxiAtomBook::loadMPTKXmlBook(string filename, maxiAtomBook &book) { +// bool ok; +// ifstream f; +// f.open(filename.c_str()); +// if (f.fail()) { +// cout << "I couldn't open " << filename << endl; +// ok = false; +// }else { +// cout << "Reading " << filename << endl; +// const int lineBufferSize = 1024; +// char lineBuffer[lineBufferSize]; +// string line(""); +// //get dictionary definition xml +// while("" != line) { +// f.getline(lineBuffer, lineBufferSize); +// line = lineBuffer; +// } +// //this should be "txt" +// f.getline(lineBuffer, lineBufferSize); +// //get rest of data into one string +// string xmlData; +// while(!f.eof()) { +// f.getline(lineBuffer, lineBufferSize); +// xmlData.append(lineBuffer); +// } +// TiXmlDocument doc; +// doc.Parse(xmlData.c_str()); +// cout << "Parsed xml, processing atoms...\n"; +// TiXmlHandle docHandle = TiXmlHandle(&doc); +// +// TiXmlElement *root = docHandle.FirstChildElement("book").ToElement(); +// TiXmlAttribute *nAtomsAtt = root->FirstAttribute(); +// cout << nAtomsAtt->Name() << ", " << nAtomsAtt->Value() << endl; +// int nAtoms = atoi(nAtomsAtt->Value()); +// TiXmlAttribute *numSamplesAtt = nAtomsAtt->Next()->Next(); +// cout << numSamplesAtt->Name() << ", " << numSamplesAtt->Value() << endl; +// book.numSamples = atoi(numSamplesAtt->Value()); +// TiXmlAttribute *sampleRateAtt = numSamplesAtt->Next(); +// cout << sampleRateAtt->Name() << ", " << sampleRateAtt->Value() << endl; +// book.sampleRate = atoi(sampleRateAtt->Value()); +// +// for(int atomIdx=0; atomIdx < nAtoms; atomIdx++) { +// maxiGaborAtom *newAtom = new maxiGaborAtom(); +// newAtom->atomType = GABOR; +// TiXmlElement *atom = docHandle.FirstChildElement("book").ChildElement("atom", atomIdx).ToElement(); +// TiXmlElement *node = atom->FirstChildElement()->NextSibling()->ToElement(); +// newAtom->position = atoi(node->FirstChildElement("p")->FirstChild()->ToText()->Value()); +// newAtom->length = atoi(node->FirstChildElement("l")->FirstChild()->ToText()->Value()); +// node = node->NextSibling()->ToElement(); +// newAtom->amp = atof(node->FirstChild()->ToText()->Value()); +// node = node->NextSibling()->NextSibling()->ToElement(); +// newAtom->frequency = atof(node->FirstChild()->ToText()->Value()); +// node = node->NextSibling()->NextSibling()->ToElement(); +// newAtom->phase = atof(node->FirstChild()->ToText()->Value()); +// //cout << "Atom: pos: " << newAtom->position << ", length: " << newAtom->length << ", amp: " << newAtom->amp << ", freq: " << newAtom->frequency << ", phase: " << newAtom->phase << endl; +// book.atoms.push_back(newAtom); +// } +// +// } +// return ok; +//} + +maxiAtomBook::~maxiAtomBook() { + for(int i=0; i < atoms.size(); i++) delete atoms[i]; +} + +maxiAtomBookPlayer::maxiAtomBookPlayer() { + atomIdx = 0; +} + +void maxiAtomBookPlayer::play(maxiAtomBook &book, maxiAccelerator &atomStream, float *output, int bufferSize) { + //positions + long idx = atomStream.getSampleIdx(); + int loopedSamplePos = idx % book.numSamples; + + //reset loop? + if (loopedSamplePos < bufferSize) + atomIdx = 0; + + if (atomIdx < book.atoms.size()) { + maxiGaborAtom *atom = (maxiGaborAtom*) book.atoms[atomIdx]; + while(atom->position < (idx + bufferSize) % book.numSamples) { + flArr atomData; + maxiCollider::createGabor(atomData, maxiMap::linlin(atom->frequency, 0.0, 1.0, 20, 20000), 44100, atom->length, atom->phase, 0.3, atom->amp / 40.0); + atomStream.addAtom(atomData, loopedSamplePos - atom->position); + atomIdx++; + if (book.atoms.size() == atomIdx) + break; + atom = (maxiGaborAtom*) book.atoms[atomIdx]; + } + } +} diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiAtoms.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiAtoms.h new file mode 100644 index 0000000..1782d55 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiAtoms.h @@ -0,0 +1,91 @@ +/* + * gabor.h + * mp + * + * Created by Chris on 01/11/2011. + * Copyright 2011 Goldsmiths Creative Computing. All rights reserved. + * + */ + + +#include +#include "maximilian.h" +#include +#include +#include "maxiGrains.h" + + +using namespace std; + +typedef vector flArr; + +enum maxiAtomTypes { + GABOR +}; + +struct maxiAtom { + maxiAtomTypes atomType; + float length; + float position; + float amp; + static bool atomSortPositionAsc(maxiAtom* a, maxiAtom* b) {return a->position < b->position;} +}; + +struct maxiGaborAtom : maxiAtom { + float frequency; + float phase; +}; + +//create atoms +class maxiCollider { +public: + static inline void createGabor(flArr &atom, const float freq, const float sampleRate, const unsigned int length, + float phase, const float kurtotis, const float amp); + static maxiGrainWindowCache envCache; +}; + + +//queue atoms into an audio stream +class maxiAccelerator { +public: + maxiAccelerator(); + void addAtom(flArr &atom, unsigned int offset=0); + void fillNextBuffer(float *buffer, unsigned int bufferLength); + inline long getSampleIdx(){return sampleIdx;} +private: + long sampleIdx; + struct queuedAtom { + flArr atom; + long startTime; + unsigned int pos; + }; + typedef list queuedAtomList; + queuedAtomList atomQueue; +}; + +/*load a book in MPTK XML format + http://mptk.irisa.fr/ + + how to create a book: + mpd -n 1000 -R 10 -d ./dic_gabor_two_scales.xml glockenspiel.wav book.xml +*/ +class maxiAtomBook { +public: + ~maxiAtomBook(); + typedef vector maxiAtomBookData; + unsigned int numSamples; + unsigned int sampleRate; + maxiAtomBookData atoms; + //commented out for now, need to resolve tinyxml linker issues - we need tinyxml in the distrib, but it clashes if you also import ofxXmlSettings +// static bool loadMPTKXmlBook(string filename, maxiAtomBook &book); + +}; + +class maxiAtomBookPlayer { +public: + maxiAtomBookPlayer(); + void play(maxiAtomBook &book, maxiAccelerator &atomStream, float *output, int bufferSize); +private: + unsigned int atomIdx; +}; + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiBark.cpp b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiBark.cpp new file mode 100644 index 0000000..634a779 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiBark.cpp @@ -0,0 +1,10 @@ +/* + * maxiBark.cpp + * Bark scale loudness + * + * Created by Jakub on 01/12/2014. + * Copyright 2014 Goldsmiths Creative Computing. All rights reserved. + * + */ + +#include "maxiBark.h" diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiBark.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiBark.h new file mode 100644 index 0000000..dbb4a86 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiBark.h @@ -0,0 +1,133 @@ +/* + * maxiBark.cpp + * Bark scale loudness + * + * Created by Jakub on 01/12/2014. + * Copyright 2014 Goldsmiths Creative Computing. All rights reserved. + * + */ + +#pragma once +#pragma pack(16) + +#include "maxiFFT.h" +#include +#include +//#include +#include +#ifdef __APPLE_CC__ +#include +#endif + +using namespace std; + +//convert to Bark scale (Zwicker, 1961) +inline double hzToBark(double hz) { + return 13.0*atan(hz/1315.8) + 3.5*atan(pow((hz/7518.0),2)); +} + +inline double binToHz(unsigned int bin, unsigned int sR, unsigned int bS) { + return bin*sR/bS; +} + +template + +class maxiBarkScaleAnalyser { +public: + int NUM_BARK_BANDS; + + void setup(unsigned int sR, unsigned int bS) { + this->sampleRate = sR; + this->bufferSize = bS; + specSize = bS/2; + NUM_BARK_BANDS = 24; + for (int i=0; i currentBandEnd) { + bbLimits[currentBand] = i; + currentBand++; + currentBandEnd = currentBand*barkScale[specSize-1]/NUM_BARK_BANDS; + } + } + + bbLimits[NUM_BARK_BANDS] = specSize-1; + }; + + double* specificLoudness(float* normalisedSpectrum) { + for (int i = 0; i < NUM_BARK_BANDS; i++){ + double sum = 0; + for (int j = bbLimits[i] ; j < bbLimits[i+1] ; j++) { + + sum += normalisedSpectrum[j]; + } + specific[i] = pow(sum,0.23); + } + + return specific; + }; + + double* relativeLoudness(float* normalisedSpectrum) { + for (int i = 0; i < NUM_BARK_BANDS; i++){ + double sum = 0; + for (int j = bbLimits[i] ; j < bbLimits[i+1] ; j++) { + + sum += normalisedSpectrum[j]; + } + specific[i] = pow(sum,0.23); + } + + double max = 0; + for (int i = 0; i < NUM_BARK_BANDS; i++){ + if (specific[i] > max) max = specific[i]; + } + + for (int i = 0; i < NUM_BARK_BANDS; i++){ + relative[i] = specific[i]/max; + } + + return relative; + }; + + double* totalLoudness(float* normalisedSpectrum) { + for (int i = 0; i < NUM_BARK_BANDS; i++){ + double sum = 0; + for (int j = bbLimits[i] ; j < bbLimits[i+1] ; j++) { + + sum += normalisedSpectrum[j]; + } + specific[i] = pow(sum,0.23); + } + + total[0] = 0; + + for (int i = 0; i < 24; i++){ + total[0] += specific[i]; + } + + return total; + }; + +private: + int bbLimits[24]; + unsigned int sampleRate, bufferSize, specSize; + double barkScale[2048]; + double specific[24]; + double relative[24]; + double total[1]; + +}; + +typedef maxiBarkScaleAnalyser maxiBark; + + + + + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiFFT.cpp b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiFFT.cpp new file mode 100644 index 0000000..c648992 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiFFT.cpp @@ -0,0 +1,290 @@ +/* + * maximilian + * platform independent synthesis library using portaudio or rtaudio + * + * Created by Mick Grierson on 29/12/2009. + * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved. + * Thanks to the Goldsmiths Creative Computing Team. + * Special thanks to Arturo Castro for the PortAudio implementation. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "maxiFFT.h" +#include "maximilian.h" +#include +#include "math.h" + +using namespace std; + + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//F F T +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void maxiFFT::setup(int _fftSize, int _windowSize, int _hopSize) { + _fft = new fft(_fftSize); + fftSize = _fftSize; + windowSize = _windowSize; + bins = fftSize / 2; + hopSize = _hopSize; + buffer = (float *) malloc(fftSize * sizeof(float)); + magnitudes = (float *) malloc(bins * sizeof(float)); + magnitudesDB = (float *) malloc(bins * sizeof(float)); + phases = (float *) malloc(bins * sizeof(float)); + avgPower = new float; + memset(buffer, 0, fftSize * sizeof(float)); + memset(magnitudes, 0, bins * sizeof(float)); + memset(magnitudesDB, 0, bins * sizeof(float)); + memset(phases, 0, bins * sizeof(float)); + *avgPower = 0; + pos =windowSize - hopSize; + newFFT = 0; + window = (float*) malloc(fftSize * sizeof(float)); + memset(window, 0, fftSize * sizeof(float)); + fft::genWindow(3, windowSize, window); +} + +bool maxiFFT::process(float value) { + //add value to buffer at current pos + buffer[pos++] = value; + //if buffer full, run fft + newFFT = pos == windowSize; + if (newFFT) { +#if defined(__APPLE_CC__) && !defined(_NO_VDSP) + _fft->powerSpectrum_vdsp(0, buffer, window, magnitudes, phases); +#else + _fft->powerSpectrum(0, buffer, window, magnitudes, phases); +#endif + //shift buffer back by one hop size + memcpy(buffer, buffer + hopSize, (windowSize - hopSize) * sizeof(float)); + //set the new data to zero (is this necessary?, it will get overwritten) + memset(buffer + windowSize - hopSize, 0, hopSize * sizeof(float)); + //reset pos to start of hop + pos= windowSize - hopSize; + } + return newFFT; +} + +float* maxiFFT::magsToDB() { +#if defined(__APPLE_CC__) && !defined(_NO_VDSP) + _fft->convToDB_vdsp(magnitudes, magnitudesDB); +#else + _fft->convToDB(magnitudes, magnitudesDB); +#endif + return magnitudesDB; +} + +float maxiFFT::spectralFlatness() { + float geometricMean=0, arithmaticMean=0; + for(int i=0; i < bins; i++) { + if (magnitudes[i] != 0) + geometricMean += logf(magnitudes[i]); + arithmaticMean += magnitudes[i]; + } + geometricMean = expf(geometricMean / (float)bins); + arithmaticMean /= (float)bins; + return arithmaticMean !=0 ? geometricMean / arithmaticMean : 0; +} + +float maxiFFT::spectralCentroid() { + float x=0, y=0; + for(int i=0; i < bins; i++) { + x += fabs(magnitudes[i]) * i; + y += fabs(magnitudes[i]); + } + return y != 0 ? x / y * ((float) maxiSettings::sampleRate / fftSize) : 0; +} + + + +maxiFFT::~maxiFFT() { + delete _fft; + if (buffer) + delete[] buffer,magnitudes,phases,window, avgPower, magnitudesDB; +} + + + + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//I N V E R S E F F T +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void maxiIFFT::setup(int _fftSize, int _windowSize, int _hopSize) { + _fft = new fft(_fftSize); + fftSize = _fftSize; + windowSize = _windowSize; + bins = fftSize / 2; + hopSize = _hopSize; + buffer = (float *) malloc(fftSize * sizeof(float)); + ifftOut = (float *) malloc(fftSize * sizeof(float)); + memset(buffer, 0, windowSize * sizeof(float)); + pos =0; + window = (float*) malloc(fftSize * sizeof(float)); + memset(window, 0, fftSize * sizeof(float)); + fft::genWindow(3, windowSize, window); +} + +float maxiIFFT::process(float *magnitudes, float *phases) { + if (0==pos) { + //do ifft + memset(ifftOut, 0, fftSize * sizeof(float)); +#if defined(__APPLE_CC__) && !defined(_NO_VDSP) + _fft->inversePowerSpectrum_vdsp(0, ifftOut, window, magnitudes, phases); +#else + _fft->inversePowerSpectrum(0, ifftOut, window, magnitudes, phases); +#endif + //add to output + //shift back by one hop + memcpy(buffer, buffer+hopSize, (fftSize - hopSize) * sizeof(float)); + //clear the end chunk + memset(buffer + (fftSize - hopSize), 0, hopSize * sizeof(float)); + //merge new output + for(int i=0; i < fftSize; i++) { + buffer[i] += ifftOut[i]; + } + } + + nextValue = buffer[pos]; + //limit the values, this alg seems to spike occasionally (and break the audio drivers) + if (nextValue > 0.99999f) nextValue = 0.99999f; + if (nextValue < -0.99999f) nextValue = -0.99999f; + if (hopSize == ++pos ) { + pos=0; + } + + return nextValue; +} + +maxiIFFT::~maxiIFFT() { + delete _fft; + delete[] ifftOut, buffer, window; +}; + + + + + + + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//O C T A V E A N A L Y S E R +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +void maxiFFTOctaveAnalyzer::setup(float samplingRate, int nBandsInTheFFT, int nAveragesPerOctave){ + + samplingRate = samplingRate; + nSpectrum = nBandsInTheFFT; + spectrumFrequencySpan = (samplingRate / 2.0f) / (float)(nSpectrum); + nAverages = nBandsInTheFFT; + // fe: 2f for octave bands, sqrt(2) for half-octave bands, cuberoot(2) for third-octave bands, etc + if (nAveragesPerOctave==0) // um, wtf? + nAveragesPerOctave = 1; +// nAveragesPerOctave = nAveragesPerOctave; + averageFrequencyIncrement = pow(2.0f, 1.0f/(float)(nAveragesPerOctave)); + // this isn't currently configurable (used once here then no effect), but here's some reasoning: + // 43 is a good value if you want to approximate "computer" octaves: 44100/2/2/2/2/2/2/2/2/2/2 + // 55 is a good value if you'd rather approximate A-440 octaves: 440/2/2/2 + // 65 is a good value if you'd rather approximate "middle-C" octaves: ~262/2/2 + // you could easily double it if you felt the lowest band was just rumble noise (as it probably is) + // but don't go much smaller unless you have a huge fft window size (see below for more why) + // keep in mind, if you change it, that the number of actual bands may change +/-1, and + // for some values, the last averaging band may not be very useful (may extend above nyquist) + firstOctaveFrequency = 55.0f; + // for each spectrum[] bin, calculate the mapping into the appropriate average[] bin. + // this gives us roughly log-sized averaging bins, subject to how "fine" the spectrum bins are. + // with more spectrum bins, you can better map into the averaging bins (especially at low + // frequencies) or use more averaging bins per octave. with an fft window size of 2048, + // sampling rate of 44100, and first octave around 55, that's about enough to do half-octave + // analysis. if you don't have enough spectrum bins to map adequately into averaging bins + // at the requested number per octave then you'll end up with "empty" averaging bins, where + // there is no spectrum available to map into it. (so... if you have "nonreactive" averages, + // either increase fft buffer size, or decrease number of averages per octave, etc) + spe2avg = new int[nSpectrum]; + int avgidx = 0; + float averageFreq = firstOctaveFrequency; // the "top" of the first averaging bin + // we're looking for the "top" of the first spectrum bin, and i'm just sort of + // guessing that this is where it is (or possibly spectrumFrequencySpan/2?) + // ... either way it's probably close enough for these purposes + float spectrumFreq = spectrumFrequencySpan; + for (int speidx=0; speidx < nSpectrum; speidx++) { + while (spectrumFreq > averageFreq) { + avgidx++; + averageFreq *= averageFrequencyIncrement; + } + spe2avg[speidx] = avgidx; + spectrumFreq += spectrumFrequencySpan; + } + nAverages = avgidx; + averages = new float[nAverages]; + peaks = new float[nAverages]; + peakHoldTimes = new int[nAverages]; + peakHoldTime = 0; // arbitrary + peakDecayRate = 0.9f; // arbitrary + linearEQIntercept = 1.0f; // unity -- no eq by default + linearEQSlope = 0.0f; // unity -- no eq by default +} + +void maxiFFTOctaveAnalyzer::calculate(float * fftData){ + + int last_avgidx = 0; // tracks when we've crossed into a new averaging bin, so store current average + float sum = 0.0f; // running total of spectrum data + int count = 0; // count of spectrums accumulated (for averaging) + for (int speidx=0; speidx < nSpectrum; speidx++) { + count++; + sum += fftData[speidx] * (linearEQIntercept + (float)(speidx) * linearEQSlope); + int avgidx = spe2avg[speidx]; + if (avgidx != last_avgidx) { + + for (int j = last_avgidx; j < avgidx; j++){ + averages[j] = sum / (float)(count); + } + count = 0; + sum = 0.0f; + } + last_avgidx = avgidx; + } + // the last average was probably not calculated... + if ((count > 0) && (last_avgidx < nAverages)){ + averages[last_avgidx] = sum / (float)(count); + } + + // update the peaks separately + for (int i=0; i < nAverages; i++) { + if (averages[i] >= peaks[i]) { + // save new peak level, also reset the hold timer + peaks[i] = averages[i]; + peakHoldTimes[i] = peakHoldTime; + } else { + // current average does not exceed peak, so hold or decay the peak + if (peakHoldTimes[i] > 0) { + peakHoldTimes[i]--; + } else { + peaks[i] *= peakDecayRate; + } + } + } +} diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiFFT.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiFFT.h new file mode 100644 index 0000000..d2694f4 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiFFT.h @@ -0,0 +1,128 @@ +/* + * maximilian + * platform independent synthesis library using portaudio or rtaudio + * + * Created by Mick Grierson on 29/12/2009. + * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved. + * Thanks to the Goldsmiths Creative Computing Team. + * Special thanks to Arturo Castro for the PortAudio implementation. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _MAXI_FFT +#define _MAXI_FFT + +//#define _NO_VDSP //set this if you don't want to use apple's vDSP fft functions + + +#include "fft.h" +#include "stddef.h" + +class maxiFFT { + +public: + maxiFFT(){ + _fft = NULL; + buffer = magnitudes = phases = window = avgPower = NULL; + }; + ~maxiFFT(); + void setup(int fftSize, int windowSize, int hopSize); + bool process(float value); + float* magsToDB(); + float *magnitudes, *phases, *magnitudesDB; + float *avgPower; + int windowSize; + int hopSize; + int bins; + + //features + float spectralFlatness(); + float spectralCentroid(); + +private: + float *buffer, *window; + int pos; + float nextValue; + int fftSize; + fft *_fft; + bool newFFT; + +}; + +class maxiIFFT { + +public: + maxiIFFT(){ + _fft=0; + }; + ~maxiIFFT(); + void setup(int fftSize, int windowSize, int hopSize); + float process(float *magnitudes, float *phases); + +private: + float *ifftOut, *buffer, *window; + int windowSize; + int bins; + int hopSize; + int pos; + float nextValue; + int fftSize; + fft *_fft; +}; + + +class maxiFFTOctaveAnalyzer { + /*based on code by David Bollinger, http://www.davebollinger.com/ + */ +public: + + float samplingRate; // sampling rate in Hz (needed to calculate frequency spans) + int nSpectrum; // number of spectrum bins in the fft + int nAverages; // number of averaging bins here + int nAveragesPerOctave; // number of averages per octave as requested by user + float spectrumFrequencySpan; // the "width" of an fft spectrum bin in Hz + float firstOctaveFrequency; // the "top" of the first averaging bin here in Hz + float averageFrequencyIncrement; // the root-of-two multiplier between averaging bin frequencies + float * averages; // the actual averages + float * peaks; // peaks of the averages, aka "maxAverages" in other implementations + int * peakHoldTimes; // how long to hold THIS peak meter? decay if == 0 + int peakHoldTime; // how long do we hold peaks? (in fft frames) + float peakDecayRate; // how quickly the peaks decay: 0f=instantly .. 1f=not at all + int * spe2avg; // the mapping between spectrum[] indices and averages[] indices + // the fft's log equalizer() is no longer of any use (it would be nonsense to log scale + // the spectrum values into log-sized average bins) so here's a quick-and-dirty linear + // equalizer instead: + float linearEQSlope; // the rate of linear eq + float linearEQIntercept; // the base linear scaling used at the first averaging bin + // the formula is: spectrum[i] * (linearEQIntercept + i * linearEQSlope) + // so.. note that clever use of it can also provide a "gain" control of sorts + // (fe: set intercept to 2f and slope to 0f to double gain) + + void setup(float samplingRate, int nBandsInTheFFT, int nAveragesPerOctave); + + void calculate(float * fftData); + +}; + +#endif \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiGrains.cpp b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiGrains.cpp new file mode 100644 index 0000000..951f3b5 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiGrains.cpp @@ -0,0 +1,6 @@ +#include "maxiGrains.h" + + + + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiGrains.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiGrains.h new file mode 100644 index 0000000..fb3e102 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiGrains.h @@ -0,0 +1,467 @@ + + +#ifndef _MAXI_GRAINS_H +#define _MAXI_GRAINS_H +#include "maximilian.h" + +#if defined(__APPLE_CC__) +#include "accelerate/accelerate.h" +//Mac users can uncommment the line below to use Apple's accelerate framework for calculating grains. This gives ~300% speed improvement and better sound quality, but doesn't work well on all machines. +//#define MAXIGRAINFAST +#endif + +#include + +typedef unsigned long ulong; + +//window functions from http://en.wikipedia.org/wiki/Window_function#High-_and_moderate-resolution_windows + +struct hannWinFunctor { + inline double operator()(ulong windowLength, ulong windowPos) { + return 0.5 * (1.0 - cos((2.0 * PI * windowPos) / (windowLength - 1))); + } +}; + +//this window can produce clicks +struct hammingWinFunctor { + inline double operator()(ulong windowLength, ulong windowPos) { + return 0.54 - (0.46 * cos((2.0 * PI * windowPos) / (windowLength - 1))); + } +}; + + +struct cosineWinFunctor { + inline double operator()(ulong windowLength, ulong windowPos) { + return sin((PI * windowPos) / (windowLength - 1)); + } +}; + +struct rectWinFunctor { + inline double operator()(ulong windowLength, ulong windowPos) { + return 1; + } +}; + +struct triangleWinFunctor { + inline double operator()(ulong windowLength, ulong windowPos) { + return (2.0 / (windowLength-1.0)) * (((windowLength-1.0)/2.0) - fabs(windowPos - ((windowLength-1.0)/2.0))); + } +}; + +struct triangleNZWinFunctor { + //non zero end points + inline double operator()(ulong windowLength, ulong windowPos) { + return (2.0 / windowLength) * ((windowLength/2.0) - fabs(windowPos - ((windowLength-1.0)/2.0))); + } +}; + +struct blackmanHarrisWinFunctor { + inline double operator()(ulong windowLength, ulong windowPos) { + return 0.35875 - + (0.48829 * cos((2 * PI * windowPos) / (windowLength-1))) + + (0.14128 * cos((4 * PI * windowPos) / (windowLength-1))) + + (0.01168 * cos((6 * PI * windowPos) / (windowLength-1))); + } +}; + +struct blackmanNutallWinFunctor { + inline double operator()(ulong windowLength, ulong windowPos) { + return 0.3635819 - + (0.4891775 * cos((2 * PI * windowPos) / (windowLength-1))) + + (0.1365995 * cos((4 * PI * windowPos) / (windowLength-1))) + + (0.0106411 * cos((6 * PI * windowPos) / (windowLength-1))); + } +}; + +struct gaussianWinFunctor { + double gausDivisor; + gaussianWinFunctor() { + init(0.3); + } + gaussianWinFunctor(double kurtosis) { + init(kurtosis); + } + void init(double kurtosis) { + gausDivisor = (-2.0 * kurtosis * kurtosis); + } + inline double operator()(ulong windowLength, ulong windowPos) { + double phase = ((windowPos / (double) windowLength) - 0.5) * 2.0; + return exp((phase * phase) / gausDivisor); + } +}; + + +template +class maxiGrainWindowCache { +public: + unsigned int cacheSize; + + maxiGrainWindowCache() { + cacheSize = maxiSettings::sampleRate / 2.0; //allocate mem for up to 500ms grains + cache = (double**)malloc(cacheSize * sizeof(double*)); + for(int i=0; i < cacheSize; i++) { + cache[i] = NULL; + } + } + + ~maxiGrainWindowCache() { + for(int i=0; i < cacheSize; i++) { + if(NULL != cache[i]) { + free(cache[i]); + } + } + free(cache); + } + + double* getWindow(const unsigned int length) { + if (NULL == cache[length]) { + cache[length] = (double*)malloc(length * sizeof(double)); + for(int i=0; i < length; i++) { + cache[length][i] = F()(length, i); + } + } + return cache[length]; + } + +private: + double** cache; + +}; + +class maxiGrainBase { +public: + virtual double play() {} + virtual ~maxiGrainBase() {} + bool finished; +}; + +template +class maxiGrain : public maxiGrainBase { +public: + maxiSample *sample; + double pos; + double dur; + long sampleStartPos; + long sampleIdx; + long sampleDur; + long sampleEndPos; + double freq; + double speed; + double inc; + double frequency; + double* window; + short* buffer; +#if defined(__APPLE_CC__) && defined(MAXIGRAINFAST) + double* grainSamples; +#endif + /* + position between 0.0 and 1.0 + duration in seconds + */ + maxiGrain(maxiSample *sample, const double position, const double duration, const double speed, maxiGrainWindowCache *windowCache) :sample(sample), pos(position), dur(duration), speed(speed) + { + buffer = sample->temp; + sampleStartPos = sample->length * pos; + sampleDur = dur * (double)sample->mySampleRate; + sampleDurMinusOne = sampleDur - 1; + sampleIdx = 0; + finished = 0; + freq = 1.0 / dur; + sampleEndPos = min(sample->length, sampleStartPos + sampleDur); + frequency = freq * speed; + if (frequency > 0) { + pos = sampleStartPos; + }else{ + pos = sampleEndPos; + } + if (frequency != 0) { + inc = sampleDur/(maxiSettings::sampleRate/frequency); + }else + inc = 0; + window = windowCache->getWindow(sampleDur); + +#if defined(__APPLE_CC__) && defined(MAXIGRAINFAST) + //premake the grain using fast vector functions, and quadratic interpolation + double *sourceData = (double*)malloc(sampleDur * sizeof(double)); + short* buffer = (short *)sample->temp; + //convert sample to double data + vDSP_vflt16D(buffer + sampleStartPos, 1, sourceData, 1, min(sampleDur, sample->length - sampleStartPos)); + //todo: wraping code + + grainSamples = (double*)malloc(sampleDur * sizeof(double)); + //make list of interpolation indexes + double* interpIndexes = (double*)malloc(sampleDur * sizeof(double)); + double interpPos = sampleStartPos; + for(int i=0; i < sampleDur; i++) { + interpIndexes[i] = interpPos - sampleStartPos; + interpPos += fabs(inc); + } + vDSP_vqintD(sourceData, interpIndexes, 1, grainSamples, 1, sampleDur, sampleDur); + if (frequency < 0) { + vDSP_vrvrsD(grainSamples,1, sampleDur); + } + static double divFactor = 32767.0; + vDSP_vsdivD(grainSamples, 1, &divFactor, grainSamples, 1, sampleDur); + vDSP_vmulD(grainSamples, 1, window, 1, grainSamples, 1, sampleDur); + delete sourceData, interpIndexes; +#endif + } + + ~maxiGrain() { +#if defined(__APPLE_CC__) && defined(MAXIGRAINFAST) + delete[] grainSamples; +#endif + } + + inline double play() { + double output = 0.0; + if (!finished) { +#if defined(__APPLE_CC__) && defined(MAXIGRAINFAST) + output = grainSamples[sampleIdx]; +#else + envValue = window[sampleIdx]; + double remainder; + pos += inc; + if (pos >= sample->length) + pos -= sample->length; + else if (pos < 0) + pos += sample->length; + + long posl = floor(pos); + remainder = pos - posl; + long a = posl; + long b = posl+1; + if (b >= sample->length) { + b = 0; + } + output = (double) ((1-remainder) * buffer[a] + + remainder * buffer[b])/32767.0;//linear interpolation + output *= envValue; +#endif + } + sampleIdx++; + if (sampleIdx == sampleDur) finished = true; + return output; + } + +protected: + maxiGrain(); + double envValue; + ulong sampleDurMinusOne; +}; + + +typedef list grainList; + +class maxiGrainPlayer { +public: + grainList grains; + maxiSample *sample; + + maxiGrainPlayer(maxiSample *sample) : sample(sample) { + } + + void addGrain(maxiGrainBase *g) { + grains.push_back(g); + } + + inline double play() { + double total = 0.0; + grainList::iterator it = grains.begin(); + while(it != grains.end()) { + total += (*it)->play(); + if ((*it)->finished) { + delete(*it); + it = grains.erase(it); + }else{ + it++; + } + } + return total; + } +}; + +template +class maxiTimestretch { +protected: + double position; +public: + maxiSample *sample; + maxiGrainPlayer *grainPlayer; + maxiGrainWindowCache windowCache; + double randomOffset; + double looper; + + + + maxiTimestretch(maxiSample *sample) : sample(sample) { + position=0; + looper = 0; + grainPlayer = new maxiGrainPlayer(sample); + randomOffset=0; + } + + ~maxiTimestretch() { + delete grainPlayer; + } + + double getNormalisedPosition() { + return position / (double) sample->length; + } + + double getPosition() { + return position; + } + + void setPosition(double pos) { + position = pos * sample->length; + position = maxiMap::clamp(position, 0, sample->length-1); + } + + + //play at a speed + inline double play(double speed, double grainLength, int overlaps, double posMod=0.0) { + position = position + speed; + looper++; + if (position > sample->length) position-= sample->length; + if (position < 0) position += sample->length; + double cycleLength = grainLength * maxiSettings::sampleRate / overlaps; + if (looper > cycleLength + randomOffset) { + looper -= (cycleLength + randomOffset); + speed = (speed > 0 ? 1 : -1); + maxiGrain *g = new maxiGrain(sample, max(min(1.0,(position / sample->length) + posMod),0.0), grainLength, speed, &windowCache); + grainPlayer->addGrain(g); + randomOffset = rand() % 10; + } + return grainPlayer->play(); + } + + + //provide your own position iteration + inline double play2(double pos, double grainLength, int overlaps) { + looper++; + pos *= sample->length; + if (0 == floor(fmod(looper, grainLength * maxiSettings::sampleRate / overlaps))) { + maxiGrain *g = new maxiGrain(sample, max(min(1.0,(pos / sample->length)),0.0), grainLength, 1, &windowCache); + grainPlayer->addGrain(g); + } + return grainPlayer->play(); + } +}; + +//in maxiTimeStretch, the speed is either 1 or -1, and the actual speed value only affects the grain position +//in maxiPitchShift, speed is uncoupled from position and allowed to set it's value incrementally, resulting in pitchshift. +//with both high speed values and negative speed values there are some terrific artefacts! + +template +class maxiPitchShift { +public: + double position; + long cycles; + maxiSample *sample; + maxiGrainPlayer *grainPlayer; + maxiGrainWindowCache windowCache; + double randomOffset; + + maxiPitchShift(maxiSample *sample) : sample(sample) { + position=0; + cycles=0; + grainPlayer = new maxiGrainPlayer(sample); + randomOffset=0; + } + + ~maxiPitchShift() { + delete grainPlayer; + } + + double play(double speed, double grainLength, int overlaps, double posMod=0.0) { + position = position + 1; + cycles++; + if (position > sample->length) position=0; + if (position < 0) position = sample->length; + double cycleLength = grainLength * maxiSettings::sampleRate / overlaps; + double cycleMod = fmod(cycles, cycleLength + randomOffset); + if (0 == floor(cycleMod)) { + // cout << cycleMod << endl; + //speed = (speed > 0 ? 1 : -1); + speed = speed - ((cycleMod / cycleLength) * 0.1); + maxiGrain *g = new maxiGrain(sample, max(min(1.0,(position / sample->length) + posMod),0.0), grainLength, speed, &windowCache); + grainPlayer->addGrain(g); + // cout << grainPlayer->grains.size() << endl; + // randomOffset = rand() % 10; + // randomOffset = rand() % 10; + } + return grainPlayer->play(); + } + +}; + +//and here's maxiPitchStretch. Args to the play function are basically speed for 'pitch' and rate for playback rate. +//the rest is the same. + +template +class maxiPitchStretch { +public: + double position; + maxiSample *sample; + maxiGrainPlayer *grainPlayer; + maxiGrainWindowCache windowCache; + double randomOffset; + long loopStart, loopEnd, loopLength; + double looper; + + maxiPitchStretch(maxiSample *sample) : sample(sample) { + grainPlayer = new maxiGrainPlayer(sample); + randomOffset=0; + loopStart = 0.0; + loopEnd = sample->length; + loopLength =sample->length; + position=0; + looper = 0; + } + + double getNormalisedPosition() { + return position / (double) sample->length; + } + + double getPosition() { + return position; + } + + void setPosition(double pos) { + position = pos * sample->length; + position = maxiMap::clamp(position, 0, sample->length-1); + } + + void setLoopStart(double val) { + loopStart = val * sample->length; + loopLength = loopEnd - loopStart; + } + + void setLoopEnd(double val) { + loopEnd = val * sample->length; + loopLength = loopEnd - loopStart; + } + + ~maxiPitchStretch() { + delete grainPlayer; + } + + inline double play(double speed, double rate, double grainLength, int overlaps, double posMod=0.0) { + position = position + (1 * rate); + looper++; + if (position >= loopEnd) position-= loopLength; + if (position < loopStart) position += loopLength; + double cycleLength = grainLength * maxiSettings::sampleRate / overlaps; + if (looper > cycleLength + randomOffset) { + looper -= (cycleLength + randomOffset); + maxiGrain *g = new maxiGrain(sample, max(min(1.0,(position / sample->length) + posMod),0.0), grainLength, speed, &windowCache); + grainPlayer->addGrain(g); + randomOffset = rand() % 10; + } + return grainPlayer->play(); + } + +}; + +#endif \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiMFCC.cpp b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiMFCC.cpp new file mode 100644 index 0000000..f180fb5 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiMFCC.cpp @@ -0,0 +1,79 @@ +/* + * maxiMFCC.cpp + * mfccs + * + * Created by Chris on 08/03/2011. + * Copyright 2011 Goldsmiths Creative Computing. All rights reserved. + * + */ + +#include "maxiMFCC.h" + + +#ifdef __APPLE_CC__ +template <> +void maxiMFCCAnalyser::dct(double *mfccs) { + vDSP_mmulD(melBands, 1, dctMatrix, 1, mfccs, 1, 1, numCoeffs, numFilters); + double n = (double) numCoeffs; + vDSP_vsdivD(mfccs, 1, &n, mfccs, 1, numCoeffs); +} + +template <> +void maxiMFCCAnalyser::dct(float *mfccs) { + vDSP_mmul(melBands, 1, dctMatrix, 1, mfccs, 1, 1, numCoeffs, numFilters); + float n = (float) numCoeffs; + vDSP_vsdiv(mfccs, 1, &n, mfccs, 1, numCoeffs); +} +#endif + +template <> +void maxiMFCCAnalyser::melFilterAndLogSquare(float* powerSpectrum) { +#ifdef __APPLE_CC__ + //conv to double + vDSP_vspdp(powerSpectrum, 1, doubleSpec, 1, numBins); + // vDSP_mmulD(doubleSpec, 1, melFilters, 1, melBands, 1, 1, 42, 512); + vDSP_mmulD(doubleSpec, 1, melFilters, 1, melBands, 1, 1, numFilters, numBins); +#endif + melFilterAndLogSq_Part2(powerSpectrum); +} + + +template <> +void maxiMFCCAnalyser::melFilterAndLogSquare(float* powerSpectrum) { +#ifdef __APPLE_CC__ + vDSP_mmul(powerSpectrum, 1, melFilters, 1, melBands, 1, 1, numFilters, numBins); +#endif + melFilterAndLogSq_Part2(powerSpectrum); +} + +template +void maxiMFCCAnalyser::melFilterAndLogSq_Part2(float *powerSpectrum) { +#ifdef __APPLE_CC__ +#else + for (unsigned int filter = 0;filter < numFilters;filter++) { + melBands[filter] = 0.0; + for (unsigned int bin=0;bin 0.000001 ? log(melBands[filter] * melBands[filter]) : 0.0; + } +} + + + + + + + + + + + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiMFCC.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiMFCC.h new file mode 100644 index 0000000..19dd72e --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maxiMFCC.h @@ -0,0 +1,205 @@ +/* + * maxiMFCC.h + * mfccs + * + * Created by Chris on 08/03/2011. + * Copyright 2011 Goldsmiths Creative Computing. All rights reserved. + * + + Based on Matthew Yee-King's MFCCMYK java class + */ + +#pragma once +#pragma pack(16) + +#include "maxiFFT.h" +#include +#include +#include +#ifdef __APPLE_CC__ +#include +#endif + +using namespace std; + + +// implements this formula: +// mel = 2595 log10(Hz/700 + 1) +inline double hzToMel(double hz){ + return 2595.0 * (log10(hz/700.0 + 1.0)); +} + +// implements this formula +// Hz = 700 (10^(mel/2595) - 1) +inline double melToHz(double mel){ + return 700.0 * (pow(10, mel/2595.0) - 1.0); +} + +template +class maxiMFCCAnalyser { +public: + T *melBands; + maxiMFCCAnalyser():melFilters(NULL),dctMatrix(NULL), melBands(NULL){}; + ~maxiMFCCAnalyser() { + if (melFilters) { + delete[] melFilters; + delete[] melBands; + delete[] dctMatrix; +#ifdef __APPLE_CC__ + delete doubleSpec; +#endif + } + } + + void setup(unsigned int numBins, unsigned int numFilters, unsigned int numCoeffs, double minFreq, double maxFreq, unsigned int sampleRate) + { + this->numFilters = numFilters; + this->numCoeffs = numCoeffs; + this->minFreq = minFreq; + this->maxFreq = maxFreq; + this->sampleRate = sampleRate; + this->numBins = numBins; + melFilters = NULL; + melBands = (T*) malloc(sizeof(T) * numFilters); +#ifdef __APPLE_CC__ + doubleSpec = (T*)malloc(sizeof(T) * numBins); +#endif + //create new matrix + dctMatrix = (T*)malloc(sizeof(T) * numCoeffs * numFilters); + calcMelFilterBank(sampleRate, numBins); + createDCTCoeffs(); + } + void mfcc(float* powerSpectrum, T *mfccs) { + melFilterAndLogSquare(powerSpectrum); + dct(mfccs); + } + +private: + unsigned int numFilters, numCoeffs; + double minFreq, maxFreq; + unsigned int sampleRate; + T *melFilters; + unsigned int numBins; + T *dctMatrix; +#ifdef __APPLE_CC__ + T *doubleSpec; +#endif + +#ifdef __APPLE_CC__ + void dct(T *mfccs); //define later +#else + void dct(T *mfccs) { + for(int i=0; i < numCoeffs; i++) { + mfccs[i] = 0.0; + } + for(int i=0; i < numCoeffs; i++ ) { + for(int j=0; j < numFilters; j++) { + int idx = i + (j * numCoeffs); + mfccs[i] += (dctMatrix[idx] * melBands[j]); + } + } + for(int i=0; i < numCoeffs; i++) { + mfccs[i] /= numCoeffs; + } + } +#endif + + void melFilterAndLogSquare(float* powerSpectrum); + void melFilterAndLogSq_Part2(float *powerSpectrum); + + + void calcMelFilterBank(double sampleRate, int numBins) { + + double mel, dMel, maxMel, minMel, nyquist, binFreq, start, end, thisF, nextF, prevF; + int numValidBins; + + // ignore bins over nyquist + numValidBins = numBins; + + nyquist = sampleRate/2; + if (maxFreq > nyquist) { + maxFreq = nyquist; + } + + maxMel = hzToMel(maxFreq); + minMel = hzToMel(minFreq); + + dMel = (maxMel - minMel) / (numFilters + 2 - 1); + + T *filtPos = (T*) malloc(sizeof(double) * (numFilters + 2)); + + // first generate an array of start and end freqs for each triangle + mel = minMel; + for (int i=0;i nextF || binFreq < prevF) { + // outside this filter + melFilters[idx] = 0; + //cout << "MFCCMYK: filter at " < maxiMFCC; +//typedef maxiMFCCAnalyser maxiFloatMFCC; diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maximilian.cpp b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maximilian.cpp new file mode 100644 index 0000000..18b2af2 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maximilian.cpp @@ -0,0 +1,1342 @@ + +/* + * maximilian.cpp + * platform independent synthesis library using portaudio or rtaudio + * + * Created by Mick Grierson on 29/12/2009. + * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved. + * Thanks to the Goldsmiths Creative Computing Team. + * Special thanks to Arturo Castro for the PortAudio implementation. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "maximilian.h" +#include "math.h" + +/* Maximilian can be configured to load ogg vorbis format files using the +* loadOgg() method. +* Uncomment the following to include Sean Barrett's Ogg Vorbis decoder. +* If you're on windows, make sure to add the files std_vorbis.c and std_vorbis.h to your project*/ + +//#define VORBIS + +#ifdef VORBIS +extern "C" { + #include "stb_vorbis.h" +} +#endif + +//This used to be important for dealing with multichannel playback +float chandiv= 1; + +int maxiSettings::sampleRate = 44100; +int maxiSettings::channels = 2; +int maxiSettings::bufferSize = 1024; + + +//this is a 514-point sinewave table that has many uses. +double sineBuffer[514]={0,0.012268,0.024536,0.036804,0.049042,0.06131,0.073547,0.085785,0.097992,0.1102,0.12241,0.13455,0.1467,0.15884,0.17093,0.18301,0.19507,0.20709,0.21909,0.23105,0.24295,0.25485,0.26669,0.2785,0.29025,0.30197,0.31366,0.32529,0.33685,0.34839,0.35986,0.37128,0.38266,0.39395,0.40521,0.41641,0.42752,0.4386,0.44958,0.46051,0.47137,0.48215,0.49286,0.50351,0.51407,0.52457,0.53497,0.54529,0.55554,0.5657,0.57578,0.58575,0.59567,0.60547,0.6152,0.62482,0.63437,0.6438,0.65314,0.66238,0.67151,0.68057,0.68951,0.69833,0.70706,0.7157,0.72421,0.7326,0.74091,0.74908,0.75717,0.76514,0.77298,0.7807,0.7883,0.79581,0.80316,0.81042,0.81754,0.82455,0.83142,0.8382,0.84482,0.85132,0.8577,0.86392,0.87006,0.87604,0.88187,0.8876,0.89319,0.89862,0.90396,0.90912,0.91415,0.91907,0.92383,0.92847,0.93295,0.93729,0.9415,0.94556,0.94949,0.95325,0.95691,0.96039,0.96375,0.96692,0.97,0.9729,0.97565,0.97827,0.98074,0.98306,0.98523,0.98724,0.98914,0.99084,0.99243,0.99387,0.99515,0.99628,0.99725,0.99808,0.99875,0.99927,0.99966,0.99988,0.99997,0.99988,0.99966,0.99927,0.99875,0.99808,0.99725,0.99628,0.99515,0.99387,0.99243,0.99084,0.98914,0.98724,0.98523,0.98306,0.98074,0.97827,0.97565,0.9729,0.97,0.96692,0.96375,0.96039,0.95691,0.95325,0.94949,0.94556,0.9415,0.93729,0.93295,0.92847,0.92383,0.91907,0.91415,0.90912,0.90396,0.89862,0.89319,0.8876,0.88187,0.87604,0.87006,0.86392,0.8577,0.85132,0.84482,0.8382,0.83142,0.82455,0.81754,0.81042,0.80316,0.79581,0.7883,0.7807,0.77298,0.76514,0.75717,0.74908,0.74091,0.7326,0.72421,0.7157,0.70706,0.69833,0.68951,0.68057,0.67151,0.66238,0.65314,0.6438,0.63437,0.62482,0.6152,0.60547,0.59567,0.58575,0.57578,0.5657,0.55554,0.54529,0.53497,0.52457,0.51407,0.50351,0.49286,0.48215,0.47137,0.46051,0.44958,0.4386,0.42752,0.41641,0.40521,0.39395,0.38266,0.37128,0.35986,0.34839,0.33685,0.32529,0.31366,0.30197,0.29025,0.2785,0.26669,0.25485,0.24295,0.23105,0.21909,0.20709,0.19507,0.18301,0.17093,0.15884,0.1467,0.13455,0.12241,0.1102,0.097992,0.085785,0.073547,0.06131,0.049042,0.036804,0.024536,0.012268,0,-0.012268,-0.024536,-0.036804,-0.049042,-0.06131,-0.073547,-0.085785,-0.097992,-0.1102,-0.12241,-0.13455,-0.1467,-0.15884,-0.17093,-0.18301,-0.19507,-0.20709,-0.21909,-0.23105,-0.24295,-0.25485,-0.26669,-0.2785,-0.29025,-0.30197,-0.31366,-0.32529,-0.33685,-0.34839,-0.35986,-0.37128,-0.38266,-0.39395,-0.40521,-0.41641,-0.42752,-0.4386,-0.44958,-0.46051,-0.47137,-0.48215,-0.49286,-0.50351,-0.51407,-0.52457,-0.53497,-0.54529,-0.55554,-0.5657,-0.57578,-0.58575,-0.59567,-0.60547,-0.6152,-0.62482,-0.63437,-0.6438,-0.65314,-0.66238,-0.67151,-0.68057,-0.68951,-0.69833,-0.70706,-0.7157,-0.72421,-0.7326,-0.74091,-0.74908,-0.75717,-0.76514,-0.77298,-0.7807,-0.7883,-0.79581,-0.80316,-0.81042,-0.81754,-0.82455,-0.83142,-0.8382,-0.84482,-0.85132,-0.8577,-0.86392,-0.87006,-0.87604,-0.88187,-0.8876,-0.89319,-0.89862,-0.90396,-0.90912,-0.91415,-0.91907,-0.92383,-0.92847,-0.93295,-0.93729,-0.9415,-0.94556,-0.94949,-0.95325,-0.95691,-0.96039,-0.96375,-0.96692,-0.97,-0.9729,-0.97565,-0.97827,-0.98074,-0.98306,-0.98523,-0.98724,-0.98914,-0.99084,-0.99243,-0.99387,-0.99515,-0.99628,-0.99725,-0.99808,-0.99875,-0.99927,-0.99966,-0.99988,-0.99997,-0.99988,-0.99966,-0.99927,-0.99875,-0.99808,-0.99725,-0.99628,-0.99515,-0.99387,-0.99243,-0.99084,-0.98914,-0.98724,-0.98523,-0.98306,-0.98074,-0.97827,-0.97565,-0.9729,-0.97,-0.96692,-0.96375,-0.96039,-0.95691,-0.95325,-0.94949,-0.94556,-0.9415,-0.93729,-0.93295,-0.92847,-0.92383,-0.91907,-0.91415,-0.90912,-0.90396,-0.89862,-0.89319,-0.8876,-0.88187,-0.87604,-0.87006,-0.86392,-0.8577,-0.85132,-0.84482,-0.8382,-0.83142,-0.82455,-0.81754,-0.81042,-0.80316,-0.79581,-0.7883,-0.7807,-0.77298,-0.76514,-0.75717,-0.74908,-0.74091,-0.7326,-0.72421,-0.7157,-0.70706,-0.69833,-0.68951,-0.68057,-0.67151,-0.66238,-0.65314,-0.6438,-0.63437,-0.62482,-0.6152,-0.60547,-0.59567,-0.58575,-0.57578,-0.5657,-0.55554,-0.54529,-0.53497,-0.52457,-0.51407,-0.50351,-0.49286,-0.48215,-0.47137,-0.46051,-0.44958,-0.4386,-0.42752,-0.41641,-0.40521,-0.39395,-0.38266,-0.37128,-0.35986,-0.34839,-0.33685,-0.32529,-0.31366,-0.30197,-0.29025,-0.2785,-0.26669,-0.25485,-0.24295,-0.23105,-0.21909,-0.20709,-0.19507,-0.18301,-0.17093,-0.15884,-0.1467,-0.13455,-0.12241,-0.1102,-0.097992,-0.085785,-0.073547,-0.06131,-0.049042,-0.036804,-0.024536,-0.012268,0,0.012268 +}; + +// This is a transition table that helps with bandlimited oscs. +double transition[1001]={-0.500003,-0.500003,-0.500023,-0.500063,-0.500121,-0.500179,-0.500259, + -0.50036,-0.500476,-0.500591,-0.500732,-0.500893,-0.501066,-0.501239, + -0.50144,-0.501661,-0.501891,-0.502123,-0.502382,-0.502662,-0.502949, + -0.50324,-0.503555,-0.503895,-0.504238,-0.504587,-0.504958,-0.505356, + -0.505754,-0.506162,-0.506589,-0.507042,-0.507495,-0.50796,-0.508444, + -0.508951,-0.509458,-0.509979,-0.510518,-0.511079,-0.511638,-0.512213, + -0.512808,-0.51342,-0.51403,-0.514659,-0.515307,-0.51597,-0.51663,-0.517312, + -0.518012,-0.518724,-0.519433,-0.520166,-0.520916,-0.521675,-0.522432, + -0.523214,-0.524013,-0.524819,-0.525624,-0.526451,-0.527298,-0.528147, + -0.528999,-0.52987,-0.530762,-0.531654,-0.532551,-0.533464,-0.534399, + -0.535332,-0.536271,-0.537226,-0.538202,-0.539172,-0.540152,-0.541148, + -0.542161,-0.543168,-0.544187,-0.54522,-0.546269,-0.54731,-0.548365, + -0.549434,-0.550516,-0.55159,-0.552679,-0.553781,-0.554893,-0.555997, + -0.557118,-0.558252,-0.559391,-0.560524,-0.561674,-0.562836,-0.564001, + -0.565161,-0.566336,-0.567524,-0.568712,-0.569896,-0.571095,-0.572306, + -0.573514,-0.574721,-0.575939,-0.577171,-0.578396,-0.579622,-0.580858, + -0.582108,-0.583348,-0.58459,-0.585842,-0.587106,-0.588358,-0.589614, + -0.590879,-0.592154,-0.593415,-0.594682,-0.595957,-0.59724,-0.598507, + -0.599782,-0.601064,-0.602351,-0.603623,-0.604902,-0.606189,-0.607476, + -0.60875,-0.610032,-0.611319,-0.612605,-0.613877,-0.615157,-0.616443, + -0.617723,-0.618992,-0.620268,-0.621548,-0.62282,-0.624083,-0.62535, + -0.626622,-0.627882,-0.629135,-0.630391,-0.631652,-0.632898,-0.634138, + -0.63538,-0.636626,-0.637854,-0.639078,-0.640304,-0.641531,-0.642739, + -0.643943,-0.645149,-0.646355,-0.647538,-0.64872,-0.649903,-0.651084, + -0.652241,-0.653397,-0.654553,-0.655705,-0.656834,-0.657961,-0.659087, + -0.660206,-0.661304,-0.662399,-0.663492,-0.664575,-0.665639,-0.666699, + -0.667756,-0.6688,-0.669827,-0.670849,-0.671866,-0.672868,-0.673854, + -0.674835,-0.675811,-0.676767,-0.677709,-0.678646,-0.679576,-0.680484, + -0.68138,-0.682269,-0.683151,-0.684008,-0.684854,-0.685693,-0.686524, + -0.687327,-0.688119,-0.688905,-0.689682,-0.690428,-0.691164,-0.691893, + -0.692613,-0.6933,-0.693978,-0.694647,-0.695305,-0.695932,-0.696549, + -0.697156,-0.697748,-0.698313,-0.698865,-0.699407,-0.699932,-0.700431, + -0.700917,-0.701391,-0.701845,-0.702276,-0.702693,-0.703097,-0.703478, + -0.703837,-0.704183,-0.704514,-0.704819,-0.705105,-0.705378,-0.705633, + -0.70586,-0.706069,-0.706265,-0.706444,-0.706591,-0.706721,-0.706837, + -0.706938,-0.707003,-0.707051,-0.707086,-0.707106,-0.707086,-0.707051, + -0.707001,-0.706935,-0.706832,-0.706711,-0.706576,-0.706421,-0.706233, + -0.706025,-0.705802,-0.705557,-0.705282,-0.704984,-0.704671,-0.704334, + -0.703969,-0.703582,-0.703176,-0.702746,-0.702288,-0.70181,-0.701312, + -0.700785,-0.700234,-0.699664,-0.69907,-0.698447,-0.6978,-0.697135, + -0.696446,-0.695725,-0.694981,-0.694219,-0.693435,-0.692613,-0.691771, + -0.690911,-0.69003,-0.689108,-0.688166,-0.687206,-0.686227,-0.685204, + -0.684162,-0.683101,-0.682019,-0.680898,-0.679755,-0.678592,-0.677407, + -0.676187,-0.674941,-0.673676,-0.672386,-0.671066,-0.669718,-0.66835, + -0.666955,-0.665532,-0.664083,-0.662611,-0.661112,-0.659585,-0.658035, + -0.656459,-0.654854,-0.653223,-0.651572,-0.649892,-0.648181,-0.646446, + -0.644691,-0.642909,-0.641093,-0.639253,-0.637393,-0.63551,-0.633588, + -0.631644,-0.62968,-0.627695,-0.625668,-0.623621,-0.621553,-0.619464, + -0.617334,-0.615183,-0.613011,-0.610817,-0.608587,-0.606333,-0.604058, + -0.60176,-0.599429,-0.597072,-0.594695,-0.592293,-0.589862,-0.587404, + -0.584925,-0.58242,-0.579888,-0.577331,-0.574751,-0.572145,-0.569512, + -0.566858,-0.564178,-0.561471,-0.558739,-0.555988,-0.553209,-0.550402, + -0.547572,-0.544723,-0.54185,-0.538944,-0.536018,-0.533072,-0.530105, + -0.527103,-0.524081,-0.52104,-0.51798,-0.514883,-0.511767,-0.508633, + -0.505479,-0.502291,-0.499083,-0.495857,-0.492611,-0.489335,-0.486037, + -0.48272,-0.479384,-0.476021,-0.472634,-0.46923,-0.465805,-0.462356, + -0.458884,-0.455394,-0.451882,-0.448348,-0.444795,-0.44122,-0.437624, + -0.434008,-0.430374,-0.426718,-0.423041,-0.419344,-0.415631,-0.411897, + -0.40814,-0.404365,-0.400575,-0.396766,-0.392933,-0.389082,-0.385217, + -0.381336,-0.377428,-0.373505,-0.369568,-0.365616,-0.361638,-0.357645, + -0.353638,-0.349617,-0.345572,-0.341512,-0.337438,-0.33335,-0.329242, + -0.325118,-0.32098,-0.316829,-0.31266,-0.308474,-0.304276,-0.300063, + -0.295836,-0.291593,-0.287337,-0.283067,-0.278783,-0.274487,-0.270176, + -0.265852,-0.261515,-0.257168,-0.252806,-0.248431,-0.244045,-0.239649, + -0.23524,-0.230817,-0.226385,-0.221943,-0.21749,-0.213024,-0.208548, + -0.204064,-0.199571,-0.195064,-0.190549,-0.186026,-0.181495,-0.176952, + -0.1724,-0.167842,-0.163277,-0.1587,-0.154117,-0.149527,-0.14493,-0.140325, + -0.135712,-0.131094,-0.12647,-0.121839,-0.117201,-0.112559,-0.10791, + -0.103257,-0.0985979,-0.0939343,-0.0892662,-0.0845935,-0.079917,-0.0752362, + -0.0705516,-0.0658635,-0.0611729,-0.0564786,-0.0517814,-0.0470818,-0.0423802, + -0.0376765,-0.0329703,-0.0282629,-0.0235542,-0.0188445,-0.0141335,-0.00942183, + -0.00470983,2.41979e-06,0.00471481,0.00942681,0.0141384,0.0188494,0.023559, + 0.028268,0.0329754,0.0376813,0.0423851,0.0470868,0.0517863,0.0564836, + 0.0611777,0.0658683,0.0705566,0.0752412,0.0799218,0.0845982,0.0892712, + 0.0939393,0.0986028,0.103262,0.107915,0.112563,0.117206,0.121844,0.126475, + 0.131099,0.135717,0.14033,0.144935,0.149531,0.154122,0.158705,0.163281, + 0.167847,0.172405,0.176956,0.1815,0.18603,0.190553,0.195069,0.199576, + 0.204068,0.208552,0.213028,0.217495,0.221947,0.226389,0.230822,0.235245, + 0.239653,0.244049,0.248436,0.252811,0.257173,0.26152,0.265857,0.270181, + 0.274491,0.278788,0.283071,0.287341,0.291597,0.29584,0.300068,0.30428, + 0.308478,0.312664,0.316833,0.320984,0.325122,0.329246,0.333354,0.337442, + 0.341516,0.345576,0.34962,0.353642,0.357649,0.361642,0.36562,0.369572, + 0.373509,0.377432,0.38134,0.385221,0.389086,0.392936,0.39677,0.400579, + 0.404369,0.408143,0.4119,0.415634,0.419347,0.423044,0.426721,0.430377, + 0.434011,0.437627,0.441223,0.444798,0.448351,0.451885,0.455397,0.458887, + 0.462359,0.465807,0.469232,0.472637,0.476024,0.479386,0.482723,0.486039, + 0.489338,0.492613,0.49586,0.499086,0.502294,0.505481,0.508635,0.511769, + 0.514885,0.517982,0.521042,0.524083,0.527105,0.530107,0.533074,0.53602, + 0.538946,0.541851,0.544725,0.547574,0.550404,0.553211,0.555989,0.55874, + 0.561472,0.564179,0.566859,0.569514,0.572146,0.574753,0.577332,0.579889, + 0.582421,0.584926,0.587405,0.589863,0.592294,0.594696,0.597073,0.59943, + 0.60176,0.604059,0.606333,0.608588,0.610818,0.613012,0.615183,0.617335, + 0.619464,0.621553,0.623621,0.625669,0.627696,0.629681,0.631645,0.633588, + 0.63551,0.637393,0.639253,0.641093,0.642909,0.644691,0.646446,0.648181, + 0.649892,0.651572,0.653223,0.654854,0.656459,0.658035,0.659585,0.661112, + 0.662611,0.664083,0.665532,0.666955,0.66835,0.669718,0.671066,0.672386, + 0.673676,0.674941,0.676187,0.677407,0.678592,0.679755,0.680898,0.682019, + 0.683101,0.684162,0.685204,0.686227,0.687206,0.688166,0.689108,0.69003, + 0.690911,0.691771,0.692613,0.693435,0.694219,0.694981,0.695725,0.696447, + 0.697135,0.6978,0.698447,0.69907,0.699664,0.700234,0.700786,0.701312, + 0.70181,0.702288,0.702746,0.703177,0.703582,0.703969,0.704334,0.704671, + 0.704984,0.705282,0.705557,0.705802,0.706025,0.706233,0.706422,0.706576, + 0.706712,0.706832,0.706936,0.707002,0.707051,0.707086,0.707106,0.707086, + 0.707051,0.707003,0.706939,0.706838,0.706721,0.706592,0.706445,0.706265, + 0.70607,0.705861,0.705634,0.705378,0.705105,0.70482,0.704515,0.704184, + 0.703837,0.703478,0.703097,0.702694,0.702276,0.701846,0.701392,0.700917, + 0.700432,0.699932,0.699408,0.698866,0.698314,0.697749,0.697156,0.696549, + 0.695933,0.695305,0.694648,0.693979,0.693301,0.692613,0.691894,0.691165, + 0.690428,0.689683,0.688905,0.68812,0.687327,0.686525,0.685693,0.684854, + 0.684009,0.683152,0.68227,0.68138,0.680485,0.679577,0.678647,0.67771, + 0.676768,0.675811,0.674836,0.673855,0.672869,0.671867,0.670849,0.669827, + 0.668801,0.667757,0.6667,0.66564,0.664576,0.663493,0.6624,0.661305, + 0.660207,0.659088,0.657962,0.656834,0.655705,0.654553,0.653398,0.652241, + 0.651085,0.649903,0.648721,0.647539,0.646356,0.645149,0.643944,0.642739, + 0.641532,0.640304,0.639079,0.637855,0.636626,0.635381,0.634139,0.632899, + 0.631652,0.630392,0.629136,0.627883,0.626622,0.62535,0.624083,0.62282, + 0.621548,0.620268,0.618993,0.617724,0.616443,0.615158,0.613878,0.612605, + 0.61132,0.610032,0.608751,0.607477,0.606189,0.604903,0.603623,0.602351, + 0.601065,0.599782,0.598508,0.59724,0.595957,0.594682,0.593415,0.592154, + 0.59088,0.589615,0.588359,0.587106,0.585843,0.584591,0.583349,0.582108, + 0.580859,0.579623,0.578397,0.577172,0.575939,0.574721,0.573515,0.572307, + 0.571095,0.569897,0.568713,0.567525,0.566337,0.565161,0.564002,0.562837, + 0.561674,0.560525,0.559392,0.558252,0.557119,0.555998,0.554893,0.553782, + 0.552679,0.55159,0.550516,0.549434,0.548365,0.54731,0.546269,0.54522, + 0.544187,0.543168,0.542161,0.541148,0.540153,0.539173,0.538202,0.537226, + 0.536271,0.535332,0.5344,0.533464,0.532551,0.531654,0.530762,0.52987, + 0.528999,0.528147,0.527298,0.526451,0.525624,0.524819,0.524014,0.523214, + 0.522432,0.521675,0.520916,0.520166,0.519433,0.518724,0.518012,0.517312, + 0.51663,0.51597,0.515307,0.51466,0.51403,0.51342,0.512808,0.512213, + 0.511638,0.511079,0.510518,0.509979,0.509458,0.508951,0.508444,0.50796, + 0.507495,0.507042,0.506589,0.506162,0.505754,0.505356,0.504958,0.504587, + 0.504237,0.503895,0.503555,0.50324,0.502949,0.502662,0.502382,0.502123, + 0.501891,0.501661,0.50144,0.501239,0.501066,0.500893,0.500732,0.500591, + 0.500476,0.50036,0.500259,0.500179,0.500121,0.500063,0.500023,0.500003,0.500003}; + +//This is a lookup table for converting midi to frequency +double mtofarray[129]={0, 8.661957, 9.177024, 9.722718, 10.3, 10.913383, 11.562325, 12.25, 12.978271, 13.75, 14.567617, 15.433853, 16.351599, 17.323914, 18.354048, 19.445436, 20.601723, 21.826765, 23.124651, 24.5, 25.956543, 27.5, 29.135235, 30.867706, 32.703197, 34.647827, 36.708096, 38.890873, 41.203445, 43.65353, 46.249302, 49., 51.913086, 55., 58.27047, 61.735413, 65.406395, 69.295654, 73.416191, 77.781746, 82.406891, 87.30706, 92.498604, 97.998856, 103.826172, 110., 116.540939, 123.470825, 130.81279, 138.591309, 146.832382, 155.563492, 164.813782, 174.61412, 184.997208, 195.997711, 207.652344, 220., 233.081879, 246.94165, 261.62558, 277.182617,293.664764, 311.126984, 329.627563, 349.228241, 369.994415, 391.995422, 415.304688, 440., 466.163757, 493.883301, 523.25116, 554.365234, 587.329529, 622.253967, 659.255127, 698.456482, 739.988831, 783.990845, 830.609375, 880., 932.327515, 987.766602, 1046.502319, 1108.730469, 1174.659058, 1244.507935, 1318.510254, 1396.912964, 1479.977661, 1567.981689, 1661.21875, 1760., 1864.655029, 1975.533203, 2093.004639, 2217.460938, 2349.318115, 2489.015869, 2637.020508, 2793.825928, 2959.955322, 3135.963379, 3322.4375, 3520., 3729.31, 3951.066406, 4186.009277, 4434.921875, 4698.63623, 4978.031738, 5274.041016, 5587.651855, 5919.910645, 6271.926758, 6644.875, 7040., 7458.620117, 7902.132812, 8372.018555, 8869.84375, 9397.272461, 9956.063477, 10548.082031, 11175.303711, 11839.821289, 12543.853516, 13289.75}; + +void setup();//use this to do any initialisation if you want. + +void play(double *channels);//run dac! + +maxiOsc::maxiOsc(){ + //When you create an oscillator, the constructor sets the phase of the oscillator to 0. + phase = 0.0; +} + +double maxiOsc::noise() { + //White Noise + //always the same unless you seed it. + float r = rand()/(float)RAND_MAX; + output=r*2-1; + return(output); +} + +void maxiOsc::phaseReset(double phaseIn) { + //This allows you to set the phase of the oscillator to anything you like. + phase=phaseIn; + +} + +double maxiOsc::sinewave(double frequency) { + //This is a sinewave oscillator + output=sin (phase*(TWOPI)); + if ( phase >= 1.0 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + return(output); + +} + +double maxiOsc::sinebuf4(double frequency) { + //This is a sinewave oscillator that uses 4 point interpolation on a 514 point buffer + double remainder; + double a,b,c,d,a1,a2,a3; + phase += 512./(maxiSettings::sampleRate/(frequency)); + if ( phase >= 511 ) phase -=512; + remainder = phase - floor(phase); + + if (phase==0) { + a=sineBuffer[(long) 512]; + b=sineBuffer[(long) phase]; + c=sineBuffer[(long) phase+1]; + d=sineBuffer[(long) phase+2]; + + } else { + a=sineBuffer[(long) phase-1]; + b=sineBuffer[(long) phase]; + c=sineBuffer[(long) phase+1]; + d=sineBuffer[(long) phase+2]; + + } + + a1 = 0.5f * (c - a); + a2 = a - 2.5 * b + 2.f * c - 0.5f * d; + a3 = 0.5f * (d - a) + 1.5f * (b - c); + output = double (((a3 * remainder + a2) * remainder + a1) * remainder + b); + return(output); +} + +double maxiOsc::sinebuf(double frequency) { //specify the frequency of the oscillator in Hz / cps etc. + //This is a sinewave oscillator that uses linear interpolation on a 514 point buffer + double remainder; + phase += 512./(maxiSettings::sampleRate/(frequency*chandiv)); + if ( phase >= 511 ) phase -=512; + remainder = phase - floor(phase); + output = (double) ((1-remainder) * sineBuffer[1+ (long) phase] + remainder * sineBuffer[2+(long) phase]); + return(output); +} + +double maxiOsc::coswave(double frequency) { + //This is a cosine oscillator + output=cos (phase*(TWOPI)); + if ( phase >= 1.0 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + return(output); + +} + +double maxiOsc::phasor(double frequency) { + //This produces a floating point linear ramp between 0 and 1 at the desired frequency + output=phase; + if ( phase >= 1.0 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + return(output); +} + +double maxiOsc::square(double frequency) { + //This is a square wave + if (phase<0.5) output=-1; + if (phase>0.5) output=1; + if ( phase >= 1.0 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + return(output); +} + +double maxiOsc::pulse(double frequency, double duty) { + //This is a pulse generator that creates a signal between -1 and 1. + if (duty<0.) duty=0; + if (duty>1.) duty=1; + if ( phase >= 1.0 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + if (phaseduty) output=1.; + return(output); +} + +double maxiOsc::phasor(double frequency, double startphase, double endphase) { + //This is a phasor that takes a value for the start and end of the ramp. + output=phase; + if (phase= endphase ) phase = startphase; + phase += ((endphase-startphase)/(maxiSettings::sampleRate/(frequency))); + return(output); +} + + +double maxiOsc::saw(double frequency) { + //Sawtooth generator. This is like a phasor but goes between -1 and 1 + output=phase; + if ( phase >= 1.0 ) phase -= 2.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + return(output); + +} + +double maxiOsc::triangle(double frequency) { + //This is a triangle wave. + if ( phase >= 1.0 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + if (phase <= 0.5 ) { + output =(phase - 0.25) * 4; + } else { + output =((1.0-phase) - 0.25) * 4; + } + return(output); + +} + +double maxiOsc::sawn(double frequency) { + //Bandlimited sawtooth generator. Woohoo. + if ( phase >= 0.5 ) phase -= 1.0; + phase += (1./(maxiSettings::sampleRate/(frequency))); + double temp=(8820.22/frequency)*phase; + if (temp<-0.5) { + temp=-0.5; + } + if (temp>0.5) { + temp=0.5; + } + temp*=1000.0f; + temp+=500.0f; + double remainder = temp - floor(temp); + output = (double) ((1.0f-remainder) * transition[(long)temp] + remainder * transition[1+(long)temp]) - phase; + return(output); + +} + + +double maxiEnvelope::line(int numberofsegments,double segments[1000]) { + //This is a basic multi-segment ramp generator that you can use for more or less anything. + //However, it's not that intuitive. + if (isPlaying==1) {//only make a sound once you've been triggered + period=2./(segments[valindex+1]*0.004); + nextval=segments[valindex+2]; + currentval=segments[valindex]; + if (currentval-amplitude > 0.0000001 && valindex < numberofsegments) { + amplitude += ((currentval-startval)/(maxiSettings::sampleRate/period)); + } else if (currentval-amplitude < -0.0000001 && valindex < numberofsegments) { + amplitude -= (((currentval-startval)*(-1))/(maxiSettings::sampleRate/period)); + } else if (valindex >numberofsegments-1) { + valindex=numberofsegments-2; + } else { + valindex=valindex+2; + startval=currentval; + } + output=amplitude; + + } + else { + output=0; + + } + return(output); +} + +//and this +void maxiEnvelope::trigger(int index, double amp) { + isPlaying=1;//ok the envelope is being used now. + valindex=index; + amplitude=amp; + +} + +//Delay with feedback +maxiDelayline::maxiDelayline() { + memset( memory, 0, 88200*sizeof (double) ); + phase=0; +} + + +double maxiDelayline::dl(double input, int size, double feedback) { + if ( phase >=size ) { + phase = 0; + } + output=memory[phase]; + memory[phase]=(memory[phase]*feedback)+(input*feedback)*0.5; + phase+=1; + return(output); + +} + +double maxiDelayline::dl(double input, int size, double feedback, int position) { + if ( phase >=size ) phase = 0; + if ( position >=size ) position = 0; + output=memory[position]; + memory[phase]=(memory[phase]*feedback)+(input*feedback)*chandiv; + phase+=1; + return(output); + +} + +//I particularly like these. cutoff between 0 and 1 +double maxiFilter::lopass(double input, double cutoff) { + output=outputs[0] + cutoff*(input-outputs[0]); + outputs[0]=output; + return(output); +} +//as above +double maxiFilter::hipass(double input, double cutoff) { + output=input-(outputs[0] + cutoff*(input-outputs[0])); + outputs[0]=output; + return(output); +} +//awesome. cuttof is freq in hz. res is between 1 and whatever. Watch out! +double maxiFilter::lores(double input,double cutoff1, double resonance) { + cutoff=cutoff1*0.5; + if (cutoff<10) cutoff=10; + if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (resonance<1.) resonance = 1.; + z=cos(TWOPI*cutoff/maxiSettings::sampleRate); + c=2-2*z; + double r=(sqrt(2.0)*sqrt(-pow((z-1.0),3.0))+resonance*(z-1))/(resonance*(z-1)); + x=x+(input-y)*c; + y=y+x; + x=x*r; + output=y; + return(output); +} + +//working hires filter +double maxiFilter::hires(double input,double cutoff1, double resonance) { + cutoff=cutoff1*0.5; + if (cutoff<10) cutoff=10; + if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (resonance<1.) resonance = 1.; + z=cos(TWOPI*cutoff/maxiSettings::sampleRate); + c=2-2*z; + double r=(sqrt(2.0)*sqrt(-pow((z-1.0),3.0))+resonance*(z-1))/(resonance*(z-1)); + x=x+(input-y)*c; + y=y+x; + x=x*r; + output=input-y; + return(output); +} + +//This works a bit. Needs attention. +double maxiFilter::bandpass(double input,double cutoff1, double resonance) { + cutoff=cutoff1; + if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5); + if (resonance>=1.) resonance=0.999999; + z=cos(TWOPI*cutoff/maxiSettings::sampleRate); + inputs[0] = (1-resonance)*(sqrt(resonance*(resonance-4.0*pow(z,2.0)+2.0)+1)); + inputs[1] = 2*z*resonance; + inputs[2] = pow((resonance*-1),2); + + output=inputs[0]*input+inputs[1]*outputs[1]+inputs[2]*outputs[2]; + outputs[2]=outputs[1]; + outputs[1]=output; + return(output); +} + +//stereo bus +double *maxiMix::stereo(double input,double two[2],double x) { + if (x>1) x=1; + if (x<0) x=0; + two[0]=input*sqrt(1.0-x); + two[1]=input*sqrt(x); + return(two); +} + +//quad bus +double *maxiMix::quad(double input,double four[4],double x,double y) { + if (x>1) x=1; + if (x<0) x=0; + if (y>1) y=1; + if (y<0) y=0; + four[0]=input*sqrt((1.0-x)*y); + four[1]=input*sqrt((1.0-x)*(1.0-y)); + four[2]=input*sqrt(x*y); + four[3]=input*sqrt(x*(1.0-y)); + return(four); +} + +//ambisonic bus +double *maxiMix::ambisonic(double input,double eight[8],double x,double y,double z) { + if (x>1) x=1; + if (x<0) x=0; + if (y>1) y=1; + if (y<0) y=0; + if (z>1) y=1; + if (z<0) y=0; + eight[0]=input*(sqrt((1.0-x)*y)*1.0-z); + eight[1]=input*(sqrt((1.0-x)*(1.0-y))*1.0-z); + eight[2]=input*(sqrt(x*y)*1.0-z); + eight[3]=input*(sqrt(x*(1.0-y))*1.0-z); + eight[4]=input*(sqrt((1.0-x)*y)*z); + eight[5]=input*(sqrt((1.0-x)*(1.0-y))*z); + eight[6]=input*sqrt((x*y)*z); + eight[7]=input*sqrt((x*(1.0-y))*z); + return(eight); +} + + +bool maxiSample::load(string fileName, int channel) { + myPath = fileName; + readChannel=channel; + return read(); +} + +bool maxiSample::loadOgg(string fileName, int channel) { +#ifdef VORBIS + bool result; + readChannel=channel; + int channelx; + free(temp); + myDataSize = stb_vorbis_decode_filename(const_cast(fileName.c_str()), &channelx, &temp); + result = myDataSize > 0; + printf("\nchannels = %d\nlength = %d",channelx,myDataSize); + printf("\n"); + myChannels=(short)channelx; + length=myDataSize; + mySampleRate=44100; + + if (myChannels>1) { + int position=0; + int channel=readChannel; + for (int i=channel;i1) { + int position=0; + int channel=readChannel*2; + for (int i=channel;i= length) position=0; + output = (double) temp[(long)position]/32767.0; + return output; +} + +//start end and points are between 0 and 1 +double maxiSample::playLoop(double start, double end) { + position++; + if (position < length * start) position = length * start; + if ((long) position >= length * end) position = length * start; + output = (double) temp[(long)position]/32767.0; + return output; +} + +double maxiSample::playOnce() { + position++; + if ((long) position(newPos, 0.0, 1.0) * length; +} + +double maxiSample::playUntil(double end) { + position++; + if ((long) position=0) { + + if ((long) position>=length-1) position=1; + remainder = position - floor(position); + if (position+1=0) { + a=position-1; + + } + else { + a=0; + } + if (position-2>=0) { + b=position-2; + } + else { + b=0; + } + output = (double) ((-1-remainder) * temp[a] + remainder * temp[b])/32767;//linear interpolation + } + return(output); +} + +double maxiSample::play(double frequency, double start, double end) { + return play(frequency, start, end, position); +} + +double maxiSample::play(double frequency, double start, double end, double &pos) { + double remainder; + if (end>=length) end=length-1; + long a,b; + + if (frequency >0.) { + if (pos= end ) pos = start; + pos += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv))); + remainder = pos - floor(pos); + long posl = floor(pos); + if (posl+1=0) { + a=posl-1; + } + else { + a=0; + } + if (posl-2>=0) { + b=posl-2; + } + else { + b=0; + } + output = (double) ((-1-remainder) * temp[a] + + remainder * temp[b])/32767;//linear interpolation + + } + + return(output); +} + + +//better cubic inerpolation. Cobbled together from various (pd externals, yehar, other places). +double maxiSample::play4(double frequency, double start, double end) { + double remainder; + double a,b,c,d,a1,a2,a3; + if (frequency >0.) { + if (position= end ) position = start; + position += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv))); + remainder = position - floor(position); + if (position>0) { + a=temp[(int)(floor(position))-1]; + + } else { + a=temp[0]; + + } + + b=temp[(long) position]; + if (positionstart && position < end-1) { + a=temp[(long) position+1]; + + } else { + a=temp[0]; + + } + + b=temp[(long) position]; + if (position>start) { + c=temp[(long) position-1]; + + } else { + c=temp[0]; + + } + if (position>start+1) { + d=temp[(long) position-2]; + + } else { + d=temp[0]; + } + a1 = 0.5f * (c - a); + a2 = a - 2.5 * b + 2.f * c - 0.5f * d; + a3 = 0.5f * (d - a) + 1.5f * (b - c); + output = (double) (((a3 * remainder + a2) * -remainder + a1) * -remainder + b) / 32767; + + } + + return(output); +} + +double maxiSample::bufferPlay(unsigned char &bufferin,long length) { + double remainder; + short* buffer = (short *)&bufferin; + position=(position+1); + remainder = position - (long) position; + if ((long) position>length) position=0; + output = (double) ((1-remainder) * buffer[1+ (long) position] + remainder * buffer[2+(long) position])/32767;//linear interpolation + return(output); +} + +double maxiSample::bufferPlay(unsigned char &bufferin,double speed,long length) { + double remainder; + long a,b; + short* buffer = (short *)&bufferin; + position=position+((speed*chandiv)/(maxiSettings::sampleRate/mySampleRate)); + if (speed >=0) { + + if ((long) position>=length-1) position=1; + remainder = position - floor(position); + if (position+1=0) { + a=position-1; + + } + else { + a=0; + } + if (position-2>=0) { + b=position-2; + } + else { + b=0; + } + output = (double) ((-1-remainder) * buffer[a] + remainder * buffer[b])/32767;//linear interpolation + } + return(output); +} + +double maxiSample::bufferPlay(unsigned char &bufferin,double frequency, double start, double end) { + double remainder; + length=end; + long a,b; + short* buffer = (short *)&bufferin; + if (frequency >0.) { + if (position= end ) position = start; + position += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv))); + remainder = position - floor(position); + long pos = floor(position); + if (pos+1=0) { + a=pos-1; + } + else { + a=0; + } + if (pos-2>=0) { + b=pos-2; + } + else { + b=0; + } + output = (double) ((-1-remainder) * buffer[a] + + remainder * buffer[b])/32767;//linear interpolation + + } + + return(output); +} + +//better cubic inerpolation. Cobbled together from various (pd externals, yehar, other places). +double maxiSample::bufferPlay4(unsigned char &bufferin,double frequency, double start, double end) { + double remainder; + double a,b,c,d,a1,a2,a3; + short* buffer = (short*)&bufferin; + if (frequency >0.) { + if (position= end ) position = start; + position += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv))); + remainder = position - floor(position); + if (position>0) { + a=buffer[(int)(floor(position))-1]; + + } else { + a=buffer[0]; + + } + + b=buffer[(long) position]; + if (positionstart && position < end-1) { + a=buffer[(long) position+1]; + + } else { + a=buffer[0]; + + } + + b=buffer[(long) position]; + if (position>start) { + c=buffer[(long) position-1]; + + } else { + c=buffer[0]; + + } + if (position>start+1) { + d=buffer[(long) position-2]; + + } else { + d=buffer[0]; + } + a1 = 0.5f * (c - a); + a2 = a - 2.5 * b + 2.f * c - 0.5f * d; + a3 = 0.5f * (d - a) + 1.5f * (b - c); + output = (double) (((a3 * remainder + a2) * -remainder + a1) * -remainder + b) / 32767; + + } + + return(output); +} + + +void maxiSample::getLength() { + length=myDataSize*0.5; +} + +void maxiSample::setLength(unsigned long numSamples) { + temp = (short*) realloc(temp, sizeof(short) * numSamples); +// short *newData = (short*) malloc(sizeof(short) * numSamples); +// if (NULL!=temp) { +// unsigned long copyLength = min((unsigned long)length, numSamples); +// memcpy(newData, temp, sizeof(short) * copyLength); +// free(temp); +// } +// temp = newData; + myDataSize = numSamples * 2; + length=numSamples; + position=0; + recordPosition=0; +} + +void maxiSample::clear() { + memset(temp, 0, myDataSize); +} + +void maxiSample::reset() { + position=0; +} + + +void maxiSample::normalise(float maxLevel) { + short maxValue = 0; + for(int i=0; i < length; i++) { + if (abs(temp[i]) > maxValue) { + maxValue = abs(temp[i]); + } + } + float scale = 32767.0 * maxLevel / (float) maxValue; + for(int i=0; i < length; i++) { + temp[i] = round(scale * (float) temp[i]); + } +} + +void maxiSample::autoTrim(float alpha, float threshold, bool trimStart, bool trimEnd) { + + int startMarker=0; + if(trimStart) { + maxiLagExp startLag(alpha, 0); + while(startMarker < length) { + startLag.addSample(abs(temp[startMarker])); + if (startLag.value() > threshold) { + break; + } + startMarker++; + } + } + + int endMarker = length-1; + if(trimEnd) { + maxiLagExp endLag(alpha, 0); + while(endMarker > 0) { + endLag.addSample(abs(temp[endMarker])); + if (endLag.value() > threshold) { + break; + } + endMarker--; + } + } + + cout << "Autotrim: start: " << startMarker << ", end: " << endMarker << endl; + + int newLength = endMarker - startMarker; + if (newLength > 0) { + short *newData = (short*) malloc(sizeof(short) * newLength); + for(int i=0; i < newLength; i++) { + newData[i] = temp[i+startMarker]; + } + free(temp); + temp = newData; + myDataSize = newLength * 2; + length=newLength; + position=0; + recordPosition=0; + //envelope the start + int fadeSize=min((long)100, length); + for(int i=0; i < fadeSize; i++) { + float factor = i / (float) fadeSize; + temp[i] = round(temp[i] * factor); + temp[length - 1 - i] = round(temp[length - 1 - i] * factor); + } + } +} + + + + + + + + + +/* OK this compressor and gate are now ready to use. The envelopes, like all the envelopes in this recent update, use stupid algorithms for + incrementing - consequently a long attack is something like 0.0001 and a long release is like 0.9999. + Annoyingly, a short attack is 0.1, and a short release is 0.99. I'll sort this out laters */ + +double maxiDyn::gate(double input, double threshold, long holdtime, double attack, double release) { + + if (fabs(input)>threshold && attackphase!=1){ + holdcount=0; + releasephase=0; + attackphase=1; + if(amplitude==0) amplitude=0.01; + } + + if (attackphase==1 && amplitude<1) { + amplitude*=(1+attack); + output=input*amplitude; + } + + if (amplitude>=1) { + attackphase=0; + holdphase=1; + } + + if (holdcount0.) { + output=input*(amplitude*=release); + + } + + return output; +} + + +double maxiDyn::compressor(double input, double ratio, double threshold, double attack, double release) { + + if (fabs(input)>threshold && attackphase!=1){ + holdcount=0; + releasephase=0; + attackphase=1; + if(currentRatio==0) currentRatio=ratio; + } + + if (attackphase==1 && currentRatio=ratio-1) { + attackphase=0; + releasephase=1; + } + + if (releasephase==1 && currentRatio>0.) { + currentRatio*=release; + } + + if (input>0.) { + output = input/(1.+currentRatio); + } else { + output = input/(1.+currentRatio); + } + + return output*(1+log(ratio)); +} + + +/* Lots of people struggle with the envelope generators so here's a new easy one. + It takes mental numbers for attack and release tho. Basically, they're exponentials. + I'll map them out later so that it's a bit more intuitive */ +double maxiEnv::ar(double input, double attack, double release, long holdtime, int trigger) { + + if (trigger==1 && attackphase!=1 && holdphase!=1){ + holdcount=0; + releasephase=0; + attackphase=1; + } + + if (attackphase==1) { + amplitude+=(1*attack); + output=input*amplitude; + } + + if (amplitude>=1) { + amplitude=1; + attackphase=0; + holdphase=1; + } + + if (holdcount0.) { + output=input*(amplitude*=release); + + } + + return output; +} + +/* and here's a new adsr. It's not bad, very simple to use*/ + +double maxiEnv::adsr(double input, double attack, double decay, double sustain, double release, long holdtime, int trigger) { + + if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){ + holdcount=0; + decayphase=0; + sustainphase=0; + releasephase=0; + attackphase=1; + } + + if (attackphase==1) { + amplitude+=(1*attack); + output=input*amplitude; + } + + if (amplitude>=1) { + amplitude=1; + attackphase=0; + decayphase=1; + } + + if (decayphase==1) { + output=input*(amplitude*=decay); + if (amplitude<=sustain) { + decayphase=0; + holdphase=1; + } + } + + if (holdcount0.) { + output=input*(amplitude*=release); + + } + + return output; +} + +double convert::mtof(int midinote) { + + return mtofarray[midinote]; +} + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maximilian.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maximilian.h new file mode 100755 index 0000000..03dfea5 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/maximilian.h @@ -0,0 +1,623 @@ +/* + * maximilian.h + * platform independent synthesis library using portaudio or rtaudio + * + * Created by Mick Grierson on 29/12/2009. + * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved. + * Thanks to the Goldsmiths Creative Computing Team. + * Special thanks to Arturo Castro for the PortAudio implementation. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/* + Feature request: + maxiNANINFAlarm + maxiLimiter + */ + +#ifndef MAXIMILIAN_H +#define MAXIMILIAN_H + +//#define MAXIMILIAN_PORTAUDIO +#define MAXIMILIAN_RT_AUDIO + + +#include +#include +#include +#include +#include "math.h" + +using namespace std; +#ifndef PI +#define PI 3.1415926535897932384626433832795 +#endif +#define TWOPI 6.283185307179586476925286766559 + +class maxiSettings { +public: + static int sampleRate; + static int channels; + static int bufferSize; + static void setup(int initSampleRate, int initChannels, int initBufferSize) { + maxiSettings::sampleRate = initSampleRate; + maxiSettings::channels = initChannels; + maxiSettings::bufferSize = initBufferSize; + } +}; + + +class maxiOsc { + + double frequency; + double phase; + double startphase; + double endphase; + double output; + double tri; + + +public: + maxiOsc(); + double sinewave(double frequency); + double coswave(double frequency); + double phasor(double frequency); + double phasor(double frequency, double startphase, double endphase); + double saw(double frequency); + double triangle(double frequency); + double square(double frequency); + double pulse(double frequency, double duty); + double noise(); + double sinebuf(double frequency); + double sinebuf4(double frequency); + void phaseReset(double phaseIn); + double sawn(double frequency); + +}; + + +class maxiEnvelope { + + double period; + double output; + double startval; + double currentval; + double nextval; + int isPlaying; + +public: + double line(int numberofsegments,double segments[100]); + void trigger(int index,double amp); + int valindex; + double amplitude; + +}; + + +class maxiDelayline { + double frequency; + int phase; + double startphase; + double endphase; + double output; + double memory[88200]; + +public: + maxiDelayline(); + double dl(double input, int size, double feedback); + double dl(double input, int size, double feedback, int position); + + +}; + + +class maxiFilter { + double gain; + double input; + double output; + double inputs[10]; + double outputs[10]; + double cutoff1; + double x;//speed + double y;//pos + double z;//pole + double c;//filter coefficient + +public: + maxiFilter():x(0.0), y(0.0), z(0.0), c(0.0){}; + double cutoff; + double resonance; + double lores(double input,double cutoff1, double resonance); + double hires(double input,double cutoff1, double resonance); + double bandpass(double input,double cutoff1, double resonance); + double lopass(double input,double cutoff); + double hipass(double input,double cutoff); + +}; + +class maxiMix { + double input; + double two[2]; + double four[4]; + double eight[8]; +public: + double x; + double y; + double z; + double *stereo(double input,double two[2],double x); + double *quad(double input,double four[4], double x,double y); + double *ambisonic(double input,double eight[8],double x,double y, double z); + +}; + +//lagging with an exponential moving average +//a lower alpha value gives a slower lag +template +class maxiLagExp { +public: + T alpha, alphaReciprocal; + T val; + + maxiLagExp() { + init(0.5, 0.0); + }; + + maxiLagExp(T initAlpha, T initVal) { + init(initAlpha, initVal); + } + + void init(T initAlpha, T initVal) { + alpha = initAlpha; + alphaReciprocal = 1.0 - alpha; + val = initVal; + } + + inline void addSample(T newVal) { + val = (alpha * newVal) + (alphaReciprocal * val); + } + + inline T value() { + return val; + } +}; + + +class maxiSample { + +private: + string myPath; + int myChunkSize; + int mySubChunk1Size; + int readChannel; + short myFormat; + int myByteRate; + short myBlockAlign; + short myBitsPerSample; + double speed; + double output; + maxiLagExp loopRecordLag; + +public: + double position, recordPosition; + int myDataSize; + short myChannels; + int mySampleRate; + long length; + void getLength(); + void setLength(unsigned long numSamples); + + +// char* myData; + short* temp; + + // get/set for the Path property + + ~maxiSample() + { +// if (myData) free(myData); + if (temp) free(temp); + } + + maxiSample():temp(NULL),position(0), recordPosition(0), myChannels(1), mySampleRate(maxiSettings::sampleRate) {}; + + maxiSample& operator=(const maxiSample &source) { + if (this == &source) + return *this; + position=0; + recordPosition = 0; + myChannels = source.myChannels; + mySampleRate = maxiSettings::sampleRate; + free(temp); + myDataSize = source.myDataSize; + temp = (short*) malloc(myDataSize * sizeof(char)); + memcpy(temp, source.temp, myDataSize * sizeof(char)); + length = source.length; + return *this; + } + + bool load(string fileName, int channel=0); + + bool loadOgg(string filename,int channel=0); + + void trigger(); + + // read a wav file into this class + bool read(); + + //read an ogg file into this class using stb_vorbis + bool readOgg(); + + void loopRecord(double newSample, const bool recordEnabled, const double recordMix, double start = 0.0, double end = 1.0) { + loopRecordLag.addSample(recordEnabled); + if (recordPosition < start * length) recordPosition = start * length; + if(recordEnabled) { + double currentSample = temp[(unsigned long)recordPosition] / 32767.0; + newSample = (recordMix * currentSample) + ((1.0 - recordMix) * newSample); + newSample *= loopRecordLag.value(); + temp[(unsigned long)recordPosition] = newSample * 32767; + } + ++recordPosition; + if (recordPosition >= end * length) + recordPosition= start * length; + } + + void clear(); + + void reset(); + + double play(); + + double playLoop(double start, double end); // start and end are between 0.0 and 1.0 + + double playOnce(); + + double playOnce(double speed); + + void setPosition(double newPos); // between 0.0 and 1.0 + + double playUntil(double end); + + double play(double speed); + + double play(double frequency, double start, double end, double &pos); + + double play(double frequency, double start, double end); + + double play4(double frequency, double start, double end); + + double bufferPlay(unsigned char &bufferin,long length); + + double bufferPlay(unsigned char &bufferin,double speed,long length); + + double bufferPlay(unsigned char &bufferin,double frequency, double start, double end); + + double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end); + bool save() { + return save(myPath); + } + + bool save(string filename) + { + fstream myFile (filename.c_str(), ios::out | ios::binary); + + // write the wav file per the wav file format + myFile.seekp (0, ios::beg); + myFile.write ("RIFF", 4); + myFile.write ((char*) &myChunkSize, 4); + myFile.write ("WAVE", 4); + myFile.write ("fmt ", 4); + myFile.write ((char*) &mySubChunk1Size, 4); + myFile.write ((char*) &myFormat, 2); + myFile.write ((char*) &myChannels, 2); + myFile.write ((char*) &mySampleRate, 4); + myFile.write ((char*) &myByteRate, 4); + myFile.write ((char*) &myBlockAlign, 2); + myFile.write ((char*) &myBitsPerSample, 2); + myFile.write ("data", 4); + myFile.write ((char*) &myDataSize, 4); + myFile.write ((char*) temp, myDataSize); + + return true; + } + + // return a printable summary of the wav file + char *getSummary() + { + char *summary = new char[250]; + sprintf(summary, " Format: %d\n Channels: %d\n SampleRate: %d\n ByteRate: %d\n BlockAlign: %d\n BitsPerSample: %d\n DataSize: %d\n", myFormat, myChannels, mySampleRate, myByteRate, myBlockAlign, myBitsPerSample, myDataSize); + return summary; + } + + void normalise(float maxLevel = 0.99); //0 < maxLevel < 1.0 + void autoTrim(float alpha = 0.3, float threshold = 6000, bool trimStart = true, bool trimEnd = true); //alpha of lag filter (lower == slower reaction), threshold to mark start and end, < 32767 +}; + + +class maxiMap { +public: + static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) { + val = max(min(val, inMax), inMin); + return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin; + } + + static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin; + } + + static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) { + //clipping + val = max(min(val, inMax), inMin); + return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin; + } + + //changed to templated function, e.g. maxiMap::maxiClamp(v, l, h); + template + static T inline clamp(T v, const T low, const T high) { + if (v > high) + v = high; + else if (v < low) { + v = low; + } + return v; + } + +}; + +class maxiDyn { + + +public: + double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995); + double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995); + double input; + double ratio; + double currentRatio; + double threshold; + double output; + double attack; + double release; + double amplitude; + long holdtime; + long holdcount; + int attackphase,holdphase,releasephase; +}; + +class maxiEnv { + + +public: + double ar(double input, double attack=1, double release=0.9, long holdtime=1, int trigger=0); + double adsr(double input, double attack=1, double decay=0.99, double sustain=0.125, double release=0.9, long holdtime=1, int trigger=0); + double input; + double output; + double attack; + double decay; + double sustain; + double release; + double amplitude; + int trigger; + long holdtime; + long holdcount; + int attackphase,decayphase,sustainphase,holdphase,releasephase; +}; + +class convert { +public: + double mtof(int midinote); +}; + + + +class maxiDistortion { +public: + /*atan distortion, see http://www.musicdsp.org/showArchiveComment.php?ArchiveID=104*/ + /*shape from 1 (soft clipping) to infinity (hard clipping)*/ + double atanDist(const double in, const double shape); + double fastAtanDist(const double in, const double shape); + double fastatan( double x ); +}; + +inline double maxiDistortion::fastatan(double x) +{ + return (x / (1.0 + 0.28 * (x * x))); +} + +inline double maxiDistortion::atanDist(const double in, const double shape) { + double out; + out = (1.0 / atan(shape)) * atan(in * shape); + return out; +} + +inline double maxiDistortion::fastAtanDist(const double in, const double shape) { + double out; + out = (1.0 / fastatan(shape)) * fastatan(in * shape); + return out; +} + + +class maxiFlanger { +public: + //delay = delay time - ~800 sounds good + //feedback = 0 - 1 + //speed = lfo speed in Hz, 0.0001 - 10 sounds good + //depth = 0 - 1 + double flange(const double input, const unsigned int delay, const double feedback, const double speed, const double depth); + maxiDelayline dl; + maxiOsc lfo; + +}; + +inline double maxiFlanger::flange(const double input, const unsigned int delay, const double feedback, const double speed, const double depth) +{ + //todo: needs fixing + double output; + double lfoVal = lfo.triangle(speed); + output = dl.dl(input, delay + (lfoVal * depth * delay) + 1, feedback) ; + double normalise = (1 - fabs(output)); + output *= normalise; + return (output + input) / 2.0; +} + +class maxiChorus { +public: + //delay = delay time - ~800 sounds good + //feedback = 0 - 1 + //speed = lfo speed in Hz, 0.0001 - 10 sounds good + //depth = 0 - 1 + double chorus(const double input, const unsigned int delay, const double feedback, const double speed, const double depth); + maxiDelayline dl, dl2; + maxiOsc lfo; + maxiFilter lopass; + +}; + +inline double maxiChorus::chorus(const double input, const unsigned int delay, const double feedback, const double speed, const double depth) +{ + //this needs fixing + double output1, output2; + double lfoVal = lfo.noise(); + lfoVal = lopass.lores(lfoVal, speed, 1.0) * 2.0; + output1 = dl.dl(input, delay + (lfoVal * depth * delay) + 1, feedback) ; + output2 = dl2.dl(input, (delay + (lfoVal * depth * delay * 1.02) + 1) * 0.98, feedback * 0.99) ; + output1 *= (1.0 - fabs(output1)); + output2 *= (1.0 - fabs(output2)); + return (output1 + output2 + input) / 3.0; +} + +template +class maxiEnvelopeFollowerType { +public: + maxiEnvelopeFollowerType() { + setAttack(100); + setRelease(100); + env = 0; + } + void setAttack(T attackMS) { + attack = pow( 0.01, 1.0 / (attackMS * maxiSettings::sampleRate * 0.001 ) ); + } + void setRelease(T releaseMS) { + release = pow( 0.01, 1.0 / (releaseMS * maxiSettings::sampleRate * 0.001 ) ); + } + inline T play(T input) { + input = fabs(input); + if (input>env) + env = attack * (env - input) + input; + else + env = release * (env - input) + input; + return env; + } + void reset() {env=0;} + inline T getEnv(){return env;} + inline void setEnv(T val){env = val;} +private: + T attack, release, env; +}; + +typedef maxiEnvelopeFollowerType maxiEnvelopeFollower; +typedef maxiEnvelopeFollowerType maxiEnvelopeFollowerF; + +//from https://ccrma.stanford.edu/~jos/filters/DC_Blocker_Software_Implementations.html +class maxiDCBlocker { +public: + double xm1, ym1; + maxiDCBlocker() : xm1(0), ym1(0) {} + inline double play(double input, double R) { + ym1 = input - xm1 + R * ym1; + xm1 = input; + return ym1; + } +}; + +/* + State Variable Filter + + algorithm from http://www.cytomic.com/files/dsp/SvfLinearTrapOptimised.pdf + usage: + either set the parameters separately as required (to save CPU) + + filter.setCutoff(param1); + filter.setResonance(param2); + + w = filter.play(w, 0.0, 1.0, 0.0, 0.0); + + or set everything together at once + + w = filter.setCutoff(param1).setResonance(param2).play(w, 0.0, 1.0, 0.0, 0.0); + + */ +class maxiSVF { +public: + maxiSVF() : v0z(0), v1(0), v2(0) { setParams(1000, 1);} + + //20 < cutoff < 20000 + inline maxiSVF& setCutoff(double cutoff) { + setParams(cutoff, res); + return *this; + } + + //from 0 upwards, starts to ring from 2-3ish, cracks a bit around 10 + inline maxiSVF& setResonance(double q) { + setParams(freq, q); + return *this; + } + + //run the filter, and get a mixture of lowpass, bandpass, highpass and notch outputs + inline double play(double w, double lpmix, double bpmix, double hpmix, double notchmix) { + double low, band, high, notch; + double v1z = v1; + double v2z = v2; + double v3 = w + v0z - 2.0 * v2z; + v1 += g1*v3-g2*v1z; + v2 += g3*v3+g4*v1z; + v0z = w; + low = v2; + band = v1; + high = w-k*v1-v2; + notch = w-k*v1; + return (low * lpmix) + (band * bpmix) + (high * hpmix) + (notch * notchmix); + } + +private: + inline void setParams(double _freq, double _res) { + freq = _freq; + res = _res; + g = tan(PI * freq / maxiSettings::sampleRate); + damping = res == 0 ? 0 : 1.0 / res; + k = damping; + ginv = g / (1.0 + g * (g + k)); + g1 = ginv; + g2 = 2.0 * (g + k) * ginv; + g3 = g * ginv; + g4 = 2.0 * ginv; + } + + double v0z, v1, v2, g, damping, k, ginv, g1, g2, g3 ,g4; + double freq, res; + +}; + + +#endif diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/sineTable.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/sineTable.h new file mode 100644 index 0000000..de9626e --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/sineTable.h @@ -0,0 +1,15 @@ +/* + * sineTable.h + * atomSynthesis + * + * Created by Chris on 10/11/2011. + * Copyright 2011 Goldsmiths Creative Computing. All rights reserved. + * + */ +#pragma once + +namespace waveTable { + +double sine65536[65538] = {0.0,9.5873799096e-05,0.000191747597311,0.000287621393763,0.000383495187571,0.000479368977855,0.000575242763732,0.000671116544322,0.000766990318743,0.000862864086114,0.000958737845553,0.00105461159618,0.00115048533711,0.00124635906747,0.00134223278637,0.00143810649294,0.00153398018628,0.00162985386553,0.0017257275298,0.0018216011782,0.00191747480986,0.00201334842389,0.00210922201942,0.00220509559556,0.00230096915143,0.00239684268615,0.00249271619884,0.00258858968861,0.0026844631546,0.0027803365959,0.00287621001166,0.00297208340097,0.00306795676297,0.00316383009676,0.00325970340148,0.00335557667623,0.00345144992014,0.00354732313232,0.0036431963119,0.00373906945799,0.00383494256971,0.00393081564618,0.00402668868652,0.00412256168984,0.00421843465528,0.00431430758194,0.00441018046894,0.0045060533154,0.00460192612045,0.00469779888319,0.00479367160276,0.00488954427826,0.00498541690882,0.00508128949356,0.00517716203158,0.00527303452202,0.005368906964,0.00546477935662,0.00556065169901,0.00565652399029,0.00575239622957,0.00584826841598,0.00594414054864,0.00604001262666,0.00613588464915,0.00623175661525,0.00632762852407,0.00642350037473,0.00651937216634,0.00661524389803,0.00671111556891,0.0068069871781,0.00690285872473,0.00699873020791,0.00709460162675,0.00719047298039,0.00728634426793,0.00738221548849,0.0074780866412,0.00757395772518,0.00766982873953,0.00776569968339,0.00786157055586,0.00795744135607,0.00805331208314,0.00814918273619,0.00824505331433,0.00834092381668,0.00843679424237,0.00853266459051,0.00862853486021,0.00872440505061,0.00882027516081,0.00891614518993,0.00901201513711,0.00910788500144,0.00920375478206,0.00929962447808,0.00939549408862,0.00949136361279,0.00958723304973,0.00968310239854,0.00977897165835,0.00987484082827,0.00997070990742,0.0100665788949,0.0101624477899,0.0102583165915,0.0103541852987,0.0104500539108,0.0105459224269,0.010641790846,0.0107376591673,0.0108335273899,0.0109293955129,0.0110252635354,0.0111211314566,0.0112169992756,0.0113128669915,0.0114087346034,0.0115046021104,0.0116004695117,0.0116963368064,0.0117922039935,0.0118880710723,0.0119839380417,0.0120798049011,0.0121756716493,0.0122715382857,0.0123674048093,0.0124632712192,0.0125591375145,0.0126550036944,0.012750869758,0.0128467357044,0.0129426015327,0.013038467242,0.0131343328315,0.0132301983002,0.0133260636473,0.013421928872,0.0135177939733,0.0136136589503,0.0137095238022,0.0138053885281,0.013901253127,0.0139971175982,0.0140929819408,0.0141888461538,0.0142847102364,0.0143805741876,0.0144764380067,0.0145723016928,0.0146681652449,0.0147640286621,0.0148598919437,0.0149557550886,0.0150516180961,0.0151474809653,0.0152433436952,0.015339206285,0.0154350687338,0.0155309310407,0.0156267932049,0.0157226552254,0.0158185171014,0.015914378832,0.0160102404164,0.0161061018535,0.0162019631427,0.0162978242829,0.0163936852733,0.016489546113,0.0165854068011,0.0166812673368,0.0167771277191,0.0168729879473,0.0169688480203,0.0170647079374,0.0171605676976,0.0172564273001,0.017352286744,0.0174481460284,0.0175440051524,0.0176398641151,0.0177357229157,0.0178315815532,0.0179274400269,0.0180232983358,0.018119156479,0.0182150144556,0.0183108722649,0.0184067299058,0.0185025873775,0.0185984446792,0.0186943018099,0.0187901587688,0.0188860155549,0.0189818721675,0.0190777286056,0.0191735848683,0.0192694409548,0.0193652968642,0.0194611525955,0.019557008148,0.0196528635207,0.0197487187128,0.0198445737234,0.0199404285515,0.0200362831964,0.0201321376571,0.0202279919327,0.0203238460224,0.0204196999253,0.0205155536405,0.0206114071671,0.0207072605043,0.0208031136511,0.0208989666067,0.0209948193702,0.0210906719408,0.0211865243174,0.0212823764994,0.0213782284857,0.0214740802755,0.0215699318679,0.021665783262,0.021761634457,0.021857485452,0.0219533362461,0.0220491868384,0.022145037228,0.022240887414,0.0223367373956,0.0224325871719,0.0225284367421,0.0226242861051,0.0227201352602,0.0228159842064,0.0229118329429,0.0230076814688,0.0231035297833,0.0231993778853,0.0232952257742,0.0233910734489,0.0234869209086,0.0235827681524,0.0236786151794,0.0237744619888,0.0238703085797,0.0239661549511,0.0240620011023,0.0241578470323,0.0242536927402,0.0243495382252,0.0244453834864,0.0245412285229,0.0246370733338,0.0247329179183,0.0248287622754,0.0249246064043,0.0250204503041,0.0251162939739,0.0252121374128,0.02530798062,0.0254038235946,0.0254996663357,0.0255955088423,0.0256913511138,0.025787193149,0.0258830349473,0.0259788765076,0.0260747178291,0.026170558911,0.0262663997523,0.0263622403521,0.0264580807097,0.026553920824,0.0266497606943,0.0267456003196,0.0268414396991,0.0269372788319,0.027033117717,0.0271289563537,0.027224794741,0.0273206328781,0.027416470764,0.0275123083979,0.027608145779,0.0277039829062,0.0277998197789,0.027895656396,0.0279914927567,0.02808732886,0.0281831647053,0.0282790002914,0.0283748356177,0.0284706706831,0.0285665054868,0.028662340028,0.0287581743056,0.028854008319,0.0289498420671,0.0290456755491,0.0291415087642,0.0292373417114,0.0293331743898,0.0294290067986,0.0295248389369,0.0296206708039,0.0297165023985,0.02981233372,0.0299081647675,0.0300039955401,0.0300998260369,0.030195656257,0.0302914861995,0.0303873158637,0.0304831452485,0.0305789743531,0.0306748031766,0.0307706317182,0.030866459977,0.030962287952,0.0310581156424,0.0311539430474,0.031249770166,0.0313455969973,0.0314414235406,0.0315372497948,0.0316330757591,0.0317289014327,0.0318247268146,0.031920551904,0.0320163767,0.0321122012018,0.0322080254083,0.0323038493188,0.0323996729324,0.0324954962481,0.0325913192652,0.0326871419827,0.0327829643997,0.0328787865154,0.0329746083289,0.0330704298393,0.0331662510457,0.0332620719473,0.0333578925431,0.0334537128323,0.033549532814,0.0336453524873,0.0337411718514,0.0338369909053,0.0339328096482,0.0340286280792,0.0341244461974,0.034220264002,0.034316081492,0.0344118986665,0.0345077155248,0.0346035320659,0.0346993482889,0.034795164193,0.0348909797772,0.0349867950407,0.0350826099826,0.0351784246021,0.0352742388982,0.0353700528701,0.0354658665169,0.0355616798376,0.0356574928315,0.0357533054976,0.0358491178351,0.0359449298431,0.0360407415207,0.036136552867,0.0362323638812,0.0363281745623,0.0364239849094,0.0365197949218,0.0366156045985,0.0367114139387,0.0368072229414,0.0369030316057,0.0369988399309,0.037094647916,0.0371904555601,0.0372862628624,0.0373820698219,0.0374778764378,0.0375736827093,0.0376694886353,0.0377652942152,0.0378610994479,0.0379569043325,0.0380527088683,0.0381485130544,0.0382443168897,0.0383401203736,0.038435923505,0.0385317262831,0.038627528707,0.0387233307759,0.0388191324889,0.038914933845,0.0390107348435,0.0391065354833,0.0392023357637,0.0392981356838,0.0393939352426,0.0394897344394,0.0395855332731,0.039681331743,0.0397771298482,0.0398729275877,0.0399687249608,0.0400645219664,0.0401603186038,0.040256114872,0.0403519107703,0.0404477062976,0.0405435014531,0.0406392962359,0.0407350906452,0.0408308846801,0.0409266783397,0.0410224716231,0.0411182645294,0.0412140570577,0.0413098492073,0.0414056409771,0.0415014323663,0.0415972233741,0.0416930139995,0.0417888042416,0.0418845940997,0.0419803835727,0.0420761726599,0.0421719613603,0.0422677496731,0.0423635375974,0.0424593251323,0.0425551122769,0.0426508990304,0.0427466853918,0.0428424713602,0.0429382569349,0.043034042115,0.0431298268994,0.0432256112874,0.0433213952781,0.0434171788706,0.043512962064,0.0436087448575,0.0437045272501,0.0438003092409,0.0438960908292,0.043991872014,0.0440876527945,0.0441834331696,0.0442792131387,0.0443749927008,0.0444707718549,0.0445665506003,0.0446623289361,0.0447581068613,0.0448538843752,0.0449496614767,0.0450454381651,0.0451412144394,0.0452369902988,0.0453327657424,0.0454285407693,0.0455243153786,0.0456200895695,0.045715863341,0.0458116366924,0.0459074096226,0.0460031821309,0.0460989542163,0.046194725878,0.0462904971151,0.0463862679267,0.0464820383119,0.0465778082699,0.0466735777997,0.0467693469005,0.0468651155715,0.0469608838116,0.0470566516201,0.0471524189961,0.0472481859386,0.0473439524469,0.0474397185199,0.047535484157,0.047631249357,0.0477270141193,0.0478227784429,0.0479185423269,0.0480143057704,0.0481100687726,0.0482058313326,0.0483015934495,0.0483973551224,0.0484931163504,0.0485888771327,0.0486846374684,0.0487803973566,0.0488761567964,0.048971915787,0.0490676743274,0.0491634324168,0.0492591900543,0.049354947239,0.0494507039701,0.0495464602466,0.0496422160677,0.0497379714325,0.0498337263401,0.0499294807897,0.0500252347803,0.0501209883111,0.0502167413812,0.0503124939897,0.0504082461357,0.0505039978184,0.0505997490369,0.0506954997903,0.0507912500777,0.0508869998982,0.050982749251,0.0510784981352,0.0511742465499,0.0512699944941,0.0513657419672,0.051461488968,0.0515572354959,0.0516529815499,0.051748727129,0.0518444722325,0.0519402168595,0.052035961009,0.0521317046803,0.0522274478723,0.0523231905843,0.0524189328154,0.0525146745646,0.0526104158311,0.0527061566141,0.0528018969125,0.0528976367257,0.0529933760526,0.0530891148924,0.0531848532442,0.0532805911071,0.0533763284804,0.0534720653629,0.053567801754,0.0536635376527,0.0537592730582,0.0538550079695,0.0539507423857,0.0540464763061,0.0541422097297,0.0542379426556,0.054333675083,0.0544294070109,0.0545251384386,0.054620869365,0.0547165997894,0.0548123297109,0.0549080591285,0.0550037880415,0.0550995164488,0.0551952443497,0.0552909717432,0.0553866986286,0.0554824250048,0.055578150871,0.0556738762264,0.05576960107,0.055865325401,0.0559610492185,0.0560567725216,0.0561524953095,0.0562482175812,0.0563439393359,0.0564396605727,0.0565353812907,0.0566311014891,0.0567268211669,0.0568225403233,0.0569182589574,0.0570139770683,0.0571096946552,0.0572054117171,0.0573011282532,0.0573968442626,0.0574925597444,0.0575882746977,0.0576839891217,0.0577797030155,0.0578754163782,0.0579711292089,0.0580668415068,0.0581625532709,0.0582582645004,0.0583539751944,0.0584496853521,0.0585453949724,0.0586411040547,0.0587368125979,0.0588325206012,0.0589282280638,0.0590239349847,0.059119641363,0.059215347198,0.0593110524886,0.0594067572341,0.0595024614335,0.059598165086,0.0596938681907,0.0597895707466,0.059885272753,0.059980974209,0.0600766751136,0.060172375466,0.0602680752653,0.0603637745107,0.0604594732012,0.0605551713359,0.0606508689141,0.0607465659348,0.0608422623971,0.0609379583001,0.061033653643,0.0611293484249,0.061225042645,0.0613207363022,0.0614164293958,0.0615121219249,0.0616078138886,0.061703505286,0.0617991961162,0.0618948863784,0.0619905760716,0.0620862651951,0.0621819537478,0.062277641729,0.0623733291378,0.0624690159732,0.0625647022345,0.0626603879206,0.0627560730308,0.0628517575642,0.0629474415198,0.0630431248968,0.0631388076944,0.0632344899116,0.0633301715475,0.0634258526014,0.0635215330722,0.0636172129592,0.0637128922614,0.063808570978,0.063904249108,0.0639999266507,0.0640956036051,0.0641912799704,0.0642869557456,0.0643826309299,0.0644783055224,0.0645739795222,0.0646696529285,0.0647653257403,0.0648609979569,0.0649566695772,0.0650523406005,0.0651480110259,0.0652436808524,0.0653393500792,0.0654350187054,0.0655306867302,0.0656263541526,0.0657220209718,0.0658176871869,0.065913352797,0.0660090178013,0.0661046821988,0.0662003459886,0.06629600917,0.066391671742,0.0664873337038,0.0665829950544,0.066678655793,0.0667743159187,0.0668699754306,0.0669656343279,0.0670612926096,0.067156950275,0.067252607323,0.0673482637529,0.0674439195637,0.0675395747545,0.0676352293246,0.067730883273,0.0678265365988,0.0679221893012,0.0680178413792,0.0681134928321,0.0682091436588,0.0683047938586,0.0684004434305,0.0684960923738,0.0685917406874,0.0686873883705,0.0687830354223,0.0688786818418,0.0689743276283,0.0690699727807,0.0691656172982,0.06926126118,0.0693569044252,0.0694525470328,0.0695481890021,0.0696438303321,0.0697394710219,0.0698351110707,0.0699307504776,0.0700263892417,0.0701220273621,0.070217664838,0.0703133016685,0.0704089378526,0.0705045733896,0.0706002082785,0.0706958425185,0.0707914761086,0.0708871090481,0.070982741336,0.0710783729714,0.0711740039534,0.0712696342813,0.0713652639541,0.0714608929708,0.0715565213308,0.071652149033,0.0717477760766,0.0718434024607,0.0719390281844,0.0720346532469,0.0721302776472,0.0722259013846,0.0723215244581,0.0724171468668,0.0725127686098,0.0726083896864,0.0727040100955,0.0727996298364,0.072895248908,0.0729908673097,0.0730864850405,0.0731821020994,0.0732777184857,0.0733733341984,0.0734689492367,0.0735645635997,0.0736601772865,0.0737557902962,0.073851402628,0.0739470142809,0.0740426252541,0.0741382355468,0.074233845158,0.0743294540868,0.0744250623325,0.074520669894,0.0746162767706,0.0747118829613,0.0748074884652,0.0749030932816,0.0749986974094,0.0750943008479,0.0751899035962,0.0752855056533,0.0753811070184,0.0754767076906,0.075572307669,0.0756679069528,0.0757635055411,0.075859103433,0.0759547006275,0.076050297124,0.0761458929214,0.0762414880189,0.0763370824155,0.0764326761105,0.076528269103,0.076623861392,0.0767194529767,0.0768150438563,0.0769106340297,0.0770062234962,0.0771018122549,0.0771974003049,0.0772929876453,0.0773885742753,0.0774841601939,0.0775797454003,0.0776753298935,0.0777709136729,0.0778664967373,0.077962079086,0.0780576607182,0.0781532416328,0.0782488218291,0.0783444013061,0.078439980063,0.0785355580988,0.0786311354128,0.0787267120041,0.0788222878717,0.0789178630148,0.0790134374325,0.0791090111239,0.0792045840882,0.0793001563244,0.0793957278317,0.0794912986092,0.0795868686561,0.0796824379714,0.0797780065543,0.0798735744039,0.0799691415193,0.0800647078997,0.0801602735441,0.0802558384517,0.0803514026216,0.080446966053,0.0805425287448,0.0806380906964,0.0807336519067,0.080829212375,0.0809247721003,0.0810203310817,0.0811158893185,0.0812114468096,0.0813070035542,0.0814025595515,0.0814981148006,0.0815936693005,0.0816892230505,0.0817847760496,0.0818803282969,0.0819758797916,0.0820714305328,0.0821669805197,0.0822625297512,0.0823580782266,0.0824536259451,0.0825491729056,0.0826447191073,0.0827402645494,0.0828358092309,0.0829313531511,0.0830268963089,0.0831224387036,0.0832179803343,0.0833135212,0.0834090612999,0.0835046006332,0.0836001391988,0.0836956769961,0.083791214024,0.0838867502818,0.0839822857685,0.0840778204832,0.0841733544251,0.0842688875933,0.0843644199869,0.0844599516051,0.0845554824469,0.0846510125116,0.0847465417981,0.0848420703056,0.0849375980333,0.0850331249803,0.0851286511456,0.0852241765285,0.085319701128,0.0854152249433,0.0855107479735,0.0856062702176,0.0857017916749,0.0857973123444,0.0858928322253,0.0859883513167,0.0860838696177,0.0861793871275,0.0862749038451,0.0863704197697,0.0864659349003,0.0865614492363,0.0866569627765,0.0867524755202,0.0868479874665,0.0869434986145,0.0870390089634,0.0871345185122,0.0872300272601,0.0873255352062,0.0874210423496,0.0875165486895,0.0876120542249,0.087707558955,0.0878030628789,0.0878985659958,0.0879940683047,0.0880895698048,0.0881850704952,0.088280570375,0.0883760694433,0.0884715676993,0.0885670651421,0.0886625617709,0.0887580575846,0.0888535525825,0.0889490467637,0.0890445401273,0.0891400326724,0.0892355243981,0.0893310153037,0.0894265053881,0.0895219946505,0.08961748309,0.0897129707058,0.089808457497,0.0899039434627,0.089999428602,0.090094912914,0.0901903963979,0.0902858790529,0.0903813608779,0.0904768418721,0.0905723220347,0.0906678013648,0.0907632798615,0.0908587575239,0.0909542343511,0.0910497103424,0.0911451854967,0.0912406598132,0.0913361332911,0.0914316059294,0.0915270777273,0.0916225486839,0.0917180187983,0.0918134880697,0.0919089564971,0.0920044240798,0.0920998908167,0.0921953567071,0.0922908217501,0.0923862859447,0.0924817492901,0.0925772117855,0.0926726734299,0.0927681342225,0.0928635941624,0.0929590532487,0.0930545114805,0.093149968857,0.0932454253773,0.0933408810405,0.0934363358457,0.0935317897921,0.0936272428788,0.0937226951048,0.0938181464694,0.0939135969716,0.0940090466106,0.0941044953855,0.0941999432954,0.0942953903394,0.0943908365167,0.0944862818264,0.0945817262675,0.0946771698393,0.0947726125408,0.0948680543712,0.0949634953296,0.0950589354152,0.0951543746269,0.095249812964,0.0953452504256,0.0954406870108,0.0955361227188,0.0956315575485,0.0957269914993,0.0958224245702,0.0959178567602,0.0960132880687,0.0961087184946,0.096204148037,0.0962995766952,0.0963950044683,0.0964904313553,0.0965858573553,0.0966812824676,0.0967767066912,0.0968721300252,0.0969675524688,0.0970629740212,0.0971583946813,0.0972538144484,0.0973492333215,0.0974446512998,0.0975400683825,0.0976354845685,0.0977308998571,0.0978263142474,0.0979217277385,0.0980171403296,0.0981125520196,0.0982079628079,0.0983033726934,0.0983987816754,0.0984941897529,0.098589596925,0.098685003191,0.0987804085498,0.0988758130007,0.0989712165427,0.099066619175,0.0991620208967,0.099257421707,0.0993528216049,0.0994482205895,0.0995436186601,0.0996390158156,0.0997344120553,0.0998298073783,0.0999252017837,0.100020595271,0.100115987838,0.100211379485,0.100306770211,0.100402160016,0.100497548897,0.100592936854,0.100688323887,0.100783709995,0.100879095176,0.100974479429,0.101069862755,0.101165245151,0.101260626618,0.101356007154,0.101451386758,0.10154676543,0.101642143168,0.101737519973,0.101832895841,0.101928270774,0.10202364477,0.102119017829,0.102214389948,0.102309761128,0.102405131368,0.102500500666,0.102595869022,0.102691236436,0.102786602905,0.102881968429,0.102977333008,0.10307269664,0.103168059325,0.103263421062,0.103358781849,0.103454141686,0.103549500573,0.103644858507,0.103740215489,0.103835571517,0.103930926591,0.10402628071,0.104121633872,0.104216986077,0.104312337325,0.104407687613,0.104503036942,0.10459838531,0.104693732717,0.104789079162,0.104884424643,0.10497976916,0.105075112713,0.105170455299,0.105265796919,0.105361137571,0.105456477255,0.105551815969,0.105647153713,0.105742490487,0.105837826288,0.105933161116,0.106028494971,0.106123827851,0.106219159755,0.106314490683,0.106409820634,0.106505149607,0.106600477601,0.106695804615,0.106791130648,0.1068864557,0.106981779769,0.107077102855,0.107172424957,0.107267746073,0.107363066204,0.107458385348,0.107553703504,0.107649020671,0.107744336849,0.107839652036,0.107934966233,0.108030279437,0.108125591648,0.108220902865,0.108316213088,0.108411522315,0.108506830545,0.108602137778,0.108697444013,0.108792749249,0.108888053485,0.108983356719,0.109078658952,0.109173960183,0.10926926041,0.109364559632,0.10945985785,0.109555155061,0.109650451265,0.109745746461,0.109841040649,0.109936333827,0.110031625994,0.11012691715,0.110222207294,0.110317496424,0.110412784541,0.110508071643,0.110603357729,0.110698642798,0.11079392685,0.110889209883,0.110984491897,0.111079772891,0.111175052864,0.111270331815,0.111365609743,0.111460886648,0.111556162528,0.111651437383,0.111746711211,0.111841984012,0.111937255786,0.11203252653,0.112127796244,0.112223064928,0.112318332581,0.112413599201,0.112508864787,0.11260412934,0.112699392857,0.112794655339,0.112889916784,0.112985177191,0.113080436559,0.113175694889,0.113270952178,0.113366208425,0.113461463631,0.113556717794,0.113651970913,0.113747222987,0.113842474016,0.113937723998,0.114032972933,0.11412822082,0.114223467658,0.114318713446,0.114413958183,0.114509201869,0.114604444502,0.114699686081,0.114794926607,0.114890166077,0.114985404491,0.115080641848,0.115175878147,0.115271113388,0.115366347569,0.115461580689,0.115556812749,0.115652043746,0.11574727368,0.11584250255,0.115937730356,0.116032957095,0.116128182769,0.116223407374,0.116318630912,0.11641385338,0.116509074778,0.116604295106,0.116699514361,0.116794732544,0.116889949653,0.116985165688,0.117080380648,0.117175594531,0.117270807338,0.117366019066,0.117461229715,0.117556439285,0.117651647775,0.117746855183,0.117842061508,0.117937266751,0.118032470909,0.118127673983,0.11822287597,0.118318076871,0.118413276685,0.11850847541,0.118603673045,0.118698869591,0.118794065045,0.118889259408,0.118984452678,0.119079644854,0.119174835935,0.119270025921,0.119365214811,0.119460402604,0.119555589298,0.119650774894,0.119745959389,0.119841142785,0.119936325078,0.120031506269,0.120126686357,0.120221865341,0.120317043219,0.120412219992,0.120507395658,0.120602570216,0.120697743666,0.120792916006,0.120888087236,0.120983257354,0.121078426361,0.121173594255,0.121268761035,0.1213639267,0.12145909125,0.121554254683,0.121649416999,0.121744578197,0.121839738276,0.121934897235,0.122030055073,0.122125211789,0.122220367383,0.122315521853,0.122410675199,0.12250582742,0.122600978515,0.122696128483,0.122791277323,0.122886425035,0.122981571617,0.123076717068,0.123171861388,0.123267004576,0.123362146631,0.123457287552,0.123552427339,0.123647565989,0.123742703503,0.12383783988,0.123932975119,0.124028109218,0.124123242177,0.124218373995,0.124313504672,0.124408634205,0.124503762596,0.124598889842,0.124694015942,0.124789140897,0.124884264704,0.124979387363,0.125074508874,0.125169629235,0.125264748446,0.125359866505,0.125454983412,0.125550099165,0.125645213765,0.12574032721,0.125835439498,0.125930550631,0.126025660606,0.126120769422,0.126215877079,0.126310983576,0.126406088912,0.126501193086,0.126596296097,0.126691397945,0.126786498628,0.126881598145,0.126976696497,0.127071793681,0.127166889697,0.127261984545,0.127357078222,0.127452170729,0.127547262065,0.127642352228,0.127737441218,0.127832529033,0.127927615674,0.128022701139,0.128117785427,0.128212868537,0.128307950469,0.128403031222,0.128498110794,0.128593189185,0.128688266394,0.12878334242,0.128878417263,0.128973490921,0.129068563393,0.129163634679,0.129258704778,0.129353773688,0.12944884141,0.129543907942,0.129638973283,0.129734037432,0.129829100389,0.129924162153,0.130019222722,0.130114282096,0.130209340275,0.130304397256,0.13039945304,0.130494507625,0.13058956101,0.130684613196,0.13077966418,0.130874713962,0.130969762541,0.131064809916,0.131159856086,0.131254901051,0.131349944809,0.13144498736,0.131540028703,0.131635068837,0.13173010776,0.131825145473,0.131920181974,0.132015217263,0.132110251338,0.132205284199,0.132300315844,0.132395346274,0.132490375487,0.132585403481,0.132680430257,0.132775455814,0.13287048015,0.132965503265,0.133060525157,0.133155545827,0.133250565272,0.133345583493,0.133440600488,0.133535616256,0.133630630797,0.13372564411,0.133820656194,0.133915667047,0.13401067667,0.134105685061,0.134200692219,0.134295698143,0.134390702834,0.134485706288,0.134580708507,0.134675709489,0.134770709233,0.134865707738,0.134960705003,0.135055701028,0.135150695811,0.135245689352,0.13534068165,0.135435672704,0.135530662513,0.135625651076,0.135720638393,0.135815624462,0.135910609283,0.136005592854,0.136100575176,0.136195556246,0.136290536064,0.13638551463,0.136480491942,0.136575468,0.136670442802,0.136765416348,0.136860388637,0.136955359668,0.13705032944,0.137145297952,0.137240265204,0.137335231194,0.137430195921,0.137525159386,0.137620121586,0.137715082522,0.137810042192,0.137905000595,0.13799995773,0.138094913597,0.138189868194,0.138284821522,0.138379773578,0.138474724362,0.138569673873,0.138664622111,0.138759569074,0.138854514762,0.138949459173,0.139044402308,0.139139344164,0.139234284741,0.139329224038,0.139424162055,0.13951909879,0.139614034243,0.139708968412,0.139803901298,0.139898832898,0.139993763212,0.14008869224,0.140183619979,0.140278546431,0.140373471592,0.140468395464,0.140563318044,0.140658239333,0.140753159328,0.14084807803,0.140942995437,0.141037911549,0.141132826364,0.141227739882,0.141322652102,0.141417563022,0.141512472643,0.141607380963,0.141702287982,0.141797193698,0.14189209811,0.141987001219,0.142081903022,0.142176803519,0.14227170271,0.142366600593,0.142461497167,0.142556392431,0.142651286386,0.142746179029,0.14284107036,0.142935960378,0.143030849082,0.143125736471,0.143220622545,0.143315507303,0.143410390743,0.143505272865,0.143600153667,0.14369503315,0.143789911312,0.143884788153,0.143979663671,0.144074537865,0.144169410735,0.14426428228,0.144359152499,0.144454021391,0.144548888955,0.144643755191,0.144738620097,0.144833483672,0.144928345916,0.145023206829,0.145118066408,0.145212924653,0.145307781563,0.145402637138,0.145497491376,0.145592344277,0.14568719584,0.145782046064,0.145876894947,0.14597174249,0.146066588691,0.146161433549,0.146256277064,0.146351119234,0.14644596006,0.146540799539,0.146635637671,0.146730474455,0.146825309891,0.146920143977,0.147014976713,0.147109808097,0.147204638129,0.147299466808,0.147394294133,0.147489120103,0.147583944718,0.147678767976,0.147773589876,0.147868410418,0.147963229601,0.148058047424,0.148152863887,0.148247678987,0.148342492725,0.148437305099,0.148532116108,0.148626925753,0.148721734031,0.148816540942,0.148911346486,0.14900615066,0.149100953465,0.1491957549,0.149290554963,0.149385353654,0.149480150972,0.149574946915,0.149669741484,0.149764534677,0.149859326494,0.149954116933,0.150048905994,0.150143693675,0.150238479977,0.150333264897,0.150428048436,0.150522830592,0.150617611364,0.150712390752,0.150807168755,0.150901945371,0.1509967206,0.151091494442,0.151186266894,0.151281037957,0.15137580763,0.151470575911,0.151565342799,0.151660108295,0.151754872397,0.151849635103,0.151944396414,0.152039156328,0.152133914845,0.152228671963,0.152323427682,0.152418182001,0.152512934919,0.152607686435,0.152702436549,0.152797185258,0.152891932564,0.152986678464,0.153081422957,0.153176166044,0.153270907723,0.153365647992,0.153460386852,0.153555124302,0.15364986034,0.153744594966,0.153839328178,0.153934059977,0.154028790361,0.154123519328,0.154218246879,0.154312973013,0.154407697728,0.154502421024,0.1545971429,0.154691863355,0.154786582387,0.154881299997,0.154976016184,0.155070730946,0.155165444282,0.155260156193,0.155354866676,0.155449575731,0.155544283357,0.155638989554,0.15573369432,0.155828397654,0.155923099556,0.156017800025,0.15611249906,0.15620719666,0.156301892824,0.156396587552,0.156491280842,0.156585972693,0.156680663105,0.156775352077,0.156870039608,0.156964725697,0.157059410343,0.157154093546,0.157248775304,0.157343455616,0.157438134483,0.157532811902,0.157627487873,0.157722162395,0.157816835468,0.15791150709,0.15800617726,0.158100845978,0.158195513243,0.158290179054,0.15838484341,0.15847950631,0.158574167753,0.158668827739,0.158763486266,0.158858143334,0.158952798942,0.159047453088,0.159142105773,0.159236756995,0.159331406753,0.159426055047,0.159520701875,0.159615347237,0.159709991132,0.159804633559,0.159899274517,0.159993914005,0.160088552023,0.160183188569,0.160277823642,0.160372457243,0.160467089369,0.160561720021,0.160656349196,0.160750976895,0.160845603116,0.160940227859,0.161034851122,0.161129472906,0.161224093208,0.161318712028,0.161413329366,0.161507945219,0.161602559588,0.161697172472,0.16179178387,0.16188639378,0.161981002202,0.162075609136,0.16217021458,0.162264818533,0.162359420994,0.162454021963,0.162548621439,0.162643219421,0.162737815908,0.162832410899,0.162927004393,0.16302159639,0.163116186888,0.163210775887,0.163305363385,0.163399949383,0.163494533879,0.163589116871,0.163683698361,0.163778278345,0.163872856825,0.163967433797,0.164062009263,0.164156583221,0.16425115567,0.164345726609,0.164440296037,0.164534863954,0.164629430359,0.16472399525,0.164818558628,0.16491312049,0.165007680836,0.165102239666,0.165196796978,0.165291352772,0.165385907046,0.1654804598,0.165575011034,0.165669560745,0.165764108933,0.165858655598,0.165953200738,0.166047744353,0.166142286441,0.166236827003,0.166331366036,0.16642590354,0.166520439515,0.166614973959,0.166709506872,0.166804038252,0.166898568099,0.166993096412,0.16708762319,0.167182148432,0.167276672137,0.167371194305,0.167465714935,0.167560234025,0.167654751575,0.167749267584,0.167843782051,0.167938294975,0.168032806355,0.168127316191,0.168221824482,0.168316331226,0.168410836423,0.168505340073,0.168599842173,0.168694342724,0.168788841724,0.168883339172,0.168977835068,0.169072329411,0.1691668222,0.169261313434,0.169355803112,0.169450291234,0.169544777798,0.169639262803,0.16973374625,0.169828228136,0.169922708461,0.170017187224,0.170111664424,0.170206140061,0.170300614133,0.17039508664,0.170489557581,0.170584026954,0.17067849476,0.170772960997,0.170867425664,0.17096188876,0.171056350285,0.171150810238,0.171245268618,0.171339725423,0.171434180654,0.171528634308,0.171623086386,0.171717536887,0.171811985809,0.171906433152,0.172000878915,0.172095323097,0.172189765697,0.172284206714,0.172378646148,0.172473083997,0.172567520261,0.172661954938,0.172756388029,0.172850819531,0.172945249445,0.173039677769,0.173134104503,0.173228529645,0.173322953195,0.173417375152,0.173511795514,0.173606214282,0.173700631454,0.17379504703,0.173889461008,0.173983873387,0.174078284168,0.174172693348,0.174267100928,0.174361506905,0.17445591128,0.174550314051,0.174644715218,0.17473911478,0.174833512735,0.174927909083,0.175022303824,0.175116696956,0.175211088478,0.175305478389,0.175399866689,0.175494253377,0.175588638452,0.175683021913,0.175777403759,0.175871783989,0.175966162603,0.176060539599,0.176154914977,0.176249288736,0.176343660875,0.176438031393,0.176532400289,0.176626767562,0.176721133212,0.176815497238,0.176909859638,0.177004220412,0.177098579559,0.177192937079,0.177287292969,0.17738164723,0.177475999861,0.17757035086,0.177664700227,0.177759047961,0.177853394061,0.177947738526,0.178042081356,0.178136422549,0.178230762105,0.178325100022,0.178419436301,0.178513770939,0.178608103936,0.178702435292,0.178796765005,0.178891093075,0.1789854195,0.179079744281,0.179174067415,0.179268388902,0.179362708741,0.179457026932,0.179551343473,0.179645658364,0.179739971603,0.179834283191,0.179928593125,0.180022901406,0.180117208031,0.180211513002,0.180305816315,0.180400117972,0.18049441797,0.180588716309,0.180683012988,0.180777308007,0.180871601363,0.180965893058,0.181060183088,0.181154471455,0.181248758156,0.181343043192,0.18143732656,0.181531608261,0.181625888293,0.181720166656,0.181814443348,0.18190871837,0.182002991719,0.182097263395,0.182191533397,0.182285801725,0.182380068377,0.182474333353,0.182568596652,0.182662858272,0.182757118214,0.182851376475,0.182945633056,0.183039887955,0.183134141172,0.183228392705,0.183322642555,0.183416890719,0.183511137197,0.183605381988,0.183699625092,0.183793866507,0.183888106233,0.183982344269,0.184076580613,0.184170815266,0.184265048226,0.184359279491,0.184453509063,0.184547736939,0.184641963118,0.1847361876,0.184830410385,0.18492463147,0.185018850856,0.185113068541,0.185207284524,0.185301498805,0.185395711383,0.185489922257,0.185584131425,0.185678338888,0.185772544644,0.185866748693,0.185960951033,0.186055151663,0.186149350584,0.186243547794,0.186337743291,0.186431937076,0.186526129147,0.186620319504,0.186714508145,0.18680869507,0.186902880278,0.186997063768,0.18709124554,0.187185425591,0.187279603922,0.187373780531,0.187467955419,0.187562128583,0.187656300023,0.187750469738,0.187844637727,0.18793880399,0.188032968525,0.188127131332,0.188221292409,0.188315451757,0.188409609373,0.188503765258,0.18859791941,0.188692071829,0.188786222513,0.188880371462,0.188974518674,0.18906866415,0.189162807888,0.189256949887,0.189351090146,0.189445228665,0.189539365443,0.189633500478,0.18972763377,0.189821765319,0.189915895122,0.19001002318,0.190104149492,0.190198274056,0.190292396871,0.190386517938,0.190480637254,0.19057475482,0.190668870634,0.190762984696,0.190857097004,0.190951207557,0.191045316356,0.191139423398,0.191233528684,0.191327632212,0.191421733981,0.19151583399,0.19160993224,0.191704028728,0.191798123453,0.191892216416,0.191986307615,0.19208039705,0.192174484719,0.192268570621,0.192362654756,0.192456737123,0.192550817721,0.192644896549,0.192738973607,0.192833048892,0.192927122405,0.193021194145,0.193115264111,0.193209332302,0.193303398716,0.193397463354,0.193491526214,0.193585587296,0.193679646598,0.19377370412,0.193867759861,0.19396181382,0.194055865996,0.194149916388,0.194243964996,0.194338011818,0.194432056854,0.194526100103,0.194620141563,0.194714181235,0.194808219117,0.194902255209,0.194996289509,0.195090322016,0.19518435273,0.195278381651,0.195372408776,0.195466434105,0.195560457638,0.195654479373,0.19574849931,0.195842517448,0.195936533785,0.196030548321,0.196124561056,0.196218571988,0.196312581116,0.19640658844,0.196500593958,0.19659459767,0.196688599575,0.196782599672,0.196876597961,0.19697059444,0.197064589108,0.197158581965,0.197252573009,0.197346562241,0.197440549659,0.197534535261,0.197628519048,0.197722501019,0.197816481172,0.197910459507,0.198004436022,0.198098410718,0.198192383593,0.198286354646,0.198380323876,0.198474291283,0.198568256866,0.198662220623,0.198756182554,0.198850142659,0.198944100935,0.199038057383,0.199132012002,0.19922596479,0.199319915747,0.199413864871,0.199507812163,0.199601757621,0.199695701244,0.199789643032,0.199883582983,0.199977521097,0.200071457373,0.20016539181,0.200259324407,0.200353255163,0.200447184078,0.20054111115,0.200635036378,0.200728959763,0.200822881302,0.200916800996,0.201010718843,0.201104634842,0.201198548993,0.201292461294,0.201386371745,0.201480280345,0.201574187093,0.201668091988,0.20176199503,0.201855896217,0.201949795548,0.202043693023,0.202137588641,0.202231482401,0.202325374303,0.202419264344,0.202513152525,0.202607038844,0.202700923302,0.202794805895,0.202888686625,0.20298256549,0.203076442489,0.203170317622,0.203264190887,0.203358062284,0.203451931811,0.203545799469,0.203639665255,0.20373352917,0.203827391212,0.20392125138,0.204015109674,0.204108966093,0.204202820635,0.204296673301,0.204390524089,0.204484372998,0.204578220027,0.204672065176,0.204765908444,0.20485974983,0.204953589332,0.205047426951,0.205141262685,0.205235096533,0.205328928495,0.20542275857,0.205516586756,0.205610413053,0.20570423746,0.205798059977,0.205891880602,0.205985699334,0.206079516173,0.206173331118,0.206267144167,0.206360955321,0.206454764578,0.206548571937,0.206642377398,0.206736180959,0.20682998262,0.20692378238,0.207017580237,0.207111376192,0.207205170243,0.20729896239,0.207392752631,0.207486540966,0.207580327394,0.207674111913,0.207767894524,0.207861675225,0.207955454015,0.208049230894,0.208143005861,0.208236778914,0.208330550053,0.208424319278,0.208518086586,0.208611851978,0.208705615453,0.208799377009,0.208893136645,0.208986894362,0.209080650158,0.209174404032,0.209268155983,0.20936190601,0.209455654114,0.209549400292,0.209643144543,0.209736886868,0.209830627265,0.209924365734,0.210018102272,0.21011183688,0.210205569557,0.210299300302,0.210393029114,0.210486755992,0.210580480935,0.210674203942,0.210767925013,0.210861644147,0.210955361343,0.211049076599,0.211142789916,0.211236501291,0.211330210725,0.211423918217,0.211517623765,0.211611327369,0.211705029028,0.211798728741,0.211892426507,0.211986122326,0.212079816196,0.212173508116,0.212267198087,0.212360886106,0.212454572173,0.212548256288,0.212641938448,0.212735618654,0.212829296905,0.2129229732,0.213016647537,0.213110319916,0.213203990337,0.213297658797,0.213391325297,0.213484989836,0.213578652412,0.213672313026,0.213765971675,0.213859628359,0.213953283078,0.214046935829,0.214140586614,0.21423423543,0.214327882277,0.214421527154,0.21451517006,0.214608810994,0.214702449955,0.214796086943,0.214889721957,0.214983354995,0.215076986058,0.215170615143,0.215264242251,0.21535786738,0.215451490529,0.215545111698,0.215638730886,0.215732348092,0.215825963314,0.215919576553,0.216013187808,0.216106797076,0.216200404358,0.216294009653,0.21638761296,0.216481214278,0.216574813606,0.216668410944,0.216762006289,0.216855599643,0.216949191003,0.217042780369,0.217136367739,0.217229953114,0.217323536493,0.217417117873,0.217510697256,0.217604274638,0.217697850021,0.217791423403,0.217884994783,0.21797856416,0.218072131533,0.218165696902,0.218259260266,0.218352821623,0.218446380974,0.218539938316,0.21863349365,0.218727046974,0.218820598288,0.21891414759,0.21900769488,0.219101240157,0.21919478342,0.219288324668,0.219381863901,0.219475401117,0.219568936315,0.219662469496,0.219756000657,0.219849529799,0.219943056919,0.220036582018,0.220130105095,0.220223626148,0.220317145177,0.22041066218,0.220504177158,0.220597690109,0.220691201032,0.220784709927,0.220878216792,0.220971721627,0.221065224431,0.221158725203,0.221252223942,0.221345720647,0.221439215318,0.221532707953,0.221626198552,0.221719687114,0.221813173638,0.221906658123,0.222000140568,0.222093620973,0.222187099337,0.222280575658,0.222374049935,0.222467522169,0.222560992358,0.222654460502,0.222747926598,0.222841390647,0.222934852648,0.2230283126,0.223121770502,0.223215226353,0.223308680152,0.223402131898,0.223495581591,0.22358902923,0.223682474813,0.223775918341,0.223869359811,0.223962799224,0.224056236578,0.224149671873,0.224243105107,0.22433653628,0.224429965392,0.22452339244,0.224616817424,0.224710240344,0.224803661198,0.224897079986,0.224990496707,0.22508391136,0.225177323944,0.225270734458,0.225364142901,0.225457549273,0.225550953572,0.225644355799,0.225737755951,0.225831154028,0.22592455003,0.226017943954,0.226111335802,0.226204725571,0.22629811326,0.22639149887,0.226484882399,0.226578263846,0.22667164321,0.226765020491,0.226858395687,0.226951768798,0.227045139823,0.227138508761,0.227231875611,0.227325240373,0.227418603045,0.227511963627,0.227605322117,0.227698678516,0.227792032821,0.227885385033,0.22797873515,0.228072083171,0.228165429096,0.228258772924,0.228352114653,0.228445454284,0.228538791815,0.228632127245,0.228725460574,0.2288187918,0.228912120923,0.229005447942,0.229098772856,0.229192095664,0.229285416365,0.229378734959,0.229472051444,0.229565365821,0.229658678087,0.229751988242,0.229845296285,0.229938602216,0.230031906033,0.230125207735,0.230218507323,0.230311804794,0.230405100148,0.230498393385,0.230591684502,0.230684973501,0.230778260378,0.230871545135,0.230964827769,0.231058108281,0.231151386668,0.231244662931,0.231337937069,0.231431209079,0.231524478963,0.231617746719,0.231711012345,0.231804275842,0.231897537208,0.231990796442,0.232084053545,0.232177308513,0.232270561348,0.232363812048,0.232457060612,0.232550307039,0.232643551328,0.23273679348,0.232830033492,0.232923271363,0.233016507094,0.233109740683,0.233202972129,0.233296201432,0.233389428591,0.233482653604,0.233575876471,0.233669097191,0.233762315763,0.233855532186,0.23394874646,0.234041958584,0.234135168556,0.234228376376,0.234321582043,0.234414785556,0.234507986915,0.234601186118,0.234694383165,0.234787578054,0.234880770785,0.234973961358,0.23506714977,0.235160336022,0.235253520112,0.23534670204,0.235439881805,0.235533059405,0.23562623484,0.23571940811,0.235812579213,0.235905748149,0.235998914916,0.236092079513,0.236185241941,0.236278402198,0.236371560283,0.236464716195,0.236557869934,0.236651021498,0.236744170887,0.2368373181,0.236930463136,0.237023605994,0.237116746674,0.237209885174,0.237303021494,0.237396155632,0.237489287588,0.237582417362,0.237675544951,0.237768670356,0.237861793575,0.237954914608,0.238048033454,0.238141150112,0.23823426458,0.238327376859,0.238420486948,0.238513594844,0.238606700549,0.23869980406,0.238792905377,0.238886004499,0.238979101425,0.239072196155,0.239165288687,0.239258379021,0.239351467156,0.239444553091,0.239537636824,0.239630718356,0.239723797685,0.239816874811,0.239909949733,0.240003022449,0.240096092959,0.240189161262,0.240282227358,0.240375291244,0.240468352922,0.240561412389,0.240654469645,0.240747524689,0.24084057752,0.240933628137,0.241026676539,0.241119722726,0.241212766697,0.241305808451,0.241398847986,0.241491885303,0.2415849204,0.241677953276,0.241770983931,0.241864012364,0.241957038573,0.242050062558,0.242143084319,0.242236103854,0.242329121162,0.242422136243,0.242515149095,0.242608159718,0.242701168112,0.242794174274,0.242887178205,0.242980179903,0.243073179368,0.243166176599,0.243259171594,0.243352164353,0.243445154876,0.243538143161,0.243631129207,0.243724113014,0.24381709458,0.243910073906,0.24400305099,0.24409602583,0.244188998427,0.24428196878,0.244374936887,0.244467902748,0.244560866362,0.244653827727,0.244746786844,0.244839743712,0.244932698329,0.245025650694,0.245118600807,0.245211548668,0.245304494274,0.245397437625,0.245490378721,0.245583317561,0.245676254142,0.245769188466,0.245862120531,0.245955050336,0.24604797788,0.246140903162,0.246233826182,0.246326746939,0.246419665431,0.246512581659,0.24660549562,0.246698407315,0.246791316742,0.246884223901,0.24697712879,0.247070031409,0.247162931758,0.247255829834,0.247348725638,0.247441619168,0.247534510423,0.247627399404,0.247720286108,0.247813170535,0.247906052685,0.247998932555,0.248091810146,0.248184685457,0.248277558487,0.248370429234,0.248463297698,0.248556163879,0.248649027775,0.248741889385,0.248834748709,0.248927605746,0.249020460494,0.249113312954,0.249206163124,0.249299011003,0.249391856591,0.249484699886,0.249577540889,0.249670379597,0.24976321601,0.249856050127,0.249948881948,0.250041711471,0.250134538696,0.250227363622,0.250320186248,0.250413006573,0.250505824596,0.250598640317,0.250691453734,0.250784264847,0.250877073654,0.250969880156,0.251062684351,0.251155486238,0.251248285816,0.251341083085,0.251433878044,0.251526670692,0.251619461028,0.25171224905,0.25180503476,0.251897818154,0.251990599233,0.252083377996,0.252176154442,0.25226892857,0.25236170038,0.252454469869,0.252547237038,0.252640001886,0.252732764411,0.252825524613,0.252918282492,0.253011038046,0.253103791274,0.253196542175,0.25328929075,0.253382036996,0.253474780913,0.2535675225,0.253660261756,0.253752998681,0.253845733273,0.253938465532,0.254031195457,0.254123923047,0.254216648301,0.254309371219,0.254402091799,0.25449481004,0.254587525942,0.254680239504,0.254772950725,0.254865659605,0.254958366141,0.255051070334,0.255143772183,0.255236471686,0.255329168844,0.255421863654,0.255514556117,0.255607246231,0.255699933995,0.25579261941,0.255885302473,0.255977983184,0.256070661542,0.256163337546,0.256256011196,0.25634868249,0.256441351428,0.256534018009,0.256626682232,0.256719344096,0.2568120036,0.256904660743,0.256997315526,0.257089967946,0.257182618003,0.257275265696,0.257367911024,0.257460553986,0.257553194582,0.257645832811,0.257738468671,0.257831102162,0.257923733283,0.258016362034,0.258108988413,0.258201612419,0.258294234052,0.258386853311,0.258479470195,0.258572084703,0.258664696834,0.258757306588,0.258849913963,0.258942518959,0.259035121575,0.25912772181,0.259220319663,0.259312915133,0.25940550822,0.259498098922,0.259590687239,0.25968327317,0.259775856714,0.25986843787,0.259961016637,0.260053593015,0.260146167003,0.2602387386,0.260331307804,0.260423874615,0.260516439033,0.260609001056,0.260701560684,0.260794117915,0.260886672749,0.260979225186,0.261071775223,0.26116432286,0.261256868097,0.261349410933,0.261441951366,0.261534489397,0.261627025023,0.261719558244,0.26181208906,0.261904617469,0.261997143471,0.262089667065,0.262182188249,0.262274707024,0.262367223388,0.26245973734,0.26255224888,0.262644758006,0.262737264719,0.262829769016,0.262922270897,0.263014770362,0.263107267409,0.263199762037,0.263292254247,0.263384744036,0.263477231404,0.263569716351,0.263662198875,0.263754678975,0.263847156651,0.263939631901,0.264032104726,0.264124575124,0.264217043093,0.264309508635,0.264401971746,0.264494432428,0.264586890678,0.264679346496,0.264771799882,0.264864250833,0.26495669935,0.265049145432,0.265141589077,0.265234030286,0.265326469056,0.265418905387,0.265511339279,0.26560377073,0.26569619974,0.265788626308,0.265881050432,0.265973472113,0.266065891349,0.266158308139,0.266250722483,0.266343134379,0.266435543828,0.266527950827,0.266620355376,0.266712757475,0.266805157122,0.266897554317,0.266989949058,0.267082341345,0.267174731178,0.267267118554,0.267359503474,0.267451885937,0.267544265941,0.267636643486,0.26772901857,0.267821391194,0.267913761356,0.268006129056,0.268098494292,0.268190857063,0.26828321737,0.268375575211,0.268467930584,0.26856028349,0.268652633928,0.268744981896,0.268837327394,0.26892967042,0.269022010975,0.269114349057,0.269206684665,0.269299017799,0.269391348458,0.26948367664,0.269576002346,0.269668325573,0.269760646322,0.269852964591,0.269945280379,0.270037593687,0.270129904512,0.270222212854,0.270314518713,0.270406822087,0.270499122975,0.270591421377,0.270683717291,0.270776010718,0.270868301656,0.270960590104,0.271052876061,0.271145159527,0.2712374405,0.271329718981,0.271421994967,0.271514268459,0.271606539455,0.271698807954,0.271791073956,0.271883337459,0.271975598464,0.272067856969,0.272160112972,0.272252366475,0.272344617474,0.272436865971,0.272529111963,0.27262135545,0.272713596431,0.272805834906,0.272898070873,0.272990304331,0.273082535281,0.27317476372,0.273266989648,0.273359213064,0.273451433968,0.273543652358,0.273635868234,0.273728081595,0.27382029244,0.273912500767,0.274004706577,0.274096909869,0.274189110641,0.274281308892,0.274373504623,0.274465697831,0.274557888517,0.274650076679,0.274742262317,0.274834445429,0.274926626015,0.275018804074,0.275110979605,0.275203152607,0.275295323079,0.275387491021,0.275479656432,0.275571819311,0.275663979657,0.275756137468,0.275848292746,0.275940445487,0.276032595692,0.27612474336,0.27621688849,0.276309031081,0.276401171132,0.276493308643,0.276585443612,0.276677576039,0.276769705923,0.276861833262,0.276953958057,0.277046080306,0.277138200009,0.277230317164,0.277322431771,0.277414543828,0.277506653336,0.277598760293,0.277690864699,0.277782966552,0.277875065852,0.277967162597,0.278059256787,0.278151348422,0.2782434375,0.27833552402,0.278427607982,0.278519689385,0.278611768228,0.278703844509,0.278795918229,0.278887989387,0.27898005798,0.27907212401,0.279164187474,0.279256248372,0.279348306704,0.279440362467,0.279532415663,0.279624466288,0.279716514344,0.279808559828,0.279900602741,0.27999264308,0.280084680846,0.280176716038,0.280268748654,0.280360778694,0.280452806157,0.280544831042,0.280636853349,0.280728873076,0.280820890222,0.280912904788,0.281004916771,0.281096926171,0.281188932988,0.281280937219,0.281372938866,0.281464937926,0.281556934399,0.281648928284,0.28174091958,0.281832908286,0.281924894402,0.282016877926,0.282108858858,0.282200837197,0.282292812942,0.282384786093,0.282476756647,0.282568724606,0.282660689967,0.282752652729,0.282844612893,0.282936570457,0.28302852542,0.283120477782,0.283212427541,0.283304374697,0.283396319249,0.283488261197,0.283580200538,0.283672137273,0.2837640714,0.283856002919,0.283947931829,0.284039858129,0.284131781818,0.284223702895,0.28431562136,0.284407537211,0.284499450449,0.284591361071,0.284683269077,0.284775174466,0.284867077238,0.284958977392,0.285050874926,0.28514276984,0.285234662133,0.285326551805,0.285418438853,0.285510323278,0.285602205079,0.285694084255,0.285785960804,0.285877834727,0.285969706022,0.286061574688,0.286153440725,0.286245304132,0.286337164908,0.286429023051,0.286520878562,0.286612731439,0.286704581682,0.286796429289,0.286888274261,0.286980116595,0.287071956291,0.287163793349,0.287255627767,0.287347459545,0.287439288681,0.287531115176,0.287622939027,0.287714760235,0.287806578798,0.287898394715,0.287990207987,0.288082018611,0.288173826587,0.288265631915,0.288357434592,0.288449234619,0.288541031995,0.288632826719,0.288724618789,0.288816408206,0.288908194968,0.288999979074,0.289091760524,0.289183539317,0.289275315451,0.289367088927,0.289458859743,0.289550627898,0.289642393391,0.289734156223,0.289825916391,0.289917673895,0.290009428734,0.290101180908,0.290192930415,0.290284677254,0.290376421426,0.290468162928,0.290559901761,0.290651637922,0.290743371412,0.29083510223,0.290926830374,0.291018555844,0.291110278639,0.291201998759,0.291293716201,0.291385430966,0.291477143053,0.291568852461,0.291660559188,0.291752263235,0.2918439646,0.291935663282,0.292027359281,0.292119052596,0.292210743226,0.292302431169,0.292394116426,0.292485798996,0.292577478876,0.292669156068,0.292760830569,0.29285250238,0.292944171498,0.293035837924,0.293127501656,0.293219162694,0.293310821037,0.293402476684,0.293494129634,0.293585779886,0.293677427439,0.293769072293,0.293860714447,0.2939523539,0.29404399065,0.294135624698,0.294227256043,0.294318884683,0.294410510617,0.294502133846,0.294593754367,0.294685372181,0.294776987285,0.294868599681,0.294960209366,0.295051816339,0.295143420601,0.29523502215,0.295326620985,0.295418217106,0.295509810511,0.295601401199,0.295692989171,0.295784574425,0.29587615696,0.295967736775,0.29605931387,0.296150888244,0.296242459895,0.296334028823,0.296425595028,0.296517158508,0.296608719262,0.29670027729,0.296791832591,0.296883385164,0.296974935008,0.297066482122,0.297158026505,0.297249568157,0.297341107077,0.297432643264,0.297524176717,0.297615707435,0.297707235418,0.297798760664,0.297890283172,0.297981802943,0.298073319974,0.298164834266,0.298256345817,0.298347854627,0.298439360694,0.298530864018,0.298622364598,0.298713862433,0.298805357523,0.298896849865,0.298988339461,0.299079826308,0.299171310406,0.299262791754,0.299354270352,0.299445746198,0.299537219291,0.299628689631,0.299720157217,0.299811622048,0.299903084124,0.299994543442,0.300086000003,0.300177453806,0.30026890485,0.300360353133,0.300451798656,0.300543241417,0.300634681416,0.300726118651,0.300817553122,0.300908984828,0.301000413768,0.301091839941,0.301183263347,0.301274683984,0.301366101852,0.30145751695,0.301548929277,0.301640338833,0.301731745615,0.301823149625,0.301914550859,0.302005949319,0.302097345003,0.30218873791,0.302280128039,0.30237151539,0.302462899962,0.302554281753,0.302645660763,0.302737036992,0.302828410438,0.3029197811,0.303011148978,0.30310251407,0.303193876377,0.303285235897,0.303376592629,0.303467946572,0.303559297726,0.30365064609,0.303741991662,0.303833334443,0.303924674431,0.304016011625,0.304107346025,0.30419867763,0.304290006438,0.30438133245,0.304472655663,0.304563976079,0.304655293694,0.304746608509,0.304837920523,0.304929229735,0.305020536145,0.30511183975,0.305203140551,0.305294438547,0.305385733736,0.305477026119,0.305568315693,0.305659602459,0.305750886415,0.305842167561,0.305933445896,0.306024721418,0.306115994128,0.306207264024,0.306298531105,0.306389795371,0.30648105682,0.306572315453,0.306663571267,0.306754824263,0.306846074439,0.306937321795,0.307028566329,0.307119808042,0.307211046931,0.307302282996,0.307393516237,0.307484746652,0.307575974241,0.307667199003,0.307758420937,0.307849640042,0.307940856317,0.308032069761,0.308123280375,0.308214488156,0.308305693104,0.308396895218,0.308488094498,0.308579290942,0.308670484549,0.308761675319,0.308852863252,0.308944048345,0.309035230598,0.309126410011,0.309217586583,0.309308760312,0.309399931198,0.309491099241,0.309582264438,0.30967342679,0.309764586295,0.309855742954,0.309946896764,0.310038047725,0.310129195836,0.310220341096,0.310311483506,0.310402623062,0.310493759766,0.310584893616,0.31067602461,0.31076715275,0.310858278032,0.310949400458,0.311040520025,0.311131636733,0.311222750581,0.311313861569,0.311404969695,0.311496074958,0.311587177359,0.311678276895,0.311769373567,0.311860467372,0.311951558312,0.312042646384,0.312133731587,0.312224813922,0.312315893386,0.31240696998,0.312498043703,0.312589114553,0.312680182529,0.312771247632,0.31286230986,0.312953369212,0.313044425687,0.313135479285,0.313226530004,0.313317577845,0.313408622805,0.313499664885,0.313590704083,0.313681740399,0.313772773831,0.31386380438,0.313954832043,0.31404585682,0.314136878711,0.314227897714,0.314318913829,0.314409927055,0.314500937391,0.314591944836,0.31468294939,0.314773951051,0.314864949818,0.314955945692,0.31504693867,0.315137928753,0.315228915938,0.315319900227,0.315410881617,0.315501860108,0.315592835698,0.315683808388,0.315774778176,0.315865745062,0.315956709045,0.316047670123,0.316138628296,0.316229583563,0.316320535923,0.316411485376,0.316502431921,0.316593375556,0.316684316281,0.316775254096,0.316866188998,0.316957120989,0.317048050065,0.317138976228,0.317229899475,0.317320819806,0.317411737221,0.317502651718,0.317593563297,0.317684471956,0.317775377696,0.317866280514,0.317957180411,0.318048077385,0.318138971436,0.318229862562,0.318320750763,0.318411636039,0.318502518387,0.318593397808,0.318684274301,0.318775147864,0.318866018497,0.318956886199,0.31904775097,0.319138612808,0.319229471712,0.319320327682,0.319411180717,0.319502030816,0.319592877978,0.319683722203,0.319774563489,0.319865401836,0.319956237242,0.320047069708,0.320137899232,0.320228725813,0.320319549451,0.320410370144,0.320501187893,0.320592002695,0.320682814551,0.320773623458,0.320864429418,0.320955232428,0.321046032488,0.321136829597,0.321227623754,0.321318414958,0.321409203209,0.321499988506,0.321590770847,0.321681550233,0.321772326662,0.321863100133,0.321953870645,0.322044638198,0.322135402791,0.322226164423,0.322316923094,0.322407678801,0.322498431545,0.322589181325,0.322679928139,0.322770671988,0.322861412869,0.322952150783,0.323042885729,0.323133617705,0.323224346711,0.323315072746,0.323405795809,0.3234965159,0.323587233016,0.323677947159,0.323768658326,0.323859366518,0.323950071732,0.324040773969,0.324131473228,0.324222169507,0.324312862805,0.324403553123,0.324494240459,0.324584924813,0.324675606182,0.324766284568,0.324856959968,0.324947632382,0.32503830181,0.325128968249,0.3252196317,0.325310292162,0.325400949634,0.325491604115,0.325582255603,0.325672904099,0.325763549602,0.32585419211,0.325944831623,0.32603546814,0.326126101661,0.326216732183,0.326307359707,0.326397984232,0.326488605756,0.32657922428,0.326669839801,0.32676045232,0.326851061836,0.326941668347,0.327032271853,0.327122872352,0.327213469845,0.327304064331,0.327394655808,0.327485244275,0.327575829733,0.327666412179,0.327756991613,0.327847568035,0.327938141443,0.328028711837,0.328119279216,0.328209843579,0.328300404925,0.328390963253,0.328481518563,0.328572070854,0.328662620124,0.328753166373,0.328843709601,0.328934249806,0.329024786987,0.329115321144,0.329205852276,0.329296380382,0.329386905461,0.329477427512,0.329567946535,0.329658462529,0.329748975492,0.329839485424,0.329929992325,0.330020496193,0.330110997028,0.330201494828,0.330291989593,0.330382481322,0.330472970014,0.330563455669,0.330653938285,0.330744417862,0.330834894399,0.330925367895,0.331015838349,0.33110630576,0.331196770128,0.331287231451,0.33137768973,0.331468144962,0.331558597148,0.331649046286,0.331739492376,0.331829935416,0.331920375407,0.332010812346,0.332101246234,0.332191677069,0.33228210485,0.332372529578,0.33246295125,0.332553369866,0.332643785426,0.332734197927,0.332824607371,0.332915013755,0.333005417079,0.333095817343,0.333186214544,0.333276608683,0.333366999759,0.33345738777,0.333547772716,0.333638154596,0.33372853341,0.333818909156,0.333909281834,0.333999651442,0.33409001798,0.334180381448,0.334270741844,0.334361099167,0.334451453417,0.334541804592,0.334632152693,0.334722497718,0.334812839666,0.334903178536,0.334993514328,0.335083847041,0.335174176674,0.335264503226,0.335354826697,0.335445147085,0.335535464389,0.335625778609,0.335716089745,0.335806397794,0.335896702757,0.335987004633,0.33607730342,0.336167599118,0.336257891726,0.336348181243,0.336438467668,0.336528751001,0.336619031241,0.336709308387,0.336799582437,0.336889853392,0.33698012125,0.337070386011,0.337160647674,0.337250906237,0.337341161701,0.337431414063,0.337521663324,0.337611909483,0.337702152538,0.33779239249,0.337882629336,0.337972863077,0.338063093711,0.338153321238,0.338243545656,0.338333766966,0.338423985165,0.338514200254,0.338604412231,0.338694621096,0.338784826848,0.338875029485,0.338965229008,0.339055425415,0.339145618705,0.339235808879,0.339325995934,0.33941617987,0.339506360686,0.339596538381,0.339686712955,0.339776884407,0.339867052735,0.33995721794,0.340047380019,0.340137538974,0.340227694801,0.340317847501,0.340407997074,0.340498143517,0.34058828683,0.340678427013,0.340768564064,0.340858697983,0.340948828769,0.341038956421,0.341129080939,0.34121920232,0.341309320566,0.341399435674,0.341489547644,0.341579656475,0.341669762166,0.341759864717,0.341849964126,0.341940060393,0.342030153518,0.342120243498,0.342210330333,0.342300414024,0.342390494567,0.342480571964,0.342570646212,0.342660717312,0.342750785262,0.342840850062,0.34293091171,0.343020970206,0.343111025549,0.343201077738,0.343291126773,0.343381172652,0.343471215375,0.343561254941,0.343651291349,0.343741324598,0.343831354687,0.343921381616,0.344011405384,0.34410142599,0.344191443433,0.344281457712,0.344371468826,0.344461476776,0.344551481559,0.344641483174,0.344731481622,0.344821476902,0.344911469012,0.345001457951,0.345091443719,0.345181426316,0.345271405739,0.345361381989,0.345451355064,0.345541324964,0.345631291688,0.345721255235,0.345811215604,0.345901172794,0.345991126805,0.346081077636,0.346171025285,0.346260969753,0.346350911038,0.346440849139,0.346530784056,0.346620715788,0.346710644334,0.346800569692,0.346890491863,0.346980410846,0.347070326639,0.347160239242,0.347250148654,0.347340054874,0.347429957901,0.347519857735,0.347609754375,0.347699647819,0.347789538067,0.347879425119,0.347969308973,0.348059189629,0.348149067085,0.348238941341,0.348328812396,0.348418680249,0.3485085449,0.348598406348,0.348688264591,0.348778119629,0.348867971461,0.348957820087,0.349047665505,0.349137507714,0.349227346714,0.349317182505,0.349407015084,0.349496844452,0.349586670607,0.349676493549,0.349766313277,0.34985612979,0.349945943087,0.350035753168,0.350125560031,0.350215363675,0.350305164101,0.350394961307,0.350484755292,0.350574546055,0.350664333596,0.350754117913,0.350843899007,0.350933676876,0.351023451519,0.351113222935,0.351202991125,0.351292756086,0.351382517818,0.35147227632,0.351562031591,0.351651783631,0.351741532439,0.351831278013,0.351921020354,0.35201075946,0.35210049533,0.352190227964,0.35227995736,0.352369683519,0.352459406438,0.352549126118,0.352638842557,0.352728555755,0.352818265711,0.352907972424,0.352997675892,0.353087376116,0.353177073095,0.353266766827,0.353356457312,0.353446144549,0.353535828538,0.353625509277,0.353715186765,0.353804861002,0.353894531987,0.353984199719,0.354073864197,0.35416352542,0.354253183389,0.354342838101,0.354432489556,0.354522137753,0.354611782691,0.35470142437,0.354791062789,0.354880697946,0.354970329842,0.355059958474,0.355149583843,0.355239205948,0.355328824787,0.35541844036,0.355508052666,0.355597661705,0.355687267475,0.355776869975,0.355866469205,0.355956065165,0.356045657852,0.356135247267,0.356224833408,0.356314416274,0.356403995866,0.356493572182,0.35658314522,0.356672714982,0.356762281464,0.356851844668,0.356941404591,0.357030961233,0.357120514594,0.357210064672,0.357299611467,0.357389154977,0.357478695203,0.357568232142,0.357657765795,0.35774729616,0.357836823237,0.357926347025,0.358015867523,0.35810538473,0.358194898645,0.358284409268,0.358373916598,0.358463420634,0.358552921374,0.358642418819,0.358731912968,0.358821403819,0.358910891371,0.359000375625,0.359089856579,0.359179334232,0.359268808584,0.359358279633,0.35944774738,0.359537211822,0.359626672959,0.359716130791,0.359805585317,0.359895036535,0.359984484445,0.360073929046,0.360163370338,0.360252808319,0.360342242988,0.360431674346,0.36052110239,0.360610527121,0.360699948537,0.360789366637,0.360878781421,0.360968192888,0.361057601037,0.361147005867,0.361236407378,0.361325805568,0.361415200438,0.361504591985,0.361593980209,0.361683365109,0.361772746685,0.361862124936,0.36195149986,0.362040871458,0.362130239727,0.362219604668,0.36230896628,0.362398324561,0.362487679511,0.36257703113,0.362666379415,0.362755724367,0.362845065985,0.362934404268,0.363023739214,0.363113070824,0.363202399096,0.363291724029,0.363381045623,0.363470363877,0.36355967879,0.363648990362,0.363738298591,0.363827603476,0.363916905017,0.364006203213,0.364095498064,0.364184789567,0.364274077723,0.364363362531,0.364452643989,0.364541922098,0.364631196856,0.364720468262,0.364809736316,0.364899001016,0.364988262363,0.365077520354,0.36516677499,0.365256026269,0.365345274191,0.365434518755,0.36552375996,0.365612997805,0.365702232289,0.365791463412,0.365880691173,0.36596991557,0.366059136604,0.366148354272,0.366237568576,0.366326779513,0.366415987082,0.366505191284,0.366594392117,0.36668358958,0.366772783673,0.366861974394,0.366951161743,0.36704034572,0.367129526322,0.36721870355,0.367307877403,0.367397047879,0.367486214979,0.3675753787,0.367664539043,0.367753696007,0.36784284959,0.367931999792,0.368021146612,0.368110290049,0.368199430102,0.368288566771,0.368377700055,0.368466829953,0.368555956464,0.368645079588,0.368734199323,0.368823315668,0.368912428624,0.369001538188,0.369090644361,0.369179747141,0.369268846527,0.36935794252,0.369447035117,0.369536124318,0.369625210123,0.36971429253,0.369803371539,0.369892447149,0.369981519359,0.370070588168,0.370159653575,0.37024871558,0.370337774182,0.370426829379,0.370515881172,0.370604929559,0.37069397454,0.370783016113,0.370872054278,0.370961089034,0.37105012038,0.371139148316,0.37122817284,0.371317193952,0.371406211651,0.371495225936,0.371584236806,0.371673244261,0.371762248299,0.37185124892,0.371940246124,0.372029239908,0.372118230273,0.372207217218,0.372296200741,0.372385180842,0.37247415752,0.372563130775,0.372652100605,0.37274106701,0.372830029988,0.37291898954,0.373007945663,0.373096898359,0.373185847624,0.37327479346,0.373363735864,0.373452674837,0.373541610377,0.373630542483,0.373719471155,0.373808396392,0.373897318193,0.373986236557,0.374075151483,0.374164062971,0.37425297102,0.374341875629,0.374430776797,0.374519674523,0.374608568807,0.374697459647,0.374786347044,0.374875230995,0.374964111501,0.37505298856,0.375141862171,0.375230732334,0.375319599049,0.375408462313,0.375497322127,0.375586178489,0.375675031399,0.375763880856,0.375852726859,0.375941569407,0.3760304085,0.376119244136,0.376208076315,0.376296905036,0.376385730298,0.3764745521,0.376563370442,0.376652185323,0.376740996741,0.376829804697,0.376918609189,0.377007410216,0.377096207778,0.377185001874,0.377273792503,0.377362579664,0.377451363356,0.377540143579,0.377628920332,0.377717693613,0.377806463423,0.37789522976,0.377983992623,0.378072752012,0.378161507926,0.378250260364,0.378339009325,0.378427754809,0.378516496814,0.37860523534,0.378693970385,0.37878270195,0.378871430034,0.378960154634,0.379048875752,0.379137593385,0.379226307533,0.379315018196,0.379403725372,0.37949242906,0.37958112926,0.379669825972,0.379758519193,0.379847208924,0.379935895163,0.38002457791,0.380113257164,0.380201932924,0.38029060519,0.380379273959,0.380467939233,0.380556601009,0.380645259287,0.380733914067,0.380822565346,0.380911213126,0.380999857404,0.38108849818,0.381177135453,0.381265769222,0.381354399487,0.381443026247,0.3815316495,0.381620269247,0.381708885485,0.381797498215,0.381886107436,0.381974713147,0.382063315346,0.382151914034,0.382240509209,0.38232910087,0.382417689017,0.382506273649,0.382594854766,0.382683432365,0.382772006447,0.382860577011,0.382949144055,0.383037707579,0.383126267583,0.383214824065,0.383303377024,0.383391926461,0.383480472373,0.38356901476,0.383657553622,0.383746088957,0.383834620765,0.383923149045,0.384011673796,0.384100195017,0.384188712707,0.384277226867,0.384365737494,0.384454244587,0.384542748148,0.384631248173,0.384719744663,0.384808237617,0.384896727034,0.384985212912,0.385073695252,0.385162174053,0.385250649313,0.385339121032,0.38542758921,0.385516053844,0.385604514935,0.385692972481,0.385781426482,0.385869876938,0.385958323846,0.386046767207,0.386135207019,0.386223643282,0.386312075995,0.386400505157,0.386488930767,0.386577352825,0.386665771329,0.38675418628,0.386842597675,0.386931005514,0.387019409797,0.387107810523,0.38719620769,0.387284601299,0.387372991347,0.387461377835,0.387549760761,0.387638140125,0.387726515926,0.387814888164,0.387903256836,0.387991621943,0.388079983483,0.388168341457,0.388256695862,0.388345046699,0.388433393966,0.388521737663,0.388610077788,0.388698414342,0.388786747322,0.388875076729,0.388963402562,0.389051724819,0.3891400435,0.389228358604,0.389316670131,0.389404978079,0.389493282448,0.389581583236,0.389669880444,0.38975817407,0.389846464113,0.389934750573,0.390023033449,0.39011131274,0.390199588444,0.390287860563,0.390376129094,0.390464394036,0.39055265539,0.390640913153,0.390729167326,0.390817417908,0.390905664897,0.390993908293,0.391082148095,0.391170384302,0.391258616914,0.391346845929,0.391435071348,0.391523293168,0.391611511389,0.391699726011,0.391787937033,0.391876144453,0.391964348271,0.392052548486,0.392140745098,0.392228938105,0.392317127507,0.392405313303,0.392493495492,0.392581674073,0.392669849046,0.392758020409,0.392846188162,0.392934352304,0.393022512835,0.393110669753,0.393198823057,0.393286972747,0.393375118823,0.393463261282,0.393551400125,0.39363953535,0.393727666957,0.393815794945,0.393903919314,0.393992040061,0.394080157187,0.394168270691,0.394256380571,0.394344486828,0.39443258946,0.394520688466,0.394608783847,0.394696875599,0.394784963724,0.394873048221,0.394961129087,0.395049206323,0.395137279928,0.395225349901,0.395313416241,0.395401478948,0.39548953802,0.395577593457,0.395665645257,0.395753693421,0.395841737947,0.395929778835,0.396017816083,0.396105849692,0.396193879659,0.396281905985,0.396369928668,0.396457947707,0.396545963103,0.396633974854,0.396721982958,0.396809987417,0.396897988228,0.39698598539,0.397073978904,0.397161968768,0.397249954981,0.397337937543,0.397425916452,0.397513891709,0.397601863311,0.397689831259,0.397777795552,0.397865756188,0.397953713167,0.398041666488,0.39812961615,0.398217562153,0.398305504496,0.398393443177,0.398481378197,0.398569309554,0.398657237247,0.398745161276,0.398833081639,0.398920998337,0.399008911368,0.399096820731,0.399184726426,0.399272628452,0.399360526807,0.399448421492,0.399536312505,0.399624199846,0.399712083513,0.399799963506,0.399887839825,0.399975712468,0.400063581434,0.400151446723,0.400239308334,0.400327166266,0.400415020518,0.40050287109,0.40059071798,0.400678561188,0.400766400714,0.400854236555,0.400942068712,0.401029897184,0.401117721969,0.401205543067,0.401293360478,0.4013811742,0.401468984233,0.401556790575,0.401644593226,0.401732392186,0.401820187453,0.401907979026,0.401995766905,0.40208355109,0.402171331578,0.402259108369,0.402346881464,0.402434650859,0.402522416556,0.402610178553,0.402697936849,0.402785691444,0.402873442336,0.402961189525,0.40304893301,0.403136672791,0.403224408866,0.403312141235,0.403399869896,0.403487594849,0.403575316094,0.403663033629,0.403750747454,0.403838457568,0.403926163969,0.404013866658,0.404101565633,0.404189260894,0.404276952439,0.404364640269,0.404452324382,0.404540004777,0.404627681453,0.40471535441,0.404803023648,0.404890689164,0.404978350959,0.405066009031,0.40515366338,0.405241314005,0.405328960905,0.405416604079,0.405504243527,0.405591879248,0.40567951124,0.405767139503,0.405854764037,0.40594238484,0.406030001912,0.406117615252,0.406205224859,0.406292830732,0.40638043287,0.406468031273,0.40655562594,0.40664321687,0.406730804063,0.406818387516,0.40690596723,0.406993543204,0.407081115438,0.407168683929,0.407256248677,0.407343809683,0.407431366944,0.40751892046,0.40760647023,0.407694016253,0.407781558529,0.407869097057,0.407956631836,0.408044162865,0.408131690143,0.40821921367,0.408306733445,0.408394249466,0.408481761734,0.408569270247,0.408656775004,0.408744276005,0.40883177325,0.408919266736,0.409006756463,0.409094242431,0.409181724639,0.409269203086,0.40935667777,0.409444148692,0.409531615851,0.409619079245,0.409706538874,0.409793994737,0.409881446833,0.409968895162,0.410056339722,0.410143780514,0.410231217535,0.410318650785,0.410406080264,0.410493505971,0.410580927905,0.410668346064,0.410755760449,0.410843171058,0.410930577891,0.411017980946,0.411105380224,0.411192775723,0.411280167442,0.411367555381,0.411454939538,0.411542319914,0.411629696507,0.411717069316,0.41180443834,0.41189180358,0.411979165034,0.4120665227,0.412153876579,0.41224122667,0.412328572971,0.412415915483,0.412503254203,0.412590589132,0.412677920268,0.412765247612,0.412852571161,0.412939890915,0.413027206874,0.413114519036,0.413201827401,0.413289131968,0.413376432736,0.413463729704,0.413551022872,0.413638312238,0.413725597803,0.413812879565,0.413900157523,0.413987431676,0.414074702024,0.414161968566,0.414249231301,0.414336490229,0.414423745348,0.414510996658,0.414598244157,0.414685487846,0.414772727723,0.414859963788,0.414947196039,0.415034424476,0.415121649098,0.415208869905,0.415296086895,0.415383300068,0.415470509422,0.415557714958,0.415644916674,0.415732114569,0.415819308643,0.415906498895,0.415993685324,0.41608086793,0.41616804671,0.416255221666,0.416342392795,0.416429560098,0.416516723572,0.416603883218,0.416691039035,0.416778191022,0.416865339178,0.416952483502,0.417039623993,0.417126760651,0.417213893475,0.417301022464,0.417388147618,0.417475268935,0.417562386414,0.417649500055,0.417736609858,0.41782371582,0.417910817942,0.417997916223,0.418085010662,0.418172101257,0.418259188009,0.418346270916,0.418433349978,0.418520425194,0.418607496563,0.418694564084,0.418781627757,0.41886868758,0.418955743553,0.419042795675,0.419129843945,0.419216888363,0.419303928928,0.419390965638,0.419477998493,0.419565027493,0.419652052636,0.419739073922,0.419826091349,0.419913104918,0.420000114627,0.420087120475,0.420174122462,0.420261120587,0.420348114849,0.420435105247,0.42052209178,0.420609074448,0.42069605325,0.420783028186,0.420869999253,0.420956966452,0.421043929781,0.42113088924,0.421217844829,0.421304796545,0.42139174439,0.42147868836,0.421565628457,0.421652564679,0.421739497024,0.421826425494,0.421913350086,0.4220002708,0.422087187635,0.42217410059,0.422261009665,0.422347914858,0.422434816169,0.422521713598,0.422608607142,0.422695496802,0.422782382577,0.422869264466,0.422956142467,0.423043016581,0.423129886807,0.423216753143,0.423303615589,0.423390474144,0.423477328807,0.423564179578,0.423651026456,0.423737869439,0.423824708528,0.42391154372,0.423998375017,0.424085202416,0.424172025917,0.424258845519,0.424345661221,0.424432473023,0.424519280923,0.424606084922,0.424692885017,0.424779681209,0.424866473496,0.424953261879,0.425040046355,0.425126826924,0.425213603585,0.425300376338,0.425387145182,0.425473910116,0.425560671138,0.42564742825,0.425734181448,0.425820930734,0.425907676105,0.425994417562,0.426081155102,0.426167888727,0.426254618434,0.426341344223,0.426428066093,0.426514784044,0.426601498074,0.426688208183,0.42677491437,0.426861616634,0.426948314975,0.427035009391,0.427121699882,0.427208386447,0.427295069085,0.427381747795,0.427468422577,0.42755509343,0.427641760353,0.427728423345,0.427815082406,0.427901737534,0.427988388729,0.42807503599,0.428161679316,0.428248318707,0.428334954161,0.428421585678,0.428508213257,0.428594836897,0.428681456598,0.428768072359,0.428854684178,0.428941292055,0.42902789599,0.429114495981,0.429201092028,0.42928768413,0.429374272285,0.429460856494,0.429547436756,0.429634013069,0.429720585433,0.429807153847,0.429893718311,0.429980278823,0.430066835383,0.430153387989,0.430239936642,0.43032648134,0.430413022083,0.430499558869,0.430586091698,0.43067262057,0.430759145483,0.430845666436,0.430932183429,0.431018696461,0.431105205531,0.431191710639,0.431278211783,0.431364708963,0.431451202178,0.431537691427,0.43162417671,0.431710658025,0.431797135372,0.43188360875,0.431970078158,0.432056543596,0.432143005062,0.432229462556,0.432315916077,0.432402365625,0.432488811198,0.432575252795,0.432661690416,0.432748124061,0.432834553727,0.432920979416,0.433007401124,0.433093818853,0.433180232601,0.433266642367,0.433353048151,0.433439449951,0.433525847767,0.433612241599,0.433698631444,0.433785017304,0.433871399176,0.43395777706,0.434044150955,0.43413052086,0.434216886775,0.434303248699,0.434389606631,0.43447596057,0.434562310515,0.434648656466,0.434734998422,0.434821336381,0.434907670344,0.43499400031,0.435080326277,0.435166648245,0.435252966213,0.43533928018,0.435425590145,0.435511896108,0.435598198069,0.435684496025,0.435770789976,0.435857079922,0.435943365862,0.436029647794,0.436115925719,0.436202199635,0.436288469542,0.436374735438,0.436460997323,0.436547255196,0.436633509057,0.436719758904,0.436806004737,0.436892246555,0.436978484357,0.437064718143,0.437150947911,0.437237173661,0.437323395392,0.437409613103,0.437495826794,0.437582036463,0.43766824211,0.437754443734,0.437840641334,0.43792683491,0.438013024461,0.438099209985,0.438185391483,0.438271568952,0.438357742394,0.438443911806,0.438530077188,0.438616238539,0.438702395858,0.438788549145,0.438874698398,0.438960843618,0.439046984803,0.439133121952,0.439219255065,0.43930538414,0.439391509178,0.439477630176,0.439563747135,0.439649860054,0.439735968932,0.439822073767,0.43990817456,0.43999427131,0.440080364015,0.440166452675,0.440252537288,0.440338617856,0.440424694375,0.440510766847,0.440596835269,0.440682899642,0.440768959964,0.440855016234,0.440941068452,0.441027116617,0.441113160729,0.441199200785,0.441285236787,0.441371268732,0.44145729662,0.44154332045,0.441629340222,0.441715355934,0.441801367586,0.441887375178,0.441973378707,0.442059378174,0.442145373578,0.442231364918,0.442317352192,0.442403335401,0.442489314544,0.442575289619,0.442661260626,0.442747227565,0.442833190433,0.442919149232,0.443005103959,0.443091054614,0.443177001196,0.443262943705,0.443348882139,0.443434816498,0.443520746781,0.443606672988,0.443692595117,0.443778513167,0.443864427139,0.44395033703,0.444036242841,0.44412214457,0.444208042218,0.444293935782,0.444379825262,0.444465710657,0.444551591967,0.444637469191,0.444723342328,0.444809211377,0.444895076338,0.444980937209,0.44506679399,0.44515264668,0.445238495278,0.445324339783,0.445410180196,0.445496016514,0.445581848737,0.445667676865,0.445753500896,0.44583932083,0.445925136666,0.446010948403,0.44609675604,0.446182559577,0.446268359013,0.446354154346,0.446439945577,0.446525732705,0.446611515728,0.446697294645,0.446783069457,0.446868840162,0.44695460676,0.447040369249,0.447126127629,0.4472118819,0.447297632059,0.447383378108,0.447469120043,0.447554857866,0.447640591575,0.44772632117,0.447812046649,0.447897768012,0.447983485257,0.448069198386,0.448154907395,0.448240612285,0.448326313055,0.448412009704,0.448497702232,0.448583390637,0.448669074918,0.448754755076,0.448840431109,0.448926103016,0.449011770796,0.44909743445,0.449183093975,0.449268749372,0.449354400639,0.449440047776,0.449525690781,0.449611329655,0.449696964395,0.449782595003,0.449868221476,0.449953843814,0.450039462016,0.450125076081,0.450210686009,0.450296291799,0.450381893449,0.45046749096,0.45055308433,0.450638673559,0.450724258646,0.45080983959,0.45089541639,0.450980989045,0.451066557555,0.451152121919,0.451237682136,0.451323238206,0.451408790127,0.451494337898,0.45157988152,0.451665420991,0.45175095631,0.451836487477,0.451922014491,0.45200753735,0.452093056055,0.452178570605,0.452264080998,0.452349587234,0.452435089312,0.452520587231,0.452606080991,0.452691570591,0.452777056029,0.452862537306,0.45294801442,0.453033487371,0.453118956157,0.453204420779,0.453289881235,0.453375337524,0.453460789646,0.4535462376,0.453631681385,0.453717121,0.453802556445,0.453887987718,0.45397341482,0.454058837749,0.454144256504,0.454229671084,0.45431508149,0.454400487719,0.454485889772,0.454571287647,0.454656681344,0.454742070862,0.4548274562,0.454912837357,0.454998214333,0.455083587126,0.455168955737,0.455254320163,0.455339680406,0.455425036462,0.455510388333,0.455595736016,0.455681079512,0.455766418819,0.455851753937,0.455937084865,0.456022411602,0.456107734148,0.456193052501,0.45627836666,0.456363676626,0.456448982397,0.456534283972,0.456619581351,0.456704874533,0.456790163517,0.456875448302,0.456960728888,0.457046005273,0.457131277457,0.45721654544,0.457301809219,0.457387068796,0.457472324168,0.457557575335,0.457642822297,0.457728065051,0.457813303599,0.457898537938,0.457983768069,0.45806899399,0.4581542157,0.458239433199,0.458324646486,0.45840985556,0.458495060421,0.458580261067,0.458665457498,0.458750649713,0.458835837712,0.458921021492,0.459006201055,0.459091376398,0.459176547522,0.459261714425,0.459346877106,0.459432035566,0.459517189802,0.459602339814,0.459687485602,0.459772627165,0.459857764501,0.459942897611,0.460028026493,0.460113151146,0.46019827157,0.460283387764,0.460368499727,0.460453607459,0.460538710958,0.460623810224,0.460708905256,0.460793996054,0.460879082616,0.460964164941,0.46104924303,0.46113431688,0.461219386492,0.461304451865,0.461389512997,0.461474569888,0.461559622538,0.461644670945,0.461729715108,0.461814755028,0.461899790702,0.461984822131,0.462069849314,0.462154872249,0.462239890936,0.462324905375,0.462409915563,0.462494921502,0.462579923189,0.462664920624,0.462749913807,0.462834902736,0.462919887411,0.463004867831,0.463089843995,0.463174815902,0.463259783552,0.463344746944,0.463429706076,0.463514660949,0.463599611562,0.463684557913,0.463769500002,0.463854437828,0.463939371391,0.464024300689,0.464109225722,0.464194146489,0.464279062989,0.464363975222,0.464448883186,0.464533786881,0.464618686306,0.464703581461,0.464788472344,0.464873358955,0.464958241293,0.465043119357,0.465127993146,0.46521286266,0.465297727898,0.46538258886,0.465467445543,0.465552297948,0.465637146073,0.465721989919,0.465806829484,0.465891664767,0.465976495768,0.466061322486,0.466146144919,0.466230963068,0.466315776932,0.466400586509,0.466485391799,0.466570192802,0.466654989516,0.46673978194,0.466824570074,0.466909353917,0.466994133469,0.467078908728,0.467163679694,0.467248446365,0.467333208742,0.467417966823,0.467502720608,0.467587470095,0.467672215285,0.467756956176,0.467841692767,0.467926425058,0.468011153048,0.468095876736,0.468180596122,0.468265311204,0.468350021982,0.468434728455,0.468519430622,0.468604128483,0.468688822036,0.468773511281,0.468858196217,0.468942876844,0.46902755316,0.469112225165,0.469196892859,0.469281556239,0.469366215306,0.469450870058,0.469535520496,0.469620166617,0.469704808422,0.46978944591,0.469874079079,0.469958707929,0.47004333246,0.47012795267,0.470212568558,0.470297180125,0.470381787369,0.470466390289,0.470550988884,0.470635583155,0.470720173099,0.470804758717,0.470889340007,0.470973916969,0.471058489601,0.471143057904,0.471227621877,0.471312181517,0.471396736826,0.471481287802,0.471565834443,0.471650376751,0.471734914723,0.471819448359,0.471903977658,0.471988502619,0.472073023242,0.472157539526,0.47224205147,0.472326559073,0.472411062335,0.472495561254,0.47258005583,0.472664546063,0.47274903195,0.472833513493,0.472917990689,0.473002463538,0.473086932039,0.473171396192,0.473255855996,0.47334031145,0.473424762552,0.473509209303,0.473593651702,0.473678089748,0.473762523439,0.473846952776,0.473931377757,0.474015798383,0.474100214651,0.474184626561,0.474269034112,0.474353437305,0.474437836137,0.474522230608,0.474606620717,0.474691006464,0.474775387848,0.474859764868,0.474944137522,0.475028505812,0.475112869735,0.47519722929,0.475281584478,0.475365935297,0.475450281747,0.475534623827,0.475618961535,0.475703294872,0.475787623836,0.475871948427,0.475956268643,0.476040584485,0.476124895951,0.476209203041,0.476293505753,0.476377804088,0.476462098044,0.47654638762,0.476630672816,0.47671495363,0.476799230063,0.476883502114,0.47696776978,0.477052033063,0.477136291961,0.477220546473,0.477304796598,0.477389042337,0.477473283687,0.477557520648,0.47764175322,0.477725981401,0.477810205191,0.477894424589,0.477978639595,0.478062850207,0.478147056425,0.478231258248,0.478315455675,0.478399648705,0.478483837338,0.478568021573,0.478652201409,0.478736376845,0.478820547881,0.478904714516,0.478988876749,0.479073034579,0.479157188005,0.479241337027,0.479325481644,0.479409621856,0.47949375766,0.479577889057,0.479662016046,0.479746138626,0.479830256797,0.479914370556,0.479998479905,0.480082584841,0.480166685365,0.480250781475,0.480334873171,0.480418960451,0.480503043316,0.480587121764,0.480671195795,0.480755265407,0.4808393306,0.480923391374,0.481007447727,0.481091499659,0.481175547168,0.481259590255,0.481343628918,0.481427663157,0.48151169297,0.481595718358,0.481679739319,0.481763755852,0.481847767957,0.481931775633,0.482015778879,0.482099777695,0.482183772079,0.482267762031,0.482351747551,0.482435728636,0.482519705287,0.482603677503,0.482687645283,0.482771608626,0.482855567532,0.482939521999,0.483023472027,0.483107417616,0.483191358763,0.48327529547,0.483359227734,0.483443155555,0.483527078933,0.483610997866,0.483694912354,0.483778822396,0.483862727991,0.483946629138,0.484030525837,0.484114418087,0.484198305888,0.484282189237,0.484366068135,0.484449942581,0.484533812574,0.484617678113,0.484701539198,0.484785395827,0.484869248001,0.484953095717,0.485036938976,0.485120777777,0.485204612119,0.485288442,0.485372267421,0.485456088381,0.485539904878,0.485623716912,0.485707524483,0.485791327589,0.48587512623,0.485958920404,0.486042710112,0.486126495353,0.486210276124,0.486294052427,0.48637782426,0.486461591622,0.486545354513,0.486629112932,0.486712866877,0.486796616349,0.486880361346,0.486964101868,0.487047837914,0.487131569483,0.487215296574,0.487299019187,0.487382737321,0.487466450975,0.487550160148,0.48763386484,0.48771756505,0.487801260776,0.487884952019,0.487968638778,0.488052321051,0.488135998838,0.488219672138,0.48830334095,0.488387005274,0.488470665109,0.488554320454,0.488637971309,0.488721617671,0.488805259542,0.48888889692,0.488972529804,0.489056158193,0.489139782087,0.489223401485,0.489307016386,0.48939062679,0.489474232695,0.489557834101,0.489641431007,0.489725023413,0.489808611317,0.489892194719,0.489975773617,0.490059348012,0.490142917903,0.490226483288,0.490310044167,0.49039360054,0.490477152405,0.490560699761,0.490644242608,0.490727780946,0.490811314773,0.490894844088,0.490978368891,0.491061889181,0.491145404957,0.491228916219,0.491312422966,0.491395925197,0.49147942291,0.491562916107,0.491646404784,0.491729888943,0.491813368582,0.4918968437,0.491980314297,0.492063780372,0.492147241923,0.492230698951,0.492314151455,0.492397599433,0.492481042886,0.492564481811,0.492647916209,0.492731346079,0.492814771419,0.49289819223,0.49298160851,0.493065020259,0.493148427475,0.493231830159,0.493315228309,0.493398621924,0.493482011004,0.493565395549,0.493648775556,0.493732151026,0.493815521958,0.493898888351,0.493982250204,0.494065607516,0.494148960287,0.494232308516,0.494315652202,0.494398991344,0.494482325942,0.494565655995,0.494648981502,0.494732302462,0.494815618875,0.494898930739,0.494982238054,0.49506554082,0.495148839035,0.495232132699,0.495315421811,0.49539870637,0.495481986375,0.495565261826,0.495648532722,0.495731799061,0.495815060845,0.495898318071,0.495981570738,0.496064818847,0.496148062396,0.496231301384,0.496314535811,0.496397765677,0.496480990979,0.496564211718,0.496647427893,0.496730639502,0.496813846546,0.496897049023,0.496980246932,0.497063440274,0.497146629046,0.497229813249,0.497312992882,0.497396167943,0.497479338433,0.497562504349,0.497645665692,0.497728822461,0.497811974655,0.497895122273,0.497978265315,0.498061403779,0.498144537665,0.498227666973,0.498310791701,0.498393911848,0.498477027414,0.498560138399,0.4986432448,0.498726346619,0.498809443853,0.498892536502,0.498975624565,0.499058708042,0.499141786932,0.499224861234,0.499307930946,0.49939099607,0.499474056603,0.499557112545,0.499640163895,0.499723210653,0.499806252817,0.499889290387,0.499972323363,0.500055351742,0.500138375526,0.500221394712,0.5003044093,0.50038741929,0.50047042468,0.500553425469,0.500636421658,0.500719413245,0.50080240023,0.500885382611,0.500968360389,0.501051333561,0.501134302128,0.501217266089,0.501300225442,0.501383180188,0.501466130325,0.501549075853,0.50163201677,0.501714953077,0.501797884772,0.501880811855,0.501963734324,0.50204665218,0.50212956542,0.502212474046,0.502295378055,0.502378277447,0.502461172221,0.502544062377,0.502626947914,0.50270982883,0.502792705126,0.5028755768,0.502958443852,0.503041306281,0.503124164086,0.503207017266,0.503289865821,0.50337270975,0.503455549051,0.503538383726,0.503621213772,0.503704039188,0.503786859975,0.503869676131,0.503952487655,0.504035294548,0.504118096807,0.504200894433,0.504283687424,0.50436647578,0.504449259499,0.504532038582,0.504614813028,0.504697582835,0.504780348003,0.504863108531,0.504945864419,0.505028615665,0.505111362269,0.505194104231,0.505276841548,0.505359574222,0.50544230225,0.505525025632,0.505607744367,0.505690458455,0.505773167895,0.505855872686,0.505938572827,0.506021268318,0.506103959158,0.506186645345,0.50626932688,0.506352003761,0.506434675988,0.50651734356,0.506600006476,0.506682664736,0.506765318338,0.506847967282,0.506930611567,0.507013251193,0.507095886158,0.507178516462,0.507261142105,0.507343763084,0.507426379401,0.507508991053,0.50759159804,0.507674200362,0.507756798017,0.507839391005,0.507921979325,0.508004562976,0.508087141958,0.50816971627,0.50825228591,0.508334850879,0.508417411175,0.508499966799,0.508582517748,0.508665064022,0.508747605621,0.508830142543,0.508912674789,0.508995202356,0.509077725245,0.509160243455,0.509242756984,0.509325265833,0.50940777,0.509490269485,0.509572764287,0.509655254404,0.509737739837,0.509820220585,0.509902696647,0.509985168021,0.510067634708,0.510150096707,0.510232554016,0.510315006635,0.510397454564,0.510479897801,0.510562336346,0.510644770198,0.510727199357,0.51080962382,0.510892043589,0.510974458661,0.511056869037,0.511139274715,0.511221675695,0.511304071976,0.511386463557,0.511468850438,0.511551232617,0.511633610094,0.511715982869,0.511798350939,0.511880714306,0.511963072967,0.512045426923,0.512127776172,0.512210120713,0.512292460546,0.512374795671,0.512457126086,0.51253945179,0.512621772783,0.512704089065,0.512786400634,0.512868707489,0.51295100963,0.513033307056,0.513115599767,0.513197887761,0.513280171038,0.513362449596,0.513444723437,0.513526992557,0.513609256958,0.513691516637,0.513773771595,0.51385602183,0.513938267342,0.51402050813,0.514102744193,0.514184975531,0.514267202142,0.514349424027,0.514431641183,0.514513853611,0.51459606131,0.514678264279,0.514760462517,0.514842656023,0.514924844797,0.515007028838,0.515089208145,0.515171382717,0.515253552554,0.515335717655,0.515417878019,0.515500033646,0.515582184534,0.515664330683,0.515746472092,0.515828608761,0.515910740688,0.515992867873,0.516074990315,0.516157108014,0.516239220968,0.516321329177,0.51640343264,0.516485531356,0.516567625325,0.516649714546,0.516731799018,0.51681387874,0.516895953711,0.516978023932,0.5170600894,0.517142150116,0.517224206079,0.517306257287,0.51738830374,0.517470345437,0.517552382378,0.517634414562,0.517716441988,0.517798464655,0.517880482562,0.51796249571,0.518044504096,0.518126507721,0.518208506583,0.518290500681,0.518372490016,0.518454474586,0.518536454391,0.518618429429,0.5187003997,0.518782365203,0.518864325938,0.518946281904,0.519028233099,0.519110179524,0.519192121177,0.519274058058,0.519355990166,0.5194379175,0.519519840059,0.519601757843,0.519683670851,0.519765579082,0.519847482536,0.519929381211,0.520011275108,0.520093164224,0.52017504856,0.520256928114,0.520338802887,0.520420672876,0.520502538082,0.520584398504,0.52066625414,0.520748104991,0.520829951055,0.520911792332,0.52099362882,0.52107546052,0.52115728743,0.52123910955,0.521320926879,0.521402739415,0.521484547159,0.52156635011,0.521648148267,0.521729941629,0.521811730195,0.521893513965,0.521975292937,0.522057067112,0.522138836488,0.522220601065,0.522302360841,0.522384115817,0.522465865991,0.522547611363,0.522629351931,0.522711087696,0.522792818656,0.52287454481,0.522956266159,0.5230379827,0.523119694434,0.523201401359,0.523283103476,0.523364800782,0.523446493278,0.523528180962,0.523609863834,0.523691541893,0.523773215139,0.52385488357,0.523936547186,0.524018205986,0.52409985997,0.524181509136,0.524263153484,0.524344793013,0.524426427722,0.524508057611,0.524589682678,0.524671302924,0.524752918347,0.524834528947,0.524916134723,0.524997735673,0.525079331798,0.525160923097,0.525242509568,0.525324091212,0.525405668026,0.525487240012,0.525568807167,0.525650369491,0.525731926984,0.525813479644,0.525895027471,0.525976570464,0.526058108623,0.526139641946,0.526221170433,0.526302694083,0.526384212895,0.526465726869,0.526547236004,0.526628740298,0.526710239753,0.526791734365,0.526873224136,0.526954709064,0.527036189148,0.527117664387,0.527199134782,0.52728060033,0.527362061032,0.527443516887,0.527524967893,0.527606414051,0.527687855359,0.527769291816,0.527850723423,0.527932150177,0.528013572079,0.528094989127,0.528176401321,0.528257808661,0.528339211145,0.528420608772,0.528502001542,0.528583389455,0.528664772508,0.528746150703,0.528827524037,0.52890889251,0.528990256122,0.529071614872,0.529152968758,0.52923431778,0.529315661938,0.52939700123,0.529478335657,0.529559665216,0.529640989908,0.529722309732,0.529803624686,0.529884934771,0.529966239985,0.530047540328,0.530128835798,0.530210126396,0.53029141212,0.53037269297,0.530453968945,0.530535240044,0.530616506266,0.530697767612,0.530779024079,0.530860275667,0.530941522376,0.531022764204,0.531104001151,0.531185233217,0.5312664604,0.5313476827,0.531428900115,0.531510112646,0.531591320292,0.531672523051,0.531753720923,0.531834913907,0.531916102003,0.531997285209,0.532078463526,0.532159636952,0.532240805486,0.532321969128,0.532403127877,0.532484281733,0.532565430693,0.532646574759,0.532727713929,0.532808848202,0.532889977577,0.532971102054,0.533052221633,0.533133336311,0.533214446089,0.533295550966,0.533376650941,0.533457746014,0.533538836183,0.533619921447,0.533701001807,0.533782077261,0.533863147809,0.53394421345,0.534025274182,0.534106330006,0.534187380921,0.534268426926,0.534349468019,0.534430504201,0.534511535471,0.534592561827,0.53467358327,0.534754599798,0.534835611411,0.534916618107,0.534997619887,0.535078616749,0.535159608693,0.535240595718,0.535321577823,0.535402555007,0.53548352727,0.535564494611,0.53564545703,0.535726414524,0.535807367095,0.53588831474,0.53596925746,0.536050195253,0.536131128119,0.536212056057,0.536292979066,0.536373897146,0.536454810295,0.536535718513,0.5366166218,0.536697520154,0.536778413575,0.536859302062,0.536940185615,0.537021064232,0.537101937913,0.537182806656,0.537263670463,0.53734452933,0.537425383259,0.537506232248,0.537587076296,0.537667915402,0.537748749567,0.537829578789,0.537910403067,0.5379912224,0.538072036789,0.538152846232,0.538233650728,0.538314450277,0.538395244877,0.538476034529,0.538556819232,0.538637598984,0.538718373785,0.538799143634,0.538879908531,0.538960668474,0.539041423464,0.539122173499,0.539202918578,0.539283658701,0.539364393867,0.539445124075,0.539525849325,0.539606569616,0.539687284946,0.539767995316,0.539848700725,0.539929401171,0.540010096655,0.540090787174,0.54017147273,0.54025215332,0.540332828945,0.540413499602,0.540494165293,0.540574826015,0.540655481768,0.540736132552,0.540816778366,0.540897419208,0.540978055079,0.541058685977,0.541139311902,0.541219932853,0.541300548828,0.541381159829,0.541461765853,0.5415423669,0.54162296297,0.541703554061,0.541784140172,0.541864721304,0.541945297455,0.542025868625,0.542106434812,0.542186996017,0.542267552238,0.542348103474,0.542428649726,0.542509190991,0.54258972727,0.542670258561,0.542750784865,0.542831306179,0.542911822504,0.542992333838,0.543072840182,0.543153341534,0.543233837893,0.543314329258,0.54339481563,0.543475297007,0.543555773389,0.543636244774,0.543716711162,0.543797172553,0.543877628945,0.543958080338,0.544038526731,0.544118968123,0.544199404514,0.544279835903,0.544360262288,0.544440683671,0.544521100048,0.544601511421,0.544681917788,0.544762319148,0.544842715501,0.544923106845,0.545003493181,0.545083874508,0.545164250824,0.545244622129,0.545324988422,0.545405349703,0.54548570597,0.545566057224,0.545646403463,0.545726744686,0.545807080893,0.545887412083,0.545967738256,0.54604805941,0.546128375545,0.54620868666,0.546288992754,0.546369293827,0.546449589878,0.546529880906,0.546610166911,0.546690447891,0.546770723846,0.546850994775,0.546931260678,0.547011521554,0.547091777401,0.54717202822,0.547252274009,0.547332514768,0.547412750496,0.547492981193,0.547573206857,0.547653427487,0.547733643084,0.547813853646,0.547894059173,0.547974259664,0.548054455118,0.548134645534,0.548214830912,0.54829501125,0.548375186549,0.548455356808,0.548535522025,0.5486156822,0.548695837333,0.548775987421,0.548856132466,0.548936272466,0.54901640742,0.549096537327,0.549176662188,0.549256782,0.549336896764,0.549417006478,0.549497111143,0.549577210756,0.549657305318,0.549737394827,0.549817479284,0.549897558687,0.549977633035,0.550057702327,0.550137766564,0.550217825744,0.550297879867,0.550377928931,0.550457972937,0.550538011882,0.550618045768,0.550698074592,0.550778098354,0.550858117053,0.55093813069,0.551018139262,0.551098142769,0.551178141211,0.551258134586,0.551338122894,0.551418106135,0.551498084307,0.55157805741,0.551658025443,0.551737988405,0.551817946295,0.551897899114,0.551977846859,0.552057789531,0.552137727129,0.552217659651,0.552297587097,0.552377509467,0.55245742676,0.552537338974,0.55261724611,0.552697148166,0.552777045142,0.552856937036,0.552936823849,0.55301670558,0.553096582227,0.553176453791,0.55325632027,0.553336181663,0.55341603797,0.55349588919,0.553575735323,0.553655576367,0.553735412323,0.553815243188,0.553895068963,0.553974889647,0.554054705238,0.554134515737,0.554214321142,0.554294121454,0.55437391667,0.55445370679,0.554533491814,0.554613271741,0.55469304657,0.554772816301,0.554852580932,0.554932340463,0.555012094893,0.555091844222,0.555171588448,0.555251327571,0.555331061591,0.555410790506,0.555490514316,0.55557023302,0.555649946617,0.555729655107,0.555809358488,0.555889056761,0.555968749924,0.556048437977,0.556128120919,0.556207798749,0.556287471466,0.55636713907,0.55644680156,0.556526458936,0.556606111196,0.556685758339,0.556765400366,0.556845037275,0.556924669066,0.557004295737,0.557083917289,0.55716353372,0.55724314503,0.557322751218,0.557402352283,0.557481948224,0.557561539041,0.557641124733,0.5577207053,0.55780028074,0.557879851053,0.557959416237,0.558038976294,0.558118531221,0.558198081017,0.558277625683,0.558357165218,0.55843669962,0.558516228889,0.558595753024,0.558675272025,0.55875478589,0.55883429462,0.558913798213,0.558993296668,0.559072789986,0.559152278164,0.559231761203,0.559311239102,0.559390711859,0.559470179475,0.559549641948,0.559629099278,0.559708551464,0.559787998505,0.559867440401,0.55994687715,0.560026308753,0.560105735208,0.560185156514,0.560264572672,0.56034398368,0.560423389537,0.560502790242,0.560582185796,0.560661576197,0.560740961445,0.560820341538,0.560899716477,0.560979086259,0.561058450886,0.561137810355,0.561217164666,0.561296513819,0.561375857813,0.561455196646,0.561534530319,0.56161385883,0.561693182179,0.561772500365,0.561851813387,0.561931121245,0.562010423937,0.562089721464,0.562169013824,0.562248301017,0.562327583042,0.562406859898,0.562486131584,0.562565398101,0.562644659446,0.562723915619,0.56280316662,0.562882412448,0.562961653102,0.563040888582,0.563120118886,0.563199344014,0.563278563965,0.563357778739,0.563436988334,0.56351619275,0.563595391987,0.563674586043,0.563753774918,0.563832958611,0.563912137122,0.563991310449,0.564070478592,0.56414964155,0.564228799323,0.564307951909,0.564387099309,0.564466241521,0.564545378544,0.564624510378,0.564703637022,0.564782758476,0.564861874738,0.564940985808,0.565020091685,0.565099192369,0.565178287858,0.565257378153,0.565336463251,0.565415543154,0.565494617859,0.565573687366,0.565652751674,0.565731810784,0.565810864693,0.565889913401,0.565968956908,0.566047995212,0.566127028314,0.566206056212,0.566285078905,0.566364096393,0.566443108675,0.566522115751,0.566601117619,0.56668011428,0.566759105731,0.566838091973,0.566917073004,0.566996048825,0.567075019434,0.567153984831,0.567232945014,0.567311899983,0.567390849738,0.567469794278,0.567548733601,0.567627667708,0.567706596597,0.567785520268,0.56786443872,0.567943351952,0.568022259964,0.568101162755,0.568180060324,0.56825895267,0.568337839793,0.568416721692,0.568495598366,0.568574469815,0.568653336037,0.568732197033,0.568811052801,0.56888990334,0.568968748651,0.569047588731,0.569126423581,0.5692052532,0.569284077586,0.56936289674,0.569441710661,0.569520519347,0.569599322798,0.569678121014,0.569756913993,0.569835701736,0.56991448424,0.569993261506,0.570072033533,0.570150800319,0.570229561865,0.57030831817,0.570387069232,0.570465815052,0.570544555628,0.57062329096,0.570702021046,0.570780745887,0.570859465481,0.570938179828,0.571016888928,0.571095592778,0.571174291379,0.57125298473,0.57133167283,0.571410355679,0.571489033275,0.571567705618,0.571646372708,0.571725034543,0.571803691123,0.571882342447,0.571960988515,0.572039629325,0.572118264877,0.57219689517,0.572275520204,0.572354139977,0.57243275449,0.572511363741,0.572589967729,0.572668566454,0.572747159916,0.572825748113,0.572904331045,0.57298290871,0.573061481109,0.57314004824,0.573218610104,0.573297166698,0.573375718023,0.573454264077,0.57353280486,0.573611340372,0.573689870611,0.573768395577,0.573846915269,0.573925429686,0.574003938827,0.574082442693,0.574160941282,0.574239434593,0.574317922626,0.57439640538,0.574474882854,0.574553355048,0.57463182196,0.574710283591,0.574788739939,0.574867191004,0.574945636784,0.57502407728,0.575102512491,0.575180942415,0.575259367052,0.575337786402,0.575416200463,0.575494609235,0.575573012717,0.575651410909,0.575729803809,0.575808191418,0.575886573734,0.575964950756,0.576043322484,0.576121688917,0.576200050055,0.576278405897,0.576356756441,0.576435101688,0.576513441636,0.576591776285,0.576670105634,0.576748429682,0.57682674843,0.576905061875,0.576983370017,0.577061672856,0.57713997039,0.57721826262,0.577296549544,0.577374831161,0.577453107472,0.577531378474,0.577609644168,0.577687904553,0.577766159628,0.577844409392,0.577922653845,0.578000892985,0.578079126813,0.578157355327,0.578235578527,0.578313796412,0.578392008981,0.578470216233,0.578548418169,0.578626614786,0.578704806085,0.578782992065,0.578861172724,0.578939348063,0.57901751808,0.579095682775,0.579173842148,0.579251996196,0.57933014492,0.579408288319,0.579486426393,0.579564559139,0.579642686559,0.579720808651,0.579798925413,0.579877036847,0.57995514295,0.580033243723,0.580111339164,0.580189429273,0.580267514049,0.580345593491,0.580423667598,0.580501736371,0.580579799808,0.580657857908,0.580735910671,0.580813958096,0.580892000182,0.580970036929,0.581048068335,0.581126094401,0.581204115125,0.581282130507,0.581360140546,0.581438145241,0.581516144591,0.581594138597,0.581672127256,0.581750110569,0.581828088535,0.581906061153,0.581984028421,0.582061990341,0.58213994691,0.582217898128,0.582295843995,0.582373784509,0.58245171967,0.582529649478,0.582607573931,0.582685493029,0.582763406771,0.582841315156,0.582919218184,0.582997115853,0.583075008164,0.583152895116,0.583230776707,0.583308652938,0.583386523806,0.583464389313,0.583542249456,0.583620104236,0.583697953651,0.5837757977,0.583853636384,0.583931469701,0.584009297651,0.584087120233,0.584164937446,0.584242749289,0.584320555762,0.584398356864,0.584476152595,0.584553942953,0.584631727938,0.584709507549,0.584787281786,0.584865050648,0.584942814133,0.585020572242,0.585098324973,0.585176072327,0.585253814301,0.585331550896,0.585409282111,0.585487007945,0.585564728397,0.585642443467,0.585720153154,0.585797857456,0.585875556375,0.585953249908,0.586030938055,0.586108620815,0.586186298189,0.586263970174,0.58634163677,0.586419297976,0.586496953793,0.586574604218,0.586652249252,0.586729888893,0.586807523142,0.586885151996,0.586962775456,0.587040393521,0.58711800619,0.587195613462,0.587273215337,0.587350811813,0.587428402891,0.587505988569,0.587583568848,0.587661143725,0.5877387132,0.587816277273,0.587893835943,0.58797138921,0.588048937072,0.588126479528,0.588204016579,0.588281548223,0.588359074459,0.588436595288,0.588514110708,0.588591620718,0.588669125318,0.588746624507,0.588824118285,0.58890160665,0.588979089602,0.58905656714,0.589134039264,0.589211505973,0.589288967265,0.589366423141,0.5894438736,0.589521318641,0.589598758263,0.589676192466,0.589753621248,0.589831044609,0.589908462549,0.589985875067,0.590063282161,0.590140683832,0.590218080079,0.5902954709,0.590372856295,0.590450236264,0.590527610805,0.590604979919,0.590682343604,0.590759701859,0.590837054684,0.590914402078,0.590991744041,0.591069080572,0.591146411669,0.591223737333,0.591301057562,0.591378372357,0.591455681715,0.591532985637,0.591610284122,0.591687577169,0.591764864777,0.591842146946,0.591919423674,0.591996694962,0.592073960808,0.592151221212,0.592228476174,0.592305725691,0.592382969764,0.592460208393,0.592537441575,0.592614669311,0.5926918916,0.59276910844,0.592846319833,0.592923525776,0.593000726268,0.593077921311,0.593155110901,0.59323229504,0.593309473725,0.593386646958,0.593463814735,0.593540977058,0.593618133925,0.593695285336,0.59377243129,0.593849571785,0.593926706823,0.594003836401,0.594080960519,0.594158079176,0.594235192372,0.594312300106,0.594389402377,0.594466499185,0.594543590528,0.594620676407,0.594697756819,0.594774831766,0.594851901245,0.594928965257,0.5950060238,0.595083076875,0.595160124479,0.595237166612,0.595314203275,0.595391234465,0.595468260183,0.595545280427,0.595622295197,0.595699304492,0.595776308312,0.595853306656,0.595930299522,0.596007286911,0.596084268822,0.596161245253,0.596238216205,0.596315181676,0.596392141666,0.596469096174,0.596546045199,0.596622988741,0.596699926799,0.596776859373,0.59685378646,0.596930708062,0.597007624177,0.597084534804,0.597161439943,0.597238339593,0.597315233754,0.597392122424,0.597469005603,0.59754588329,0.597622755484,0.597699622186,0.597776483393,0.597853339106,0.597930189323,0.598007034045,0.598083873269,0.598160706996,0.598237535225,0.598314357955,0.598391175186,0.598467986916,0.598544793146,0.598621593873,0.598698389098,0.59877517882,0.598851963039,0.598928741752,0.599005514961,0.599082282664,0.59915904486,0.599235801548,0.599312552729,0.599389298401,0.599466038563,0.599542773215,0.599619502356,0.599696225986,0.599772944104,0.599849656708,0.599926363799,0.600003065375,0.600079761437,0.600156451982,0.600233137011,0.600309816523,0.600386490517,0.600463158992,0.600539821948,0.600616479384,0.600693131299,0.600769777693,0.600846418564,0.600923053913,0.600999683738,0.601076308039,0.601152926815,0.601229540065,0.601306147789,0.601382749986,0.601459346655,0.601535937795,0.601612523407,0.601689103488,0.601765678039,0.601842247059,0.601918810546,0.601995368501,0.602071920922,0.60214846781,0.602225009162,0.602301544979,0.60237807526,0.602454600004,0.60253111921,0.602607632878,0.602684141007,0.602760643596,0.602837140644,0.602913632152,0.602990118117,0.60306659854,0.60314307342,0.603219542756,0.603296006547,0.603372464793,0.603448917493,0.603525364646,0.603601806251,0.603678242308,0.603754672817,0.603831097776,0.603907517184,0.603983931042,0.604060339348,0.604136742101,0.604213139302,0.604289530948,0.60436591704,0.604442297577,0.604518672558,0.604595041983,0.60467140585,0.604747764159,0.604824116909,0.6049004641,0.604976805731,0.605053141801,0.605129472309,0.605205797255,0.605282116639,0.605358430459,0.605434738714,0.605511041404,0.605587338529,0.605663630087,0.605739916078,0.605816196502,0.605892471356,0.605968740642,0.606045004357,0.606121262502,0.606197515076,0.606273762077,0.606350003506,0.606426239361,0.606502469643,0.606578694349,0.60665491348,0.606731127035,0.606807335012,0.606883537412,0.606959734234,0.607035925476,0.607112111139,0.607188291222,0.607264465723,0.607340634643,0.607416797979,0.607492955733,0.607569107903,0.607645254488,0.607721395488,0.607797530901,0.607873660728,0.607949784968,0.608025903619,0.608102016682,0.608178124155,0.608254226037,0.608330322329,0.608406413029,0.608482498137,0.608558577652,0.608634651573,0.608710719899,0.608786782631,0.608862839766,0.608938891305,0.609014937247,0.609090977591,0.609167012336,0.609243041482,0.609319065028,0.609395082973,0.609471095317,0.609547102059,0.609623103198,0.609699098733,0.609775088664,0.60985107299,0.60992705171,0.610003024825,0.610078992332,0.610154954231,0.610230910522,0.610306861204,0.610382806276,0.610458745738,0.610534679588,0.610610607827,0.610686530453,0.610762447465,0.610838358864,0.610914264648,0.610990164816,0.611066059369,0.611141948304,0.611217831622,0.611293709322,0.611369581403,0.611445447865,0.611521308706,0.611597163926,0.611673013525,0.611748857501,0.611824695854,0.611900528584,0.611976355689,0.612052177169,0.612127993022,0.61220380325,0.61227960785,0.612355406822,0.612431200166,0.61250698788,0.612582769964,0.612658546417,0.61273431724,0.612810082429,0.612885841986,0.61296159591,0.613037344199,0.613113086854,0.613188823873,0.613264555255,0.613340281001,0.613416001109,0.613491715578,0.613567424408,0.613643127599,0.613718825149,0.613794517058,0.613870203325,0.61394588395,0.614021558931,0.614097228268,0.614172891961,0.614248550008,0.61432420241,0.614399849164,0.614475490271,0.61455112573,0.61462675554,0.614702379701,0.614777998211,0.614853611071,0.614929218279,0.615004819834,0.615080415737,0.615156005986,0.615231590581,0.61530716952,0.615382742804,0.615458310431,0.615533872401,0.615609428713,0.615684979367,0.615760524361,0.615836063696,0.61591159737,0.615987125382,0.616062647733,0.616138164421,0.616213675445,0.616289180805,0.616364680501,0.616440174531,0.616515662895,0.616591145592,0.616666622621,0.616742093982,0.616817559674,0.616893019697,0.616968474049,0.61704392273,0.617119365739,0.617194803076,0.61727023474,0.61734566073,0.617421081045,0.617496495686,0.61757190465,0.617647307938,0.617722705548,0.617798097481,0.617873483735,0.617948864309,0.618024239204,0.618099608417,0.61817497195,0.6182503298,0.618325681967,0.618401028451,0.61847636925,0.618551704365,0.618627033794,0.618702357537,0.618777675593,0.618852987961,0.618928294641,0.619003595631,0.619078890932,0.619154180543,0.619229464462,0.61930474269,0.619380015225,0.619455282067,0.619530543215,0.619605798668,0.619681048426,0.619756292488,0.619831530854,0.619906763522,0.619981990492,0.620057211763,0.620132427335,0.620207637207,0.620282841378,0.620358039847,0.620433232614,0.620508419679,0.620583601039,0.620658776696,0.620733946647,0.620809110893,0.620884269433,0.620959422265,0.62103456939,0.621109710806,0.621184846514,0.621259976511,0.621335100798,0.621410219374,0.621485332238,0.621560439389,0.621635540827,0.621710636551,0.621785726561,0.621860810855,0.621935889433,0.622010962295,0.622086029439,0.622161090865,0.622236146572,0.62231119656,0.622386240827,0.622461279374,0.622536312199,0.622611339302,0.622686360683,0.622761376339,0.622836386271,0.622911390479,0.62298638896,0.623061381715,0.623136368744,0.623211350044,0.623286325616,0.623361295459,0.623436259572,0.623511217955,0.623586170606,0.623661117526,0.623736058713,0.623810994166,0.623885923886,0.623960847871,0.624035766121,0.624110678635,0.624185585412,0.624260486452,0.624335381754,0.624410271317,0.62448515514,0.624560033224,0.624634905566,0.624709772168,0.624784633026,0.624859488142,0.624934337515,0.625009181143,0.625084019026,0.625158851164,0.625233677555,0.625308498199,0.625383313096,0.625458122244,0.625532925643,0.625607723292,0.625682515191,0.625757301339,0.625832081735,0.625906856378,0.625981625268,0.626056388404,0.626131145786,0.626205897412,0.626280643283,0.626355383397,0.626430117753,0.626504846352,0.626579569192,0.626654286272,0.626728997592,0.626803703152,0.62687840295,0.626953096986,0.627027785259,0.627102467769,0.627177144515,0.627251815495,0.62732648071,0.627401140159,0.627475793841,0.627550441755,0.627625083901,0.627699720278,0.627774350885,0.627848975722,0.627923594788,0.627998208082,0.628072815604,0.628147417352,0.628222013327,0.628296603527,0.628371187953,0.628445766602,0.628520339475,0.62859490657,0.628669467888,0.628744023427,0.628818573186,0.628893117166,0.628967655365,0.629042187783,0.629116714419,0.629191235272,0.629265750341,0.629340259627,0.629414763128,0.629489260843,0.629563752772,0.629638238915,0.62971271927,0.629787193837,0.629861662614,0.629936125603,0.630010582801,0.630085034208,0.630159479824,0.630233919647,0.630308353677,0.630382781914,0.630457204356,0.630531621003,0.630606031855,0.63068043691,0.630754836168,0.630829229628,0.63090361729,0.630977999153,0.631052375216,0.631126745478,0.63120110994,0.631275468599,0.631349821456,0.631424168509,0.631498509759,0.631572845204,0.631647174844,0.631721498678,0.631795816705,0.631870128925,0.631944435337,0.63201873594,0.632093030734,0.632167319717,0.63224160289,0.632315880252,0.632390151801,0.632464417538,0.632538677461,0.63261293157,0.632687179864,0.632761422343,0.632835659005,0.632909889851,0.632984114878,0.633058334088,0.633132547479,0.63320675505,0.633280956801,0.633355152731,0.633429342839,0.633503527125,0.633577705588,0.633651878227,0.633726045041,0.633800206031,0.633874361195,0.633948510532,0.634022654043,0.634096791725,0.634170923579,0.634245049604,0.634319169799,0.634393284164,0.634467392697,0.634541495398,0.634615592267,0.634689683303,0.634763768504,0.634837847872,0.634911921403,0.634985989099,0.635060050958,0.63513410698,0.635208157164,0.635282201509,0.635356240015,0.63543027268,0.635504299505,0.635578320489,0.63565233563,0.635726344929,0.635800348384,0.635874345995,0.635948337761,0.636022323682,0.636096303756,0.636170277984,0.636244246364,0.636318208896,0.636392165579,0.636466116412,0.636540061395,0.636614000527,0.636687933808,0.636761861236,0.636835782812,0.636909698533,0.636983608401,0.637057512413,0.637131410569,0.63720530287,0.637279189313,0.637353069898,0.637426944625,0.637500813493,0.637574676501,0.637648533649,0.637722384936,0.63779623036,0.637870069923,0.637943903622,0.638017731457,0.638091553428,0.638165369533,0.638239179773,0.638312984146,0.638386782652,0.63846057529,0.638534362059,0.63860814296,0.63868191799,0.638755687149,0.638829450437,0.638903207854,0.638976959397,0.639050705068,0.639124444864,0.639198178785,0.639271906831,0.639345629002,0.639419345295,0.639493055711,0.639566760249,0.639640458908,0.639714151688,0.639787838587,0.639861519606,0.639935194743,0.640008863998,0.640082527371,0.64015618486,0.640229836464,0.640303482184,0.640377122018,0.640450755966,0.640524384028,0.640598006201,0.640671622487,0.640745232883,0.64081883739,0.640892436007,0.640966028732,0.641039615566,0.641113196508,0.641186771557,0.641260340712,0.641333903973,0.641407461338,0.641481012809,0.641554558382,0.641628098059,0.641701631838,0.641775159719,0.6418486817,0.641922197782,0.641995707963,0.642069212244,0.642142710622,0.642216203098,0.642289689671,0.642363170341,0.642436645105,0.642510113965,0.642583576919,0.642657033966,0.642730485106,0.642803930339,0.642877369662,0.642950803077,0.643024230582,0.643097652176,0.643171067859,0.64324447763,0.643317881489,0.643391279434,0.643464671465,0.643538057582,0.643611437784,0.643684812069,0.643758180438,0.64383154289,0.643904899424,0.643978250039,0.644051594734,0.64412493351,0.644198266365,0.644271593299,0.644344914311,0.6444182294,0.644491538566,0.644564841807,0.644638139125,0.644711430516,0.644784715982,0.644857995521,0.644931269132,0.645004536816,0.64507779857,0.645151054395,0.645224304291,0.645297548255,0.645370786288,0.645444018389,0.645517244557,0.645590464792,0.645663679092,0.645736887458,0.645810089888,0.645883286382,0.645956476939,0.646029661559,0.646102840241,0.646176012983,0.646249179787,0.64632234065,0.646395495572,0.646468644552,0.646541787591,0.646614924687,0.646688055839,0.646761181046,0.646834300309,0.646907413627,0.646980520998,0.647053622422,0.647126717899,0.647199807427,0.647272891007,0.647345968637,0.647419040316,0.647492106045,0.647565165822,0.647638219647,0.647711267519,0.647784309437,0.647857345401,0.64793037541,0.648003399463,0.64807641756,0.6481494297,0.648222435882,0.648295436107,0.648368430372,0.648441418677,0.648514401022,0.648587377406,0.648660347829,0.648733312289,0.648806270786,0.648879223319,0.648952169888,0.649025110492,0.64909804513,0.649170973802,0.649243896507,0.649316813244,0.649389724013,0.649462628813,0.649535527643,0.649608420502,0.649681307391,0.649754188307,0.649827063252,0.649899932223,0.649972795221,0.650045652244,0.650118503292,0.650191348364,0.65026418746,0.650337020579,0.65040984772,0.650482668883,0.650555484067,0.65062829327,0.650701096494,0.650773893736,0.650846684996,0.650919470274,0.650992249569,0.65106502288,0.651137790207,0.651210551549,0.651283306905,0.651356056274,0.651428799656,0.65150153705,0.651574268456,0.651646993873,0.6517197133,0.651792426737,0.651865134182,0.651937835636,0.652010531097,0.652083220565,0.652155904039,0.652228581519,0.652301253003,0.652373918492,0.652446577984,0.65251923148,0.652591878977,0.652664520476,0.652737155975,0.652809785475,0.652882408975,0.652955026473,0.653027637969,0.653100243463,0.653172842954,0.653245436441,0.653318023923,0.6533906054,0.653463180872,0.653535750337,0.653608313795,0.653680871244,0.653753422686,0.653825968118,0.653898507541,0.653971040953,0.654043568353,0.654116089742,0.654188605119,0.654261114482,0.654333617832,0.654406115167,0.654478606487,0.654551091791,0.654623571078,0.654696044349,0.654768511601,0.654840972835,0.65491342805,0.654985877245,0.65505832042,0.655130757573,0.655203188705,0.655275613814,0.6553480329,0.655420445962,0.655492853,0.655565254012,0.655637648999,0.655710037959,0.655782420892,0.655854797797,0.655927168674,0.655999533522,0.65607189234,0.656144245127,0.656216591883,0.656288932608,0.6563612673,0.656433595958,0.656505918583,0.656578235174,0.656650545729,0.656722850249,0.656795148732,0.656867441178,0.656939727587,0.657012007956,0.657084282287,0.657156550578,0.657228812829,0.657301069038,0.657373319206,0.657445563331,0.657517801413,0.657590033451,0.657662259445,0.657734479394,0.657806693297,0.657878901154,0.657951102963,0.658023298725,0.658095488439,0.658167672103,0.658239849717,0.658312021282,0.658384186795,0.658456346256,0.658528499665,0.658600647021,0.658672788323,0.658744923571,0.658817052764,0.658889175901,0.658961292982,0.659033404006,0.659105508972,0.659177607879,0.659249700728,0.659321787517,0.659393868246,0.659465942913,0.659538011519,0.659610074063,0.659682130544,0.659754180961,0.659826225313,0.659898263601,0.659970295823,0.660042321979,0.660114342067,0.660186356089,0.660258364041,0.660330365925,0.66040236174,0.660474351484,0.660546335157,0.660618312758,0.660690284287,0.660762249744,0.660834209126,0.660906162435,0.660978109668,0.661050050826,0.661121985908,0.661193914913,0.66126583784,0.661337754689,0.661409665459,0.66148157015,0.66155346876,0.66162536129,0.661697247738,0.661769128104,0.661841002387,0.661912870587,0.661984732702,0.662056588733,0.662128438678,0.662200282537,0.662272120309,0.662343951994,0.66241577759,0.662487597098,0.662559410516,0.662631217845,0.662703019082,0.662774814228,0.662846603282,0.662918386243,0.662990163111,0.663061933885,0.663133698564,0.663205457148,0.663277209635,0.663348956026,0.66342069632,0.663492430515,0.663564158612,0.66363588061,0.663707596507,0.663779306304,0.663851009999,0.663922707593,0.663994399084,0.664066084472,0.664137763755,0.664209436934,0.664281104008,0.664352764976,0.664424419837,0.664496068591,0.664567711237,0.664639347775,0.664710978203,0.664782602522,0.66485422073,0.664925832826,0.664997438811,0.665069038684,0.665140632443,0.665212220088,0.665283801619,0.665355377035,0.665426946335,0.665498509518,0.665570066585,0.665641617533,0.665713162363,0.665784701074,0.665856233666,0.665927760136,0.665999280486,0.666070794714,0.66614230282,0.666213804803,0.666285300662,0.666356790396,0.666428274006,0.66649975149,0.666571222847,0.666642688078,0.666714147181,0.666785600156,0.666857047002,0.666928487718,0.666999922304,0.667071350759,0.667142773082,0.667214189273,0.667285599331,0.667357003256,0.667428401047,0.667499792702,0.667571178223,0.667642557607,0.667713930854,0.667785297963,0.667856658935,0.667928013768,0.667999362461,0.668070705014,0.668142041427,0.668213371698,0.668284695826,0.668356013813,0.668427325655,0.668498631354,0.668569930908,0.668641224317,0.66871251158,0.668783792696,0.668855067665,0.668926336485,0.668997599157,0.66906885568,0.669140106053,0.669211350276,0.669282588347,0.669353820266,0.669425046032,0.669496265646,0.669567479105,0.66963868641,0.66970988756,0.669781082554,0.669852271392,0.669923454072,0.669994630595,0.670065800959,0.670136965164,0.670208123209,0.670279275094,0.670350420818,0.67042156038,0.67049269378,0.670563821017,0.67063494209,0.670706056998,0.670777165742,0.67084826832,0.670919364732,0.670990454977,0.671061539054,0.671132616963,0.671203688703,0.671274754274,0.671345813674,0.671416866903,0.671487913961,0.671558954847,0.67162998956,0.671701018099,0.671772040465,0.671843056655,0.67191406667,0.671985070509,0.672056068172,0.672127059656,0.672198044963,0.672269024091,0.67233999704,0.672410963809,0.672481924397,0.672552878804,0.672623827029,0.672694769071,0.67276570493,0.672836634605,0.672907558095,0.6729784754,0.67304938652,0.673120291453,0.673191190198,0.673262082756,0.673332969125,0.673403849306,0.673474723296,0.673545591096,0.673616452705,0.673687308122,0.673758157347,0.673829000379,0.673899837217,0.673970667861,0.674041492309,0.674112310562,0.674183122619,0.674253928479,0.674324728141,0.674395521605,0.67446630887,0.674537089936,0.674607864801,0.674678633466,0.674749395929,0.674820152189,0.674890902247,0.674961646102,0.675032383752,0.675103115198,0.675173840439,0.675244559473,0.6753152723,0.675385978921,0.675456679333,0.675527373536,0.675598061531,0.675668743315,0.675739418889,0.675810088251,0.675880751402,0.67595140834,0.676022059064,0.676092703575,0.676163341872,0.676233973953,0.676304599819,0.676375219468,0.6764458329,0.676516440114,0.67658704111,0.676657635886,0.676728224443,0.67679880678,0.676869382896,0.67693995279,0.677010516462,0.677081073911,0.677151625136,0.677222170137,0.677292708913,0.677363241464,0.677433767789,0.677504287886,0.677574801756,0.677645309398,0.677715810812,0.677786305996,0.677856794949,0.677927277673,0.677997754164,0.678068224424,0.678138688451,0.678209146245,0.678279597805,0.67835004313,0.67842048222,0.678490915074,0.678561341691,0.678631762072,0.678702176214,0.678772584118,0.678842985783,0.678913381208,0.678983770393,0.679054153337,0.679124530038,0.679194900498,0.679265264714,0.679335622687,0.679405974416,0.679476319899,0.679546659137,0.679616992129,0.679687318874,0.679757639371,0.67982795362,0.679898261621,0.679968563371,0.680038858872,0.680109148122,0.68017943112,0.680249707867,0.680319978361,0.680390242601,0.680460500587,0.680530752319,0.680600997795,0.680671237016,0.68074146998,0.680811696686,0.680881917135,0.680952131326,0.681022339257,0.681092540928,0.681162736339,0.681232925489,0.681303108377,0.681373285002,0.681443455365,0.681513619464,0.681583777298,0.681653928868,0.681724074172,0.681794213209,0.68186434598,0.681934472483,0.682004592718,0.682074706685,0.682144814381,0.682214915808,0.682285010964,0.682355099848,0.682425182461,0.6824952588,0.682565328866,0.682635392659,0.682705450176,0.682775501419,0.682845546385,0.682915585075,0.682985617488,0.683055643623,0.683125663479,0.683195677056,0.683265684353,0.68333568537,0.683405680106,0.68347566856,0.683545650732,0.683615626621,0.683685596226,0.683755559547,0.683825516583,0.683895467333,0.683965411797,0.684035349975,0.684105281864,0.684175207466,0.684245126779,0.684315039802,0.684384946535,0.684454846978,0.684524741129,0.684594628988,0.684664510555,0.684734385828,0.684804254808,0.684874117492,0.684943973882,0.685013823976,0.685083667773,0.685153505273,0.685223336475,0.685293161379,0.685362979984,0.685432792289,0.685502598293,0.685572397997,0.685642191399,0.685711978499,0.685781759296,0.685851533789,0.685921301978,0.685991063863,0.686060819441,0.686130568714,0.68620031168,0.686270048339,0.686339778689,0.686409502731,0.686479220463,0.686548931886,0.686618636998,0.686688335798,0.686758028287,0.686827714463,0.686897394326,0.686967067875,0.68703673511,0.68710639603,0.687176050634,0.687245698921,0.687315340892,0.687384976545,0.687454605879,0.687524228895,0.687593845591,0.687663455967,0.687733060022,0.687802657755,0.687872249167,0.687941834255,0.68801141302,0.688080985462,0.688150551578,0.688220111369,0.688289664834,0.688359211973,0.688428752784,0.688498287267,0.688567815422,0.688637337248,0.688706852744,0.688776361909,0.688845864744,0.688915361246,0.688984851417,0.689054335254,0.689123812757,0.689193283927,0.689262748761,0.68933220726,0.689401659423,0.689471105249,0.689540544737,0.689609977887,0.689679404699,0.689748825171,0.689818239303,0.689887647095,0.689957048545,0.690026443653,0.690095832419,0.690165214841,0.69023459092,0.690303960654,0.690373324043,0.690442681086,0.690512031783,0.690581376132,0.690650714135,0.690720045788,0.690789371093,0.690858690048,0.690928002653,0.690997308908,0.69106660881,0.691135902361,0.691205189558,0.691274470403,0.691343744893,0.691413013029,0.691482274809,0.691551530233,0.691620779301,0.691690022012,0.691759258364,0.691828488358,0.691897711993,0.691966929269,0.692036140183,0.692105344737,0.692174542929,0.692243734759,0.692312920226,0.692382099329,0.692451272068,0.692520438442,0.692589598451,0.692658752093,0.692727899369,0.692797040277,0.692866174817,0.692935302989,0.693004424791,0.693073540224,0.693142649285,0.693211751976,0.693280848295,0.693349938241,0.693419021814,0.693488099013,0.693557169838,0.693626234288,0.693695292362,0.69376434406,0.693833389381,0.693902428324,0.69397146089,0.694040487076,0.694109506883,0.69417852031,0.694247527356,0.69431652802,0.694385522303,0.694454510203,0.69452349172,0.694592466853,0.694661435601,0.694730397964,0.694799353942,0.694868303532,0.694937246736,0.695006183552,0.69507511398,0.695144038019,0.695212955668,0.695281866927,0.695350771795,0.695419670271,0.695488562356,0.695557448047,0.695626327345,0.695695200249,0.695764066759,0.695832926873,0.695901780591,0.695970627913,0.696039468837,0.696108303363,0.696177131491,0.69624595322,0.69631476855,0.696383577478,0.696452380006,0.696521176132,0.696589965856,0.696658749177,0.696727526095,0.696796296608,0.696865060716,0.696933818419,0.697002569716,0.697071314607,0.69714005309,0.697208785165,0.697277510831,0.697346230088,0.697414942935,0.697483649372,0.697552349398,0.697621043012,0.697689730213,0.697758411002,0.697827085377,0.697895753337,0.697964414883,0.698033070013,0.698101718727,0.698170361024,0.698238996904,0.698307626366,0.698376249409,0.698444866033,0.698513476236,0.69858208002,0.698650677381,0.698719268322,0.698787852839,0.698856430934,0.698925002604,0.698993567851,0.699062126672,0.699130679068,0.699199225037,0.69926776458,0.699336297695,0.699404824382,0.69947334464,0.699541858469,0.699610365868,0.699678866836,0.699747361373,0.699815849477,0.69988433115,0.699952806389,0.700021275194,0.700089737565,0.700158193501,0.700226643001,0.700295086064,0.700363522691,0.70043195288,0.700500376631,0.700568793943,0.700637204816,0.700705609248,0.70077400724,0.700842398791,0.700910783899,0.700979162565,0.701047534787,0.701115900566,0.7011842599,0.701252612789,0.701320959232,0.701389299229,0.701457632779,0.701525959881,0.701594280535,0.70166259474,0.701730902496,0.701799203801,0.701867498656,0.701935787059,0.70200406901,0.702072344508,0.702140613553,0.702208876144,0.702277132281,0.702345381962,0.702413625188,0.702481861957,0.702550092269,0.702618316124,0.70268653352,0.702754744457,0.702822948935,0.702891146952,0.702959338509,0.703027523604,0.703095702237,0.703163874407,0.703232040114,0.703300199358,0.703368352136,0.703436498449,0.703504638297,0.703572771678,0.703640898592,0.703709019038,0.703777133016,0.703845240524,0.703913341564,0.703981436133,0.704049524231,0.704117605858,0.704185681012,0.704253749694,0.704321811903,0.704389867637,0.704457916897,0.704525959682,0.704593995991,0.704662025823,0.704730049179,0.704798066056,0.704866076456,0.704934080376,0.705002077817,0.705070068777,0.705138053257,0.705206031255,0.705274002771,0.705341967804,0.705409926354,0.70547787842,0.705545824001,0.705613763097,0.705681695708,0.705749621831,0.705817541468,0.705885454617,0.705953361278,0.706021261449,0.706089155131,0.706157042323,0.706224923024,0.706292797234,0.706360664951,0.706428526176,0.706496380907,0.706564229145,0.706632070888,0.706699906135,0.706767734887,0.706835557142,0.706903372901,0.706971182161,0.707038984923,0.707106781187,0.70717457095,0.707242354214,0.707310130976,0.707377901238,0.707445664997,0.707513422253,0.707581173006,0.707648917256,0.707716655,0.70778438624,0.707852110974,0.707919829201,0.707987540921,0.708055246134,0.708122944838,0.708190637033,0.708258322719,0.708326001895,0.70839367456,0.708461340713,0.708529000354,0.708596653483,0.708664300099,0.7087319402,0.708799573788,0.70886720086,0.708934821416,0.709002435456,0.709070042978,0.709137643984,0.709205238471,0.709272826439,0.709340407888,0.709407982816,0.709475551224,0.70954311311,0.709610668475,0.709678217317,0.709745759636,0.70981329543,0.709880824701,0.709948347446,0.710015863666,0.710083373359,0.710150876526,0.710218373164,0.710285863275,0.710353346857,0.71042082391,0.710488294432,0.710555758424,0.710623215884,0.710690666813,0.710758111209,0.710825549072,0.710892980401,0.710960405196,0.711027823456,0.71109523518,0.711162640368,0.711230039019,0.711297431133,0.711364816708,0.711432195745,0.711499568243,0.7115669342,0.711634293617,0.711701646493,0.711768992827,0.711836332619,0.711903665867,0.711970992572,0.712038312733,0.712105626348,0.712172933418,0.712240233942,0.71230752792,0.71237481535,0.712442096231,0.712509370565,0.712576638349,0.712643899583,0.712711154267,0.712778402399,0.71284564398,0.712912879009,0.712980107484,0.713047329406,0.713114544774,0.713181753587,0.713248955845,0.713316151547,0.713383340692,0.71345052328,0.713517699309,0.713584868781,0.713652031693,0.713719188046,0.713786337838,0.713853481069,0.713920617738,0.713987747846,0.71405487139,0.714121988372,0.714189098789,0.714256202641,0.714323299928,0.714390390649,0.714457474804,0.714524552392,0.714591623411,0.714658687863,0.714725745745,0.714792797058,0.714859841801,0.714926879972,0.714993911573,0.715060936601,0.715127955056,0.715194966939,0.715261972247,0.715328970981,0.715395963139,0.715462948722,0.715529927729,0.715596900158,0.71566386601,0.715730825284,0.715797777979,0.715864724094,0.715931663629,0.715998596584,0.716065522957,0.716132442748,0.716199355957,0.716266262583,0.716333162625,0.716400056082,0.716466942955,0.716533823242,0.716600696943,0.716667564056,0.716734424583,0.716801278521,0.716868125871,0.716934966631,0.717001800802,0.717068628381,0.71713544937,0.717202263767,0.717269071572,0.717335872784,0.717402667402,0.717469455425,0.717536236854,0.717603011688,0.717669779926,0.717736541566,0.71780329661,0.717870045056,0.717936786903,0.718003522151,0.718070250799,0.718136972847,0.718203688294,0.71827039714,0.718337099383,0.718403795023,0.718470484061,0.718537166494,0.718603842322,0.718670511545,0.718737174162,0.718803830173,0.718870479577,0.718937122373,0.71900375856,0.719070388139,0.719137011108,0.719203627467,0.719270237216,0.719336840353,0.719403436878,0.71947002679,0.719536610089,0.719603186774,0.719669756845,0.719736320301,0.719802877141,0.719869427365,0.719935970972,0.720002507961,0.720069038333,0.720135562085,0.720202079219,0.720268589732,0.720335093625,0.720401590897,0.720468081546,0.720534565574,0.720601042978,0.720667513759,0.720733977916,0.720800435448,0.720866886354,0.720933330634,0.720999768288,0.721066199315,0.721132623713,0.721199041483,0.721265452624,0.721331857135,0.721398255016,0.721464646266,0.721531030884,0.72159740887,0.721663780224,0.721730144944,0.72179650303,0.721862854481,0.721929199298,0.721995537478,0.722061869022,0.722128193929,0.722194512199,0.72226082383,0.722327128822,0.722393427175,0.722459718887,0.722526003959,0.72259228239,0.722658554179,0.722724819325,0.722791077828,0.722857329687,0.722923574902,0.722989813472,0.723056045397,0.723122270675,0.723188489307,0.723254701291,0.723320906627,0.723387105314,0.723453297353,0.723519482741,0.723585661479,0.723651833566,0.723717999001,0.723784157784,0.723850309915,0.723916455391,0.723982594214,0.724048726382,0.724114851895,0.724180970751,0.724247082951,0.724313188495,0.72437928738,0.724445379607,0.724511465175,0.724577544084,0.724643616332,0.724709681919,0.724775740846,0.72484179311,0.724907838712,0.72497387765,0.725039909925,0.725105935535,0.72517195448,0.72523796676,0.725303972373,0.72536997132,0.725435963599,0.72550194921,0.725567928152,0.725633900425,0.725699866028,0.725765824961,0.725831777223,0.725897722813,0.72596366173,0.726029593975,0.726095519546,0.726161438444,0.726227350666,0.726293256213,0.726359155084,0.726425047279,0.726490932796,0.726556811636,0.726622683798,0.72668854928,0.726754408083,0.726820260206,0.726886105648,0.726951944408,0.727017776487,0.727083601883,0.727149420595,0.727215232624,0.727281037969,0.727346836628,0.727412628602,0.72747841389,0.727544192491,0.727609964404,0.72767572963,0.727741488167,0.727807240014,0.727872985172,0.727938723639,0.728004455415,0.7280701805,0.728135898892,0.728201610591,0.728267315597,0.728333013909,0.728398705526,0.728464390448,0.728530068674,0.728595740204,0.728661405036,0.728727063171,0.728792714607,0.728858359345,0.728923997383,0.728989628721,0.729055253358,0.729120871293,0.729186482527,0.729252087059,0.729317684887,0.729383276012,0.729448860432,0.729514438147,0.729580009157,0.72964557346,0.729711131057,0.729776681947,0.729842226128,0.729907763601,0.729973294365,0.730038818419,0.730104335763,0.730169846395,0.730235350317,0.730300847526,0.730366338022,0.730431821805,0.730497298874,0.730562769228,0.730628232867,0.73069368979,0.730759139997,0.730824583487,0.73089002026,0.730955450314,0.731020873649,0.731086290265,0.731151700162,0.731217103337,0.731282499791,0.731347889524,0.731413272534,0.731478648821,0.731544018385,0.731609381224,0.731674737338,0.731740086728,0.731805429391,0.731870765327,0.731936094537,0.732001417018,0.732066732771,0.732132041795,0.73219734409,0.732262639654,0.732327928488,0.73239321059,0.73245848596,0.732523754598,0.732589016502,0.732654271672,0.732719520109,0.73278476181,0.732849996775,0.732915225005,0.732980446497,0.733045661252,0.733110869269,0.733176070548,0.733241265087,0.733306452887,0.733371633946,0.733436808264,0.733501975841,0.733567136675,0.733632290766,0.733697438115,0.733762578719,0.733827712578,0.733892839693,0.733957960061,0.734023073684,0.734088180559,0.734153280687,0.734218374066,0.734283460697,0.734348540578,0.73441361371,0.73447868009,0.73454373972,0.734608792598,0.734673838723,0.734738878096,0.734803910715,0.73486893658,0.73493395569,0.734998968044,0.735063973643,0.735128972485,0.73519396457,0.735258949898,0.735323928467,0.735388900277,0.735453865327,0.735518823618,0.735583775147,0.735648719916,0.735713657922,0.735778589166,0.735843513646,0.735908431363,0.735973342316,0.736038246504,0.736103143926,0.736168034582,0.736232918472,0.736297795594,0.736362665948,0.736427529534,0.736492386351,0.736557236398,0.736622079675,0.736686916181,0.736751745915,0.736816568877,0.736881385067,0.736946194484,0.737010997126,0.737075792994,0.737140582087,0.737205364405,0.737270139946,0.73733490871,0.737399670697,0.737464425906,0.737529174337,0.737593915988,0.737658650859,0.73772337895,0.73778810026,0.737852814788,0.737917522535,0.737982223498,0.738046917678,0.738111605074,0.738176285686,0.738240959512,0.738305626552,0.738370286807,0.738434940274,0.738499586954,0.738564226845,0.738628859948,0.738693486262,0.738758105785,0.738822718519,0.738887324461,0.738951923611,0.739016515969,0.739081101534,0.739145680306,0.739210252284,0.739274817467,0.739339375854,0.739403927446,0.739468472242,0.73953301024,0.739597541441,0.739662065843,0.739726583447,0.739791094251,0.739855598256,0.73992009546,0.739984585862,0.740049069463,0.740113546261,0.740178016257,0.740242479449,0.740306935836,0.740371385419,0.740435828197,0.740500264169,0.740564693334,0.740629115692,0.740693531242,0.740757939984,0.740822341918,0.740886737041,0.740951125355,0.741015506858,0.74107988155,0.74114424943,0.741208610497,0.741272964751,0.741337312192,0.741401652819,0.741465986631,0.741530313627,0.741594633807,0.741658947171,0.741723253718,0.741787553447,0.741851846357,0.741916132449,0.741980411721,0.742044684173,0.742108949804,0.742173208614,0.742237460602,0.742301705767,0.74236594411,0.742430175629,0.742494400323,0.742558618193,0.742622829237,0.742687033455,0.742751230847,0.742815421411,0.742879605148,0.742943782056,0.743007952135,0.743072115385,0.743136271804,0.743200421393,0.74326456415,0.743328700076,0.743392829169,0.743456951429,0.743521066855,0.743585175447,0.743649277203,0.743713372125,0.74377746021,0.743841541459,0.743905615871,0.743969683445,0.74403374418,0.744097798076,0.744161845133,0.74422588535,0.744289918725,0.74435394526,0.744417964952,0.744481977802,0.744545983809,0.744609982972,0.744673975291,0.744737960765,0.744801939394,0.744865911176,0.744929876112,0.744993834201,0.745057785441,0.745121729834,0.745185667377,0.745249598071,0.745313521914,0.745377438907,0.745441349049,0.745505252338,0.745569148775,0.745633038359,0.745696921089,0.745760796965,0.745824665986,0.745888528152,0.745952383461,0.746016231914,0.74608007351,0.746143908248,0.746207736127,0.746271557148,0.746335371309,0.74639917861,0.74646297905,0.746526772628,0.746590559345,0.746654339199,0.746718112191,0.746781878318,0.746845637581,0.74690938998,0.746973135513,0.74703687418,0.74710060598,0.747164330913,0.747228048979,0.747291760176,0.747355464504,0.747419161963,0.747482852551,0.747546536269,0.747610213115,0.74767388309,0.747737546192,0.747801202421,0.747864851777,0.747928494258,0.747992129864,0.748055758595,0.74811938045,0.748182995429,0.74824660353,0.748310204754,0.748373799099,0.748437386566,0.748500967153,0.74856454086,0.748628107686,0.748691667631,0.748755220695,0.748818766875,0.748882306173,0.748945838588,0.749009364118,0.749072882763,0.749136394523,0.749199899398,0.749263397385,0.749326888486,0.749390372699,0.749453850024,0.74951732046,0.749580784006,0.749644240663,0.749707690429,0.749771133304,0.749834569287,0.749897998378,0.749961420576,0.75002483588,0.750088244291,0.750151645806,0.750215040427,0.750278428151,0.75034180898,0.750405182911,0.750468549945,0.75053191008,0.750595263317,0.750658609655,0.750721949092,0.750785281629,0.750848607265,0.750911926,0.750975237832,0.751038542762,0.751101840788,0.75116513191,0.751228416127,0.75129169344,0.751354963846,0.751418227347,0.75148148394,0.751544733626,0.751607976404,0.751671212274,0.751734441234,0.751797663284,0.751860878424,0.751924086654,0.751987287971,0.752050482377,0.75211366987,0.752176850449,0.752240024115,0.752303190866,0.752366350702,0.752429503623,0.752492649627,0.752555788715,0.752618920886,0.752682046138,0.752745164472,0.752808275887,0.752871380382,0.752934477957,0.752997568612,0.753060652344,0.753123729155,0.753186799044,0.753249862009,0.75331291805,0.753375967167,0.75343900936,0.753502044627,0.753565072968,0.753628094382,0.753691108869,0.753754116428,0.753817117059,0.753880110761,0.753943097533,0.754006077376,0.754069050288,0.754132016268,0.754194975317,0.754257927433,0.754320872617,0.754383810866,0.754446742182,0.754509666563,0.754572584008,0.754635494518,0.754698398092,0.754761294728,0.754824184426,0.754887067187,0.754949943009,0.755012811891,0.755075673834,0.755138528836,0.755201376897,0.755264218016,0.755327052193,0.755389879427,0.755452699718,0.755515513065,0.755578319467,0.755641118924,0.755703911436,0.755766697001,0.75582947562,0.755892247291,0.755955012014,0.756017769788,0.756080520614,0.756143264489,0.756206001414,0.756268731389,0.756331454412,0.756394170483,0.756456879601,0.756519581766,0.756582276977,0.756644965234,0.756707646536,0.756770320883,0.756832988273,0.756895648707,0.756958302184,0.757020948703,0.757083588263,0.757146220865,0.757208846506,0.757271465188,0.75733407691,0.757396681669,0.757459279468,0.757521870303,0.757584454176,0.757647031085,0.75770960103,0.757772164011,0.757834720026,0.757897269075,0.757959811158,0.758022346273,0.758084874422,0.758147395602,0.758209909813,0.758272417055,0.758334917327,0.758397410629,0.75845989696,0.758522376319,0.758584848705,0.75864731412,0.75870977256,0.758772224027,0.75883466852,0.758897106037,0.758959536579,0.759021960145,0.759084376733,0.759146786345,0.759209188978,0.759271584633,0.759333973309,0.759396355006,0.759458729722,0.759521097457,0.759583458211,0.759645811984,0.759708158773,0.75977049858,0.759832831403,0.759895157241,0.759957476095,0.760019787964,0.760082092846,0.760144390742,0.760206681651,0.760268965573,0.760331242506,0.76039351245,0.760455775405,0.76051803137,0.760580280344,0.760642522328,0.760704757319,0.760766985319,0.760829206325,0.760891420339,0.760953627358,0.761015827383,0.761078020412,0.761140206446,0.761202385484,0.761264557525,0.761326722569,0.761388880615,0.761451031662,0.76151317571,0.761575312758,0.761637442806,0.761699565854,0.761761681899,0.761823790943,0.761885892985,0.761947988023,0.762010076058,0.762072157089,0.762134231114,0.762196298135,0.762258358149,0.762320411157,0.762382457158,0.762444496151,0.762506528136,0.762568553112,0.762630571078,0.762692582035,0.762754585981,0.762816582917,0.76287857284,0.762940555752,0.76300253165,0.763064500535,0.763126462407,0.763188417263,0.763250365105,0.763312305931,0.763374239741,0.763436166534,0.76349808631,0.763559999068,0.763621904807,0.763683803528,0.763745695228,0.763807579909,0.763869457569,0.763931328207,0.763993191824,0.764055048418,0.764116897989,0.764178740536,0.764240576059,0.764302404558,0.764364226031,0.764426040479,0.7644878479,0.764549648293,0.76461144166,0.764673227998,0.764735007308,0.764796779588,0.764858544838,0.764920303058,0.764982054247,0.765043798405,0.76510553553,0.765167265622,0.765228988682,0.765290704707,0.765352413699,0.765414115655,0.765475810575,0.76553749846,0.765599179308,0.765660853119,0.765722519892,0.765784179626,0.765845832322,0.765907477978,0.765969116594,0.76603074817,0.766092372704,0.766153990196,0.766215600647,0.766277204054,0.766338800418,0.766400389738,0.766461972013,0.766523547243,0.766585115427,0.766646676565,0.766708230657,0.7667697777,0.766831317696,0.766892850643,0.766954376542,0.76701589539,0.767077407188,0.767138911936,0.767200409632,0.767261900276,0.767323383868,0.767384860406,0.767446329891,0.767507792322,0.767569247698,0.767630696018,0.767692137283,0.767753571491,0.767814998642,0.767876418736,0.767937831772,0.767999237748,0.768060636666,0.768122028523,0.768183413321,0.768244791057,0.768306161731,0.768367525344,0.768428881894,0.768490231381,0.768551573804,0.768612909162,0.768674237456,0.768735558684,0.768796872846,0.768858179941,0.76891947997,0.76898077293,0.769042058822,0.769103337646,0.769164609399,0.769225874083,0.769287131697,0.769348382239,0.76940962571,0.769470862108,0.769532091433,0.769593313685,0.769654528864,0.769715736967,0.769776937996,0.769838131949,0.769899318826,0.769960498626,0.770021671348,0.770082836993,0.77014399556,0.770205147047,0.770266291455,0.770327428783,0.77038855903,0.770449682196,0.77051079828,0.770571907281,0.7706330092,0.770694104035,0.770755191786,0.770816272453,0.770877346034,0.77093841253,0.770999471939,0.771060524262,0.771121569497,0.771182607644,0.771243638702,0.771304662672,0.771365679552,0.771426689341,0.77148769204,0.771548687647,0.771609676163,0.771670657586,0.771731631916,0.771792599152,0.771853559294,0.771914512342,0.771975458294,0.77203639715,0.77209732891,0.772158253573,0.772219171139,0.772280081606,0.772340984975,0.772401881245,0.772462770415,0.772523652484,0.772584527453,0.77264539532,0.772706256086,0.772767109748,0.772827956308,0.772888795764,0.772949628116,0.773010453363,0.773071271504,0.77313208254,0.773192886469,0.773253683291,0.773314473006,0.773375255613,0.77343603111,0.773496799499,0.773557560778,0.773618314946,0.773679062003,0.773739801949,0.773800534783,0.773861260504,0.773921979112,0.773982690607,0.774043394987,0.774104092252,0.774164782402,0.774225465436,0.774286141353,0.774346810154,0.774407471836,0.774468126401,0.774528773846,0.774589414173,0.774650047379,0.774710673466,0.774771292431,0.774831904274,0.774892508996,0.774953106595,0.775013697071,0.775074280423,0.77513485665,0.775195425753,0.77525598773,0.775316542582,0.775377090306,0.775437630904,0.775498164374,0.775558690716,0.775619209929,0.775679722013,0.775740226967,0.77580072479,0.775861215483,0.775921699043,0.775982175472,0.776042644768,0.776103106931,0.77616356196,0.776224009855,0.776284450615,0.776344884239,0.776405310728,0.77646573008,0.776526142295,0.776586547372,0.776646945311,0.776707336111,0.776767719772,0.776828096293,0.776888465673,0.776948827913,0.777009183011,0.777069530967,0.77712987178,0.77719020545,0.777250531976,0.777310851358,0.777371163595,0.777431468687,0.777491766632,0.777552057431,0.777612341083,0.777672617588,0.777732886944,0.777793149151,0.777853404209,0.777913652118,0.777973892876,0.778034126482,0.778094352938,0.778154572241,0.778214784392,0.778274989389,0.778335187233,0.778395377922,0.778455561457,0.778515737836,0.778575907059,0.778636069126,0.778696224036,0.778756371788,0.778816512381,0.778876645817,0.778936772093,0.778996891209,0.779057003164,0.779117107959,0.779177205593,0.779237296064,0.779297379373,0.779357455518,0.7794175245,0.779477586318,0.779537640971,0.779597688458,0.77965772878,0.779717761935,0.779777787923,0.779837806744,0.779897818396,0.77995782288,0.780017820195,0.78007781034,0.780137793314,0.780197769118,0.78025773775,0.780317699211,0.780377653499,0.780437600613,0.780497540555,0.780557473322,0.780617398914,0.780677317331,0.780737228572,0.780797132637,0.780857029525,0.780916919235,0.780976801768,0.781036677122,0.781096545296,0.781156406291,0.781216260106,0.78127610674,0.781335946193,0.781395778464,0.781455603552,0.781515421458,0.78157523218,0.781635035718,0.781694832071,0.781754621239,0.781814403222,0.781874178018,0.781933945627,0.781993706049,0.782053459283,0.782113205328,0.782172944185,0.782232675852,0.782292400329,0.782352117615,0.78241182771,0.782471530613,0.782531226324,0.782590914842,0.782650596167,0.782710270297,0.782769937233,0.782829596975,0.78288924952,0.782948894869,0.783008533022,0.783068163977,0.783127787735,0.783187404294,0.783247013655,0.783306615816,0.783366210777,0.783425798537,0.783485379096,0.783544952454,0.78360451861,0.783664077562,0.783723629312,0.783783173858,0.783842711199,0.783902241336,0.783961764266,0.784021279991,0.78408078851,0.784140289821,0.784199783925,0.78425927082,0.784318750507,0.784378222984,0.784437688252,0.784497146309,0.784556597156,0.78461604079,0.784675477213,0.784734906423,0.78479432842,0.784853743204,0.784913150773,0.784972551128,0.785031944267,0.78509133019,0.785150708897,0.785210080387,0.78526944466,0.785328801714,0.78538815155,0.785447494167,0.785506829564,0.785566157741,0.785625478697,0.785684792432,0.785744098945,0.785803398236,0.785862690303,0.785921975148,0.785981252768,0.786040523163,0.786099786334,0.786159042279,0.786218290997,0.786277532489,0.786336766754,0.786395993791,0.786455213599,0.786514426179,0.786573631529,0.786632829648,0.786692020538,0.786751204196,0.786810380623,0.786869549817,0.786928711779,0.786987866507,0.787047014002,0.787106154262,0.787165287288,0.787224413078,0.787283531631,0.787342642949,0.787401747029,0.787460843872,0.787519933476,0.787579015842,0.787638090968,0.787697158855,0.787756219501,0.787815272907,0.787874319071,0.787933357993,0.787992389673,0.788051414109,0.788110431302,0.788169441251,0.788228443955,0.788287439414,0.788346427627,0.788405408593,0.788464382313,0.788523348786,0.78858230801,0.788641259986,0.788700204714,0.788759142191,0.788818072418,0.788876995395,0.788935911121,0.788994819595,0.789053720816,0.789112614785,0.7891715015,0.789230380962,0.789289253169,0.789348118121,0.789406975818,0.789465826258,0.789524669442,0.789583505369,0.789642334038,0.789701155449,0.789759969601,0.789818776494,0.789877576127,0.789936368499,0.789995153611,0.790053931461,0.790112702049,0.790171465375,0.790230221437,0.790288970236,0.790347711771,0.790406446041,0.790465173046,0.790523892785,0.790582605257,0.790641310463,0.790700008402,0.790758699072,0.790817382474,0.790876058607,0.790934727471,0.790993389064,0.791052043386,0.791110690438,0.791169330218,0.791227962725,0.79128658796,0.791345205921,0.791403816609,0.791462420022,0.79152101616,0.791579605023,0.791638186609,0.791696760919,0.791755327952,0.791813887707,0.791872440184,0.791930985383,0.791989523302,0.792048053941,0.7921065773,0.792165093378,0.792223602175,0.79228210369,0.792340597922,0.792399084871,0.792457564537,0.792516036918,0.792574502015,0.792632959827,0.792691410353,0.792749853593,0.792808289546,0.792866718212,0.79292513959,0.792983553679,0.793041960479,0.79310035999,0.793158752211,0.793217137142,0.793275514781,0.793333885129,0.793392248185,0.793450603948,0.793508952417,0.793567293593,0.793625627475,0.793683954062,0.793742273353,0.793800585349,0.793858890048,0.79391718745,0.793975477554,0.794033760361,0.794092035869,0.794150304078,0.794208564987,0.794266818596,0.794325064904,0.794383303911,0.794441535616,0.794499760019,0.794557977119,0.794616186915,0.794674389408,0.794732584596,0.794790772479,0.794848953057,0.794907126328,0.794965292293,0.795023450951,0.795081602301,0.795139746343,0.795197883076,0.7952560125,0.795314134613,0.795372249417,0.79543035691,0.795488457091,0.79554654996,0.795604635517,0.795662713761,0.795720784691,0.795778848307,0.795836904609,0.795894953595,0.795952995266,0.79601102962,0.796069056658,0.796127076378,0.796185088781,0.796243093865,0.79630109163,0.796359082076,0.796417065202,0.796475041008,0.796533009492,0.796590970655,0.796648924495,0.796706871013,0.796764810208,0.79682274208,0.796880666627,0.796938583849,0.796996493746,0.797054396317,0.797112291562,0.79717017948,0.79722806007,0.797285933333,0.797343799267,0.797401657872,0.797459509147,0.797517353093,0.797575189708,0.797633018991,0.797690840943,0.797748655563,0.79780646285,0.797864262804,0.797922055424,0.79797984071,0.798037618661,0.798095389276,0.798153152556,0.798210908499,0.798268657105,0.798326398373,0.798384132304,0.798441858896,0.798499578149,0.798557290062,0.798614994635,0.798672691867,0.798730381758,0.798788064308,0.798845739515,0.798903407379,0.7989610679,0.799018721077,0.799076366909,0.799134005397,0.799191636539,0.799249260335,0.799306876785,0.799364485888,0.799422087643,0.79947968205,0.799537269108,0.799594848817,0.799652421176,0.799709986186,0.799767543844,0.799825094151,0.799882637106,0.799940172709,0.799997700959,0.800055221856,0.800112735399,0.800170241587,0.80022774042,0.800285231898,0.80034271602,0.800400192785,0.800457662193,0.800515124243,0.800572578935,0.800630026269,0.800687466243,0.800744898857,0.800802324112,0.800859742005,0.800917152537,0.800974555708,0.801031951515,0.80108933996,0.801146721042,0.80120409476,0.801261461113,0.801318820101,0.801376171723,0.80143351598,0.801490852869,0.801548182392,0.801605504547,0.801662819334,0.801720126752,0.801777426801,0.80183471948,0.801892004789,0.801949282727,0.802006553293,0.802063816488,0.802121072311,0.80217832076,0.802235561836,0.802292795538,0.802350021866,0.802407240818,0.802464452395,0.802521656596,0.80257885342,0.802636042867,0.802693224937,0.802750399628,0.802807566941,0.802864726874,0.802921879428,0.802979024601,0.803036162393,0.803093292804,0.803150415834,0.803207531481,0.803264639745,0.803321740625,0.803378834122,0.803435920234,0.803492998961,0.803550070303,0.803607134258,0.803664190827,0.803721240009,0.803778281803,0.803835316209,0.803892343226,0.803949362854,0.804006375093,0.804063379941,0.804120377398,0.804177367464,0.804234350139,0.80429132542,0.804348293309,0.804405253805,0.804462206907,0.804519152614,0.804576090926,0.804633021843,0.804689945364,0.804746861488,0.804803770215,0.804860671545,0.804917565476,0.804974452009,0.805031331143,0.805088202877,0.805145067211,0.805201924144,0.805258773676,0.805315615806,0.805372450534,0.805429277859,0.80548609778,0.805542910298,0.805599715412,0.80565651312,0.805713303423,0.805770086321,0.805826861811,0.805883629895,0.805940390571,0.805997143839,0.806053889699,0.80611062815,0.806167359191,0.806224082821,0.806280799042,0.806337507851,0.806394209248,0.806450903233,0.806507589806,0.806564268965,0.80662094071,0.806677605041,0.806734261958,0.806790911459,0.806847553544,0.806904188213,0.806960815464,0.807017435299,0.807074047716,0.807130652714,0.807187250293,0.807243840452,0.807300423192,0.807356998511,0.807413566409,0.807470126886,0.80752667994,0.807583225572,0.80763976378,0.807696294565,0.807752817926,0.807809333862,0.807865842373,0.807922343458,0.807978837117,0.80803532335,0.808091802154,0.808148273531,0.80820473748,0.808261194,0.808317643091,0.808374084751,0.808430518982,0.808486945781,0.808543365149,0.808599777085,0.808656181588,0.808712578659,0.808768968296,0.808825350499,0.808881725267,0.8089380926,0.808994452498,0.80905080496,0.809107149985,0.809163487572,0.809219817723,0.809276140435,0.809332455708,0.809388763542,0.809445063937,0.809501356891,0.809557642404,0.809613920476,0.809670191106,0.809726454294,0.80978271004,0.809838958341,0.809895199199,0.809951432613,0.810007658582,0.810063877105,0.810120088182,0.810176291813,0.810232487997,0.810288676733,0.810344858022,0.810401031862,0.810457198253,0.810513357194,0.810569508685,0.810625652726,0.810681789315,0.810737918453,0.810794040139,0.810850154372,0.810906261152,0.810962360479,0.811018452351,0.811074536768,0.811130613731,0.811186683237,0.811242745287,0.811298799881,0.811354847017,0.811410886695,0.811466918916,0.811522943677,0.811578960979,0.811634970821,0.811690973202,0.811746968123,0.811802955583,0.81185893558,0.811914908115,0.811970873187,0.812026830796,0.81208278094,0.81213872362,0.812194658836,0.812250586585,0.812306506869,0.812362419686,0.812418325036,0.812474222918,0.812530113333,0.812585996278,0.812641871755,0.812697739762,0.812753600299,0.812809453365,0.81286529896,0.812921137083,0.812976967734,0.813032790913,0.813088606618,0.813144414849,0.813200215606,0.813256008889,0.813311794696,0.813367573027,0.813423343883,0.813479107261,0.813534863162,0.813590611585,0.81364635253,0.813702085995,0.813757811982,0.813813530489,0.813869241515,0.81392494506,0.813980641124,0.814036329706,0.814092010805,0.814147684422,0.814203350555,0.814259009204,0.814314660369,0.814370304048,0.814425940242,0.81448156895,0.814537190172,0.814592803906,0.814648410153,0.814704008912,0.814759600182,0.814815183964,0.814870760255,0.814926329057,0.814981890367,0.815037444187,0.815092990515,0.815148529351,0.815204060694,0.815259584544,0.8153151009,0.815370609762,0.81542611113,0.815481605002,0.815537091378,0.815592570259,0.815648041642,0.815703505528,0.815758961917,0.815814410807,0.815869852198,0.81592528609,0.815980712482,0.816036131374,0.816091542765,0.816146946655,0.816202343043,0.816257731928,0.816313113311,0.81636848719,0.816423853566,0.816479212437,0.816534563803,0.816589907664,0.816645244018,0.816700572867,0.816755894208,0.816811208042,0.816866514368,0.816921813186,0.816977104494,0.817032388294,0.817087664583,0.817142933361,0.817198194629,0.817253448385,0.817308694629,0.817363933361,0.817419164579,0.817474388284,0.817529604475,0.817584813152,0.817640014313,0.817695207959,0.817750394088,0.817805572701,0.817860743797,0.817915907376,0.817971063436,0.818026211978,0.818081353,0.818136486503,0.818191612486,0.818246730948,0.818301841889,0.818356945309,0.818412041206,0.81846712958,0.818522210432,0.818577283759,0.818632349563,0.818687407842,0.818742458595,0.818797501823,0.818852537525,0.8189075657,0.818962586347,0.819017599467,0.819072605059,0.819127603122,0.819182593656,0.81923757666,0.819292552134,0.819347520077,0.819402480489,0.819457433369,0.819512378716,0.819567316531,0.819622246813,0.819677169561,0.819732084774,0.819786992453,0.819841892596,0.819896785204,0.819951670275,0.82000654781,0.820061417807,0.820116280266,0.820171135187,0.820225982569,0.820280822412,0.820335654715,0.820390479478,0.8204452967,0.82050010638,0.820554908519,0.820609703115,0.820664490168,0.820719269678,0.820774041644,0.820828806066,0.820883562943,0.820938312274,0.82099305406,0.821047788299,0.821102514991,0.821157234136,0.821211945733,0.821266649781,0.821321346281,0.821376035231,0.821430716632,0.821485390482,0.821540056781,0.821594715528,0.821649366724,0.821704010367,0.821758646457,0.821813274994,0.821867895977,0.821922509406,0.821977115279,0.822031713597,0.82208630436,0.822140887565,0.822195463214,0.822250031306,0.822304591839,0.822359144814,0.82241369023,0.822468228087,0.822522758383,0.822577281119,0.822631796295,0.822686303908,0.82274080396,0.822795296449,0.822849781376,0.822904258739,0.822958728538,0.823013190772,0.823067645442,0.823122092546,0.823176532084,0.823230964056,0.82328538846,0.823339805298,0.823394214567,0.823448616268,0.8235030104,0.823557396962,0.823611775954,0.823666147376,0.823720511227,0.823774867507,0.823829216215,0.82388355735,0.823937890912,0.8239922169,0.824046535315,0.824100846156,0.824155149421,0.824209445111,0.824263733225,0.824318013762,0.824372286723,0.824426552106,0.824480809911,0.824535060137,0.824589302785,0.824643537853,0.824697765342,0.824751985249,0.824806197576,0.824860402322,0.824914599485,0.824968789066,0.825022971065,0.825077145479,0.82513131231,0.825185471556,0.825239623218,0.825293767294,0.825347903784,0.825402032688,0.825456154004,0.825510267734,0.825564373875,0.825618472428,0.825672563392,0.825726646767,0.825780722552,0.825834790746,0.82588885135,0.825942904362,0.825996949782,0.82605098761,0.826105017845,0.826159040486,0.826213055534,0.826267062987,0.826321062846,0.826375055109,0.826429039776,0.826483016847,0.826536986321,0.826590948197,0.826644902476,0.826698849157,0.826752788238,0.826806719721,0.826860643603,0.826914559885,0.826968468567,0.827022369647,0.827076263125,0.827130149001,0.827184027274,0.827237897943,0.827291761009,0.827345616471,0.827399464328,0.82745330458,0.827507137226,0.827560962265,0.827614779698,0.827668589524,0.827722391741,0.827776186351,0.827829973352,0.827883752743,0.827937524525,0.827991288697,0.828045045258,0.828098794207,0.828152535545,0.828206269271,0.828259995384,0.828313713884,0.828367424771,0.828421128043,0.8284748237,0.828528511742,0.828582192169,0.828635864979,0.828689530173,0.82874318775,0.828796837709,0.82885048005,0.828904114772,0.828957741875,0.829011361359,0.829064973222,0.829118577465,0.829172174087,0.829225763087,0.829279344465,0.829332918221,0.829386484353,0.829440042862,0.829493593747,0.829547137008,0.829600672643,0.829654200653,0.829707721037,0.829761233795,0.829814738925,0.829868236428,0.829921726303,0.829975208549,0.830028683167,0.830082150155,0.830135609513,0.830189061241,0.830242505338,0.830295941803,0.830349370637,0.830402791838,0.830456205406,0.830509611341,0.830563009642,0.830616400309,0.830669783341,0.830723158737,0.830776526498,0.830829886622,0.83088323911,0.83093658396,0.830989921172,0.831043250746,0.831096572682,0.831149886978,0.831203193634,0.83125649265,0.831309784026,0.83136306776,0.831416343852,0.831469612303,0.83152287311,0.831576126274,0.831629371795,0.831682609672,0.831735839904,0.83178906249,0.831842277432,0.831895484727,0.831948684375,0.832001876376,0.83205506073,0.832108237436,0.832161406493,0.832214567901,0.832267721659,0.832320867768,0.832374006226,0.832427137033,0.832480260188,0.832533375692,0.832586483543,0.832639583741,0.832692676286,0.832745761176,0.832798838413,0.832851907994,0.83290496992,0.83295802419,0.833011070804,0.833064109761,0.83311714106,0.833170164702,0.833223180685,0.83327618901,0.833329189675,0.833382182681,0.833435168026,0.83348814571,0.833541115733,0.833594078095,0.833647032794,0.833699979831,0.833752919204,0.833805850914,0.833858774959,0.83391169134,0.833964600056,0.834017501106,0.83407039449,0.834123280207,0.834176158258,0.83422902864,0.834281891355,0.834334746401,0.834387593778,0.834440433486,0.834493265524,0.834546089891,0.834598906587,0.834651715612,0.834704516965,0.834757310645,0.834810096652,0.834862874986,0.834915645647,0.834968408632,0.835021163943,0.835073911579,0.835126651539,0.835179383822,0.835232108429,0.835284825358,0.83533753461,0.835390236183,0.835442930078,0.835495616294,0.835548294829,0.835600965685,0.83565362886,0.835706284354,0.835758932166,0.835811572296,0.835864204743,0.835916829508,0.835969446589,0.836022055985,0.836074657698,0.836127251725,0.836179838066,0.836232416722,0.836284987691,0.836337550974,0.836390106568,0.836442654475,0.836495194694,0.836547727224,0.836600252064,0.836652769214,0.836705278674,0.836757780444,0.836810274522,0.836862760908,0.836915239602,0.836967710603,0.837020173911,0.837072629525,0.837125077445,0.837177517671,0.837229950201,0.837282375035,0.837334792174,0.837387201616,0.83743960336,0.837491997408,0.837544383757,0.837596762407,0.837649133359,0.837701496611,0.837753852163,0.837806200015,0.837858540166,0.837910872615,0.837963197363,0.838015514408,0.83806782375,0.838120125389,0.838172419324,0.838224705555,0.838276984081,0.838329254902,0.838381518017,0.838433773425,0.838486021127,0.838538261122,0.838590493409,0.838642717989,0.838694934859,0.83874714402,0.838799345472,0.838851539214,0.838903725245,0.838955903565,0.839008074174,0.83906023707,0.839112392254,0.839164539726,0.839216679484,0.839268811527,0.839320935857,0.839373052472,0.839425161371,0.839477262555,0.839529356022,0.839581441772,0.839633519805,0.839685590121,0.839737652718,0.839789707597,0.839841754756,0.839893794196,0.839945825916,0.839997849915,0.840049866193,0.840101874749,0.840153875583,0.840205868695,0.840257854084,0.84030983175,0.840361801691,0.840413763908,0.8404657184,0.840517665167,0.840569604208,0.840621535522,0.84067345911,0.84072537497,0.840777283103,0.840829183508,0.840881076183,0.84093296113,0.840984838347,0.841036707833,0.841088569589,0.841140423614,0.841192269908,0.841244108469,0.841295939298,0.841347762394,0.841399577756,0.841451385384,0.841503185278,0.841554977437,0.84160676186,0.841658538548,0.841710307499,0.841762068714,0.841813822191,0.841865567931,0.841917305932,0.841969036194,0.842020758718,0.842072473501,0.842124180545,0.842175879848,0.842227571409,0.842279255229,0.842330931308,0.842382599643,0.842434260236,0.842485913085,0.84253755819,0.842589195551,0.842640825167,0.842692447037,0.842744061162,0.84279566754,0.842847266172,0.842898857056,0.842950440192,0.84300201558,0.84305358322,0.84310514311,0.843156695251,0.843208239642,0.843259776282,0.843311305171,0.843362826308,0.843414339694,0.843465845327,0.843517343207,0.843568833333,0.843620315706,0.843671790324,0.843723257188,0.843774716296,0.843826167648,0.843877611244,0.843929047084,0.843980475166,0.84403189549,0.844083308056,0.844134712864,0.844186109912,0.844237499201,0.84428888073,0.844340254499,0.844391620506,0.844442978752,0.844494329236,0.844545671957,0.844597006916,0.844648334111,0.844699653543,0.84475096521,0.844802269113,0.84485356525,0.844904853621,0.844956134226,0.845007407065,0.845058672137,0.845109929441,0.845161178976,0.845212420744,0.845263654742,0.845314880971,0.84536609943,0.845417310118,0.845468513036,0.845519708182,0.845570895556,0.845622075158,0.845673246987,0.845724411043,0.845775567326,0.845826715834,0.845877856567,0.845928989525,0.845980114708,0.846031232115,0.846082341745,0.846133443598,0.846184537674,0.846235623971,0.846286702491,0.846337773231,0.846388836192,0.846439891373,0.846490938774,0.846541978394,0.846593010233,0.84664403429,0.846695050565,0.846746059058,0.846797059767,0.846848052693,0.846899037834,0.846950015192,0.847000984764,0.84705194655,0.847102900551,0.847153846766,0.847204785193,0.847255715833,0.847306638686,0.84735755375,0.847408461025,0.847459360512,0.847510252208,0.847561136115,0.847612012231,0.847662880555,0.847713741089,0.84776459383,0.847815438779,0.847866275935,0.847917105297,0.847967926866,0.84801874064,0.848069546619,0.848120344803,0.848171135192,0.848221917784,0.848272692579,0.848323459578,0.848374218779,0.848424970181,0.848475713785,0.848526449591,0.848577177596,0.848627897802,0.848678610207,0.848729314812,0.848780011615,0.848830700616,0.848881381815,0.848932055212,0.848982720805,0.849033378594,0.84908402858,0.84913467076,0.849185305136,0.849235931706,0.84928655047,0.849337161428,0.849387764579,0.849438359922,0.849488947457,0.849539527185,0.849590099103,0.849640663212,0.849691219512,0.849741768001,0.849792308679,0.849842841547,0.849893366603,0.849943883847,0.849994393278,0.850044894897,0.850095388702,0.850145874693,0.850196352869,0.850246823231,0.850297285778,0.850347740509,0.850398187424,0.850448626522,0.850499057802,0.850549481266,0.850599896911,0.850650304737,0.850700704745,0.850751096933,0.850801481302,0.850851857849,0.850902226576,0.850952587482,0.851002940566,0.851053285828,0.851103623267,0.851153952883,0.851204274675,0.851254588643,0.851304894787,0.851355193105,0.851405483598,0.851455766266,0.851506041106,0.85155630812,0.851606567307,0.851656818666,0.851707062196,0.851757297898,0.851807525771,0.851857745814,0.851907958027,0.851958162409,0.85200835896,0.85205854768,0.852108728568,0.852158901624,0.852209066847,0.852259224236,0.852309373792,0.852359515513,0.8524096494,0.852459775451,0.852509893667,0.852560004047,0.85261010659,0.852660201296,0.852710288165,0.852760367196,0.852810438388,0.852860501742,0.852910557256,0.85296060493,0.853010644765,0.853060676758,0.853110700911,0.853160717221,0.85321072569,0.853260726316,0.8533107191,0.853360704039,0.853410681135,0.853460650387,0.853510611793,0.853560565355,0.85361051107,0.85366044894,0.853710378962,0.853760301138,0.853810215466,0.853860121946,0.853910020578,0.85395991136,0.854009794293,0.854059669377,0.85410953661,0.854159395992,0.854209247523,0.854259091202,0.854308927029,0.854358755003,0.854408575125,0.854458387392,0.854508191806,0.854557988365,0.85460777707,0.854657557919,0.854707330912,0.854757096049,0.854806853329,0.854856602752,0.854906344317,0.854956078025,0.855005803873,0.855055521863,0.855105231993,0.855154934263,0.855204628673,0.855254315222,0.855303993909,0.855353664735,0.855403327699,0.8554529828,0.855502630037,0.855552269412,0.855601900922,0.855651524567,0.855701140348,0.855750748263,0.855800348313,0.855849940496,0.855899524812,0.855949101261,0.855998669842,0.856048230555,0.8560977834,0.856147328375,0.856196865481,0.856246394717,0.856295916083,0.856345429577,0.8563949352,0.856444432952,0.856493922831,0.856543404838,0.856592878971,0.856642345231,0.856691803616,0.856741254128,0.856790696764,0.856840131525,0.856889558409,0.856938977418,0.85698838855,0.857037791804,0.857087187181,0.857136574679,0.857185954299,0.85723532604,0.857284689901,0.857334045883,0.857383393984,0.857432734204,0.857482066543,0.857531390999,0.857580707574,0.857630016266,0.857679317075,0.85772861,0.857777895041,0.857827172198,0.85787644147,0.857925702856,0.857974956357,0.858024201971,0.858073439698,0.858122669538,0.858171891491,0.858221105555,0.858270311731,0.858319510017,0.858368700414,0.858417882922,0.858467057538,0.858516224264,0.858565383099,0.858614534042,0.858663677093,0.858712812251,0.858761939516,0.858811058887,0.858860170365,0.858909273948,0.858958369636,0.859007457429,0.859056537325,0.859105609326,0.85915467343,0.859203729637,0.859252777946,0.859301818357,0.85935085087,0.859399875483,0.859448892197,0.859497901012,0.859546901926,0.859595894939,0.859644880051,0.859693857261,0.859742826569,0.859791787975,0.859840741477,0.859889687077,0.859938624772,0.859987554563,0.860036476449,0.860085390429,0.860134296504,0.860183194673,0.860232084935,0.860280967291,0.860329841738,0.860378708278,0.860427566909,0.860476417632,0.860525260445,0.860574095348,0.860622922341,0.860671741424,0.860720552595,0.860769355855,0.860818151202,0.860866938638,0.86091571816,0.860964489769,0.861013253464,0.861062009245,0.861110757112,0.861159497063,0.861208229099,0.861256953218,0.861305669421,0.861354377707,0.861403078076,0.861451770527,0.861500455059,0.861549131673,0.861597800368,0.861646461143,0.861695113998,0.861743758933,0.861792395946,0.861841025038,0.861889646209,0.861938259456,0.861986864782,0.862035462184,0.862084051662,0.862132633216,0.862181206846,0.862229772551,0.86227833033,0.862326880184,0.862375422111,0.862423956111,0.862472482184,0.86252100033,0.862569510547,0.862618012836,0.862666507196,0.862714993626,0.862763472126,0.862811942697,0.862860405336,0.862908860044,0.862957306821,0.863005745665,0.863054176577,0.863102599555,0.863151014601,0.863199421712,0.863247820889,0.863296212131,0.863344595439,0.86339297081,0.863441338245,0.863489697744,0.863538049305,0.86358639293,0.863634728616,0.863683056364,0.863731376173,0.863779688043,0.863827991973,0.863876287963,0.863924576013,0.863972856122,0.864021128289,0.864069392514,0.864117648797,0.864165897137,0.864214137534,0.864262369987,0.864310594496,0.864358811061,0.86440701968,0.864455220354,0.864503413082,0.864551597864,0.864599774699,0.864647943587,0.864696104527,0.864744257519,0.864792402563,0.864840539658,0.864888668803,0.864936789998,0.864984903243,0.865033008537,0.86508110588,0.865129195272,0.865177276711,0.865225350198,0.865273415731,0.865321473312,0.865369522938,0.865417564611,0.865465598328,0.865513624091,0.865561641897,0.865609651748,0.865657653642,0.865705647579,0.865753633559,0.865801611581,0.865849581645,0.86589754375,0.865945497896,0.865993444082,0.866041382309,0.866089312575,0.86613723488,0.866185149223,0.866233055605,0.866280954025,0.866328844481,0.866376726975,0.866424601505,0.866472468072,0.866520326674,0.866568177311,0.866616019982,0.866663854688,0.866711681428,0.866759500201,0.866807311007,0.866855113845,0.866902908716,0.866950695618,0.866998474552,0.867046245516,0.86709400851,0.867141763534,0.867189510588,0.867237249671,0.867284980782,0.867332703921,0.867380419088,0.867428126282,0.867475825503,0.867523516751,0.867571200024,0.867618875323,0.867666542646,0.867714201995,0.867761853367,0.867809496763,0.867857132183,0.867904759625,0.86795237909,0.867999990577,0.868047594085,0.868095189614,0.868142777164,0.868190356734,0.868237928324,0.868285491934,0.868333047562,0.868380595209,0.868428134873,0.868475666556,0.868523190255,0.868570705971,0.868618213704,0.868665713452,0.868713205216,0.868760688995,0.868808164788,0.868855632595,0.868903092416,0.868950544251,0.868997988098,0.869045423957,0.869092851828,0.869140271711,0.869187683605,0.86923508751,0.869282483424,0.869329871349,0.869377251282,0.869424623225,0.869471987176,0.869519343135,0.869566691101,0.869614031075,0.869661363056,0.869708687042,0.869756003035,0.869803311033,0.869850611035,0.869897903043,0.869945187054,0.869992463069,0.870039731088,0.870086991109,0.870134243132,0.870181487157,0.870228723184,0.870275951212,0.870323171241,0.870370383269,0.870417587298,0.870464783325,0.870511971352,0.870559151377,0.8706063234,0.870653487421,0.870700643438,0.870747791453,0.870794931464,0.87084206347,0.870889187472,0.870936303469,0.87098341146,0.871030511446,0.871077603425,0.871124687398,0.871171763363,0.871218831321,0.87126589127,0.871312943212,0.871359987144,0.871407023067,0.87145405098,0.871501070883,0.871548082775,0.871595086656,0.871642082526,0.871689070383,0.871736050229,0.871783022061,0.87182998588,0.871876941686,0.871923889477,0.871970829254,0.872017761016,0.872064684763,0.872111600493,0.872158508208,0.872205407906,0.872252299586,0.872299183249,0.872346058894,0.872392926521,0.872439786129,0.872486637717,0.872533481286,0.872580316835,0.872627144363,0.87267396387,0.872720775356,0.87276757882,0.872814374261,0.87286116168,0.872907941076,0.872954712448,0.873001475796,0.87304823112,0.873094978418,0.873141717692,0.873188448939,0.873235172161,0.873281887356,0.873328594524,0.873375293664,0.873421984777,0.873468667861,0.873515342917,0.873562009943,0.87360866894,0.873655319907,0.873701962843,0.873748597749,0.873795224623,0.873841843465,0.873888454276,0.873935057053,0.873981651798,0.874028238509,0.874074817186,0.874121387829,0.874167950438,0.874214505011,0.874261051548,0.87430759005,0.874354120515,0.874400642943,0.874447157334,0.874493663687,0.874540162002,0.874586652278,0.874633134516,0.874679608713,0.874726074872,0.874772532989,0.874818983066,0.874865425102,0.874911859097,0.874958285049,0.875004702959,0.875051112826,0.87509751465,0.87514390843,0.875190294165,0.875236671857,0.875283041503,0.875329403104,0.875375756659,0.875422102168,0.87546843963,0.875514769045,0.875561090413,0.875607403732,0.875653709003,0.875700006226,0.875746295399,0.875792576522,0.875838849595,0.875885114618,0.87593137159,0.87597762051,0.876023861379,0.876070094195,0.876116318959,0.87616253567,0.876208744327,0.87625494493,0.876301137479,0.876347321973,0.876393498412,0.876439666796,0.876485827123,0.876531979394,0.876578123608,0.876624259764,0.876670387863,0.876716507904,0.876762619886,0.876808723809,0.876854819673,0.876900907477,0.87694698722,0.876993058903,0.877039122525,0.877085178085,0.877131225583,0.877177265019,0.877223296392,0.877269319701,0.877315334947,0.877361342129,0.877407341246,0.877453332299,0.877499315286,0.877545290207,0.877591257062,0.877637215851,0.877683166572,0.877729109226,0.877775043812,0.87782097033,0.877866888779,0.877912799159,0.877958701469,0.878004595709,0.878050481879,0.878096359978,0.878142230005,0.878188091961,0.878233945845,0.878279791657,0.878325629395,0.87837145906,0.878417280651,0.878463094168,0.87850889961,0.878554696977,0.878600486269,0.878646267485,0.878692040625,0.878737805687,0.878783562673,0.878829311581,0.878875052411,0.878920785162,0.878966509835,0.879012226429,0.879057934942,0.879103635376,0.879149327729,0.879195012001,0.879240688192,0.879286356301,0.879332016328,0.879377668272,0.879423312133,0.879468947911,0.879514575604,0.879560195214,0.879605806739,0.879651410178,0.879697005532,0.8797425928,0.879788171982,0.879833743076,0.879879306084,0.879924861004,0.879970407836,0.880015946579,0.880061477233,0.880106999798,0.880152514274,0.880198020659,0.880243518953,0.880289009157,0.880334491269,0.880379965289,0.880425431217,0.880470889052,0.880516338794,0.880561780443,0.880607213998,0.880652639458,0.880698056824,0.880743466094,0.880788867269,0.880834260348,0.88087964533,0.880925022216,0.880970391004,0.881015751694,0.881061104287,0.881106448781,0.881151785176,0.881197113471,0.881242433667,0.881287745763,0.881333049758,0.881378345652,0.881423633444,0.881468913135,0.881514184723,0.881559448209,0.881604703592,0.881649950871,0.881695190046,0.881740421117,0.881785644083,0.881830858944,0.881876065699,0.881921264348,0.881966454891,0.882011637327,0.882056811656,0.882101977877,0.88214713599,0.882192285994,0.88223742789,0.882282561676,0.882327687352,0.882372804919,0.882417914374,0.882463015719,0.882508108952,0.882553194074,0.882598271083,0.88264333998,0.882688400763,0.882733453433,0.882778497989,0.882823534431,0.882868562758,0.88291358297,0.882958595066,0.883003599047,0.883048594911,0.883093582658,0.883138562288,0.883183533801,0.883228497195,0.883273452471,0.883318399628,0.883363338666,0.883408269584,0.883453192382,0.883498107059,0.883543013616,0.883587912051,0.883632802365,0.883677684556,0.883722558625,0.883767424571,0.883812282393,0.883857132091,0.883901973666,0.883946807116,0.88399163244,0.884036449639,0.884081258713,0.88412605966,0.88417085248,0.884215637173,0.884260413739,0.884305182177,0.884349942486,0.884394694667,0.884439438718,0.88448417464,0.884528902432,0.884573622094,0.884618333624,0.884663037024,0.884707732292,0.884752419428,0.884797098431,0.884841769301,0.884886432039,0.884931086642,0.884975733112,0.885020371447,0.885065001647,0.885109623711,0.88515423764,0.885198843433,0.885243441089,0.885288030609,0.885332611991,0.885377185235,0.885421750341,0.885466307308,0.885510856136,0.885555396825,0.885599929374,0.885644453783,0.885688970051,0.885733478178,0.885777978164,0.885822470007,0.885866953709,0.885911429268,0.885955896683,0.886000355955,0.886044807084,0.886089250067,0.886133684907,0.8861781116,0.886222530149,0.886266940551,0.886311342807,0.886355736917,0.886400122879,0.886444500693,0.88648887036,0.886533231878,0.886577585247,0.886621930467,0.886666267537,0.886710596458,0.886754917228,0.886799229847,0.886843534314,0.88688783063,0.886932118794,0.886976398806,0.887020670664,0.88706493437,0.887109189921,0.887153437319,0.887197676562,0.88724190765,0.887286130582,0.887330345359,0.88737455198,0.887418750444,0.887462940752,0.887507122901,0.887551296894,0.887595462728,0.887639620403,0.887683769919,0.887727911276,0.887772044473,0.88781616951,0.887860286387,0.887904395102,0.887948495656,0.887992588048,0.888036672278,0.888080748345,0.888124816249,0.88816887599,0.888212927566,0.888256970979,0.888301006227,0.88834503331,0.888389052227,0.888433062978,0.888477065564,0.888521059982,0.888565046233,0.888609024317,0.888652994233,0.888696955981,0.88874090956,0.88878485497,0.88882879221,0.88887272128,0.88891664218,0.88896055491,0.889004459468,0.889048355855,0.889092244069,0.889136124112,0.889179995981,0.889223859678,0.889267715201,0.88931156255,0.889355401724,0.889399232724,0.889443055549,0.889486870198,0.889530676671,0.889574474968,0.889618265088,0.889662047031,0.889705820796,0.889749586383,0.889793343792,0.889837093022,0.889880834073,0.889924566944,0.889968291635,0.890012008146,0.890055716476,0.890099416625,0.890143108592,0.890186792378,0.890230467981,0.890274135401,0.890317794637,0.890361445691,0.89040508856,0.890448723245,0.890492349745,0.89053596806,0.890579578189,0.890623180132,0.890666773889,0.890710359459,0.890753936841,0.890797506036,0.890841067043,0.890884619862,0.890928164492,0.890971700932,0.891015229183,0.891058749244,0.891102261115,0.891145764795,0.891189260283,0.89123274758,0.891276226685,0.891319697597,0.891363160317,0.891406614843,0.891450061176,0.891493499315,0.891536929259,0.891580351009,0.891623764563,0.891667169922,0.891710567084,0.891753956051,0.89179733682,0.891840709392,0.891884073767,0.891927429944,0.891970777922,0.892014117701,0.892057449282,0.892100772662,0.892144087843,0.892187394823,0.892230693602,0.892273984181,0.892317266557,0.892360540732,0.892403806704,0.892447064474,0.89249031404,0.892533555403,0.892576788562,0.892620013516,0.892663230265,0.89270643881,0.892749639149,0.892792831282,0.892836015208,0.892879190928,0.892922358441,0.892965517746,0.893008668843,0.893051811732,0.893094946412,0.893138072883,0.893181191144,0.893224301196,0.893267403037,0.893310496667,0.893353582086,0.893396659294,0.89343972829,0.893482789074,0.893525841644,0.893568886002,0.893611922146,0.893654950077,0.893697969793,0.893740981294,0.893783984581,0.893826979651,0.893869966506,0.893912945145,0.893955915567,0.893998877772,0.89404183176,0.89408477753,0.894127715081,0.894170644414,0.894213565528,0.894256478422,0.894299383097,0.894342279551,0.894385167785,0.894428047798,0.894470919589,0.894513783159,0.894556638506,0.894599485631,0.894642324533,0.894685155212,0.894727977667,0.894770791897,0.894813597903,0.894856395685,0.89489918524,0.894941966571,0.894984739675,0.895027504552,0.895070261203,0.895113009626,0.895155749822,0.895198481789,0.895241205528,0.895283921039,0.89532662832,0.895369327371,0.895412018192,0.895454700783,0.895497375143,0.895540041272,0.895582699169,0.895625348834,0.895667990267,0.895710623467,0.895753248434,0.895795865167,0.895838473666,0.895881073931,0.895923665961,0.895966249756,0.896008825316,0.896051392639,0.896093951727,0.896136502577,0.896179045191,0.896221579567,0.896264105705,0.896306623604,0.896349133266,0.896391634688,0.89643412787,0.896476612813,0.896519089516,0.896561557978,0.896604018199,0.896646470179,0.896688913917,0.896731349412,0.896773776665,0.896816195676,0.896858606442,0.896901008965,0.896943403244,0.896985789279,0.897028167068,0.897070536613,0.897112897911,0.897155250964,0.89719759577,0.897239932329,0.897282260641,0.897324580705,0.897366892522,0.89740919609,0.897451491409,0.897493778479,0.897536057299,0.89757832787,0.89762059019,0.897662844259,0.897705090077,0.897747327644,0.897789556959,0.897831778021,0.897873990831,0.897916195388,0.897958391691,0.898000579741,0.898042759536,0.898084931077,0.898127094362,0.898169249393,0.898211396167,0.898253534685,0.898295664947,0.898337786952,0.898379900699,0.898422006189,0.898464103421,0.898506192394,0.898548273108,0.898590345563,0.898632409759,0.898674465694,0.898716513369,0.898758552783,0.898800583936,0.898842606827,0.898884621457,0.898926627824,0.898968625928,0.899010615769,0.899052597347,0.89909457066,0.89913653571,0.899178492495,0.899220441014,0.899262381269,0.899304313257,0.899346236979,0.899388152435,0.899430059624,0.899471958545,0.899513849198,0.899555731584,0.899597605701,0.899639471549,0.899681329127,0.899723178436,0.899765019475,0.899806852244,0.899848676742,0.899890492968,0.899932300923,0.899974100606,0.900015892016,0.900057675154,0.900099450019,0.90014121661,0.900182974927,0.90022472497,0.900266466738,0.900308200231,0.900349925449,0.900391642391,0.900433351056,0.900475051445,0.900516743558,0.900558427392,0.900600102949,0.900641770228,0.900683429229,0.90072507995,0.900766722392,0.900808356555,0.900849982438,0.90089160004,0.900933209361,0.900974810401,0.90101640316,0.901057987636,0.901099563831,0.901141131742,0.901182691371,0.901224242716,0.901265785777,0.901307320554,0.901348847046,0.901390365253,0.901431875175,0.901473376811,0.901514870161,0.901556355225,0.901597832001,0.90163930049,0.901680760692,0.901722212606,0.901763656231,0.901805091567,0.901846518614,0.901887937371,0.901929347839,0.901970750016,0.902012143902,0.902053529498,0.902094906802,0.902136275814,0.902177636533,0.902218988961,0.902260333095,0.902301668935,0.902342996482,0.902384315735,0.902425626694,0.902466929357,0.902508223725,0.902549509798,0.902590787574,0.902632057054,0.902673318237,0.902714571123,0.902755815712,0.902797052002,0.902838279995,0.902879499688,0.902920711082,0.902961914177,0.903003108973,0.903044295468,0.903085473662,0.903126643555,0.903167805147,0.903208958438,0.903250103426,0.903291240112,0.903332368495,0.903373488574,0.90341460035,0.903455703822,0.90349679899,0.903537885853,0.903578964411,0.903620034663,0.903661096609,0.903702150249,0.903743195583,0.903784232609,0.903825261328,0.90386628174,0.903907293843,0.903948297638,0.903989293123,0.9040302803,0.904071259167,0.904112229724,0.90415319197,0.904194145906,0.90423509153,0.904276028843,0.904316957844,0.904357878533,0.904398790909,0.904439694972,0.904480590721,0.904521478157,0.904562357279,0.904603228086,0.904644090578,0.904684944755,0.904725790616,0.904766628162,0.90480745739,0.904848278302,0.904889090897,0.904929895174,0.904970691134,0.905011478775,0.905052258097,0.9050930291,0.905133791784,0.905174546148,0.905215292192,0.905256029916,0.905296759318,0.905337480399,0.905378193159,0.905418897596,0.905459593711,0.905500281504,0.905540960973,0.905581632118,0.90562229494,0.905662949437,0.90570359561,0.905744233458,0.90578486298,0.905825484176,0.905866097047,0.90590670159,0.905947297807,0.905987885697,0.906028465259,0.906069036493,0.906109599398,0.906150153975,0.906190700223,0.906231238141,0.906271767729,0.906312288987,0.906352801915,0.906393306511,0.906433802776,0.906474290709,0.90651477031,0.906555241579,0.906595704515,0.906636159117,0.906676605386,0.906717043321,0.906757472922,0.906797894188,0.906838307119,0.906878711714,0.906919107974,0.906959495897,0.906999875484,0.907040246734,0.907080609646,0.907120964221,0.907161310458,0.907201648356,0.907241977915,0.907282299136,0.907322612016,0.907362916557,0.907403212758,0.907443500618,0.907483780137,0.907524051314,0.90756431415,0.907604568643,0.907644814795,0.907685052603,0.907725282068,0.907765503189,0.907805715966,0.907845920399,0.907886116488,0.907926304231,0.907966483629,0.90800665468,0.908046817386,0.908086971745,0.908127117757,0.908167255422,0.908207384739,0.908247505709,0.908287618329,0.908327722601,0.908367818524,0.908407906097,0.908447985321,0.908488056194,0.908528118716,0.908568172888,0.908608218708,0.908648256176,0.908688285293,0.908728306056,0.908768318467,0.908808322525,0.908848318229,0.90888830558,0.908928284576,0.908968255217,0.909008217503,0.909048171434,0.909088117009,0.909128054228,0.909167983091,0.909207903596,0.909247815744,0.909287719535,0.909327614968,0.909367502042,0.909407380758,0.909447251114,0.909487113112,0.909526966749,0.909566812026,0.909606648943,0.909646477498,0.909686297693,0.909726109525,0.909765912996,0.909805708105,0.90984549485,0.909885273233,0.909925043252,0.909964804907,0.910004558198,0.910044303125,0.910084039686,0.910123767883,0.910163487713,0.910203199178,0.910242902276,0.910282597007,0.910322283372,0.910361961368,0.910401630997,0.910441292258,0.91048094515,0.910520589673,0.910560225827,0.910599853612,0.910639473026,0.91067908407,0.910718686743,0.910758281044,0.910797866975,0.910837444533,0.91087701372,0.910916574533,0.910956126974,0.910995671042,0.911035206735,0.911074734055,0.911114253001,0.911153763571,0.911193265767,0.911232759586,0.911272245031,0.911311722098,0.91135119079,0.911390651104,0.911430103041,0.911469546601,0.911508981782,0.911548408585,0.911587827009,0.911627237054,0.91166663872,0.911706032005,0.911745416911,0.911784793436,0.91182416158,0.911863521343,0.911902872724,0.911942215723,0.91198155034,0.912020876574,0.912060194424,0.912099503892,0.912138804975,0.912178097675,0.91221738199,0.91225665792,0.912295925464,0.912335184623,0.912374435396,0.912413677783,0.912452911783,0.912492137396,0.912531354622,0.912570563459,0.912609763909,0.91264895597,0.912688139642,0.912727314925,0.912766481818,0.912805640322,0.912844790435,0.912883932157,0.912923065488,0.912962190428,0.913001306977,0.913040415133,0.913079514896,0.913118606267,0.913157689245,0.913196763829,0.913235830019,0.913274887815,0.913313937216,0.913352978222,0.913392010833,0.913431035049,0.913470050868,0.91350905829,0.913548057316,0.913587047945,0.913626030177,0.91366500401,0.913703969445,0.913742926482,0.91378187512,0.913820815358,0.913859747197,0.913898670636,0.913937585674,0.913976492312,0.914015390549,0.914054280384,0.914093161817,0.914132034849,0.914170899478,0.914209755704,0.914248603526,0.914287442945,0.914326273961,0.914365096571,0.914403910778,0.914442716579,0.914481513975,0.914520302965,0.914559083549,0.914597855727,0.914636619498,0.914675374862,0.914714121818,0.914752860366,0.914791590506,0.914830312238,0.914869025561,0.914907730474,0.914946426978,0.914985115072,0.915023794755,0.915062466028,0.915101128889,0.91513978334,0.915178429378,0.915217067005,0.915255696218,0.915294317019,0.915332929407,0.915371533382,0.915410128942,0.915448716088,0.91548729482,0.915525865136,0.915564427038,0.915602980523,0.915641525593,0.915680062246,0.915718590483,0.915757110302,0.915795621704,0.915834124688,0.915872619254,0.915911105402,0.91594958313,0.91598805244,0.916026513329,0.916064965799,0.916103409849,0.916141845478,0.916180272686,0.916218691473,0.916257101838,0.916295503781,0.916333897301,0.916372282399,0.916410659074,0.916449027325,0.916487387153,0.916525738556,0.916564081535,0.916602416089,0.916640742218,0.916679059921,0.916717369198,0.916755670049,0.916793962474,0.916832246471,0.916870522041,0.916908789184,0.916947047898,0.916985298184,0.917023540041,0.91706177347,0.917099998468,0.917138215037,0.917176423176,0.917214622885,0.917252814162,0.917290997008,0.917329171423,0.917367337406,0.917405494957,0.917443644075,0.91748178476,0.917519917012,0.91755804083,0.917596156214,0.917634263164,0.917672361679,0.917710451759,0.917748533404,0.917786606613,0.917824671385,0.917862727722,0.917900775621,0.917938815084,0.917976846109,0.918014868696,0.918052882845,0.918090888555,0.918128885827,0.918166874659,0.918204855051,0.918242827004,0.918280790517,0.918318745588,0.918356692219,0.918394630408,0.918432560156,0.918470481462,0.918508394325,0.918546298746,0.918584194723,0.918622082257,0.918659961348,0.918697831994,0.918735694196,0.918773547952,0.918811393264,0.91884923013,0.918887058551,0.918924878525,0.918962690052,0.919000493133,0.919038287766,0.919076073952,0.91911385169,0.91915162098,0.919189381821,0.919227134212,0.919264878155,0.919302613648,0.919340340691,0.919378059283,0.919415769425,0.919453471116,0.919491164355,0.919528849142,0.919566525478,0.919604193361,0.919641852791,0.919679503768,0.919717146291,0.919754780361,0.919792405976,0.919830023137,0.919867631843,0.919905232094,0.919942823889,0.919980407229,0.920017982112,0.920055548538,0.920093106508,0.92013065602,0.920168197074,0.920205729671,0.920243253809,0.920280769489,0.920318276709,0.92035577547,0.920393265772,0.920430747613,0.920468220994,0.920505685914,0.920543142373,0.920580590371,0.920618029907,0.920655460981,0.920692883592,0.920730297741,0.920767703426,0.920805100648,0.920842489406,0.9208798697,0.920917241529,0.920954604894,0.920991959793,0.921029306227,0.921066644194,0.921103973696,0.921141294731,0.921178607299,0.921215911399,0.921253207033,0.921290494198,0.921327772894,0.921365043123,0.921402304882,0.921439558172,0.921476802992,0.921514039342,0.921551267222,0.921588486631,0.921625697569,0.921662900036,0.921700094031,0.921737279554,0.921774456604,0.921811625182,0.921848785286,0.921885936918,0.921923080075,0.921960214758,0.921997340967,0.922034458701,0.92207156796,0.922108668743,0.922145761051,0.922182844882,0.922219920237,0.922256987115,0.922294045516,0.922331095439,0.922368136885,0.922405169852,0.922442194341,0.922479210351,0.922516217881,0.922553216932,0.922590207503,0.922627189594,0.922664163205,0.922701128334,0.922738084982,0.922775033148,0.922811972833,0.922848904035,0.922885826755,0.922922740991,0.922959646745,0.922996544014,0.9230334328,0.923070313101,0.923107184918,0.92314404825,0.923180903096,0.923217749457,0.923254587331,0.92329141672,0.923328237621,0.923365050036,0.923401853963,0.923438649402,0.923475436354,0.923512214817,0.923548984791,0.923585746276,0.923622499272,0.923659243778,0.923695979794,0.92373270732,0.923769426355,0.923806136898,0.923842838951,0.923879532511,0.92391621758,0.923952894156,0.923989562239,0.924026221829,0.924062872926,0.924099515529,0.924136149637,0.924172775252,0.924209392371,0.924246000996,0.924282601125,0.924319192758,0.924355775895,0.924392350535,0.924428916679,0.924465474325,0.924502023474,0.924538564125,0.924575096279,0.924611619933,0.924648135089,0.924684641745,0.924721139902,0.92475762956,0.924794110717,0.924830583373,0.924867047529,0.924903503183,0.924939950336,0.924976388987,0.925012819136,0.925049240783,0.925085653926,0.925122058567,0.925158454703,0.925194842336,0.925231221465,0.92526759209,0.925303954209,0.925340307823,0.925376652932,0.925412989535,0.925449317631,0.925485637221,0.925521948305,0.925558250881,0.925594544949,0.92563083051,0.925667107562,0.925703376106,0.925739636141,0.925775887667,0.925812130683,0.92584836519,0.925884591186,0.925920808672,0.925957017647,0.92599321811,0.926029410062,0.926065593503,0.926101768431,0.926137934846,0.926174092749,0.926210242138,0.926246383014,0.926282515376,0.926318639224,0.926354754558,0.926390861376,0.926426959679,0.926463049467,0.926499130739,0.926535203495,0.926571267734,0.926607323457,0.926643370662,0.92667940935,0.92671543952,0.926751461171,0.926787474305,0.926823478919,0.926859475014,0.92689546259,0.926931441646,0.926967412182,0.927003374197,0.927039327691,0.927075272665,0.927111209117,0.927147137047,0.927183056455,0.92721896734,0.927254869703,0.927290763542,0.927326648858,0.92736252565,0.927398393919,0.927434253662,0.927470104881,0.927505947575,0.927541781743,0.927577607386,0.927613424502,0.927649233093,0.927685033156,0.927720824692,0.927756607701,0.927792382182,0.927828148135,0.92786390556,0.927899654456,0.927935394823,0.92797112666,0.928006849968,0.928042564746,0.928078270993,0.92811396871,0.928149657895,0.92818533855,0.928221010672,0.928256674263,0.928292329321,0.928327975847,0.928363613839,0.928399243299,0.928434864224,0.928470476616,0.928506080473,0.928541675796,0.928577262584,0.928612840836,0.928648410553,0.928683971734,0.928719524379,0.928755068487,0.928790604058,0.928826131092,0.928861649588,0.928897159547,0.928932660967,0.928968153849,0.929003638192,0.929039113995,0.929074581259,0.929110039984,0.929145490168,0.929180931811,0.929216364914,0.929251789475,0.929287205496,0.929322612974,0.92935801191,0.929393402304,0.929428784155,0.929464157462,0.929499522227,0.929534878447,0.929570226124,0.929605565256,0.929640895843,0.929676217885,0.929711531382,0.929746836334,0.929782132739,0.929817420598,0.92985269991,0.929887970675,0.929923232893,0.929958486563,0.929993731685,0.930028968259,0.930064196284,0.93009941576,0.930134626687,0.930169829065,0.930205022892,0.930240208169,0.930275384896,0.930310553072,0.930345712696,0.93038086377,0.930416006291,0.93045114026,0.930486265676,0.93052138254,0.93055649085,0.930591590607,0.930626681811,0.93066176446,0.930696838554,0.930731904094,0.930766961079,0.930802009508,0.930837049382,0.9308720807,0.930907103461,0.930942117665,0.930977123313,0.931012120403,0.931047108936,0.93108208891,0.931117060326,0.931152023184,0.931186977483,0.931221923222,0.931256860402,0.931291789022,0.931326709081,0.93136162058,0.931396523518,0.931431417895,0.931466303711,0.931501180965,0.931536049656,0.931570909785,0.931605761351,0.931640604354,0.931675438794,0.93171026467,0.931745081982,0.931779890729,0.931814690912,0.931849482529,0.931884265582,0.931919040068,0.931953805989,0.931988563343,0.932023312131,0.932058052351,0.932092784005,0.932127507091,0.932162221609,0.932196927558,0.932231624939,0.932266313752,0.932300993995,0.932335665668,0.932370328772,0.932404983305,0.932439629268,0.932474266661,0.932508895482,0.932543515732,0.93257812741,0.932612730516,0.932647325049,0.93268191101,0.932716488398,0.932751057213,0.932785617454,0.932820169121,0.932854712213,0.932889246731,0.932923772674,0.932958290042,0.932992798835,0.933027299051,0.933061790692,0.933096273755,0.933130748242,0.933165214152,0.933199671485,0.933234120239,0.933268560416,0.933302992014,0.933337415033,0.933371829474,0.933406235335,0.933440632616,0.933475021317,0.933509401438,0.933543772979,0.933578135938,0.933612490317,0.933646836113,0.933681173328,0.933715501961,0.933749822011,0.933784133478,0.933818436362,0.933852730663,0.93388701638,0.933921293513,0.933955562061,0.933989822025,0.934024073403,0.934058316197,0.934092550404,0.934126776026,0.934160993061,0.93419520151,0.934229401372,0.934263592646,0.934297775334,0.934331949433,0.934366114944,0.934400271866,0.9344344202,0.934468559945,0.9345026911,0.934536813665,0.93457092764,0.934605033025,0.93463912982,0.934673218023,0.934707297635,0.934741368655,0.934775431084,0.93480948492,0.934843530163,0.934877566814,0.934911594872,0.934945614336,0.934979625206,0.935013627482,0.935047621163,0.93508160625,0.935115582742,0.935149550638,0.935183509939,0.935217460644,0.935251402752,0.935285336264,0.935319261179,0.935353177496,0.935387085216,0.935420984338,0.935454874862,0.935488756787,0.935522630114,0.935556494841,0.93559035097,0.935624198498,0.935658037426,0.935691867754,0.935725689481,0.935759502607,0.935793307132,0.935827103055,0.935860890377,0.935894669096,0.935928439213,0.935962200726,0.935995953637,0.936029697944,0.936063433647,0.936097160746,0.936130879241,0.936164589131,0.936198290416,0.936231983096,0.93626566717,0.936299342638,0.9363330095,0.936366667756,0.936400317404,0.936433958445,0.936467590879,0.936501214705,0.936534829923,0.936568436532,0.936602034533,0.936635623924,0.936669204707,0.936702776879,0.936736340442,0.936769895394,0.936803441736,0.936836979467,0.936870508586,0.936904029095,0.936937540991,0.936971044275,0.937004538947,0.937038025006,0.937071502452,0.937104971284,0.937138431503,0.937171883108,0.937205326099,0.937238760475,0.937272186236,0.937305603382,0.937339011913,0.937372411827,0.937405803126,0.937439185808,0.937472559873,0.937505925321,0.937539282152,0.937572630366,0.937605969961,0.937639300938,0.937672623297,0.937705937036,0.937739242156,0.937772538657,0.937805826538,0.937839105799,0.93787237644,0.93790563846,0.937938891859,0.937972136636,0.938005372792,0.938038600326,0.938071819238,0.938105029527,0.938138231193,0.938171424236,0.938204608655,0.938237784451,0.938270951623,0.93830411017,0.938337260093,0.938370401391,0.938403534063,0.93843665811,0.938469773531,0.938502880325,0.938535978494,0.938569068035,0.938602148949,0.938635221236,0.938668284895,0.938701339926,0.938734386328,0.938767424102,0.938800453247,0.938833473763,0.938866485649,0.938899488906,0.938932483532,0.938965469528,0.938998446893,0.939031415627,0.939064375729,0.9390973272,0.939130270039,0.939163204246,0.93919612982,0.939229046761,0.939261955069,0.939294854743,0.939327745784,0.93936062819,0.939393501962,0.9394263671,0.939459223602,0.939492071469,0.939524910701,0.939557741296,0.939590563256,0.939623376579,0.939656181265,0.939688977314,0.939721764725,0.939754543499,0.939787313635,0.939820075132,0.939852827991,0.939885572211,0.939918307792,0.939951034733,0.939983753034,0.940016462695,0.940049163716,0.940081856096,0.940114539835,0.940147214933,0.940179881389,0.940212539203,0.940245188375,0.940277828904,0.94031046079,0.940343084034,0.940375698634,0.94040830459,0.940440901902,0.94047349057,0.940506070593,0.940538641972,0.940571204705,0.940603758792,0.940636304234,0.940668841029,0.940701369179,0.940733888681,0.940766399536,0.940798901744,0.940831395305,0.940863880217,0.940896356482,0.940928824098,0.940961283065,0.940993733382,0.941026175051,0.94105860807,0.941091032438,0.941123448157,0.941155855225,0.941188253642,0.941220643407,0.941253024521,0.941285396984,0.941317760794,0.941350115952,0.941382462457,0.94141480031,0.941447129509,0.941479450054,0.941511761946,0.941544065183,0.941576359766,0.941608645694,0.941640922967,0.941673191585,0.941705451547,0.941737702853,0.941769945503,0.941802179496,0.941834404832,0.941866621512,0.941898829534,0.941931028898,0.941963219604,0.941995401652,0.942027575041,0.942059739771,0.942091895842,0.942124043254,0.942156182005,0.942188312097,0.942220433528,0.942252546299,0.942284650408,0.942316745857,0.942348832643,0.942380910768,0.942412980231,0.942445041031,0.942477093168,0.942509136643,0.942541171454,0.942573197601,0.942605215085,0.942637223904,0.942669224059,0.942701215549,0.942733198374,0.942765172533,0.942797138027,0.942829094855,0.942861043016,0.942892982511,0.942924913339,0.9429568355,0.942988748994,0.943020653819,0.943052549977,0.943084437466,0.943116316287,0.943148186438,0.943180047921,0.943211900734,0.943243744877,0.94327558035,0.943307407153,0.943339225285,0.943371034746,0.943402835536,0.943434627654,0.943466411101,0.943498185875,0.943529951977,0.943561709406,0.943593458162,0.943625198245,0.943656929654,0.943688652389,0.94372036645,0.943752071837,0.943783768549,0.943815456586,0.943847135947,0.943878806633,0.943910468643,0.943942121976,0.943973766634,0.944005402614,0.944037029917,0.944068648543,0.944100258491,0.944131859761,0.944163452353,0.944195036267,0.944226611501,0.944258178057,0.944289735933,0.944321285129,0.944352825646,0.944384357482,0.944415880637,0.944447395112,0.944478900905,0.944510398017,0.944541886447,0.944573366196,0.944604837261,0.944636299645,0.944667753345,0.944699198362,0.944730634696,0.944762062346,0.944793481312,0.944824891594,0.944856293191,0.944887686103,0.94491907033,0.944950445871,0.944981812727,0.945013170896,0.945044520379,0.945075861176,0.945107193285,0.945138516708,0.945169831442,0.945201137489,0.945232434848,0.945263723519,0.945295003501,0.945326274794,0.945357537398,0.945388791312,0.945420036536,0.945451273071,0.945482500914,0.945513720068,0.94554493053,0.945576132301,0.945607325381,0.945638509768,0.945669685464,0.945700852467,0.945732010777,0.945763160395,0.945794301319,0.94582543355,0.945856557087,0.94588767193,0.945918778078,0.945949875532,0.945980964291,0.946012044354,0.946043115722,0.946074178394,0.94610523237,0.94613627765,0.946167314233,0.946198342119,0.946229361308,0.946260371799,0.946291373592,0.946322366688,0.946353351084,0.946384326783,0.946415293782,0.946446252082,0.946477201682,0.946508142583,0.946539074784,0.946569998284,0.946600913083,0.946631819182,0.946662716579,0.946693605275,0.946724485269,0.946755356561,0.94678621915,0.946817073037,0.946847918221,0.946878754702,0.946909582479,0.946940401552,0.946971211922,0.947002013587,0.947032806547,0.947063590803,0.947094366353,0.947125133198,0.947155891336,0.947186640769,0.947217381496,0.947248113516,0.947278836829,0.947309551435,0.947340257333,0.947370954524,0.947401643006,0.947432322781,0.947462993846,0.947493656203,0.947524309851,0.947554954789,0.947585591018,0.947616218536,0.947646837344,0.947677447442,0.947708048829,0.947738641505,0.947769225469,0.947799800721,0.947830367262,0.94786092509,0.947891474206,0.947922014609,0.947952546299,0.947983069276,0.948013583539,0.948044089088,0.948074585922,0.948105074043,0.948135553448,0.948166024138,0.948196486113,0.948226939373,0.948257383916,0.948287819744,0.948318246855,0.948348665249,0.948379074926,0.948409475886,0.948439868128,0.948470251652,0.948500626459,0.948530992547,0.948561349916,0.948591698566,0.948622038497,0.948652369708,0.9486826922,0.948713005971,0.948743311023,0.948773607353,0.948803894963,0.948834173851,0.948864444018,0.948894705463,0.948924958186,0.948955202187,0.948985437465,0.949015664021,0.949045881853,0.949076090961,0.949106291347,0.949136483008,0.949166665944,0.949196840157,0.949227005644,0.949257162406,0.949287310444,0.949317449755,0.94934758034,0.9493777022,0.949407815332,0.949437919738,0.949468015417,0.949498102369,0.949528180593,0.949558250089,0.949588310857,0.949618362897,0.949648406208,0.94967844079,0.949708466643,0.949738483766,0.94976849216,0.949798491823,0.949828482756,0.949858464959,0.94988843843,0.94991840317,0.949948359179,0.949978306457,0.950008245002,0.950038174815,0.950068095895,0.950098008243,0.950127911857,0.950157806738,0.950187692886,0.950217570299,0.950247438979,0.950277298924,0.950307150134,0.950336992609,0.950366826349,0.950396651353,0.950426467621,0.950456275154,0.950486073949,0.950515864009,0.950545645331,0.950575417916,0.950605181764,0.950634936874,0.950664683245,0.950694420879,0.950724149774,0.95075386993,0.950783581347,0.950813284024,0.950842977962,0.95087266316,0.950902339618,0.950932007335,0.950961666312,0.950991316547,0.951020958041,0.951050590794,0.951080214804,0.951109830073,0.951139436599,0.951169034383,0.951198623423,0.95122820372,0.951257775274,0.951287338084,0.95131689215,0.951346437472,0.951375974049,0.951405501882,0.951435020969,0.951464531311,0.951494032907,0.951523525757,0.951553009861,0.951582485219,0.95161195183,0.951641409694,0.95167085881,0.951700299179,0.9517297308,0.951759153673,0.951788567798,0.951817973174,0.951847369801,0.951876757679,0.951906136808,0.951935507187,0.951964868816,0.951994221694,0.952023565822,0.9520529012,0.952082227826,0.952111545701,0.952140854824,0.952170155195,0.952199446814,0.952228729681,0.952258003795,0.952287269157,0.952316525765,0.952345773619,0.95237501272,0.952404243066,0.952433464659,0.952462677497,0.95249188158,0.952521076908,0.95255026348,0.952579441297,0.952608610358,0.952637770663,0.952666922211,0.952696065003,0.952725199038,0.952754324315,0.952783440835,0.952812548597,0.952841647601,0.952870737847,0.952899819334,0.952928892063,0.952957956032,0.952987011242,0.953016057692,0.953045095382,0.953074124312,0.953103144482,0.953132155891,0.953161158539,0.953190152425,0.95321913755,0.953248113914,0.953277081515,0.953306040354,0.953334990431,0.953363931744,0.953392864295,0.953421788082,0.953450703105,0.953479609365,0.95350850686,0.953537395591,0.953566275557,0.953595146758,0.953624009194,0.953652862865,0.953681707769,0.953710543908,0.95373937128,0.953768189886,0.953796999725,0.953825800797,0.953854593101,0.953883376638,0.953912151407,0.953940917408,0.95396967464,0.953998423104,0.954027162799,0.954055893724,0.95408461588,0.954113329267,0.954142033883,0.954170729729,0.954199416804,0.954228095109,0.954256764643,0.954285425405,0.954314077396,0.954342720615,0.954371355061,0.954399980736,0.954428597638,0.954457205767,0.954485805122,0.954514395704,0.954542977513,0.954571550548,0.954600114808,0.954628670294,0.954657217005,0.954685754941,0.954714284102,0.954742804488,0.954771316097,0.954799818931,0.954828312988,0.954856798269,0.954885274772,0.954913742499,0.954942201448,0.95497065162,0.954999093014,0.95502752563,0.955055949467,0.955084364526,0.955112770805,0.955141168306,0.955169557027,0.955197936968,0.955226308129,0.955254670511,0.955283024111,0.955311368931,0.95533970497,0.955368032227,0.955396350703,0.955424660398,0.95545296131,0.95548125344,0.955509536787,0.955537811351,0.955566077133,0.955594334131,0.955622582345,0.955650821776,0.955679052422,0.955707274284,0.955735487361,0.955763691654,0.955791887161,0.955820073883,0.955848251819,0.955876420969,0.955904581333,0.95593273291,0.955960875701,0.955989009705,0.956017134921,0.95604525135,0.956073358991,0.956101457844,0.956129547909,0.956157629186,0.956185701673,0.956213765372,0.956241820281,0.956269866401,0.95629790373,0.95632593227,0.95635395202,0.956381962978,0.956409965146,0.956437958523,0.956465943109,0.956493918902,0.956521885904,0.956549844114,0.956577793531,0.956605734156,0.956633665988,0.956661589027,0.956689503272,0.956717408723,0.956745305381,0.956773193244,0.956801072313,0.956828942588,0.956856804067,0.956884656751,0.956912500639,0.956940335732,0.956968162029,0.95699597953,0.957023788234,0.957051588141,0.957079379251,0.957107161564,0.95713493508,0.957162699798,0.957190455717,0.957218202839,0.957245941162,0.957273670686,0.957301391411,0.957329103336,0.957356806463,0.957384500789,0.957412186315,0.957439863041,0.957467530967,0.957495190091,0.957522840414,0.957550481937,0.957578114657,0.957605738576,0.957633353692,0.957660960006,0.957688557518,0.957716146227,0.957743726132,0.957771297234,0.957798859533,0.957826413028,0.957853957718,0.957881493604,0.957909020686,0.957936538962,0.957964048434,0.9579915491,0.95801904096,0.958046524015,0.958073998263,0.958101463705,0.95812892034,0.958156368169,0.95818380719,0.958211237404,0.95823865881,0.958266071408,0.958293475198,0.95832087018,0.958348256352,0.958375633716,0.958403002271,0.958430362017,0.958457712952,0.958485055078,0.958512388394,0.958539712899,0.958567028593,0.958594335476,0.958621633549,0.95864892281,0.958676203259,0.958703474896,0.958730737721,0.958757991733,0.958785236933,0.95881247332,0.958839700894,0.958866919654,0.958894129601,0.958921330733,0.958948523052,0.958975706556,0.959002881245,0.959030047119,0.959057204178,0.959084352422,0.95911149185,0.959138622462,0.959165744258,0.959192857237,0.9592199614,0.959247056745,0.959274143274,0.959301220985,0.959328289878,0.959355349954,0.959382401211,0.95940944365,0.95943647727,0.959463502071,0.959490518053,0.959517525216,0.959544523559,0.959571513082,0.959598493785,0.959625465667,0.959652428729,0.95967938297,0.959706328389,0.959733264988,0.959760192764,0.959787111719,0.959814021851,0.959840923161,0.959867815649,0.959894699313,0.959921574155,0.959948440173,0.959975297367,0.960002145738,0.960028985284,0.960055816006,0.960082637903,0.960109450976,0.960136255223,0.960163050645,0.960189837241,0.960216615012,0.960243383956,0.960270144074,0.960296895366,0.96032363783,0.960350371468,0.960377096278,0.960403812261,0.960430519416,0.960457217742,0.960483907241,0.96051058791,0.960537259752,0.960563922763,0.960590576946,0.960617222299,0.960643858823,0.960670486516,0.960697105379,0.960723715411,0.960750316613,0.960776908984,0.960803492523,0.960830067231,0.960856633108,0.960883190152,0.960909738364,0.960936277743,0.96096280829,0.960989330004,0.961015842885,0.961042346932,0.961068842146,0.961095328525,0.96112180607,0.961148274781,0.961174734658,0.961201185699,0.961227627905,0.961254061276,0.961280485811,0.961306901511,0.961333308374,0.961359706401,0.961386095591,0.961412475944,0.96143884746,0.961465210139,0.961491563981,0.961517908984,0.961544245149,0.961570572477,0.961596890965,0.961623200615,0.961649501426,0.961675793397,0.961702076529,0.961728350821,0.961754616274,0.961780872885,0.961807120657,0.961833359588,0.961859589677,0.961885810926,0.961912023333,0.961938226899,0.961964421622,0.961990607503,0.962016784542,0.962042952739,0.962069112092,0.962095262602,0.962121404269,0.962147537092,0.962173661072,0.962199776207,0.962225882498,0.962251979944,0.962278068546,0.962304148302,0.962330219214,0.962356281279,0.962382334499,0.962408378873,0.962434414401,0.962460441082,0.962486458917,0.962512467904,0.962538468044,0.962564459337,0.962590441782,0.96261641538,0.962642380129,0.962668336029,0.962694283081,0.962720221284,0.962746150638,0.962772071143,0.962797982798,0.962823885603,0.962849779559,0.962875664663,0.962901540918,0.962927408321,0.962953266874,0.962979116575,0.963004957425,0.963030789423,0.963056612569,0.963082426863,0.963108232304,0.963134028893,0.963159816628,0.963185595511,0.96321136554,0.963237126716,0.963262879038,0.963288622505,0.963314357118,0.963340082877,0.963365799781,0.96339150783,0.963417207023,0.963442897361,0.963468578844,0.96349425147,0.96351991524,0.963545570153,0.96357121621,0.96359685341,0.963622481753,0.963648101238,0.963673711866,0.963699313636,0.963724906547,0.963750490601,0.963776065795,0.963801632131,0.963827189608,0.963852738226,0.963878277984,0.963903808882,0.96392933092,0.963954844098,0.963980348416,0.964005843873,0.964031330469,0.964056808204,0.964082277077,0.964107737089,0.964133188239,0.964158630526,0.964184063952,0.964209488515,0.964234904215,0.964260311052,0.964285709025,0.964311098136,0.964336478382,0.964361849765,0.964387212283,0.964412565937,0.964437910726,0.96446324665,0.964488573709,0.964513891903,0.964539201231,0.964564501694,0.96458979329,0.96461507602,0.964640349883,0.96466561488,0.964690871009,0.964716118272,0.964741356667,0.964766586194,0.964791806853,0.964817018645,0.964842221567,0.964867415622,0.964892600807,0.964917777123,0.96494294457,0.964968103147,0.964993252855,0.965018393692,0.96504352566,0.965068648757,0.965093762983,0.965118868338,0.965143964822,0.965169052435,0.965194131176,0.965219201045,0.965244262042,0.965269314167,0.965294357419,0.965319391798,0.965344417305,0.965369433938,0.965394441698,0.965419440584,0.965444430596,0.965469411734,0.965494383997,0.965519347386,0.9655443019,0.965569247539,0.965594184303,0.965619112191,0.965644031204,0.96566894134,0.9656938426,0.965718734984,0.965743618491,0.965768493121,0.965793358874,0.96581821575,0.965843063748,0.965867902868,0.96589273311,0.965917554474,0.965942366959,0.965967170566,0.965991965294,0.966016751142,0.966041528111,0.966066296201,0.96609105541,0.96611580574,0.966140547189,0.966165279758,0.966190003445,0.966214718252,0.966239424178,0.966264121222,0.966288809384,0.966313488665,0.966338159063,0.966362820579,0.966387473212,0.966412116963,0.96643675183,0.966461377814,0.966485994915,0.966510603132,0.966535202465,0.966559792914,0.966584374478,0.966608947158,0.966633510953,0.966658065863,0.966682611887,0.966707149026,0.966731677279,0.966756196647,0.966780707128,0.966805208722,0.96682970143,0.966854185251,0.966878660185,0.966903126232,0.966927583391,0.966952031662,0.966976471045,0.96700090154,0.967025323146,0.967049735864,0.967074139693,0.967098534633,0.967122920683,0.967147297844,0.967171666115,0.967196025496,0.967220375986,0.967244717586,0.967269050296,0.967293374114,0.967317689042,0.967341995078,0.967366292222,0.967390580475,0.967414859835,0.967439130304,0.96746339188,0.967487644563,0.967511888353,0.96753612325,0.967560349253,0.967584566363,0.967608774579,0.967632973902,0.967657164329,0.967681345863,0.967705518501,0.967729682245,0.967753837093,0.967777983047,0.967802120104,0.967826248266,0.967850367531,0.967874477901,0.967898579374,0.96792267195,0.967946755629,0.967970830411,0.967994896296,0.968018953283,0.968043001372,0.968067040563,0.968091070856,0.968115092251,0.968139104746,0.968163108343,0.968187103041,0.968211088839,0.968235065738,0.968259033737,0.968282992836,0.968306943034,0.968330884332,0.96835481673,0.968378740226,0.968402654822,0.968426560516,0.968450457308,0.968474345199,0.968498224188,0.968522094274,0.968545955458,0.96856980774,0.968593651118,0.968617485594,0.968641311166,0.968665127834,0.968688935599,0.96871273446,0.968736524416,0.968760305469,0.968784077616,0.968807840859,0.968831595196,0.968855340629,0.968879077155,0.968902804776,0.968926523492,0.9689502333,0.968973934203,0.968997626199,0.969021309288,0.96904498347,0.969068648745,0.969092305113,0.969115952572,0.969139591124,0.969163220768,0.969186841503,0.96921045333,0.969234056248,0.969257650257,0.969281235357,0.969304811547,0.969328378828,0.969351937199,0.969375486659,0.96939902721,0.96942255885,0.969446081579,0.969469595397,0.969493100305,0.9695165963,0.969540083385,0.969563561557,0.969587030817,0.969610491166,0.969633942601,0.969657385124,0.969680818734,0.969704243431,0.969727659215,0.969751066085,0.969774464042,0.969797853084,0.969821233213,0.969844604427,0.969867966726,0.969891320111,0.96991466458,0.969938000134,0.969961326773,0.969984644496,0.970007953303,0.970031253195,0.970054544169,0.970077826228,0.970101099369,0.970124363594,0.970147618901,0.970170865291,0.970194102763,0.970217331318,0.970240550955,0.970263761673,0.970286963473,0.970310156354,0.970333340316,0.970356515359,0.970379681483,0.970402838688,0.970425986972,0.970449126337,0.970472256781,0.970495378306,0.970518490909,0.970541594592,0.970564689354,0.970587775194,0.970610852113,0.970633920111,0.970656979186,0.97068002934,0.970703070571,0.97072610288,0.970749126266,0.970772140729,0.970795146269,0.970818142886,0.970841130579,0.970864109348,0.970887079193,0.970910040115,0.970932992111,0.970955935184,0.970978869331,0.971001794553,0.97102471085,0.971047618222,0.971070516668,0.971093406188,0.971116286782,0.97113915845,0.971162021191,0.971184875005,0.971207719893,0.971230555853,0.971253382887,0.971276200992,0.97129901017,0.97132181042,0.971344601741,0.971367384135,0.971390157599,0.971412922135,0.971435677742,0.97145842442,0.971481162168,0.971503890986,0.971526610875,0.971549321833,0.971572023862,0.97159471696,0.971617401127,0.971640076363,0.971662742668,0.971685400042,0.971708048484,0.971730687995,0.971753318574,0.97177594022,0.971798552934,0.971821156716,0.971843751564,0.97186633748,0.971888914463,0.971911482512,0.971934041628,0.97195659181,0.971979133057,0.972001665371,0.97202418875,0.972046703195,0.972069208704,0.972091705279,0.972114192918,0.972136671622,0.97215914139,0.972181602223,0.972204054119,0.972226497079,0.972248931102,0.972271356189,0.972293772339,0.972316179552,0.972338577827,0.972360967165,0.972383347565,0.972405719027,0.972428081552,0.972450435137,0.972472779784,0.972495115493,0.972517442262,0.972539760093,0.972562068983,0.972584368935,0.972606659946,0.972628942018,0.972651215149,0.97267347934,0.97269573459,0.9727179809,0.972740218268,0.972762446696,0.972784666182,0.972806876726,0.972829078328,0.972851270989,0.972873454707,0.972895629482,0.972917795315,0.972939952206,0.972962100153,0.972984239157,0.973006369217,0.973028490334,0.973050602507,0.973072705735,0.97309480002,0.97311688536,0.973138961755,0.973161029206,0.973183087711,0.973205137271,0.973227177886,0.973249209555,0.973271232278,0.973293246055,0.973315250885,0.973337246769,0.973359233707,0.973381211697,0.973403180741,0.973425140837,0.973447091985,0.973469034186,0.973490967439,0.973512891744,0.9735348071,0.973556713508,0.973578610967,0.973600499478,0.973622379039,0.973644249651,0.973666111313,0.973687964026,0.973709807788,0.973731642601,0.973753468463,0.973775285375,0.973797093336,0.973818892346,0.973840682405,0.973862463512,0.973884235668,0.973905998872,0.973927753125,0.973949498425,0.973971234773,0.973992962168,0.974014680611,0.9740363901,0.974058090637,0.97407978222,0.97410146485,0.974123138525,0.974144803247,0.974166459015,0.974188105829,0.974209743688,0.974231372592,0.974252992541,0.974274603536,0.974296205575,0.974317798658,0.974339382786,0.974360957957,0.974382524173,0.974404081432,0.974425629735,0.974447169081,0.97446869947,0.974490220902,0.974511733377,0.974533236894,0.974554731454,0.974576217056,0.974597693699,0.974619161384,0.974640620111,0.974662069879,0.974683510689,0.974704942539,0.974726365429,0.974747779361,0.974769184333,0.974790580344,0.974811967396,0.974833345488,0.974854714619,0.974876074789,0.974897425999,0.974918768247,0.974940101534,0.97496142586,0.974982741224,0.975004047627,0.975025345067,0.975046633545,0.975067913061,0.975089183614,0.975110445204,0.975131697831,0.975152941495,0.975174176196,0.975195401933,0.975216618706,0.975237826516,0.975259025361,0.975280215241,0.975301396158,0.975322568109,0.975343731095,0.975364885117,0.975386030173,0.975407166263,0.975428293388,0.975449411546,0.975470520739,0.975491620965,0.975512712225,0.975533794518,0.975554867844,0.975575932204,0.975596987595,0.97561803402,0.975639071476,0.975660099965,0.975681119486,0.975702130039,0.975723131623,0.975744124238,0.975765107885,0.975786082562,0.975807048271,0.975828005009,0.975848952779,0.975869891578,0.975890821408,0.975911742267,0.975932654156,0.975953557075,0.975974451022,0.975995335999,0.976016212005,0.976037079039,0.976057937102,0.976078786193,0.976099626312,0.976120457459,0.976141279634,0.976162092836,0.976182897066,0.976203692322,0.976224478606,0.976245255916,0.976266024253,0.976286783617,0.976307534006,0.976328275422,0.976349007863,0.97636973133,0.976390445822,0.97641115134,0.976431847883,0.97645253545,0.976473214042,0.976493883659,0.9765145443,0.976535195965,0.976555838653,0.976576472366,0.976597097102,0.976617712862,0.976638319644,0.97665891745,0.976679506278,0.976700086129,0.976720657002,0.976741218897,0.976761771815,0.976782315754,0.976802850715,0.976823376697,0.976843893701,0.976864401725,0.976884900771,0.976905390837,0.976925871924,0.976946344031,0.976966807158,0.976987261305,0.977007706471,0.977028142658,0.977048569863,0.977068988088,0.977089397332,0.977109797595,0.977130188876,0.977150571176,0.977170944494,0.97719130883,0.977211664184,0.977232010555,0.977252347944,0.977272676351,0.977292995774,0.977313306214,0.977333607671,0.977353900145,0.977374183635,0.977394458142,0.977414723664,0.977434980202,0.977455227756,0.977475466325,0.977495695909,0.977515916509,0.977536128123,0.977556330752,0.977576524396,0.977596709053,0.977616884725,0.977637051411,0.977657209111,0.977677357825,0.977697497551,0.977717628291,0.977737750044,0.97775786281,0.977777966588,0.977798061379,0.977818147183,0.977838223998,0.977858291825,0.977878350664,0.977898400515,0.977918441377,0.97793847325,0.977958496134,0.977978510029,0.977998514935,0.978018510851,0.978038497777,0.978058475713,0.978078444659,0.978098404615,0.978118355581,0.978138297556,0.97815823054,0.978178154533,0.978198069534,0.978217975545,0.978237872564,0.978257760591,0.978277639626,0.978297509669,0.97831737072,0.978337222778,0.978357065843,0.978376899916,0.978396724996,0.978416541082,0.978436348175,0.978456146275,0.978475935381,0.978495715492,0.97851548661,0.978535248733,0.978555001862,0.978574745997,0.978594481136,0.97861420728,0.978633924429,0.978653632583,0.978673331741,0.978693021904,0.97871270307,0.978732375241,0.978752038415,0.978771692592,0.978791337773,0.978810973957,0.978830601144,0.978850219334,0.978869828527,0.978889428721,0.978909019919,0.978928602118,0.978948175319,0.978967739522,0.978987294726,0.979006840932,0.979026378139,0.979045906347,0.979065425556,0.979084935765,0.979104436975,0.979123929185,0.979143412395,0.979162886606,0.979182351816,0.979201808025,0.979221255234,0.979240693442,0.979260122649,0.979279542855,0.97929895406,0.979318356263,0.979337749464,0.979357133664,0.979376508861,0.979395875057,0.97941523225,0.97943458044,0.979453919628,0.979473249812,0.979492570994,0.979511883172,0.979531186347,0.979550480518,0.979569765685,0.979589041849,0.979608309008,0.979627567163,0.979646816313,0.979666056459,0.979685287599,0.979704509735,0.979723722866,0.979742926991,0.97976212211,0.979781308224,0.979800485331,0.979819653433,0.979838812528,0.979857962617,0.9798771037,0.979896235775,0.979915358843,0.979934472905,0.979953577958,0.979972674005,0.979991761043,0.980010839074,0.980029908097,0.980048968112,0.980068019118,0.980087061115,0.980106094104,0.980125118084,0.980144133055,0.980163139016,0.980182135968,0.980201123911,0.980220102843,0.980239072766,0.980258033678,0.98027698558,0.980295928472,0.980314862353,0.980333787223,0.980352703082,0.98037160993,0.980390507767,0.980409396592,0.980428276405,0.980447147207,0.980466008996,0.980484861773,0.980503705538,0.98052254029,0.98054136603,0.980560182756,0.98057899047,0.98059778917,0.980616578857,0.98063535953,0.980654131189,0.980672893834,0.980691647465,0.980710392082,0.980729127685,0.980747854272,0.980766571845,0.980785280403,0.980803979946,0.980822670473,0.980841351985,0.980860024482,0.980878687962,0.980897342426,0.980915987874,0.980934624306,0.980953251721,0.98097187012,0.980990479502,0.981009079866,0.981027671213,0.981046253543,0.981064826856,0.98108339115,0.981101946427,0.981120492686,0.981139029926,0.981157558148,0.981176077352,0.981194587536,0.981213088702,0.981231580849,0.981250063976,0.981268538084,0.981287003172,0.981305459241,0.981323906289,0.981342344318,0.981360773326,0.981379193314,0.981397604281,0.981416006227,0.981434399152,0.981452783057,0.98147115794,0.981489523801,0.981507880641,0.981526228459,0.981544567255,0.981562897028,0.98158121778,0.981599529509,0.981617832215,0.981636125899,0.98165441056,0.981672686197,0.981690952811,0.981709210402,0.981727458969,0.981745698512,0.981763929031,0.981782150526,0.981800362996,0.981818566443,0.981836760864,0.981854946261,0.981873122632,0.981891289979,0.9819094483,0.981927597595,0.981945737865,0.98196386911,0.981981991328,0.98200010452,0.982018208685,0.982036303824,0.982054389937,0.982072467022,0.982090535081,0.982108594113,0.982126644117,0.982144685093,0.982162717042,0.982180739963,0.982198753856,0.982216758721,0.982234754558,0.982252741366,0.982270719146,0.982288687896,0.982306647618,0.982324598311,0.982342539974,0.982360472608,0.982378396212,0.982396310786,0.98241421633,0.982432112845,0.982450000328,0.982467878782,0.982485748205,0.982503608597,0.982521459958,0.982539302287,0.982557135586,0.982574959853,0.982592775089,0.982610581292,0.982628378464,0.982646166604,0.982663945711,0.982681715786,0.982699476829,0.982717228838,0.982734971815,0.982752705758,0.982770430669,0.982788146546,0.982805853389,0.982823551199,0.982841239974,0.982858919716,0.982876590423,0.982894252096,0.982911904735,0.982929548339,0.982947182908,0.982964808441,0.98298242494,0.983000032403,0.983017630831,0.983035220223,0.983052800579,0.983070371899,0.983087934184,0.983105487431,0.983123031642,0.983140566817,0.983158092955,0.983175610055,0.983193118119,0.983210617145,0.983228107134,0.983245588085,0.983263059999,0.983280522874,0.983297976712,0.983315421511,0.983332857272,0.983350283994,0.983367701677,0.983385110322,0.983402509927,0.983419900493,0.98343728202,0.983454654507,0.983472017955,0.983489372362,0.98350671773,0.983524054058,0.983541381345,0.983558699591,0.983576008797,0.983593308962,0.983610600087,0.98362788217,0.983645155211,0.983662419212,0.98367967417,0.983696920087,0.983714156962,0.983731384795,0.983748603586,0.983765813334,0.98378301404,0.983800205703,0.983817388323,0.9838345619,0.983851726434,0.983868881924,0.983886028371,0.983903165774,0.983920294134,0.983937413449,0.983954523721,0.983971624948,0.98398871713,0.984005800268,0.984022874361,0.98403993941,0.984056995413,0.984074042371,0.984091080283,0.98410810915,0.984125128972,0.984142139747,0.984159141476,0.98417613416,0.984193117797,0.984210092387,0.984227057931,0.984244014428,0.984260961878,0.98427790028,0.984294829636,0.984311749944,0.984328661205,0.984345563418,0.984362456583,0.984379340699,0.984396215768,0.984413081789,0.98442993876,0.984446786684,0.984463625558,0.984480455383,0.984497276159,0.984514087886,0.984530890564,0.984547684192,0.98456446877,0.984581244298,0.984598010776,0.984614768204,0.984631516582,0.984648255909,0.984664986185,0.984681707411,0.984698419586,0.984715122709,0.984731816781,0.984748501802,0.984765177771,0.984781844688,0.984798502554,0.984815151367,0.984831791128,0.984848421837,0.984865043494,0.984881656097,0.984898259648,0.984914854146,0.984931439591,0.984948015982,0.98496458332,0.984981141605,0.984997690835,0.985014231012,0.985030762135,0.985047284204,0.985063797218,0.985080301178,0.985096796083,0.985113281933,0.985129758728,0.985146226469,0.985162685154,0.985179134783,0.985195575357,0.985212006876,0.985228429338,0.985244842745,0.985261247095,0.985277642389,0.985294028626,0.985310405807,0.985326773932,0.985343132999,0.985359483009,0.985375823962,0.985392155858,0.985408478696,0.985424792476,0.985441097199,0.985457392864,0.98547367947,0.985489957018,0.985506225508,0.98552248494,0.985538735312,0.985554976626,0.985571208881,0.985587432076,0.985603646213,0.985619851289,0.985636047307,0.985652234264,0.985668412162,0.985684580999,0.985700740776,0.985716891493,0.98573303315,0.985749165746,0.985765289281,0.985781403755,0.985797509168,0.985813605519,0.98582969281,0.985845771038,0.985861840206,0.985877900311,0.985893951354,0.985909993335,0.985926026254,0.985942050111,0.985958064905,0.985974070636,0.985990067304,0.98600605491,0.986022033452,0.986038002931,0.986053963346,0.986069914698,0.986085856986,0.98610179021,0.986117714371,0.986133629467,0.986149535498,0.986165432465,0.986181320368,0.986197199206,0.986213068979,0.986228929686,0.986244781329,0.986260623906,0.986276457418,0.986292281864,0.986308097245,0.986323903559,0.986339700807,0.986355488989,0.986371268105,0.986387038154,0.986402799137,0.986418551053,0.986434293902,0.986450027683,0.986465752398,0.986481468045,0.986497174625,0.986512872136,0.986528560581,0.986544239957,0.986559910265,0.986575571505,0.986591223676,0.986606866779,0.986622500813,0.986638125778,0.986653741675,0.986669348502,0.98668494626,0.986700534949,0.986716114568,0.986731685117,0.986747246597,0.986762799007,0.986778342346,0.986793876615,0.986809401814,0.986824917943,0.986840425,0.986855922987,0.986871411903,0.986886891748,0.986902362521,0.986917824223,0.986933276854,0.986948720413,0.9869641549,0.986979580315,0.986994996658,0.987010403928,0.987025802127,0.987041191253,0.987056571306,0.987071942286,0.987087304193,0.987102657028,0.987118000789,0.987133335477,0.987148661091,0.987163977631,0.987179285098,0.987194583491,0.987209872809,0.987225153054,0.987240424224,0.987255686319,0.98727093934,0.987286183287,0.987301418158,0.987316643954,0.987331860675,0.987347068321,0.987362266891,0.987377456385,0.987392636804,0.987407808147,0.987422970414,0.987438123605,0.987453267719,0.987468402757,0.987483528718,0.987498645603,0.98751375341,0.987528852141,0.987543941794,0.987559022371,0.987574093869,0.987589156291,0.987604209634,0.9876192539,0.987634289087,0.987649315197,0.987664332228,0.987679340181,0.987694339055,0.987709328851,0.987724309568,0.987739281206,0.987754243765,0.987769197244,0.987784141645,0.987799076965,0.987814003206,0.987828920368,0.987843828449,0.987858727451,0.987873617372,0.987888498213,0.987903369973,0.987918232653,0.987933086252,0.98794793077,0.987962766207,0.987977592563,0.987992409838,0.988007218031,0.988022017143,0.988036807173,0.988051588122,0.988066359988,0.988081122772,0.988095876474,0.988110621094,0.988125356631,0.988140083086,0.988154800457,0.988169508746,0.988184207952,0.988198898075,0.988213579114,0.98822825107,0.988242913942,0.988257567731,0.988272212435,0.988286848056,0.988301474593,0.988316092045,0.988330700413,0.988345299697,0.988359889895,0.988374471009,0.988389043038,0.988403605982,0.988418159841,0.988432704615,0.988447240303,0.988461766905,0.988476284422,0.988490792853,0.988505292198,0.988519782456,0.988534263629,0.988548735715,0.988563198714,0.988577652627,0.988592097453,0.988606533192,0.988620959844,0.988635377409,0.988649785887,0.988664185277,0.98867857558,0.988692956794,0.988707328921,0.98872169196,0.988736045911,0.988750390774,0.988764726548,0.988779053234,0.988793370831,0.988807679339,0.988821978758,0.988836269089,0.98885055033,0.988864822482,0.988879085544,0.988893339517,0.9889075844,0.988921820194,0.988936046897,0.98895026451,0.988964473033,0.988978672466,0.988992862808,0.98900704406,0.989021216221,0.989035379291,0.98904953327,0.989063678158,0.989077813955,0.98909194066,0.989106058273,0.989120166796,0.989134266226,0.989148356564,0.989162437811,0.989176509965,0.989190573027,0.989204626996,0.989218671873,0.989232707657,0.989246734349,0.989260751947,0.989274760452,0.989288759865,0.989302750183,0.989316731409,0.989330703541,0.989344666579,0.989358620523,0.989372565373,0.989386501129,0.989400427791,0.989414345359,0.989428253832,0.989442153211,0.989456043494,0.989469924683,0.989483796777,0.989497659776,0.989511513679,0.989525358487,0.9895391942,0.989553020817,0.989566838338,0.989580646764,0.989594446093,0.989608236326,0.989622017463,0.989635789504,0.989649552448,0.989663306295,0.989677051046,0.989690786699,0.989704513256,0.989718230716,0.989731939078,0.989745638343,0.98975932851,0.98977300958,0.989786681552,0.989800344426,0.989813998202,0.989827642879,0.989841278459,0.98985490494,0.989868522322,0.989882130606,0.989895729791,0.989909319878,0.989922900865,0.989936472753,0.989950035542,0.989963589231,0.989977133821,0.989990669311,0.990004195701,0.990017712992,0.990031221182,0.990044720272,0.990058210262,0.990071691152,0.990085162941,0.990098625629,0.990112079217,0.990125523704,0.990138959089,0.990152385374,0.990165802557,0.990179210639,0.99019260962,0.990205999498,0.990219380275,0.99023275195,0.990246114523,0.990259467994,0.990272812363,0.99028614763,0.990299473793,0.990312790855,0.990326098813,0.990339397669,0.990352687421,0.990365968071,0.990379239617,0.99039250206,0.9904057554,0.990418999635,0.990432234768,0.990445460796,0.99045867772,0.99047188554,0.990485084256,0.990498273868,0.990511454375,0.990524625778,0.990537788076,0.990550941269,0.990564085358,0.990577220341,0.990590346219,0.990603462992,0.990616570659,0.990629669221,0.990642758677,0.990655839027,0.990668910272,0.99068197241,0.990695025443,0.990708069369,0.990721104188,0.990734129902,0.990747146508,0.990760154008,0.990773152401,0.990786141687,0.990799121866,0.990812092938,0.990825054902,0.990838007759,0.990850951508,0.99086388615,0.990876811684,0.99088972811,0.990902635428,0.990915533638,0.990928422739,0.990941302732,0.990954173617,0.990967035392,0.99097988806,0.990992731618,0.991005566067,0.991018391407,0.991031207638,0.99104401476,0.991056812772,0.991069601674,0.991082381467,0.99109515215,0.991107913723,0.991120666186,0.991133409539,0.991146143782,0.991158868914,0.991171584936,0.991184291847,0.991196989647,0.991209678336,0.991222357915,0.991235028382,0.991247689738,0.991260341983,0.991272985116,0.991285619138,0.991298244048,0.991310859846,0.991323466532,0.991336064107,0.991348652569,0.991361231919,0.991373802156,0.991386363281,0.991398915294,0.991411458193,0.99142399198,0.991436516654,0.991449032215,0.991461538662,0.991474035997,0.991486524218,0.991499003325,0.991511473319,0.991523934199,0.991536385965,0.991548828617,0.991561262155,0.991573686579,0.991586101888,0.991598508083,0.991610905163,0.991623293129,0.99163567198,0.991648041716,0.991660402337,0.991672753843,0.991685096234,0.991697429509,0.991709753669,0.991722068713,0.991734374642,0.991746671455,0.991758959152,0.991771237732,0.991783507197,0.991795767545,0.991808018777,0.991820260893,0.991832493892,0.991844717774,0.991856932539,0.991869138188,0.991881334719,0.991893522134,0.991905700431,0.99191786961,0.991930029672,0.991942180617,0.991954322444,0.991966455153,0.991978578744,0.991990693216,0.992002798571,0.992014894808,0.992026981926,0.992039059925,0.992051128806,0.992063188569,0.992075239212,0.992087280737,0.992099313142,0.992111336428,0.992123350596,0.992135355643,0.992147351571,0.99215933838,0.992171316069,0.992183284638,0.992195244087,0.992207194416,0.992219135625,0.992231067713,0.992242990681,0.992254904529,0.992266809256,0.992278704863,0.992290591348,0.992302468713,0.992314336957,0.992326196079,0.99233804608,0.99234988696,0.992361718719,0.992373541356,0.992385354871,0.992397159264,0.992408954536,0.992420740685,0.992432517713,0.992444285618,0.992456044401,0.992467794061,0.992479534599,0.992491266014,0.992502988306,0.992514701476,0.992526405522,0.992538100446,0.992549786246,0.992561462923,0.992573130476,0.992584788906,0.992596438213,0.992608078395,0.992619709454,0.992631331389,0.9926429442,0.992654547887,0.992666142449,0.992677727887,0.9926893042,0.992700871389,0.992712429454,0.992723978393,0.992735518208,0.992747048897,0.992758570462,0.992770082901,0.992781586215,0.992793080403,0.992804565466,0.992816041403,0.992827508215,0.9928389659,0.99285041446,0.992861853893,0.992873284201,0.992884705382,0.992896117437,0.992907520365,0.992918914167,0.992930298842,0.99294167439,0.992953040811,0.992964398105,0.992975746273,0.992987085312,0.992998415225,0.99300973601,0.993021047668,0.993032350198,0.9930436436,0.993054927875,0.993066203021,0.993077469039,0.99308872593,0.993099973692,0.993111212325,0.99312244183,0.993133662207,0.993144873455,0.993156075574,0.993167268564,0.993178452426,0.993189627158,0.993200792761,0.993211949235,0.993223096579,0.993234234794,0.993245363879,0.993256483835,0.993267594661,0.993278696356,0.993289788922,0.993300872358,0.993311946664,0.993323011839,0.993334067884,0.993345114798,0.993356152582,0.993367181235,0.993378200757,0.993389211148,0.993400212408,0.993411204537,0.993422187535,0.993433161402,0.993444126137,0.993455081741,0.993466028213,0.993476965553,0.993487893761,0.993498812838,0.993509722782,0.993520623595,0.993531515275,0.993542397822,0.993553271238,0.993564135521,0.993574990671,0.993585836688,0.993596673573,0.993607501325,0.993618319943,0.993629129429,0.993639929781,0.993650721,0.993661503086,0.993672276038,0.993683039856,0.993693794541,0.993704540092,0.993715276509,0.993726003792,0.993736721941,0.993747430955,0.993758130836,0.993768821582,0.993779503193,0.99379017567,0.993800839012,0.993811493219,0.993822138292,0.993832774229,0.993843401031,0.993854018698,0.99386462723,0.993875226626,0.993885816887,0.993896398013,0.993906970002,0.993917532856,0.993928086574,0.993938631156,0.993949166602,0.993959692912,0.993970210085,0.993980718123,0.993991217023,0.994001706787,0.994012187415,0.994022658906,0.99403312126,0.994043574477,0.994054018557,0.994064453499,0.994074879305,0.994085295973,0.994095703504,0.994106101897,0.994116491153,0.994126871271,0.994137242251,0.994147604093,0.994157956798,0.994168300364,0.994178634792,0.994188960082,0.994199276233,0.994209583246,0.994219881121,0.994230169856,0.994240449453,0.994250719911,0.99426098123,0.994271233411,0.994281476452,0.994291710353,0.994301935116,0.994312150739,0.994322357223,0.994332554567,0.994342742771,0.994352921835,0.99436309176,0.994373252545,0.994383404189,0.994393546694,0.994403680058,0.994413804281,0.994423919365,0.994434025308,0.99444412211,0.994454209771,0.994464288292,0.994474357672,0.994484417911,0.994494469008,0.994504510965,0.99451454378,0.994524567454,0.994534581987,0.994544587377,0.994554583627,0.994564570734,0.9945745487,0.994584517524,0.994594477206,0.994604427745,0.994614369143,0.994624301398,0.994634224511,0.994644138481,0.994654043309,0.994663938994,0.994673825536,0.994683702936,0.994693571193,0.994703430306,0.994713280277,0.994723121104,0.994732952788,0.994742775329,0.994752588726,0.99476239298,0.99477218809,0.994781974057,0.994791750879,0.994801518558,0.994811277092,0.994821026483,0.994830766729,0.994840497831,0.994850219789,0.994859932602,0.994869636271,0.994879330795,0.994889016174,0.994898692409,0.994908359498,0.994918017443,0.994927666243,0.994937305897,0.994946936406,0.99495655777,0.994966169989,0.994975773061,0.994985366989,0.99499495177,0.995004527406,0.995014093896,0.99502365124,0.995033199438,0.99504273849,0.995052268396,0.995061789155,0.995071300768,0.995080803234,0.995090296554,0.995099780727,0.995109255754,0.995118721633,0.995128178366,0.995137625952,0.99514706439,0.995156493682,0.995165913826,0.995175324823,0.995184726672,0.995194119374,0.995203502928,0.995212877335,0.995222242594,0.995231598705,0.995240945667,0.995250283482,0.995259612149,0.995268931668,0.995278242038,0.99528754326,0.995296835333,0.995306118258,0.995315392034,0.995324656662,0.99533391214,0.99534315847,0.995352395651,0.995361623683,0.995370842565,0.995380052299,0.995389252883,0.995398444317,0.995407626603,0.995416799738,0.995425963724,0.99543511856,0.995444264247,0.995453400783,0.995462528169,0.995471646406,0.995480755492,0.995489855428,0.995498946213,0.995508027849,0.995517100333,0.995526163668,0.995535217851,0.995544262884,0.995553298766,0.995562325497,0.995571343077,0.995580351506,0.995589350783,0.99559834091,0.995607321885,0.995616293709,0.995625256381,0.995634209902,0.995643154271,0.995652089488,0.995661015554,0.995669932467,0.995678840229,0.995687738838,0.995696628296,0.995705508601,0.995714379754,0.995723241754,0.995732094602,0.995740938298,0.99574977284,0.99575859823,0.995767414468,0.995776221552,0.995785019483,0.995793808262,0.995802587887,0.995811358359,0.995820119678,0.995828871843,0.995837614855,0.995846348714,0.995855073419,0.99586378897,0.995872495367,0.995881192611,0.9958898807,0.995898559636,0.995907229417,0.995915890045,0.995924541518,0.995933183837,0.995941817001,0.995950441011,0.995959055866,0.995967661567,0.995976258113,0.995984845504,0.99599342374,0.996001992822,0.996010552748,0.996019103519,0.996027645135,0.996036177596,0.996044700901,0.996053215051,0.996061720046,0.996070215884,0.996078702568,0.996087180095,0.996095648467,0.996104107682,0.996112557742,0.996120998646,0.996129430393,0.996137852985,0.99614626642,0.996154670699,0.996163065821,0.996171451787,0.996179828596,0.996188196248,0.996196554744,0.996204904083,0.996213244265,0.99622157529,0.996229897158,0.996238209869,0.996246513422,0.996254807819,0.996263093058,0.996271369139,0.996279636063,0.99628789383,0.996296142438,0.99630438189,0.996312612183,0.996320833318,0.996329045295,0.996337248115,0.996345441776,0.996353626279,0.996361801624,0.99636996781,0.996378124838,0.996386272708,0.996394411419,0.996402540971,0.996410661364,0.996418772599,0.996426874675,0.996434967592,0.99644305135,0.996451125949,0.996459191389,0.996467247669,0.99647529479,0.996483332752,0.996491361554,0.996499381197,0.99650739168,0.996515393004,0.996523385167,0.996531368171,0.996539342015,0.996547306699,0.996555262223,0.996563208587,0.996571145791,0.996579073834,0.996586992717,0.99659490244,0.996602803002,0.996610694403,0.996618576644,0.996626449724,0.996634313644,0.996642168402,0.996650014,0.996657850437,0.996665677712,0.996673495827,0.99668130478,0.996689104572,0.996696895203,0.996704676672,0.99671244898,0.996720212126,0.996727966111,0.996735710933,0.996743446594,0.996751173094,0.996758890431,0.996766598606,0.996774297619,0.99678198747,0.996789668159,0.996797339686,0.99680500205,0.996812655252,0.996820299291,0.996827934168,0.996835559882,0.996843176434,0.996850783822,0.996858382048,0.996865971111,0.996873551011,0.996881121748,0.996888683322,0.996896235732,0.99690377898,0.996911313064,0.996918837984,0.996926353741,0.996933860335,0.996941357765,0.996948846031,0.996956325134,0.996963795073,0.996971255848,0.996978707459,0.996986149906,0.996993583189,0.997001007307,0.997008422262,0.997015828052,0.997023224678,0.997030612139,0.997037990436,0.997045359569,0.997052719536,0.997060070339,0.997067411978,0.997074744451,0.99708206776,0.997089381903,0.997096686882,0.997103982696,0.997111269344,0.997118546827,0.997125815145,0.997133074297,0.997140324284,0.997147565106,0.997154796762,0.997162019252,0.997169232576,0.997176436735,0.997183631728,0.997190817555,0.997197994217,0.997205161712,0.997212320041,0.997219469204,0.9972266092,0.99723374003,0.997240861694,0.997247974192,0.997255077523,0.997262171688,0.997269256685,0.997276332517,0.997283399181,0.997290456679,0.997297505009,0.997304544173,0.99731157417,0.997318595,0.997325606662,0.997332609158,0.997339602486,0.997346586647,0.99735356164,0.997360527466,0.997367484124,0.997374431615,0.997381369938,0.997388299094,0.997395219081,0.997402129901,0.997409031553,0.997415924037,0.997422807353,0.997429681501,0.997436546481,0.997443402292,0.997450248935,0.99745708641,0.997463914716,0.997470733854,0.997477543824,0.997484344624,0.997491136257,0.99749791872,0.997504692015,0.99751145614,0.997518211097,0.997524956885,0.997531693504,0.997538420954,0.997545139234,0.997551848346,0.997558548288,0.99756523906,0.997571920664,0.997578593098,0.997585256362,0.997591910457,0.997598555382,0.997605191137,0.997611817723,0.997618435139,0.997625043384,0.99763164246,0.997638232366,0.997644813102,0.997651384668,0.997657947063,0.997664500289,0.997671044343,0.997677579228,0.997684104942,0.997690621486,0.997697128859,0.997703627061,0.997710116093,0.997716595954,0.997723066644,0.997729528164,0.997735980512,0.997742423689,0.997748857696,0.997755282531,0.997761698195,0.997768104688,0.99777450201,0.997780890161,0.99778726914,0.997793638947,0.997799999583,0.997806351048,0.99781269334,0.997819026462,0.997825350411,0.997831665189,0.997837970795,0.997844267228,0.99785055449,0.99785683258,0.997863101498,0.997869361244,0.997875611817,0.997881853218,0.997888085447,0.997894308504,0.997900522388,0.997906727099,0.997912922638,0.997919109005,0.997925286199,0.99793145422,0.997937613068,0.997943762743,0.997949903246,0.997956034576,0.997962156732,0.997968269716,0.997974373526,0.997980468164,0.997986553628,0.997992629919,0.997998697036,0.99800475498,0.998010803751,0.998016843348,0.998022873771,0.998028895021,0.998034907098,0.99804091,0.998046903729,0.998052888284,0.998058863665,0.998064829872,0.998070786905,0.998076734765,0.99808267345,0.99808860296,0.998094523297,0.998100434459,0.998106336447,0.998112229261,0.9981181129,0.998123987365,0.998129852655,0.998135708771,0.998141555712,0.998147393478,0.998153222069,0.998159041486,0.998164851728,0.998170652795,0.998176444686,0.998182227403,0.998188000945,0.998193765312,0.998199520503,0.99820526652,0.99821100336,0.998216731026,0.998222449516,0.998228158831,0.99823385897,0.998239549934,0.998245231722,0.998250904335,0.998256567771,0.998262222032,0.998267867118,0.998273503027,0.99827912976,0.998284747318,0.998290355699,0.998295954905,0.998301544934,0.998307125787,0.998312697464,0.998318259964,0.998323813289,0.998329357436,0.998334892408,0.998340418203,0.998345934821,0.998351442263,0.998356940528,0.998362429617,0.998367909529,0.998373380264,0.998378841822,0.998384294203,0.998389737407,0.998395171435,0.998400596285,0.998406011958,0.998411418454,0.998416815773,0.998422203915,0.998427582879,0.998432952667,0.998438313276,0.998443664708,0.998449006963,0.998454340041,0.99845966394,0.998464978662,0.998470284207,0.998475580573,0.998480867762,0.998486145773,0.998491414606,0.998496674262,0.998501924739,0.998507166038,0.99851239816,0.998517621103,0.998522834868,0.998528039454,0.998533234863,0.998538421093,0.998543598145,0.998548766018,0.998553924713,0.99855907423,0.998564214568,0.998569345727,0.998574467708,0.99857958051,0.998584684133,0.998589778578,0.998594863843,0.99859993993,0.998605006838,0.998610064567,0.998615113117,0.998620152488,0.99862518268,0.998630203693,0.998635215526,0.99864021818,0.998645211655,0.998650195951,0.998655171067,0.998660137004,0.998665093761,0.998670041339,0.998674979737,0.998679908956,0.998684828995,0.998689739854,0.998694641534,0.998699534034,0.998704417353,0.998709291494,0.998714156454,0.998719012234,0.998723858834,0.998728696254,0.998733524494,0.998738343554,0.998743153434,0.998747954133,0.998752745652,0.998757527991,0.99876230115,0.998767065128,0.998771819925,0.998776565542,0.998781301979,0.998786029235,0.99879074731,0.998795456205,0.998800155919,0.998804846452,0.998809527805,0.998814199976,0.998818862967,0.998823516777,0.998828161406,0.998832796854,0.99883742312,0.998842040206,0.99884664811,0.998851246834,0.998855836376,0.998860416737,0.998864987916,0.998869549914,0.998874102731,0.998878646366,0.99888318082,0.998887706093,0.998892222183,0.998896729092,0.99890122682,0.998905715366,0.99891019473,0.998914664912,0.998919125913,0.998923577731,0.998928020368,0.998932453823,0.998936878096,0.998941293187,0.998945699096,0.998950095822,0.998954483367,0.998958861729,0.99896323091,0.998967590908,0.998971941723,0.998976283356,0.998980615807,0.998984939076,0.998989253162,0.998993558066,0.998997853787,0.999002140325,0.999006417681,0.999010685854,0.999014944845,0.999019194652,0.999023435277,0.99902766672,0.999031888979,0.999036102055,0.999040305949,0.999044500659,0.999048686187,0.999052862532,0.999057029693,0.999061187671,0.999065336466,0.999069476078,0.999073606507,0.999077727753,0.999081839815,0.999085942694,0.999090036389,0.999094120901,0.99909819623,0.999102262375,0.999106319336,0.999110367114,0.999114405709,0.999118435119,0.999122455346,0.99912646639,0.999130468249,0.999134460925,0.999138444417,0.999142418725,0.999146383849,0.999150339789,0.999154286545,0.999158224118,0.999162152506,0.99916607171,0.99916998173,0.999173882566,0.999177774217,0.999181656685,0.999185529968,0.999189394067,0.999193248981,0.999197094711,0.999200931257,0.999204758618,0.999208576795,0.999212385787,0.999216185595,0.999219976218,0.999223757657,0.999227529911,0.99923129298,0.999235046865,0.999238791564,0.999242527079,0.999246253409,0.999249970555,0.999253678515,0.999257377291,0.999261066881,0.999264747287,0.999268418507,0.999272080543,0.999275733393,0.999279377058,0.999283011538,0.999286636833,0.999290252943,0.999293859867,0.999297457606,0.99930104616,0.999304625528,0.999308195711,0.999311756709,0.999315308521,0.999318851147,0.999322384588,0.999325908844,0.999329423914,0.999332929798,0.999336426497,0.99933991401,0.999343392337,0.999346861478,0.999350321434,0.999353772204,0.999357213788,0.999360646186,0.999364069399,0.999367483425,0.999370888265,0.99937428392,0.999377670388,0.99938104767,0.999384415766,0.999387774676,0.9993911244,0.999394464938,0.99939779629,0.999401118455,0.999404431434,0.999407735226,0.999411029833,0.999414315253,0.999417591486,0.999420858533,0.999424116394,0.999427365068,0.999430604555,0.999433834857,0.999437055971,0.999440267899,0.99944347064,0.999446664195,0.999449848562,0.999453023744,0.999456189738,0.999459346546,0.999462494166,0.9994656326,0.999468761847,0.999471881907,0.999474992781,0.999478094467,0.999481186966,0.999484270278,0.999487344404,0.999490409342,0.999493465093,0.999496511657,0.999499549033,0.999502577223,0.999505596225,0.99950860604,0.999511606668,0.999514598109,0.999517580362,0.999520553428,0.999523517306,0.999526471997,0.999529417501,0.999532353817,0.999535280946,0.999538198887,0.999541107641,0.999544007207,0.999546897585,0.999549778776,0.999552650779,0.999555513595,0.999558367223,0.999561211663,0.999564046915,0.99956687298,0.999569689857,0.999572497546,0.999575296047,0.99957808536,0.999580865485,0.999583636423,0.999586398172,0.999589150734,0.999591894107,0.999594628292,0.99959735329,0.999600069099,0.99960277572,0.999605473153,0.999608161398,0.999610840455,0.999613510323,0.999616171003,0.999618822495,0.999621464799,0.999624097914,0.999626721841,0.99962933658,0.99963194213,0.999634538492,0.999637125666,0.999639703651,0.999642272447,0.999644832055,0.999647382475,0.999649923706,0.999652455748,0.999654978602,0.999657492267,0.999659996744,0.999662492032,0.999664978131,0.999667455042,0.999669922763,0.999672381297,0.999674830641,0.999677270796,0.999679701763,0.999682123541,0.99968453613,0.99968693953,0.999689333741,0.999691718763,0.999694094597,0.999696461241,0.999698818696,0.999701166963,0.99970350604,0.999705835928,0.999708156627,0.999710468137,0.999712770458,0.99971506359,0.999717347532,0.999719622286,0.99972188785,0.999724144225,0.999726391411,0.999728629407,0.999730858214,0.999733077832,0.999735288261,0.9997374895,0.999739681549,0.99974186441,0.999744038081,0.999746202562,0.999748357855,0.999750503957,0.99975264087,0.999754768594,0.999756887128,0.999758996472,0.999761096627,0.999763187593,0.999765269369,0.999767341955,0.999769405351,0.999771459558,0.999773504575,0.999775540403,0.99977756704,0.999779584488,0.999781592747,0.999783591815,0.999785581694,0.999787562382,0.999789533881,0.999791496191,0.99979344931,0.999795393239,0.999797327979,0.999799253528,0.999801169888,0.999803077058,0.999804975037,0.999806863827,0.999808743427,0.999810613836,0.999812475056,0.999814327085,0.999816169925,0.999818003574,0.999819828034,0.999821643303,0.999823449382,0.99982524627,0.999827033969,0.999828812478,0.999830581796,0.999832341924,0.999834092862,0.999835834609,0.999837567166,0.999839290533,0.99984100471,0.999842709696,0.999844405492,0.999846092098,0.999847769513,0.999849437738,0.999851096772,0.999852746616,0.99985438727,0.999856018733,0.999857641006,0.999859254088,0.99986085798,0.999862452681,0.999864038192,0.999865614512,0.999867181641,0.999868739581,0.999870288329,0.999871827887,0.999873358254,0.999874879431,0.999876391417,0.999877894212,0.999879387817,0.999880872231,0.999882347454,0.999883813487,0.999885270329,0.99988671798,0.99988815644,0.99988958571,0.999891005789,0.999892416677,0.999893818374,0.999895210881,0.999896594197,0.999897968321,0.999899333256,0.999900688999,0.999902035551,0.999903372912,0.999904701083,0.999906020062,0.999907329851,0.999908630449,0.999909921856,0.999911204071,0.999912477096,0.99991374093,0.999914995573,0.999916241025,0.999917477286,0.999918704356,0.999919922235,0.999921130922,0.999922330419,0.999923520725,0.999924701839,0.999925873763,0.999927036495,0.999928190036,0.999929334386,0.999930469545,0.999931595513,0.99993271229,0.999933819875,0.99993491827,0.999936007473,0.999937087485,0.999938158305,0.999939219935,0.999940272373,0.99994131562,0.999942349676,0.999943374541,0.999944390214,0.999945396696,0.999946393987,0.999947382086,0.999948360994,0.999949330711,0.999950291236,0.999951242571,0.999952184714,0.999953117665,0.999954041425,0.999954955994,0.999955861371,0.999956757557,0.999957644552,0.999958522355,0.999959390967,0.999960250387,0.999961100616,0.999961941654,0.9999627735,0.999963596155,0.999964409618,0.99996521389,0.99996600897,0.999966794859,0.999967571556,0.999968339062,0.999969097377,0.9999698465,0.999970586431,0.999971317171,0.999972038719,0.999972751076,0.999973454241,0.999974148215,0.999974832997,0.999975508588,0.999976174987,0.999976832194,0.99997748021,0.999978119035,0.999978748667,0.999979369109,0.999979980358,0.999980582416,0.999981175283,0.999981758957,0.999982333441,0.999982898732,0.999983454832,0.99998400174,0.999984539457,0.999985067982,0.999985587315,0.999986097457,0.999986598407,0.999987090165,0.999987572732,0.999988046107,0.99998851029,0.999988965282,0.999989411082,0.99998984769,0.999990275107,0.999990693332,0.999991102365,0.999991502206,0.999991892856,0.999992274314,0.999992646581,0.999993009655,0.999993363538,0.99999370823,0.999994043729,0.999994370037,0.999994687153,0.999994995077,0.99999529381,0.99999558335,0.999995863699,0.999996134857,0.999996396822,0.999996649596,0.999996893178,0.999997127568,0.999997352767,0.999997568774,0.999997775589,0.999997973212,0.999998161643,0.999998340883,0.999998510931,0.999998671787,0.999998823452,0.999998965924,0.999999099205,0.999999223294,0.999999338192,0.999999443897,0.999999540411,0.999999627733,0.999999705863,0.999999774801,0.999999834548,0.999999885103,0.999999926466,0.999999958637,0.999999981616,0.999999995404,1.0,0.999999995404,0.999999981616,0.999999958637,0.999999926466,0.999999885103,0.999999834548,0.999999774801,0.999999705863,0.999999627733,0.999999540411,0.999999443897,0.999999338192,0.999999223294,0.999999099205,0.999998965924,0.999998823452,0.999998671787,0.999998510931,0.999998340883,0.999998161643,0.999997973212,0.999997775589,0.999997568774,0.999997352767,0.999997127568,0.999996893178,0.999996649596,0.999996396822,0.999996134857,0.999995863699,0.99999558335,0.99999529381,0.999994995077,0.999994687153,0.999994370037,0.999994043729,0.99999370823,0.999993363538,0.999993009655,0.999992646581,0.999992274314,0.999991892856,0.999991502206,0.999991102365,0.999990693332,0.999990275107,0.99998984769,0.999989411082,0.999988965282,0.99998851029,0.999988046107,0.999987572732,0.999987090165,0.999986598407,0.999986097457,0.999985587315,0.999985067982,0.999984539457,0.99998400174,0.999983454832,0.999982898732,0.999982333441,0.999981758957,0.999981175283,0.999980582416,0.999979980358,0.999979369109,0.999978748667,0.999978119035,0.99997748021,0.999976832194,0.999976174987,0.999975508588,0.999974832997,0.999974148215,0.999973454241,0.999972751076,0.999972038719,0.999971317171,0.999970586431,0.9999698465,0.999969097377,0.999968339062,0.999967571556,0.999966794859,0.99996600897,0.99996521389,0.999964409618,0.999963596155,0.9999627735,0.999961941654,0.999961100616,0.999960250387,0.999959390967,0.999958522355,0.999957644552,0.999956757557,0.999955861371,0.999954955994,0.999954041425,0.999953117665,0.999952184714,0.999951242571,0.999950291236,0.999949330711,0.999948360994,0.999947382086,0.999946393987,0.999945396696,0.999944390214,0.999943374541,0.999942349676,0.99994131562,0.999940272373,0.999939219935,0.999938158305,0.999937087485,0.999936007473,0.99993491827,0.999933819875,0.99993271229,0.999931595513,0.999930469545,0.999929334386,0.999928190036,0.999927036495,0.999925873763,0.999924701839,0.999923520725,0.999922330419,0.999921130922,0.999919922235,0.999918704356,0.999917477286,0.999916241025,0.999914995573,0.99991374093,0.999912477096,0.999911204071,0.999909921856,0.999908630449,0.999907329851,0.999906020062,0.999904701083,0.999903372912,0.999902035551,0.999900688999,0.999899333256,0.999897968321,0.999896594197,0.999895210881,0.999893818374,0.999892416677,0.999891005789,0.99988958571,0.99988815644,0.99988671798,0.999885270329,0.999883813487,0.999882347454,0.999880872231,0.999879387817,0.999877894212,0.999876391417,0.999874879431,0.999873358254,0.999871827887,0.999870288329,0.999868739581,0.999867181641,0.999865614512,0.999864038192,0.999862452681,0.99986085798,0.999859254088,0.999857641006,0.999856018733,0.99985438727,0.999852746616,0.999851096772,0.999849437738,0.999847769513,0.999846092098,0.999844405492,0.999842709696,0.99984100471,0.999839290533,0.999837567166,0.999835834609,0.999834092862,0.999832341924,0.999830581796,0.999828812478,0.999827033969,0.99982524627,0.999823449382,0.999821643303,0.999819828034,0.999818003574,0.999816169925,0.999814327085,0.999812475056,0.999810613836,0.999808743427,0.999806863827,0.999804975037,0.999803077058,0.999801169888,0.999799253528,0.999797327979,0.999795393239,0.99979344931,0.999791496191,0.999789533881,0.999787562382,0.999785581694,0.999783591815,0.999781592747,0.999779584488,0.99977756704,0.999775540403,0.999773504575,0.999771459558,0.999769405351,0.999767341955,0.999765269369,0.999763187593,0.999761096627,0.999758996472,0.999756887128,0.999754768594,0.99975264087,0.999750503957,0.999748357855,0.999746202562,0.999744038081,0.99974186441,0.999739681549,0.9997374895,0.999735288261,0.999733077832,0.999730858214,0.999728629407,0.999726391411,0.999724144225,0.99972188785,0.999719622286,0.999717347532,0.99971506359,0.999712770458,0.999710468137,0.999708156627,0.999705835928,0.99970350604,0.999701166963,0.999698818696,0.999696461241,0.999694094597,0.999691718763,0.999689333741,0.99968693953,0.99968453613,0.999682123541,0.999679701763,0.999677270796,0.999674830641,0.999672381297,0.999669922763,0.999667455042,0.999664978131,0.999662492032,0.999659996744,0.999657492267,0.999654978602,0.999652455748,0.999649923706,0.999647382475,0.999644832055,0.999642272447,0.999639703651,0.999637125666,0.999634538492,0.99963194213,0.99962933658,0.999626721841,0.999624097914,0.999621464799,0.999618822495,0.999616171003,0.999613510323,0.999610840455,0.999608161398,0.999605473153,0.99960277572,0.999600069099,0.99959735329,0.999594628292,0.999591894107,0.999589150734,0.999586398172,0.999583636423,0.999580865485,0.99957808536,0.999575296047,0.999572497546,0.999569689857,0.99956687298,0.999564046915,0.999561211663,0.999558367223,0.999555513595,0.999552650779,0.999549778776,0.999546897585,0.999544007207,0.999541107641,0.999538198887,0.999535280946,0.999532353817,0.999529417501,0.999526471997,0.999523517306,0.999520553428,0.999517580362,0.999514598109,0.999511606668,0.99950860604,0.999505596225,0.999502577223,0.999499549033,0.999496511657,0.999493465093,0.999490409342,0.999487344404,0.999484270278,0.999481186966,0.999478094467,0.999474992781,0.999471881907,0.999468761847,0.9994656326,0.999462494166,0.999459346546,0.999456189738,0.999453023744,0.999449848562,0.999446664195,0.99944347064,0.999440267899,0.999437055971,0.999433834857,0.999430604555,0.999427365068,0.999424116394,0.999420858533,0.999417591486,0.999414315253,0.999411029833,0.999407735226,0.999404431434,0.999401118455,0.99939779629,0.999394464938,0.9993911244,0.999387774676,0.999384415766,0.99938104767,0.999377670388,0.99937428392,0.999370888265,0.999367483425,0.999364069399,0.999360646186,0.999357213788,0.999353772204,0.999350321434,0.999346861478,0.999343392337,0.99933991401,0.999336426497,0.999332929798,0.999329423914,0.999325908844,0.999322384588,0.999318851147,0.999315308521,0.999311756709,0.999308195711,0.999304625528,0.99930104616,0.999297457606,0.999293859867,0.999290252943,0.999286636833,0.999283011538,0.999279377058,0.999275733393,0.999272080543,0.999268418507,0.999264747287,0.999261066881,0.999257377291,0.999253678515,0.999249970555,0.999246253409,0.999242527079,0.999238791564,0.999235046865,0.99923129298,0.999227529911,0.999223757657,0.999219976218,0.999216185595,0.999212385787,0.999208576795,0.999204758618,0.999200931257,0.999197094711,0.999193248981,0.999189394067,0.999185529968,0.999181656685,0.999177774217,0.999173882566,0.99916998173,0.99916607171,0.999162152506,0.999158224118,0.999154286545,0.999150339789,0.999146383849,0.999142418725,0.999138444417,0.999134460925,0.999130468249,0.99912646639,0.999122455346,0.999118435119,0.999114405709,0.999110367114,0.999106319336,0.999102262375,0.99909819623,0.999094120901,0.999090036389,0.999085942694,0.999081839815,0.999077727753,0.999073606507,0.999069476078,0.999065336466,0.999061187671,0.999057029693,0.999052862532,0.999048686187,0.999044500659,0.999040305949,0.999036102055,0.999031888979,0.99902766672,0.999023435277,0.999019194652,0.999014944845,0.999010685854,0.999006417681,0.999002140325,0.998997853787,0.998993558066,0.998989253162,0.998984939076,0.998980615807,0.998976283356,0.998971941723,0.998967590908,0.99896323091,0.998958861729,0.998954483367,0.998950095822,0.998945699096,0.998941293187,0.998936878096,0.998932453823,0.998928020368,0.998923577731,0.998919125913,0.998914664912,0.99891019473,0.998905715366,0.99890122682,0.998896729092,0.998892222183,0.998887706093,0.99888318082,0.998878646366,0.998874102731,0.998869549914,0.998864987916,0.998860416737,0.998855836376,0.998851246834,0.99884664811,0.998842040206,0.99883742312,0.998832796854,0.998828161406,0.998823516777,0.998818862967,0.998814199976,0.998809527805,0.998804846452,0.998800155919,0.998795456205,0.99879074731,0.998786029235,0.998781301979,0.998776565542,0.998771819925,0.998767065128,0.99876230115,0.998757527991,0.998752745652,0.998747954133,0.998743153434,0.998738343554,0.998733524494,0.998728696254,0.998723858834,0.998719012234,0.998714156454,0.998709291494,0.998704417353,0.998699534034,0.998694641534,0.998689739854,0.998684828995,0.998679908956,0.998674979737,0.998670041339,0.998665093761,0.998660137004,0.998655171067,0.998650195951,0.998645211655,0.99864021818,0.998635215526,0.998630203693,0.99862518268,0.998620152488,0.998615113117,0.998610064567,0.998605006838,0.99859993993,0.998594863843,0.998589778578,0.998584684133,0.99857958051,0.998574467708,0.998569345727,0.998564214568,0.99855907423,0.998553924713,0.998548766018,0.998543598145,0.998538421093,0.998533234863,0.998528039454,0.998522834868,0.998517621103,0.99851239816,0.998507166038,0.998501924739,0.998496674262,0.998491414606,0.998486145773,0.998480867762,0.998475580573,0.998470284207,0.998464978662,0.99845966394,0.998454340041,0.998449006963,0.998443664708,0.998438313276,0.998432952667,0.998427582879,0.998422203915,0.998416815773,0.998411418454,0.998406011958,0.998400596285,0.998395171435,0.998389737407,0.998384294203,0.998378841822,0.998373380264,0.998367909529,0.998362429617,0.998356940528,0.998351442263,0.998345934821,0.998340418203,0.998334892408,0.998329357436,0.998323813289,0.998318259964,0.998312697464,0.998307125787,0.998301544934,0.998295954905,0.998290355699,0.998284747318,0.99827912976,0.998273503027,0.998267867118,0.998262222032,0.998256567771,0.998250904335,0.998245231722,0.998239549934,0.99823385897,0.998228158831,0.998222449516,0.998216731026,0.99821100336,0.99820526652,0.998199520503,0.998193765312,0.998188000945,0.998182227403,0.998176444686,0.998170652795,0.998164851728,0.998159041486,0.998153222069,0.998147393478,0.998141555712,0.998135708771,0.998129852655,0.998123987365,0.9981181129,0.998112229261,0.998106336447,0.998100434459,0.998094523297,0.99808860296,0.99808267345,0.998076734765,0.998070786905,0.998064829872,0.998058863665,0.998052888284,0.998046903729,0.99804091,0.998034907098,0.998028895021,0.998022873771,0.998016843348,0.998010803751,0.99800475498,0.997998697036,0.997992629919,0.997986553628,0.997980468164,0.997974373526,0.997968269716,0.997962156732,0.997956034576,0.997949903246,0.997943762743,0.997937613068,0.99793145422,0.997925286199,0.997919109005,0.997912922638,0.997906727099,0.997900522388,0.997894308504,0.997888085447,0.997881853218,0.997875611817,0.997869361244,0.997863101498,0.99785683258,0.99785055449,0.997844267228,0.997837970795,0.997831665189,0.997825350411,0.997819026462,0.99781269334,0.997806351048,0.997799999583,0.997793638947,0.99778726914,0.997780890161,0.99777450201,0.997768104688,0.997761698195,0.997755282531,0.997748857696,0.997742423689,0.997735980512,0.997729528164,0.997723066644,0.997716595954,0.997710116093,0.997703627061,0.997697128859,0.997690621486,0.997684104942,0.997677579228,0.997671044343,0.997664500289,0.997657947063,0.997651384668,0.997644813102,0.997638232366,0.99763164246,0.997625043384,0.997618435139,0.997611817723,0.997605191137,0.997598555382,0.997591910457,0.997585256362,0.997578593098,0.997571920664,0.99756523906,0.997558548288,0.997551848346,0.997545139234,0.997538420954,0.997531693504,0.997524956885,0.997518211097,0.99751145614,0.997504692015,0.99749791872,0.997491136257,0.997484344624,0.997477543824,0.997470733854,0.997463914716,0.99745708641,0.997450248935,0.997443402292,0.997436546481,0.997429681501,0.997422807353,0.997415924037,0.997409031553,0.997402129901,0.997395219081,0.997388299094,0.997381369938,0.997374431615,0.997367484124,0.997360527466,0.99735356164,0.997346586647,0.997339602486,0.997332609158,0.997325606662,0.997318595,0.99731157417,0.997304544173,0.997297505009,0.997290456679,0.997283399181,0.997276332517,0.997269256685,0.997262171688,0.997255077523,0.997247974192,0.997240861694,0.99723374003,0.9972266092,0.997219469204,0.997212320041,0.997205161712,0.997197994217,0.997190817555,0.997183631728,0.997176436735,0.997169232576,0.997162019252,0.997154796762,0.997147565106,0.997140324284,0.997133074297,0.997125815145,0.997118546827,0.997111269344,0.997103982696,0.997096686882,0.997089381903,0.99708206776,0.997074744451,0.997067411978,0.997060070339,0.997052719536,0.997045359569,0.997037990436,0.997030612139,0.997023224678,0.997015828052,0.997008422262,0.997001007307,0.996993583189,0.996986149906,0.996978707459,0.996971255848,0.996963795073,0.996956325134,0.996948846031,0.996941357765,0.996933860335,0.996926353741,0.996918837984,0.996911313064,0.99690377898,0.996896235732,0.996888683322,0.996881121748,0.996873551011,0.996865971111,0.996858382048,0.996850783822,0.996843176434,0.996835559882,0.996827934168,0.996820299291,0.996812655252,0.99680500205,0.996797339686,0.996789668159,0.99678198747,0.996774297619,0.996766598606,0.996758890431,0.996751173094,0.996743446594,0.996735710933,0.996727966111,0.996720212126,0.99671244898,0.996704676672,0.996696895203,0.996689104572,0.99668130478,0.996673495827,0.996665677712,0.996657850437,0.996650014,0.996642168402,0.996634313644,0.996626449724,0.996618576644,0.996610694403,0.996602803002,0.99659490244,0.996586992717,0.996579073834,0.996571145791,0.996563208587,0.996555262223,0.996547306699,0.996539342015,0.996531368171,0.996523385167,0.996515393004,0.99650739168,0.996499381197,0.996491361554,0.996483332752,0.99647529479,0.996467247669,0.996459191389,0.996451125949,0.99644305135,0.996434967592,0.996426874675,0.996418772599,0.996410661364,0.996402540971,0.996394411419,0.996386272708,0.996378124838,0.99636996781,0.996361801624,0.996353626279,0.996345441776,0.996337248115,0.996329045295,0.996320833318,0.996312612183,0.99630438189,0.996296142438,0.99628789383,0.996279636063,0.996271369139,0.996263093058,0.996254807819,0.996246513422,0.996238209869,0.996229897158,0.99622157529,0.996213244265,0.996204904083,0.996196554744,0.996188196248,0.996179828596,0.996171451787,0.996163065821,0.996154670699,0.99614626642,0.996137852985,0.996129430393,0.996120998646,0.996112557742,0.996104107682,0.996095648467,0.996087180095,0.996078702568,0.996070215884,0.996061720046,0.996053215051,0.996044700901,0.996036177596,0.996027645135,0.996019103519,0.996010552748,0.996001992822,0.99599342374,0.995984845504,0.995976258113,0.995967661567,0.995959055866,0.995950441011,0.995941817001,0.995933183837,0.995924541518,0.995915890045,0.995907229417,0.995898559636,0.9958898807,0.995881192611,0.995872495367,0.99586378897,0.995855073419,0.995846348714,0.995837614855,0.995828871843,0.995820119678,0.995811358359,0.995802587887,0.995793808262,0.995785019483,0.995776221552,0.995767414468,0.99575859823,0.99574977284,0.995740938298,0.995732094602,0.995723241754,0.995714379754,0.995705508601,0.995696628296,0.995687738838,0.995678840229,0.995669932467,0.995661015554,0.995652089488,0.995643154271,0.995634209902,0.995625256381,0.995616293709,0.995607321885,0.99559834091,0.995589350783,0.995580351506,0.995571343077,0.995562325497,0.995553298766,0.995544262884,0.995535217851,0.995526163668,0.995517100333,0.995508027849,0.995498946213,0.995489855428,0.995480755492,0.995471646406,0.995462528169,0.995453400783,0.995444264247,0.99543511856,0.995425963724,0.995416799738,0.995407626603,0.995398444317,0.995389252883,0.995380052299,0.995370842565,0.995361623683,0.995352395651,0.99534315847,0.99533391214,0.995324656662,0.995315392034,0.995306118258,0.995296835333,0.99528754326,0.995278242038,0.995268931668,0.995259612149,0.995250283482,0.995240945667,0.995231598705,0.995222242594,0.995212877335,0.995203502928,0.995194119374,0.995184726672,0.995175324823,0.995165913826,0.995156493682,0.99514706439,0.995137625952,0.995128178366,0.995118721633,0.995109255754,0.995099780727,0.995090296554,0.995080803234,0.995071300768,0.995061789155,0.995052268396,0.99504273849,0.995033199438,0.99502365124,0.995014093896,0.995004527406,0.99499495177,0.994985366989,0.994975773061,0.994966169989,0.99495655777,0.994946936406,0.994937305897,0.994927666243,0.994918017443,0.994908359498,0.994898692409,0.994889016174,0.994879330795,0.994869636271,0.994859932602,0.994850219789,0.994840497831,0.994830766729,0.994821026483,0.994811277092,0.994801518558,0.994791750879,0.994781974057,0.99477218809,0.99476239298,0.994752588726,0.994742775329,0.994732952788,0.994723121104,0.994713280277,0.994703430306,0.994693571193,0.994683702936,0.994673825536,0.994663938994,0.994654043309,0.994644138481,0.994634224511,0.994624301398,0.994614369143,0.994604427745,0.994594477206,0.994584517524,0.9945745487,0.994564570734,0.994554583627,0.994544587377,0.994534581987,0.994524567454,0.99451454378,0.994504510965,0.994494469008,0.994484417911,0.994474357672,0.994464288292,0.994454209771,0.99444412211,0.994434025308,0.994423919365,0.994413804281,0.994403680058,0.994393546694,0.994383404189,0.994373252545,0.99436309176,0.994352921835,0.994342742771,0.994332554567,0.994322357223,0.994312150739,0.994301935116,0.994291710353,0.994281476452,0.994271233411,0.99426098123,0.994250719911,0.994240449453,0.994230169856,0.994219881121,0.994209583246,0.994199276233,0.994188960082,0.994178634792,0.994168300364,0.994157956798,0.994147604093,0.994137242251,0.994126871271,0.994116491153,0.994106101897,0.994095703504,0.994085295973,0.994074879305,0.994064453499,0.994054018557,0.994043574477,0.99403312126,0.994022658906,0.994012187415,0.994001706787,0.993991217023,0.993980718123,0.993970210085,0.993959692912,0.993949166602,0.993938631156,0.993928086574,0.993917532856,0.993906970002,0.993896398013,0.993885816887,0.993875226626,0.99386462723,0.993854018698,0.993843401031,0.993832774229,0.993822138292,0.993811493219,0.993800839012,0.99379017567,0.993779503193,0.993768821582,0.993758130836,0.993747430955,0.993736721941,0.993726003792,0.993715276509,0.993704540092,0.993693794541,0.993683039856,0.993672276038,0.993661503086,0.993650721,0.993639929781,0.993629129429,0.993618319943,0.993607501325,0.993596673573,0.993585836688,0.993574990671,0.993564135521,0.993553271238,0.993542397822,0.993531515275,0.993520623595,0.993509722782,0.993498812838,0.993487893761,0.993476965553,0.993466028213,0.993455081741,0.993444126137,0.993433161402,0.993422187535,0.993411204537,0.993400212408,0.993389211148,0.993378200757,0.993367181235,0.993356152582,0.993345114798,0.993334067884,0.993323011839,0.993311946664,0.993300872358,0.993289788922,0.993278696356,0.993267594661,0.993256483835,0.993245363879,0.993234234794,0.993223096579,0.993211949235,0.993200792761,0.993189627158,0.993178452426,0.993167268564,0.993156075574,0.993144873455,0.993133662207,0.99312244183,0.993111212325,0.993099973692,0.99308872593,0.993077469039,0.993066203021,0.993054927875,0.9930436436,0.993032350198,0.993021047668,0.99300973601,0.992998415225,0.992987085312,0.992975746273,0.992964398105,0.992953040811,0.99294167439,0.992930298842,0.992918914167,0.992907520365,0.992896117437,0.992884705382,0.992873284201,0.992861853893,0.99285041446,0.9928389659,0.992827508215,0.992816041403,0.992804565466,0.992793080403,0.992781586215,0.992770082901,0.992758570462,0.992747048897,0.992735518208,0.992723978393,0.992712429454,0.992700871389,0.9926893042,0.992677727887,0.992666142449,0.992654547887,0.9926429442,0.992631331389,0.992619709454,0.992608078395,0.992596438213,0.992584788906,0.992573130476,0.992561462923,0.992549786246,0.992538100446,0.992526405522,0.992514701476,0.992502988306,0.992491266014,0.992479534599,0.992467794061,0.992456044401,0.992444285618,0.992432517713,0.992420740685,0.992408954536,0.992397159264,0.992385354871,0.992373541356,0.992361718719,0.99234988696,0.99233804608,0.992326196079,0.992314336957,0.992302468713,0.992290591348,0.992278704863,0.992266809256,0.992254904529,0.992242990681,0.992231067713,0.992219135625,0.992207194416,0.992195244087,0.992183284638,0.992171316069,0.99215933838,0.992147351571,0.992135355643,0.992123350596,0.992111336428,0.992099313142,0.992087280737,0.992075239212,0.992063188569,0.992051128806,0.992039059925,0.992026981926,0.992014894808,0.992002798571,0.991990693216,0.991978578744,0.991966455153,0.991954322444,0.991942180617,0.991930029672,0.99191786961,0.991905700431,0.991893522134,0.991881334719,0.991869138188,0.991856932539,0.991844717774,0.991832493892,0.991820260893,0.991808018777,0.991795767545,0.991783507197,0.991771237732,0.991758959152,0.991746671455,0.991734374642,0.991722068713,0.991709753669,0.991697429509,0.991685096234,0.991672753843,0.991660402337,0.991648041716,0.99163567198,0.991623293129,0.991610905163,0.991598508083,0.991586101888,0.991573686579,0.991561262155,0.991548828617,0.991536385965,0.991523934199,0.991511473319,0.991499003325,0.991486524218,0.991474035997,0.991461538662,0.991449032215,0.991436516654,0.99142399198,0.991411458193,0.991398915294,0.991386363281,0.991373802156,0.991361231919,0.991348652569,0.991336064107,0.991323466532,0.991310859846,0.991298244048,0.991285619138,0.991272985116,0.991260341983,0.991247689738,0.991235028382,0.991222357915,0.991209678336,0.991196989647,0.991184291847,0.991171584936,0.991158868914,0.991146143782,0.991133409539,0.991120666186,0.991107913723,0.99109515215,0.991082381467,0.991069601674,0.991056812772,0.99104401476,0.991031207638,0.991018391407,0.991005566067,0.990992731618,0.99097988806,0.990967035392,0.990954173617,0.990941302732,0.990928422739,0.990915533638,0.990902635428,0.99088972811,0.990876811684,0.99086388615,0.990850951508,0.990838007759,0.990825054902,0.990812092938,0.990799121866,0.990786141687,0.990773152401,0.990760154008,0.990747146508,0.990734129902,0.990721104188,0.990708069369,0.990695025443,0.99068197241,0.990668910272,0.990655839027,0.990642758677,0.990629669221,0.990616570659,0.990603462992,0.990590346219,0.990577220341,0.990564085358,0.990550941269,0.990537788076,0.990524625778,0.990511454375,0.990498273868,0.990485084256,0.99047188554,0.99045867772,0.990445460796,0.990432234768,0.990418999635,0.9904057554,0.99039250206,0.990379239617,0.990365968071,0.990352687421,0.990339397669,0.990326098813,0.990312790855,0.990299473793,0.99028614763,0.990272812363,0.990259467994,0.990246114523,0.99023275195,0.990219380275,0.990205999498,0.99019260962,0.990179210639,0.990165802557,0.990152385374,0.990138959089,0.990125523704,0.990112079217,0.990098625629,0.990085162941,0.990071691152,0.990058210262,0.990044720272,0.990031221182,0.990017712992,0.990004195701,0.989990669311,0.989977133821,0.989963589231,0.989950035542,0.989936472753,0.989922900865,0.989909319878,0.989895729791,0.989882130606,0.989868522322,0.98985490494,0.989841278459,0.989827642879,0.989813998202,0.989800344426,0.989786681552,0.98977300958,0.98975932851,0.989745638343,0.989731939078,0.989718230716,0.989704513256,0.989690786699,0.989677051046,0.989663306295,0.989649552448,0.989635789504,0.989622017463,0.989608236326,0.989594446093,0.989580646764,0.989566838338,0.989553020817,0.9895391942,0.989525358487,0.989511513679,0.989497659776,0.989483796777,0.989469924683,0.989456043494,0.989442153211,0.989428253832,0.989414345359,0.989400427791,0.989386501129,0.989372565373,0.989358620523,0.989344666579,0.989330703541,0.989316731409,0.989302750183,0.989288759865,0.989274760452,0.989260751947,0.989246734349,0.989232707657,0.989218671873,0.989204626996,0.989190573027,0.989176509965,0.989162437811,0.989148356564,0.989134266226,0.989120166796,0.989106058273,0.98909194066,0.989077813955,0.989063678158,0.98904953327,0.989035379291,0.989021216221,0.98900704406,0.988992862808,0.988978672466,0.988964473033,0.98895026451,0.988936046897,0.988921820194,0.9889075844,0.988893339517,0.988879085544,0.988864822482,0.98885055033,0.988836269089,0.988821978758,0.988807679339,0.988793370831,0.988779053234,0.988764726548,0.988750390774,0.988736045911,0.98872169196,0.988707328921,0.988692956794,0.98867857558,0.988664185277,0.988649785887,0.988635377409,0.988620959844,0.988606533192,0.988592097453,0.988577652627,0.988563198714,0.988548735715,0.988534263629,0.988519782456,0.988505292198,0.988490792853,0.988476284422,0.988461766905,0.988447240303,0.988432704615,0.988418159841,0.988403605982,0.988389043038,0.988374471009,0.988359889895,0.988345299697,0.988330700413,0.988316092045,0.988301474593,0.988286848056,0.988272212435,0.988257567731,0.988242913942,0.98822825107,0.988213579114,0.988198898075,0.988184207952,0.988169508746,0.988154800457,0.988140083086,0.988125356631,0.988110621094,0.988095876474,0.988081122772,0.988066359988,0.988051588122,0.988036807173,0.988022017143,0.988007218031,0.987992409838,0.987977592563,0.987962766207,0.98794793077,0.987933086252,0.987918232653,0.987903369973,0.987888498213,0.987873617372,0.987858727451,0.987843828449,0.987828920368,0.987814003206,0.987799076965,0.987784141645,0.987769197244,0.987754243765,0.987739281206,0.987724309568,0.987709328851,0.987694339055,0.987679340181,0.987664332228,0.987649315197,0.987634289087,0.9876192539,0.987604209634,0.987589156291,0.987574093869,0.987559022371,0.987543941794,0.987528852141,0.98751375341,0.987498645603,0.987483528718,0.987468402757,0.987453267719,0.987438123605,0.987422970414,0.987407808147,0.987392636804,0.987377456385,0.987362266891,0.987347068321,0.987331860675,0.987316643954,0.987301418158,0.987286183287,0.98727093934,0.987255686319,0.987240424224,0.987225153054,0.987209872809,0.987194583491,0.987179285098,0.987163977631,0.987148661091,0.987133335477,0.987118000789,0.987102657028,0.987087304193,0.987071942286,0.987056571306,0.987041191253,0.987025802127,0.987010403928,0.986994996658,0.986979580315,0.9869641549,0.986948720413,0.986933276854,0.986917824223,0.986902362521,0.986886891748,0.986871411903,0.986855922987,0.986840425,0.986824917943,0.986809401814,0.986793876615,0.986778342346,0.986762799007,0.986747246597,0.986731685117,0.986716114568,0.986700534949,0.98668494626,0.986669348502,0.986653741675,0.986638125778,0.986622500813,0.986606866779,0.986591223676,0.986575571505,0.986559910265,0.986544239957,0.986528560581,0.986512872136,0.986497174625,0.986481468045,0.986465752398,0.986450027683,0.986434293902,0.986418551053,0.986402799137,0.986387038154,0.986371268105,0.986355488989,0.986339700807,0.986323903559,0.986308097245,0.986292281864,0.986276457418,0.986260623906,0.986244781329,0.986228929686,0.986213068979,0.986197199206,0.986181320368,0.986165432465,0.986149535498,0.986133629467,0.986117714371,0.98610179021,0.986085856986,0.986069914698,0.986053963346,0.986038002931,0.986022033452,0.98600605491,0.985990067304,0.985974070636,0.985958064905,0.985942050111,0.985926026254,0.985909993335,0.985893951354,0.985877900311,0.985861840206,0.985845771038,0.98582969281,0.985813605519,0.985797509168,0.985781403755,0.985765289281,0.985749165746,0.98573303315,0.985716891493,0.985700740776,0.985684580999,0.985668412162,0.985652234264,0.985636047307,0.985619851289,0.985603646213,0.985587432076,0.985571208881,0.985554976626,0.985538735312,0.98552248494,0.985506225508,0.985489957018,0.98547367947,0.985457392864,0.985441097199,0.985424792476,0.985408478696,0.985392155858,0.985375823962,0.985359483009,0.985343132999,0.985326773932,0.985310405807,0.985294028626,0.985277642389,0.985261247095,0.985244842745,0.985228429338,0.985212006876,0.985195575357,0.985179134783,0.985162685154,0.985146226469,0.985129758728,0.985113281933,0.985096796083,0.985080301178,0.985063797218,0.985047284204,0.985030762135,0.985014231012,0.984997690835,0.984981141605,0.98496458332,0.984948015982,0.984931439591,0.984914854146,0.984898259648,0.984881656097,0.984865043494,0.984848421837,0.984831791128,0.984815151367,0.984798502554,0.984781844688,0.984765177771,0.984748501802,0.984731816781,0.984715122709,0.984698419586,0.984681707411,0.984664986185,0.984648255909,0.984631516582,0.984614768204,0.984598010776,0.984581244298,0.98456446877,0.984547684192,0.984530890564,0.984514087886,0.984497276159,0.984480455383,0.984463625558,0.984446786684,0.98442993876,0.984413081789,0.984396215768,0.984379340699,0.984362456583,0.984345563418,0.984328661205,0.984311749944,0.984294829636,0.98427790028,0.984260961878,0.984244014428,0.984227057931,0.984210092387,0.984193117797,0.98417613416,0.984159141476,0.984142139747,0.984125128972,0.98410810915,0.984091080283,0.984074042371,0.984056995413,0.98403993941,0.984022874361,0.984005800268,0.98398871713,0.983971624948,0.983954523721,0.983937413449,0.983920294134,0.983903165774,0.983886028371,0.983868881924,0.983851726434,0.9838345619,0.983817388323,0.983800205703,0.98378301404,0.983765813334,0.983748603586,0.983731384795,0.983714156962,0.983696920087,0.98367967417,0.983662419212,0.983645155211,0.98362788217,0.983610600087,0.983593308962,0.983576008797,0.983558699591,0.983541381345,0.983524054058,0.98350671773,0.983489372362,0.983472017955,0.983454654507,0.98343728202,0.983419900493,0.983402509927,0.983385110322,0.983367701677,0.983350283994,0.983332857272,0.983315421511,0.983297976712,0.983280522874,0.983263059999,0.983245588085,0.983228107134,0.983210617145,0.983193118119,0.983175610055,0.983158092955,0.983140566817,0.983123031642,0.983105487431,0.983087934184,0.983070371899,0.983052800579,0.983035220223,0.983017630831,0.983000032403,0.98298242494,0.982964808441,0.982947182908,0.982929548339,0.982911904735,0.982894252096,0.982876590423,0.982858919716,0.982841239974,0.982823551199,0.982805853389,0.982788146546,0.982770430669,0.982752705758,0.982734971815,0.982717228838,0.982699476829,0.982681715786,0.982663945711,0.982646166604,0.982628378464,0.982610581292,0.982592775089,0.982574959853,0.982557135586,0.982539302287,0.982521459958,0.982503608597,0.982485748205,0.982467878782,0.982450000328,0.982432112845,0.98241421633,0.982396310786,0.982378396212,0.982360472608,0.982342539974,0.982324598311,0.982306647618,0.982288687896,0.982270719146,0.982252741366,0.982234754558,0.982216758721,0.982198753856,0.982180739963,0.982162717042,0.982144685093,0.982126644117,0.982108594113,0.982090535081,0.982072467022,0.982054389937,0.982036303824,0.982018208685,0.98200010452,0.981981991328,0.98196386911,0.981945737865,0.981927597595,0.9819094483,0.981891289979,0.981873122632,0.981854946261,0.981836760864,0.981818566443,0.981800362996,0.981782150526,0.981763929031,0.981745698512,0.981727458969,0.981709210402,0.981690952811,0.981672686197,0.98165441056,0.981636125899,0.981617832215,0.981599529509,0.98158121778,0.981562897028,0.981544567255,0.981526228459,0.981507880641,0.981489523801,0.98147115794,0.981452783057,0.981434399152,0.981416006227,0.981397604281,0.981379193314,0.981360773326,0.981342344318,0.981323906289,0.981305459241,0.981287003172,0.981268538084,0.981250063976,0.981231580849,0.981213088702,0.981194587536,0.981176077352,0.981157558148,0.981139029926,0.981120492686,0.981101946427,0.98108339115,0.981064826856,0.981046253543,0.981027671213,0.981009079866,0.980990479502,0.98097187012,0.980953251721,0.980934624306,0.980915987874,0.980897342426,0.980878687962,0.980860024482,0.980841351985,0.980822670473,0.980803979946,0.980785280403,0.980766571845,0.980747854272,0.980729127685,0.980710392082,0.980691647465,0.980672893834,0.980654131189,0.98063535953,0.980616578857,0.98059778917,0.98057899047,0.980560182756,0.98054136603,0.98052254029,0.980503705538,0.980484861773,0.980466008996,0.980447147207,0.980428276405,0.980409396592,0.980390507767,0.98037160993,0.980352703082,0.980333787223,0.980314862353,0.980295928472,0.98027698558,0.980258033678,0.980239072766,0.980220102843,0.980201123911,0.980182135968,0.980163139016,0.980144133055,0.980125118084,0.980106094104,0.980087061115,0.980068019118,0.980048968112,0.980029908097,0.980010839074,0.979991761043,0.979972674005,0.979953577958,0.979934472905,0.979915358843,0.979896235775,0.9798771037,0.979857962617,0.979838812528,0.979819653433,0.979800485331,0.979781308224,0.97976212211,0.979742926991,0.979723722866,0.979704509735,0.979685287599,0.979666056459,0.979646816313,0.979627567163,0.979608309008,0.979589041849,0.979569765685,0.979550480518,0.979531186347,0.979511883172,0.979492570994,0.979473249812,0.979453919628,0.97943458044,0.97941523225,0.979395875057,0.979376508861,0.979357133664,0.979337749464,0.979318356263,0.97929895406,0.979279542855,0.979260122649,0.979240693442,0.979221255234,0.979201808025,0.979182351816,0.979162886606,0.979143412395,0.979123929185,0.979104436975,0.979084935765,0.979065425556,0.979045906347,0.979026378139,0.979006840932,0.978987294726,0.978967739522,0.978948175319,0.978928602118,0.978909019919,0.978889428721,0.978869828527,0.978850219334,0.978830601144,0.978810973957,0.978791337773,0.978771692592,0.978752038415,0.978732375241,0.97871270307,0.978693021904,0.978673331741,0.978653632583,0.978633924429,0.97861420728,0.978594481136,0.978574745997,0.978555001862,0.978535248733,0.97851548661,0.978495715492,0.978475935381,0.978456146275,0.978436348175,0.978416541082,0.978396724996,0.978376899916,0.978357065843,0.978337222778,0.97831737072,0.978297509669,0.978277639626,0.978257760591,0.978237872564,0.978217975545,0.978198069534,0.978178154533,0.97815823054,0.978138297556,0.978118355581,0.978098404615,0.978078444659,0.978058475713,0.978038497777,0.978018510851,0.977998514935,0.977978510029,0.977958496134,0.97793847325,0.977918441377,0.977898400515,0.977878350664,0.977858291825,0.977838223998,0.977818147183,0.977798061379,0.977777966588,0.97775786281,0.977737750044,0.977717628291,0.977697497551,0.977677357825,0.977657209111,0.977637051411,0.977616884725,0.977596709053,0.977576524396,0.977556330752,0.977536128123,0.977515916509,0.977495695909,0.977475466325,0.977455227756,0.977434980202,0.977414723664,0.977394458142,0.977374183635,0.977353900145,0.977333607671,0.977313306214,0.977292995774,0.977272676351,0.977252347944,0.977232010555,0.977211664184,0.97719130883,0.977170944494,0.977150571176,0.977130188876,0.977109797595,0.977089397332,0.977068988088,0.977048569863,0.977028142658,0.977007706471,0.976987261305,0.976966807158,0.976946344031,0.976925871924,0.976905390837,0.976884900771,0.976864401725,0.976843893701,0.976823376697,0.976802850715,0.976782315754,0.976761771815,0.976741218897,0.976720657002,0.976700086129,0.976679506278,0.97665891745,0.976638319644,0.976617712862,0.976597097102,0.976576472366,0.976555838653,0.976535195965,0.9765145443,0.976493883659,0.976473214042,0.97645253545,0.976431847883,0.97641115134,0.976390445822,0.97636973133,0.976349007863,0.976328275422,0.976307534006,0.976286783617,0.976266024253,0.976245255916,0.976224478606,0.976203692322,0.976182897066,0.976162092836,0.976141279634,0.976120457459,0.976099626312,0.976078786193,0.976057937102,0.976037079039,0.976016212005,0.975995335999,0.975974451022,0.975953557075,0.975932654156,0.975911742267,0.975890821408,0.975869891578,0.975848952779,0.975828005009,0.975807048271,0.975786082562,0.975765107885,0.975744124238,0.975723131623,0.975702130039,0.975681119486,0.975660099965,0.975639071476,0.97561803402,0.975596987595,0.975575932204,0.975554867844,0.975533794518,0.975512712225,0.975491620965,0.975470520739,0.975449411546,0.975428293388,0.975407166263,0.975386030173,0.975364885117,0.975343731095,0.975322568109,0.975301396158,0.975280215241,0.975259025361,0.975237826516,0.975216618706,0.975195401933,0.975174176196,0.975152941495,0.975131697831,0.975110445204,0.975089183614,0.975067913061,0.975046633545,0.975025345067,0.975004047627,0.974982741224,0.97496142586,0.974940101534,0.974918768247,0.974897425999,0.974876074789,0.974854714619,0.974833345488,0.974811967396,0.974790580344,0.974769184333,0.974747779361,0.974726365429,0.974704942539,0.974683510689,0.974662069879,0.974640620111,0.974619161384,0.974597693699,0.974576217056,0.974554731454,0.974533236894,0.974511733377,0.974490220902,0.97446869947,0.974447169081,0.974425629735,0.974404081432,0.974382524173,0.974360957957,0.974339382786,0.974317798658,0.974296205575,0.974274603536,0.974252992541,0.974231372592,0.974209743688,0.974188105829,0.974166459015,0.974144803247,0.974123138525,0.97410146485,0.97407978222,0.974058090637,0.9740363901,0.974014680611,0.973992962168,0.973971234773,0.973949498425,0.973927753125,0.973905998872,0.973884235668,0.973862463512,0.973840682405,0.973818892346,0.973797093336,0.973775285375,0.973753468463,0.973731642601,0.973709807788,0.973687964026,0.973666111313,0.973644249651,0.973622379039,0.973600499478,0.973578610967,0.973556713508,0.9735348071,0.973512891744,0.973490967439,0.973469034186,0.973447091985,0.973425140837,0.973403180741,0.973381211697,0.973359233707,0.973337246769,0.973315250885,0.973293246055,0.973271232278,0.973249209555,0.973227177886,0.973205137271,0.973183087711,0.973161029206,0.973138961755,0.97311688536,0.97309480002,0.973072705735,0.973050602507,0.973028490334,0.973006369217,0.972984239157,0.972962100153,0.972939952206,0.972917795315,0.972895629482,0.972873454707,0.972851270989,0.972829078328,0.972806876726,0.972784666182,0.972762446696,0.972740218268,0.9727179809,0.97269573459,0.97267347934,0.972651215149,0.972628942018,0.972606659946,0.972584368935,0.972562068983,0.972539760093,0.972517442262,0.972495115493,0.972472779784,0.972450435137,0.972428081552,0.972405719027,0.972383347565,0.972360967165,0.972338577827,0.972316179552,0.972293772339,0.972271356189,0.972248931102,0.972226497079,0.972204054119,0.972181602223,0.97215914139,0.972136671622,0.972114192918,0.972091705279,0.972069208704,0.972046703195,0.97202418875,0.972001665371,0.971979133057,0.97195659181,0.971934041628,0.971911482512,0.971888914463,0.97186633748,0.971843751564,0.971821156716,0.971798552934,0.97177594022,0.971753318574,0.971730687995,0.971708048484,0.971685400042,0.971662742668,0.971640076363,0.971617401127,0.97159471696,0.971572023862,0.971549321833,0.971526610875,0.971503890986,0.971481162168,0.97145842442,0.971435677742,0.971412922135,0.971390157599,0.971367384135,0.971344601741,0.97132181042,0.97129901017,0.971276200992,0.971253382887,0.971230555853,0.971207719893,0.971184875005,0.971162021191,0.97113915845,0.971116286782,0.971093406188,0.971070516668,0.971047618222,0.97102471085,0.971001794553,0.970978869331,0.970955935184,0.970932992111,0.970910040115,0.970887079193,0.970864109348,0.970841130579,0.970818142886,0.970795146269,0.970772140729,0.970749126266,0.97072610288,0.970703070571,0.97068002934,0.970656979186,0.970633920111,0.970610852113,0.970587775194,0.970564689354,0.970541594592,0.970518490909,0.970495378306,0.970472256781,0.970449126337,0.970425986972,0.970402838688,0.970379681483,0.970356515359,0.970333340316,0.970310156354,0.970286963473,0.970263761673,0.970240550955,0.970217331318,0.970194102763,0.970170865291,0.970147618901,0.970124363594,0.970101099369,0.970077826228,0.970054544169,0.970031253195,0.970007953303,0.969984644496,0.969961326773,0.969938000134,0.96991466458,0.969891320111,0.969867966726,0.969844604427,0.969821233213,0.969797853084,0.969774464042,0.969751066085,0.969727659215,0.969704243431,0.969680818734,0.969657385124,0.969633942601,0.969610491166,0.969587030817,0.969563561557,0.969540083385,0.9695165963,0.969493100305,0.969469595397,0.969446081579,0.96942255885,0.96939902721,0.969375486659,0.969351937199,0.969328378828,0.969304811547,0.969281235357,0.969257650257,0.969234056248,0.96921045333,0.969186841503,0.969163220768,0.969139591124,0.969115952572,0.969092305113,0.969068648745,0.96904498347,0.969021309288,0.968997626199,0.968973934203,0.9689502333,0.968926523492,0.968902804776,0.968879077155,0.968855340629,0.968831595196,0.968807840859,0.968784077616,0.968760305469,0.968736524416,0.96871273446,0.968688935599,0.968665127834,0.968641311166,0.968617485594,0.968593651118,0.96856980774,0.968545955458,0.968522094274,0.968498224188,0.968474345199,0.968450457308,0.968426560516,0.968402654822,0.968378740226,0.96835481673,0.968330884332,0.968306943034,0.968282992836,0.968259033737,0.968235065738,0.968211088839,0.968187103041,0.968163108343,0.968139104746,0.968115092251,0.968091070856,0.968067040563,0.968043001372,0.968018953283,0.967994896296,0.967970830411,0.967946755629,0.96792267195,0.967898579374,0.967874477901,0.967850367531,0.967826248266,0.967802120104,0.967777983047,0.967753837093,0.967729682245,0.967705518501,0.967681345863,0.967657164329,0.967632973902,0.967608774579,0.967584566363,0.967560349253,0.96753612325,0.967511888353,0.967487644563,0.96746339188,0.967439130304,0.967414859835,0.967390580475,0.967366292222,0.967341995078,0.967317689042,0.967293374114,0.967269050296,0.967244717586,0.967220375986,0.967196025496,0.967171666115,0.967147297844,0.967122920683,0.967098534633,0.967074139693,0.967049735864,0.967025323146,0.96700090154,0.966976471045,0.966952031662,0.966927583391,0.966903126232,0.966878660185,0.966854185251,0.96682970143,0.966805208722,0.966780707128,0.966756196647,0.966731677279,0.966707149026,0.966682611887,0.966658065863,0.966633510953,0.966608947158,0.966584374478,0.966559792914,0.966535202465,0.966510603132,0.966485994915,0.966461377814,0.96643675183,0.966412116963,0.966387473212,0.966362820579,0.966338159063,0.966313488665,0.966288809384,0.966264121222,0.966239424178,0.966214718252,0.966190003445,0.966165279758,0.966140547189,0.96611580574,0.96609105541,0.966066296201,0.966041528111,0.966016751142,0.965991965294,0.965967170566,0.965942366959,0.965917554474,0.96589273311,0.965867902868,0.965843063748,0.96581821575,0.965793358874,0.965768493121,0.965743618491,0.965718734984,0.9656938426,0.96566894134,0.965644031204,0.965619112191,0.965594184303,0.965569247539,0.9655443019,0.965519347386,0.965494383997,0.965469411734,0.965444430596,0.965419440584,0.965394441698,0.965369433938,0.965344417305,0.965319391798,0.965294357419,0.965269314167,0.965244262042,0.965219201045,0.965194131176,0.965169052435,0.965143964822,0.965118868338,0.965093762983,0.965068648757,0.96504352566,0.965018393692,0.964993252855,0.964968103147,0.96494294457,0.964917777123,0.964892600807,0.964867415622,0.964842221567,0.964817018645,0.964791806853,0.964766586194,0.964741356667,0.964716118272,0.964690871009,0.96466561488,0.964640349883,0.96461507602,0.96458979329,0.964564501694,0.964539201231,0.964513891903,0.964488573709,0.96446324665,0.964437910726,0.964412565937,0.964387212283,0.964361849765,0.964336478382,0.964311098136,0.964285709025,0.964260311052,0.964234904215,0.964209488515,0.964184063952,0.964158630526,0.964133188239,0.964107737089,0.964082277077,0.964056808204,0.964031330469,0.964005843873,0.963980348416,0.963954844098,0.96392933092,0.963903808882,0.963878277984,0.963852738226,0.963827189608,0.963801632131,0.963776065795,0.963750490601,0.963724906547,0.963699313636,0.963673711866,0.963648101238,0.963622481753,0.96359685341,0.96357121621,0.963545570153,0.96351991524,0.96349425147,0.963468578844,0.963442897361,0.963417207023,0.96339150783,0.963365799781,0.963340082877,0.963314357118,0.963288622505,0.963262879038,0.963237126716,0.96321136554,0.963185595511,0.963159816628,0.963134028893,0.963108232304,0.963082426863,0.963056612569,0.963030789423,0.963004957425,0.962979116575,0.962953266874,0.962927408321,0.962901540918,0.962875664663,0.962849779559,0.962823885603,0.962797982798,0.962772071143,0.962746150638,0.962720221284,0.962694283081,0.962668336029,0.962642380129,0.96261641538,0.962590441782,0.962564459337,0.962538468044,0.962512467904,0.962486458917,0.962460441082,0.962434414401,0.962408378873,0.962382334499,0.962356281279,0.962330219214,0.962304148302,0.962278068546,0.962251979944,0.962225882498,0.962199776207,0.962173661072,0.962147537092,0.962121404269,0.962095262602,0.962069112092,0.962042952739,0.962016784542,0.961990607503,0.961964421622,0.961938226899,0.961912023333,0.961885810926,0.961859589677,0.961833359588,0.961807120657,0.961780872885,0.961754616274,0.961728350821,0.961702076529,0.961675793397,0.961649501426,0.961623200615,0.961596890965,0.961570572477,0.961544245149,0.961517908984,0.961491563981,0.961465210139,0.96143884746,0.961412475944,0.961386095591,0.961359706401,0.961333308374,0.961306901511,0.961280485811,0.961254061276,0.961227627905,0.961201185699,0.961174734658,0.961148274781,0.96112180607,0.961095328525,0.961068842146,0.961042346932,0.961015842885,0.960989330004,0.96096280829,0.960936277743,0.960909738364,0.960883190152,0.960856633108,0.960830067231,0.960803492523,0.960776908984,0.960750316613,0.960723715411,0.960697105379,0.960670486516,0.960643858823,0.960617222299,0.960590576946,0.960563922763,0.960537259752,0.96051058791,0.960483907241,0.960457217742,0.960430519416,0.960403812261,0.960377096278,0.960350371468,0.96032363783,0.960296895366,0.960270144074,0.960243383956,0.960216615012,0.960189837241,0.960163050645,0.960136255223,0.960109450976,0.960082637903,0.960055816006,0.960028985284,0.960002145738,0.959975297367,0.959948440173,0.959921574155,0.959894699313,0.959867815649,0.959840923161,0.959814021851,0.959787111719,0.959760192764,0.959733264988,0.959706328389,0.95967938297,0.959652428729,0.959625465667,0.959598493785,0.959571513082,0.959544523559,0.959517525216,0.959490518053,0.959463502071,0.95943647727,0.95940944365,0.959382401211,0.959355349954,0.959328289878,0.959301220985,0.959274143274,0.959247056745,0.9592199614,0.959192857237,0.959165744258,0.959138622462,0.95911149185,0.959084352422,0.959057204178,0.959030047119,0.959002881245,0.958975706556,0.958948523052,0.958921330733,0.958894129601,0.958866919654,0.958839700894,0.95881247332,0.958785236933,0.958757991733,0.958730737721,0.958703474896,0.958676203259,0.95864892281,0.958621633549,0.958594335476,0.958567028593,0.958539712899,0.958512388394,0.958485055078,0.958457712952,0.958430362017,0.958403002271,0.958375633716,0.958348256352,0.95832087018,0.958293475198,0.958266071408,0.95823865881,0.958211237404,0.95818380719,0.958156368169,0.95812892034,0.958101463705,0.958073998263,0.958046524015,0.95801904096,0.9579915491,0.957964048434,0.957936538962,0.957909020686,0.957881493604,0.957853957718,0.957826413028,0.957798859533,0.957771297234,0.957743726132,0.957716146227,0.957688557518,0.957660960006,0.957633353692,0.957605738576,0.957578114657,0.957550481937,0.957522840414,0.957495190091,0.957467530967,0.957439863041,0.957412186315,0.957384500789,0.957356806463,0.957329103336,0.957301391411,0.957273670686,0.957245941162,0.957218202839,0.957190455717,0.957162699798,0.95713493508,0.957107161564,0.957079379251,0.957051588141,0.957023788234,0.95699597953,0.956968162029,0.956940335732,0.956912500639,0.956884656751,0.956856804067,0.956828942588,0.956801072313,0.956773193244,0.956745305381,0.956717408723,0.956689503272,0.956661589027,0.956633665988,0.956605734156,0.956577793531,0.956549844114,0.956521885904,0.956493918902,0.956465943109,0.956437958523,0.956409965146,0.956381962978,0.95635395202,0.95632593227,0.95629790373,0.956269866401,0.956241820281,0.956213765372,0.956185701673,0.956157629186,0.956129547909,0.956101457844,0.956073358991,0.95604525135,0.956017134921,0.955989009705,0.955960875701,0.95593273291,0.955904581333,0.955876420969,0.955848251819,0.955820073883,0.955791887161,0.955763691654,0.955735487361,0.955707274284,0.955679052422,0.955650821776,0.955622582345,0.955594334131,0.955566077133,0.955537811351,0.955509536787,0.95548125344,0.95545296131,0.955424660398,0.955396350703,0.955368032227,0.95533970497,0.955311368931,0.955283024111,0.955254670511,0.955226308129,0.955197936968,0.955169557027,0.955141168306,0.955112770805,0.955084364526,0.955055949467,0.95502752563,0.954999093014,0.95497065162,0.954942201448,0.954913742499,0.954885274772,0.954856798269,0.954828312988,0.954799818931,0.954771316097,0.954742804488,0.954714284102,0.954685754941,0.954657217005,0.954628670294,0.954600114808,0.954571550548,0.954542977513,0.954514395704,0.954485805122,0.954457205767,0.954428597638,0.954399980736,0.954371355061,0.954342720615,0.954314077396,0.954285425405,0.954256764643,0.954228095109,0.954199416804,0.954170729729,0.954142033883,0.954113329267,0.95408461588,0.954055893724,0.954027162799,0.953998423104,0.95396967464,0.953940917408,0.953912151407,0.953883376638,0.953854593101,0.953825800797,0.953796999725,0.953768189886,0.95373937128,0.953710543908,0.953681707769,0.953652862865,0.953624009194,0.953595146758,0.953566275557,0.953537395591,0.95350850686,0.953479609365,0.953450703105,0.953421788082,0.953392864295,0.953363931744,0.953334990431,0.953306040354,0.953277081515,0.953248113914,0.95321913755,0.953190152425,0.953161158539,0.953132155891,0.953103144482,0.953074124312,0.953045095382,0.953016057692,0.952987011242,0.952957956032,0.952928892063,0.952899819334,0.952870737847,0.952841647601,0.952812548597,0.952783440835,0.952754324315,0.952725199038,0.952696065003,0.952666922211,0.952637770663,0.952608610358,0.952579441297,0.95255026348,0.952521076908,0.95249188158,0.952462677497,0.952433464659,0.952404243066,0.95237501272,0.952345773619,0.952316525765,0.952287269157,0.952258003795,0.952228729681,0.952199446814,0.952170155195,0.952140854824,0.952111545701,0.952082227826,0.9520529012,0.952023565822,0.951994221694,0.951964868816,0.951935507187,0.951906136808,0.951876757679,0.951847369801,0.951817973174,0.951788567798,0.951759153673,0.9517297308,0.951700299179,0.95167085881,0.951641409694,0.95161195183,0.951582485219,0.951553009861,0.951523525757,0.951494032907,0.951464531311,0.951435020969,0.951405501882,0.951375974049,0.951346437472,0.95131689215,0.951287338084,0.951257775274,0.95122820372,0.951198623423,0.951169034383,0.951139436599,0.951109830073,0.951080214804,0.951050590794,0.951020958041,0.950991316547,0.950961666312,0.950932007335,0.950902339618,0.95087266316,0.950842977962,0.950813284024,0.950783581347,0.95075386993,0.950724149774,0.950694420879,0.950664683245,0.950634936874,0.950605181764,0.950575417916,0.950545645331,0.950515864009,0.950486073949,0.950456275154,0.950426467621,0.950396651353,0.950366826349,0.950336992609,0.950307150134,0.950277298924,0.950247438979,0.950217570299,0.950187692886,0.950157806738,0.950127911857,0.950098008243,0.950068095895,0.950038174815,0.950008245002,0.949978306457,0.949948359179,0.94991840317,0.94988843843,0.949858464959,0.949828482756,0.949798491823,0.94976849216,0.949738483766,0.949708466643,0.94967844079,0.949648406208,0.949618362897,0.949588310857,0.949558250089,0.949528180593,0.949498102369,0.949468015417,0.949437919738,0.949407815332,0.9493777022,0.94934758034,0.949317449755,0.949287310444,0.949257162406,0.949227005644,0.949196840157,0.949166665944,0.949136483008,0.949106291347,0.949076090961,0.949045881853,0.949015664021,0.948985437465,0.948955202187,0.948924958186,0.948894705463,0.948864444018,0.948834173851,0.948803894963,0.948773607353,0.948743311023,0.948713005971,0.9486826922,0.948652369708,0.948622038497,0.948591698566,0.948561349916,0.948530992547,0.948500626459,0.948470251652,0.948439868128,0.948409475886,0.948379074926,0.948348665249,0.948318246855,0.948287819744,0.948257383916,0.948226939373,0.948196486113,0.948166024138,0.948135553448,0.948105074043,0.948074585922,0.948044089088,0.948013583539,0.947983069276,0.947952546299,0.947922014609,0.947891474206,0.94786092509,0.947830367262,0.947799800721,0.947769225469,0.947738641505,0.947708048829,0.947677447442,0.947646837344,0.947616218536,0.947585591018,0.947554954789,0.947524309851,0.947493656203,0.947462993846,0.947432322781,0.947401643006,0.947370954524,0.947340257333,0.947309551435,0.947278836829,0.947248113516,0.947217381496,0.947186640769,0.947155891336,0.947125133198,0.947094366353,0.947063590803,0.947032806547,0.947002013587,0.946971211922,0.946940401552,0.946909582479,0.946878754702,0.946847918221,0.946817073037,0.94678621915,0.946755356561,0.946724485269,0.946693605275,0.946662716579,0.946631819182,0.946600913083,0.946569998284,0.946539074784,0.946508142583,0.946477201682,0.946446252082,0.946415293782,0.946384326783,0.946353351084,0.946322366688,0.946291373592,0.946260371799,0.946229361308,0.946198342119,0.946167314233,0.94613627765,0.94610523237,0.946074178394,0.946043115722,0.946012044354,0.945980964291,0.945949875532,0.945918778078,0.94588767193,0.945856557087,0.94582543355,0.945794301319,0.945763160395,0.945732010777,0.945700852467,0.945669685464,0.945638509768,0.945607325381,0.945576132301,0.94554493053,0.945513720068,0.945482500914,0.945451273071,0.945420036536,0.945388791312,0.945357537398,0.945326274794,0.945295003501,0.945263723519,0.945232434848,0.945201137489,0.945169831442,0.945138516708,0.945107193285,0.945075861176,0.945044520379,0.945013170896,0.944981812727,0.944950445871,0.94491907033,0.944887686103,0.944856293191,0.944824891594,0.944793481312,0.944762062346,0.944730634696,0.944699198362,0.944667753345,0.944636299645,0.944604837261,0.944573366196,0.944541886447,0.944510398017,0.944478900905,0.944447395112,0.944415880637,0.944384357482,0.944352825646,0.944321285129,0.944289735933,0.944258178057,0.944226611501,0.944195036267,0.944163452353,0.944131859761,0.944100258491,0.944068648543,0.944037029917,0.944005402614,0.943973766634,0.943942121976,0.943910468643,0.943878806633,0.943847135947,0.943815456586,0.943783768549,0.943752071837,0.94372036645,0.943688652389,0.943656929654,0.943625198245,0.943593458162,0.943561709406,0.943529951977,0.943498185875,0.943466411101,0.943434627654,0.943402835536,0.943371034746,0.943339225285,0.943307407153,0.94327558035,0.943243744877,0.943211900734,0.943180047921,0.943148186438,0.943116316287,0.943084437466,0.943052549977,0.943020653819,0.942988748994,0.9429568355,0.942924913339,0.942892982511,0.942861043016,0.942829094855,0.942797138027,0.942765172533,0.942733198374,0.942701215549,0.942669224059,0.942637223904,0.942605215085,0.942573197601,0.942541171454,0.942509136643,0.942477093168,0.942445041031,0.942412980231,0.942380910768,0.942348832643,0.942316745857,0.942284650408,0.942252546299,0.942220433528,0.942188312097,0.942156182005,0.942124043254,0.942091895842,0.942059739771,0.942027575041,0.941995401652,0.941963219604,0.941931028898,0.941898829534,0.941866621512,0.941834404832,0.941802179496,0.941769945503,0.941737702853,0.941705451547,0.941673191585,0.941640922967,0.941608645694,0.941576359766,0.941544065183,0.941511761946,0.941479450054,0.941447129509,0.94141480031,0.941382462457,0.941350115952,0.941317760794,0.941285396984,0.941253024521,0.941220643407,0.941188253642,0.941155855225,0.941123448157,0.941091032438,0.94105860807,0.941026175051,0.940993733382,0.940961283065,0.940928824098,0.940896356482,0.940863880217,0.940831395305,0.940798901744,0.940766399536,0.940733888681,0.940701369179,0.940668841029,0.940636304234,0.940603758792,0.940571204705,0.940538641972,0.940506070593,0.94047349057,0.940440901902,0.94040830459,0.940375698634,0.940343084034,0.94031046079,0.940277828904,0.940245188375,0.940212539203,0.940179881389,0.940147214933,0.940114539835,0.940081856096,0.940049163716,0.940016462695,0.939983753034,0.939951034733,0.939918307792,0.939885572211,0.939852827991,0.939820075132,0.939787313635,0.939754543499,0.939721764725,0.939688977314,0.939656181265,0.939623376579,0.939590563256,0.939557741296,0.939524910701,0.939492071469,0.939459223602,0.9394263671,0.939393501962,0.93936062819,0.939327745784,0.939294854743,0.939261955069,0.939229046761,0.93919612982,0.939163204246,0.939130270039,0.9390973272,0.939064375729,0.939031415627,0.938998446893,0.938965469528,0.938932483532,0.938899488906,0.938866485649,0.938833473763,0.938800453247,0.938767424102,0.938734386328,0.938701339926,0.938668284895,0.938635221236,0.938602148949,0.938569068035,0.938535978494,0.938502880325,0.938469773531,0.93843665811,0.938403534063,0.938370401391,0.938337260093,0.93830411017,0.938270951623,0.938237784451,0.938204608655,0.938171424236,0.938138231193,0.938105029527,0.938071819238,0.938038600326,0.938005372792,0.937972136636,0.937938891859,0.93790563846,0.93787237644,0.937839105799,0.937805826538,0.937772538657,0.937739242156,0.937705937036,0.937672623297,0.937639300938,0.937605969961,0.937572630366,0.937539282152,0.937505925321,0.937472559873,0.937439185808,0.937405803126,0.937372411827,0.937339011913,0.937305603382,0.937272186236,0.937238760475,0.937205326099,0.937171883108,0.937138431503,0.937104971284,0.937071502452,0.937038025006,0.937004538947,0.936971044275,0.936937540991,0.936904029095,0.936870508586,0.936836979467,0.936803441736,0.936769895394,0.936736340442,0.936702776879,0.936669204707,0.936635623924,0.936602034533,0.936568436532,0.936534829923,0.936501214705,0.936467590879,0.936433958445,0.936400317404,0.936366667756,0.9363330095,0.936299342638,0.93626566717,0.936231983096,0.936198290416,0.936164589131,0.936130879241,0.936097160746,0.936063433647,0.936029697944,0.935995953637,0.935962200726,0.935928439213,0.935894669096,0.935860890377,0.935827103055,0.935793307132,0.935759502607,0.935725689481,0.935691867754,0.935658037426,0.935624198498,0.93559035097,0.935556494841,0.935522630114,0.935488756787,0.935454874862,0.935420984338,0.935387085216,0.935353177496,0.935319261179,0.935285336264,0.935251402752,0.935217460644,0.935183509939,0.935149550638,0.935115582742,0.93508160625,0.935047621163,0.935013627482,0.934979625206,0.934945614336,0.934911594872,0.934877566814,0.934843530163,0.93480948492,0.934775431084,0.934741368655,0.934707297635,0.934673218023,0.93463912982,0.934605033025,0.93457092764,0.934536813665,0.9345026911,0.934468559945,0.9344344202,0.934400271866,0.934366114944,0.934331949433,0.934297775334,0.934263592646,0.934229401372,0.93419520151,0.934160993061,0.934126776026,0.934092550404,0.934058316197,0.934024073403,0.933989822025,0.933955562061,0.933921293513,0.93388701638,0.933852730663,0.933818436362,0.933784133478,0.933749822011,0.933715501961,0.933681173328,0.933646836113,0.933612490317,0.933578135938,0.933543772979,0.933509401438,0.933475021317,0.933440632616,0.933406235335,0.933371829474,0.933337415033,0.933302992014,0.933268560416,0.933234120239,0.933199671485,0.933165214152,0.933130748242,0.933096273755,0.933061790692,0.933027299051,0.932992798835,0.932958290042,0.932923772674,0.932889246731,0.932854712213,0.932820169121,0.932785617454,0.932751057213,0.932716488398,0.93268191101,0.932647325049,0.932612730516,0.93257812741,0.932543515732,0.932508895482,0.932474266661,0.932439629268,0.932404983305,0.932370328772,0.932335665668,0.932300993995,0.932266313752,0.932231624939,0.932196927558,0.932162221609,0.932127507091,0.932092784005,0.932058052351,0.932023312131,0.931988563343,0.931953805989,0.931919040068,0.931884265582,0.931849482529,0.931814690912,0.931779890729,0.931745081982,0.93171026467,0.931675438794,0.931640604354,0.931605761351,0.931570909785,0.931536049656,0.931501180965,0.931466303711,0.931431417895,0.931396523518,0.93136162058,0.931326709081,0.931291789022,0.931256860402,0.931221923222,0.931186977483,0.931152023184,0.931117060326,0.93108208891,0.931047108936,0.931012120403,0.930977123313,0.930942117665,0.930907103461,0.9308720807,0.930837049382,0.930802009508,0.930766961079,0.930731904094,0.930696838554,0.93066176446,0.930626681811,0.930591590607,0.93055649085,0.93052138254,0.930486265676,0.93045114026,0.930416006291,0.93038086377,0.930345712696,0.930310553072,0.930275384896,0.930240208169,0.930205022892,0.930169829065,0.930134626687,0.93009941576,0.930064196284,0.930028968259,0.929993731685,0.929958486563,0.929923232893,0.929887970675,0.92985269991,0.929817420598,0.929782132739,0.929746836334,0.929711531382,0.929676217885,0.929640895843,0.929605565256,0.929570226124,0.929534878447,0.929499522227,0.929464157462,0.929428784155,0.929393402304,0.92935801191,0.929322612974,0.929287205496,0.929251789475,0.929216364914,0.929180931811,0.929145490168,0.929110039984,0.929074581259,0.929039113995,0.929003638192,0.928968153849,0.928932660967,0.928897159547,0.928861649588,0.928826131092,0.928790604058,0.928755068487,0.928719524379,0.928683971734,0.928648410553,0.928612840836,0.928577262584,0.928541675796,0.928506080473,0.928470476616,0.928434864224,0.928399243299,0.928363613839,0.928327975847,0.928292329321,0.928256674263,0.928221010672,0.92818533855,0.928149657895,0.92811396871,0.928078270993,0.928042564746,0.928006849968,0.92797112666,0.927935394823,0.927899654456,0.92786390556,0.927828148135,0.927792382182,0.927756607701,0.927720824692,0.927685033156,0.927649233093,0.927613424502,0.927577607386,0.927541781743,0.927505947575,0.927470104881,0.927434253662,0.927398393919,0.92736252565,0.927326648858,0.927290763542,0.927254869703,0.92721896734,0.927183056455,0.927147137047,0.927111209117,0.927075272665,0.927039327691,0.927003374197,0.926967412182,0.926931441646,0.92689546259,0.926859475014,0.926823478919,0.926787474305,0.926751461171,0.92671543952,0.92667940935,0.926643370662,0.926607323457,0.926571267734,0.926535203495,0.926499130739,0.926463049467,0.926426959679,0.926390861376,0.926354754558,0.926318639224,0.926282515376,0.926246383014,0.926210242138,0.926174092749,0.926137934846,0.926101768431,0.926065593503,0.926029410062,0.92599321811,0.925957017647,0.925920808672,0.925884591186,0.92584836519,0.925812130683,0.925775887667,0.925739636141,0.925703376106,0.925667107562,0.92563083051,0.925594544949,0.925558250881,0.925521948305,0.925485637221,0.925449317631,0.925412989535,0.925376652932,0.925340307823,0.925303954209,0.92526759209,0.925231221465,0.925194842336,0.925158454703,0.925122058567,0.925085653926,0.925049240783,0.925012819136,0.924976388987,0.924939950336,0.924903503183,0.924867047529,0.924830583373,0.924794110717,0.92475762956,0.924721139902,0.924684641745,0.924648135089,0.924611619933,0.924575096279,0.924538564125,0.924502023474,0.924465474325,0.924428916679,0.924392350535,0.924355775895,0.924319192758,0.924282601125,0.924246000996,0.924209392371,0.924172775252,0.924136149637,0.924099515529,0.924062872926,0.924026221829,0.923989562239,0.923952894156,0.92391621758,0.923879532511,0.923842838951,0.923806136898,0.923769426355,0.92373270732,0.923695979794,0.923659243778,0.923622499272,0.923585746276,0.923548984791,0.923512214817,0.923475436354,0.923438649402,0.923401853963,0.923365050036,0.923328237621,0.92329141672,0.923254587331,0.923217749457,0.923180903096,0.92314404825,0.923107184918,0.923070313101,0.9230334328,0.922996544014,0.922959646745,0.922922740991,0.922885826755,0.922848904035,0.922811972833,0.922775033148,0.922738084982,0.922701128334,0.922664163205,0.922627189594,0.922590207503,0.922553216932,0.922516217881,0.922479210351,0.922442194341,0.922405169852,0.922368136885,0.922331095439,0.922294045516,0.922256987115,0.922219920237,0.922182844882,0.922145761051,0.922108668743,0.92207156796,0.922034458701,0.921997340967,0.921960214758,0.921923080075,0.921885936918,0.921848785286,0.921811625182,0.921774456604,0.921737279554,0.921700094031,0.921662900036,0.921625697569,0.921588486631,0.921551267222,0.921514039342,0.921476802992,0.921439558172,0.921402304882,0.921365043123,0.921327772894,0.921290494198,0.921253207033,0.921215911399,0.921178607299,0.921141294731,0.921103973696,0.921066644194,0.921029306227,0.920991959793,0.920954604894,0.920917241529,0.9208798697,0.920842489406,0.920805100648,0.920767703426,0.920730297741,0.920692883592,0.920655460981,0.920618029907,0.920580590371,0.920543142373,0.920505685914,0.920468220994,0.920430747613,0.920393265772,0.92035577547,0.920318276709,0.920280769489,0.920243253809,0.920205729671,0.920168197074,0.92013065602,0.920093106508,0.920055548538,0.920017982112,0.919980407229,0.919942823889,0.919905232094,0.919867631843,0.919830023137,0.919792405976,0.919754780361,0.919717146291,0.919679503768,0.919641852791,0.919604193361,0.919566525478,0.919528849142,0.919491164355,0.919453471116,0.919415769425,0.919378059283,0.919340340691,0.919302613648,0.919264878155,0.919227134212,0.919189381821,0.91915162098,0.91911385169,0.919076073952,0.919038287766,0.919000493133,0.918962690052,0.918924878525,0.918887058551,0.91884923013,0.918811393264,0.918773547952,0.918735694196,0.918697831994,0.918659961348,0.918622082257,0.918584194723,0.918546298746,0.918508394325,0.918470481462,0.918432560156,0.918394630408,0.918356692219,0.918318745588,0.918280790517,0.918242827004,0.918204855051,0.918166874659,0.918128885827,0.918090888555,0.918052882845,0.918014868696,0.917976846109,0.917938815084,0.917900775621,0.917862727722,0.917824671385,0.917786606613,0.917748533404,0.917710451759,0.917672361679,0.917634263164,0.917596156214,0.91755804083,0.917519917012,0.91748178476,0.917443644075,0.917405494957,0.917367337406,0.917329171423,0.917290997008,0.917252814162,0.917214622885,0.917176423176,0.917138215037,0.917099998468,0.91706177347,0.917023540041,0.916985298184,0.916947047898,0.916908789184,0.916870522041,0.916832246471,0.916793962474,0.916755670049,0.916717369198,0.916679059921,0.916640742218,0.916602416089,0.916564081535,0.916525738556,0.916487387153,0.916449027325,0.916410659074,0.916372282399,0.916333897301,0.916295503781,0.916257101838,0.916218691473,0.916180272686,0.916141845478,0.916103409849,0.916064965799,0.916026513329,0.91598805244,0.91594958313,0.915911105402,0.915872619254,0.915834124688,0.915795621704,0.915757110302,0.915718590483,0.915680062246,0.915641525593,0.915602980523,0.915564427038,0.915525865136,0.91548729482,0.915448716088,0.915410128942,0.915371533382,0.915332929407,0.915294317019,0.915255696218,0.915217067005,0.915178429378,0.91513978334,0.915101128889,0.915062466028,0.915023794755,0.914985115072,0.914946426978,0.914907730474,0.914869025561,0.914830312238,0.914791590506,0.914752860366,0.914714121818,0.914675374862,0.914636619498,0.914597855727,0.914559083549,0.914520302965,0.914481513975,0.914442716579,0.914403910778,0.914365096571,0.914326273961,0.914287442945,0.914248603526,0.914209755704,0.914170899478,0.914132034849,0.914093161817,0.914054280384,0.914015390549,0.913976492312,0.913937585674,0.913898670636,0.913859747197,0.913820815358,0.91378187512,0.913742926482,0.913703969445,0.91366500401,0.913626030177,0.913587047945,0.913548057316,0.91350905829,0.913470050868,0.913431035049,0.913392010833,0.913352978222,0.913313937216,0.913274887815,0.913235830019,0.913196763829,0.913157689245,0.913118606267,0.913079514896,0.913040415133,0.913001306977,0.912962190428,0.912923065488,0.912883932157,0.912844790435,0.912805640322,0.912766481818,0.912727314925,0.912688139642,0.91264895597,0.912609763909,0.912570563459,0.912531354622,0.912492137396,0.912452911783,0.912413677783,0.912374435396,0.912335184623,0.912295925464,0.91225665792,0.91221738199,0.912178097675,0.912138804975,0.912099503892,0.912060194424,0.912020876574,0.91198155034,0.911942215723,0.911902872724,0.911863521343,0.91182416158,0.911784793436,0.911745416911,0.911706032005,0.91166663872,0.911627237054,0.911587827009,0.911548408585,0.911508981782,0.911469546601,0.911430103041,0.911390651104,0.91135119079,0.911311722098,0.911272245031,0.911232759586,0.911193265767,0.911153763571,0.911114253001,0.911074734055,0.911035206735,0.910995671042,0.910956126974,0.910916574533,0.91087701372,0.910837444533,0.910797866975,0.910758281044,0.910718686743,0.91067908407,0.910639473026,0.910599853612,0.910560225827,0.910520589673,0.91048094515,0.910441292258,0.910401630997,0.910361961368,0.910322283372,0.910282597007,0.910242902276,0.910203199178,0.910163487713,0.910123767883,0.910084039686,0.910044303125,0.910004558198,0.909964804907,0.909925043252,0.909885273233,0.90984549485,0.909805708105,0.909765912996,0.909726109525,0.909686297693,0.909646477498,0.909606648943,0.909566812026,0.909526966749,0.909487113112,0.909447251114,0.909407380758,0.909367502042,0.909327614968,0.909287719535,0.909247815744,0.909207903596,0.909167983091,0.909128054228,0.909088117009,0.909048171434,0.909008217503,0.908968255217,0.908928284576,0.90888830558,0.908848318229,0.908808322525,0.908768318467,0.908728306056,0.908688285293,0.908648256176,0.908608218708,0.908568172888,0.908528118716,0.908488056194,0.908447985321,0.908407906097,0.908367818524,0.908327722601,0.908287618329,0.908247505709,0.908207384739,0.908167255422,0.908127117757,0.908086971745,0.908046817386,0.90800665468,0.907966483629,0.907926304231,0.907886116488,0.907845920399,0.907805715966,0.907765503189,0.907725282068,0.907685052603,0.907644814795,0.907604568643,0.90756431415,0.907524051314,0.907483780137,0.907443500618,0.907403212758,0.907362916557,0.907322612016,0.907282299136,0.907241977915,0.907201648356,0.907161310458,0.907120964221,0.907080609646,0.907040246734,0.906999875484,0.906959495897,0.906919107974,0.906878711714,0.906838307119,0.906797894188,0.906757472922,0.906717043321,0.906676605386,0.906636159117,0.906595704515,0.906555241579,0.90651477031,0.906474290709,0.906433802776,0.906393306511,0.906352801915,0.906312288987,0.906271767729,0.906231238141,0.906190700223,0.906150153975,0.906109599398,0.906069036493,0.906028465259,0.905987885697,0.905947297807,0.90590670159,0.905866097047,0.905825484176,0.90578486298,0.905744233458,0.90570359561,0.905662949437,0.90562229494,0.905581632118,0.905540960973,0.905500281504,0.905459593711,0.905418897596,0.905378193159,0.905337480399,0.905296759318,0.905256029916,0.905215292192,0.905174546148,0.905133791784,0.9050930291,0.905052258097,0.905011478775,0.904970691134,0.904929895174,0.904889090897,0.904848278302,0.90480745739,0.904766628162,0.904725790616,0.904684944755,0.904644090578,0.904603228086,0.904562357279,0.904521478157,0.904480590721,0.904439694972,0.904398790909,0.904357878533,0.904316957844,0.904276028843,0.90423509153,0.904194145906,0.90415319197,0.904112229724,0.904071259167,0.9040302803,0.903989293123,0.903948297638,0.903907293843,0.90386628174,0.903825261328,0.903784232609,0.903743195583,0.903702150249,0.903661096609,0.903620034663,0.903578964411,0.903537885853,0.90349679899,0.903455703822,0.90341460035,0.903373488574,0.903332368495,0.903291240112,0.903250103426,0.903208958438,0.903167805147,0.903126643555,0.903085473662,0.903044295468,0.903003108973,0.902961914177,0.902920711082,0.902879499688,0.902838279995,0.902797052002,0.902755815712,0.902714571123,0.902673318237,0.902632057054,0.902590787574,0.902549509798,0.902508223725,0.902466929357,0.902425626694,0.902384315735,0.902342996482,0.902301668935,0.902260333095,0.902218988961,0.902177636533,0.902136275814,0.902094906802,0.902053529498,0.902012143902,0.901970750016,0.901929347839,0.901887937371,0.901846518614,0.901805091567,0.901763656231,0.901722212606,0.901680760692,0.90163930049,0.901597832001,0.901556355225,0.901514870161,0.901473376811,0.901431875175,0.901390365253,0.901348847046,0.901307320554,0.901265785777,0.901224242716,0.901182691371,0.901141131742,0.901099563831,0.901057987636,0.90101640316,0.900974810401,0.900933209361,0.90089160004,0.900849982438,0.900808356555,0.900766722392,0.90072507995,0.900683429229,0.900641770228,0.900600102949,0.900558427392,0.900516743558,0.900475051445,0.900433351056,0.900391642391,0.900349925449,0.900308200231,0.900266466738,0.90022472497,0.900182974927,0.90014121661,0.900099450019,0.900057675154,0.900015892016,0.899974100606,0.899932300923,0.899890492968,0.899848676742,0.899806852244,0.899765019475,0.899723178436,0.899681329127,0.899639471549,0.899597605701,0.899555731584,0.899513849198,0.899471958545,0.899430059624,0.899388152435,0.899346236979,0.899304313257,0.899262381269,0.899220441014,0.899178492495,0.89913653571,0.89909457066,0.899052597347,0.899010615769,0.898968625928,0.898926627824,0.898884621457,0.898842606827,0.898800583936,0.898758552783,0.898716513369,0.898674465694,0.898632409759,0.898590345563,0.898548273108,0.898506192394,0.898464103421,0.898422006189,0.898379900699,0.898337786952,0.898295664947,0.898253534685,0.898211396167,0.898169249393,0.898127094362,0.898084931077,0.898042759536,0.898000579741,0.897958391691,0.897916195388,0.897873990831,0.897831778021,0.897789556959,0.897747327644,0.897705090077,0.897662844259,0.89762059019,0.89757832787,0.897536057299,0.897493778479,0.897451491409,0.89740919609,0.897366892522,0.897324580705,0.897282260641,0.897239932329,0.89719759577,0.897155250964,0.897112897911,0.897070536613,0.897028167068,0.896985789279,0.896943403244,0.896901008965,0.896858606442,0.896816195676,0.896773776665,0.896731349412,0.896688913917,0.896646470179,0.896604018199,0.896561557978,0.896519089516,0.896476612813,0.89643412787,0.896391634688,0.896349133266,0.896306623604,0.896264105705,0.896221579567,0.896179045191,0.896136502577,0.896093951727,0.896051392639,0.896008825316,0.895966249756,0.895923665961,0.895881073931,0.895838473666,0.895795865167,0.895753248434,0.895710623467,0.895667990267,0.895625348834,0.895582699169,0.895540041272,0.895497375143,0.895454700783,0.895412018192,0.895369327371,0.89532662832,0.895283921039,0.895241205528,0.895198481789,0.895155749822,0.895113009626,0.895070261203,0.895027504552,0.894984739675,0.894941966571,0.89489918524,0.894856395685,0.894813597903,0.894770791897,0.894727977667,0.894685155212,0.894642324533,0.894599485631,0.894556638506,0.894513783159,0.894470919589,0.894428047798,0.894385167785,0.894342279551,0.894299383097,0.894256478422,0.894213565528,0.894170644414,0.894127715081,0.89408477753,0.89404183176,0.893998877772,0.893955915567,0.893912945145,0.893869966506,0.893826979651,0.893783984581,0.893740981294,0.893697969793,0.893654950077,0.893611922146,0.893568886002,0.893525841644,0.893482789074,0.89343972829,0.893396659294,0.893353582086,0.893310496667,0.893267403037,0.893224301196,0.893181191144,0.893138072883,0.893094946412,0.893051811732,0.893008668843,0.892965517746,0.892922358441,0.892879190928,0.892836015208,0.892792831282,0.892749639149,0.89270643881,0.892663230265,0.892620013516,0.892576788562,0.892533555403,0.89249031404,0.892447064474,0.892403806704,0.892360540732,0.892317266557,0.892273984181,0.892230693602,0.892187394823,0.892144087843,0.892100772662,0.892057449282,0.892014117701,0.891970777922,0.891927429944,0.891884073767,0.891840709392,0.89179733682,0.891753956051,0.891710567084,0.891667169922,0.891623764563,0.891580351009,0.891536929259,0.891493499315,0.891450061176,0.891406614843,0.891363160317,0.891319697597,0.891276226685,0.89123274758,0.891189260283,0.891145764795,0.891102261115,0.891058749244,0.891015229183,0.890971700932,0.890928164492,0.890884619862,0.890841067043,0.890797506036,0.890753936841,0.890710359459,0.890666773889,0.890623180132,0.890579578189,0.89053596806,0.890492349745,0.890448723245,0.89040508856,0.890361445691,0.890317794637,0.890274135401,0.890230467981,0.890186792378,0.890143108592,0.890099416625,0.890055716476,0.890012008146,0.889968291635,0.889924566944,0.889880834073,0.889837093022,0.889793343792,0.889749586383,0.889705820796,0.889662047031,0.889618265088,0.889574474968,0.889530676671,0.889486870198,0.889443055549,0.889399232724,0.889355401724,0.88931156255,0.889267715201,0.889223859678,0.889179995981,0.889136124112,0.889092244069,0.889048355855,0.889004459468,0.88896055491,0.88891664218,0.88887272128,0.88882879221,0.88878485497,0.88874090956,0.888696955981,0.888652994233,0.888609024317,0.888565046233,0.888521059982,0.888477065564,0.888433062978,0.888389052227,0.88834503331,0.888301006227,0.888256970979,0.888212927566,0.88816887599,0.888124816249,0.888080748345,0.888036672278,0.887992588048,0.887948495656,0.887904395102,0.887860286387,0.88781616951,0.887772044473,0.887727911276,0.887683769919,0.887639620403,0.887595462728,0.887551296894,0.887507122901,0.887462940752,0.887418750444,0.88737455198,0.887330345359,0.887286130582,0.88724190765,0.887197676562,0.887153437319,0.887109189921,0.88706493437,0.887020670664,0.886976398806,0.886932118794,0.88688783063,0.886843534314,0.886799229847,0.886754917228,0.886710596458,0.886666267537,0.886621930467,0.886577585247,0.886533231878,0.88648887036,0.886444500693,0.886400122879,0.886355736917,0.886311342807,0.886266940551,0.886222530149,0.8861781116,0.886133684907,0.886089250067,0.886044807084,0.886000355955,0.885955896683,0.885911429268,0.885866953709,0.885822470007,0.885777978164,0.885733478178,0.885688970051,0.885644453783,0.885599929374,0.885555396825,0.885510856136,0.885466307308,0.885421750341,0.885377185235,0.885332611991,0.885288030609,0.885243441089,0.885198843433,0.88515423764,0.885109623711,0.885065001647,0.885020371447,0.884975733112,0.884931086642,0.884886432039,0.884841769301,0.884797098431,0.884752419428,0.884707732292,0.884663037024,0.884618333624,0.884573622094,0.884528902432,0.88448417464,0.884439438718,0.884394694667,0.884349942486,0.884305182177,0.884260413739,0.884215637173,0.88417085248,0.88412605966,0.884081258713,0.884036449639,0.88399163244,0.883946807116,0.883901973666,0.883857132091,0.883812282393,0.883767424571,0.883722558625,0.883677684556,0.883632802365,0.883587912051,0.883543013616,0.883498107059,0.883453192382,0.883408269584,0.883363338666,0.883318399628,0.883273452471,0.883228497195,0.883183533801,0.883138562288,0.883093582658,0.883048594911,0.883003599047,0.882958595066,0.88291358297,0.882868562758,0.882823534431,0.882778497989,0.882733453433,0.882688400763,0.88264333998,0.882598271083,0.882553194074,0.882508108952,0.882463015719,0.882417914374,0.882372804919,0.882327687352,0.882282561676,0.88223742789,0.882192285994,0.88214713599,0.882101977877,0.882056811656,0.882011637327,0.881966454891,0.881921264348,0.881876065699,0.881830858944,0.881785644083,0.881740421117,0.881695190046,0.881649950871,0.881604703592,0.881559448209,0.881514184723,0.881468913135,0.881423633444,0.881378345652,0.881333049758,0.881287745763,0.881242433667,0.881197113471,0.881151785176,0.881106448781,0.881061104287,0.881015751694,0.880970391004,0.880925022216,0.88087964533,0.880834260348,0.880788867269,0.880743466094,0.880698056824,0.880652639458,0.880607213998,0.880561780443,0.880516338794,0.880470889052,0.880425431217,0.880379965289,0.880334491269,0.880289009157,0.880243518953,0.880198020659,0.880152514274,0.880106999798,0.880061477233,0.880015946579,0.879970407836,0.879924861004,0.879879306084,0.879833743076,0.879788171982,0.8797425928,0.879697005532,0.879651410178,0.879605806739,0.879560195214,0.879514575604,0.879468947911,0.879423312133,0.879377668272,0.879332016328,0.879286356301,0.879240688192,0.879195012001,0.879149327729,0.879103635376,0.879057934942,0.879012226429,0.878966509835,0.878920785162,0.878875052411,0.878829311581,0.878783562673,0.878737805687,0.878692040625,0.878646267485,0.878600486269,0.878554696977,0.87850889961,0.878463094168,0.878417280651,0.87837145906,0.878325629395,0.878279791657,0.878233945845,0.878188091961,0.878142230005,0.878096359978,0.878050481879,0.878004595709,0.877958701469,0.877912799159,0.877866888779,0.87782097033,0.877775043812,0.877729109226,0.877683166572,0.877637215851,0.877591257062,0.877545290207,0.877499315286,0.877453332299,0.877407341246,0.877361342129,0.877315334947,0.877269319701,0.877223296392,0.877177265019,0.877131225583,0.877085178085,0.877039122525,0.876993058903,0.87694698722,0.876900907477,0.876854819673,0.876808723809,0.876762619886,0.876716507904,0.876670387863,0.876624259764,0.876578123608,0.876531979394,0.876485827123,0.876439666796,0.876393498412,0.876347321973,0.876301137479,0.87625494493,0.876208744327,0.87616253567,0.876116318959,0.876070094195,0.876023861379,0.87597762051,0.87593137159,0.875885114618,0.875838849595,0.875792576522,0.875746295399,0.875700006226,0.875653709003,0.875607403732,0.875561090413,0.875514769045,0.87546843963,0.875422102168,0.875375756659,0.875329403104,0.875283041503,0.875236671857,0.875190294165,0.87514390843,0.87509751465,0.875051112826,0.875004702959,0.874958285049,0.874911859097,0.874865425102,0.874818983066,0.874772532989,0.874726074872,0.874679608713,0.874633134516,0.874586652278,0.874540162002,0.874493663687,0.874447157334,0.874400642943,0.874354120515,0.87430759005,0.874261051548,0.874214505011,0.874167950438,0.874121387829,0.874074817186,0.874028238509,0.873981651798,0.873935057053,0.873888454276,0.873841843465,0.873795224623,0.873748597749,0.873701962843,0.873655319907,0.87360866894,0.873562009943,0.873515342917,0.873468667861,0.873421984777,0.873375293664,0.873328594524,0.873281887356,0.873235172161,0.873188448939,0.873141717692,0.873094978418,0.87304823112,0.873001475796,0.872954712448,0.872907941076,0.87286116168,0.872814374261,0.87276757882,0.872720775356,0.87267396387,0.872627144363,0.872580316835,0.872533481286,0.872486637717,0.872439786129,0.872392926521,0.872346058894,0.872299183249,0.872252299586,0.872205407906,0.872158508208,0.872111600493,0.872064684763,0.872017761016,0.871970829254,0.871923889477,0.871876941686,0.87182998588,0.871783022061,0.871736050229,0.871689070383,0.871642082526,0.871595086656,0.871548082775,0.871501070883,0.87145405098,0.871407023067,0.871359987144,0.871312943212,0.87126589127,0.871218831321,0.871171763363,0.871124687398,0.871077603425,0.871030511446,0.87098341146,0.870936303469,0.870889187472,0.87084206347,0.870794931464,0.870747791453,0.870700643438,0.870653487421,0.8706063234,0.870559151377,0.870511971352,0.870464783325,0.870417587298,0.870370383269,0.870323171241,0.870275951212,0.870228723184,0.870181487157,0.870134243132,0.870086991109,0.870039731088,0.869992463069,0.869945187054,0.869897903043,0.869850611035,0.869803311033,0.869756003035,0.869708687042,0.869661363056,0.869614031075,0.869566691101,0.869519343135,0.869471987176,0.869424623225,0.869377251282,0.869329871349,0.869282483424,0.86923508751,0.869187683605,0.869140271711,0.869092851828,0.869045423957,0.868997988098,0.868950544251,0.868903092416,0.868855632595,0.868808164788,0.868760688995,0.868713205216,0.868665713452,0.868618213704,0.868570705971,0.868523190255,0.868475666556,0.868428134873,0.868380595209,0.868333047562,0.868285491934,0.868237928324,0.868190356734,0.868142777164,0.868095189614,0.868047594085,0.867999990577,0.86795237909,0.867904759625,0.867857132183,0.867809496763,0.867761853367,0.867714201995,0.867666542646,0.867618875323,0.867571200024,0.867523516751,0.867475825503,0.867428126282,0.867380419088,0.867332703921,0.867284980782,0.867237249671,0.867189510588,0.867141763534,0.86709400851,0.867046245516,0.866998474552,0.866950695618,0.866902908716,0.866855113845,0.866807311007,0.866759500201,0.866711681428,0.866663854688,0.866616019982,0.866568177311,0.866520326674,0.866472468072,0.866424601505,0.866376726975,0.866328844481,0.866280954025,0.866233055605,0.866185149223,0.86613723488,0.866089312575,0.866041382309,0.865993444082,0.865945497896,0.86589754375,0.865849581645,0.865801611581,0.865753633559,0.865705647579,0.865657653642,0.865609651748,0.865561641897,0.865513624091,0.865465598328,0.865417564611,0.865369522938,0.865321473312,0.865273415731,0.865225350198,0.865177276711,0.865129195272,0.86508110588,0.865033008537,0.864984903243,0.864936789998,0.864888668803,0.864840539658,0.864792402563,0.864744257519,0.864696104527,0.864647943587,0.864599774699,0.864551597864,0.864503413082,0.864455220354,0.86440701968,0.864358811061,0.864310594496,0.864262369987,0.864214137534,0.864165897137,0.864117648797,0.864069392514,0.864021128289,0.863972856122,0.863924576013,0.863876287963,0.863827991973,0.863779688043,0.863731376173,0.863683056364,0.863634728616,0.86358639293,0.863538049305,0.863489697744,0.863441338245,0.86339297081,0.863344595439,0.863296212131,0.863247820889,0.863199421712,0.863151014601,0.863102599555,0.863054176577,0.863005745665,0.862957306821,0.862908860044,0.862860405336,0.862811942697,0.862763472126,0.862714993626,0.862666507196,0.862618012836,0.862569510547,0.86252100033,0.862472482184,0.862423956111,0.862375422111,0.862326880184,0.86227833033,0.862229772551,0.862181206846,0.862132633216,0.862084051662,0.862035462184,0.861986864782,0.861938259456,0.861889646209,0.861841025038,0.861792395946,0.861743758933,0.861695113998,0.861646461143,0.861597800368,0.861549131673,0.861500455059,0.861451770527,0.861403078076,0.861354377707,0.861305669421,0.861256953218,0.861208229099,0.861159497063,0.861110757112,0.861062009245,0.861013253464,0.860964489769,0.86091571816,0.860866938638,0.860818151202,0.860769355855,0.860720552595,0.860671741424,0.860622922341,0.860574095348,0.860525260445,0.860476417632,0.860427566909,0.860378708278,0.860329841738,0.860280967291,0.860232084935,0.860183194673,0.860134296504,0.860085390429,0.860036476449,0.859987554563,0.859938624772,0.859889687077,0.859840741477,0.859791787975,0.859742826569,0.859693857261,0.859644880051,0.859595894939,0.859546901926,0.859497901012,0.859448892197,0.859399875483,0.85935085087,0.859301818357,0.859252777946,0.859203729637,0.85915467343,0.859105609326,0.859056537325,0.859007457429,0.858958369636,0.858909273948,0.858860170365,0.858811058887,0.858761939516,0.858712812251,0.858663677093,0.858614534042,0.858565383099,0.858516224264,0.858467057538,0.858417882922,0.858368700414,0.858319510017,0.858270311731,0.858221105555,0.858171891491,0.858122669538,0.858073439698,0.858024201971,0.857974956357,0.857925702856,0.85787644147,0.857827172198,0.857777895041,0.85772861,0.857679317075,0.857630016266,0.857580707574,0.857531390999,0.857482066543,0.857432734204,0.857383393984,0.857334045883,0.857284689901,0.85723532604,0.857185954299,0.857136574679,0.857087187181,0.857037791804,0.85698838855,0.856938977418,0.856889558409,0.856840131525,0.856790696764,0.856741254128,0.856691803616,0.856642345231,0.856592878971,0.856543404838,0.856493922831,0.856444432952,0.8563949352,0.856345429577,0.856295916083,0.856246394717,0.856196865481,0.856147328375,0.8560977834,0.856048230555,0.855998669842,0.855949101261,0.855899524812,0.855849940496,0.855800348313,0.855750748263,0.855701140348,0.855651524567,0.855601900922,0.855552269412,0.855502630037,0.8554529828,0.855403327699,0.855353664735,0.855303993909,0.855254315222,0.855204628673,0.855154934263,0.855105231993,0.855055521863,0.855005803873,0.854956078025,0.854906344317,0.854856602752,0.854806853329,0.854757096049,0.854707330912,0.854657557919,0.85460777707,0.854557988365,0.854508191806,0.854458387392,0.854408575125,0.854358755003,0.854308927029,0.854259091202,0.854209247523,0.854159395992,0.85410953661,0.854059669377,0.854009794293,0.85395991136,0.853910020578,0.853860121946,0.853810215466,0.853760301138,0.853710378962,0.85366044894,0.85361051107,0.853560565355,0.853510611793,0.853460650387,0.853410681135,0.853360704039,0.8533107191,0.853260726316,0.85321072569,0.853160717221,0.853110700911,0.853060676758,0.853010644765,0.85296060493,0.852910557256,0.852860501742,0.852810438388,0.852760367196,0.852710288165,0.852660201296,0.85261010659,0.852560004047,0.852509893667,0.852459775451,0.8524096494,0.852359515513,0.852309373792,0.852259224236,0.852209066847,0.852158901624,0.852108728568,0.85205854768,0.85200835896,0.851958162409,0.851907958027,0.851857745814,0.851807525771,0.851757297898,0.851707062196,0.851656818666,0.851606567307,0.85155630812,0.851506041106,0.851455766266,0.851405483598,0.851355193105,0.851304894787,0.851254588643,0.851204274675,0.851153952883,0.851103623267,0.851053285828,0.851002940566,0.850952587482,0.850902226576,0.850851857849,0.850801481302,0.850751096933,0.850700704745,0.850650304737,0.850599896911,0.850549481266,0.850499057802,0.850448626522,0.850398187424,0.850347740509,0.850297285778,0.850246823231,0.850196352869,0.850145874693,0.850095388702,0.850044894897,0.849994393278,0.849943883847,0.849893366603,0.849842841547,0.849792308679,0.849741768001,0.849691219512,0.849640663212,0.849590099103,0.849539527185,0.849488947457,0.849438359922,0.849387764579,0.849337161428,0.84928655047,0.849235931706,0.849185305136,0.84913467076,0.84908402858,0.849033378594,0.848982720805,0.848932055212,0.848881381815,0.848830700616,0.848780011615,0.848729314812,0.848678610207,0.848627897802,0.848577177596,0.848526449591,0.848475713785,0.848424970181,0.848374218779,0.848323459578,0.848272692579,0.848221917784,0.848171135192,0.848120344803,0.848069546619,0.84801874064,0.847967926866,0.847917105297,0.847866275935,0.847815438779,0.84776459383,0.847713741089,0.847662880555,0.847612012231,0.847561136115,0.847510252208,0.847459360512,0.847408461025,0.84735755375,0.847306638686,0.847255715833,0.847204785193,0.847153846766,0.847102900551,0.84705194655,0.847000984764,0.846950015192,0.846899037834,0.846848052693,0.846797059767,0.846746059058,0.846695050565,0.84664403429,0.846593010233,0.846541978394,0.846490938774,0.846439891373,0.846388836192,0.846337773231,0.846286702491,0.846235623971,0.846184537674,0.846133443598,0.846082341745,0.846031232115,0.845980114708,0.845928989525,0.845877856567,0.845826715834,0.845775567326,0.845724411043,0.845673246987,0.845622075158,0.845570895556,0.845519708182,0.845468513036,0.845417310118,0.84536609943,0.845314880971,0.845263654742,0.845212420744,0.845161178976,0.845109929441,0.845058672137,0.845007407065,0.844956134226,0.844904853621,0.84485356525,0.844802269113,0.84475096521,0.844699653543,0.844648334111,0.844597006916,0.844545671957,0.844494329236,0.844442978752,0.844391620506,0.844340254499,0.84428888073,0.844237499201,0.844186109912,0.844134712864,0.844083308056,0.84403189549,0.843980475166,0.843929047084,0.843877611244,0.843826167648,0.843774716296,0.843723257188,0.843671790324,0.843620315706,0.843568833333,0.843517343207,0.843465845327,0.843414339694,0.843362826308,0.843311305171,0.843259776282,0.843208239642,0.843156695251,0.84310514311,0.84305358322,0.84300201558,0.842950440192,0.842898857056,0.842847266172,0.84279566754,0.842744061162,0.842692447037,0.842640825167,0.842589195551,0.84253755819,0.842485913085,0.842434260236,0.842382599643,0.842330931308,0.842279255229,0.842227571409,0.842175879848,0.842124180545,0.842072473501,0.842020758718,0.841969036194,0.841917305932,0.841865567931,0.841813822191,0.841762068714,0.841710307499,0.841658538548,0.84160676186,0.841554977437,0.841503185278,0.841451385384,0.841399577756,0.841347762394,0.841295939298,0.841244108469,0.841192269908,0.841140423614,0.841088569589,0.841036707833,0.840984838347,0.84093296113,0.840881076183,0.840829183508,0.840777283103,0.84072537497,0.84067345911,0.840621535522,0.840569604208,0.840517665167,0.8404657184,0.840413763908,0.840361801691,0.84030983175,0.840257854084,0.840205868695,0.840153875583,0.840101874749,0.840049866193,0.839997849915,0.839945825916,0.839893794196,0.839841754756,0.839789707597,0.839737652718,0.839685590121,0.839633519805,0.839581441772,0.839529356022,0.839477262555,0.839425161371,0.839373052472,0.839320935857,0.839268811527,0.839216679484,0.839164539726,0.839112392254,0.83906023707,0.839008074174,0.838955903565,0.838903725245,0.838851539214,0.838799345472,0.83874714402,0.838694934859,0.838642717989,0.838590493409,0.838538261122,0.838486021127,0.838433773425,0.838381518017,0.838329254902,0.838276984081,0.838224705555,0.838172419324,0.838120125389,0.83806782375,0.838015514408,0.837963197363,0.837910872615,0.837858540166,0.837806200015,0.837753852163,0.837701496611,0.837649133359,0.837596762407,0.837544383757,0.837491997408,0.83743960336,0.837387201616,0.837334792174,0.837282375035,0.837229950201,0.837177517671,0.837125077445,0.837072629525,0.837020173911,0.836967710603,0.836915239602,0.836862760908,0.836810274522,0.836757780444,0.836705278674,0.836652769214,0.836600252064,0.836547727224,0.836495194694,0.836442654475,0.836390106568,0.836337550974,0.836284987691,0.836232416722,0.836179838066,0.836127251725,0.836074657698,0.836022055985,0.835969446589,0.835916829508,0.835864204743,0.835811572296,0.835758932166,0.835706284354,0.83565362886,0.835600965685,0.835548294829,0.835495616294,0.835442930078,0.835390236183,0.83533753461,0.835284825358,0.835232108429,0.835179383822,0.835126651539,0.835073911579,0.835021163943,0.834968408632,0.834915645647,0.834862874986,0.834810096652,0.834757310645,0.834704516965,0.834651715612,0.834598906587,0.834546089891,0.834493265524,0.834440433486,0.834387593778,0.834334746401,0.834281891355,0.83422902864,0.834176158258,0.834123280207,0.83407039449,0.834017501106,0.833964600056,0.83391169134,0.833858774959,0.833805850914,0.833752919204,0.833699979831,0.833647032794,0.833594078095,0.833541115733,0.83348814571,0.833435168026,0.833382182681,0.833329189675,0.83327618901,0.833223180685,0.833170164702,0.83311714106,0.833064109761,0.833011070804,0.83295802419,0.83290496992,0.832851907994,0.832798838413,0.832745761176,0.832692676286,0.832639583741,0.832586483543,0.832533375692,0.832480260188,0.832427137033,0.832374006226,0.832320867768,0.832267721659,0.832214567901,0.832161406493,0.832108237436,0.83205506073,0.832001876376,0.831948684375,0.831895484727,0.831842277432,0.83178906249,0.831735839904,0.831682609672,0.831629371795,0.831576126274,0.83152287311,0.831469612303,0.831416343852,0.83136306776,0.831309784026,0.83125649265,0.831203193634,0.831149886978,0.831096572682,0.831043250746,0.830989921172,0.83093658396,0.83088323911,0.830829886622,0.830776526498,0.830723158737,0.830669783341,0.830616400309,0.830563009642,0.830509611341,0.830456205406,0.830402791838,0.830349370637,0.830295941803,0.830242505338,0.830189061241,0.830135609513,0.830082150155,0.830028683167,0.829975208549,0.829921726303,0.829868236428,0.829814738925,0.829761233795,0.829707721037,0.829654200653,0.829600672643,0.829547137008,0.829493593747,0.829440042862,0.829386484353,0.829332918221,0.829279344465,0.829225763087,0.829172174087,0.829118577465,0.829064973222,0.829011361359,0.828957741875,0.828904114772,0.82885048005,0.828796837709,0.82874318775,0.828689530173,0.828635864979,0.828582192169,0.828528511742,0.8284748237,0.828421128043,0.828367424771,0.828313713884,0.828259995384,0.828206269271,0.828152535545,0.828098794207,0.828045045258,0.827991288697,0.827937524525,0.827883752743,0.827829973352,0.827776186351,0.827722391741,0.827668589524,0.827614779698,0.827560962265,0.827507137226,0.82745330458,0.827399464328,0.827345616471,0.827291761009,0.827237897943,0.827184027274,0.827130149001,0.827076263125,0.827022369647,0.826968468567,0.826914559885,0.826860643603,0.826806719721,0.826752788238,0.826698849157,0.826644902476,0.826590948197,0.826536986321,0.826483016847,0.826429039776,0.826375055109,0.826321062846,0.826267062987,0.826213055534,0.826159040486,0.826105017845,0.82605098761,0.825996949782,0.825942904362,0.82588885135,0.825834790746,0.825780722552,0.825726646767,0.825672563392,0.825618472428,0.825564373875,0.825510267734,0.825456154004,0.825402032688,0.825347903784,0.825293767294,0.825239623218,0.825185471556,0.82513131231,0.825077145479,0.825022971065,0.824968789066,0.824914599485,0.824860402322,0.824806197576,0.824751985249,0.824697765342,0.824643537853,0.824589302785,0.824535060137,0.824480809911,0.824426552106,0.824372286723,0.824318013762,0.824263733225,0.824209445111,0.824155149421,0.824100846156,0.824046535315,0.8239922169,0.823937890912,0.82388355735,0.823829216215,0.823774867507,0.823720511227,0.823666147376,0.823611775954,0.823557396962,0.8235030104,0.823448616268,0.823394214567,0.823339805298,0.82328538846,0.823230964056,0.823176532084,0.823122092546,0.823067645442,0.823013190772,0.822958728538,0.822904258739,0.822849781376,0.822795296449,0.82274080396,0.822686303908,0.822631796295,0.822577281119,0.822522758383,0.822468228087,0.82241369023,0.822359144814,0.822304591839,0.822250031306,0.822195463214,0.822140887565,0.82208630436,0.822031713597,0.821977115279,0.821922509406,0.821867895977,0.821813274994,0.821758646457,0.821704010367,0.821649366724,0.821594715528,0.821540056781,0.821485390482,0.821430716632,0.821376035231,0.821321346281,0.821266649781,0.821211945733,0.821157234136,0.821102514991,0.821047788299,0.82099305406,0.820938312274,0.820883562943,0.820828806066,0.820774041644,0.820719269678,0.820664490168,0.820609703115,0.820554908519,0.82050010638,0.8204452967,0.820390479478,0.820335654715,0.820280822412,0.820225982569,0.820171135187,0.820116280266,0.820061417807,0.82000654781,0.819951670275,0.819896785204,0.819841892596,0.819786992453,0.819732084774,0.819677169561,0.819622246813,0.819567316531,0.819512378716,0.819457433369,0.819402480489,0.819347520077,0.819292552134,0.81923757666,0.819182593656,0.819127603122,0.819072605059,0.819017599467,0.818962586347,0.8189075657,0.818852537525,0.818797501823,0.818742458595,0.818687407842,0.818632349563,0.818577283759,0.818522210432,0.81846712958,0.818412041206,0.818356945309,0.818301841889,0.818246730948,0.818191612486,0.818136486503,0.818081353,0.818026211978,0.817971063436,0.817915907376,0.817860743797,0.817805572701,0.817750394088,0.817695207959,0.817640014313,0.817584813152,0.817529604475,0.817474388284,0.817419164579,0.817363933361,0.817308694629,0.817253448385,0.817198194629,0.817142933361,0.817087664583,0.817032388294,0.816977104494,0.816921813186,0.816866514368,0.816811208042,0.816755894208,0.816700572867,0.816645244018,0.816589907664,0.816534563803,0.816479212437,0.816423853566,0.81636848719,0.816313113311,0.816257731928,0.816202343043,0.816146946655,0.816091542765,0.816036131374,0.815980712482,0.81592528609,0.815869852198,0.815814410807,0.815758961917,0.815703505528,0.815648041642,0.815592570259,0.815537091378,0.815481605002,0.81542611113,0.815370609762,0.8153151009,0.815259584544,0.815204060694,0.815148529351,0.815092990515,0.815037444187,0.814981890367,0.814926329057,0.814870760255,0.814815183964,0.814759600182,0.814704008912,0.814648410153,0.814592803906,0.814537190172,0.81448156895,0.814425940242,0.814370304048,0.814314660369,0.814259009204,0.814203350555,0.814147684422,0.814092010805,0.814036329706,0.813980641124,0.81392494506,0.813869241515,0.813813530489,0.813757811982,0.813702085995,0.81364635253,0.813590611585,0.813534863162,0.813479107261,0.813423343883,0.813367573027,0.813311794696,0.813256008889,0.813200215606,0.813144414849,0.813088606618,0.813032790913,0.812976967734,0.812921137083,0.81286529896,0.812809453365,0.812753600299,0.812697739762,0.812641871755,0.812585996278,0.812530113333,0.812474222918,0.812418325036,0.812362419686,0.812306506869,0.812250586585,0.812194658836,0.81213872362,0.81208278094,0.812026830796,0.811970873187,0.811914908115,0.81185893558,0.811802955583,0.811746968123,0.811690973202,0.811634970821,0.811578960979,0.811522943677,0.811466918916,0.811410886695,0.811354847017,0.811298799881,0.811242745287,0.811186683237,0.811130613731,0.811074536768,0.811018452351,0.810962360479,0.810906261152,0.810850154372,0.810794040139,0.810737918453,0.810681789315,0.810625652726,0.810569508685,0.810513357194,0.810457198253,0.810401031862,0.810344858022,0.810288676733,0.810232487997,0.810176291813,0.810120088182,0.810063877105,0.810007658582,0.809951432613,0.809895199199,0.809838958341,0.80978271004,0.809726454294,0.809670191106,0.809613920476,0.809557642404,0.809501356891,0.809445063937,0.809388763542,0.809332455708,0.809276140435,0.809219817723,0.809163487572,0.809107149985,0.80905080496,0.808994452498,0.8089380926,0.808881725267,0.808825350499,0.808768968296,0.808712578659,0.808656181588,0.808599777085,0.808543365149,0.808486945781,0.808430518982,0.808374084751,0.808317643091,0.808261194,0.80820473748,0.808148273531,0.808091802154,0.80803532335,0.807978837117,0.807922343458,0.807865842373,0.807809333862,0.807752817926,0.807696294565,0.80763976378,0.807583225572,0.80752667994,0.807470126886,0.807413566409,0.807356998511,0.807300423192,0.807243840452,0.807187250293,0.807130652714,0.807074047716,0.807017435299,0.806960815464,0.806904188213,0.806847553544,0.806790911459,0.806734261958,0.806677605041,0.80662094071,0.806564268965,0.806507589806,0.806450903233,0.806394209248,0.806337507851,0.806280799042,0.806224082821,0.806167359191,0.80611062815,0.806053889699,0.805997143839,0.805940390571,0.805883629895,0.805826861811,0.805770086321,0.805713303423,0.80565651312,0.805599715412,0.805542910298,0.80548609778,0.805429277859,0.805372450534,0.805315615806,0.805258773676,0.805201924144,0.805145067211,0.805088202877,0.805031331143,0.804974452009,0.804917565476,0.804860671545,0.804803770215,0.804746861488,0.804689945364,0.804633021843,0.804576090926,0.804519152614,0.804462206907,0.804405253805,0.804348293309,0.80429132542,0.804234350139,0.804177367464,0.804120377398,0.804063379941,0.804006375093,0.803949362854,0.803892343226,0.803835316209,0.803778281803,0.803721240009,0.803664190827,0.803607134258,0.803550070303,0.803492998961,0.803435920234,0.803378834122,0.803321740625,0.803264639745,0.803207531481,0.803150415834,0.803093292804,0.803036162393,0.802979024601,0.802921879428,0.802864726874,0.802807566941,0.802750399628,0.802693224937,0.802636042867,0.80257885342,0.802521656596,0.802464452395,0.802407240818,0.802350021866,0.802292795538,0.802235561836,0.80217832076,0.802121072311,0.802063816488,0.802006553293,0.801949282727,0.801892004789,0.80183471948,0.801777426801,0.801720126752,0.801662819334,0.801605504547,0.801548182392,0.801490852869,0.80143351598,0.801376171723,0.801318820101,0.801261461113,0.80120409476,0.801146721042,0.80108933996,0.801031951515,0.800974555708,0.800917152537,0.800859742005,0.800802324112,0.800744898857,0.800687466243,0.800630026269,0.800572578935,0.800515124243,0.800457662193,0.800400192785,0.80034271602,0.800285231898,0.80022774042,0.800170241587,0.800112735399,0.800055221856,0.799997700959,0.799940172709,0.799882637106,0.799825094151,0.799767543844,0.799709986186,0.799652421176,0.799594848817,0.799537269108,0.79947968205,0.799422087643,0.799364485888,0.799306876785,0.799249260335,0.799191636539,0.799134005397,0.799076366909,0.799018721077,0.7989610679,0.798903407379,0.798845739515,0.798788064308,0.798730381758,0.798672691867,0.798614994635,0.798557290062,0.798499578149,0.798441858896,0.798384132304,0.798326398373,0.798268657105,0.798210908499,0.798153152556,0.798095389276,0.798037618661,0.79797984071,0.797922055424,0.797864262804,0.79780646285,0.797748655563,0.797690840943,0.797633018991,0.797575189708,0.797517353093,0.797459509147,0.797401657872,0.797343799267,0.797285933333,0.79722806007,0.79717017948,0.797112291562,0.797054396317,0.796996493746,0.796938583849,0.796880666627,0.79682274208,0.796764810208,0.796706871013,0.796648924495,0.796590970655,0.796533009492,0.796475041008,0.796417065202,0.796359082076,0.79630109163,0.796243093865,0.796185088781,0.796127076378,0.796069056658,0.79601102962,0.795952995266,0.795894953595,0.795836904609,0.795778848307,0.795720784691,0.795662713761,0.795604635517,0.79554654996,0.795488457091,0.79543035691,0.795372249417,0.795314134613,0.7952560125,0.795197883076,0.795139746343,0.795081602301,0.795023450951,0.794965292293,0.794907126328,0.794848953057,0.794790772479,0.794732584596,0.794674389408,0.794616186915,0.794557977119,0.794499760019,0.794441535616,0.794383303911,0.794325064904,0.794266818596,0.794208564987,0.794150304078,0.794092035869,0.794033760361,0.793975477554,0.79391718745,0.793858890048,0.793800585349,0.793742273353,0.793683954062,0.793625627475,0.793567293593,0.793508952417,0.793450603948,0.793392248185,0.793333885129,0.793275514781,0.793217137142,0.793158752211,0.79310035999,0.793041960479,0.792983553679,0.79292513959,0.792866718212,0.792808289546,0.792749853593,0.792691410353,0.792632959827,0.792574502015,0.792516036918,0.792457564537,0.792399084871,0.792340597922,0.79228210369,0.792223602175,0.792165093378,0.7921065773,0.792048053941,0.791989523302,0.791930985383,0.791872440184,0.791813887707,0.791755327952,0.791696760919,0.791638186609,0.791579605023,0.79152101616,0.791462420022,0.791403816609,0.791345205921,0.79128658796,0.791227962725,0.791169330218,0.791110690438,0.791052043386,0.790993389064,0.790934727471,0.790876058607,0.790817382474,0.790758699072,0.790700008402,0.790641310463,0.790582605257,0.790523892785,0.790465173046,0.790406446041,0.790347711771,0.790288970236,0.790230221437,0.790171465375,0.790112702049,0.790053931461,0.789995153611,0.789936368499,0.789877576127,0.789818776494,0.789759969601,0.789701155449,0.789642334038,0.789583505369,0.789524669442,0.789465826258,0.789406975818,0.789348118121,0.789289253169,0.789230380962,0.7891715015,0.789112614785,0.789053720816,0.788994819595,0.788935911121,0.788876995395,0.788818072418,0.788759142191,0.788700204714,0.788641259986,0.78858230801,0.788523348786,0.788464382313,0.788405408593,0.788346427627,0.788287439414,0.788228443955,0.788169441251,0.788110431302,0.788051414109,0.787992389673,0.787933357993,0.787874319071,0.787815272907,0.787756219501,0.787697158855,0.787638090968,0.787579015842,0.787519933476,0.787460843872,0.787401747029,0.787342642949,0.787283531631,0.787224413078,0.787165287288,0.787106154262,0.787047014002,0.786987866507,0.786928711779,0.786869549817,0.786810380623,0.786751204196,0.786692020538,0.786632829648,0.786573631529,0.786514426179,0.786455213599,0.786395993791,0.786336766754,0.786277532489,0.786218290997,0.786159042279,0.786099786334,0.786040523163,0.785981252768,0.785921975148,0.785862690303,0.785803398236,0.785744098945,0.785684792432,0.785625478697,0.785566157741,0.785506829564,0.785447494167,0.78538815155,0.785328801714,0.78526944466,0.785210080387,0.785150708897,0.78509133019,0.785031944267,0.784972551128,0.784913150773,0.784853743204,0.78479432842,0.784734906423,0.784675477213,0.78461604079,0.784556597156,0.784497146309,0.784437688252,0.784378222984,0.784318750507,0.78425927082,0.784199783925,0.784140289821,0.78408078851,0.784021279991,0.783961764266,0.783902241336,0.783842711199,0.783783173858,0.783723629312,0.783664077562,0.78360451861,0.783544952454,0.783485379096,0.783425798537,0.783366210777,0.783306615816,0.783247013655,0.783187404294,0.783127787735,0.783068163977,0.783008533022,0.782948894869,0.78288924952,0.782829596975,0.782769937233,0.782710270297,0.782650596167,0.782590914842,0.782531226324,0.782471530613,0.78241182771,0.782352117615,0.782292400329,0.782232675852,0.782172944185,0.782113205328,0.782053459283,0.781993706049,0.781933945627,0.781874178018,0.781814403222,0.781754621239,0.781694832071,0.781635035718,0.78157523218,0.781515421458,0.781455603552,0.781395778464,0.781335946193,0.78127610674,0.781216260106,0.781156406291,0.781096545296,0.781036677122,0.780976801768,0.780916919235,0.780857029525,0.780797132637,0.780737228572,0.780677317331,0.780617398914,0.780557473322,0.780497540555,0.780437600613,0.780377653499,0.780317699211,0.78025773775,0.780197769118,0.780137793314,0.78007781034,0.780017820195,0.77995782288,0.779897818396,0.779837806744,0.779777787923,0.779717761935,0.77965772878,0.779597688458,0.779537640971,0.779477586318,0.7794175245,0.779357455518,0.779297379373,0.779237296064,0.779177205593,0.779117107959,0.779057003164,0.778996891209,0.778936772093,0.778876645817,0.778816512381,0.778756371788,0.778696224036,0.778636069126,0.778575907059,0.778515737836,0.778455561457,0.778395377922,0.778335187233,0.778274989389,0.778214784392,0.778154572241,0.778094352938,0.778034126482,0.777973892876,0.777913652118,0.777853404209,0.777793149151,0.777732886944,0.777672617588,0.777612341083,0.777552057431,0.777491766632,0.777431468687,0.777371163595,0.777310851358,0.777250531976,0.77719020545,0.77712987178,0.777069530967,0.777009183011,0.776948827913,0.776888465673,0.776828096293,0.776767719772,0.776707336111,0.776646945311,0.776586547372,0.776526142295,0.77646573008,0.776405310728,0.776344884239,0.776284450615,0.776224009855,0.77616356196,0.776103106931,0.776042644768,0.775982175472,0.775921699043,0.775861215483,0.77580072479,0.775740226967,0.775679722013,0.775619209929,0.775558690716,0.775498164374,0.775437630904,0.775377090306,0.775316542582,0.77525598773,0.775195425753,0.77513485665,0.775074280423,0.775013697071,0.774953106595,0.774892508996,0.774831904274,0.774771292431,0.774710673466,0.774650047379,0.774589414173,0.774528773846,0.774468126401,0.774407471836,0.774346810154,0.774286141353,0.774225465436,0.774164782402,0.774104092252,0.774043394987,0.773982690607,0.773921979112,0.773861260504,0.773800534783,0.773739801949,0.773679062003,0.773618314946,0.773557560778,0.773496799499,0.77343603111,0.773375255613,0.773314473006,0.773253683291,0.773192886469,0.77313208254,0.773071271504,0.773010453363,0.772949628116,0.772888795764,0.772827956308,0.772767109748,0.772706256086,0.77264539532,0.772584527453,0.772523652484,0.772462770415,0.772401881245,0.772340984975,0.772280081606,0.772219171139,0.772158253573,0.77209732891,0.77203639715,0.771975458294,0.771914512342,0.771853559294,0.771792599152,0.771731631916,0.771670657586,0.771609676163,0.771548687647,0.77148769204,0.771426689341,0.771365679552,0.771304662672,0.771243638702,0.771182607644,0.771121569497,0.771060524262,0.770999471939,0.77093841253,0.770877346034,0.770816272453,0.770755191786,0.770694104035,0.7706330092,0.770571907281,0.77051079828,0.770449682196,0.77038855903,0.770327428783,0.770266291455,0.770205147047,0.77014399556,0.770082836993,0.770021671348,0.769960498626,0.769899318826,0.769838131949,0.769776937996,0.769715736967,0.769654528864,0.769593313685,0.769532091433,0.769470862108,0.76940962571,0.769348382239,0.769287131697,0.769225874083,0.769164609399,0.769103337646,0.769042058822,0.76898077293,0.76891947997,0.768858179941,0.768796872846,0.768735558684,0.768674237456,0.768612909162,0.768551573804,0.768490231381,0.768428881894,0.768367525344,0.768306161731,0.768244791057,0.768183413321,0.768122028523,0.768060636666,0.767999237748,0.767937831772,0.767876418736,0.767814998642,0.767753571491,0.767692137283,0.767630696018,0.767569247698,0.767507792322,0.767446329891,0.767384860406,0.767323383868,0.767261900276,0.767200409632,0.767138911936,0.767077407188,0.76701589539,0.766954376542,0.766892850643,0.766831317696,0.7667697777,0.766708230657,0.766646676565,0.766585115427,0.766523547243,0.766461972013,0.766400389738,0.766338800418,0.766277204054,0.766215600647,0.766153990196,0.766092372704,0.76603074817,0.765969116594,0.765907477978,0.765845832322,0.765784179626,0.765722519892,0.765660853119,0.765599179308,0.76553749846,0.765475810575,0.765414115655,0.765352413699,0.765290704707,0.765228988682,0.765167265622,0.76510553553,0.765043798405,0.764982054247,0.764920303058,0.764858544838,0.764796779588,0.764735007308,0.764673227998,0.76461144166,0.764549648293,0.7644878479,0.764426040479,0.764364226031,0.764302404558,0.764240576059,0.764178740536,0.764116897989,0.764055048418,0.763993191824,0.763931328207,0.763869457569,0.763807579909,0.763745695228,0.763683803528,0.763621904807,0.763559999068,0.76349808631,0.763436166534,0.763374239741,0.763312305931,0.763250365105,0.763188417263,0.763126462407,0.763064500535,0.76300253165,0.762940555752,0.76287857284,0.762816582917,0.762754585981,0.762692582035,0.762630571078,0.762568553112,0.762506528136,0.762444496151,0.762382457158,0.762320411157,0.762258358149,0.762196298135,0.762134231114,0.762072157089,0.762010076058,0.761947988023,0.761885892985,0.761823790943,0.761761681899,0.761699565854,0.761637442806,0.761575312758,0.76151317571,0.761451031662,0.761388880615,0.761326722569,0.761264557525,0.761202385484,0.761140206446,0.761078020412,0.761015827383,0.760953627358,0.760891420339,0.760829206325,0.760766985319,0.760704757319,0.760642522328,0.760580280344,0.76051803137,0.760455775405,0.76039351245,0.760331242506,0.760268965573,0.760206681651,0.760144390742,0.760082092846,0.760019787964,0.759957476095,0.759895157241,0.759832831403,0.75977049858,0.759708158773,0.759645811984,0.759583458211,0.759521097457,0.759458729722,0.759396355006,0.759333973309,0.759271584633,0.759209188978,0.759146786345,0.759084376733,0.759021960145,0.758959536579,0.758897106037,0.75883466852,0.758772224027,0.75870977256,0.75864731412,0.758584848705,0.758522376319,0.75845989696,0.758397410629,0.758334917327,0.758272417055,0.758209909813,0.758147395602,0.758084874422,0.758022346273,0.757959811158,0.757897269075,0.757834720026,0.757772164011,0.75770960103,0.757647031085,0.757584454176,0.757521870303,0.757459279468,0.757396681669,0.75733407691,0.757271465188,0.757208846506,0.757146220865,0.757083588263,0.757020948703,0.756958302184,0.756895648707,0.756832988273,0.756770320883,0.756707646536,0.756644965234,0.756582276977,0.756519581766,0.756456879601,0.756394170483,0.756331454412,0.756268731389,0.756206001414,0.756143264489,0.756080520614,0.756017769788,0.755955012014,0.755892247291,0.75582947562,0.755766697001,0.755703911436,0.755641118924,0.755578319467,0.755515513065,0.755452699718,0.755389879427,0.755327052193,0.755264218016,0.755201376897,0.755138528836,0.755075673834,0.755012811891,0.754949943009,0.754887067187,0.754824184426,0.754761294728,0.754698398092,0.754635494518,0.754572584008,0.754509666563,0.754446742182,0.754383810866,0.754320872617,0.754257927433,0.754194975317,0.754132016268,0.754069050288,0.754006077376,0.753943097533,0.753880110761,0.753817117059,0.753754116428,0.753691108869,0.753628094382,0.753565072968,0.753502044627,0.75343900936,0.753375967167,0.75331291805,0.753249862009,0.753186799044,0.753123729155,0.753060652344,0.752997568612,0.752934477957,0.752871380382,0.752808275887,0.752745164472,0.752682046138,0.752618920886,0.752555788715,0.752492649627,0.752429503623,0.752366350702,0.752303190866,0.752240024115,0.752176850449,0.75211366987,0.752050482377,0.751987287971,0.751924086654,0.751860878424,0.751797663284,0.751734441234,0.751671212274,0.751607976404,0.751544733626,0.75148148394,0.751418227347,0.751354963846,0.75129169344,0.751228416127,0.75116513191,0.751101840788,0.751038542762,0.750975237832,0.750911926,0.750848607265,0.750785281629,0.750721949092,0.750658609655,0.750595263317,0.75053191008,0.750468549945,0.750405182911,0.75034180898,0.750278428151,0.750215040427,0.750151645806,0.750088244291,0.75002483588,0.749961420576,0.749897998378,0.749834569287,0.749771133304,0.749707690429,0.749644240663,0.749580784006,0.74951732046,0.749453850024,0.749390372699,0.749326888486,0.749263397385,0.749199899398,0.749136394523,0.749072882763,0.749009364118,0.748945838588,0.748882306173,0.748818766875,0.748755220695,0.748691667631,0.748628107686,0.74856454086,0.748500967153,0.748437386566,0.748373799099,0.748310204754,0.74824660353,0.748182995429,0.74811938045,0.748055758595,0.747992129864,0.747928494258,0.747864851777,0.747801202421,0.747737546192,0.74767388309,0.747610213115,0.747546536269,0.747482852551,0.747419161963,0.747355464504,0.747291760176,0.747228048979,0.747164330913,0.74710060598,0.74703687418,0.746973135513,0.74690938998,0.746845637581,0.746781878318,0.746718112191,0.746654339199,0.746590559345,0.746526772628,0.74646297905,0.74639917861,0.746335371309,0.746271557148,0.746207736127,0.746143908248,0.74608007351,0.746016231914,0.745952383461,0.745888528152,0.745824665986,0.745760796965,0.745696921089,0.745633038359,0.745569148775,0.745505252338,0.745441349049,0.745377438907,0.745313521914,0.745249598071,0.745185667377,0.745121729834,0.745057785441,0.744993834201,0.744929876112,0.744865911176,0.744801939394,0.744737960765,0.744673975291,0.744609982972,0.744545983809,0.744481977802,0.744417964952,0.74435394526,0.744289918725,0.74422588535,0.744161845133,0.744097798076,0.74403374418,0.743969683445,0.743905615871,0.743841541459,0.74377746021,0.743713372125,0.743649277203,0.743585175447,0.743521066855,0.743456951429,0.743392829169,0.743328700076,0.74326456415,0.743200421393,0.743136271804,0.743072115385,0.743007952135,0.742943782056,0.742879605148,0.742815421411,0.742751230847,0.742687033455,0.742622829237,0.742558618193,0.742494400323,0.742430175629,0.74236594411,0.742301705767,0.742237460602,0.742173208614,0.742108949804,0.742044684173,0.741980411721,0.741916132449,0.741851846357,0.741787553447,0.741723253718,0.741658947171,0.741594633807,0.741530313627,0.741465986631,0.741401652819,0.741337312192,0.741272964751,0.741208610497,0.74114424943,0.74107988155,0.741015506858,0.740951125355,0.740886737041,0.740822341918,0.740757939984,0.740693531242,0.740629115692,0.740564693334,0.740500264169,0.740435828197,0.740371385419,0.740306935836,0.740242479449,0.740178016257,0.740113546261,0.740049069463,0.739984585862,0.73992009546,0.739855598256,0.739791094251,0.739726583447,0.739662065843,0.739597541441,0.73953301024,0.739468472242,0.739403927446,0.739339375854,0.739274817467,0.739210252284,0.739145680306,0.739081101534,0.739016515969,0.738951923611,0.738887324461,0.738822718519,0.738758105785,0.738693486262,0.738628859948,0.738564226845,0.738499586954,0.738434940274,0.738370286807,0.738305626552,0.738240959512,0.738176285686,0.738111605074,0.738046917678,0.737982223498,0.737917522535,0.737852814788,0.73778810026,0.73772337895,0.737658650859,0.737593915988,0.737529174337,0.737464425906,0.737399670697,0.73733490871,0.737270139946,0.737205364405,0.737140582087,0.737075792994,0.737010997126,0.736946194484,0.736881385067,0.736816568877,0.736751745915,0.736686916181,0.736622079675,0.736557236398,0.736492386351,0.736427529534,0.736362665948,0.736297795594,0.736232918472,0.736168034582,0.736103143926,0.736038246504,0.735973342316,0.735908431363,0.735843513646,0.735778589166,0.735713657922,0.735648719916,0.735583775147,0.735518823618,0.735453865327,0.735388900277,0.735323928467,0.735258949898,0.73519396457,0.735128972485,0.735063973643,0.734998968044,0.73493395569,0.73486893658,0.734803910715,0.734738878096,0.734673838723,0.734608792598,0.73454373972,0.73447868009,0.73441361371,0.734348540578,0.734283460697,0.734218374066,0.734153280687,0.734088180559,0.734023073684,0.733957960061,0.733892839693,0.733827712578,0.733762578719,0.733697438115,0.733632290766,0.733567136675,0.733501975841,0.733436808264,0.733371633946,0.733306452887,0.733241265087,0.733176070548,0.733110869269,0.733045661252,0.732980446497,0.732915225005,0.732849996775,0.73278476181,0.732719520109,0.732654271672,0.732589016502,0.732523754598,0.73245848596,0.73239321059,0.732327928488,0.732262639654,0.73219734409,0.732132041795,0.732066732771,0.732001417018,0.731936094537,0.731870765327,0.731805429391,0.731740086728,0.731674737338,0.731609381224,0.731544018385,0.731478648821,0.731413272534,0.731347889524,0.731282499791,0.731217103337,0.731151700162,0.731086290265,0.731020873649,0.730955450314,0.73089002026,0.730824583487,0.730759139997,0.73069368979,0.730628232867,0.730562769228,0.730497298874,0.730431821805,0.730366338022,0.730300847526,0.730235350317,0.730169846395,0.730104335763,0.730038818419,0.729973294365,0.729907763601,0.729842226128,0.729776681947,0.729711131057,0.72964557346,0.729580009157,0.729514438147,0.729448860432,0.729383276012,0.729317684887,0.729252087059,0.729186482527,0.729120871293,0.729055253358,0.728989628721,0.728923997383,0.728858359345,0.728792714607,0.728727063171,0.728661405036,0.728595740204,0.728530068674,0.728464390448,0.728398705526,0.728333013909,0.728267315597,0.728201610591,0.728135898892,0.7280701805,0.728004455415,0.727938723639,0.727872985172,0.727807240014,0.727741488167,0.72767572963,0.727609964404,0.727544192491,0.72747841389,0.727412628602,0.727346836628,0.727281037969,0.727215232624,0.727149420595,0.727083601883,0.727017776487,0.726951944408,0.726886105648,0.726820260206,0.726754408083,0.72668854928,0.726622683798,0.726556811636,0.726490932796,0.726425047279,0.726359155084,0.726293256213,0.726227350666,0.726161438444,0.726095519546,0.726029593975,0.72596366173,0.725897722813,0.725831777223,0.725765824961,0.725699866028,0.725633900425,0.725567928152,0.72550194921,0.725435963599,0.72536997132,0.725303972373,0.72523796676,0.72517195448,0.725105935535,0.725039909925,0.72497387765,0.724907838712,0.72484179311,0.724775740846,0.724709681919,0.724643616332,0.724577544084,0.724511465175,0.724445379607,0.72437928738,0.724313188495,0.724247082951,0.724180970751,0.724114851895,0.724048726382,0.723982594214,0.723916455391,0.723850309915,0.723784157784,0.723717999001,0.723651833566,0.723585661479,0.723519482741,0.723453297353,0.723387105314,0.723320906627,0.723254701291,0.723188489307,0.723122270675,0.723056045397,0.722989813472,0.722923574902,0.722857329687,0.722791077828,0.722724819325,0.722658554179,0.72259228239,0.722526003959,0.722459718887,0.722393427175,0.722327128822,0.72226082383,0.722194512199,0.722128193929,0.722061869022,0.721995537478,0.721929199298,0.721862854481,0.72179650303,0.721730144944,0.721663780224,0.72159740887,0.721531030884,0.721464646266,0.721398255016,0.721331857135,0.721265452624,0.721199041483,0.721132623713,0.721066199315,0.720999768288,0.720933330634,0.720866886354,0.720800435448,0.720733977916,0.720667513759,0.720601042978,0.720534565574,0.720468081546,0.720401590897,0.720335093625,0.720268589732,0.720202079219,0.720135562085,0.720069038333,0.720002507961,0.719935970972,0.719869427365,0.719802877141,0.719736320301,0.719669756845,0.719603186774,0.719536610089,0.71947002679,0.719403436878,0.719336840353,0.719270237216,0.719203627467,0.719137011108,0.719070388139,0.71900375856,0.718937122373,0.718870479577,0.718803830173,0.718737174162,0.718670511545,0.718603842322,0.718537166494,0.718470484061,0.718403795023,0.718337099383,0.71827039714,0.718203688294,0.718136972847,0.718070250799,0.718003522151,0.717936786903,0.717870045056,0.71780329661,0.717736541566,0.717669779926,0.717603011688,0.717536236854,0.717469455425,0.717402667402,0.717335872784,0.717269071572,0.717202263767,0.71713544937,0.717068628381,0.717001800802,0.716934966631,0.716868125871,0.716801278521,0.716734424583,0.716667564056,0.716600696943,0.716533823242,0.716466942955,0.716400056082,0.716333162625,0.716266262583,0.716199355957,0.716132442748,0.716065522957,0.715998596584,0.715931663629,0.715864724094,0.715797777979,0.715730825284,0.71566386601,0.715596900158,0.715529927729,0.715462948722,0.715395963139,0.715328970981,0.715261972247,0.715194966939,0.715127955056,0.715060936601,0.714993911573,0.714926879972,0.714859841801,0.714792797058,0.714725745745,0.714658687863,0.714591623411,0.714524552392,0.714457474804,0.714390390649,0.714323299928,0.714256202641,0.714189098789,0.714121988372,0.71405487139,0.713987747846,0.713920617738,0.713853481069,0.713786337838,0.713719188046,0.713652031693,0.713584868781,0.713517699309,0.71345052328,0.713383340692,0.713316151547,0.713248955845,0.713181753587,0.713114544774,0.713047329406,0.712980107484,0.712912879009,0.71284564398,0.712778402399,0.712711154267,0.712643899583,0.712576638349,0.712509370565,0.712442096231,0.71237481535,0.71230752792,0.712240233942,0.712172933418,0.712105626348,0.712038312733,0.711970992572,0.711903665867,0.711836332619,0.711768992827,0.711701646493,0.711634293617,0.7115669342,0.711499568243,0.711432195745,0.711364816708,0.711297431133,0.711230039019,0.711162640368,0.71109523518,0.711027823456,0.710960405196,0.710892980401,0.710825549072,0.710758111209,0.710690666813,0.710623215884,0.710555758424,0.710488294432,0.71042082391,0.710353346857,0.710285863275,0.710218373164,0.710150876526,0.710083373359,0.710015863666,0.709948347446,0.709880824701,0.70981329543,0.709745759636,0.709678217317,0.709610668475,0.70954311311,0.709475551224,0.709407982816,0.709340407888,0.709272826439,0.709205238471,0.709137643984,0.709070042978,0.709002435456,0.708934821416,0.70886720086,0.708799573788,0.7087319402,0.708664300099,0.708596653483,0.708529000354,0.708461340713,0.70839367456,0.708326001895,0.708258322719,0.708190637033,0.708122944838,0.708055246134,0.707987540921,0.707919829201,0.707852110974,0.70778438624,0.707716655,0.707648917256,0.707581173006,0.707513422253,0.707445664997,0.707377901238,0.707310130976,0.707242354214,0.70717457095,0.707106781187,0.707038984923,0.706971182161,0.706903372901,0.706835557142,0.706767734887,0.706699906135,0.706632070888,0.706564229145,0.706496380907,0.706428526176,0.706360664951,0.706292797234,0.706224923024,0.706157042323,0.706089155131,0.706021261449,0.705953361278,0.705885454617,0.705817541468,0.705749621831,0.705681695708,0.705613763097,0.705545824001,0.70547787842,0.705409926354,0.705341967804,0.705274002771,0.705206031255,0.705138053257,0.705070068777,0.705002077817,0.704934080376,0.704866076456,0.704798066056,0.704730049179,0.704662025823,0.704593995991,0.704525959682,0.704457916897,0.704389867637,0.704321811903,0.704253749694,0.704185681012,0.704117605858,0.704049524231,0.703981436133,0.703913341564,0.703845240524,0.703777133016,0.703709019038,0.703640898592,0.703572771678,0.703504638297,0.703436498449,0.703368352136,0.703300199358,0.703232040114,0.703163874407,0.703095702237,0.703027523604,0.702959338509,0.702891146952,0.702822948935,0.702754744457,0.70268653352,0.702618316124,0.702550092269,0.702481861957,0.702413625188,0.702345381962,0.702277132281,0.702208876144,0.702140613553,0.702072344508,0.70200406901,0.701935787059,0.701867498656,0.701799203801,0.701730902496,0.70166259474,0.701594280535,0.701525959881,0.701457632779,0.701389299229,0.701320959232,0.701252612789,0.7011842599,0.701115900566,0.701047534787,0.700979162565,0.700910783899,0.700842398791,0.70077400724,0.700705609248,0.700637204816,0.700568793943,0.700500376631,0.70043195288,0.700363522691,0.700295086064,0.700226643001,0.700158193501,0.700089737565,0.700021275194,0.699952806389,0.69988433115,0.699815849477,0.699747361373,0.699678866836,0.699610365868,0.699541858469,0.69947334464,0.699404824382,0.699336297695,0.69926776458,0.699199225037,0.699130679068,0.699062126672,0.698993567851,0.698925002604,0.698856430934,0.698787852839,0.698719268322,0.698650677381,0.69858208002,0.698513476236,0.698444866033,0.698376249409,0.698307626366,0.698238996904,0.698170361024,0.698101718727,0.698033070013,0.697964414883,0.697895753337,0.697827085377,0.697758411002,0.697689730213,0.697621043012,0.697552349398,0.697483649372,0.697414942935,0.697346230088,0.697277510831,0.697208785165,0.69714005309,0.697071314607,0.697002569716,0.696933818419,0.696865060716,0.696796296608,0.696727526095,0.696658749177,0.696589965856,0.696521176132,0.696452380006,0.696383577478,0.69631476855,0.69624595322,0.696177131491,0.696108303363,0.696039468837,0.695970627913,0.695901780591,0.695832926873,0.695764066759,0.695695200249,0.695626327345,0.695557448047,0.695488562356,0.695419670271,0.695350771795,0.695281866927,0.695212955668,0.695144038019,0.69507511398,0.695006183552,0.694937246736,0.694868303532,0.694799353942,0.694730397964,0.694661435601,0.694592466853,0.69452349172,0.694454510203,0.694385522303,0.69431652802,0.694247527356,0.69417852031,0.694109506883,0.694040487076,0.69397146089,0.693902428324,0.693833389381,0.69376434406,0.693695292362,0.693626234288,0.693557169838,0.693488099013,0.693419021814,0.693349938241,0.693280848295,0.693211751976,0.693142649285,0.693073540224,0.693004424791,0.692935302989,0.692866174817,0.692797040277,0.692727899369,0.692658752093,0.692589598451,0.692520438442,0.692451272068,0.692382099329,0.692312920226,0.692243734759,0.692174542929,0.692105344737,0.692036140183,0.691966929269,0.691897711993,0.691828488358,0.691759258364,0.691690022012,0.691620779301,0.691551530233,0.691482274809,0.691413013029,0.691343744893,0.691274470403,0.691205189558,0.691135902361,0.69106660881,0.690997308908,0.690928002653,0.690858690048,0.690789371093,0.690720045788,0.690650714135,0.690581376132,0.690512031783,0.690442681086,0.690373324043,0.690303960654,0.69023459092,0.690165214841,0.690095832419,0.690026443653,0.689957048545,0.689887647095,0.689818239303,0.689748825171,0.689679404699,0.689609977887,0.689540544737,0.689471105249,0.689401659423,0.68933220726,0.689262748761,0.689193283927,0.689123812757,0.689054335254,0.688984851417,0.688915361246,0.688845864744,0.688776361909,0.688706852744,0.688637337248,0.688567815422,0.688498287267,0.688428752784,0.688359211973,0.688289664834,0.688220111369,0.688150551578,0.688080985462,0.68801141302,0.687941834255,0.687872249167,0.687802657755,0.687733060022,0.687663455967,0.687593845591,0.687524228895,0.687454605879,0.687384976545,0.687315340892,0.687245698921,0.687176050634,0.68710639603,0.68703673511,0.686967067875,0.686897394326,0.686827714463,0.686758028287,0.686688335798,0.686618636998,0.686548931886,0.686479220463,0.686409502731,0.686339778689,0.686270048339,0.68620031168,0.686130568714,0.686060819441,0.685991063863,0.685921301978,0.685851533789,0.685781759296,0.685711978499,0.685642191399,0.685572397997,0.685502598293,0.685432792289,0.685362979984,0.685293161379,0.685223336475,0.685153505273,0.685083667773,0.685013823976,0.684943973882,0.684874117492,0.684804254808,0.684734385828,0.684664510555,0.684594628988,0.684524741129,0.684454846978,0.684384946535,0.684315039802,0.684245126779,0.684175207466,0.684105281864,0.684035349975,0.683965411797,0.683895467333,0.683825516583,0.683755559547,0.683685596226,0.683615626621,0.683545650732,0.68347566856,0.683405680106,0.68333568537,0.683265684353,0.683195677056,0.683125663479,0.683055643623,0.682985617488,0.682915585075,0.682845546385,0.682775501419,0.682705450176,0.682635392659,0.682565328866,0.6824952588,0.682425182461,0.682355099848,0.682285010964,0.682214915808,0.682144814381,0.682074706685,0.682004592718,0.681934472483,0.68186434598,0.681794213209,0.681724074172,0.681653928868,0.681583777298,0.681513619464,0.681443455365,0.681373285002,0.681303108377,0.681232925489,0.681162736339,0.681092540928,0.681022339257,0.680952131326,0.680881917135,0.680811696686,0.68074146998,0.680671237016,0.680600997795,0.680530752319,0.680460500587,0.680390242601,0.680319978361,0.680249707867,0.68017943112,0.680109148122,0.680038858872,0.679968563371,0.679898261621,0.67982795362,0.679757639371,0.679687318874,0.679616992129,0.679546659137,0.679476319899,0.679405974416,0.679335622687,0.679265264714,0.679194900498,0.679124530038,0.679054153337,0.678983770393,0.678913381208,0.678842985783,0.678772584118,0.678702176214,0.678631762072,0.678561341691,0.678490915074,0.67842048222,0.67835004313,0.678279597805,0.678209146245,0.678138688451,0.678068224424,0.677997754164,0.677927277673,0.677856794949,0.677786305996,0.677715810812,0.677645309398,0.677574801756,0.677504287886,0.677433767789,0.677363241464,0.677292708913,0.677222170137,0.677151625136,0.677081073911,0.677010516462,0.67693995279,0.676869382896,0.67679880678,0.676728224443,0.676657635886,0.67658704111,0.676516440114,0.6764458329,0.676375219468,0.676304599819,0.676233973953,0.676163341872,0.676092703575,0.676022059064,0.67595140834,0.675880751402,0.675810088251,0.675739418889,0.675668743315,0.675598061531,0.675527373536,0.675456679333,0.675385978921,0.6753152723,0.675244559473,0.675173840439,0.675103115198,0.675032383752,0.674961646102,0.674890902247,0.674820152189,0.674749395929,0.674678633466,0.674607864801,0.674537089936,0.67446630887,0.674395521605,0.674324728141,0.674253928479,0.674183122619,0.674112310562,0.674041492309,0.673970667861,0.673899837217,0.673829000379,0.673758157347,0.673687308122,0.673616452705,0.673545591096,0.673474723296,0.673403849306,0.673332969125,0.673262082756,0.673191190198,0.673120291453,0.67304938652,0.6729784754,0.672907558095,0.672836634605,0.67276570493,0.672694769071,0.672623827029,0.672552878804,0.672481924397,0.672410963809,0.67233999704,0.672269024091,0.672198044963,0.672127059656,0.672056068172,0.671985070509,0.67191406667,0.671843056655,0.671772040465,0.671701018099,0.67162998956,0.671558954847,0.671487913961,0.671416866903,0.671345813674,0.671274754274,0.671203688703,0.671132616963,0.671061539054,0.670990454977,0.670919364732,0.67084826832,0.670777165742,0.670706056998,0.67063494209,0.670563821017,0.67049269378,0.67042156038,0.670350420818,0.670279275094,0.670208123209,0.670136965164,0.670065800959,0.669994630595,0.669923454072,0.669852271392,0.669781082554,0.66970988756,0.66963868641,0.669567479105,0.669496265646,0.669425046032,0.669353820266,0.669282588347,0.669211350276,0.669140106053,0.66906885568,0.668997599157,0.668926336485,0.668855067665,0.668783792696,0.66871251158,0.668641224317,0.668569930908,0.668498631354,0.668427325655,0.668356013813,0.668284695826,0.668213371698,0.668142041427,0.668070705014,0.667999362461,0.667928013768,0.667856658935,0.667785297963,0.667713930854,0.667642557607,0.667571178223,0.667499792702,0.667428401047,0.667357003256,0.667285599331,0.667214189273,0.667142773082,0.667071350759,0.666999922304,0.666928487718,0.666857047002,0.666785600156,0.666714147181,0.666642688078,0.666571222847,0.66649975149,0.666428274006,0.666356790396,0.666285300662,0.666213804803,0.66614230282,0.666070794714,0.665999280486,0.665927760136,0.665856233666,0.665784701074,0.665713162363,0.665641617533,0.665570066585,0.665498509518,0.665426946335,0.665355377035,0.665283801619,0.665212220088,0.665140632443,0.665069038684,0.664997438811,0.664925832826,0.66485422073,0.664782602522,0.664710978203,0.664639347775,0.664567711237,0.664496068591,0.664424419837,0.664352764976,0.664281104008,0.664209436934,0.664137763755,0.664066084472,0.663994399084,0.663922707593,0.663851009999,0.663779306304,0.663707596507,0.66363588061,0.663564158612,0.663492430515,0.66342069632,0.663348956026,0.663277209635,0.663205457148,0.663133698564,0.663061933885,0.662990163111,0.662918386243,0.662846603282,0.662774814228,0.662703019082,0.662631217845,0.662559410516,0.662487597098,0.66241577759,0.662343951994,0.662272120309,0.662200282537,0.662128438678,0.662056588733,0.661984732702,0.661912870587,0.661841002387,0.661769128104,0.661697247738,0.66162536129,0.66155346876,0.66148157015,0.661409665459,0.661337754689,0.66126583784,0.661193914913,0.661121985908,0.661050050826,0.660978109668,0.660906162435,0.660834209126,0.660762249744,0.660690284287,0.660618312758,0.660546335157,0.660474351484,0.66040236174,0.660330365925,0.660258364041,0.660186356089,0.660114342067,0.660042321979,0.659970295823,0.659898263601,0.659826225313,0.659754180961,0.659682130544,0.659610074063,0.659538011519,0.659465942913,0.659393868246,0.659321787517,0.659249700728,0.659177607879,0.659105508972,0.659033404006,0.658961292982,0.658889175901,0.658817052764,0.658744923571,0.658672788323,0.658600647021,0.658528499665,0.658456346256,0.658384186795,0.658312021282,0.658239849717,0.658167672103,0.658095488439,0.658023298725,0.657951102963,0.657878901154,0.657806693297,0.657734479394,0.657662259445,0.657590033451,0.657517801413,0.657445563331,0.657373319206,0.657301069038,0.657228812829,0.657156550578,0.657084282287,0.657012007956,0.656939727587,0.656867441178,0.656795148732,0.656722850249,0.656650545729,0.656578235174,0.656505918583,0.656433595958,0.6563612673,0.656288932608,0.656216591883,0.656144245127,0.65607189234,0.655999533522,0.655927168674,0.655854797797,0.655782420892,0.655710037959,0.655637648999,0.655565254012,0.655492853,0.655420445962,0.6553480329,0.655275613814,0.655203188705,0.655130757573,0.65505832042,0.654985877245,0.65491342805,0.654840972835,0.654768511601,0.654696044349,0.654623571078,0.654551091791,0.654478606487,0.654406115167,0.654333617832,0.654261114482,0.654188605119,0.654116089742,0.654043568353,0.653971040953,0.653898507541,0.653825968118,0.653753422686,0.653680871244,0.653608313795,0.653535750337,0.653463180872,0.6533906054,0.653318023923,0.653245436441,0.653172842954,0.653100243463,0.653027637969,0.652955026473,0.652882408975,0.652809785475,0.652737155975,0.652664520476,0.652591878977,0.65251923148,0.652446577984,0.652373918492,0.652301253003,0.652228581519,0.652155904039,0.652083220565,0.652010531097,0.651937835636,0.651865134182,0.651792426737,0.6517197133,0.651646993873,0.651574268456,0.65150153705,0.651428799656,0.651356056274,0.651283306905,0.651210551549,0.651137790207,0.65106502288,0.650992249569,0.650919470274,0.650846684996,0.650773893736,0.650701096494,0.65062829327,0.650555484067,0.650482668883,0.65040984772,0.650337020579,0.65026418746,0.650191348364,0.650118503292,0.650045652244,0.649972795221,0.649899932223,0.649827063252,0.649754188307,0.649681307391,0.649608420502,0.649535527643,0.649462628813,0.649389724013,0.649316813244,0.649243896507,0.649170973802,0.64909804513,0.649025110492,0.648952169888,0.648879223319,0.648806270786,0.648733312289,0.648660347829,0.648587377406,0.648514401022,0.648441418677,0.648368430372,0.648295436107,0.648222435882,0.6481494297,0.64807641756,0.648003399463,0.64793037541,0.647857345401,0.647784309437,0.647711267519,0.647638219647,0.647565165822,0.647492106045,0.647419040316,0.647345968637,0.647272891007,0.647199807427,0.647126717899,0.647053622422,0.646980520998,0.646907413627,0.646834300309,0.646761181046,0.646688055839,0.646614924687,0.646541787591,0.646468644552,0.646395495572,0.64632234065,0.646249179787,0.646176012983,0.646102840241,0.646029661559,0.645956476939,0.645883286382,0.645810089888,0.645736887458,0.645663679092,0.645590464792,0.645517244557,0.645444018389,0.645370786288,0.645297548255,0.645224304291,0.645151054395,0.64507779857,0.645004536816,0.644931269132,0.644857995521,0.644784715982,0.644711430516,0.644638139125,0.644564841807,0.644491538566,0.6444182294,0.644344914311,0.644271593299,0.644198266365,0.64412493351,0.644051594734,0.643978250039,0.643904899424,0.64383154289,0.643758180438,0.643684812069,0.643611437784,0.643538057582,0.643464671465,0.643391279434,0.643317881489,0.64324447763,0.643171067859,0.643097652176,0.643024230582,0.642950803077,0.642877369662,0.642803930339,0.642730485106,0.642657033966,0.642583576919,0.642510113965,0.642436645105,0.642363170341,0.642289689671,0.642216203098,0.642142710622,0.642069212244,0.641995707963,0.641922197782,0.6418486817,0.641775159719,0.641701631838,0.641628098059,0.641554558382,0.641481012809,0.641407461338,0.641333903973,0.641260340712,0.641186771557,0.641113196508,0.641039615566,0.640966028732,0.640892436007,0.64081883739,0.640745232883,0.640671622487,0.640598006201,0.640524384028,0.640450755966,0.640377122018,0.640303482184,0.640229836464,0.64015618486,0.640082527371,0.640008863998,0.639935194743,0.639861519606,0.639787838587,0.639714151688,0.639640458908,0.639566760249,0.639493055711,0.639419345295,0.639345629002,0.639271906831,0.639198178785,0.639124444864,0.639050705068,0.638976959397,0.638903207854,0.638829450437,0.638755687149,0.63868191799,0.63860814296,0.638534362059,0.63846057529,0.638386782652,0.638312984146,0.638239179773,0.638165369533,0.638091553428,0.638017731457,0.637943903622,0.637870069923,0.63779623036,0.637722384936,0.637648533649,0.637574676501,0.637500813493,0.637426944625,0.637353069898,0.637279189313,0.63720530287,0.637131410569,0.637057512413,0.636983608401,0.636909698533,0.636835782812,0.636761861236,0.636687933808,0.636614000527,0.636540061395,0.636466116412,0.636392165579,0.636318208896,0.636244246364,0.636170277984,0.636096303756,0.636022323682,0.635948337761,0.635874345995,0.635800348384,0.635726344929,0.63565233563,0.635578320489,0.635504299505,0.63543027268,0.635356240015,0.635282201509,0.635208157164,0.63513410698,0.635060050958,0.634985989099,0.634911921403,0.634837847872,0.634763768504,0.634689683303,0.634615592267,0.634541495398,0.634467392697,0.634393284164,0.634319169799,0.634245049604,0.634170923579,0.634096791725,0.634022654043,0.633948510532,0.633874361195,0.633800206031,0.633726045041,0.633651878227,0.633577705588,0.633503527125,0.633429342839,0.633355152731,0.633280956801,0.63320675505,0.633132547479,0.633058334088,0.632984114878,0.632909889851,0.632835659005,0.632761422343,0.632687179864,0.63261293157,0.632538677461,0.632464417538,0.632390151801,0.632315880252,0.63224160289,0.632167319717,0.632093030734,0.63201873594,0.631944435337,0.631870128925,0.631795816705,0.631721498678,0.631647174844,0.631572845204,0.631498509759,0.631424168509,0.631349821456,0.631275468599,0.63120110994,0.631126745478,0.631052375216,0.630977999153,0.63090361729,0.630829229628,0.630754836168,0.63068043691,0.630606031855,0.630531621003,0.630457204356,0.630382781914,0.630308353677,0.630233919647,0.630159479824,0.630085034208,0.630010582801,0.629936125603,0.629861662614,0.629787193837,0.62971271927,0.629638238915,0.629563752772,0.629489260843,0.629414763128,0.629340259627,0.629265750341,0.629191235272,0.629116714419,0.629042187783,0.628967655365,0.628893117166,0.628818573186,0.628744023427,0.628669467888,0.62859490657,0.628520339475,0.628445766602,0.628371187953,0.628296603527,0.628222013327,0.628147417352,0.628072815604,0.627998208082,0.627923594788,0.627848975722,0.627774350885,0.627699720278,0.627625083901,0.627550441755,0.627475793841,0.627401140159,0.62732648071,0.627251815495,0.627177144515,0.627102467769,0.627027785259,0.626953096986,0.62687840295,0.626803703152,0.626728997592,0.626654286272,0.626579569192,0.626504846352,0.626430117753,0.626355383397,0.626280643283,0.626205897412,0.626131145786,0.626056388404,0.625981625268,0.625906856378,0.625832081735,0.625757301339,0.625682515191,0.625607723292,0.625532925643,0.625458122244,0.625383313096,0.625308498199,0.625233677555,0.625158851164,0.625084019026,0.625009181143,0.624934337515,0.624859488142,0.624784633026,0.624709772168,0.624634905566,0.624560033224,0.62448515514,0.624410271317,0.624335381754,0.624260486452,0.624185585412,0.624110678635,0.624035766121,0.623960847871,0.623885923886,0.623810994166,0.623736058713,0.623661117526,0.623586170606,0.623511217955,0.623436259572,0.623361295459,0.623286325616,0.623211350044,0.623136368744,0.623061381715,0.62298638896,0.622911390479,0.622836386271,0.622761376339,0.622686360683,0.622611339302,0.622536312199,0.622461279374,0.622386240827,0.62231119656,0.622236146572,0.622161090865,0.622086029439,0.622010962295,0.621935889433,0.621860810855,0.621785726561,0.621710636551,0.621635540827,0.621560439389,0.621485332238,0.621410219374,0.621335100798,0.621259976511,0.621184846514,0.621109710806,0.62103456939,0.620959422265,0.620884269433,0.620809110893,0.620733946647,0.620658776696,0.620583601039,0.620508419679,0.620433232614,0.620358039847,0.620282841378,0.620207637207,0.620132427335,0.620057211763,0.619981990492,0.619906763522,0.619831530854,0.619756292488,0.619681048426,0.619605798668,0.619530543215,0.619455282067,0.619380015225,0.61930474269,0.619229464462,0.619154180543,0.619078890932,0.619003595631,0.618928294641,0.618852987961,0.618777675593,0.618702357537,0.618627033794,0.618551704365,0.61847636925,0.618401028451,0.618325681967,0.6182503298,0.61817497195,0.618099608417,0.618024239204,0.617948864309,0.617873483735,0.617798097481,0.617722705548,0.617647307938,0.61757190465,0.617496495686,0.617421081045,0.61734566073,0.61727023474,0.617194803076,0.617119365739,0.61704392273,0.616968474049,0.616893019697,0.616817559674,0.616742093982,0.616666622621,0.616591145592,0.616515662895,0.616440174531,0.616364680501,0.616289180805,0.616213675445,0.616138164421,0.616062647733,0.615987125382,0.61591159737,0.615836063696,0.615760524361,0.615684979367,0.615609428713,0.615533872401,0.615458310431,0.615382742804,0.61530716952,0.615231590581,0.615156005986,0.615080415737,0.615004819834,0.614929218279,0.614853611071,0.614777998211,0.614702379701,0.61462675554,0.61455112573,0.614475490271,0.614399849164,0.61432420241,0.614248550008,0.614172891961,0.614097228268,0.614021558931,0.61394588395,0.613870203325,0.613794517058,0.613718825149,0.613643127599,0.613567424408,0.613491715578,0.613416001109,0.613340281001,0.613264555255,0.613188823873,0.613113086854,0.613037344199,0.61296159591,0.612885841986,0.612810082429,0.61273431724,0.612658546417,0.612582769964,0.61250698788,0.612431200166,0.612355406822,0.61227960785,0.61220380325,0.612127993022,0.612052177169,0.611976355689,0.611900528584,0.611824695854,0.611748857501,0.611673013525,0.611597163926,0.611521308706,0.611445447865,0.611369581403,0.611293709322,0.611217831622,0.611141948304,0.611066059369,0.610990164816,0.610914264648,0.610838358864,0.610762447465,0.610686530453,0.610610607827,0.610534679588,0.610458745738,0.610382806276,0.610306861204,0.610230910522,0.610154954231,0.610078992332,0.610003024825,0.60992705171,0.60985107299,0.609775088664,0.609699098733,0.609623103198,0.609547102059,0.609471095317,0.609395082973,0.609319065028,0.609243041482,0.609167012336,0.609090977591,0.609014937247,0.608938891305,0.608862839766,0.608786782631,0.608710719899,0.608634651573,0.608558577652,0.608482498137,0.608406413029,0.608330322329,0.608254226037,0.608178124155,0.608102016682,0.608025903619,0.607949784968,0.607873660728,0.607797530901,0.607721395488,0.607645254488,0.607569107903,0.607492955733,0.607416797979,0.607340634643,0.607264465723,0.607188291222,0.607112111139,0.607035925476,0.606959734234,0.606883537412,0.606807335012,0.606731127035,0.60665491348,0.606578694349,0.606502469643,0.606426239361,0.606350003506,0.606273762077,0.606197515076,0.606121262502,0.606045004357,0.605968740642,0.605892471356,0.605816196502,0.605739916078,0.605663630087,0.605587338529,0.605511041404,0.605434738714,0.605358430459,0.605282116639,0.605205797255,0.605129472309,0.605053141801,0.604976805731,0.6049004641,0.604824116909,0.604747764159,0.60467140585,0.604595041983,0.604518672558,0.604442297577,0.60436591704,0.604289530948,0.604213139302,0.604136742101,0.604060339348,0.603983931042,0.603907517184,0.603831097776,0.603754672817,0.603678242308,0.603601806251,0.603525364646,0.603448917493,0.603372464793,0.603296006547,0.603219542756,0.60314307342,0.60306659854,0.602990118117,0.602913632152,0.602837140644,0.602760643596,0.602684141007,0.602607632878,0.60253111921,0.602454600004,0.60237807526,0.602301544979,0.602225009162,0.60214846781,0.602071920922,0.601995368501,0.601918810546,0.601842247059,0.601765678039,0.601689103488,0.601612523407,0.601535937795,0.601459346655,0.601382749986,0.601306147789,0.601229540065,0.601152926815,0.601076308039,0.600999683738,0.600923053913,0.600846418564,0.600769777693,0.600693131299,0.600616479384,0.600539821948,0.600463158992,0.600386490517,0.600309816523,0.600233137011,0.600156451982,0.600079761437,0.600003065375,0.599926363799,0.599849656708,0.599772944104,0.599696225986,0.599619502356,0.599542773215,0.599466038563,0.599389298401,0.599312552729,0.599235801548,0.59915904486,0.599082282664,0.599005514961,0.598928741752,0.598851963039,0.59877517882,0.598698389098,0.598621593873,0.598544793146,0.598467986916,0.598391175186,0.598314357955,0.598237535225,0.598160706996,0.598083873269,0.598007034045,0.597930189323,0.597853339106,0.597776483393,0.597699622186,0.597622755484,0.59754588329,0.597469005603,0.597392122424,0.597315233754,0.597238339593,0.597161439943,0.597084534804,0.597007624177,0.596930708062,0.59685378646,0.596776859373,0.596699926799,0.596622988741,0.596546045199,0.596469096174,0.596392141666,0.596315181676,0.596238216205,0.596161245253,0.596084268822,0.596007286911,0.595930299522,0.595853306656,0.595776308312,0.595699304492,0.595622295197,0.595545280427,0.595468260183,0.595391234465,0.595314203275,0.595237166612,0.595160124479,0.595083076875,0.5950060238,0.594928965257,0.594851901245,0.594774831766,0.594697756819,0.594620676407,0.594543590528,0.594466499185,0.594389402377,0.594312300106,0.594235192372,0.594158079176,0.594080960519,0.594003836401,0.593926706823,0.593849571785,0.59377243129,0.593695285336,0.593618133925,0.593540977058,0.593463814735,0.593386646958,0.593309473725,0.59323229504,0.593155110901,0.593077921311,0.593000726268,0.592923525776,0.592846319833,0.59276910844,0.5926918916,0.592614669311,0.592537441575,0.592460208393,0.592382969764,0.592305725691,0.592228476174,0.592151221212,0.592073960808,0.591996694962,0.591919423674,0.591842146946,0.591764864777,0.591687577169,0.591610284122,0.591532985637,0.591455681715,0.591378372357,0.591301057562,0.591223737333,0.591146411669,0.591069080572,0.590991744041,0.590914402078,0.590837054684,0.590759701859,0.590682343604,0.590604979919,0.590527610805,0.590450236264,0.590372856295,0.5902954709,0.590218080079,0.590140683832,0.590063282161,0.589985875067,0.589908462549,0.589831044609,0.589753621248,0.589676192466,0.589598758263,0.589521318641,0.5894438736,0.589366423141,0.589288967265,0.589211505973,0.589134039264,0.58905656714,0.588979089602,0.58890160665,0.588824118285,0.588746624507,0.588669125318,0.588591620718,0.588514110708,0.588436595288,0.588359074459,0.588281548223,0.588204016579,0.588126479528,0.588048937072,0.58797138921,0.587893835943,0.587816277273,0.5877387132,0.587661143725,0.587583568848,0.587505988569,0.587428402891,0.587350811813,0.587273215337,0.587195613462,0.58711800619,0.587040393521,0.586962775456,0.586885151996,0.586807523142,0.586729888893,0.586652249252,0.586574604218,0.586496953793,0.586419297976,0.58634163677,0.586263970174,0.586186298189,0.586108620815,0.586030938055,0.585953249908,0.585875556375,0.585797857456,0.585720153154,0.585642443467,0.585564728397,0.585487007945,0.585409282111,0.585331550896,0.585253814301,0.585176072327,0.585098324973,0.585020572242,0.584942814133,0.584865050648,0.584787281786,0.584709507549,0.584631727938,0.584553942953,0.584476152595,0.584398356864,0.584320555762,0.584242749289,0.584164937446,0.584087120233,0.584009297651,0.583931469701,0.583853636384,0.5837757977,0.583697953651,0.583620104236,0.583542249456,0.583464389313,0.583386523806,0.583308652938,0.583230776707,0.583152895116,0.583075008164,0.582997115853,0.582919218184,0.582841315156,0.582763406771,0.582685493029,0.582607573931,0.582529649478,0.58245171967,0.582373784509,0.582295843995,0.582217898128,0.58213994691,0.582061990341,0.581984028421,0.581906061153,0.581828088535,0.581750110569,0.581672127256,0.581594138597,0.581516144591,0.581438145241,0.581360140546,0.581282130507,0.581204115125,0.581126094401,0.581048068335,0.580970036929,0.580892000182,0.580813958096,0.580735910671,0.580657857908,0.580579799808,0.580501736371,0.580423667598,0.580345593491,0.580267514049,0.580189429273,0.580111339164,0.580033243723,0.57995514295,0.579877036847,0.579798925413,0.579720808651,0.579642686559,0.579564559139,0.579486426393,0.579408288319,0.57933014492,0.579251996196,0.579173842148,0.579095682775,0.57901751808,0.578939348063,0.578861172724,0.578782992065,0.578704806085,0.578626614786,0.578548418169,0.578470216233,0.578392008981,0.578313796412,0.578235578527,0.578157355327,0.578079126813,0.578000892985,0.577922653845,0.577844409392,0.577766159628,0.577687904553,0.577609644168,0.577531378474,0.577453107472,0.577374831161,0.577296549544,0.57721826262,0.57713997039,0.577061672856,0.576983370017,0.576905061875,0.57682674843,0.576748429682,0.576670105634,0.576591776285,0.576513441636,0.576435101688,0.576356756441,0.576278405897,0.576200050055,0.576121688917,0.576043322484,0.575964950756,0.575886573734,0.575808191418,0.575729803809,0.575651410909,0.575573012717,0.575494609235,0.575416200463,0.575337786402,0.575259367052,0.575180942415,0.575102512491,0.57502407728,0.574945636784,0.574867191004,0.574788739939,0.574710283591,0.57463182196,0.574553355048,0.574474882854,0.57439640538,0.574317922626,0.574239434593,0.574160941282,0.574082442693,0.574003938827,0.573925429686,0.573846915269,0.573768395577,0.573689870611,0.573611340372,0.57353280486,0.573454264077,0.573375718023,0.573297166698,0.573218610104,0.57314004824,0.573061481109,0.57298290871,0.572904331045,0.572825748113,0.572747159916,0.572668566454,0.572589967729,0.572511363741,0.57243275449,0.572354139977,0.572275520204,0.57219689517,0.572118264877,0.572039629325,0.571960988515,0.571882342447,0.571803691123,0.571725034543,0.571646372708,0.571567705618,0.571489033275,0.571410355679,0.57133167283,0.57125298473,0.571174291379,0.571095592778,0.571016888928,0.570938179828,0.570859465481,0.570780745887,0.570702021046,0.57062329096,0.570544555628,0.570465815052,0.570387069232,0.57030831817,0.570229561865,0.570150800319,0.570072033533,0.569993261506,0.56991448424,0.569835701736,0.569756913993,0.569678121014,0.569599322798,0.569520519347,0.569441710661,0.56936289674,0.569284077586,0.5692052532,0.569126423581,0.569047588731,0.568968748651,0.56888990334,0.568811052801,0.568732197033,0.568653336037,0.568574469815,0.568495598366,0.568416721692,0.568337839793,0.56825895267,0.568180060324,0.568101162755,0.568022259964,0.567943351952,0.56786443872,0.567785520268,0.567706596597,0.567627667708,0.567548733601,0.567469794278,0.567390849738,0.567311899983,0.567232945014,0.567153984831,0.567075019434,0.566996048825,0.566917073004,0.566838091973,0.566759105731,0.56668011428,0.566601117619,0.566522115751,0.566443108675,0.566364096393,0.566285078905,0.566206056212,0.566127028314,0.566047995212,0.565968956908,0.565889913401,0.565810864693,0.565731810784,0.565652751674,0.565573687366,0.565494617859,0.565415543154,0.565336463251,0.565257378153,0.565178287858,0.565099192369,0.565020091685,0.564940985808,0.564861874738,0.564782758476,0.564703637022,0.564624510378,0.564545378544,0.564466241521,0.564387099309,0.564307951909,0.564228799323,0.56414964155,0.564070478592,0.563991310449,0.563912137122,0.563832958611,0.563753774918,0.563674586043,0.563595391987,0.56351619275,0.563436988334,0.563357778739,0.563278563965,0.563199344014,0.563120118886,0.563040888582,0.562961653102,0.562882412448,0.56280316662,0.562723915619,0.562644659446,0.562565398101,0.562486131584,0.562406859898,0.562327583042,0.562248301017,0.562169013824,0.562089721464,0.562010423937,0.561931121245,0.561851813387,0.561772500365,0.561693182179,0.56161385883,0.561534530319,0.561455196646,0.561375857813,0.561296513819,0.561217164666,0.561137810355,0.561058450886,0.560979086259,0.560899716477,0.560820341538,0.560740961445,0.560661576197,0.560582185796,0.560502790242,0.560423389537,0.56034398368,0.560264572672,0.560185156514,0.560105735208,0.560026308753,0.55994687715,0.559867440401,0.559787998505,0.559708551464,0.559629099278,0.559549641948,0.559470179475,0.559390711859,0.559311239102,0.559231761203,0.559152278164,0.559072789986,0.558993296668,0.558913798213,0.55883429462,0.55875478589,0.558675272025,0.558595753024,0.558516228889,0.55843669962,0.558357165218,0.558277625683,0.558198081017,0.558118531221,0.558038976294,0.557959416237,0.557879851053,0.55780028074,0.5577207053,0.557641124733,0.557561539041,0.557481948224,0.557402352283,0.557322751218,0.55724314503,0.55716353372,0.557083917289,0.557004295737,0.556924669066,0.556845037275,0.556765400366,0.556685758339,0.556606111196,0.556526458936,0.55644680156,0.55636713907,0.556287471466,0.556207798749,0.556128120919,0.556048437977,0.555968749924,0.555889056761,0.555809358488,0.555729655107,0.555649946617,0.55557023302,0.555490514316,0.555410790506,0.555331061591,0.555251327571,0.555171588448,0.555091844222,0.555012094893,0.554932340463,0.554852580932,0.554772816301,0.55469304657,0.554613271741,0.554533491814,0.55445370679,0.55437391667,0.554294121454,0.554214321142,0.554134515737,0.554054705238,0.553974889647,0.553895068963,0.553815243188,0.553735412323,0.553655576367,0.553575735323,0.55349588919,0.55341603797,0.553336181663,0.55325632027,0.553176453791,0.553096582227,0.55301670558,0.552936823849,0.552856937036,0.552777045142,0.552697148166,0.55261724611,0.552537338974,0.55245742676,0.552377509467,0.552297587097,0.552217659651,0.552137727129,0.552057789531,0.551977846859,0.551897899114,0.551817946295,0.551737988405,0.551658025443,0.55157805741,0.551498084307,0.551418106135,0.551338122894,0.551258134586,0.551178141211,0.551098142769,0.551018139262,0.55093813069,0.550858117053,0.550778098354,0.550698074592,0.550618045768,0.550538011882,0.550457972937,0.550377928931,0.550297879867,0.550217825744,0.550137766564,0.550057702327,0.549977633035,0.549897558687,0.549817479284,0.549737394827,0.549657305318,0.549577210756,0.549497111143,0.549417006478,0.549336896764,0.549256782,0.549176662188,0.549096537327,0.54901640742,0.548936272466,0.548856132466,0.548775987421,0.548695837333,0.5486156822,0.548535522025,0.548455356808,0.548375186549,0.54829501125,0.548214830912,0.548134645534,0.548054455118,0.547974259664,0.547894059173,0.547813853646,0.547733643084,0.547653427487,0.547573206857,0.547492981193,0.547412750496,0.547332514768,0.547252274009,0.54717202822,0.547091777401,0.547011521554,0.546931260678,0.546850994775,0.546770723846,0.546690447891,0.546610166911,0.546529880906,0.546449589878,0.546369293827,0.546288992754,0.54620868666,0.546128375545,0.54604805941,0.545967738256,0.545887412083,0.545807080893,0.545726744686,0.545646403463,0.545566057224,0.54548570597,0.545405349703,0.545324988422,0.545244622129,0.545164250824,0.545083874508,0.545003493181,0.544923106845,0.544842715501,0.544762319148,0.544681917788,0.544601511421,0.544521100048,0.544440683671,0.544360262288,0.544279835903,0.544199404514,0.544118968123,0.544038526731,0.543958080338,0.543877628945,0.543797172553,0.543716711162,0.543636244774,0.543555773389,0.543475297007,0.54339481563,0.543314329258,0.543233837893,0.543153341534,0.543072840182,0.542992333838,0.542911822504,0.542831306179,0.542750784865,0.542670258561,0.54258972727,0.542509190991,0.542428649726,0.542348103474,0.542267552238,0.542186996017,0.542106434812,0.542025868625,0.541945297455,0.541864721304,0.541784140172,0.541703554061,0.54162296297,0.5415423669,0.541461765853,0.541381159829,0.541300548828,0.541219932853,0.541139311902,0.541058685977,0.540978055079,0.540897419208,0.540816778366,0.540736132552,0.540655481768,0.540574826015,0.540494165293,0.540413499602,0.540332828945,0.54025215332,0.54017147273,0.540090787174,0.540010096655,0.539929401171,0.539848700725,0.539767995316,0.539687284946,0.539606569616,0.539525849325,0.539445124075,0.539364393867,0.539283658701,0.539202918578,0.539122173499,0.539041423464,0.538960668474,0.538879908531,0.538799143634,0.538718373785,0.538637598984,0.538556819232,0.538476034529,0.538395244877,0.538314450277,0.538233650728,0.538152846232,0.538072036789,0.5379912224,0.537910403067,0.537829578789,0.537748749567,0.537667915402,0.537587076296,0.537506232248,0.537425383259,0.53734452933,0.537263670463,0.537182806656,0.537101937913,0.537021064232,0.536940185615,0.536859302062,0.536778413575,0.536697520154,0.5366166218,0.536535718513,0.536454810295,0.536373897146,0.536292979066,0.536212056057,0.536131128119,0.536050195253,0.53596925746,0.53588831474,0.535807367095,0.535726414524,0.53564545703,0.535564494611,0.53548352727,0.535402555007,0.535321577823,0.535240595718,0.535159608693,0.535078616749,0.534997619887,0.534916618107,0.534835611411,0.534754599798,0.53467358327,0.534592561827,0.534511535471,0.534430504201,0.534349468019,0.534268426926,0.534187380921,0.534106330006,0.534025274182,0.53394421345,0.533863147809,0.533782077261,0.533701001807,0.533619921447,0.533538836183,0.533457746014,0.533376650941,0.533295550966,0.533214446089,0.533133336311,0.533052221633,0.532971102054,0.532889977577,0.532808848202,0.532727713929,0.532646574759,0.532565430693,0.532484281733,0.532403127877,0.532321969128,0.532240805486,0.532159636952,0.532078463526,0.531997285209,0.531916102003,0.531834913907,0.531753720923,0.531672523051,0.531591320292,0.531510112646,0.531428900115,0.5313476827,0.5312664604,0.531185233217,0.531104001151,0.531022764204,0.530941522376,0.530860275667,0.530779024079,0.530697767612,0.530616506266,0.530535240044,0.530453968945,0.53037269297,0.53029141212,0.530210126396,0.530128835798,0.530047540328,0.529966239985,0.529884934771,0.529803624686,0.529722309732,0.529640989908,0.529559665216,0.529478335657,0.52939700123,0.529315661938,0.52923431778,0.529152968758,0.529071614872,0.528990256122,0.52890889251,0.528827524037,0.528746150703,0.528664772508,0.528583389455,0.528502001542,0.528420608772,0.528339211145,0.528257808661,0.528176401321,0.528094989127,0.528013572079,0.527932150177,0.527850723423,0.527769291816,0.527687855359,0.527606414051,0.527524967893,0.527443516887,0.527362061032,0.52728060033,0.527199134782,0.527117664387,0.527036189148,0.526954709064,0.526873224136,0.526791734365,0.526710239753,0.526628740298,0.526547236004,0.526465726869,0.526384212895,0.526302694083,0.526221170433,0.526139641946,0.526058108623,0.525976570464,0.525895027471,0.525813479644,0.525731926984,0.525650369491,0.525568807167,0.525487240012,0.525405668026,0.525324091212,0.525242509568,0.525160923097,0.525079331798,0.524997735673,0.524916134723,0.524834528947,0.524752918347,0.524671302924,0.524589682678,0.524508057611,0.524426427722,0.524344793013,0.524263153484,0.524181509136,0.52409985997,0.524018205986,0.523936547186,0.52385488357,0.523773215139,0.523691541893,0.523609863834,0.523528180962,0.523446493278,0.523364800782,0.523283103476,0.523201401359,0.523119694434,0.5230379827,0.522956266159,0.52287454481,0.522792818656,0.522711087696,0.522629351931,0.522547611363,0.522465865991,0.522384115817,0.522302360841,0.522220601065,0.522138836488,0.522057067112,0.521975292937,0.521893513965,0.521811730195,0.521729941629,0.521648148267,0.52156635011,0.521484547159,0.521402739415,0.521320926879,0.52123910955,0.52115728743,0.52107546052,0.52099362882,0.520911792332,0.520829951055,0.520748104991,0.52066625414,0.520584398504,0.520502538082,0.520420672876,0.520338802887,0.520256928114,0.52017504856,0.520093164224,0.520011275108,0.519929381211,0.519847482536,0.519765579082,0.519683670851,0.519601757843,0.519519840059,0.5194379175,0.519355990166,0.519274058058,0.519192121177,0.519110179524,0.519028233099,0.518946281904,0.518864325938,0.518782365203,0.5187003997,0.518618429429,0.518536454391,0.518454474586,0.518372490016,0.518290500681,0.518208506583,0.518126507721,0.518044504096,0.51796249571,0.517880482562,0.517798464655,0.517716441988,0.517634414562,0.517552382378,0.517470345437,0.51738830374,0.517306257287,0.517224206079,0.517142150116,0.5170600894,0.516978023932,0.516895953711,0.51681387874,0.516731799018,0.516649714546,0.516567625325,0.516485531356,0.51640343264,0.516321329177,0.516239220968,0.516157108014,0.516074990315,0.515992867873,0.515910740688,0.515828608761,0.515746472092,0.515664330683,0.515582184534,0.515500033646,0.515417878019,0.515335717655,0.515253552554,0.515171382717,0.515089208145,0.515007028838,0.514924844797,0.514842656023,0.514760462517,0.514678264279,0.51459606131,0.514513853611,0.514431641183,0.514349424027,0.514267202142,0.514184975531,0.514102744193,0.51402050813,0.513938267342,0.51385602183,0.513773771595,0.513691516637,0.513609256958,0.513526992557,0.513444723437,0.513362449596,0.513280171038,0.513197887761,0.513115599767,0.513033307056,0.51295100963,0.512868707489,0.512786400634,0.512704089065,0.512621772783,0.51253945179,0.512457126086,0.512374795671,0.512292460546,0.512210120713,0.512127776172,0.512045426923,0.511963072967,0.511880714306,0.511798350939,0.511715982869,0.511633610094,0.511551232617,0.511468850438,0.511386463557,0.511304071976,0.511221675695,0.511139274715,0.511056869037,0.510974458661,0.510892043589,0.51080962382,0.510727199357,0.510644770198,0.510562336346,0.510479897801,0.510397454564,0.510315006635,0.510232554016,0.510150096707,0.510067634708,0.509985168021,0.509902696647,0.509820220585,0.509737739837,0.509655254404,0.509572764287,0.509490269485,0.50940777,0.509325265833,0.509242756984,0.509160243455,0.509077725245,0.508995202356,0.508912674789,0.508830142543,0.508747605621,0.508665064022,0.508582517748,0.508499966799,0.508417411175,0.508334850879,0.50825228591,0.50816971627,0.508087141958,0.508004562976,0.507921979325,0.507839391005,0.507756798017,0.507674200362,0.50759159804,0.507508991053,0.507426379401,0.507343763084,0.507261142105,0.507178516462,0.507095886158,0.507013251193,0.506930611567,0.506847967282,0.506765318338,0.506682664736,0.506600006476,0.50651734356,0.506434675988,0.506352003761,0.50626932688,0.506186645345,0.506103959158,0.506021268318,0.505938572827,0.505855872686,0.505773167895,0.505690458455,0.505607744367,0.505525025632,0.50544230225,0.505359574222,0.505276841548,0.505194104231,0.505111362269,0.505028615665,0.504945864419,0.504863108531,0.504780348003,0.504697582835,0.504614813028,0.504532038582,0.504449259499,0.50436647578,0.504283687424,0.504200894433,0.504118096807,0.504035294548,0.503952487655,0.503869676131,0.503786859975,0.503704039188,0.503621213772,0.503538383726,0.503455549051,0.50337270975,0.503289865821,0.503207017266,0.503124164086,0.503041306281,0.502958443852,0.5028755768,0.502792705126,0.50270982883,0.502626947914,0.502544062377,0.502461172221,0.502378277447,0.502295378055,0.502212474046,0.50212956542,0.50204665218,0.501963734324,0.501880811855,0.501797884772,0.501714953077,0.50163201677,0.501549075853,0.501466130325,0.501383180188,0.501300225442,0.501217266089,0.501134302128,0.501051333561,0.500968360389,0.500885382611,0.50080240023,0.500719413245,0.500636421658,0.500553425469,0.50047042468,0.50038741929,0.5003044093,0.500221394712,0.500138375526,0.500055351742,0.499972323363,0.499889290387,0.499806252817,0.499723210653,0.499640163895,0.499557112545,0.499474056603,0.49939099607,0.499307930946,0.499224861234,0.499141786932,0.499058708042,0.498975624565,0.498892536502,0.498809443853,0.498726346619,0.4986432448,0.498560138399,0.498477027414,0.498393911848,0.498310791701,0.498227666973,0.498144537665,0.498061403779,0.497978265315,0.497895122273,0.497811974655,0.497728822461,0.497645665692,0.497562504349,0.497479338433,0.497396167943,0.497312992882,0.497229813249,0.497146629046,0.497063440274,0.496980246932,0.496897049023,0.496813846546,0.496730639502,0.496647427893,0.496564211718,0.496480990979,0.496397765677,0.496314535811,0.496231301384,0.496148062396,0.496064818847,0.495981570738,0.495898318071,0.495815060845,0.495731799061,0.495648532722,0.495565261826,0.495481986375,0.49539870637,0.495315421811,0.495232132699,0.495148839035,0.49506554082,0.494982238054,0.494898930739,0.494815618875,0.494732302462,0.494648981502,0.494565655995,0.494482325942,0.494398991344,0.494315652202,0.494232308516,0.494148960287,0.494065607516,0.493982250204,0.493898888351,0.493815521958,0.493732151026,0.493648775556,0.493565395549,0.493482011004,0.493398621924,0.493315228309,0.493231830159,0.493148427475,0.493065020259,0.49298160851,0.49289819223,0.492814771419,0.492731346079,0.492647916209,0.492564481811,0.492481042886,0.492397599433,0.492314151455,0.492230698951,0.492147241923,0.492063780372,0.491980314297,0.4918968437,0.491813368582,0.491729888943,0.491646404784,0.491562916107,0.49147942291,0.491395925197,0.491312422966,0.491228916219,0.491145404957,0.491061889181,0.490978368891,0.490894844088,0.490811314773,0.490727780946,0.490644242608,0.490560699761,0.490477152405,0.49039360054,0.490310044167,0.490226483288,0.490142917903,0.490059348012,0.489975773617,0.489892194719,0.489808611317,0.489725023413,0.489641431007,0.489557834101,0.489474232695,0.48939062679,0.489307016386,0.489223401485,0.489139782087,0.489056158193,0.488972529804,0.48888889692,0.488805259542,0.488721617671,0.488637971309,0.488554320454,0.488470665109,0.488387005274,0.48830334095,0.488219672138,0.488135998838,0.488052321051,0.487968638778,0.487884952019,0.487801260776,0.48771756505,0.48763386484,0.487550160148,0.487466450975,0.487382737321,0.487299019187,0.487215296574,0.487131569483,0.487047837914,0.486964101868,0.486880361346,0.486796616349,0.486712866877,0.486629112932,0.486545354513,0.486461591622,0.48637782426,0.486294052427,0.486210276124,0.486126495353,0.486042710112,0.485958920404,0.48587512623,0.485791327589,0.485707524483,0.485623716912,0.485539904878,0.485456088381,0.485372267421,0.485288442,0.485204612119,0.485120777777,0.485036938976,0.484953095717,0.484869248001,0.484785395827,0.484701539198,0.484617678113,0.484533812574,0.484449942581,0.484366068135,0.484282189237,0.484198305888,0.484114418087,0.484030525837,0.483946629138,0.483862727991,0.483778822396,0.483694912354,0.483610997866,0.483527078933,0.483443155555,0.483359227734,0.48327529547,0.483191358763,0.483107417616,0.483023472027,0.482939521999,0.482855567532,0.482771608626,0.482687645283,0.482603677503,0.482519705287,0.482435728636,0.482351747551,0.482267762031,0.482183772079,0.482099777695,0.482015778879,0.481931775633,0.481847767957,0.481763755852,0.481679739319,0.481595718358,0.48151169297,0.481427663157,0.481343628918,0.481259590255,0.481175547168,0.481091499659,0.481007447727,0.480923391374,0.4808393306,0.480755265407,0.480671195795,0.480587121764,0.480503043316,0.480418960451,0.480334873171,0.480250781475,0.480166685365,0.480082584841,0.479998479905,0.479914370556,0.479830256797,0.479746138626,0.479662016046,0.479577889057,0.47949375766,0.479409621856,0.479325481644,0.479241337027,0.479157188005,0.479073034579,0.478988876749,0.478904714516,0.478820547881,0.478736376845,0.478652201409,0.478568021573,0.478483837338,0.478399648705,0.478315455675,0.478231258248,0.478147056425,0.478062850207,0.477978639595,0.477894424589,0.477810205191,0.477725981401,0.47764175322,0.477557520648,0.477473283687,0.477389042337,0.477304796598,0.477220546473,0.477136291961,0.477052033063,0.47696776978,0.476883502114,0.476799230063,0.47671495363,0.476630672816,0.47654638762,0.476462098044,0.476377804088,0.476293505753,0.476209203041,0.476124895951,0.476040584485,0.475956268643,0.475871948427,0.475787623836,0.475703294872,0.475618961535,0.475534623827,0.475450281747,0.475365935297,0.475281584478,0.47519722929,0.475112869735,0.475028505812,0.474944137522,0.474859764868,0.474775387848,0.474691006464,0.474606620717,0.474522230608,0.474437836137,0.474353437305,0.474269034112,0.474184626561,0.474100214651,0.474015798383,0.473931377757,0.473846952776,0.473762523439,0.473678089748,0.473593651702,0.473509209303,0.473424762552,0.47334031145,0.473255855996,0.473171396192,0.473086932039,0.473002463538,0.472917990689,0.472833513493,0.47274903195,0.472664546063,0.47258005583,0.472495561254,0.472411062335,0.472326559073,0.47224205147,0.472157539526,0.472073023242,0.471988502619,0.471903977658,0.471819448359,0.471734914723,0.471650376751,0.471565834443,0.471481287802,0.471396736826,0.471312181517,0.471227621877,0.471143057904,0.471058489601,0.470973916969,0.470889340007,0.470804758717,0.470720173099,0.470635583155,0.470550988884,0.470466390289,0.470381787369,0.470297180125,0.470212568558,0.47012795267,0.47004333246,0.469958707929,0.469874079079,0.46978944591,0.469704808422,0.469620166617,0.469535520496,0.469450870058,0.469366215306,0.469281556239,0.469196892859,0.469112225165,0.46902755316,0.468942876844,0.468858196217,0.468773511281,0.468688822036,0.468604128483,0.468519430622,0.468434728455,0.468350021982,0.468265311204,0.468180596122,0.468095876736,0.468011153048,0.467926425058,0.467841692767,0.467756956176,0.467672215285,0.467587470095,0.467502720608,0.467417966823,0.467333208742,0.467248446365,0.467163679694,0.467078908728,0.466994133469,0.466909353917,0.466824570074,0.46673978194,0.466654989516,0.466570192802,0.466485391799,0.466400586509,0.466315776932,0.466230963068,0.466146144919,0.466061322486,0.465976495768,0.465891664767,0.465806829484,0.465721989919,0.465637146073,0.465552297948,0.465467445543,0.46538258886,0.465297727898,0.46521286266,0.465127993146,0.465043119357,0.464958241293,0.464873358955,0.464788472344,0.464703581461,0.464618686306,0.464533786881,0.464448883186,0.464363975222,0.464279062989,0.464194146489,0.464109225722,0.464024300689,0.463939371391,0.463854437828,0.463769500002,0.463684557913,0.463599611562,0.463514660949,0.463429706076,0.463344746944,0.463259783552,0.463174815902,0.463089843995,0.463004867831,0.462919887411,0.462834902736,0.462749913807,0.462664920624,0.462579923189,0.462494921502,0.462409915563,0.462324905375,0.462239890936,0.462154872249,0.462069849314,0.461984822131,0.461899790702,0.461814755028,0.461729715108,0.461644670945,0.461559622538,0.461474569888,0.461389512997,0.461304451865,0.461219386492,0.46113431688,0.46104924303,0.460964164941,0.460879082616,0.460793996054,0.460708905256,0.460623810224,0.460538710958,0.460453607459,0.460368499727,0.460283387764,0.46019827157,0.460113151146,0.460028026493,0.459942897611,0.459857764501,0.459772627165,0.459687485602,0.459602339814,0.459517189802,0.459432035566,0.459346877106,0.459261714425,0.459176547522,0.459091376398,0.459006201055,0.458921021492,0.458835837712,0.458750649713,0.458665457498,0.458580261067,0.458495060421,0.45840985556,0.458324646486,0.458239433199,0.4581542157,0.45806899399,0.457983768069,0.457898537938,0.457813303599,0.457728065051,0.457642822297,0.457557575335,0.457472324168,0.457387068796,0.457301809219,0.45721654544,0.457131277457,0.457046005273,0.456960728888,0.456875448302,0.456790163517,0.456704874533,0.456619581351,0.456534283972,0.456448982397,0.456363676626,0.45627836666,0.456193052501,0.456107734148,0.456022411602,0.455937084865,0.455851753937,0.455766418819,0.455681079512,0.455595736016,0.455510388333,0.455425036462,0.455339680406,0.455254320163,0.455168955737,0.455083587126,0.454998214333,0.454912837357,0.4548274562,0.454742070862,0.454656681344,0.454571287647,0.454485889772,0.454400487719,0.45431508149,0.454229671084,0.454144256504,0.454058837749,0.45397341482,0.453887987718,0.453802556445,0.453717121,0.453631681385,0.4535462376,0.453460789646,0.453375337524,0.453289881235,0.453204420779,0.453118956157,0.453033487371,0.45294801442,0.452862537306,0.452777056029,0.452691570591,0.452606080991,0.452520587231,0.452435089312,0.452349587234,0.452264080998,0.452178570605,0.452093056055,0.45200753735,0.451922014491,0.451836487477,0.45175095631,0.451665420991,0.45157988152,0.451494337898,0.451408790127,0.451323238206,0.451237682136,0.451152121919,0.451066557555,0.450980989045,0.45089541639,0.45080983959,0.450724258646,0.450638673559,0.45055308433,0.45046749096,0.450381893449,0.450296291799,0.450210686009,0.450125076081,0.450039462016,0.449953843814,0.449868221476,0.449782595003,0.449696964395,0.449611329655,0.449525690781,0.449440047776,0.449354400639,0.449268749372,0.449183093975,0.44909743445,0.449011770796,0.448926103016,0.448840431109,0.448754755076,0.448669074918,0.448583390637,0.448497702232,0.448412009704,0.448326313055,0.448240612285,0.448154907395,0.448069198386,0.447983485257,0.447897768012,0.447812046649,0.44772632117,0.447640591575,0.447554857866,0.447469120043,0.447383378108,0.447297632059,0.4472118819,0.447126127629,0.447040369249,0.44695460676,0.446868840162,0.446783069457,0.446697294645,0.446611515728,0.446525732705,0.446439945577,0.446354154346,0.446268359013,0.446182559577,0.44609675604,0.446010948403,0.445925136666,0.44583932083,0.445753500896,0.445667676865,0.445581848737,0.445496016514,0.445410180196,0.445324339783,0.445238495278,0.44515264668,0.44506679399,0.444980937209,0.444895076338,0.444809211377,0.444723342328,0.444637469191,0.444551591967,0.444465710657,0.444379825262,0.444293935782,0.444208042218,0.44412214457,0.444036242841,0.44395033703,0.443864427139,0.443778513167,0.443692595117,0.443606672988,0.443520746781,0.443434816498,0.443348882139,0.443262943705,0.443177001196,0.443091054614,0.443005103959,0.442919149232,0.442833190433,0.442747227565,0.442661260626,0.442575289619,0.442489314544,0.442403335401,0.442317352192,0.442231364918,0.442145373578,0.442059378174,0.441973378707,0.441887375178,0.441801367586,0.441715355934,0.441629340222,0.44154332045,0.44145729662,0.441371268732,0.441285236787,0.441199200785,0.441113160729,0.441027116617,0.440941068452,0.440855016234,0.440768959964,0.440682899642,0.440596835269,0.440510766847,0.440424694375,0.440338617856,0.440252537288,0.440166452675,0.440080364015,0.43999427131,0.43990817456,0.439822073767,0.439735968932,0.439649860054,0.439563747135,0.439477630176,0.439391509178,0.43930538414,0.439219255065,0.439133121952,0.439046984803,0.438960843618,0.438874698398,0.438788549145,0.438702395858,0.438616238539,0.438530077188,0.438443911806,0.438357742394,0.438271568952,0.438185391483,0.438099209985,0.438013024461,0.43792683491,0.437840641334,0.437754443734,0.43766824211,0.437582036463,0.437495826794,0.437409613103,0.437323395392,0.437237173661,0.437150947911,0.437064718143,0.436978484357,0.436892246555,0.436806004737,0.436719758904,0.436633509057,0.436547255196,0.436460997323,0.436374735438,0.436288469542,0.436202199635,0.436115925719,0.436029647794,0.435943365862,0.435857079922,0.435770789976,0.435684496025,0.435598198069,0.435511896108,0.435425590145,0.43533928018,0.435252966213,0.435166648245,0.435080326277,0.43499400031,0.434907670344,0.434821336381,0.434734998422,0.434648656466,0.434562310515,0.43447596057,0.434389606631,0.434303248699,0.434216886775,0.43413052086,0.434044150955,0.43395777706,0.433871399176,0.433785017304,0.433698631444,0.433612241599,0.433525847767,0.433439449951,0.433353048151,0.433266642367,0.433180232601,0.433093818853,0.433007401124,0.432920979416,0.432834553727,0.432748124061,0.432661690416,0.432575252795,0.432488811198,0.432402365625,0.432315916077,0.432229462556,0.432143005062,0.432056543596,0.431970078158,0.43188360875,0.431797135372,0.431710658025,0.43162417671,0.431537691427,0.431451202178,0.431364708963,0.431278211783,0.431191710639,0.431105205531,0.431018696461,0.430932183429,0.430845666436,0.430759145483,0.43067262057,0.430586091698,0.430499558869,0.430413022083,0.43032648134,0.430239936642,0.430153387989,0.430066835383,0.429980278823,0.429893718311,0.429807153847,0.429720585433,0.429634013069,0.429547436756,0.429460856494,0.429374272285,0.42928768413,0.429201092028,0.429114495981,0.42902789599,0.428941292055,0.428854684178,0.428768072359,0.428681456598,0.428594836897,0.428508213257,0.428421585678,0.428334954161,0.428248318707,0.428161679316,0.42807503599,0.427988388729,0.427901737534,0.427815082406,0.427728423345,0.427641760353,0.42755509343,0.427468422577,0.427381747795,0.427295069085,0.427208386447,0.427121699882,0.427035009391,0.426948314975,0.426861616634,0.42677491437,0.426688208183,0.426601498074,0.426514784044,0.426428066093,0.426341344223,0.426254618434,0.426167888727,0.426081155102,0.425994417562,0.425907676105,0.425820930734,0.425734181448,0.42564742825,0.425560671138,0.425473910116,0.425387145182,0.425300376338,0.425213603585,0.425126826924,0.425040046355,0.424953261879,0.424866473496,0.424779681209,0.424692885017,0.424606084922,0.424519280923,0.424432473023,0.424345661221,0.424258845519,0.424172025917,0.424085202416,0.423998375017,0.42391154372,0.423824708528,0.423737869439,0.423651026456,0.423564179578,0.423477328807,0.423390474144,0.423303615589,0.423216753143,0.423129886807,0.423043016581,0.422956142467,0.422869264466,0.422782382577,0.422695496802,0.422608607142,0.422521713598,0.422434816169,0.422347914858,0.422261009665,0.42217410059,0.422087187635,0.4220002708,0.421913350086,0.421826425494,0.421739497024,0.421652564679,0.421565628457,0.42147868836,0.42139174439,0.421304796545,0.421217844829,0.42113088924,0.421043929781,0.420956966452,0.420869999253,0.420783028186,0.42069605325,0.420609074448,0.42052209178,0.420435105247,0.420348114849,0.420261120587,0.420174122462,0.420087120475,0.420000114627,0.419913104918,0.419826091349,0.419739073922,0.419652052636,0.419565027493,0.419477998493,0.419390965638,0.419303928928,0.419216888363,0.419129843945,0.419042795675,0.418955743553,0.41886868758,0.418781627757,0.418694564084,0.418607496563,0.418520425194,0.418433349978,0.418346270916,0.418259188009,0.418172101257,0.418085010662,0.417997916223,0.417910817942,0.41782371582,0.417736609858,0.417649500055,0.417562386414,0.417475268935,0.417388147618,0.417301022464,0.417213893475,0.417126760651,0.417039623993,0.416952483502,0.416865339178,0.416778191022,0.416691039035,0.416603883218,0.416516723572,0.416429560098,0.416342392795,0.416255221666,0.41616804671,0.41608086793,0.415993685324,0.415906498895,0.415819308643,0.415732114569,0.415644916674,0.415557714958,0.415470509422,0.415383300068,0.415296086895,0.415208869905,0.415121649098,0.415034424476,0.414947196039,0.414859963788,0.414772727723,0.414685487846,0.414598244157,0.414510996658,0.414423745348,0.414336490229,0.414249231301,0.414161968566,0.414074702024,0.413987431676,0.413900157523,0.413812879565,0.413725597803,0.413638312238,0.413551022872,0.413463729704,0.413376432736,0.413289131968,0.413201827401,0.413114519036,0.413027206874,0.412939890915,0.412852571161,0.412765247612,0.412677920268,0.412590589132,0.412503254203,0.412415915483,0.412328572971,0.41224122667,0.412153876579,0.4120665227,0.411979165034,0.41189180358,0.41180443834,0.411717069316,0.411629696507,0.411542319914,0.411454939538,0.411367555381,0.411280167442,0.411192775723,0.411105380224,0.411017980946,0.410930577891,0.410843171058,0.410755760449,0.410668346064,0.410580927905,0.410493505971,0.410406080264,0.410318650785,0.410231217535,0.410143780514,0.410056339722,0.409968895162,0.409881446833,0.409793994737,0.409706538874,0.409619079245,0.409531615851,0.409444148692,0.40935667777,0.409269203086,0.409181724639,0.409094242431,0.409006756463,0.408919266736,0.40883177325,0.408744276005,0.408656775004,0.408569270247,0.408481761734,0.408394249466,0.408306733445,0.40821921367,0.408131690143,0.408044162865,0.407956631836,0.407869097057,0.407781558529,0.407694016253,0.40760647023,0.40751892046,0.407431366944,0.407343809683,0.407256248677,0.407168683929,0.407081115438,0.406993543204,0.40690596723,0.406818387516,0.406730804063,0.40664321687,0.40655562594,0.406468031273,0.40638043287,0.406292830732,0.406205224859,0.406117615252,0.406030001912,0.40594238484,0.405854764037,0.405767139503,0.40567951124,0.405591879248,0.405504243527,0.405416604079,0.405328960905,0.405241314005,0.40515366338,0.405066009031,0.404978350959,0.404890689164,0.404803023648,0.40471535441,0.404627681453,0.404540004777,0.404452324382,0.404364640269,0.404276952439,0.404189260894,0.404101565633,0.404013866658,0.403926163969,0.403838457568,0.403750747454,0.403663033629,0.403575316094,0.403487594849,0.403399869896,0.403312141235,0.403224408866,0.403136672791,0.40304893301,0.402961189525,0.402873442336,0.402785691444,0.402697936849,0.402610178553,0.402522416556,0.402434650859,0.402346881464,0.402259108369,0.402171331578,0.40208355109,0.401995766905,0.401907979026,0.401820187453,0.401732392186,0.401644593226,0.401556790575,0.401468984233,0.4013811742,0.401293360478,0.401205543067,0.401117721969,0.401029897184,0.400942068712,0.400854236555,0.400766400714,0.400678561188,0.40059071798,0.40050287109,0.400415020518,0.400327166266,0.400239308334,0.400151446723,0.400063581434,0.399975712468,0.399887839825,0.399799963506,0.399712083513,0.399624199846,0.399536312505,0.399448421492,0.399360526807,0.399272628452,0.399184726426,0.399096820731,0.399008911368,0.398920998337,0.398833081639,0.398745161276,0.398657237247,0.398569309554,0.398481378197,0.398393443177,0.398305504496,0.398217562153,0.39812961615,0.398041666488,0.397953713167,0.397865756188,0.397777795552,0.397689831259,0.397601863311,0.397513891709,0.397425916452,0.397337937543,0.397249954981,0.397161968768,0.397073978904,0.39698598539,0.396897988228,0.396809987417,0.396721982958,0.396633974854,0.396545963103,0.396457947707,0.396369928668,0.396281905985,0.396193879659,0.396105849692,0.396017816083,0.395929778835,0.395841737947,0.395753693421,0.395665645257,0.395577593457,0.39548953802,0.395401478948,0.395313416241,0.395225349901,0.395137279928,0.395049206323,0.394961129087,0.394873048221,0.394784963724,0.394696875599,0.394608783847,0.394520688466,0.39443258946,0.394344486828,0.394256380571,0.394168270691,0.394080157187,0.393992040061,0.393903919314,0.393815794945,0.393727666957,0.39363953535,0.393551400125,0.393463261282,0.393375118823,0.393286972747,0.393198823057,0.393110669753,0.393022512835,0.392934352304,0.392846188162,0.392758020409,0.392669849046,0.392581674073,0.392493495492,0.392405313303,0.392317127507,0.392228938105,0.392140745098,0.392052548486,0.391964348271,0.391876144453,0.391787937033,0.391699726011,0.391611511389,0.391523293168,0.391435071348,0.391346845929,0.391258616914,0.391170384302,0.391082148095,0.390993908293,0.390905664897,0.390817417908,0.390729167326,0.390640913153,0.39055265539,0.390464394036,0.390376129094,0.390287860563,0.390199588444,0.39011131274,0.390023033449,0.389934750573,0.389846464113,0.38975817407,0.389669880444,0.389581583236,0.389493282448,0.389404978079,0.389316670131,0.389228358604,0.3891400435,0.389051724819,0.388963402562,0.388875076729,0.388786747322,0.388698414342,0.388610077788,0.388521737663,0.388433393966,0.388345046699,0.388256695862,0.388168341457,0.388079983483,0.387991621943,0.387903256836,0.387814888164,0.387726515926,0.387638140125,0.387549760761,0.387461377835,0.387372991347,0.387284601299,0.38719620769,0.387107810523,0.387019409797,0.386931005514,0.386842597675,0.38675418628,0.386665771329,0.386577352825,0.386488930767,0.386400505157,0.386312075995,0.386223643282,0.386135207019,0.386046767207,0.385958323846,0.385869876938,0.385781426482,0.385692972481,0.385604514935,0.385516053844,0.38542758921,0.385339121032,0.385250649313,0.385162174053,0.385073695252,0.384985212912,0.384896727034,0.384808237617,0.384719744663,0.384631248173,0.384542748148,0.384454244587,0.384365737494,0.384277226867,0.384188712707,0.384100195017,0.384011673796,0.383923149045,0.383834620765,0.383746088957,0.383657553622,0.38356901476,0.383480472373,0.383391926461,0.383303377024,0.383214824065,0.383126267583,0.383037707579,0.382949144055,0.382860577011,0.382772006447,0.382683432365,0.382594854766,0.382506273649,0.382417689017,0.38232910087,0.382240509209,0.382151914034,0.382063315346,0.381974713147,0.381886107436,0.381797498215,0.381708885485,0.381620269247,0.3815316495,0.381443026247,0.381354399487,0.381265769222,0.381177135453,0.38108849818,0.380999857404,0.380911213126,0.380822565346,0.380733914067,0.380645259287,0.380556601009,0.380467939233,0.380379273959,0.38029060519,0.380201932924,0.380113257164,0.38002457791,0.379935895163,0.379847208924,0.379758519193,0.379669825972,0.37958112926,0.37949242906,0.379403725372,0.379315018196,0.379226307533,0.379137593385,0.379048875752,0.378960154634,0.378871430034,0.37878270195,0.378693970385,0.37860523534,0.378516496814,0.378427754809,0.378339009325,0.378250260364,0.378161507926,0.378072752012,0.377983992623,0.37789522976,0.377806463423,0.377717693613,0.377628920332,0.377540143579,0.377451363356,0.377362579664,0.377273792503,0.377185001874,0.377096207778,0.377007410216,0.376918609189,0.376829804697,0.376740996741,0.376652185323,0.376563370442,0.3764745521,0.376385730298,0.376296905036,0.376208076315,0.376119244136,0.3760304085,0.375941569407,0.375852726859,0.375763880856,0.375675031399,0.375586178489,0.375497322127,0.375408462313,0.375319599049,0.375230732334,0.375141862171,0.37505298856,0.374964111501,0.374875230995,0.374786347044,0.374697459647,0.374608568807,0.374519674523,0.374430776797,0.374341875629,0.37425297102,0.374164062971,0.374075151483,0.373986236557,0.373897318193,0.373808396392,0.373719471155,0.373630542483,0.373541610377,0.373452674837,0.373363735864,0.37327479346,0.373185847624,0.373096898359,0.373007945663,0.37291898954,0.372830029988,0.37274106701,0.372652100605,0.372563130775,0.37247415752,0.372385180842,0.372296200741,0.372207217218,0.372118230273,0.372029239908,0.371940246124,0.37185124892,0.371762248299,0.371673244261,0.371584236806,0.371495225936,0.371406211651,0.371317193952,0.37122817284,0.371139148316,0.37105012038,0.370961089034,0.370872054278,0.370783016113,0.37069397454,0.370604929559,0.370515881172,0.370426829379,0.370337774182,0.37024871558,0.370159653575,0.370070588168,0.369981519359,0.369892447149,0.369803371539,0.36971429253,0.369625210123,0.369536124318,0.369447035117,0.36935794252,0.369268846527,0.369179747141,0.369090644361,0.369001538188,0.368912428624,0.368823315668,0.368734199323,0.368645079588,0.368555956464,0.368466829953,0.368377700055,0.368288566771,0.368199430102,0.368110290049,0.368021146612,0.367931999792,0.36784284959,0.367753696007,0.367664539043,0.3675753787,0.367486214979,0.367397047879,0.367307877403,0.36721870355,0.367129526322,0.36704034572,0.366951161743,0.366861974394,0.366772783673,0.36668358958,0.366594392117,0.366505191284,0.366415987082,0.366326779513,0.366237568576,0.366148354272,0.366059136604,0.36596991557,0.365880691173,0.365791463412,0.365702232289,0.365612997805,0.36552375996,0.365434518755,0.365345274191,0.365256026269,0.36516677499,0.365077520354,0.364988262363,0.364899001016,0.364809736316,0.364720468262,0.364631196856,0.364541922098,0.364452643989,0.364363362531,0.364274077723,0.364184789567,0.364095498064,0.364006203213,0.363916905017,0.363827603476,0.363738298591,0.363648990362,0.36355967879,0.363470363877,0.363381045623,0.363291724029,0.363202399096,0.363113070824,0.363023739214,0.362934404268,0.362845065985,0.362755724367,0.362666379415,0.36257703113,0.362487679511,0.362398324561,0.36230896628,0.362219604668,0.362130239727,0.362040871458,0.36195149986,0.361862124936,0.361772746685,0.361683365109,0.361593980209,0.361504591985,0.361415200438,0.361325805568,0.361236407378,0.361147005867,0.361057601037,0.360968192888,0.360878781421,0.360789366637,0.360699948537,0.360610527121,0.36052110239,0.360431674346,0.360342242988,0.360252808319,0.360163370338,0.360073929046,0.359984484445,0.359895036535,0.359805585317,0.359716130791,0.359626672959,0.359537211822,0.35944774738,0.359358279633,0.359268808584,0.359179334232,0.359089856579,0.359000375625,0.358910891371,0.358821403819,0.358731912968,0.358642418819,0.358552921374,0.358463420634,0.358373916598,0.358284409268,0.358194898645,0.35810538473,0.358015867523,0.357926347025,0.357836823237,0.35774729616,0.357657765795,0.357568232142,0.357478695203,0.357389154977,0.357299611467,0.357210064672,0.357120514594,0.357030961233,0.356941404591,0.356851844668,0.356762281464,0.356672714982,0.35658314522,0.356493572182,0.356403995866,0.356314416274,0.356224833408,0.356135247267,0.356045657852,0.355956065165,0.355866469205,0.355776869975,0.355687267475,0.355597661705,0.355508052666,0.35541844036,0.355328824787,0.355239205948,0.355149583843,0.355059958474,0.354970329842,0.354880697946,0.354791062789,0.35470142437,0.354611782691,0.354522137753,0.354432489556,0.354342838101,0.354253183389,0.35416352542,0.354073864197,0.353984199719,0.353894531987,0.353804861002,0.353715186765,0.353625509277,0.353535828538,0.353446144549,0.353356457312,0.353266766827,0.353177073095,0.353087376116,0.352997675892,0.352907972424,0.352818265711,0.352728555755,0.352638842557,0.352549126118,0.352459406438,0.352369683519,0.35227995736,0.352190227964,0.35210049533,0.35201075946,0.351921020354,0.351831278013,0.351741532439,0.351651783631,0.351562031591,0.35147227632,0.351382517818,0.351292756086,0.351202991125,0.351113222935,0.351023451519,0.350933676876,0.350843899007,0.350754117913,0.350664333596,0.350574546055,0.350484755292,0.350394961307,0.350305164101,0.350215363675,0.350125560031,0.350035753168,0.349945943087,0.34985612979,0.349766313277,0.349676493549,0.349586670607,0.349496844452,0.349407015084,0.349317182505,0.349227346714,0.349137507714,0.349047665505,0.348957820087,0.348867971461,0.348778119629,0.348688264591,0.348598406348,0.3485085449,0.348418680249,0.348328812396,0.348238941341,0.348149067085,0.348059189629,0.347969308973,0.347879425119,0.347789538067,0.347699647819,0.347609754375,0.347519857735,0.347429957901,0.347340054874,0.347250148654,0.347160239242,0.347070326639,0.346980410846,0.346890491863,0.346800569692,0.346710644334,0.346620715788,0.346530784056,0.346440849139,0.346350911038,0.346260969753,0.346171025285,0.346081077636,0.345991126805,0.345901172794,0.345811215604,0.345721255235,0.345631291688,0.345541324964,0.345451355064,0.345361381989,0.345271405739,0.345181426316,0.345091443719,0.345001457951,0.344911469012,0.344821476902,0.344731481622,0.344641483174,0.344551481559,0.344461476776,0.344371468826,0.344281457712,0.344191443433,0.34410142599,0.344011405384,0.343921381616,0.343831354687,0.343741324598,0.343651291349,0.343561254941,0.343471215375,0.343381172652,0.343291126773,0.343201077738,0.343111025549,0.343020970206,0.34293091171,0.342840850062,0.342750785262,0.342660717312,0.342570646212,0.342480571964,0.342390494567,0.342300414024,0.342210330333,0.342120243498,0.342030153518,0.341940060393,0.341849964126,0.341759864717,0.341669762166,0.341579656475,0.341489547644,0.341399435674,0.341309320566,0.34121920232,0.341129080939,0.341038956421,0.340948828769,0.340858697983,0.340768564064,0.340678427013,0.34058828683,0.340498143517,0.340407997074,0.340317847501,0.340227694801,0.340137538974,0.340047380019,0.33995721794,0.339867052735,0.339776884407,0.339686712955,0.339596538381,0.339506360686,0.33941617987,0.339325995934,0.339235808879,0.339145618705,0.339055425415,0.338965229008,0.338875029485,0.338784826848,0.338694621096,0.338604412231,0.338514200254,0.338423985165,0.338333766966,0.338243545656,0.338153321238,0.338063093711,0.337972863077,0.337882629336,0.33779239249,0.337702152538,0.337611909483,0.337521663324,0.337431414063,0.337341161701,0.337250906237,0.337160647674,0.337070386011,0.33698012125,0.336889853392,0.336799582437,0.336709308387,0.336619031241,0.336528751001,0.336438467668,0.336348181243,0.336257891726,0.336167599118,0.33607730342,0.335987004633,0.335896702757,0.335806397794,0.335716089745,0.335625778609,0.335535464389,0.335445147085,0.335354826697,0.335264503226,0.335174176674,0.335083847041,0.334993514328,0.334903178536,0.334812839666,0.334722497718,0.334632152693,0.334541804592,0.334451453417,0.334361099167,0.334270741844,0.334180381448,0.33409001798,0.333999651442,0.333909281834,0.333818909156,0.33372853341,0.333638154596,0.333547772716,0.33345738777,0.333366999759,0.333276608683,0.333186214544,0.333095817343,0.333005417079,0.332915013755,0.332824607371,0.332734197927,0.332643785426,0.332553369866,0.33246295125,0.332372529578,0.33228210485,0.332191677069,0.332101246234,0.332010812346,0.331920375407,0.331829935416,0.331739492376,0.331649046286,0.331558597148,0.331468144962,0.33137768973,0.331287231451,0.331196770128,0.33110630576,0.331015838349,0.330925367895,0.330834894399,0.330744417862,0.330653938285,0.330563455669,0.330472970014,0.330382481322,0.330291989593,0.330201494828,0.330110997028,0.330020496193,0.329929992325,0.329839485424,0.329748975492,0.329658462529,0.329567946535,0.329477427512,0.329386905461,0.329296380382,0.329205852276,0.329115321144,0.329024786987,0.328934249806,0.328843709601,0.328753166373,0.328662620124,0.328572070854,0.328481518563,0.328390963253,0.328300404925,0.328209843579,0.328119279216,0.328028711837,0.327938141443,0.327847568035,0.327756991613,0.327666412179,0.327575829733,0.327485244275,0.327394655808,0.327304064331,0.327213469845,0.327122872352,0.327032271853,0.326941668347,0.326851061836,0.32676045232,0.326669839801,0.32657922428,0.326488605756,0.326397984232,0.326307359707,0.326216732183,0.326126101661,0.32603546814,0.325944831623,0.32585419211,0.325763549602,0.325672904099,0.325582255603,0.325491604115,0.325400949634,0.325310292162,0.3252196317,0.325128968249,0.32503830181,0.324947632382,0.324856959968,0.324766284568,0.324675606182,0.324584924813,0.324494240459,0.324403553123,0.324312862805,0.324222169507,0.324131473228,0.324040773969,0.323950071732,0.323859366518,0.323768658326,0.323677947159,0.323587233016,0.3234965159,0.323405795809,0.323315072746,0.323224346711,0.323133617705,0.323042885729,0.322952150783,0.322861412869,0.322770671988,0.322679928139,0.322589181325,0.322498431545,0.322407678801,0.322316923094,0.322226164423,0.322135402791,0.322044638198,0.321953870645,0.321863100133,0.321772326662,0.321681550233,0.321590770847,0.321499988506,0.321409203209,0.321318414958,0.321227623754,0.321136829597,0.321046032488,0.320955232428,0.320864429418,0.320773623458,0.320682814551,0.320592002695,0.320501187893,0.320410370144,0.320319549451,0.320228725813,0.320137899232,0.320047069708,0.319956237242,0.319865401836,0.319774563489,0.319683722203,0.319592877978,0.319502030816,0.319411180717,0.319320327682,0.319229471712,0.319138612808,0.31904775097,0.318956886199,0.318866018497,0.318775147864,0.318684274301,0.318593397808,0.318502518387,0.318411636039,0.318320750763,0.318229862562,0.318138971436,0.318048077385,0.317957180411,0.317866280514,0.317775377696,0.317684471956,0.317593563297,0.317502651718,0.317411737221,0.317320819806,0.317229899475,0.317138976228,0.317048050065,0.316957120989,0.316866188998,0.316775254096,0.316684316281,0.316593375556,0.316502431921,0.316411485376,0.316320535923,0.316229583563,0.316138628296,0.316047670123,0.315956709045,0.315865745062,0.315774778176,0.315683808388,0.315592835698,0.315501860108,0.315410881617,0.315319900227,0.315228915938,0.315137928753,0.31504693867,0.314955945692,0.314864949818,0.314773951051,0.31468294939,0.314591944836,0.314500937391,0.314409927055,0.314318913829,0.314227897714,0.314136878711,0.31404585682,0.313954832043,0.31386380438,0.313772773831,0.313681740399,0.313590704083,0.313499664885,0.313408622805,0.313317577845,0.313226530004,0.313135479285,0.313044425687,0.312953369212,0.31286230986,0.312771247632,0.312680182529,0.312589114553,0.312498043703,0.31240696998,0.312315893386,0.312224813922,0.312133731587,0.312042646384,0.311951558312,0.311860467372,0.311769373567,0.311678276895,0.311587177359,0.311496074958,0.311404969695,0.311313861569,0.311222750581,0.311131636733,0.311040520025,0.310949400458,0.310858278032,0.31076715275,0.31067602461,0.310584893616,0.310493759766,0.310402623062,0.310311483506,0.310220341096,0.310129195836,0.310038047725,0.309946896764,0.309855742954,0.309764586295,0.30967342679,0.309582264438,0.309491099241,0.309399931198,0.309308760312,0.309217586583,0.309126410011,0.309035230598,0.308944048345,0.308852863252,0.308761675319,0.308670484549,0.308579290942,0.308488094498,0.308396895218,0.308305693104,0.308214488156,0.308123280375,0.308032069761,0.307940856317,0.307849640042,0.307758420937,0.307667199003,0.307575974241,0.307484746652,0.307393516237,0.307302282996,0.307211046931,0.307119808042,0.307028566329,0.306937321795,0.306846074439,0.306754824263,0.306663571267,0.306572315453,0.30648105682,0.306389795371,0.306298531105,0.306207264024,0.306115994128,0.306024721418,0.305933445896,0.305842167561,0.305750886415,0.305659602459,0.305568315693,0.305477026119,0.305385733736,0.305294438547,0.305203140551,0.30511183975,0.305020536145,0.304929229735,0.304837920523,0.304746608509,0.304655293694,0.304563976079,0.304472655663,0.30438133245,0.304290006438,0.30419867763,0.304107346025,0.304016011625,0.303924674431,0.303833334443,0.303741991662,0.30365064609,0.303559297726,0.303467946572,0.303376592629,0.303285235897,0.303193876377,0.30310251407,0.303011148978,0.3029197811,0.302828410438,0.302737036992,0.302645660763,0.302554281753,0.302462899962,0.30237151539,0.302280128039,0.30218873791,0.302097345003,0.302005949319,0.301914550859,0.301823149625,0.301731745615,0.301640338833,0.301548929277,0.30145751695,0.301366101852,0.301274683984,0.301183263347,0.301091839941,0.301000413768,0.300908984828,0.300817553122,0.300726118651,0.300634681416,0.300543241417,0.300451798656,0.300360353133,0.30026890485,0.300177453806,0.300086000003,0.299994543442,0.299903084124,0.299811622048,0.299720157217,0.299628689631,0.299537219291,0.299445746198,0.299354270352,0.299262791754,0.299171310406,0.299079826308,0.298988339461,0.298896849865,0.298805357523,0.298713862433,0.298622364598,0.298530864018,0.298439360694,0.298347854627,0.298256345817,0.298164834266,0.298073319974,0.297981802943,0.297890283172,0.297798760664,0.297707235418,0.297615707435,0.297524176717,0.297432643264,0.297341107077,0.297249568157,0.297158026505,0.297066482122,0.296974935008,0.296883385164,0.296791832591,0.29670027729,0.296608719262,0.296517158508,0.296425595028,0.296334028823,0.296242459895,0.296150888244,0.29605931387,0.295967736775,0.29587615696,0.295784574425,0.295692989171,0.295601401199,0.295509810511,0.295418217106,0.295326620985,0.29523502215,0.295143420601,0.295051816339,0.294960209366,0.294868599681,0.294776987285,0.294685372181,0.294593754367,0.294502133846,0.294410510617,0.294318884683,0.294227256043,0.294135624698,0.29404399065,0.2939523539,0.293860714447,0.293769072293,0.293677427439,0.293585779886,0.293494129634,0.293402476684,0.293310821037,0.293219162694,0.293127501656,0.293035837924,0.292944171498,0.29285250238,0.292760830569,0.292669156068,0.292577478876,0.292485798996,0.292394116426,0.292302431169,0.292210743226,0.292119052596,0.292027359281,0.291935663282,0.2918439646,0.291752263235,0.291660559188,0.291568852461,0.291477143053,0.291385430966,0.291293716201,0.291201998759,0.291110278639,0.291018555844,0.290926830374,0.29083510223,0.290743371412,0.290651637922,0.290559901761,0.290468162928,0.290376421426,0.290284677254,0.290192930415,0.290101180908,0.290009428734,0.289917673895,0.289825916391,0.289734156223,0.289642393391,0.289550627898,0.289458859743,0.289367088927,0.289275315451,0.289183539317,0.289091760524,0.288999979074,0.288908194968,0.288816408206,0.288724618789,0.288632826719,0.288541031995,0.288449234619,0.288357434592,0.288265631915,0.288173826587,0.288082018611,0.287990207987,0.287898394715,0.287806578798,0.287714760235,0.287622939027,0.287531115176,0.287439288681,0.287347459545,0.287255627767,0.287163793349,0.287071956291,0.286980116595,0.286888274261,0.286796429289,0.286704581682,0.286612731439,0.286520878562,0.286429023051,0.286337164908,0.286245304132,0.286153440725,0.286061574688,0.285969706022,0.285877834727,0.285785960804,0.285694084255,0.285602205079,0.285510323278,0.285418438853,0.285326551805,0.285234662133,0.28514276984,0.285050874926,0.284958977392,0.284867077238,0.284775174466,0.284683269077,0.284591361071,0.284499450449,0.284407537211,0.28431562136,0.284223702895,0.284131781818,0.284039858129,0.283947931829,0.283856002919,0.2837640714,0.283672137273,0.283580200538,0.283488261197,0.283396319249,0.283304374697,0.283212427541,0.283120477782,0.28302852542,0.282936570457,0.282844612893,0.282752652729,0.282660689967,0.282568724606,0.282476756647,0.282384786093,0.282292812942,0.282200837197,0.282108858858,0.282016877926,0.281924894402,0.281832908286,0.28174091958,0.281648928284,0.281556934399,0.281464937926,0.281372938866,0.281280937219,0.281188932988,0.281096926171,0.281004916771,0.280912904788,0.280820890222,0.280728873076,0.280636853349,0.280544831042,0.280452806157,0.280360778694,0.280268748654,0.280176716038,0.280084680846,0.27999264308,0.279900602741,0.279808559828,0.279716514344,0.279624466288,0.279532415663,0.279440362467,0.279348306704,0.279256248372,0.279164187474,0.27907212401,0.27898005798,0.278887989387,0.278795918229,0.278703844509,0.278611768228,0.278519689385,0.278427607982,0.27833552402,0.2782434375,0.278151348422,0.278059256787,0.277967162597,0.277875065852,0.277782966552,0.277690864699,0.277598760293,0.277506653336,0.277414543828,0.277322431771,0.277230317164,0.277138200009,0.277046080306,0.276953958057,0.276861833262,0.276769705923,0.276677576039,0.276585443612,0.276493308643,0.276401171132,0.276309031081,0.27621688849,0.27612474336,0.276032595692,0.275940445487,0.275848292746,0.275756137468,0.275663979657,0.275571819311,0.275479656432,0.275387491021,0.275295323079,0.275203152607,0.275110979605,0.275018804074,0.274926626015,0.274834445429,0.274742262317,0.274650076679,0.274557888517,0.274465697831,0.274373504623,0.274281308892,0.274189110641,0.274096909869,0.274004706577,0.273912500767,0.27382029244,0.273728081595,0.273635868234,0.273543652358,0.273451433968,0.273359213064,0.273266989648,0.27317476372,0.273082535281,0.272990304331,0.272898070873,0.272805834906,0.272713596431,0.27262135545,0.272529111963,0.272436865971,0.272344617474,0.272252366475,0.272160112972,0.272067856969,0.271975598464,0.271883337459,0.271791073956,0.271698807954,0.271606539455,0.271514268459,0.271421994967,0.271329718981,0.2712374405,0.271145159527,0.271052876061,0.270960590104,0.270868301656,0.270776010718,0.270683717291,0.270591421377,0.270499122975,0.270406822087,0.270314518713,0.270222212854,0.270129904512,0.270037593687,0.269945280379,0.269852964591,0.269760646322,0.269668325573,0.269576002346,0.26948367664,0.269391348458,0.269299017799,0.269206684665,0.269114349057,0.269022010975,0.26892967042,0.268837327394,0.268744981896,0.268652633928,0.26856028349,0.268467930584,0.268375575211,0.26828321737,0.268190857063,0.268098494292,0.268006129056,0.267913761356,0.267821391194,0.26772901857,0.267636643486,0.267544265941,0.267451885937,0.267359503474,0.267267118554,0.267174731178,0.267082341345,0.266989949058,0.266897554317,0.266805157122,0.266712757475,0.266620355376,0.266527950827,0.266435543828,0.266343134379,0.266250722483,0.266158308139,0.266065891349,0.265973472113,0.265881050432,0.265788626308,0.26569619974,0.26560377073,0.265511339279,0.265418905387,0.265326469056,0.265234030286,0.265141589077,0.265049145432,0.26495669935,0.264864250833,0.264771799882,0.264679346496,0.264586890678,0.264494432428,0.264401971746,0.264309508635,0.264217043093,0.264124575124,0.264032104726,0.263939631901,0.263847156651,0.263754678975,0.263662198875,0.263569716351,0.263477231404,0.263384744036,0.263292254247,0.263199762037,0.263107267409,0.263014770362,0.262922270897,0.262829769016,0.262737264719,0.262644758006,0.26255224888,0.26245973734,0.262367223388,0.262274707024,0.262182188249,0.262089667065,0.261997143471,0.261904617469,0.26181208906,0.261719558244,0.261627025023,0.261534489397,0.261441951366,0.261349410933,0.261256868097,0.26116432286,0.261071775223,0.260979225186,0.260886672749,0.260794117915,0.260701560684,0.260609001056,0.260516439033,0.260423874615,0.260331307804,0.2602387386,0.260146167003,0.260053593015,0.259961016637,0.25986843787,0.259775856714,0.25968327317,0.259590687239,0.259498098922,0.25940550822,0.259312915133,0.259220319663,0.25912772181,0.259035121575,0.258942518959,0.258849913963,0.258757306588,0.258664696834,0.258572084703,0.258479470195,0.258386853311,0.258294234052,0.258201612419,0.258108988413,0.258016362034,0.257923733283,0.257831102162,0.257738468671,0.257645832811,0.257553194582,0.257460553986,0.257367911024,0.257275265696,0.257182618003,0.257089967946,0.256997315526,0.256904660743,0.2568120036,0.256719344096,0.256626682232,0.256534018009,0.256441351428,0.25634868249,0.256256011196,0.256163337546,0.256070661542,0.255977983184,0.255885302473,0.25579261941,0.255699933995,0.255607246231,0.255514556117,0.255421863654,0.255329168844,0.255236471686,0.255143772183,0.255051070334,0.254958366141,0.254865659605,0.254772950725,0.254680239504,0.254587525942,0.25449481004,0.254402091799,0.254309371219,0.254216648301,0.254123923047,0.254031195457,0.253938465532,0.253845733273,0.253752998681,0.253660261756,0.2535675225,0.253474780913,0.253382036996,0.25328929075,0.253196542175,0.253103791274,0.253011038046,0.252918282492,0.252825524613,0.252732764411,0.252640001886,0.252547237038,0.252454469869,0.25236170038,0.25226892857,0.252176154442,0.252083377996,0.251990599233,0.251897818154,0.25180503476,0.25171224905,0.251619461028,0.251526670692,0.251433878044,0.251341083085,0.251248285816,0.251155486238,0.251062684351,0.250969880156,0.250877073654,0.250784264847,0.250691453734,0.250598640317,0.250505824596,0.250413006573,0.250320186248,0.250227363622,0.250134538696,0.250041711471,0.249948881948,0.249856050127,0.24976321601,0.249670379597,0.249577540889,0.249484699886,0.249391856591,0.249299011003,0.249206163124,0.249113312954,0.249020460494,0.248927605746,0.248834748709,0.248741889385,0.248649027775,0.248556163879,0.248463297698,0.248370429234,0.248277558487,0.248184685457,0.248091810146,0.247998932555,0.247906052685,0.247813170535,0.247720286108,0.247627399404,0.247534510423,0.247441619168,0.247348725638,0.247255829834,0.247162931758,0.247070031409,0.24697712879,0.246884223901,0.246791316742,0.246698407315,0.24660549562,0.246512581659,0.246419665431,0.246326746939,0.246233826182,0.246140903162,0.24604797788,0.245955050336,0.245862120531,0.245769188466,0.245676254142,0.245583317561,0.245490378721,0.245397437625,0.245304494274,0.245211548668,0.245118600807,0.245025650694,0.244932698329,0.244839743712,0.244746786844,0.244653827727,0.244560866362,0.244467902748,0.244374936887,0.24428196878,0.244188998427,0.24409602583,0.24400305099,0.243910073906,0.24381709458,0.243724113014,0.243631129207,0.243538143161,0.243445154876,0.243352164353,0.243259171594,0.243166176599,0.243073179368,0.242980179903,0.242887178205,0.242794174274,0.242701168112,0.242608159718,0.242515149095,0.242422136243,0.242329121162,0.242236103854,0.242143084319,0.242050062558,0.241957038573,0.241864012364,0.241770983931,0.241677953276,0.2415849204,0.241491885303,0.241398847986,0.241305808451,0.241212766697,0.241119722726,0.241026676539,0.240933628137,0.24084057752,0.240747524689,0.240654469645,0.240561412389,0.240468352922,0.240375291244,0.240282227358,0.240189161262,0.240096092959,0.240003022449,0.239909949733,0.239816874811,0.239723797685,0.239630718356,0.239537636824,0.239444553091,0.239351467156,0.239258379021,0.239165288687,0.239072196155,0.238979101425,0.238886004499,0.238792905377,0.23869980406,0.238606700549,0.238513594844,0.238420486948,0.238327376859,0.23823426458,0.238141150112,0.238048033454,0.237954914608,0.237861793575,0.237768670356,0.237675544951,0.237582417362,0.237489287588,0.237396155632,0.237303021494,0.237209885174,0.237116746674,0.237023605994,0.236930463136,0.2368373181,0.236744170887,0.236651021498,0.236557869934,0.236464716195,0.236371560283,0.236278402198,0.236185241941,0.236092079513,0.235998914916,0.235905748149,0.235812579213,0.23571940811,0.23562623484,0.235533059405,0.235439881805,0.23534670204,0.235253520112,0.235160336022,0.23506714977,0.234973961358,0.234880770785,0.234787578054,0.234694383165,0.234601186118,0.234507986915,0.234414785556,0.234321582043,0.234228376376,0.234135168556,0.234041958584,0.23394874646,0.233855532186,0.233762315763,0.233669097191,0.233575876471,0.233482653604,0.233389428591,0.233296201432,0.233202972129,0.233109740683,0.233016507094,0.232923271363,0.232830033492,0.23273679348,0.232643551328,0.232550307039,0.232457060612,0.232363812048,0.232270561348,0.232177308513,0.232084053545,0.231990796442,0.231897537208,0.231804275842,0.231711012345,0.231617746719,0.231524478963,0.231431209079,0.231337937069,0.231244662931,0.231151386668,0.231058108281,0.230964827769,0.230871545135,0.230778260378,0.230684973501,0.230591684502,0.230498393385,0.230405100148,0.230311804794,0.230218507323,0.230125207735,0.230031906033,0.229938602216,0.229845296285,0.229751988242,0.229658678087,0.229565365821,0.229472051444,0.229378734959,0.229285416365,0.229192095664,0.229098772856,0.229005447942,0.228912120923,0.2288187918,0.228725460574,0.228632127245,0.228538791815,0.228445454284,0.228352114653,0.228258772924,0.228165429096,0.228072083171,0.22797873515,0.227885385033,0.227792032821,0.227698678516,0.227605322117,0.227511963627,0.227418603045,0.227325240373,0.227231875611,0.227138508761,0.227045139823,0.226951768798,0.226858395687,0.226765020491,0.22667164321,0.226578263846,0.226484882399,0.22639149887,0.22629811326,0.226204725571,0.226111335802,0.226017943954,0.22592455003,0.225831154028,0.225737755951,0.225644355799,0.225550953572,0.225457549273,0.225364142901,0.225270734458,0.225177323944,0.22508391136,0.224990496707,0.224897079986,0.224803661198,0.224710240344,0.224616817424,0.22452339244,0.224429965392,0.22433653628,0.224243105107,0.224149671873,0.224056236578,0.223962799224,0.223869359811,0.223775918341,0.223682474813,0.22358902923,0.223495581591,0.223402131898,0.223308680152,0.223215226353,0.223121770502,0.2230283126,0.222934852648,0.222841390647,0.222747926598,0.222654460502,0.222560992358,0.222467522169,0.222374049935,0.222280575658,0.222187099337,0.222093620973,0.222000140568,0.221906658123,0.221813173638,0.221719687114,0.221626198552,0.221532707953,0.221439215318,0.221345720647,0.221252223942,0.221158725203,0.221065224431,0.220971721627,0.220878216792,0.220784709927,0.220691201032,0.220597690109,0.220504177158,0.22041066218,0.220317145177,0.220223626148,0.220130105095,0.220036582018,0.219943056919,0.219849529799,0.219756000657,0.219662469496,0.219568936315,0.219475401117,0.219381863901,0.219288324668,0.21919478342,0.219101240157,0.21900769488,0.21891414759,0.218820598288,0.218727046974,0.21863349365,0.218539938316,0.218446380974,0.218352821623,0.218259260266,0.218165696902,0.218072131533,0.21797856416,0.217884994783,0.217791423403,0.217697850021,0.217604274638,0.217510697256,0.217417117873,0.217323536493,0.217229953114,0.217136367739,0.217042780369,0.216949191003,0.216855599643,0.216762006289,0.216668410944,0.216574813606,0.216481214278,0.21638761296,0.216294009653,0.216200404358,0.216106797076,0.216013187808,0.215919576553,0.215825963314,0.215732348092,0.215638730886,0.215545111698,0.215451490529,0.21535786738,0.215264242251,0.215170615143,0.215076986058,0.214983354995,0.214889721957,0.214796086943,0.214702449955,0.214608810994,0.21451517006,0.214421527154,0.214327882277,0.21423423543,0.214140586614,0.214046935829,0.213953283078,0.213859628359,0.213765971675,0.213672313026,0.213578652412,0.213484989836,0.213391325297,0.213297658797,0.213203990337,0.213110319916,0.213016647537,0.2129229732,0.212829296905,0.212735618654,0.212641938448,0.212548256288,0.212454572173,0.212360886106,0.212267198087,0.212173508116,0.212079816196,0.211986122326,0.211892426507,0.211798728741,0.211705029028,0.211611327369,0.211517623765,0.211423918217,0.211330210725,0.211236501291,0.211142789916,0.211049076599,0.210955361343,0.210861644147,0.210767925013,0.210674203942,0.210580480935,0.210486755992,0.210393029114,0.210299300302,0.210205569557,0.21011183688,0.210018102272,0.209924365734,0.209830627265,0.209736886868,0.209643144543,0.209549400292,0.209455654114,0.20936190601,0.209268155983,0.209174404032,0.209080650158,0.208986894362,0.208893136645,0.208799377009,0.208705615453,0.208611851978,0.208518086586,0.208424319278,0.208330550053,0.208236778914,0.208143005861,0.208049230894,0.207955454015,0.207861675225,0.207767894524,0.207674111913,0.207580327394,0.207486540966,0.207392752631,0.20729896239,0.207205170243,0.207111376192,0.207017580237,0.20692378238,0.20682998262,0.206736180959,0.206642377398,0.206548571937,0.206454764578,0.206360955321,0.206267144167,0.206173331118,0.206079516173,0.205985699334,0.205891880602,0.205798059977,0.20570423746,0.205610413053,0.205516586756,0.20542275857,0.205328928495,0.205235096533,0.205141262685,0.205047426951,0.204953589332,0.20485974983,0.204765908444,0.204672065176,0.204578220027,0.204484372998,0.204390524089,0.204296673301,0.204202820635,0.204108966093,0.204015109674,0.20392125138,0.203827391212,0.20373352917,0.203639665255,0.203545799469,0.203451931811,0.203358062284,0.203264190887,0.203170317622,0.203076442489,0.20298256549,0.202888686625,0.202794805895,0.202700923302,0.202607038844,0.202513152525,0.202419264344,0.202325374303,0.202231482401,0.202137588641,0.202043693023,0.201949795548,0.201855896217,0.20176199503,0.201668091988,0.201574187093,0.201480280345,0.201386371745,0.201292461294,0.201198548993,0.201104634842,0.201010718843,0.200916800996,0.200822881302,0.200728959763,0.200635036378,0.20054111115,0.200447184078,0.200353255163,0.200259324407,0.20016539181,0.200071457373,0.199977521097,0.199883582983,0.199789643032,0.199695701244,0.199601757621,0.199507812163,0.199413864871,0.199319915747,0.19922596479,0.199132012002,0.199038057383,0.198944100935,0.198850142659,0.198756182554,0.198662220623,0.198568256866,0.198474291283,0.198380323876,0.198286354646,0.198192383593,0.198098410718,0.198004436022,0.197910459507,0.197816481172,0.197722501019,0.197628519048,0.197534535261,0.197440549659,0.197346562241,0.197252573009,0.197158581965,0.197064589108,0.19697059444,0.196876597961,0.196782599672,0.196688599575,0.19659459767,0.196500593958,0.19640658844,0.196312581116,0.196218571988,0.196124561056,0.196030548321,0.195936533785,0.195842517448,0.19574849931,0.195654479373,0.195560457638,0.195466434105,0.195372408776,0.195278381651,0.19518435273,0.195090322016,0.194996289509,0.194902255209,0.194808219117,0.194714181235,0.194620141563,0.194526100103,0.194432056854,0.194338011818,0.194243964996,0.194149916388,0.194055865996,0.19396181382,0.193867759861,0.19377370412,0.193679646598,0.193585587296,0.193491526214,0.193397463354,0.193303398716,0.193209332302,0.193115264111,0.193021194145,0.192927122405,0.192833048892,0.192738973607,0.192644896549,0.192550817721,0.192456737123,0.192362654756,0.192268570621,0.192174484719,0.19208039705,0.191986307615,0.191892216416,0.191798123453,0.191704028728,0.19160993224,0.19151583399,0.191421733981,0.191327632212,0.191233528684,0.191139423398,0.191045316356,0.190951207557,0.190857097004,0.190762984696,0.190668870634,0.19057475482,0.190480637254,0.190386517938,0.190292396871,0.190198274056,0.190104149492,0.19001002318,0.189915895122,0.189821765319,0.18972763377,0.189633500478,0.189539365443,0.189445228665,0.189351090146,0.189256949887,0.189162807888,0.18906866415,0.188974518674,0.188880371462,0.188786222513,0.188692071829,0.18859791941,0.188503765258,0.188409609373,0.188315451757,0.188221292409,0.188127131332,0.188032968525,0.18793880399,0.187844637727,0.187750469738,0.187656300023,0.187562128583,0.187467955419,0.187373780531,0.187279603922,0.187185425591,0.18709124554,0.186997063768,0.186902880278,0.18680869507,0.186714508145,0.186620319504,0.186526129147,0.186431937076,0.186337743291,0.186243547794,0.186149350584,0.186055151663,0.185960951033,0.185866748693,0.185772544644,0.185678338888,0.185584131425,0.185489922257,0.185395711383,0.185301498805,0.185207284524,0.185113068541,0.185018850856,0.18492463147,0.184830410385,0.1847361876,0.184641963118,0.184547736939,0.184453509063,0.184359279491,0.184265048226,0.184170815266,0.184076580613,0.183982344269,0.183888106233,0.183793866507,0.183699625092,0.183605381988,0.183511137197,0.183416890719,0.183322642555,0.183228392705,0.183134141172,0.183039887955,0.182945633056,0.182851376475,0.182757118214,0.182662858272,0.182568596652,0.182474333353,0.182380068377,0.182285801725,0.182191533397,0.182097263395,0.182002991719,0.18190871837,0.181814443348,0.181720166656,0.181625888293,0.181531608261,0.18143732656,0.181343043192,0.181248758156,0.181154471455,0.181060183088,0.180965893058,0.180871601363,0.180777308007,0.180683012988,0.180588716309,0.18049441797,0.180400117972,0.180305816315,0.180211513002,0.180117208031,0.180022901406,0.179928593125,0.179834283191,0.179739971603,0.179645658364,0.179551343473,0.179457026932,0.179362708741,0.179268388902,0.179174067415,0.179079744281,0.1789854195,0.178891093075,0.178796765005,0.178702435292,0.178608103936,0.178513770939,0.178419436301,0.178325100022,0.178230762105,0.178136422549,0.178042081356,0.177947738526,0.177853394061,0.177759047961,0.177664700227,0.17757035086,0.177475999861,0.17738164723,0.177287292969,0.177192937079,0.177098579559,0.177004220412,0.176909859638,0.176815497238,0.176721133212,0.176626767562,0.176532400289,0.176438031393,0.176343660875,0.176249288736,0.176154914977,0.176060539599,0.175966162603,0.175871783989,0.175777403759,0.175683021913,0.175588638452,0.175494253377,0.175399866689,0.175305478389,0.175211088478,0.175116696956,0.175022303824,0.174927909083,0.174833512735,0.17473911478,0.174644715218,0.174550314051,0.17445591128,0.174361506905,0.174267100928,0.174172693348,0.174078284168,0.173983873387,0.173889461008,0.17379504703,0.173700631454,0.173606214282,0.173511795514,0.173417375152,0.173322953195,0.173228529645,0.173134104503,0.173039677769,0.172945249445,0.172850819531,0.172756388029,0.172661954938,0.172567520261,0.172473083997,0.172378646148,0.172284206714,0.172189765697,0.172095323097,0.172000878915,0.171906433152,0.171811985809,0.171717536887,0.171623086386,0.171528634308,0.171434180654,0.171339725423,0.171245268618,0.171150810238,0.171056350285,0.17096188876,0.170867425664,0.170772960997,0.17067849476,0.170584026954,0.170489557581,0.17039508664,0.170300614133,0.170206140061,0.170111664424,0.170017187224,0.169922708461,0.169828228136,0.16973374625,0.169639262803,0.169544777798,0.169450291234,0.169355803112,0.169261313434,0.1691668222,0.169072329411,0.168977835068,0.168883339172,0.168788841724,0.168694342724,0.168599842173,0.168505340073,0.168410836423,0.168316331226,0.168221824482,0.168127316191,0.168032806355,0.167938294975,0.167843782051,0.167749267584,0.167654751575,0.167560234025,0.167465714935,0.167371194305,0.167276672137,0.167182148432,0.16708762319,0.166993096412,0.166898568099,0.166804038252,0.166709506872,0.166614973959,0.166520439515,0.16642590354,0.166331366036,0.166236827003,0.166142286441,0.166047744353,0.165953200738,0.165858655598,0.165764108933,0.165669560745,0.165575011034,0.1654804598,0.165385907046,0.165291352772,0.165196796978,0.165102239666,0.165007680836,0.16491312049,0.164818558628,0.16472399525,0.164629430359,0.164534863954,0.164440296037,0.164345726609,0.16425115567,0.164156583221,0.164062009263,0.163967433797,0.163872856825,0.163778278345,0.163683698361,0.163589116871,0.163494533879,0.163399949383,0.163305363385,0.163210775887,0.163116186888,0.16302159639,0.162927004393,0.162832410899,0.162737815908,0.162643219421,0.162548621439,0.162454021963,0.162359420994,0.162264818533,0.16217021458,0.162075609136,0.161981002202,0.16188639378,0.16179178387,0.161697172472,0.161602559588,0.161507945219,0.161413329366,0.161318712028,0.161224093208,0.161129472906,0.161034851122,0.160940227859,0.160845603116,0.160750976895,0.160656349196,0.160561720021,0.160467089369,0.160372457243,0.160277823642,0.160183188569,0.160088552023,0.159993914005,0.159899274517,0.159804633559,0.159709991132,0.159615347237,0.159520701875,0.159426055047,0.159331406753,0.159236756995,0.159142105773,0.159047453088,0.158952798942,0.158858143334,0.158763486266,0.158668827739,0.158574167753,0.15847950631,0.15838484341,0.158290179054,0.158195513243,0.158100845978,0.15800617726,0.15791150709,0.157816835468,0.157722162395,0.157627487873,0.157532811902,0.157438134483,0.157343455616,0.157248775304,0.157154093546,0.157059410343,0.156964725697,0.156870039608,0.156775352077,0.156680663105,0.156585972693,0.156491280842,0.156396587552,0.156301892824,0.15620719666,0.15611249906,0.156017800025,0.155923099556,0.155828397654,0.15573369432,0.155638989554,0.155544283357,0.155449575731,0.155354866676,0.155260156193,0.155165444282,0.155070730946,0.154976016184,0.154881299997,0.154786582387,0.154691863355,0.1545971429,0.154502421024,0.154407697728,0.154312973013,0.154218246879,0.154123519328,0.154028790361,0.153934059977,0.153839328178,0.153744594966,0.15364986034,0.153555124302,0.153460386852,0.153365647992,0.153270907723,0.153176166044,0.153081422957,0.152986678464,0.152891932564,0.152797185258,0.152702436549,0.152607686435,0.152512934919,0.152418182001,0.152323427682,0.152228671963,0.152133914845,0.152039156328,0.151944396414,0.151849635103,0.151754872397,0.151660108295,0.151565342799,0.151470575911,0.15137580763,0.151281037957,0.151186266894,0.151091494442,0.1509967206,0.150901945371,0.150807168755,0.150712390752,0.150617611364,0.150522830592,0.150428048436,0.150333264897,0.150238479977,0.150143693675,0.150048905994,0.149954116933,0.149859326494,0.149764534677,0.149669741484,0.149574946915,0.149480150972,0.149385353654,0.149290554963,0.1491957549,0.149100953465,0.14900615066,0.148911346486,0.148816540942,0.148721734031,0.148626925753,0.148532116108,0.148437305099,0.148342492725,0.148247678987,0.148152863887,0.148058047424,0.147963229601,0.147868410418,0.147773589876,0.147678767976,0.147583944718,0.147489120103,0.147394294133,0.147299466808,0.147204638129,0.147109808097,0.147014976713,0.146920143977,0.146825309891,0.146730474455,0.146635637671,0.146540799539,0.14644596006,0.146351119234,0.146256277064,0.146161433549,0.146066588691,0.14597174249,0.145876894947,0.145782046064,0.14568719584,0.145592344277,0.145497491376,0.145402637138,0.145307781563,0.145212924653,0.145118066408,0.145023206829,0.144928345916,0.144833483672,0.144738620097,0.144643755191,0.144548888955,0.144454021391,0.144359152499,0.14426428228,0.144169410735,0.144074537865,0.143979663671,0.143884788153,0.143789911312,0.14369503315,0.143600153667,0.143505272865,0.143410390743,0.143315507303,0.143220622545,0.143125736471,0.143030849082,0.142935960378,0.14284107036,0.142746179029,0.142651286386,0.142556392431,0.142461497167,0.142366600593,0.14227170271,0.142176803519,0.142081903022,0.141987001219,0.14189209811,0.141797193698,0.141702287982,0.141607380963,0.141512472643,0.141417563022,0.141322652102,0.141227739882,0.141132826364,0.141037911549,0.140942995437,0.14084807803,0.140753159328,0.140658239333,0.140563318044,0.140468395464,0.140373471592,0.140278546431,0.140183619979,0.14008869224,0.139993763212,0.139898832898,0.139803901298,0.139708968412,0.139614034243,0.13951909879,0.139424162055,0.139329224038,0.139234284741,0.139139344164,0.139044402308,0.138949459173,0.138854514762,0.138759569074,0.138664622111,0.138569673873,0.138474724362,0.138379773578,0.138284821522,0.138189868194,0.138094913597,0.13799995773,0.137905000595,0.137810042192,0.137715082522,0.137620121586,0.137525159386,0.137430195921,0.137335231194,0.137240265204,0.137145297952,0.13705032944,0.136955359668,0.136860388637,0.136765416348,0.136670442802,0.136575468,0.136480491942,0.13638551463,0.136290536064,0.136195556246,0.136100575176,0.136005592854,0.135910609283,0.135815624462,0.135720638393,0.135625651076,0.135530662513,0.135435672704,0.13534068165,0.135245689352,0.135150695811,0.135055701028,0.134960705003,0.134865707738,0.134770709233,0.134675709489,0.134580708507,0.134485706288,0.134390702834,0.134295698143,0.134200692219,0.134105685061,0.13401067667,0.133915667047,0.133820656194,0.13372564411,0.133630630797,0.133535616256,0.133440600488,0.133345583493,0.133250565272,0.133155545827,0.133060525157,0.132965503265,0.13287048015,0.132775455814,0.132680430257,0.132585403481,0.132490375487,0.132395346274,0.132300315844,0.132205284199,0.132110251338,0.132015217263,0.131920181974,0.131825145473,0.13173010776,0.131635068837,0.131540028703,0.13144498736,0.131349944809,0.131254901051,0.131159856086,0.131064809916,0.130969762541,0.130874713962,0.13077966418,0.130684613196,0.13058956101,0.130494507625,0.13039945304,0.130304397256,0.130209340275,0.130114282096,0.130019222722,0.129924162153,0.129829100389,0.129734037432,0.129638973283,0.129543907942,0.12944884141,0.129353773688,0.129258704778,0.129163634679,0.129068563393,0.128973490921,0.128878417263,0.12878334242,0.128688266394,0.128593189185,0.128498110794,0.128403031222,0.128307950469,0.128212868537,0.128117785427,0.128022701139,0.127927615674,0.127832529033,0.127737441218,0.127642352228,0.127547262065,0.127452170729,0.127357078222,0.127261984545,0.127166889697,0.127071793681,0.126976696497,0.126881598145,0.126786498628,0.126691397945,0.126596296097,0.126501193086,0.126406088912,0.126310983576,0.126215877079,0.126120769422,0.126025660606,0.125930550631,0.125835439498,0.12574032721,0.125645213765,0.125550099165,0.125454983412,0.125359866505,0.125264748446,0.125169629235,0.125074508874,0.124979387363,0.124884264704,0.124789140897,0.124694015942,0.124598889842,0.124503762596,0.124408634205,0.124313504672,0.124218373995,0.124123242177,0.124028109218,0.123932975119,0.12383783988,0.123742703503,0.123647565989,0.123552427339,0.123457287552,0.123362146631,0.123267004576,0.123171861388,0.123076717068,0.122981571617,0.122886425035,0.122791277323,0.122696128483,0.122600978515,0.12250582742,0.122410675199,0.122315521853,0.122220367383,0.122125211789,0.122030055073,0.121934897235,0.121839738276,0.121744578197,0.121649416999,0.121554254683,0.12145909125,0.1213639267,0.121268761035,0.121173594255,0.121078426361,0.120983257354,0.120888087236,0.120792916006,0.120697743666,0.120602570216,0.120507395658,0.120412219992,0.120317043219,0.120221865341,0.120126686357,0.120031506269,0.119936325078,0.119841142785,0.119745959389,0.119650774894,0.119555589298,0.119460402604,0.119365214811,0.119270025921,0.119174835935,0.119079644854,0.118984452678,0.118889259408,0.118794065045,0.118698869591,0.118603673045,0.11850847541,0.118413276685,0.118318076871,0.11822287597,0.118127673983,0.118032470909,0.117937266751,0.117842061508,0.117746855183,0.117651647775,0.117556439285,0.117461229715,0.117366019066,0.117270807338,0.117175594531,0.117080380648,0.116985165688,0.116889949653,0.116794732544,0.116699514361,0.116604295106,0.116509074778,0.11641385338,0.116318630912,0.116223407374,0.116128182769,0.116032957095,0.115937730356,0.11584250255,0.11574727368,0.115652043746,0.115556812749,0.115461580689,0.115366347569,0.115271113388,0.115175878147,0.115080641848,0.114985404491,0.114890166077,0.114794926607,0.114699686081,0.114604444502,0.114509201869,0.114413958183,0.114318713446,0.114223467658,0.11412822082,0.114032972933,0.113937723998,0.113842474016,0.113747222987,0.113651970913,0.113556717794,0.113461463631,0.113366208425,0.113270952178,0.113175694889,0.113080436559,0.112985177191,0.112889916784,0.112794655339,0.112699392857,0.11260412934,0.112508864787,0.112413599201,0.112318332581,0.112223064928,0.112127796244,0.11203252653,0.111937255786,0.111841984012,0.111746711211,0.111651437383,0.111556162528,0.111460886648,0.111365609743,0.111270331815,0.111175052864,0.111079772891,0.110984491897,0.110889209883,0.11079392685,0.110698642798,0.110603357729,0.110508071643,0.110412784541,0.110317496424,0.110222207294,0.11012691715,0.110031625994,0.109936333827,0.109841040649,0.109745746461,0.109650451265,0.109555155061,0.10945985785,0.109364559632,0.10926926041,0.109173960183,0.109078658952,0.108983356719,0.108888053485,0.108792749249,0.108697444013,0.108602137778,0.108506830545,0.108411522315,0.108316213088,0.108220902865,0.108125591648,0.108030279437,0.107934966233,0.107839652036,0.107744336849,0.107649020671,0.107553703504,0.107458385348,0.107363066204,0.107267746073,0.107172424957,0.107077102855,0.106981779769,0.1068864557,0.106791130648,0.106695804615,0.106600477601,0.106505149607,0.106409820634,0.106314490683,0.106219159755,0.106123827851,0.106028494971,0.105933161116,0.105837826288,0.105742490487,0.105647153713,0.105551815969,0.105456477255,0.105361137571,0.105265796919,0.105170455299,0.105075112713,0.10497976916,0.104884424643,0.104789079162,0.104693732717,0.10459838531,0.104503036942,0.104407687613,0.104312337325,0.104216986077,0.104121633872,0.10402628071,0.103930926591,0.103835571517,0.103740215489,0.103644858507,0.103549500573,0.103454141686,0.103358781849,0.103263421062,0.103168059325,0.10307269664,0.102977333008,0.102881968429,0.102786602905,0.102691236436,0.102595869022,0.102500500666,0.102405131368,0.102309761128,0.102214389948,0.102119017829,0.10202364477,0.101928270774,0.101832895841,0.101737519973,0.101642143168,0.10154676543,0.101451386758,0.101356007154,0.101260626618,0.101165245151,0.101069862755,0.100974479429,0.100879095176,0.100783709995,0.100688323887,0.100592936854,0.100497548897,0.100402160016,0.100306770211,0.100211379485,0.100115987838,0.100020595271,0.0999252017837,0.0998298073783,0.0997344120553,0.0996390158156,0.0995436186601,0.0994482205895,0.0993528216049,0.099257421707,0.0991620208967,0.099066619175,0.0989712165427,0.0988758130007,0.0987804085498,0.098685003191,0.098589596925,0.0984941897529,0.0983987816754,0.0983033726934,0.0982079628079,0.0981125520196,0.0980171403296,0.0979217277385,0.0978263142474,0.0977308998571,0.0976354845685,0.0975400683825,0.0974446512998,0.0973492333215,0.0972538144484,0.0971583946813,0.0970629740212,0.0969675524688,0.0968721300252,0.0967767066912,0.0966812824676,0.0965858573553,0.0964904313553,0.0963950044683,0.0962995766952,0.096204148037,0.0961087184946,0.0960132880687,0.0959178567602,0.0958224245702,0.0957269914993,0.0956315575485,0.0955361227188,0.0954406870108,0.0953452504256,0.095249812964,0.0951543746269,0.0950589354152,0.0949634953296,0.0948680543712,0.0947726125408,0.0946771698393,0.0945817262675,0.0944862818264,0.0943908365167,0.0942953903394,0.0941999432954,0.0941044953855,0.0940090466106,0.0939135969716,0.0938181464694,0.0937226951048,0.0936272428788,0.0935317897921,0.0934363358457,0.0933408810405,0.0932454253773,0.093149968857,0.0930545114805,0.0929590532487,0.0928635941624,0.0927681342225,0.0926726734299,0.0925772117855,0.0924817492901,0.0923862859447,0.0922908217501,0.0921953567071,0.0920998908167,0.0920044240798,0.0919089564971,0.0918134880697,0.0917180187983,0.0916225486839,0.0915270777273,0.0914316059294,0.0913361332911,0.0912406598132,0.0911451854967,0.0910497103424,0.0909542343511,0.0908587575239,0.0907632798615,0.0906678013648,0.0905723220347,0.0904768418721,0.0903813608779,0.0902858790529,0.0901903963979,0.090094912914,0.089999428602,0.0899039434627,0.089808457497,0.0897129707058,0.08961748309,0.0895219946505,0.0894265053881,0.0893310153037,0.0892355243981,0.0891400326724,0.0890445401273,0.0889490467637,0.0888535525825,0.0887580575846,0.0886625617709,0.0885670651421,0.0884715676993,0.0883760694433,0.088280570375,0.0881850704952,0.0880895698048,0.0879940683047,0.0878985659958,0.0878030628789,0.087707558955,0.0876120542249,0.0875165486895,0.0874210423496,0.0873255352062,0.0872300272601,0.0871345185122,0.0870390089634,0.0869434986145,0.0868479874665,0.0867524755202,0.0866569627765,0.0865614492363,0.0864659349003,0.0863704197697,0.0862749038451,0.0861793871275,0.0860838696177,0.0859883513167,0.0858928322253,0.0857973123444,0.0857017916749,0.0856062702176,0.0855107479735,0.0854152249433,0.085319701128,0.0852241765285,0.0851286511456,0.0850331249803,0.0849375980333,0.0848420703056,0.0847465417981,0.0846510125116,0.0845554824469,0.0844599516051,0.0843644199869,0.0842688875933,0.0841733544251,0.0840778204832,0.0839822857685,0.0838867502818,0.083791214024,0.0836956769961,0.0836001391988,0.0835046006332,0.0834090612999,0.0833135212,0.0832179803343,0.0831224387036,0.0830268963089,0.0829313531511,0.0828358092309,0.0827402645494,0.0826447191073,0.0825491729056,0.0824536259451,0.0823580782266,0.0822625297512,0.0821669805197,0.0820714305328,0.0819758797916,0.0818803282969,0.0817847760496,0.0816892230505,0.0815936693005,0.0814981148006,0.0814025595515,0.0813070035542,0.0812114468096,0.0811158893185,0.0810203310817,0.0809247721003,0.080829212375,0.0807336519067,0.0806380906964,0.0805425287448,0.080446966053,0.0803514026216,0.0802558384517,0.0801602735441,0.0800647078997,0.0799691415193,0.0798735744039,0.0797780065543,0.0796824379714,0.0795868686561,0.0794912986092,0.0793957278317,0.0793001563244,0.0792045840882,0.0791090111239,0.0790134374325,0.0789178630148,0.0788222878717,0.0787267120041,0.0786311354128,0.0785355580988,0.078439980063,0.0783444013061,0.0782488218291,0.0781532416328,0.0780576607182,0.077962079086,0.0778664967373,0.0777709136729,0.0776753298935,0.0775797454003,0.0774841601939,0.0773885742753,0.0772929876453,0.0771974003049,0.0771018122549,0.0770062234962,0.0769106340297,0.0768150438563,0.0767194529767,0.076623861392,0.076528269103,0.0764326761105,0.0763370824155,0.0762414880189,0.0761458929214,0.076050297124,0.0759547006275,0.075859103433,0.0757635055411,0.0756679069528,0.075572307669,0.0754767076906,0.0753811070184,0.0752855056533,0.0751899035962,0.0750943008479,0.0749986974094,0.0749030932816,0.0748074884652,0.0747118829613,0.0746162767706,0.074520669894,0.0744250623325,0.0743294540868,0.074233845158,0.0741382355468,0.0740426252541,0.0739470142809,0.073851402628,0.0737557902962,0.0736601772865,0.0735645635997,0.0734689492367,0.0733733341984,0.0732777184857,0.0731821020994,0.0730864850405,0.0729908673097,0.072895248908,0.0727996298364,0.0727040100955,0.0726083896864,0.0725127686098,0.0724171468668,0.0723215244581,0.0722259013846,0.0721302776472,0.0720346532469,0.0719390281844,0.0718434024607,0.0717477760766,0.071652149033,0.0715565213308,0.0714608929708,0.0713652639541,0.0712696342813,0.0711740039534,0.0710783729714,0.070982741336,0.0708871090481,0.0707914761086,0.0706958425185,0.0706002082785,0.0705045733896,0.0704089378526,0.0703133016685,0.070217664838,0.0701220273621,0.0700263892417,0.0699307504776,0.0698351110707,0.0697394710219,0.0696438303321,0.0695481890021,0.0694525470328,0.0693569044252,0.06926126118,0.0691656172982,0.0690699727807,0.0689743276283,0.0688786818418,0.0687830354223,0.0686873883705,0.0685917406874,0.0684960923738,0.0684004434305,0.0683047938586,0.0682091436588,0.0681134928321,0.0680178413792,0.0679221893012,0.0678265365988,0.067730883273,0.0676352293246,0.0675395747545,0.0674439195637,0.0673482637529,0.067252607323,0.067156950275,0.0670612926096,0.0669656343279,0.0668699754306,0.0667743159187,0.066678655793,0.0665829950544,0.0664873337038,0.066391671742,0.06629600917,0.0662003459886,0.0661046821988,0.0660090178013,0.065913352797,0.0658176871869,0.0657220209718,0.0656263541526,0.0655306867302,0.0654350187054,0.0653393500792,0.0652436808524,0.0651480110259,0.0650523406005,0.0649566695772,0.0648609979569,0.0647653257403,0.0646696529285,0.0645739795222,0.0644783055224,0.0643826309299,0.0642869557456,0.0641912799704,0.0640956036051,0.0639999266507,0.063904249108,0.063808570978,0.0637128922614,0.0636172129592,0.0635215330722,0.0634258526014,0.0633301715475,0.0632344899116,0.0631388076944,0.0630431248968,0.0629474415198,0.0628517575642,0.0627560730308,0.0626603879206,0.0625647022345,0.0624690159732,0.0623733291378,0.062277641729,0.0621819537478,0.0620862651951,0.0619905760716,0.0618948863784,0.0617991961162,0.061703505286,0.0616078138886,0.0615121219249,0.0614164293958,0.0613207363022,0.061225042645,0.0611293484249,0.061033653643,0.0609379583001,0.0608422623971,0.0607465659348,0.0606508689141,0.0605551713359,0.0604594732012,0.0603637745107,0.0602680752653,0.060172375466,0.0600766751136,0.059980974209,0.059885272753,0.0597895707466,0.0596938681907,0.059598165086,0.0595024614335,0.0594067572341,0.0593110524886,0.059215347198,0.059119641363,0.0590239349847,0.0589282280638,0.0588325206012,0.0587368125979,0.0586411040547,0.0585453949724,0.0584496853521,0.0583539751944,0.0582582645004,0.0581625532709,0.0580668415068,0.0579711292089,0.0578754163782,0.0577797030155,0.0576839891217,0.0575882746977,0.0574925597444,0.0573968442626,0.0573011282532,0.0572054117171,0.0571096946552,0.0570139770683,0.0569182589574,0.0568225403233,0.0567268211669,0.0566311014891,0.0565353812907,0.0564396605727,0.0563439393359,0.0562482175812,0.0561524953095,0.0560567725216,0.0559610492185,0.055865325401,0.05576960107,0.0556738762264,0.055578150871,0.0554824250048,0.0553866986286,0.0552909717432,0.0551952443497,0.0550995164488,0.0550037880415,0.0549080591285,0.0548123297109,0.0547165997894,0.054620869365,0.0545251384386,0.0544294070109,0.054333675083,0.0542379426556,0.0541422097297,0.0540464763061,0.0539507423857,0.0538550079695,0.0537592730582,0.0536635376527,0.053567801754,0.0534720653629,0.0533763284804,0.0532805911071,0.0531848532442,0.0530891148924,0.0529933760526,0.0528976367257,0.0528018969125,0.0527061566141,0.0526104158311,0.0525146745646,0.0524189328154,0.0523231905843,0.0522274478723,0.0521317046803,0.052035961009,0.0519402168595,0.0518444722325,0.051748727129,0.0516529815499,0.0515572354959,0.051461488968,0.0513657419672,0.0512699944941,0.0511742465499,0.0510784981352,0.050982749251,0.0508869998982,0.0507912500777,0.0506954997903,0.0505997490369,0.0505039978184,0.0504082461357,0.0503124939897,0.0502167413812,0.0501209883111,0.0500252347803,0.0499294807897,0.0498337263401,0.0497379714325,0.0496422160677,0.0495464602466,0.0494507039701,0.049354947239,0.0492591900543,0.0491634324168,0.0490676743274,0.048971915787,0.0488761567964,0.0487803973566,0.0486846374684,0.0485888771327,0.0484931163504,0.0483973551224,0.0483015934495,0.0482058313326,0.0481100687726,0.0480143057704,0.0479185423269,0.0478227784429,0.0477270141193,0.047631249357,0.047535484157,0.0474397185199,0.0473439524469,0.0472481859386,0.0471524189961,0.0470566516201,0.0469608838116,0.0468651155715,0.0467693469005,0.0466735777997,0.0465778082699,0.0464820383119,0.0463862679267,0.0462904971151,0.046194725878,0.0460989542163,0.0460031821309,0.0459074096226,0.0458116366924,0.045715863341,0.0456200895695,0.0455243153786,0.0454285407693,0.0453327657424,0.0452369902988,0.0451412144394,0.0450454381651,0.0449496614767,0.0448538843752,0.0447581068613,0.0446623289361,0.0445665506003,0.0444707718549,0.0443749927008,0.0442792131387,0.0441834331696,0.0440876527945,0.043991872014,0.0438960908292,0.0438003092409,0.0437045272501,0.0436087448575,0.043512962064,0.0434171788706,0.0433213952781,0.0432256112874,0.0431298268994,0.043034042115,0.0429382569349,0.0428424713602,0.0427466853918,0.0426508990304,0.0425551122769,0.0424593251323,0.0423635375974,0.0422677496731,0.0421719613603,0.0420761726599,0.0419803835727,0.0418845940997,0.0417888042416,0.0416930139995,0.0415972233741,0.0415014323663,0.0414056409771,0.0413098492073,0.0412140570577,0.0411182645294,0.0410224716231,0.0409266783397,0.0408308846801,0.0407350906452,0.0406392962359,0.0405435014531,0.0404477062976,0.0403519107703,0.040256114872,0.0401603186038,0.0400645219664,0.0399687249608,0.0398729275877,0.0397771298482,0.039681331743,0.0395855332731,0.0394897344394,0.0393939352426,0.0392981356838,0.0392023357637,0.0391065354833,0.0390107348435,0.038914933845,0.0388191324889,0.0387233307759,0.038627528707,0.0385317262831,0.038435923505,0.0383401203736,0.0382443168897,0.0381485130544,0.0380527088683,0.0379569043325,0.0378610994479,0.0377652942152,0.0376694886353,0.0375736827093,0.0374778764378,0.0373820698219,0.0372862628624,0.0371904555601,0.037094647916,0.0369988399309,0.0369030316057,0.0368072229414,0.0367114139387,0.0366156045985,0.0365197949218,0.0364239849094,0.0363281745623,0.0362323638812,0.036136552867,0.0360407415207,0.0359449298431,0.0358491178351,0.0357533054976,0.0356574928315,0.0355616798376,0.0354658665169,0.0353700528701,0.0352742388982,0.0351784246021,0.0350826099826,0.0349867950407,0.0348909797772,0.034795164193,0.0346993482889,0.0346035320659,0.0345077155248,0.0344118986665,0.034316081492,0.034220264002,0.0341244461974,0.0340286280792,0.0339328096482,0.0338369909053,0.0337411718514,0.0336453524873,0.033549532814,0.0334537128323,0.0333578925431,0.0332620719473,0.0331662510457,0.0330704298393,0.0329746083289,0.0328787865154,0.0327829643997,0.0326871419827,0.0325913192652,0.0324954962481,0.0323996729324,0.0323038493188,0.0322080254083,0.0321122012018,0.0320163767,0.031920551904,0.0318247268146,0.0317289014327,0.0316330757591,0.0315372497948,0.0314414235406,0.0313455969973,0.031249770166,0.0311539430474,0.0310581156424,0.030962287952,0.030866459977,0.0307706317182,0.0306748031766,0.0305789743531,0.0304831452485,0.0303873158637,0.0302914861995,0.030195656257,0.0300998260369,0.0300039955401,0.0299081647675,0.02981233372,0.0297165023985,0.0296206708039,0.0295248389369,0.0294290067986,0.0293331743898,0.0292373417114,0.0291415087642,0.0290456755491,0.0289498420671,0.028854008319,0.0287581743056,0.028662340028,0.0285665054868,0.0284706706831,0.0283748356177,0.0282790002914,0.0281831647053,0.02808732886,0.0279914927567,0.027895656396,0.0277998197789,0.0277039829062,0.027608145779,0.0275123083979,0.027416470764,0.0273206328781,0.027224794741,0.0271289563537,0.027033117717,0.0269372788319,0.0268414396991,0.0267456003196,0.0266497606943,0.026553920824,0.0264580807097,0.0263622403521,0.0262663997523,0.026170558911,0.0260747178291,0.0259788765076,0.0258830349473,0.025787193149,0.0256913511138,0.0255955088423,0.0254996663357,0.0254038235946,0.02530798062,0.0252121374128,0.0251162939739,0.0250204503041,0.0249246064043,0.0248287622754,0.0247329179183,0.0246370733338,0.0245412285229,0.0244453834864,0.0243495382252,0.0242536927402,0.0241578470323,0.0240620011023,0.0239661549511,0.0238703085797,0.0237744619888,0.0236786151794,0.0235827681524,0.0234869209086,0.0233910734489,0.0232952257742,0.0231993778853,0.0231035297833,0.0230076814688,0.0229118329429,0.0228159842064,0.0227201352602,0.0226242861051,0.0225284367421,0.0224325871719,0.0223367373956,0.022240887414,0.022145037228,0.0220491868384,0.0219533362461,0.021857485452,0.021761634457,0.021665783262,0.0215699318679,0.0214740802755,0.0213782284857,0.0212823764994,0.0211865243174,0.0210906719408,0.0209948193702,0.0208989666067,0.0208031136511,0.0207072605043,0.0206114071671,0.0205155536405,0.0204196999253,0.0203238460224,0.0202279919327,0.0201321376571,0.0200362831964,0.0199404285515,0.0198445737234,0.0197487187128,0.0196528635207,0.019557008148,0.0194611525955,0.0193652968642,0.0192694409548,0.0191735848683,0.0190777286056,0.0189818721675,0.0188860155549,0.0187901587688,0.0186943018099,0.0185984446792,0.0185025873775,0.0184067299058,0.0183108722649,0.0182150144556,0.018119156479,0.0180232983358,0.0179274400269,0.0178315815532,0.0177357229157,0.0176398641151,0.0175440051524,0.0174481460284,0.017352286744,0.0172564273001,0.0171605676976,0.0170647079374,0.0169688480203,0.0168729879473,0.0167771277191,0.0166812673368,0.0165854068011,0.016489546113,0.0163936852733,0.0162978242829,0.0162019631427,0.0161061018535,0.0160102404164,0.015914378832,0.0158185171014,0.0157226552254,0.0156267932049,0.0155309310407,0.0154350687338,0.015339206285,0.0152433436952,0.0151474809653,0.0150516180961,0.0149557550886,0.0148598919437,0.0147640286621,0.0146681652449,0.0145723016928,0.0144764380067,0.0143805741876,0.0142847102364,0.0141888461538,0.0140929819408,0.0139971175982,0.013901253127,0.0138053885281,0.0137095238022,0.0136136589503,0.0135177939733,0.013421928872,0.0133260636473,0.0132301983002,0.0131343328315,0.013038467242,0.0129426015327,0.0128467357044,0.012750869758,0.0126550036944,0.0125591375145,0.0124632712192,0.0123674048093,0.0122715382857,0.0121756716493,0.0120798049011,0.0119839380417,0.0118880710723,0.0117922039935,0.0116963368064,0.0116004695117,0.0115046021104,0.0114087346034,0.0113128669915,0.0112169992756,0.0111211314566,0.0110252635354,0.0109293955129,0.0108335273899,0.0107376591673,0.010641790846,0.0105459224269,0.0104500539108,0.0103541852987,0.0102583165915,0.0101624477899,0.0100665788949,0.00997070990742,0.00987484082827,0.00977897165835,0.00968310239854,0.00958723304973,0.00949136361279,0.00939549408862,0.00929962447808,0.00920375478206,0.00910788500144,0.00901201513711,0.00891614518993,0.00882027516081,0.00872440505061,0.00862853486021,0.00853266459051,0.00843679424237,0.00834092381668,0.00824505331433,0.00814918273619,0.00805331208315,0.00795744135607,0.00786157055586,0.00776569968339,0.00766982873953,0.00757395772518,0.0074780866412,0.00738221548849,0.00728634426793,0.00719047298039,0.00709460162675,0.00699873020791,0.00690285872473,0.0068069871781,0.00671111556891,0.00661524389803,0.00651937216634,0.00642350037473,0.00632762852407,0.00623175661525,0.00613588464915,0.00604001262666,0.00594414054864,0.00584826841598,0.00575239622957,0.00565652399029,0.00556065169901,0.00546477935662,0.005368906964,0.00527303452202,0.00517716203158,0.00508128949356,0.00498541690882,0.00488954427826,0.00479367160276,0.00469779888319,0.00460192612045,0.0045060533154,0.00441018046894,0.00431430758194,0.00421843465528,0.00412256168984,0.00402668868652,0.00393081564618,0.00383494256971,0.00373906945799,0.0036431963119,0.00354732313232,0.00345144992014,0.00335557667623,0.00325970340148,0.00316383009676,0.00306795676297,0.00297208340097,0.00287621001166,0.0027803365959,0.0026844631546,0.00258858968861,0.00249271619884,0.00239684268615,0.00230096915143,0.00220509559556,0.00210922201942,0.00201334842389,0.00191747480986,0.0018216011782,0.0017257275298,0.00162985386553,0.00153398018629,0.00143810649294,0.00134223278637,0.00124635906747,0.00115048533711,0.00105461159618,0.000958737845554,0.000862864086114,0.000766990318743,0.000671116544322,0.000575242763732,0.000479368977855,0.000383495187571,0.000287621393763,0.000191747597311,9.58737990959e-05,1.22464679915e-16,-9.58737990957e-05,-0.000191747597311,-0.000287621393763,-0.000383495187571,-0.000479368977855,-0.000575242763732,-0.000671116544321,-0.000766990318743,-0.000862864086113,-0.000958737845553,-0.00105461159618,-0.00115048533711,-0.00124635906747,-0.00134223278637,-0.00143810649294,-0.00153398018628,-0.00162985386553,-0.00172572752979,-0.0018216011782,-0.00191747480986,-0.00201334842389,-0.00210922201942,-0.00220509559555,-0.00230096915143,-0.00239684268615,-0.00249271619884,-0.00258858968861,-0.0026844631546,-0.0027803365959,-0.00287621001166,-0.00297208340097,-0.00306795676297,-0.00316383009676,-0.00325970340148,-0.00335557667623,-0.00345144992014,-0.00354732313232,-0.0036431963119,-0.00373906945799,-0.00383494256971,-0.00393081564618,-0.00402668868652,-0.00412256168984,-0.00421843465528,-0.00431430758194,-0.00441018046894,-0.0045060533154,-0.00460192612045,-0.00469779888319,-0.00479367160276,-0.00488954427826,-0.00498541690882,-0.00508128949356,-0.00517716203158,-0.00527303452202,-0.005368906964,-0.00546477935662,-0.00556065169901,-0.00565652399029,-0.00575239622957,-0.00584826841598,-0.00594414054864,-0.00604001262666,-0.00613588464915,-0.00623175661525,-0.00632762852407,-0.00642350037473,-0.00651937216634,-0.00661524389803,-0.00671111556891,-0.0068069871781,-0.00690285872473,-0.00699873020791,-0.00709460162675,-0.00719047298039,-0.00728634426793,-0.00738221548849,-0.0074780866412,-0.00757395772518,-0.00766982873953,-0.00776569968339,-0.00786157055586,-0.00795744135607,-0.00805331208315,-0.00814918273619,-0.00824505331433,-0.00834092381668,-0.00843679424237,-0.00853266459051,-0.00862853486021,-0.00872440505061,-0.00882027516081,-0.00891614518993,-0.00901201513711,-0.00910788500144,-0.00920375478206,-0.00929962447808,-0.00939549408862,-0.00949136361279,-0.00958723304973,-0.00968310239854,-0.00977897165835,-0.00987484082827,-0.00997070990742,-0.0100665788949,-0.0101624477899,-0.0102583165915,-0.0103541852987,-0.0104500539108,-0.0105459224269,-0.010641790846,-0.0107376591673,-0.0108335273899,-0.0109293955129,-0.0110252635354,-0.0111211314566,-0.0112169992756,-0.0113128669915,-0.0114087346034,-0.0115046021104,-0.0116004695117,-0.0116963368064,-0.0117922039935,-0.0118880710723,-0.0119839380417,-0.0120798049011,-0.0121756716493,-0.0122715382857,-0.0123674048093,-0.0124632712192,-0.0125591375145,-0.0126550036944,-0.012750869758,-0.0128467357044,-0.0129426015327,-0.013038467242,-0.0131343328315,-0.0132301983002,-0.0133260636473,-0.013421928872,-0.0135177939733,-0.0136136589503,-0.0137095238022,-0.0138053885281,-0.013901253127,-0.0139971175982,-0.0140929819408,-0.0141888461538,-0.0142847102364,-0.0143805741876,-0.0144764380067,-0.0145723016928,-0.0146681652449,-0.0147640286621,-0.0148598919437,-0.0149557550886,-0.0150516180961,-0.0151474809653,-0.0152433436952,-0.015339206285,-0.0154350687338,-0.0155309310407,-0.0156267932049,-0.0157226552254,-0.0158185171014,-0.015914378832,-0.0160102404164,-0.0161061018535,-0.0162019631427,-0.0162978242829,-0.0163936852733,-0.016489546113,-0.0165854068011,-0.0166812673368,-0.0167771277191,-0.0168729879473,-0.0169688480203,-0.0170647079374,-0.0171605676976,-0.0172564273001,-0.017352286744,-0.0174481460284,-0.0175440051524,-0.0176398641151,-0.0177357229157,-0.0178315815532,-0.0179274400269,-0.0180232983358,-0.018119156479,-0.0182150144556,-0.0183108722649,-0.0184067299058,-0.0185025873775,-0.0185984446792,-0.0186943018099,-0.0187901587688,-0.0188860155549,-0.0189818721675,-0.0190777286056,-0.0191735848683,-0.0192694409548,-0.0193652968642,-0.0194611525955,-0.019557008148,-0.0196528635207,-0.0197487187128,-0.0198445737234,-0.0199404285515,-0.0200362831964,-0.0201321376571,-0.0202279919327,-0.0203238460224,-0.0204196999253,-0.0205155536405,-0.0206114071671,-0.0207072605043,-0.0208031136511,-0.0208989666067,-0.0209948193702,-0.0210906719408,-0.0211865243174,-0.0212823764994,-0.0213782284857,-0.0214740802755,-0.0215699318679,-0.021665783262,-0.021761634457,-0.021857485452,-0.0219533362461,-0.0220491868384,-0.022145037228,-0.022240887414,-0.0223367373956,-0.0224325871719,-0.0225284367421,-0.0226242861051,-0.0227201352602,-0.0228159842064,-0.0229118329429,-0.0230076814688,-0.0231035297833,-0.0231993778853,-0.0232952257742,-0.0233910734489,-0.0234869209086,-0.0235827681524,-0.0236786151794,-0.0237744619888,-0.0238703085797,-0.0239661549511,-0.0240620011023,-0.0241578470323,-0.0242536927402,-0.0243495382252,-0.0244453834864,-0.0245412285229,-0.0246370733338,-0.0247329179183,-0.0248287622754,-0.0249246064043,-0.0250204503041,-0.0251162939739,-0.0252121374128,-0.02530798062,-0.0254038235946,-0.0254996663357,-0.0255955088423,-0.0256913511138,-0.025787193149,-0.0258830349473,-0.0259788765076,-0.0260747178291,-0.026170558911,-0.0262663997523,-0.0263622403521,-0.0264580807097,-0.026553920824,-0.0266497606943,-0.0267456003196,-0.0268414396991,-0.0269372788319,-0.027033117717,-0.0271289563537,-0.027224794741,-0.0273206328781,-0.027416470764,-0.0275123083979,-0.027608145779,-0.0277039829062,-0.0277998197789,-0.027895656396,-0.0279914927567,-0.02808732886,-0.0281831647053,-0.0282790002914,-0.0283748356177,-0.0284706706831,-0.0285665054868,-0.028662340028,-0.0287581743056,-0.028854008319,-0.0289498420671,-0.0290456755491,-0.0291415087642,-0.0292373417114,-0.0293331743898,-0.0294290067986,-0.0295248389369,-0.0296206708039,-0.0297165023985,-0.02981233372,-0.0299081647675,-0.0300039955401,-0.0300998260369,-0.030195656257,-0.0302914861995,-0.0303873158637,-0.0304831452485,-0.0305789743531,-0.0306748031766,-0.0307706317182,-0.030866459977,-0.030962287952,-0.0310581156424,-0.0311539430474,-0.031249770166,-0.0313455969973,-0.0314414235406,-0.0315372497948,-0.0316330757591,-0.0317289014327,-0.0318247268146,-0.031920551904,-0.0320163767,-0.0321122012018,-0.0322080254083,-0.0323038493188,-0.0323996729324,-0.0324954962481,-0.0325913192652,-0.0326871419827,-0.0327829643997,-0.0328787865154,-0.0329746083289,-0.0330704298393,-0.0331662510457,-0.0332620719473,-0.0333578925431,-0.0334537128323,-0.033549532814,-0.0336453524873,-0.0337411718514,-0.0338369909053,-0.0339328096482,-0.0340286280792,-0.0341244461974,-0.034220264002,-0.034316081492,-0.0344118986665,-0.0345077155248,-0.0346035320659,-0.0346993482889,-0.034795164193,-0.0348909797772,-0.0349867950407,-0.0350826099826,-0.0351784246021,-0.0352742388982,-0.0353700528701,-0.0354658665169,-0.0355616798376,-0.0356574928315,-0.0357533054976,-0.0358491178351,-0.0359449298431,-0.0360407415207,-0.036136552867,-0.0362323638812,-0.0363281745623,-0.0364239849094,-0.0365197949218,-0.0366156045985,-0.0367114139387,-0.0368072229414,-0.0369030316057,-0.0369988399309,-0.037094647916,-0.0371904555601,-0.0372862628624,-0.0373820698219,-0.0374778764378,-0.0375736827093,-0.0376694886353,-0.0377652942152,-0.0378610994479,-0.0379569043325,-0.0380527088683,-0.0381485130544,-0.0382443168897,-0.0383401203736,-0.038435923505,-0.0385317262831,-0.038627528707,-0.0387233307759,-0.0388191324889,-0.038914933845,-0.0390107348435,-0.0391065354833,-0.0392023357637,-0.0392981356838,-0.0393939352426,-0.0394897344394,-0.0395855332731,-0.039681331743,-0.0397771298482,-0.0398729275877,-0.0399687249608,-0.0400645219664,-0.0401603186038,-0.040256114872,-0.0403519107703,-0.0404477062976,-0.0405435014531,-0.0406392962359,-0.0407350906452,-0.0408308846801,-0.0409266783397,-0.0410224716231,-0.0411182645294,-0.0412140570577,-0.0413098492073,-0.0414056409771,-0.0415014323663,-0.0415972233741,-0.0416930139995,-0.0417888042416,-0.0418845940997,-0.0419803835727,-0.0420761726599,-0.0421719613603,-0.0422677496731,-0.0423635375974,-0.0424593251323,-0.0425551122769,-0.0426508990304,-0.0427466853918,-0.0428424713602,-0.0429382569349,-0.043034042115,-0.0431298268994,-0.0432256112874,-0.0433213952781,-0.0434171788706,-0.043512962064,-0.0436087448575,-0.0437045272501,-0.0438003092409,-0.0438960908292,-0.043991872014,-0.0440876527945,-0.0441834331696,-0.0442792131387,-0.0443749927008,-0.0444707718549,-0.0445665506003,-0.0446623289361,-0.0447581068613,-0.0448538843752,-0.0449496614767,-0.0450454381651,-0.0451412144394,-0.0452369902988,-0.0453327657424,-0.0454285407693,-0.0455243153786,-0.0456200895695,-0.045715863341,-0.0458116366924,-0.0459074096226,-0.0460031821309,-0.0460989542163,-0.046194725878,-0.0462904971151,-0.0463862679267,-0.0464820383119,-0.0465778082699,-0.0466735777997,-0.0467693469005,-0.0468651155715,-0.0469608838116,-0.0470566516201,-0.0471524189961,-0.0472481859386,-0.0473439524469,-0.0474397185199,-0.047535484157,-0.047631249357,-0.0477270141193,-0.0478227784429,-0.0479185423269,-0.0480143057704,-0.0481100687726,-0.0482058313326,-0.0483015934495,-0.0483973551224,-0.0484931163504,-0.0485888771327,-0.0486846374684,-0.0487803973566,-0.0488761567964,-0.048971915787,-0.0490676743274,-0.0491634324168,-0.0492591900543,-0.049354947239,-0.0494507039701,-0.0495464602466,-0.0496422160677,-0.0497379714325,-0.0498337263401,-0.0499294807897,-0.0500252347803,-0.0501209883111,-0.0502167413812,-0.0503124939897,-0.0504082461357,-0.0505039978184,-0.0505997490369,-0.0506954997903,-0.0507912500777,-0.0508869998982,-0.050982749251,-0.0510784981352,-0.0511742465499,-0.0512699944941,-0.0513657419672,-0.051461488968,-0.0515572354959,-0.0516529815499,-0.051748727129,-0.0518444722325,-0.0519402168595,-0.052035961009,-0.0521317046803,-0.0522274478723,-0.0523231905843,-0.0524189328154,-0.0525146745646,-0.0526104158311,-0.0527061566141,-0.0528018969125,-0.0528976367257,-0.0529933760526,-0.0530891148924,-0.0531848532442,-0.0532805911071,-0.0533763284804,-0.0534720653629,-0.053567801754,-0.0536635376527,-0.0537592730582,-0.0538550079695,-0.0539507423857,-0.0540464763061,-0.0541422097297,-0.0542379426556,-0.054333675083,-0.0544294070109,-0.0545251384386,-0.054620869365,-0.0547165997894,-0.0548123297109,-0.0549080591285,-0.0550037880415,-0.0550995164488,-0.0551952443497,-0.0552909717432,-0.0553866986286,-0.0554824250048,-0.055578150871,-0.0556738762264,-0.05576960107,-0.055865325401,-0.0559610492185,-0.0560567725216,-0.0561524953095,-0.0562482175812,-0.0563439393359,-0.0564396605727,-0.0565353812907,-0.0566311014891,-0.0567268211669,-0.0568225403233,-0.0569182589574,-0.0570139770683,-0.0571096946552,-0.0572054117171,-0.0573011282532,-0.0573968442626,-0.0574925597444,-0.0575882746977,-0.0576839891217,-0.0577797030155,-0.0578754163782,-0.0579711292089,-0.0580668415068,-0.0581625532709,-0.0582582645004,-0.0583539751944,-0.0584496853521,-0.0585453949724,-0.0586411040547,-0.0587368125979,-0.0588325206012,-0.0589282280638,-0.0590239349847,-0.059119641363,-0.059215347198,-0.0593110524886,-0.0594067572341,-0.0595024614335,-0.059598165086,-0.0596938681907,-0.0597895707466,-0.059885272753,-0.059980974209,-0.0600766751136,-0.060172375466,-0.0602680752653,-0.0603637745107,-0.0604594732012,-0.0605551713359,-0.0606508689141,-0.0607465659348,-0.0608422623971,-0.0609379583001,-0.061033653643,-0.0611293484249,-0.061225042645,-0.0613207363022,-0.0614164293958,-0.0615121219249,-0.0616078138886,-0.061703505286,-0.0617991961162,-0.0618948863784,-0.0619905760716,-0.0620862651951,-0.0621819537478,-0.062277641729,-0.0623733291378,-0.0624690159732,-0.0625647022345,-0.0626603879206,-0.0627560730308,-0.0628517575642,-0.0629474415198,-0.0630431248968,-0.0631388076944,-0.0632344899116,-0.0633301715475,-0.0634258526014,-0.0635215330722,-0.0636172129592,-0.0637128922614,-0.063808570978,-0.063904249108,-0.0639999266507,-0.0640956036051,-0.0641912799704,-0.0642869557456,-0.0643826309299,-0.0644783055224,-0.0645739795222,-0.0646696529285,-0.0647653257403,-0.0648609979569,-0.0649566695772,-0.0650523406005,-0.0651480110259,-0.0652436808524,-0.0653393500792,-0.0654350187054,-0.0655306867302,-0.0656263541526,-0.0657220209718,-0.0658176871869,-0.065913352797,-0.0660090178013,-0.0661046821988,-0.0662003459886,-0.06629600917,-0.066391671742,-0.0664873337038,-0.0665829950544,-0.066678655793,-0.0667743159187,-0.0668699754306,-0.0669656343279,-0.0670612926096,-0.067156950275,-0.067252607323,-0.0673482637529,-0.0674439195637,-0.0675395747545,-0.0676352293246,-0.067730883273,-0.0678265365988,-0.0679221893012,-0.0680178413792,-0.0681134928321,-0.0682091436588,-0.0683047938586,-0.0684004434305,-0.0684960923738,-0.0685917406874,-0.0686873883705,-0.0687830354223,-0.0688786818418,-0.0689743276283,-0.0690699727807,-0.0691656172982,-0.06926126118,-0.0693569044252,-0.0694525470328,-0.0695481890021,-0.0696438303321,-0.0697394710219,-0.0698351110707,-0.0699307504776,-0.0700263892417,-0.0701220273621,-0.070217664838,-0.0703133016685,-0.0704089378526,-0.0705045733896,-0.0706002082785,-0.0706958425185,-0.0707914761086,-0.0708871090481,-0.070982741336,-0.0710783729714,-0.0711740039534,-0.0712696342813,-0.0713652639541,-0.0714608929708,-0.0715565213308,-0.071652149033,-0.0717477760766,-0.0718434024607,-0.0719390281844,-0.0720346532469,-0.0721302776472,-0.0722259013846,-0.0723215244581,-0.0724171468668,-0.0725127686098,-0.0726083896864,-0.0727040100955,-0.0727996298364,-0.072895248908,-0.0729908673097,-0.0730864850405,-0.0731821020994,-0.0732777184857,-0.0733733341984,-0.0734689492367,-0.0735645635997,-0.0736601772865,-0.0737557902962,-0.073851402628,-0.0739470142809,-0.0740426252541,-0.0741382355468,-0.074233845158,-0.0743294540868,-0.0744250623325,-0.074520669894,-0.0746162767706,-0.0747118829613,-0.0748074884652,-0.0749030932816,-0.0749986974094,-0.0750943008479,-0.0751899035962,-0.0752855056533,-0.0753811070184,-0.0754767076906,-0.075572307669,-0.0756679069528,-0.0757635055411,-0.075859103433,-0.0759547006275,-0.076050297124,-0.0761458929214,-0.0762414880189,-0.0763370824155,-0.0764326761105,-0.076528269103,-0.076623861392,-0.0767194529767,-0.0768150438563,-0.0769106340297,-0.0770062234962,-0.0771018122549,-0.0771974003049,-0.0772929876453,-0.0773885742753,-0.0774841601939,-0.0775797454003,-0.0776753298935,-0.0777709136729,-0.0778664967373,-0.077962079086,-0.0780576607182,-0.0781532416328,-0.0782488218291,-0.0783444013061,-0.078439980063,-0.0785355580988,-0.0786311354128,-0.0787267120041,-0.0788222878717,-0.0789178630148,-0.0790134374325,-0.0791090111239,-0.0792045840882,-0.0793001563244,-0.0793957278317,-0.0794912986092,-0.0795868686561,-0.0796824379714,-0.0797780065543,-0.0798735744039,-0.0799691415193,-0.0800647078997,-0.0801602735441,-0.0802558384517,-0.0803514026216,-0.0804469660529,-0.0805425287448,-0.0806380906964,-0.0807336519067,-0.080829212375,-0.0809247721003,-0.0810203310817,-0.0811158893185,-0.0812114468096,-0.0813070035542,-0.0814025595515,-0.0814981148006,-0.0815936693005,-0.0816892230505,-0.0817847760496,-0.0818803282969,-0.0819758797916,-0.0820714305328,-0.0821669805197,-0.0822625297512,-0.0823580782266,-0.0824536259451,-0.0825491729056,-0.0826447191073,-0.0827402645494,-0.0828358092309,-0.0829313531511,-0.0830268963089,-0.0831224387036,-0.0832179803343,-0.0833135212,-0.0834090612999,-0.0835046006332,-0.0836001391988,-0.0836956769961,-0.083791214024,-0.0838867502818,-0.0839822857685,-0.0840778204832,-0.0841733544251,-0.0842688875933,-0.0843644199869,-0.0844599516051,-0.0845554824469,-0.0846510125116,-0.0847465417981,-0.0848420703056,-0.0849375980333,-0.0850331249803,-0.0851286511456,-0.0852241765285,-0.085319701128,-0.0854152249433,-0.0855107479735,-0.0856062702176,-0.0857017916749,-0.0857973123444,-0.0858928322253,-0.0859883513167,-0.0860838696177,-0.0861793871275,-0.0862749038451,-0.0863704197697,-0.0864659349003,-0.0865614492363,-0.0866569627765,-0.0867524755202,-0.0868479874665,-0.0869434986145,-0.0870390089634,-0.0871345185122,-0.0872300272601,-0.0873255352062,-0.0874210423496,-0.0875165486895,-0.0876120542249,-0.087707558955,-0.0878030628789,-0.0878985659958,-0.0879940683047,-0.0880895698048,-0.0881850704952,-0.088280570375,-0.0883760694433,-0.0884715676993,-0.0885670651421,-0.0886625617709,-0.0887580575846,-0.0888535525825,-0.0889490467637,-0.0890445401273,-0.0891400326724,-0.0892355243981,-0.0893310153037,-0.0894265053881,-0.0895219946505,-0.08961748309,-0.0897129707058,-0.089808457497,-0.0899039434627,-0.089999428602,-0.090094912914,-0.0901903963979,-0.0902858790529,-0.0903813608779,-0.0904768418721,-0.0905723220347,-0.0906678013648,-0.0907632798615,-0.0908587575239,-0.0909542343511,-0.0910497103424,-0.0911451854967,-0.0912406598132,-0.0913361332911,-0.0914316059294,-0.0915270777273,-0.0916225486839,-0.0917180187983,-0.0918134880697,-0.0919089564971,-0.0920044240798,-0.0920998908167,-0.0921953567071,-0.0922908217501,-0.0923862859447,-0.0924817492901,-0.0925772117855,-0.0926726734299,-0.0927681342225,-0.0928635941624,-0.0929590532487,-0.0930545114805,-0.093149968857,-0.0932454253773,-0.0933408810405,-0.0934363358457,-0.0935317897921,-0.0936272428788,-0.0937226951048,-0.0938181464694,-0.0939135969716,-0.0940090466106,-0.0941044953855,-0.0941999432954,-0.0942953903394,-0.0943908365167,-0.0944862818264,-0.0945817262675,-0.0946771698393,-0.0947726125408,-0.0948680543712,-0.0949634953296,-0.0950589354152,-0.0951543746269,-0.095249812964,-0.0953452504256,-0.0954406870108,-0.0955361227188,-0.0956315575485,-0.0957269914993,-0.0958224245702,-0.0959178567602,-0.0960132880687,-0.0961087184946,-0.096204148037,-0.0962995766952,-0.0963950044683,-0.0964904313553,-0.0965858573553,-0.0966812824676,-0.0967767066912,-0.0968721300252,-0.0969675524688,-0.0970629740212,-0.0971583946813,-0.0972538144484,-0.0973492333215,-0.0974446512998,-0.0975400683825,-0.0976354845685,-0.0977308998571,-0.0978263142474,-0.0979217277385,-0.0980171403296,-0.0981125520196,-0.0982079628079,-0.0983033726934,-0.0983987816754,-0.0984941897529,-0.098589596925,-0.098685003191,-0.0987804085498,-0.0988758130007,-0.0989712165427,-0.099066619175,-0.0991620208967,-0.099257421707,-0.0993528216049,-0.0994482205895,-0.0995436186601,-0.0996390158156,-0.0997344120553,-0.0998298073783,-0.0999252017837,-0.100020595271,-0.100115987838,-0.100211379485,-0.100306770211,-0.100402160016,-0.100497548897,-0.100592936854,-0.100688323887,-0.100783709995,-0.100879095176,-0.100974479429,-0.101069862755,-0.101165245151,-0.101260626618,-0.101356007154,-0.101451386758,-0.10154676543,-0.101642143168,-0.101737519973,-0.101832895841,-0.101928270774,-0.10202364477,-0.102119017829,-0.102214389948,-0.102309761128,-0.102405131368,-0.102500500666,-0.102595869022,-0.102691236436,-0.102786602905,-0.102881968429,-0.102977333008,-0.10307269664,-0.103168059325,-0.103263421062,-0.103358781849,-0.103454141686,-0.103549500573,-0.103644858507,-0.103740215489,-0.103835571517,-0.103930926591,-0.10402628071,-0.104121633872,-0.104216986077,-0.104312337325,-0.104407687613,-0.104503036942,-0.10459838531,-0.104693732717,-0.104789079162,-0.104884424643,-0.10497976916,-0.105075112713,-0.105170455299,-0.105265796919,-0.105361137571,-0.105456477255,-0.105551815969,-0.105647153713,-0.105742490487,-0.105837826288,-0.105933161116,-0.106028494971,-0.106123827851,-0.106219159755,-0.106314490683,-0.106409820634,-0.106505149607,-0.106600477601,-0.106695804615,-0.106791130648,-0.1068864557,-0.106981779769,-0.107077102855,-0.107172424957,-0.107267746073,-0.107363066204,-0.107458385348,-0.107553703504,-0.107649020671,-0.107744336849,-0.107839652036,-0.107934966233,-0.108030279437,-0.108125591648,-0.108220902865,-0.108316213088,-0.108411522315,-0.108506830545,-0.108602137778,-0.108697444013,-0.108792749249,-0.108888053485,-0.108983356719,-0.109078658952,-0.109173960183,-0.10926926041,-0.109364559632,-0.10945985785,-0.109555155061,-0.109650451265,-0.109745746461,-0.109841040649,-0.109936333827,-0.110031625994,-0.11012691715,-0.110222207294,-0.110317496424,-0.110412784541,-0.110508071643,-0.110603357729,-0.110698642798,-0.11079392685,-0.110889209883,-0.110984491897,-0.111079772891,-0.111175052864,-0.111270331815,-0.111365609743,-0.111460886648,-0.111556162528,-0.111651437383,-0.111746711211,-0.111841984012,-0.111937255786,-0.11203252653,-0.112127796244,-0.112223064928,-0.112318332581,-0.112413599201,-0.112508864787,-0.11260412934,-0.112699392857,-0.112794655339,-0.112889916784,-0.112985177191,-0.113080436559,-0.113175694889,-0.113270952178,-0.113366208425,-0.113461463631,-0.113556717794,-0.113651970913,-0.113747222987,-0.113842474016,-0.113937723998,-0.114032972933,-0.11412822082,-0.114223467658,-0.114318713446,-0.114413958183,-0.114509201869,-0.114604444502,-0.114699686081,-0.114794926607,-0.114890166077,-0.114985404491,-0.115080641848,-0.115175878147,-0.115271113388,-0.115366347569,-0.115461580689,-0.115556812749,-0.115652043746,-0.11574727368,-0.11584250255,-0.115937730356,-0.116032957095,-0.116128182769,-0.116223407374,-0.116318630912,-0.11641385338,-0.116509074778,-0.116604295106,-0.116699514361,-0.116794732544,-0.116889949653,-0.116985165688,-0.117080380648,-0.117175594531,-0.117270807338,-0.117366019066,-0.117461229715,-0.117556439285,-0.117651647775,-0.117746855183,-0.117842061508,-0.117937266751,-0.118032470909,-0.118127673983,-0.11822287597,-0.118318076871,-0.118413276685,-0.11850847541,-0.118603673045,-0.118698869591,-0.118794065045,-0.118889259408,-0.118984452678,-0.119079644854,-0.119174835935,-0.119270025921,-0.119365214811,-0.119460402604,-0.119555589298,-0.119650774894,-0.119745959389,-0.119841142785,-0.119936325078,-0.120031506269,-0.120126686357,-0.120221865341,-0.120317043219,-0.120412219992,-0.120507395658,-0.120602570216,-0.120697743666,-0.120792916006,-0.120888087236,-0.120983257354,-0.121078426361,-0.121173594255,-0.121268761035,-0.1213639267,-0.12145909125,-0.121554254683,-0.121649416999,-0.121744578197,-0.121839738276,-0.121934897235,-0.122030055073,-0.122125211789,-0.122220367383,-0.122315521853,-0.122410675199,-0.12250582742,-0.122600978515,-0.122696128483,-0.122791277323,-0.122886425035,-0.122981571617,-0.123076717068,-0.123171861388,-0.123267004576,-0.123362146631,-0.123457287552,-0.123552427339,-0.123647565989,-0.123742703503,-0.12383783988,-0.123932975119,-0.124028109218,-0.124123242177,-0.124218373995,-0.124313504672,-0.124408634205,-0.124503762596,-0.124598889842,-0.124694015942,-0.124789140897,-0.124884264704,-0.124979387363,-0.125074508874,-0.125169629235,-0.125264748446,-0.125359866505,-0.125454983412,-0.125550099165,-0.125645213765,-0.12574032721,-0.125835439498,-0.125930550631,-0.126025660606,-0.126120769422,-0.126215877079,-0.126310983576,-0.126406088912,-0.126501193086,-0.126596296097,-0.126691397945,-0.126786498628,-0.126881598145,-0.126976696497,-0.127071793681,-0.127166889697,-0.127261984545,-0.127357078222,-0.127452170729,-0.127547262065,-0.127642352228,-0.127737441218,-0.127832529033,-0.127927615674,-0.128022701139,-0.128117785427,-0.128212868537,-0.128307950469,-0.128403031222,-0.128498110794,-0.128593189185,-0.128688266394,-0.12878334242,-0.128878417263,-0.128973490921,-0.129068563393,-0.129163634679,-0.129258704778,-0.129353773688,-0.12944884141,-0.129543907942,-0.129638973283,-0.129734037432,-0.129829100389,-0.129924162153,-0.130019222722,-0.130114282096,-0.130209340275,-0.130304397256,-0.13039945304,-0.130494507625,-0.13058956101,-0.130684613196,-0.13077966418,-0.130874713962,-0.130969762541,-0.131064809916,-0.131159856086,-0.131254901051,-0.131349944809,-0.13144498736,-0.131540028703,-0.131635068837,-0.13173010776,-0.131825145473,-0.131920181974,-0.132015217263,-0.132110251338,-0.132205284199,-0.132300315844,-0.132395346274,-0.132490375487,-0.132585403481,-0.132680430257,-0.132775455814,-0.13287048015,-0.132965503265,-0.133060525157,-0.133155545827,-0.133250565272,-0.133345583493,-0.133440600488,-0.133535616256,-0.133630630797,-0.13372564411,-0.133820656194,-0.133915667047,-0.13401067667,-0.134105685061,-0.134200692219,-0.134295698143,-0.134390702834,-0.134485706288,-0.134580708507,-0.134675709489,-0.134770709233,-0.134865707738,-0.134960705003,-0.135055701028,-0.135150695811,-0.135245689352,-0.13534068165,-0.135435672704,-0.135530662513,-0.135625651076,-0.135720638393,-0.135815624462,-0.135910609283,-0.136005592854,-0.136100575176,-0.136195556246,-0.136290536064,-0.13638551463,-0.136480491942,-0.136575468,-0.136670442802,-0.136765416348,-0.136860388637,-0.136955359668,-0.13705032944,-0.137145297952,-0.137240265204,-0.137335231194,-0.137430195921,-0.137525159386,-0.137620121586,-0.137715082522,-0.137810042192,-0.137905000595,-0.13799995773,-0.138094913597,-0.138189868194,-0.138284821522,-0.138379773578,-0.138474724362,-0.138569673873,-0.138664622111,-0.138759569074,-0.138854514762,-0.138949459173,-0.139044402308,-0.139139344164,-0.139234284741,-0.139329224038,-0.139424162055,-0.13951909879,-0.139614034243,-0.139708968412,-0.139803901298,-0.139898832898,-0.139993763212,-0.14008869224,-0.140183619979,-0.140278546431,-0.140373471592,-0.140468395464,-0.140563318044,-0.140658239333,-0.140753159328,-0.14084807803,-0.140942995437,-0.141037911549,-0.141132826364,-0.141227739882,-0.141322652102,-0.141417563022,-0.141512472643,-0.141607380963,-0.141702287982,-0.141797193698,-0.14189209811,-0.141987001219,-0.142081903022,-0.142176803519,-0.14227170271,-0.142366600593,-0.142461497167,-0.142556392431,-0.142651286386,-0.142746179029,-0.14284107036,-0.142935960378,-0.143030849082,-0.143125736471,-0.143220622545,-0.143315507303,-0.143410390743,-0.143505272865,-0.143600153667,-0.14369503315,-0.143789911312,-0.143884788153,-0.143979663671,-0.144074537865,-0.144169410735,-0.14426428228,-0.144359152499,-0.144454021391,-0.144548888955,-0.144643755191,-0.144738620097,-0.144833483672,-0.144928345916,-0.145023206829,-0.145118066408,-0.145212924653,-0.145307781563,-0.145402637138,-0.145497491376,-0.145592344277,-0.14568719584,-0.145782046064,-0.145876894947,-0.14597174249,-0.146066588691,-0.146161433549,-0.146256277064,-0.146351119234,-0.14644596006,-0.146540799539,-0.146635637671,-0.146730474455,-0.146825309891,-0.146920143977,-0.147014976713,-0.147109808097,-0.147204638129,-0.147299466808,-0.147394294133,-0.147489120103,-0.147583944718,-0.147678767976,-0.147773589876,-0.147868410418,-0.147963229601,-0.148058047424,-0.148152863887,-0.148247678987,-0.148342492725,-0.148437305099,-0.148532116108,-0.148626925753,-0.148721734031,-0.148816540942,-0.148911346486,-0.14900615066,-0.149100953465,-0.1491957549,-0.149290554963,-0.149385353654,-0.149480150972,-0.149574946915,-0.149669741484,-0.149764534677,-0.149859326494,-0.149954116933,-0.150048905994,-0.150143693675,-0.150238479977,-0.150333264897,-0.150428048436,-0.150522830592,-0.150617611364,-0.150712390752,-0.150807168755,-0.150901945371,-0.1509967206,-0.151091494442,-0.151186266894,-0.151281037957,-0.15137580763,-0.151470575911,-0.151565342799,-0.151660108295,-0.151754872397,-0.151849635103,-0.151944396414,-0.152039156328,-0.152133914845,-0.152228671963,-0.152323427682,-0.152418182001,-0.152512934919,-0.152607686435,-0.152702436549,-0.152797185258,-0.152891932564,-0.152986678464,-0.153081422957,-0.153176166044,-0.153270907723,-0.153365647992,-0.153460386852,-0.153555124302,-0.15364986034,-0.153744594966,-0.153839328178,-0.153934059977,-0.154028790361,-0.154123519328,-0.154218246879,-0.154312973013,-0.154407697728,-0.154502421024,-0.1545971429,-0.154691863355,-0.154786582387,-0.154881299997,-0.154976016184,-0.155070730946,-0.155165444282,-0.155260156193,-0.155354866676,-0.155449575731,-0.155544283357,-0.155638989554,-0.15573369432,-0.155828397654,-0.155923099556,-0.156017800025,-0.15611249906,-0.15620719666,-0.156301892824,-0.156396587552,-0.156491280842,-0.156585972693,-0.156680663105,-0.156775352077,-0.156870039608,-0.156964725697,-0.157059410343,-0.157154093546,-0.157248775304,-0.157343455616,-0.157438134483,-0.157532811902,-0.157627487873,-0.157722162395,-0.157816835468,-0.15791150709,-0.15800617726,-0.158100845978,-0.158195513243,-0.158290179054,-0.15838484341,-0.15847950631,-0.158574167753,-0.158668827739,-0.158763486266,-0.158858143334,-0.158952798942,-0.159047453088,-0.159142105773,-0.159236756995,-0.159331406753,-0.159426055047,-0.159520701875,-0.159615347237,-0.159709991132,-0.159804633559,-0.159899274517,-0.159993914005,-0.160088552023,-0.160183188569,-0.160277823642,-0.160372457243,-0.160467089369,-0.160561720021,-0.160656349196,-0.160750976895,-0.160845603116,-0.160940227859,-0.161034851122,-0.161129472906,-0.161224093208,-0.161318712028,-0.161413329366,-0.161507945219,-0.161602559588,-0.161697172472,-0.16179178387,-0.16188639378,-0.161981002202,-0.162075609136,-0.16217021458,-0.162264818533,-0.162359420994,-0.162454021963,-0.162548621439,-0.162643219421,-0.162737815908,-0.162832410899,-0.162927004393,-0.16302159639,-0.163116186888,-0.163210775887,-0.163305363385,-0.163399949383,-0.163494533879,-0.163589116871,-0.163683698361,-0.163778278345,-0.163872856825,-0.163967433797,-0.164062009263,-0.164156583221,-0.16425115567,-0.164345726609,-0.164440296037,-0.164534863954,-0.164629430359,-0.16472399525,-0.164818558628,-0.16491312049,-0.165007680836,-0.165102239666,-0.165196796978,-0.165291352772,-0.165385907046,-0.1654804598,-0.165575011034,-0.165669560745,-0.165764108933,-0.165858655598,-0.165953200738,-0.166047744353,-0.166142286441,-0.166236827003,-0.166331366036,-0.16642590354,-0.166520439515,-0.166614973959,-0.166709506872,-0.166804038252,-0.166898568099,-0.166993096412,-0.16708762319,-0.167182148432,-0.167276672137,-0.167371194305,-0.167465714935,-0.167560234025,-0.167654751575,-0.167749267584,-0.167843782051,-0.167938294975,-0.168032806355,-0.168127316191,-0.168221824482,-0.168316331226,-0.168410836423,-0.168505340073,-0.168599842173,-0.168694342724,-0.168788841724,-0.168883339172,-0.168977835068,-0.169072329411,-0.1691668222,-0.169261313434,-0.169355803112,-0.169450291234,-0.169544777798,-0.169639262803,-0.16973374625,-0.169828228136,-0.169922708461,-0.170017187224,-0.170111664424,-0.170206140061,-0.170300614133,-0.17039508664,-0.170489557581,-0.170584026954,-0.17067849476,-0.170772960997,-0.170867425664,-0.17096188876,-0.171056350285,-0.171150810238,-0.171245268618,-0.171339725423,-0.171434180654,-0.171528634308,-0.171623086386,-0.171717536887,-0.171811985809,-0.171906433152,-0.172000878915,-0.172095323097,-0.172189765697,-0.172284206714,-0.172378646148,-0.172473083997,-0.172567520261,-0.172661954938,-0.172756388029,-0.172850819531,-0.172945249445,-0.173039677769,-0.173134104503,-0.173228529645,-0.173322953195,-0.173417375152,-0.173511795514,-0.173606214282,-0.173700631454,-0.17379504703,-0.173889461008,-0.173983873387,-0.174078284168,-0.174172693348,-0.174267100928,-0.174361506905,-0.17445591128,-0.174550314051,-0.174644715218,-0.17473911478,-0.174833512735,-0.174927909083,-0.175022303824,-0.175116696956,-0.175211088478,-0.175305478389,-0.175399866689,-0.175494253377,-0.175588638452,-0.175683021913,-0.175777403759,-0.175871783989,-0.175966162603,-0.176060539599,-0.176154914977,-0.176249288736,-0.176343660875,-0.176438031393,-0.176532400289,-0.176626767562,-0.176721133212,-0.176815497238,-0.176909859638,-0.177004220412,-0.177098579559,-0.177192937079,-0.177287292969,-0.17738164723,-0.177475999861,-0.17757035086,-0.177664700227,-0.177759047961,-0.177853394061,-0.177947738526,-0.178042081356,-0.178136422549,-0.178230762105,-0.178325100022,-0.178419436301,-0.178513770939,-0.178608103936,-0.178702435292,-0.178796765005,-0.178891093075,-0.1789854195,-0.179079744281,-0.179174067415,-0.179268388902,-0.179362708741,-0.179457026932,-0.179551343473,-0.179645658364,-0.179739971603,-0.179834283191,-0.179928593125,-0.180022901406,-0.180117208031,-0.180211513002,-0.180305816315,-0.180400117972,-0.18049441797,-0.180588716309,-0.180683012988,-0.180777308007,-0.180871601363,-0.180965893058,-0.181060183088,-0.181154471455,-0.181248758156,-0.181343043192,-0.18143732656,-0.181531608261,-0.181625888293,-0.181720166656,-0.181814443348,-0.18190871837,-0.182002991719,-0.182097263395,-0.182191533397,-0.182285801725,-0.182380068377,-0.182474333353,-0.182568596652,-0.182662858272,-0.182757118214,-0.182851376475,-0.182945633056,-0.183039887955,-0.183134141172,-0.183228392705,-0.183322642555,-0.183416890719,-0.183511137197,-0.183605381988,-0.183699625092,-0.183793866507,-0.183888106233,-0.183982344269,-0.184076580613,-0.184170815266,-0.184265048226,-0.184359279491,-0.184453509063,-0.184547736939,-0.184641963118,-0.1847361876,-0.184830410385,-0.18492463147,-0.185018850856,-0.185113068541,-0.185207284524,-0.185301498805,-0.185395711383,-0.185489922257,-0.185584131425,-0.185678338888,-0.185772544644,-0.185866748693,-0.185960951033,-0.186055151663,-0.186149350584,-0.186243547794,-0.186337743291,-0.186431937076,-0.186526129147,-0.186620319504,-0.186714508145,-0.18680869507,-0.186902880278,-0.186997063768,-0.18709124554,-0.187185425591,-0.187279603922,-0.187373780531,-0.187467955419,-0.187562128583,-0.187656300023,-0.187750469738,-0.187844637727,-0.18793880399,-0.188032968525,-0.188127131332,-0.188221292409,-0.188315451757,-0.188409609373,-0.188503765258,-0.18859791941,-0.188692071829,-0.188786222513,-0.188880371462,-0.188974518674,-0.18906866415,-0.189162807888,-0.189256949887,-0.189351090146,-0.189445228665,-0.189539365443,-0.189633500478,-0.18972763377,-0.189821765319,-0.189915895122,-0.19001002318,-0.190104149492,-0.190198274056,-0.190292396871,-0.190386517938,-0.190480637254,-0.19057475482,-0.190668870634,-0.190762984696,-0.190857097004,-0.190951207557,-0.191045316356,-0.191139423398,-0.191233528684,-0.191327632212,-0.191421733981,-0.19151583399,-0.19160993224,-0.191704028728,-0.191798123453,-0.191892216416,-0.191986307615,-0.19208039705,-0.192174484719,-0.192268570621,-0.192362654756,-0.192456737123,-0.192550817721,-0.192644896549,-0.192738973607,-0.192833048892,-0.192927122405,-0.193021194145,-0.193115264111,-0.193209332302,-0.193303398716,-0.193397463354,-0.193491526214,-0.193585587296,-0.193679646598,-0.19377370412,-0.193867759861,-0.19396181382,-0.194055865996,-0.194149916388,-0.194243964996,-0.194338011818,-0.194432056854,-0.194526100103,-0.194620141563,-0.194714181235,-0.194808219117,-0.194902255209,-0.194996289509,-0.195090322016,-0.19518435273,-0.195278381651,-0.195372408776,-0.195466434105,-0.195560457638,-0.195654479373,-0.19574849931,-0.195842517448,-0.195936533785,-0.196030548321,-0.196124561056,-0.196218571988,-0.196312581116,-0.19640658844,-0.196500593958,-0.19659459767,-0.196688599575,-0.196782599672,-0.196876597961,-0.19697059444,-0.197064589108,-0.197158581965,-0.197252573009,-0.197346562241,-0.197440549659,-0.197534535261,-0.197628519048,-0.197722501019,-0.197816481172,-0.197910459507,-0.198004436022,-0.198098410718,-0.198192383593,-0.198286354646,-0.198380323876,-0.198474291283,-0.198568256866,-0.198662220623,-0.198756182554,-0.198850142659,-0.198944100935,-0.199038057383,-0.199132012002,-0.19922596479,-0.199319915747,-0.199413864871,-0.199507812163,-0.199601757621,-0.199695701244,-0.199789643032,-0.199883582983,-0.199977521097,-0.200071457373,-0.20016539181,-0.200259324407,-0.200353255163,-0.200447184078,-0.20054111115,-0.200635036378,-0.200728959763,-0.200822881302,-0.200916800996,-0.201010718843,-0.201104634842,-0.201198548993,-0.201292461294,-0.201386371745,-0.201480280345,-0.201574187093,-0.201668091988,-0.20176199503,-0.201855896217,-0.201949795548,-0.202043693023,-0.202137588641,-0.202231482401,-0.202325374303,-0.202419264344,-0.202513152525,-0.202607038844,-0.202700923302,-0.202794805895,-0.202888686625,-0.20298256549,-0.203076442489,-0.203170317622,-0.203264190887,-0.203358062284,-0.203451931811,-0.203545799469,-0.203639665255,-0.20373352917,-0.203827391212,-0.20392125138,-0.204015109674,-0.204108966093,-0.204202820635,-0.204296673301,-0.204390524089,-0.204484372998,-0.204578220027,-0.204672065176,-0.204765908444,-0.20485974983,-0.204953589332,-0.205047426951,-0.205141262685,-0.205235096533,-0.205328928495,-0.20542275857,-0.205516586756,-0.205610413053,-0.20570423746,-0.205798059977,-0.205891880602,-0.205985699334,-0.206079516173,-0.206173331118,-0.206267144167,-0.206360955321,-0.206454764578,-0.206548571937,-0.206642377398,-0.206736180959,-0.20682998262,-0.20692378238,-0.207017580237,-0.207111376192,-0.207205170243,-0.20729896239,-0.207392752631,-0.207486540966,-0.207580327394,-0.207674111913,-0.207767894524,-0.207861675225,-0.207955454015,-0.208049230894,-0.208143005861,-0.208236778914,-0.208330550053,-0.208424319278,-0.208518086586,-0.208611851978,-0.208705615453,-0.208799377009,-0.208893136645,-0.208986894362,-0.209080650158,-0.209174404032,-0.209268155983,-0.20936190601,-0.209455654114,-0.209549400292,-0.209643144543,-0.209736886868,-0.209830627265,-0.209924365734,-0.210018102272,-0.21011183688,-0.210205569557,-0.210299300302,-0.210393029114,-0.210486755992,-0.210580480935,-0.210674203942,-0.210767925013,-0.210861644147,-0.210955361343,-0.211049076599,-0.211142789916,-0.211236501291,-0.211330210725,-0.211423918217,-0.211517623765,-0.211611327369,-0.211705029028,-0.211798728741,-0.211892426507,-0.211986122326,-0.212079816196,-0.212173508116,-0.212267198087,-0.212360886106,-0.212454572173,-0.212548256288,-0.212641938448,-0.212735618654,-0.212829296905,-0.2129229732,-0.213016647537,-0.213110319916,-0.213203990337,-0.213297658797,-0.213391325297,-0.213484989836,-0.213578652412,-0.213672313026,-0.213765971675,-0.213859628359,-0.213953283078,-0.214046935829,-0.214140586614,-0.21423423543,-0.214327882277,-0.214421527154,-0.21451517006,-0.214608810994,-0.214702449955,-0.214796086943,-0.214889721957,-0.214983354995,-0.215076986058,-0.215170615143,-0.215264242251,-0.21535786738,-0.215451490529,-0.215545111698,-0.215638730886,-0.215732348092,-0.215825963314,-0.215919576553,-0.216013187808,-0.216106797076,-0.216200404358,-0.216294009653,-0.21638761296,-0.216481214278,-0.216574813606,-0.216668410944,-0.216762006289,-0.216855599643,-0.216949191003,-0.217042780369,-0.217136367739,-0.217229953114,-0.217323536493,-0.217417117873,-0.217510697256,-0.217604274638,-0.217697850021,-0.217791423403,-0.217884994783,-0.21797856416,-0.218072131533,-0.218165696902,-0.218259260266,-0.218352821623,-0.218446380974,-0.218539938316,-0.21863349365,-0.218727046974,-0.218820598288,-0.21891414759,-0.21900769488,-0.219101240157,-0.21919478342,-0.219288324668,-0.219381863901,-0.219475401117,-0.219568936315,-0.219662469496,-0.219756000657,-0.219849529799,-0.219943056919,-0.220036582018,-0.220130105095,-0.220223626148,-0.220317145177,-0.22041066218,-0.220504177158,-0.220597690109,-0.220691201032,-0.220784709927,-0.220878216792,-0.220971721627,-0.221065224431,-0.221158725203,-0.221252223942,-0.221345720647,-0.221439215318,-0.221532707953,-0.221626198552,-0.221719687114,-0.221813173638,-0.221906658123,-0.222000140568,-0.222093620973,-0.222187099337,-0.222280575658,-0.222374049935,-0.222467522169,-0.222560992358,-0.222654460502,-0.222747926598,-0.222841390647,-0.222934852648,-0.2230283126,-0.223121770502,-0.223215226353,-0.223308680152,-0.223402131898,-0.223495581591,-0.22358902923,-0.223682474813,-0.223775918341,-0.223869359811,-0.223962799224,-0.224056236578,-0.224149671873,-0.224243105107,-0.22433653628,-0.224429965392,-0.22452339244,-0.224616817424,-0.224710240344,-0.224803661198,-0.224897079986,-0.224990496707,-0.22508391136,-0.225177323944,-0.225270734458,-0.225364142901,-0.225457549273,-0.225550953572,-0.225644355799,-0.225737755951,-0.225831154028,-0.22592455003,-0.226017943954,-0.226111335802,-0.226204725571,-0.22629811326,-0.22639149887,-0.226484882399,-0.226578263846,-0.22667164321,-0.226765020491,-0.226858395687,-0.226951768798,-0.227045139823,-0.227138508761,-0.227231875611,-0.227325240373,-0.227418603045,-0.227511963627,-0.227605322117,-0.227698678516,-0.227792032821,-0.227885385033,-0.22797873515,-0.228072083171,-0.228165429096,-0.228258772924,-0.228352114653,-0.228445454284,-0.228538791815,-0.228632127245,-0.228725460574,-0.2288187918,-0.228912120923,-0.229005447942,-0.229098772856,-0.229192095664,-0.229285416365,-0.229378734959,-0.229472051444,-0.229565365821,-0.229658678087,-0.229751988242,-0.229845296285,-0.229938602216,-0.230031906033,-0.230125207735,-0.230218507323,-0.230311804794,-0.230405100148,-0.230498393385,-0.230591684502,-0.230684973501,-0.230778260378,-0.230871545135,-0.230964827769,-0.231058108281,-0.231151386668,-0.231244662931,-0.231337937069,-0.231431209079,-0.231524478963,-0.231617746719,-0.231711012345,-0.231804275842,-0.231897537208,-0.231990796442,-0.232084053545,-0.232177308513,-0.232270561348,-0.232363812048,-0.232457060612,-0.232550307039,-0.232643551328,-0.23273679348,-0.232830033492,-0.232923271363,-0.233016507094,-0.233109740683,-0.233202972129,-0.233296201432,-0.233389428591,-0.233482653604,-0.233575876471,-0.233669097191,-0.233762315763,-0.233855532186,-0.23394874646,-0.234041958584,-0.234135168556,-0.234228376376,-0.234321582043,-0.234414785556,-0.234507986915,-0.234601186118,-0.234694383165,-0.234787578054,-0.234880770785,-0.234973961358,-0.23506714977,-0.235160336022,-0.235253520112,-0.23534670204,-0.235439881805,-0.235533059405,-0.23562623484,-0.23571940811,-0.235812579213,-0.235905748149,-0.235998914916,-0.236092079513,-0.236185241941,-0.236278402198,-0.236371560283,-0.236464716195,-0.236557869934,-0.236651021498,-0.236744170887,-0.2368373181,-0.236930463136,-0.237023605994,-0.237116746674,-0.237209885174,-0.237303021494,-0.237396155632,-0.237489287588,-0.237582417362,-0.237675544951,-0.237768670356,-0.237861793575,-0.237954914608,-0.238048033454,-0.238141150112,-0.23823426458,-0.238327376859,-0.238420486948,-0.238513594844,-0.238606700549,-0.23869980406,-0.238792905377,-0.238886004499,-0.238979101425,-0.239072196155,-0.239165288687,-0.239258379021,-0.239351467156,-0.239444553091,-0.239537636824,-0.239630718356,-0.239723797685,-0.239816874811,-0.239909949733,-0.240003022449,-0.240096092959,-0.240189161262,-0.240282227358,-0.240375291244,-0.240468352922,-0.240561412389,-0.240654469645,-0.240747524689,-0.24084057752,-0.240933628137,-0.241026676539,-0.241119722726,-0.241212766697,-0.241305808451,-0.241398847986,-0.241491885303,-0.2415849204,-0.241677953276,-0.241770983931,-0.241864012364,-0.241957038573,-0.242050062558,-0.242143084319,-0.242236103854,-0.242329121162,-0.242422136243,-0.242515149095,-0.242608159718,-0.242701168112,-0.242794174274,-0.242887178205,-0.242980179903,-0.243073179368,-0.243166176599,-0.243259171594,-0.243352164353,-0.243445154876,-0.243538143161,-0.243631129207,-0.243724113014,-0.24381709458,-0.243910073906,-0.24400305099,-0.24409602583,-0.244188998427,-0.24428196878,-0.244374936887,-0.244467902748,-0.244560866362,-0.244653827727,-0.244746786844,-0.244839743712,-0.244932698329,-0.245025650694,-0.245118600807,-0.245211548668,-0.245304494274,-0.245397437625,-0.245490378721,-0.245583317561,-0.245676254142,-0.245769188466,-0.245862120531,-0.245955050336,-0.24604797788,-0.246140903162,-0.246233826182,-0.246326746939,-0.246419665431,-0.246512581659,-0.24660549562,-0.246698407315,-0.246791316742,-0.246884223901,-0.24697712879,-0.247070031409,-0.247162931758,-0.247255829834,-0.247348725638,-0.247441619168,-0.247534510423,-0.247627399404,-0.247720286108,-0.247813170535,-0.247906052685,-0.247998932555,-0.248091810146,-0.248184685457,-0.248277558487,-0.248370429234,-0.248463297698,-0.248556163879,-0.248649027775,-0.248741889385,-0.248834748709,-0.248927605746,-0.249020460494,-0.249113312954,-0.249206163124,-0.249299011003,-0.249391856591,-0.249484699886,-0.249577540889,-0.249670379597,-0.24976321601,-0.249856050127,-0.249948881948,-0.250041711471,-0.250134538696,-0.250227363622,-0.250320186248,-0.250413006573,-0.250505824596,-0.250598640317,-0.250691453734,-0.250784264847,-0.250877073654,-0.250969880156,-0.251062684351,-0.251155486238,-0.251248285816,-0.251341083085,-0.251433878044,-0.251526670692,-0.251619461028,-0.25171224905,-0.25180503476,-0.251897818154,-0.251990599233,-0.252083377996,-0.252176154442,-0.25226892857,-0.25236170038,-0.252454469869,-0.252547237038,-0.252640001886,-0.252732764411,-0.252825524613,-0.252918282492,-0.253011038046,-0.253103791274,-0.253196542175,-0.25328929075,-0.253382036996,-0.253474780913,-0.2535675225,-0.253660261756,-0.253752998681,-0.253845733273,-0.253938465532,-0.254031195457,-0.254123923047,-0.254216648301,-0.254309371219,-0.254402091799,-0.25449481004,-0.254587525942,-0.254680239504,-0.254772950725,-0.254865659605,-0.254958366141,-0.255051070334,-0.255143772183,-0.255236471686,-0.255329168844,-0.255421863654,-0.255514556117,-0.255607246231,-0.255699933995,-0.25579261941,-0.255885302473,-0.255977983184,-0.256070661542,-0.256163337546,-0.256256011196,-0.25634868249,-0.256441351428,-0.256534018009,-0.256626682232,-0.256719344096,-0.2568120036,-0.256904660743,-0.256997315526,-0.257089967946,-0.257182618003,-0.257275265696,-0.257367911024,-0.257460553986,-0.257553194582,-0.257645832811,-0.257738468671,-0.257831102162,-0.257923733283,-0.258016362034,-0.258108988413,-0.258201612419,-0.258294234052,-0.258386853311,-0.258479470195,-0.258572084703,-0.258664696834,-0.258757306588,-0.258849913963,-0.258942518959,-0.259035121575,-0.25912772181,-0.259220319663,-0.259312915133,-0.25940550822,-0.259498098922,-0.259590687239,-0.25968327317,-0.259775856714,-0.25986843787,-0.259961016637,-0.260053593015,-0.260146167003,-0.2602387386,-0.260331307804,-0.260423874615,-0.260516439033,-0.260609001056,-0.260701560684,-0.260794117915,-0.260886672749,-0.260979225186,-0.261071775223,-0.26116432286,-0.261256868097,-0.261349410933,-0.261441951366,-0.261534489397,-0.261627025023,-0.261719558244,-0.26181208906,-0.261904617469,-0.261997143471,-0.262089667065,-0.262182188249,-0.262274707024,-0.262367223388,-0.26245973734,-0.26255224888,-0.262644758006,-0.262737264719,-0.262829769016,-0.262922270897,-0.263014770362,-0.263107267409,-0.263199762037,-0.263292254247,-0.263384744036,-0.263477231404,-0.263569716351,-0.263662198875,-0.263754678975,-0.263847156651,-0.263939631901,-0.264032104726,-0.264124575124,-0.264217043093,-0.264309508635,-0.264401971746,-0.264494432428,-0.264586890678,-0.264679346496,-0.264771799882,-0.264864250833,-0.26495669935,-0.265049145432,-0.265141589077,-0.265234030286,-0.265326469056,-0.265418905387,-0.265511339279,-0.26560377073,-0.26569619974,-0.265788626308,-0.265881050432,-0.265973472113,-0.266065891349,-0.266158308139,-0.266250722483,-0.266343134379,-0.266435543828,-0.266527950827,-0.266620355376,-0.266712757475,-0.266805157122,-0.266897554317,-0.266989949058,-0.267082341345,-0.267174731178,-0.267267118554,-0.267359503474,-0.267451885937,-0.267544265941,-0.267636643486,-0.26772901857,-0.267821391194,-0.267913761356,-0.268006129056,-0.268098494292,-0.268190857063,-0.26828321737,-0.268375575211,-0.268467930584,-0.26856028349,-0.268652633928,-0.268744981896,-0.268837327394,-0.26892967042,-0.269022010975,-0.269114349057,-0.269206684665,-0.269299017799,-0.269391348458,-0.26948367664,-0.269576002346,-0.269668325573,-0.269760646322,-0.269852964591,-0.269945280379,-0.270037593687,-0.270129904512,-0.270222212854,-0.270314518713,-0.270406822087,-0.270499122975,-0.270591421377,-0.270683717291,-0.270776010718,-0.270868301656,-0.270960590104,-0.271052876061,-0.271145159527,-0.2712374405,-0.271329718981,-0.271421994967,-0.271514268459,-0.271606539455,-0.271698807954,-0.271791073956,-0.271883337459,-0.271975598464,-0.272067856969,-0.272160112972,-0.272252366475,-0.272344617474,-0.272436865971,-0.272529111963,-0.27262135545,-0.272713596431,-0.272805834906,-0.272898070873,-0.272990304331,-0.273082535281,-0.27317476372,-0.273266989648,-0.273359213064,-0.273451433968,-0.273543652358,-0.273635868234,-0.273728081595,-0.27382029244,-0.273912500767,-0.274004706577,-0.274096909869,-0.274189110641,-0.274281308892,-0.274373504623,-0.274465697831,-0.274557888517,-0.274650076679,-0.274742262317,-0.274834445429,-0.274926626015,-0.275018804074,-0.275110979605,-0.275203152607,-0.275295323079,-0.275387491021,-0.275479656432,-0.275571819311,-0.275663979657,-0.275756137468,-0.275848292746,-0.275940445487,-0.276032595692,-0.27612474336,-0.27621688849,-0.276309031081,-0.276401171132,-0.276493308643,-0.276585443612,-0.276677576039,-0.276769705923,-0.276861833262,-0.276953958057,-0.277046080306,-0.277138200009,-0.277230317164,-0.277322431771,-0.277414543828,-0.277506653336,-0.277598760293,-0.277690864699,-0.277782966552,-0.277875065852,-0.277967162597,-0.278059256787,-0.278151348422,-0.2782434375,-0.27833552402,-0.278427607982,-0.278519689385,-0.278611768228,-0.278703844509,-0.278795918229,-0.278887989387,-0.27898005798,-0.27907212401,-0.279164187474,-0.279256248372,-0.279348306704,-0.279440362467,-0.279532415663,-0.279624466288,-0.279716514344,-0.279808559828,-0.279900602741,-0.27999264308,-0.280084680846,-0.280176716038,-0.280268748654,-0.280360778694,-0.280452806157,-0.280544831042,-0.280636853349,-0.280728873076,-0.280820890222,-0.280912904788,-0.281004916771,-0.281096926171,-0.281188932988,-0.281280937219,-0.281372938866,-0.281464937926,-0.281556934399,-0.281648928284,-0.28174091958,-0.281832908286,-0.281924894402,-0.282016877926,-0.282108858858,-0.282200837197,-0.282292812942,-0.282384786093,-0.282476756647,-0.282568724606,-0.282660689967,-0.282752652729,-0.282844612893,-0.282936570457,-0.28302852542,-0.283120477782,-0.283212427541,-0.283304374697,-0.283396319249,-0.283488261197,-0.283580200538,-0.283672137273,-0.2837640714,-0.283856002919,-0.283947931829,-0.284039858129,-0.284131781818,-0.284223702895,-0.28431562136,-0.284407537211,-0.284499450449,-0.284591361071,-0.284683269077,-0.284775174466,-0.284867077238,-0.284958977392,-0.285050874926,-0.28514276984,-0.285234662133,-0.285326551805,-0.285418438853,-0.285510323278,-0.285602205079,-0.285694084255,-0.285785960804,-0.285877834727,-0.285969706022,-0.286061574688,-0.286153440725,-0.286245304132,-0.286337164908,-0.286429023051,-0.286520878562,-0.286612731439,-0.286704581682,-0.286796429289,-0.286888274261,-0.286980116595,-0.287071956291,-0.287163793349,-0.287255627767,-0.287347459545,-0.287439288681,-0.287531115176,-0.287622939027,-0.287714760235,-0.287806578798,-0.287898394715,-0.287990207987,-0.288082018611,-0.288173826587,-0.288265631915,-0.288357434592,-0.288449234619,-0.288541031995,-0.288632826719,-0.288724618789,-0.288816408206,-0.288908194968,-0.288999979074,-0.289091760524,-0.289183539317,-0.289275315451,-0.289367088927,-0.289458859743,-0.289550627898,-0.289642393391,-0.289734156223,-0.289825916391,-0.289917673895,-0.290009428734,-0.290101180908,-0.290192930415,-0.290284677254,-0.290376421426,-0.290468162928,-0.290559901761,-0.290651637922,-0.290743371412,-0.29083510223,-0.290926830374,-0.291018555844,-0.291110278639,-0.291201998759,-0.291293716201,-0.291385430966,-0.291477143053,-0.291568852461,-0.291660559188,-0.291752263235,-0.2918439646,-0.291935663282,-0.292027359281,-0.292119052596,-0.292210743226,-0.292302431169,-0.292394116426,-0.292485798996,-0.292577478876,-0.292669156068,-0.292760830569,-0.29285250238,-0.292944171498,-0.293035837924,-0.293127501656,-0.293219162694,-0.293310821037,-0.293402476684,-0.293494129634,-0.293585779886,-0.293677427439,-0.293769072293,-0.293860714447,-0.2939523539,-0.29404399065,-0.294135624698,-0.294227256043,-0.294318884683,-0.294410510617,-0.294502133846,-0.294593754367,-0.294685372181,-0.294776987285,-0.294868599681,-0.294960209366,-0.295051816339,-0.295143420601,-0.29523502215,-0.295326620985,-0.295418217106,-0.295509810511,-0.295601401199,-0.295692989171,-0.295784574425,-0.29587615696,-0.295967736775,-0.29605931387,-0.296150888244,-0.296242459895,-0.296334028823,-0.296425595028,-0.296517158508,-0.296608719262,-0.29670027729,-0.296791832591,-0.296883385164,-0.296974935008,-0.297066482122,-0.297158026505,-0.297249568157,-0.297341107077,-0.297432643264,-0.297524176717,-0.297615707435,-0.297707235418,-0.297798760664,-0.297890283172,-0.297981802943,-0.298073319974,-0.298164834266,-0.298256345817,-0.298347854627,-0.298439360694,-0.298530864018,-0.298622364598,-0.298713862433,-0.298805357523,-0.298896849865,-0.298988339461,-0.299079826308,-0.299171310406,-0.299262791754,-0.299354270352,-0.299445746198,-0.299537219291,-0.299628689631,-0.299720157217,-0.299811622048,-0.299903084124,-0.299994543442,-0.300086000003,-0.300177453806,-0.30026890485,-0.300360353133,-0.300451798656,-0.300543241417,-0.300634681416,-0.300726118651,-0.300817553122,-0.300908984828,-0.301000413768,-0.301091839941,-0.301183263347,-0.301274683984,-0.301366101852,-0.30145751695,-0.301548929277,-0.301640338833,-0.301731745615,-0.301823149625,-0.301914550859,-0.302005949319,-0.302097345003,-0.30218873791,-0.302280128039,-0.30237151539,-0.302462899962,-0.302554281753,-0.302645660763,-0.302737036992,-0.302828410438,-0.3029197811,-0.303011148978,-0.30310251407,-0.303193876377,-0.303285235897,-0.303376592629,-0.303467946572,-0.303559297726,-0.30365064609,-0.303741991662,-0.303833334443,-0.303924674431,-0.304016011625,-0.304107346025,-0.30419867763,-0.304290006438,-0.30438133245,-0.304472655663,-0.304563976079,-0.304655293694,-0.304746608509,-0.304837920523,-0.304929229735,-0.305020536145,-0.30511183975,-0.305203140551,-0.305294438547,-0.305385733736,-0.305477026119,-0.305568315693,-0.305659602459,-0.305750886415,-0.305842167561,-0.305933445896,-0.306024721418,-0.306115994128,-0.306207264024,-0.306298531105,-0.306389795371,-0.30648105682,-0.306572315453,-0.306663571267,-0.306754824263,-0.306846074439,-0.306937321795,-0.307028566329,-0.307119808042,-0.307211046931,-0.307302282996,-0.307393516237,-0.307484746652,-0.307575974241,-0.307667199003,-0.307758420937,-0.307849640042,-0.307940856317,-0.308032069761,-0.308123280375,-0.308214488156,-0.308305693104,-0.308396895218,-0.308488094498,-0.308579290942,-0.308670484549,-0.308761675319,-0.308852863252,-0.308944048345,-0.309035230598,-0.309126410011,-0.309217586583,-0.309308760312,-0.309399931198,-0.309491099241,-0.309582264438,-0.30967342679,-0.309764586295,-0.309855742954,-0.309946896764,-0.310038047725,-0.310129195836,-0.310220341096,-0.310311483506,-0.310402623062,-0.310493759766,-0.310584893616,-0.31067602461,-0.31076715275,-0.310858278032,-0.310949400458,-0.311040520025,-0.311131636733,-0.311222750581,-0.311313861569,-0.311404969695,-0.311496074958,-0.311587177359,-0.311678276895,-0.311769373567,-0.311860467372,-0.311951558312,-0.312042646384,-0.312133731587,-0.312224813922,-0.312315893386,-0.31240696998,-0.312498043703,-0.312589114553,-0.312680182529,-0.312771247632,-0.31286230986,-0.312953369212,-0.313044425687,-0.313135479285,-0.313226530004,-0.313317577845,-0.313408622805,-0.313499664885,-0.313590704083,-0.313681740399,-0.313772773831,-0.31386380438,-0.313954832043,-0.31404585682,-0.314136878711,-0.314227897714,-0.314318913829,-0.314409927055,-0.314500937391,-0.314591944836,-0.31468294939,-0.314773951051,-0.314864949818,-0.314955945692,-0.31504693867,-0.315137928753,-0.315228915938,-0.315319900227,-0.315410881617,-0.315501860108,-0.315592835698,-0.315683808388,-0.315774778176,-0.315865745062,-0.315956709045,-0.316047670123,-0.316138628296,-0.316229583563,-0.316320535923,-0.316411485376,-0.316502431921,-0.316593375556,-0.316684316281,-0.316775254096,-0.316866188998,-0.316957120989,-0.317048050065,-0.317138976228,-0.317229899475,-0.317320819806,-0.317411737221,-0.317502651718,-0.317593563297,-0.317684471956,-0.317775377696,-0.317866280514,-0.317957180411,-0.318048077385,-0.318138971436,-0.318229862562,-0.318320750763,-0.318411636039,-0.318502518387,-0.318593397808,-0.318684274301,-0.318775147864,-0.318866018497,-0.318956886199,-0.31904775097,-0.319138612808,-0.319229471712,-0.319320327682,-0.319411180717,-0.319502030816,-0.319592877978,-0.319683722203,-0.319774563489,-0.319865401836,-0.319956237242,-0.320047069708,-0.320137899232,-0.320228725813,-0.320319549451,-0.320410370144,-0.320501187893,-0.320592002695,-0.320682814551,-0.320773623458,-0.320864429418,-0.320955232428,-0.321046032488,-0.321136829597,-0.321227623754,-0.321318414958,-0.321409203209,-0.321499988506,-0.321590770847,-0.321681550233,-0.321772326662,-0.321863100133,-0.321953870645,-0.322044638198,-0.322135402791,-0.322226164423,-0.322316923094,-0.322407678801,-0.322498431545,-0.322589181325,-0.322679928139,-0.322770671988,-0.322861412869,-0.322952150783,-0.323042885729,-0.323133617705,-0.323224346711,-0.323315072746,-0.323405795809,-0.3234965159,-0.323587233016,-0.323677947159,-0.323768658326,-0.323859366518,-0.323950071732,-0.324040773969,-0.324131473228,-0.324222169507,-0.324312862805,-0.324403553123,-0.324494240459,-0.324584924813,-0.324675606182,-0.324766284568,-0.324856959968,-0.324947632382,-0.32503830181,-0.325128968249,-0.3252196317,-0.325310292162,-0.325400949634,-0.325491604115,-0.325582255603,-0.325672904099,-0.325763549602,-0.32585419211,-0.325944831623,-0.32603546814,-0.326126101661,-0.326216732183,-0.326307359707,-0.326397984232,-0.326488605756,-0.32657922428,-0.326669839801,-0.32676045232,-0.326851061836,-0.326941668347,-0.327032271853,-0.327122872352,-0.327213469845,-0.327304064331,-0.327394655808,-0.327485244275,-0.327575829733,-0.327666412179,-0.327756991613,-0.327847568035,-0.327938141443,-0.328028711837,-0.328119279216,-0.328209843579,-0.328300404925,-0.328390963253,-0.328481518563,-0.328572070854,-0.328662620124,-0.328753166373,-0.328843709601,-0.328934249806,-0.329024786987,-0.329115321144,-0.329205852276,-0.329296380382,-0.329386905461,-0.329477427512,-0.329567946535,-0.329658462529,-0.329748975492,-0.329839485424,-0.329929992325,-0.330020496193,-0.330110997028,-0.330201494828,-0.330291989593,-0.330382481322,-0.330472970014,-0.330563455669,-0.330653938285,-0.330744417862,-0.330834894399,-0.330925367895,-0.331015838349,-0.33110630576,-0.331196770128,-0.331287231451,-0.33137768973,-0.331468144962,-0.331558597148,-0.331649046286,-0.331739492376,-0.331829935416,-0.331920375407,-0.332010812346,-0.332101246234,-0.332191677069,-0.33228210485,-0.332372529578,-0.33246295125,-0.332553369866,-0.332643785426,-0.332734197927,-0.332824607371,-0.332915013755,-0.333005417079,-0.333095817343,-0.333186214544,-0.333276608683,-0.333366999759,-0.33345738777,-0.333547772716,-0.333638154596,-0.33372853341,-0.333818909156,-0.333909281834,-0.333999651442,-0.33409001798,-0.334180381448,-0.334270741844,-0.334361099167,-0.334451453417,-0.334541804592,-0.334632152693,-0.334722497718,-0.334812839666,-0.334903178536,-0.334993514328,-0.335083847041,-0.335174176674,-0.335264503226,-0.335354826697,-0.335445147085,-0.335535464389,-0.335625778609,-0.335716089745,-0.335806397794,-0.335896702757,-0.335987004633,-0.33607730342,-0.336167599118,-0.336257891726,-0.336348181243,-0.336438467668,-0.336528751001,-0.336619031241,-0.336709308387,-0.336799582437,-0.336889853392,-0.33698012125,-0.337070386011,-0.337160647674,-0.337250906237,-0.337341161701,-0.337431414063,-0.337521663324,-0.337611909483,-0.337702152538,-0.33779239249,-0.337882629336,-0.337972863077,-0.338063093711,-0.338153321238,-0.338243545656,-0.338333766966,-0.338423985165,-0.338514200254,-0.338604412231,-0.338694621096,-0.338784826848,-0.338875029485,-0.338965229008,-0.339055425415,-0.339145618705,-0.339235808879,-0.339325995934,-0.33941617987,-0.339506360686,-0.339596538381,-0.339686712955,-0.339776884407,-0.339867052735,-0.33995721794,-0.340047380019,-0.340137538974,-0.340227694801,-0.340317847501,-0.340407997074,-0.340498143517,-0.34058828683,-0.340678427013,-0.340768564064,-0.340858697983,-0.340948828769,-0.341038956421,-0.341129080939,-0.34121920232,-0.341309320566,-0.341399435674,-0.341489547644,-0.341579656475,-0.341669762166,-0.341759864717,-0.341849964126,-0.341940060393,-0.342030153518,-0.342120243498,-0.342210330333,-0.342300414024,-0.342390494567,-0.342480571964,-0.342570646212,-0.342660717312,-0.342750785262,-0.342840850062,-0.34293091171,-0.343020970206,-0.343111025549,-0.343201077738,-0.343291126773,-0.343381172652,-0.343471215375,-0.343561254941,-0.343651291349,-0.343741324598,-0.343831354687,-0.343921381616,-0.344011405384,-0.34410142599,-0.344191443433,-0.344281457712,-0.344371468826,-0.344461476776,-0.344551481559,-0.344641483174,-0.344731481622,-0.344821476902,-0.344911469012,-0.345001457951,-0.345091443719,-0.345181426316,-0.345271405739,-0.345361381989,-0.345451355064,-0.345541324964,-0.345631291688,-0.345721255235,-0.345811215604,-0.345901172794,-0.345991126805,-0.346081077636,-0.346171025285,-0.346260969753,-0.346350911038,-0.346440849139,-0.346530784056,-0.346620715788,-0.346710644334,-0.346800569692,-0.346890491863,-0.346980410846,-0.347070326639,-0.347160239242,-0.347250148654,-0.347340054874,-0.347429957901,-0.347519857735,-0.347609754375,-0.347699647819,-0.347789538067,-0.347879425119,-0.347969308973,-0.348059189629,-0.348149067085,-0.348238941341,-0.348328812396,-0.348418680249,-0.3485085449,-0.348598406348,-0.348688264591,-0.348778119629,-0.348867971461,-0.348957820087,-0.349047665505,-0.349137507714,-0.349227346714,-0.349317182505,-0.349407015084,-0.349496844452,-0.349586670607,-0.349676493549,-0.349766313277,-0.34985612979,-0.349945943087,-0.350035753168,-0.350125560031,-0.350215363675,-0.350305164101,-0.350394961307,-0.350484755292,-0.350574546055,-0.350664333596,-0.350754117913,-0.350843899007,-0.350933676876,-0.351023451519,-0.351113222935,-0.351202991125,-0.351292756086,-0.351382517818,-0.35147227632,-0.351562031591,-0.351651783631,-0.351741532439,-0.351831278013,-0.351921020354,-0.35201075946,-0.35210049533,-0.352190227964,-0.35227995736,-0.352369683519,-0.352459406438,-0.352549126118,-0.352638842557,-0.352728555755,-0.352818265711,-0.352907972424,-0.352997675892,-0.353087376116,-0.353177073095,-0.353266766827,-0.353356457312,-0.353446144549,-0.353535828538,-0.353625509277,-0.353715186765,-0.353804861002,-0.353894531987,-0.353984199719,-0.354073864197,-0.35416352542,-0.354253183389,-0.354342838101,-0.354432489556,-0.354522137753,-0.354611782691,-0.35470142437,-0.354791062789,-0.354880697946,-0.354970329842,-0.355059958474,-0.355149583843,-0.355239205948,-0.355328824787,-0.35541844036,-0.355508052666,-0.355597661705,-0.355687267475,-0.355776869975,-0.355866469205,-0.355956065165,-0.356045657852,-0.356135247267,-0.356224833408,-0.356314416274,-0.356403995866,-0.356493572182,-0.35658314522,-0.356672714982,-0.356762281464,-0.356851844668,-0.356941404591,-0.357030961233,-0.357120514594,-0.357210064672,-0.357299611467,-0.357389154977,-0.357478695203,-0.357568232142,-0.357657765795,-0.35774729616,-0.357836823237,-0.357926347025,-0.358015867523,-0.35810538473,-0.358194898645,-0.358284409268,-0.358373916598,-0.358463420634,-0.358552921374,-0.358642418819,-0.358731912968,-0.358821403819,-0.358910891371,-0.359000375625,-0.359089856579,-0.359179334232,-0.359268808584,-0.359358279633,-0.35944774738,-0.359537211822,-0.359626672959,-0.359716130791,-0.359805585317,-0.359895036535,-0.359984484445,-0.360073929046,-0.360163370338,-0.360252808319,-0.360342242988,-0.360431674346,-0.36052110239,-0.360610527121,-0.360699948537,-0.360789366637,-0.360878781421,-0.360968192888,-0.361057601037,-0.361147005867,-0.361236407378,-0.361325805568,-0.361415200438,-0.361504591985,-0.361593980209,-0.361683365109,-0.361772746685,-0.361862124936,-0.36195149986,-0.362040871458,-0.362130239727,-0.362219604668,-0.36230896628,-0.362398324561,-0.362487679511,-0.36257703113,-0.362666379415,-0.362755724367,-0.362845065985,-0.362934404268,-0.363023739214,-0.363113070824,-0.363202399096,-0.363291724029,-0.363381045623,-0.363470363877,-0.36355967879,-0.363648990362,-0.363738298591,-0.363827603476,-0.363916905017,-0.364006203213,-0.364095498064,-0.364184789567,-0.364274077723,-0.364363362531,-0.364452643989,-0.364541922098,-0.364631196856,-0.364720468262,-0.364809736316,-0.364899001016,-0.364988262363,-0.365077520354,-0.36516677499,-0.365256026269,-0.365345274191,-0.365434518755,-0.36552375996,-0.365612997805,-0.365702232289,-0.365791463412,-0.365880691173,-0.36596991557,-0.366059136604,-0.366148354272,-0.366237568576,-0.366326779513,-0.366415987082,-0.366505191284,-0.366594392117,-0.36668358958,-0.366772783673,-0.366861974394,-0.366951161743,-0.36704034572,-0.367129526322,-0.36721870355,-0.367307877403,-0.367397047879,-0.367486214979,-0.3675753787,-0.367664539043,-0.367753696007,-0.36784284959,-0.367931999792,-0.368021146612,-0.368110290049,-0.368199430102,-0.368288566771,-0.368377700055,-0.368466829953,-0.368555956464,-0.368645079588,-0.368734199323,-0.368823315668,-0.368912428624,-0.369001538188,-0.369090644361,-0.369179747141,-0.369268846527,-0.36935794252,-0.369447035117,-0.369536124318,-0.369625210123,-0.36971429253,-0.369803371539,-0.369892447149,-0.369981519359,-0.370070588168,-0.370159653575,-0.37024871558,-0.370337774182,-0.370426829379,-0.370515881172,-0.370604929559,-0.37069397454,-0.370783016113,-0.370872054278,-0.370961089034,-0.37105012038,-0.371139148316,-0.37122817284,-0.371317193952,-0.371406211651,-0.371495225936,-0.371584236806,-0.371673244261,-0.371762248299,-0.37185124892,-0.371940246124,-0.372029239908,-0.372118230273,-0.372207217218,-0.372296200741,-0.372385180842,-0.37247415752,-0.372563130775,-0.372652100605,-0.37274106701,-0.372830029988,-0.37291898954,-0.373007945663,-0.373096898359,-0.373185847624,-0.37327479346,-0.373363735864,-0.373452674837,-0.373541610377,-0.373630542483,-0.373719471155,-0.373808396392,-0.373897318193,-0.373986236557,-0.374075151483,-0.374164062971,-0.37425297102,-0.374341875629,-0.374430776797,-0.374519674523,-0.374608568807,-0.374697459647,-0.374786347044,-0.374875230995,-0.374964111501,-0.37505298856,-0.375141862171,-0.375230732334,-0.375319599049,-0.375408462313,-0.375497322127,-0.375586178489,-0.375675031399,-0.375763880856,-0.375852726859,-0.375941569407,-0.3760304085,-0.376119244136,-0.376208076315,-0.376296905036,-0.376385730298,-0.3764745521,-0.376563370442,-0.376652185323,-0.376740996741,-0.376829804697,-0.376918609189,-0.377007410216,-0.377096207778,-0.377185001874,-0.377273792503,-0.377362579664,-0.377451363356,-0.377540143579,-0.377628920332,-0.377717693613,-0.377806463423,-0.37789522976,-0.377983992623,-0.378072752012,-0.378161507926,-0.378250260364,-0.378339009325,-0.378427754809,-0.378516496814,-0.37860523534,-0.378693970385,-0.37878270195,-0.378871430034,-0.378960154634,-0.379048875752,-0.379137593385,-0.379226307533,-0.379315018196,-0.379403725372,-0.37949242906,-0.37958112926,-0.379669825972,-0.379758519193,-0.379847208924,-0.379935895163,-0.38002457791,-0.380113257164,-0.380201932924,-0.38029060519,-0.380379273959,-0.380467939233,-0.380556601009,-0.380645259287,-0.380733914067,-0.380822565346,-0.380911213126,-0.380999857404,-0.38108849818,-0.381177135453,-0.381265769222,-0.381354399487,-0.381443026247,-0.3815316495,-0.381620269247,-0.381708885485,-0.381797498215,-0.381886107436,-0.381974713147,-0.382063315346,-0.382151914034,-0.382240509209,-0.38232910087,-0.382417689017,-0.382506273649,-0.382594854766,-0.382683432365,-0.382772006447,-0.382860577011,-0.382949144055,-0.383037707579,-0.383126267583,-0.383214824065,-0.383303377024,-0.383391926461,-0.383480472373,-0.38356901476,-0.383657553622,-0.383746088957,-0.383834620765,-0.383923149045,-0.384011673796,-0.384100195017,-0.384188712707,-0.384277226867,-0.384365737494,-0.384454244587,-0.384542748148,-0.384631248173,-0.384719744663,-0.384808237617,-0.384896727034,-0.384985212912,-0.385073695252,-0.385162174053,-0.385250649313,-0.385339121032,-0.38542758921,-0.385516053844,-0.385604514935,-0.385692972481,-0.385781426482,-0.385869876938,-0.385958323846,-0.386046767207,-0.386135207019,-0.386223643282,-0.386312075995,-0.386400505157,-0.386488930767,-0.386577352825,-0.386665771329,-0.38675418628,-0.386842597675,-0.386931005514,-0.387019409797,-0.387107810523,-0.38719620769,-0.387284601299,-0.387372991347,-0.387461377835,-0.387549760761,-0.387638140125,-0.387726515926,-0.387814888164,-0.387903256836,-0.387991621943,-0.388079983483,-0.388168341457,-0.388256695862,-0.388345046699,-0.388433393966,-0.388521737663,-0.388610077788,-0.388698414342,-0.388786747322,-0.388875076729,-0.388963402562,-0.389051724819,-0.3891400435,-0.389228358604,-0.389316670131,-0.389404978079,-0.389493282448,-0.389581583236,-0.389669880444,-0.38975817407,-0.389846464113,-0.389934750573,-0.390023033449,-0.39011131274,-0.390199588444,-0.390287860563,-0.390376129094,-0.390464394036,-0.39055265539,-0.390640913153,-0.390729167326,-0.390817417908,-0.390905664897,-0.390993908293,-0.391082148095,-0.391170384302,-0.391258616914,-0.391346845929,-0.391435071348,-0.391523293168,-0.391611511389,-0.391699726011,-0.391787937033,-0.391876144453,-0.391964348271,-0.392052548486,-0.392140745098,-0.392228938105,-0.392317127507,-0.392405313303,-0.392493495492,-0.392581674073,-0.392669849046,-0.392758020409,-0.392846188162,-0.392934352304,-0.393022512835,-0.393110669753,-0.393198823057,-0.393286972747,-0.393375118823,-0.393463261282,-0.393551400125,-0.39363953535,-0.393727666957,-0.393815794945,-0.393903919314,-0.393992040061,-0.394080157187,-0.394168270691,-0.394256380571,-0.394344486828,-0.39443258946,-0.394520688466,-0.394608783847,-0.394696875599,-0.394784963724,-0.394873048221,-0.394961129087,-0.395049206323,-0.395137279928,-0.395225349901,-0.395313416241,-0.395401478948,-0.39548953802,-0.395577593457,-0.395665645257,-0.395753693421,-0.395841737947,-0.395929778835,-0.396017816083,-0.396105849692,-0.396193879659,-0.396281905985,-0.396369928668,-0.396457947707,-0.396545963103,-0.396633974854,-0.396721982958,-0.396809987417,-0.396897988228,-0.39698598539,-0.397073978904,-0.397161968768,-0.397249954981,-0.397337937543,-0.397425916452,-0.397513891709,-0.397601863311,-0.397689831259,-0.397777795552,-0.397865756188,-0.397953713167,-0.398041666488,-0.39812961615,-0.398217562153,-0.398305504496,-0.398393443177,-0.398481378197,-0.398569309554,-0.398657237247,-0.398745161276,-0.398833081639,-0.398920998337,-0.399008911368,-0.399096820731,-0.399184726426,-0.399272628452,-0.399360526807,-0.399448421492,-0.399536312505,-0.399624199846,-0.399712083513,-0.399799963506,-0.399887839825,-0.399975712468,-0.400063581434,-0.400151446723,-0.400239308334,-0.400327166266,-0.400415020518,-0.40050287109,-0.40059071798,-0.400678561188,-0.400766400714,-0.400854236555,-0.400942068712,-0.401029897184,-0.401117721969,-0.401205543067,-0.401293360478,-0.4013811742,-0.401468984233,-0.401556790575,-0.401644593226,-0.401732392186,-0.401820187453,-0.401907979026,-0.401995766905,-0.40208355109,-0.402171331578,-0.402259108369,-0.402346881464,-0.402434650859,-0.402522416556,-0.402610178553,-0.402697936849,-0.402785691444,-0.402873442336,-0.402961189525,-0.40304893301,-0.403136672791,-0.403224408866,-0.403312141235,-0.403399869896,-0.403487594849,-0.403575316094,-0.403663033629,-0.403750747454,-0.403838457568,-0.403926163969,-0.404013866658,-0.404101565633,-0.404189260894,-0.404276952439,-0.404364640269,-0.404452324382,-0.404540004777,-0.404627681453,-0.40471535441,-0.404803023648,-0.404890689164,-0.404978350959,-0.405066009031,-0.40515366338,-0.405241314005,-0.405328960905,-0.405416604079,-0.405504243527,-0.405591879248,-0.40567951124,-0.405767139503,-0.405854764037,-0.40594238484,-0.406030001912,-0.406117615252,-0.406205224859,-0.406292830732,-0.40638043287,-0.406468031273,-0.40655562594,-0.40664321687,-0.406730804063,-0.406818387516,-0.40690596723,-0.406993543204,-0.407081115438,-0.407168683929,-0.407256248677,-0.407343809683,-0.407431366944,-0.40751892046,-0.40760647023,-0.407694016253,-0.407781558529,-0.407869097057,-0.407956631836,-0.408044162865,-0.408131690143,-0.40821921367,-0.408306733445,-0.408394249466,-0.408481761734,-0.408569270247,-0.408656775004,-0.408744276005,-0.40883177325,-0.408919266736,-0.409006756463,-0.409094242431,-0.409181724639,-0.409269203086,-0.40935667777,-0.409444148692,-0.409531615851,-0.409619079245,-0.409706538874,-0.409793994737,-0.409881446833,-0.409968895162,-0.410056339722,-0.410143780514,-0.410231217535,-0.410318650785,-0.410406080264,-0.410493505971,-0.410580927905,-0.410668346064,-0.410755760449,-0.410843171058,-0.410930577891,-0.411017980946,-0.411105380224,-0.411192775723,-0.411280167442,-0.411367555381,-0.411454939538,-0.411542319914,-0.411629696507,-0.411717069316,-0.41180443834,-0.41189180358,-0.411979165034,-0.4120665227,-0.412153876579,-0.41224122667,-0.412328572971,-0.412415915483,-0.412503254203,-0.412590589132,-0.412677920268,-0.412765247612,-0.412852571161,-0.412939890915,-0.413027206874,-0.413114519036,-0.413201827401,-0.413289131968,-0.413376432736,-0.413463729704,-0.413551022872,-0.413638312238,-0.413725597803,-0.413812879565,-0.413900157523,-0.413987431676,-0.414074702024,-0.414161968566,-0.414249231301,-0.414336490229,-0.414423745348,-0.414510996658,-0.414598244157,-0.414685487846,-0.414772727723,-0.414859963788,-0.414947196039,-0.415034424476,-0.415121649098,-0.415208869905,-0.415296086895,-0.415383300068,-0.415470509422,-0.415557714958,-0.415644916674,-0.415732114569,-0.415819308643,-0.415906498895,-0.415993685324,-0.41608086793,-0.41616804671,-0.416255221666,-0.416342392795,-0.416429560098,-0.416516723572,-0.416603883218,-0.416691039035,-0.416778191022,-0.416865339178,-0.416952483502,-0.417039623993,-0.417126760651,-0.417213893475,-0.417301022464,-0.417388147618,-0.417475268935,-0.417562386414,-0.417649500055,-0.417736609858,-0.41782371582,-0.417910817942,-0.417997916223,-0.418085010662,-0.418172101257,-0.418259188009,-0.418346270916,-0.418433349978,-0.418520425194,-0.418607496563,-0.418694564084,-0.418781627757,-0.41886868758,-0.418955743553,-0.419042795675,-0.419129843945,-0.419216888363,-0.419303928928,-0.419390965638,-0.419477998493,-0.419565027493,-0.419652052636,-0.419739073922,-0.419826091349,-0.419913104918,-0.420000114627,-0.420087120475,-0.420174122462,-0.420261120587,-0.420348114849,-0.420435105247,-0.42052209178,-0.420609074448,-0.42069605325,-0.420783028186,-0.420869999253,-0.420956966452,-0.421043929781,-0.42113088924,-0.421217844829,-0.421304796545,-0.42139174439,-0.42147868836,-0.421565628457,-0.421652564679,-0.421739497024,-0.421826425494,-0.421913350086,-0.4220002708,-0.422087187635,-0.42217410059,-0.422261009665,-0.422347914858,-0.422434816169,-0.422521713598,-0.422608607142,-0.422695496802,-0.422782382577,-0.422869264466,-0.422956142467,-0.423043016581,-0.423129886807,-0.423216753143,-0.423303615589,-0.423390474144,-0.423477328807,-0.423564179578,-0.423651026456,-0.423737869439,-0.423824708528,-0.42391154372,-0.423998375017,-0.424085202416,-0.424172025917,-0.424258845519,-0.424345661221,-0.424432473023,-0.424519280923,-0.424606084922,-0.424692885017,-0.424779681209,-0.424866473496,-0.424953261879,-0.425040046355,-0.425126826924,-0.425213603585,-0.425300376338,-0.425387145182,-0.425473910116,-0.425560671138,-0.42564742825,-0.425734181448,-0.425820930734,-0.425907676105,-0.425994417562,-0.426081155102,-0.426167888727,-0.426254618434,-0.426341344223,-0.426428066093,-0.426514784044,-0.426601498074,-0.426688208183,-0.42677491437,-0.426861616634,-0.426948314975,-0.427035009391,-0.427121699882,-0.427208386447,-0.427295069085,-0.427381747795,-0.427468422577,-0.42755509343,-0.427641760353,-0.427728423345,-0.427815082406,-0.427901737534,-0.427988388729,-0.42807503599,-0.428161679316,-0.428248318707,-0.428334954161,-0.428421585678,-0.428508213257,-0.428594836897,-0.428681456598,-0.428768072359,-0.428854684178,-0.428941292055,-0.42902789599,-0.429114495981,-0.429201092028,-0.42928768413,-0.429374272285,-0.429460856494,-0.429547436756,-0.429634013069,-0.429720585433,-0.429807153847,-0.429893718311,-0.429980278823,-0.430066835383,-0.430153387989,-0.430239936642,-0.43032648134,-0.430413022083,-0.430499558869,-0.430586091698,-0.43067262057,-0.430759145483,-0.430845666436,-0.430932183429,-0.431018696461,-0.431105205531,-0.431191710639,-0.431278211783,-0.431364708963,-0.431451202178,-0.431537691427,-0.43162417671,-0.431710658025,-0.431797135372,-0.43188360875,-0.431970078158,-0.432056543596,-0.432143005062,-0.432229462556,-0.432315916077,-0.432402365625,-0.432488811198,-0.432575252795,-0.432661690416,-0.432748124061,-0.432834553727,-0.432920979416,-0.433007401124,-0.433093818853,-0.433180232601,-0.433266642367,-0.433353048151,-0.433439449951,-0.433525847767,-0.433612241599,-0.433698631444,-0.433785017304,-0.433871399176,-0.43395777706,-0.434044150955,-0.43413052086,-0.434216886775,-0.434303248699,-0.434389606631,-0.43447596057,-0.434562310515,-0.434648656466,-0.434734998422,-0.434821336381,-0.434907670344,-0.43499400031,-0.435080326277,-0.435166648245,-0.435252966213,-0.43533928018,-0.435425590145,-0.435511896108,-0.435598198069,-0.435684496025,-0.435770789976,-0.435857079922,-0.435943365862,-0.436029647794,-0.436115925719,-0.436202199635,-0.436288469542,-0.436374735438,-0.436460997323,-0.436547255196,-0.436633509057,-0.436719758904,-0.436806004737,-0.436892246555,-0.436978484357,-0.437064718143,-0.437150947911,-0.437237173661,-0.437323395392,-0.437409613103,-0.437495826794,-0.437582036463,-0.43766824211,-0.437754443734,-0.437840641334,-0.43792683491,-0.438013024461,-0.438099209985,-0.438185391483,-0.438271568952,-0.438357742394,-0.438443911806,-0.438530077188,-0.438616238539,-0.438702395858,-0.438788549145,-0.438874698398,-0.438960843618,-0.439046984803,-0.439133121952,-0.439219255065,-0.43930538414,-0.439391509178,-0.439477630176,-0.439563747135,-0.439649860054,-0.439735968932,-0.439822073767,-0.43990817456,-0.43999427131,-0.440080364015,-0.440166452675,-0.440252537288,-0.440338617856,-0.440424694375,-0.440510766847,-0.440596835269,-0.440682899642,-0.440768959964,-0.440855016234,-0.440941068452,-0.441027116617,-0.441113160729,-0.441199200785,-0.441285236787,-0.441371268732,-0.44145729662,-0.44154332045,-0.441629340222,-0.441715355934,-0.441801367586,-0.441887375178,-0.441973378707,-0.442059378174,-0.442145373578,-0.442231364918,-0.442317352192,-0.442403335401,-0.442489314544,-0.442575289619,-0.442661260626,-0.442747227565,-0.442833190433,-0.442919149232,-0.443005103959,-0.443091054614,-0.443177001196,-0.443262943705,-0.443348882139,-0.443434816498,-0.443520746781,-0.443606672988,-0.443692595117,-0.443778513167,-0.443864427139,-0.44395033703,-0.444036242841,-0.44412214457,-0.444208042218,-0.444293935782,-0.444379825262,-0.444465710657,-0.444551591967,-0.444637469191,-0.444723342328,-0.444809211377,-0.444895076338,-0.444980937209,-0.44506679399,-0.44515264668,-0.445238495278,-0.445324339783,-0.445410180196,-0.445496016514,-0.445581848737,-0.445667676865,-0.445753500896,-0.44583932083,-0.445925136666,-0.446010948403,-0.44609675604,-0.446182559577,-0.446268359013,-0.446354154346,-0.446439945577,-0.446525732705,-0.446611515728,-0.446697294645,-0.446783069457,-0.446868840162,-0.44695460676,-0.447040369249,-0.447126127629,-0.4472118819,-0.447297632059,-0.447383378108,-0.447469120043,-0.447554857866,-0.447640591575,-0.44772632117,-0.447812046649,-0.447897768012,-0.447983485257,-0.448069198386,-0.448154907395,-0.448240612285,-0.448326313055,-0.448412009704,-0.448497702232,-0.448583390637,-0.448669074918,-0.448754755076,-0.448840431109,-0.448926103016,-0.449011770796,-0.44909743445,-0.449183093975,-0.449268749372,-0.449354400639,-0.449440047776,-0.449525690781,-0.449611329655,-0.449696964395,-0.449782595003,-0.449868221476,-0.449953843814,-0.450039462016,-0.450125076081,-0.450210686009,-0.450296291799,-0.450381893449,-0.45046749096,-0.45055308433,-0.450638673559,-0.450724258646,-0.45080983959,-0.45089541639,-0.450980989045,-0.451066557555,-0.451152121919,-0.451237682136,-0.451323238206,-0.451408790127,-0.451494337898,-0.45157988152,-0.451665420991,-0.45175095631,-0.451836487477,-0.451922014491,-0.45200753735,-0.452093056055,-0.452178570605,-0.452264080998,-0.452349587234,-0.452435089312,-0.452520587231,-0.452606080991,-0.452691570591,-0.452777056029,-0.452862537306,-0.45294801442,-0.453033487371,-0.453118956157,-0.453204420779,-0.453289881235,-0.453375337524,-0.453460789646,-0.4535462376,-0.453631681385,-0.453717121,-0.453802556445,-0.453887987718,-0.45397341482,-0.454058837749,-0.454144256504,-0.454229671084,-0.45431508149,-0.454400487719,-0.454485889772,-0.454571287647,-0.454656681344,-0.454742070862,-0.4548274562,-0.454912837357,-0.454998214333,-0.455083587126,-0.455168955737,-0.455254320163,-0.455339680406,-0.455425036462,-0.455510388333,-0.455595736016,-0.455681079512,-0.455766418819,-0.455851753937,-0.455937084865,-0.456022411602,-0.456107734148,-0.456193052501,-0.45627836666,-0.456363676626,-0.456448982397,-0.456534283972,-0.456619581351,-0.456704874533,-0.456790163517,-0.456875448302,-0.456960728888,-0.457046005273,-0.457131277457,-0.45721654544,-0.457301809219,-0.457387068796,-0.457472324168,-0.457557575335,-0.457642822297,-0.457728065051,-0.457813303599,-0.457898537938,-0.457983768069,-0.45806899399,-0.4581542157,-0.458239433199,-0.458324646486,-0.45840985556,-0.458495060421,-0.458580261067,-0.458665457498,-0.458750649713,-0.458835837712,-0.458921021492,-0.459006201055,-0.459091376398,-0.459176547522,-0.459261714425,-0.459346877106,-0.459432035566,-0.459517189802,-0.459602339814,-0.459687485602,-0.459772627165,-0.459857764501,-0.459942897611,-0.460028026493,-0.460113151146,-0.46019827157,-0.460283387764,-0.460368499727,-0.460453607459,-0.460538710958,-0.460623810224,-0.460708905256,-0.460793996054,-0.460879082616,-0.460964164941,-0.46104924303,-0.46113431688,-0.461219386492,-0.461304451865,-0.461389512997,-0.461474569888,-0.461559622538,-0.461644670945,-0.461729715108,-0.461814755028,-0.461899790702,-0.461984822131,-0.462069849314,-0.462154872249,-0.462239890936,-0.462324905375,-0.462409915563,-0.462494921502,-0.462579923189,-0.462664920624,-0.462749913807,-0.462834902736,-0.462919887411,-0.463004867831,-0.463089843995,-0.463174815902,-0.463259783552,-0.463344746944,-0.463429706076,-0.463514660949,-0.463599611562,-0.463684557913,-0.463769500002,-0.463854437828,-0.463939371391,-0.464024300689,-0.464109225722,-0.464194146489,-0.464279062989,-0.464363975222,-0.464448883186,-0.464533786881,-0.464618686306,-0.464703581461,-0.464788472344,-0.464873358955,-0.464958241293,-0.465043119357,-0.465127993146,-0.46521286266,-0.465297727898,-0.46538258886,-0.465467445543,-0.465552297948,-0.465637146073,-0.465721989919,-0.465806829484,-0.465891664767,-0.465976495768,-0.466061322486,-0.466146144919,-0.466230963068,-0.466315776932,-0.466400586509,-0.466485391799,-0.466570192802,-0.466654989516,-0.46673978194,-0.466824570074,-0.466909353917,-0.466994133469,-0.467078908728,-0.467163679694,-0.467248446365,-0.467333208742,-0.467417966823,-0.467502720608,-0.467587470095,-0.467672215285,-0.467756956176,-0.467841692767,-0.467926425058,-0.468011153048,-0.468095876736,-0.468180596122,-0.468265311204,-0.468350021982,-0.468434728455,-0.468519430622,-0.468604128483,-0.468688822036,-0.468773511281,-0.468858196217,-0.468942876844,-0.46902755316,-0.469112225165,-0.469196892859,-0.469281556239,-0.469366215306,-0.469450870058,-0.469535520496,-0.469620166617,-0.469704808422,-0.46978944591,-0.469874079079,-0.469958707929,-0.47004333246,-0.47012795267,-0.470212568558,-0.470297180125,-0.470381787369,-0.470466390289,-0.470550988884,-0.470635583155,-0.470720173099,-0.470804758717,-0.470889340007,-0.470973916969,-0.471058489601,-0.471143057904,-0.471227621877,-0.471312181517,-0.471396736826,-0.471481287802,-0.471565834443,-0.471650376751,-0.471734914723,-0.471819448359,-0.471903977658,-0.471988502619,-0.472073023242,-0.472157539526,-0.47224205147,-0.472326559073,-0.472411062335,-0.472495561254,-0.47258005583,-0.472664546063,-0.47274903195,-0.472833513493,-0.472917990689,-0.473002463538,-0.473086932039,-0.473171396192,-0.473255855996,-0.47334031145,-0.473424762552,-0.473509209303,-0.473593651702,-0.473678089748,-0.473762523439,-0.473846952776,-0.473931377757,-0.474015798383,-0.474100214651,-0.474184626561,-0.474269034112,-0.474353437305,-0.474437836137,-0.474522230608,-0.474606620717,-0.474691006464,-0.474775387848,-0.474859764868,-0.474944137522,-0.475028505812,-0.475112869735,-0.47519722929,-0.475281584478,-0.475365935297,-0.475450281747,-0.475534623827,-0.475618961535,-0.475703294872,-0.475787623836,-0.475871948427,-0.475956268643,-0.476040584485,-0.476124895951,-0.476209203041,-0.476293505753,-0.476377804088,-0.476462098044,-0.47654638762,-0.476630672816,-0.47671495363,-0.476799230063,-0.476883502114,-0.47696776978,-0.477052033063,-0.477136291961,-0.477220546473,-0.477304796598,-0.477389042337,-0.477473283687,-0.477557520648,-0.47764175322,-0.477725981401,-0.477810205191,-0.477894424589,-0.477978639595,-0.478062850207,-0.478147056425,-0.478231258248,-0.478315455675,-0.478399648705,-0.478483837338,-0.478568021573,-0.478652201409,-0.478736376845,-0.478820547881,-0.478904714516,-0.478988876749,-0.479073034579,-0.479157188005,-0.479241337027,-0.479325481644,-0.479409621856,-0.47949375766,-0.479577889057,-0.479662016046,-0.479746138626,-0.479830256797,-0.479914370556,-0.479998479905,-0.480082584841,-0.480166685365,-0.480250781475,-0.480334873171,-0.480418960451,-0.480503043316,-0.480587121764,-0.480671195795,-0.480755265407,-0.4808393306,-0.480923391374,-0.481007447727,-0.481091499659,-0.481175547168,-0.481259590255,-0.481343628918,-0.481427663157,-0.48151169297,-0.481595718358,-0.481679739319,-0.481763755852,-0.481847767957,-0.481931775633,-0.482015778879,-0.482099777695,-0.482183772079,-0.482267762031,-0.482351747551,-0.482435728636,-0.482519705287,-0.482603677503,-0.482687645283,-0.482771608626,-0.482855567532,-0.482939521999,-0.483023472027,-0.483107417616,-0.483191358763,-0.48327529547,-0.483359227734,-0.483443155555,-0.483527078933,-0.483610997866,-0.483694912354,-0.483778822396,-0.483862727991,-0.483946629138,-0.484030525837,-0.484114418087,-0.484198305888,-0.484282189237,-0.484366068135,-0.484449942581,-0.484533812574,-0.484617678113,-0.484701539198,-0.484785395827,-0.484869248001,-0.484953095717,-0.485036938976,-0.485120777777,-0.485204612119,-0.485288442,-0.485372267421,-0.485456088381,-0.485539904878,-0.485623716912,-0.485707524483,-0.485791327589,-0.48587512623,-0.485958920404,-0.486042710112,-0.486126495353,-0.486210276124,-0.486294052427,-0.48637782426,-0.486461591622,-0.486545354513,-0.486629112932,-0.486712866877,-0.486796616349,-0.486880361346,-0.486964101868,-0.487047837914,-0.487131569483,-0.487215296574,-0.487299019187,-0.487382737321,-0.487466450975,-0.487550160148,-0.48763386484,-0.48771756505,-0.487801260776,-0.487884952019,-0.487968638778,-0.488052321051,-0.488135998838,-0.488219672138,-0.48830334095,-0.488387005274,-0.488470665109,-0.488554320454,-0.488637971309,-0.488721617671,-0.488805259542,-0.48888889692,-0.488972529804,-0.489056158193,-0.489139782087,-0.489223401485,-0.489307016386,-0.48939062679,-0.489474232695,-0.489557834101,-0.489641431007,-0.489725023413,-0.489808611317,-0.489892194719,-0.489975773617,-0.490059348012,-0.490142917903,-0.490226483288,-0.490310044167,-0.49039360054,-0.490477152405,-0.490560699761,-0.490644242608,-0.490727780946,-0.490811314773,-0.490894844088,-0.490978368891,-0.491061889181,-0.491145404957,-0.491228916219,-0.491312422966,-0.491395925197,-0.49147942291,-0.491562916107,-0.491646404784,-0.491729888943,-0.491813368582,-0.4918968437,-0.491980314297,-0.492063780372,-0.492147241923,-0.492230698951,-0.492314151455,-0.492397599433,-0.492481042886,-0.492564481811,-0.492647916209,-0.492731346079,-0.492814771419,-0.49289819223,-0.49298160851,-0.493065020259,-0.493148427475,-0.493231830159,-0.493315228309,-0.493398621924,-0.493482011004,-0.493565395549,-0.493648775556,-0.493732151026,-0.493815521958,-0.493898888351,-0.493982250204,-0.494065607516,-0.494148960287,-0.494232308516,-0.494315652202,-0.494398991344,-0.494482325942,-0.494565655995,-0.494648981502,-0.494732302462,-0.494815618875,-0.494898930739,-0.494982238054,-0.49506554082,-0.495148839035,-0.495232132699,-0.495315421811,-0.49539870637,-0.495481986375,-0.495565261826,-0.495648532722,-0.495731799061,-0.495815060845,-0.495898318071,-0.495981570738,-0.496064818847,-0.496148062396,-0.496231301384,-0.496314535811,-0.496397765677,-0.496480990979,-0.496564211718,-0.496647427893,-0.496730639502,-0.496813846546,-0.496897049023,-0.496980246932,-0.497063440274,-0.497146629046,-0.497229813249,-0.497312992882,-0.497396167943,-0.497479338433,-0.497562504349,-0.497645665692,-0.497728822461,-0.497811974655,-0.497895122273,-0.497978265315,-0.498061403779,-0.498144537665,-0.498227666973,-0.498310791701,-0.498393911848,-0.498477027414,-0.498560138399,-0.4986432448,-0.498726346619,-0.498809443853,-0.498892536502,-0.498975624565,-0.499058708042,-0.499141786932,-0.499224861234,-0.499307930946,-0.49939099607,-0.499474056603,-0.499557112545,-0.499640163895,-0.499723210653,-0.499806252817,-0.499889290387,-0.499972323363,-0.500055351742,-0.500138375526,-0.500221394712,-0.5003044093,-0.50038741929,-0.50047042468,-0.500553425469,-0.500636421658,-0.500719413245,-0.50080240023,-0.500885382611,-0.500968360389,-0.501051333561,-0.501134302128,-0.501217266089,-0.501300225442,-0.501383180188,-0.501466130325,-0.501549075853,-0.50163201677,-0.501714953077,-0.501797884772,-0.501880811855,-0.501963734324,-0.50204665218,-0.50212956542,-0.502212474046,-0.502295378055,-0.502378277447,-0.502461172221,-0.502544062377,-0.502626947914,-0.50270982883,-0.502792705126,-0.5028755768,-0.502958443852,-0.503041306281,-0.503124164086,-0.503207017266,-0.503289865821,-0.50337270975,-0.503455549051,-0.503538383726,-0.503621213772,-0.503704039188,-0.503786859975,-0.503869676131,-0.503952487655,-0.504035294548,-0.504118096807,-0.504200894433,-0.504283687424,-0.50436647578,-0.504449259499,-0.504532038582,-0.504614813028,-0.504697582835,-0.504780348003,-0.504863108531,-0.504945864419,-0.505028615665,-0.505111362269,-0.505194104231,-0.505276841548,-0.505359574222,-0.50544230225,-0.505525025632,-0.505607744367,-0.505690458455,-0.505773167895,-0.505855872686,-0.505938572827,-0.506021268318,-0.506103959158,-0.506186645345,-0.50626932688,-0.506352003761,-0.506434675988,-0.50651734356,-0.506600006476,-0.506682664736,-0.506765318338,-0.506847967282,-0.506930611567,-0.507013251193,-0.507095886158,-0.507178516462,-0.507261142105,-0.507343763084,-0.507426379401,-0.507508991053,-0.50759159804,-0.507674200362,-0.507756798017,-0.507839391005,-0.507921979325,-0.508004562976,-0.508087141958,-0.50816971627,-0.50825228591,-0.508334850879,-0.508417411175,-0.508499966799,-0.508582517748,-0.508665064022,-0.508747605621,-0.508830142543,-0.508912674789,-0.508995202356,-0.509077725245,-0.509160243455,-0.509242756984,-0.509325265833,-0.50940777,-0.509490269485,-0.509572764287,-0.509655254404,-0.509737739837,-0.509820220585,-0.509902696647,-0.509985168021,-0.510067634708,-0.510150096707,-0.510232554016,-0.510315006635,-0.510397454564,-0.510479897801,-0.510562336346,-0.510644770198,-0.510727199357,-0.51080962382,-0.510892043589,-0.510974458661,-0.511056869037,-0.511139274715,-0.511221675695,-0.511304071976,-0.511386463557,-0.511468850438,-0.511551232617,-0.511633610094,-0.511715982869,-0.511798350939,-0.511880714306,-0.511963072967,-0.512045426923,-0.512127776172,-0.512210120713,-0.512292460546,-0.512374795671,-0.512457126086,-0.51253945179,-0.512621772783,-0.512704089065,-0.512786400634,-0.512868707489,-0.51295100963,-0.513033307056,-0.513115599767,-0.513197887761,-0.513280171038,-0.513362449596,-0.513444723437,-0.513526992557,-0.513609256958,-0.513691516637,-0.513773771595,-0.51385602183,-0.513938267342,-0.51402050813,-0.514102744193,-0.514184975531,-0.514267202142,-0.514349424027,-0.514431641183,-0.514513853611,-0.51459606131,-0.514678264279,-0.514760462517,-0.514842656023,-0.514924844797,-0.515007028838,-0.515089208145,-0.515171382717,-0.515253552554,-0.515335717655,-0.515417878019,-0.515500033646,-0.515582184534,-0.515664330683,-0.515746472092,-0.515828608761,-0.515910740688,-0.515992867873,-0.516074990315,-0.516157108014,-0.516239220968,-0.516321329177,-0.51640343264,-0.516485531356,-0.516567625325,-0.516649714546,-0.516731799018,-0.51681387874,-0.516895953711,-0.516978023932,-0.5170600894,-0.517142150116,-0.517224206079,-0.517306257287,-0.51738830374,-0.517470345437,-0.517552382378,-0.517634414562,-0.517716441988,-0.517798464655,-0.517880482562,-0.51796249571,-0.518044504096,-0.518126507721,-0.518208506583,-0.518290500681,-0.518372490016,-0.518454474586,-0.518536454391,-0.518618429429,-0.5187003997,-0.518782365203,-0.518864325938,-0.518946281904,-0.519028233099,-0.519110179524,-0.519192121177,-0.519274058058,-0.519355990166,-0.5194379175,-0.519519840059,-0.519601757843,-0.519683670851,-0.519765579082,-0.519847482536,-0.519929381211,-0.520011275108,-0.520093164224,-0.52017504856,-0.520256928114,-0.520338802887,-0.520420672876,-0.520502538082,-0.520584398504,-0.52066625414,-0.520748104991,-0.520829951055,-0.520911792332,-0.52099362882,-0.52107546052,-0.52115728743,-0.52123910955,-0.521320926879,-0.521402739415,-0.521484547159,-0.52156635011,-0.521648148267,-0.521729941629,-0.521811730195,-0.521893513965,-0.521975292937,-0.522057067112,-0.522138836488,-0.522220601065,-0.522302360841,-0.522384115817,-0.522465865991,-0.522547611363,-0.522629351931,-0.522711087696,-0.522792818656,-0.52287454481,-0.522956266159,-0.5230379827,-0.523119694434,-0.523201401359,-0.523283103476,-0.523364800782,-0.523446493278,-0.523528180962,-0.523609863834,-0.523691541893,-0.523773215139,-0.52385488357,-0.523936547186,-0.524018205986,-0.52409985997,-0.524181509136,-0.524263153484,-0.524344793013,-0.524426427722,-0.524508057611,-0.524589682678,-0.524671302924,-0.524752918347,-0.524834528947,-0.524916134723,-0.524997735673,-0.525079331798,-0.525160923097,-0.525242509568,-0.525324091212,-0.525405668026,-0.525487240012,-0.525568807167,-0.525650369491,-0.525731926984,-0.525813479644,-0.525895027471,-0.525976570464,-0.526058108623,-0.526139641946,-0.526221170433,-0.526302694083,-0.526384212895,-0.526465726869,-0.526547236004,-0.526628740298,-0.526710239753,-0.526791734365,-0.526873224136,-0.526954709064,-0.527036189148,-0.527117664387,-0.527199134782,-0.52728060033,-0.527362061032,-0.527443516887,-0.527524967893,-0.527606414051,-0.527687855359,-0.527769291816,-0.527850723423,-0.527932150177,-0.528013572079,-0.528094989127,-0.528176401321,-0.528257808661,-0.528339211145,-0.528420608772,-0.528502001542,-0.528583389455,-0.528664772508,-0.528746150703,-0.528827524037,-0.52890889251,-0.528990256122,-0.529071614872,-0.529152968758,-0.52923431778,-0.529315661938,-0.52939700123,-0.529478335657,-0.529559665216,-0.529640989908,-0.529722309732,-0.529803624686,-0.529884934771,-0.529966239985,-0.530047540328,-0.530128835798,-0.530210126396,-0.53029141212,-0.53037269297,-0.530453968945,-0.530535240044,-0.530616506266,-0.530697767612,-0.530779024079,-0.530860275667,-0.530941522376,-0.531022764204,-0.531104001151,-0.531185233217,-0.5312664604,-0.5313476827,-0.531428900115,-0.531510112646,-0.531591320292,-0.531672523051,-0.531753720923,-0.531834913907,-0.531916102003,-0.531997285209,-0.532078463526,-0.532159636952,-0.532240805486,-0.532321969128,-0.532403127877,-0.532484281733,-0.532565430693,-0.532646574759,-0.532727713929,-0.532808848202,-0.532889977577,-0.532971102054,-0.533052221633,-0.533133336311,-0.533214446089,-0.533295550966,-0.533376650941,-0.533457746014,-0.533538836183,-0.533619921447,-0.533701001807,-0.533782077261,-0.533863147809,-0.53394421345,-0.534025274182,-0.534106330006,-0.534187380921,-0.534268426926,-0.534349468019,-0.534430504201,-0.534511535471,-0.534592561827,-0.53467358327,-0.534754599798,-0.534835611411,-0.534916618107,-0.534997619887,-0.535078616749,-0.535159608693,-0.535240595718,-0.535321577823,-0.535402555007,-0.53548352727,-0.535564494611,-0.53564545703,-0.535726414524,-0.535807367095,-0.53588831474,-0.53596925746,-0.536050195253,-0.536131128119,-0.536212056057,-0.536292979066,-0.536373897146,-0.536454810295,-0.536535718513,-0.5366166218,-0.536697520154,-0.536778413575,-0.536859302062,-0.536940185615,-0.537021064232,-0.537101937913,-0.537182806656,-0.537263670463,-0.53734452933,-0.537425383259,-0.537506232248,-0.537587076296,-0.537667915402,-0.537748749567,-0.537829578789,-0.537910403067,-0.5379912224,-0.538072036789,-0.538152846232,-0.538233650728,-0.538314450277,-0.538395244877,-0.538476034529,-0.538556819232,-0.538637598984,-0.538718373785,-0.538799143634,-0.538879908531,-0.538960668474,-0.539041423464,-0.539122173499,-0.539202918578,-0.539283658701,-0.539364393867,-0.539445124075,-0.539525849325,-0.539606569616,-0.539687284946,-0.539767995316,-0.539848700725,-0.539929401171,-0.540010096655,-0.540090787174,-0.54017147273,-0.54025215332,-0.540332828945,-0.540413499602,-0.540494165293,-0.540574826015,-0.540655481768,-0.540736132552,-0.540816778366,-0.540897419208,-0.540978055079,-0.541058685977,-0.541139311902,-0.541219932853,-0.541300548828,-0.541381159829,-0.541461765853,-0.5415423669,-0.54162296297,-0.541703554061,-0.541784140172,-0.541864721304,-0.541945297455,-0.542025868625,-0.542106434812,-0.542186996017,-0.542267552238,-0.542348103474,-0.542428649726,-0.542509190991,-0.54258972727,-0.542670258561,-0.542750784865,-0.542831306179,-0.542911822504,-0.542992333838,-0.543072840182,-0.543153341534,-0.543233837893,-0.543314329258,-0.54339481563,-0.543475297007,-0.543555773389,-0.543636244774,-0.543716711162,-0.543797172553,-0.543877628945,-0.543958080338,-0.544038526731,-0.544118968123,-0.544199404514,-0.544279835903,-0.544360262288,-0.544440683671,-0.544521100048,-0.544601511421,-0.544681917788,-0.544762319148,-0.544842715501,-0.544923106845,-0.545003493181,-0.545083874508,-0.545164250824,-0.545244622129,-0.545324988422,-0.545405349703,-0.54548570597,-0.545566057224,-0.545646403463,-0.545726744686,-0.545807080893,-0.545887412083,-0.545967738256,-0.54604805941,-0.546128375545,-0.54620868666,-0.546288992754,-0.546369293827,-0.546449589878,-0.546529880906,-0.546610166911,-0.546690447891,-0.546770723846,-0.546850994775,-0.546931260678,-0.547011521554,-0.547091777401,-0.54717202822,-0.547252274009,-0.547332514768,-0.547412750496,-0.547492981193,-0.547573206857,-0.547653427487,-0.547733643084,-0.547813853646,-0.547894059173,-0.547974259664,-0.548054455118,-0.548134645534,-0.548214830912,-0.54829501125,-0.548375186549,-0.548455356808,-0.548535522025,-0.5486156822,-0.548695837333,-0.548775987421,-0.548856132466,-0.548936272466,-0.54901640742,-0.549096537327,-0.549176662188,-0.549256782,-0.549336896764,-0.549417006478,-0.549497111143,-0.549577210756,-0.549657305318,-0.549737394827,-0.549817479284,-0.549897558687,-0.549977633035,-0.550057702327,-0.550137766564,-0.550217825744,-0.550297879867,-0.550377928931,-0.550457972937,-0.550538011882,-0.550618045768,-0.550698074592,-0.550778098354,-0.550858117053,-0.55093813069,-0.551018139262,-0.551098142769,-0.551178141211,-0.551258134586,-0.551338122894,-0.551418106135,-0.551498084307,-0.55157805741,-0.551658025443,-0.551737988405,-0.551817946295,-0.551897899114,-0.551977846859,-0.552057789531,-0.552137727129,-0.552217659651,-0.552297587097,-0.552377509467,-0.55245742676,-0.552537338974,-0.55261724611,-0.552697148166,-0.552777045142,-0.552856937036,-0.552936823849,-0.55301670558,-0.553096582227,-0.553176453791,-0.55325632027,-0.553336181663,-0.55341603797,-0.55349588919,-0.553575735323,-0.553655576367,-0.553735412323,-0.553815243188,-0.553895068963,-0.553974889647,-0.554054705238,-0.554134515737,-0.554214321142,-0.554294121454,-0.55437391667,-0.55445370679,-0.554533491814,-0.554613271741,-0.55469304657,-0.554772816301,-0.554852580932,-0.554932340463,-0.555012094893,-0.555091844222,-0.555171588448,-0.555251327571,-0.555331061591,-0.555410790506,-0.555490514316,-0.55557023302,-0.555649946617,-0.555729655107,-0.555809358488,-0.555889056761,-0.555968749924,-0.556048437977,-0.556128120919,-0.556207798749,-0.556287471466,-0.55636713907,-0.55644680156,-0.556526458936,-0.556606111196,-0.556685758339,-0.556765400366,-0.556845037275,-0.556924669066,-0.557004295737,-0.557083917289,-0.55716353372,-0.55724314503,-0.557322751218,-0.557402352283,-0.557481948224,-0.557561539041,-0.557641124733,-0.5577207053,-0.55780028074,-0.557879851053,-0.557959416237,-0.558038976294,-0.558118531221,-0.558198081017,-0.558277625683,-0.558357165218,-0.55843669962,-0.558516228889,-0.558595753024,-0.558675272025,-0.55875478589,-0.55883429462,-0.558913798213,-0.558993296668,-0.559072789986,-0.559152278164,-0.559231761203,-0.559311239102,-0.559390711859,-0.559470179475,-0.559549641948,-0.559629099278,-0.559708551464,-0.559787998505,-0.559867440401,-0.55994687715,-0.560026308753,-0.560105735208,-0.560185156514,-0.560264572672,-0.56034398368,-0.560423389537,-0.560502790242,-0.560582185796,-0.560661576197,-0.560740961445,-0.560820341538,-0.560899716477,-0.560979086259,-0.561058450886,-0.561137810355,-0.561217164666,-0.561296513819,-0.561375857813,-0.561455196646,-0.561534530319,-0.56161385883,-0.561693182179,-0.561772500365,-0.561851813387,-0.561931121245,-0.562010423937,-0.562089721464,-0.562169013824,-0.562248301017,-0.562327583042,-0.562406859898,-0.562486131584,-0.562565398101,-0.562644659446,-0.562723915619,-0.56280316662,-0.562882412448,-0.562961653102,-0.563040888582,-0.563120118886,-0.563199344014,-0.563278563965,-0.563357778739,-0.563436988334,-0.56351619275,-0.563595391987,-0.563674586043,-0.563753774918,-0.563832958611,-0.563912137122,-0.563991310449,-0.564070478592,-0.56414964155,-0.564228799323,-0.564307951909,-0.564387099309,-0.564466241521,-0.564545378544,-0.564624510378,-0.564703637022,-0.564782758476,-0.564861874738,-0.564940985808,-0.565020091685,-0.565099192369,-0.565178287858,-0.565257378153,-0.565336463251,-0.565415543154,-0.565494617859,-0.565573687366,-0.565652751674,-0.565731810784,-0.565810864693,-0.565889913401,-0.565968956908,-0.566047995212,-0.566127028314,-0.566206056212,-0.566285078905,-0.566364096393,-0.566443108675,-0.566522115751,-0.566601117619,-0.56668011428,-0.566759105731,-0.566838091973,-0.566917073004,-0.566996048825,-0.567075019434,-0.567153984831,-0.567232945014,-0.567311899983,-0.567390849738,-0.567469794278,-0.567548733601,-0.567627667708,-0.567706596597,-0.567785520268,-0.56786443872,-0.567943351952,-0.568022259964,-0.568101162755,-0.568180060324,-0.56825895267,-0.568337839793,-0.568416721692,-0.568495598366,-0.568574469815,-0.568653336037,-0.568732197033,-0.568811052801,-0.56888990334,-0.568968748651,-0.569047588731,-0.569126423581,-0.5692052532,-0.569284077586,-0.56936289674,-0.569441710661,-0.569520519347,-0.569599322798,-0.569678121014,-0.569756913993,-0.569835701736,-0.56991448424,-0.569993261506,-0.570072033533,-0.570150800319,-0.570229561865,-0.57030831817,-0.570387069232,-0.570465815052,-0.570544555628,-0.57062329096,-0.570702021046,-0.570780745887,-0.570859465481,-0.570938179828,-0.571016888928,-0.571095592778,-0.571174291379,-0.57125298473,-0.57133167283,-0.571410355679,-0.571489033275,-0.571567705618,-0.571646372708,-0.571725034543,-0.571803691123,-0.571882342447,-0.571960988515,-0.572039629325,-0.572118264877,-0.57219689517,-0.572275520204,-0.572354139977,-0.57243275449,-0.572511363741,-0.572589967729,-0.572668566454,-0.572747159916,-0.572825748113,-0.572904331045,-0.57298290871,-0.573061481109,-0.57314004824,-0.573218610104,-0.573297166698,-0.573375718023,-0.573454264077,-0.57353280486,-0.573611340372,-0.573689870611,-0.573768395577,-0.573846915269,-0.573925429686,-0.574003938827,-0.574082442693,-0.574160941282,-0.574239434593,-0.574317922626,-0.57439640538,-0.574474882854,-0.574553355048,-0.57463182196,-0.574710283591,-0.574788739939,-0.574867191004,-0.574945636784,-0.57502407728,-0.575102512491,-0.575180942415,-0.575259367052,-0.575337786402,-0.575416200463,-0.575494609235,-0.575573012717,-0.575651410909,-0.575729803809,-0.575808191418,-0.575886573734,-0.575964950756,-0.576043322484,-0.576121688917,-0.576200050055,-0.576278405897,-0.576356756441,-0.576435101688,-0.576513441636,-0.576591776285,-0.576670105634,-0.576748429682,-0.57682674843,-0.576905061875,-0.576983370017,-0.577061672856,-0.57713997039,-0.57721826262,-0.577296549544,-0.577374831161,-0.577453107472,-0.577531378474,-0.577609644168,-0.577687904553,-0.577766159628,-0.577844409392,-0.577922653845,-0.578000892985,-0.578079126813,-0.578157355327,-0.578235578527,-0.578313796412,-0.578392008981,-0.578470216233,-0.578548418169,-0.578626614786,-0.578704806085,-0.578782992065,-0.578861172724,-0.578939348063,-0.57901751808,-0.579095682775,-0.579173842148,-0.579251996196,-0.57933014492,-0.579408288319,-0.579486426393,-0.579564559139,-0.579642686559,-0.579720808651,-0.579798925413,-0.579877036847,-0.57995514295,-0.580033243723,-0.580111339164,-0.580189429273,-0.580267514049,-0.580345593491,-0.580423667598,-0.580501736371,-0.580579799808,-0.580657857908,-0.580735910671,-0.580813958096,-0.580892000182,-0.580970036929,-0.581048068335,-0.581126094401,-0.581204115125,-0.581282130507,-0.581360140546,-0.581438145241,-0.581516144591,-0.581594138597,-0.581672127256,-0.581750110569,-0.581828088535,-0.581906061153,-0.581984028421,-0.582061990341,-0.58213994691,-0.582217898128,-0.582295843995,-0.582373784509,-0.58245171967,-0.582529649478,-0.582607573931,-0.582685493029,-0.582763406771,-0.582841315156,-0.582919218184,-0.582997115853,-0.583075008164,-0.583152895116,-0.583230776707,-0.583308652938,-0.583386523806,-0.583464389313,-0.583542249456,-0.583620104236,-0.583697953651,-0.5837757977,-0.583853636384,-0.583931469701,-0.584009297651,-0.584087120233,-0.584164937446,-0.584242749289,-0.584320555762,-0.584398356864,-0.584476152595,-0.584553942953,-0.584631727938,-0.584709507549,-0.584787281786,-0.584865050648,-0.584942814133,-0.585020572242,-0.585098324973,-0.585176072327,-0.585253814301,-0.585331550896,-0.585409282111,-0.585487007945,-0.585564728397,-0.585642443467,-0.585720153154,-0.585797857456,-0.585875556375,-0.585953249908,-0.586030938055,-0.586108620815,-0.586186298189,-0.586263970174,-0.58634163677,-0.586419297976,-0.586496953793,-0.586574604218,-0.586652249252,-0.586729888893,-0.586807523142,-0.586885151996,-0.586962775456,-0.587040393521,-0.58711800619,-0.587195613462,-0.587273215337,-0.587350811813,-0.587428402891,-0.587505988569,-0.587583568848,-0.587661143725,-0.5877387132,-0.587816277273,-0.587893835943,-0.58797138921,-0.588048937072,-0.588126479528,-0.588204016579,-0.588281548223,-0.588359074459,-0.588436595288,-0.588514110708,-0.588591620718,-0.588669125318,-0.588746624507,-0.588824118285,-0.58890160665,-0.588979089602,-0.58905656714,-0.589134039264,-0.589211505973,-0.589288967265,-0.589366423141,-0.5894438736,-0.589521318641,-0.589598758263,-0.589676192466,-0.589753621248,-0.589831044609,-0.589908462549,-0.589985875067,-0.590063282161,-0.590140683832,-0.590218080079,-0.5902954709,-0.590372856295,-0.590450236264,-0.590527610805,-0.590604979919,-0.590682343604,-0.590759701859,-0.590837054684,-0.590914402078,-0.590991744041,-0.591069080572,-0.591146411669,-0.591223737333,-0.591301057562,-0.591378372357,-0.591455681715,-0.591532985637,-0.591610284122,-0.591687577169,-0.591764864777,-0.591842146946,-0.591919423674,-0.591996694962,-0.592073960808,-0.592151221212,-0.592228476174,-0.592305725691,-0.592382969764,-0.592460208393,-0.592537441575,-0.592614669311,-0.5926918916,-0.59276910844,-0.592846319833,-0.592923525776,-0.593000726268,-0.593077921311,-0.593155110901,-0.59323229504,-0.593309473725,-0.593386646958,-0.593463814735,-0.593540977058,-0.593618133925,-0.593695285336,-0.59377243129,-0.593849571785,-0.593926706823,-0.594003836401,-0.594080960519,-0.594158079176,-0.594235192372,-0.594312300106,-0.594389402377,-0.594466499185,-0.594543590528,-0.594620676407,-0.594697756819,-0.594774831766,-0.594851901245,-0.594928965257,-0.5950060238,-0.595083076875,-0.595160124479,-0.595237166612,-0.595314203275,-0.595391234465,-0.595468260183,-0.595545280427,-0.595622295197,-0.595699304492,-0.595776308312,-0.595853306656,-0.595930299522,-0.596007286911,-0.596084268822,-0.596161245253,-0.596238216205,-0.596315181676,-0.596392141666,-0.596469096174,-0.596546045199,-0.596622988741,-0.596699926799,-0.596776859373,-0.59685378646,-0.596930708062,-0.597007624177,-0.597084534804,-0.597161439943,-0.597238339593,-0.597315233754,-0.597392122424,-0.597469005603,-0.59754588329,-0.597622755484,-0.597699622186,-0.597776483393,-0.597853339106,-0.597930189323,-0.598007034045,-0.598083873269,-0.598160706996,-0.598237535225,-0.598314357955,-0.598391175186,-0.598467986916,-0.598544793146,-0.598621593873,-0.598698389098,-0.59877517882,-0.598851963039,-0.598928741752,-0.599005514961,-0.599082282664,-0.59915904486,-0.599235801548,-0.599312552729,-0.599389298401,-0.599466038563,-0.599542773215,-0.599619502356,-0.599696225986,-0.599772944104,-0.599849656708,-0.599926363799,-0.600003065375,-0.600079761437,-0.600156451982,-0.600233137011,-0.600309816523,-0.600386490517,-0.600463158992,-0.600539821948,-0.600616479384,-0.600693131299,-0.600769777693,-0.600846418564,-0.600923053913,-0.600999683738,-0.601076308039,-0.601152926815,-0.601229540065,-0.601306147789,-0.601382749986,-0.601459346655,-0.601535937795,-0.601612523407,-0.601689103488,-0.601765678039,-0.601842247059,-0.601918810546,-0.601995368501,-0.602071920922,-0.60214846781,-0.602225009162,-0.602301544979,-0.60237807526,-0.602454600004,-0.60253111921,-0.602607632878,-0.602684141007,-0.602760643596,-0.602837140644,-0.602913632152,-0.602990118117,-0.60306659854,-0.60314307342,-0.603219542756,-0.603296006547,-0.603372464793,-0.603448917493,-0.603525364646,-0.603601806251,-0.603678242308,-0.603754672817,-0.603831097776,-0.603907517184,-0.603983931042,-0.604060339348,-0.604136742101,-0.604213139302,-0.604289530948,-0.60436591704,-0.604442297577,-0.604518672558,-0.604595041983,-0.60467140585,-0.604747764159,-0.604824116909,-0.6049004641,-0.604976805731,-0.605053141801,-0.605129472309,-0.605205797255,-0.605282116639,-0.605358430459,-0.605434738714,-0.605511041404,-0.605587338529,-0.605663630087,-0.605739916078,-0.605816196502,-0.605892471356,-0.605968740642,-0.606045004357,-0.606121262502,-0.606197515076,-0.606273762077,-0.606350003506,-0.606426239361,-0.606502469643,-0.606578694349,-0.60665491348,-0.606731127035,-0.606807335012,-0.606883537412,-0.606959734234,-0.607035925476,-0.607112111139,-0.607188291222,-0.607264465723,-0.607340634643,-0.607416797979,-0.607492955733,-0.607569107903,-0.607645254488,-0.607721395488,-0.607797530901,-0.607873660728,-0.607949784968,-0.608025903619,-0.608102016682,-0.608178124155,-0.608254226037,-0.608330322329,-0.608406413029,-0.608482498137,-0.608558577652,-0.608634651573,-0.608710719899,-0.608786782631,-0.608862839766,-0.608938891305,-0.609014937247,-0.609090977591,-0.609167012336,-0.609243041482,-0.609319065028,-0.609395082973,-0.609471095317,-0.609547102059,-0.609623103198,-0.609699098733,-0.609775088664,-0.60985107299,-0.60992705171,-0.610003024825,-0.610078992332,-0.610154954231,-0.610230910522,-0.610306861204,-0.610382806276,-0.610458745738,-0.610534679588,-0.610610607827,-0.610686530453,-0.610762447465,-0.610838358864,-0.610914264648,-0.610990164816,-0.611066059369,-0.611141948304,-0.611217831622,-0.611293709322,-0.611369581403,-0.611445447865,-0.611521308706,-0.611597163926,-0.611673013525,-0.611748857501,-0.611824695854,-0.611900528584,-0.611976355689,-0.612052177169,-0.612127993022,-0.61220380325,-0.61227960785,-0.612355406822,-0.612431200166,-0.61250698788,-0.612582769964,-0.612658546417,-0.61273431724,-0.612810082429,-0.612885841986,-0.61296159591,-0.613037344199,-0.613113086854,-0.613188823873,-0.613264555255,-0.613340281001,-0.613416001109,-0.613491715578,-0.613567424408,-0.613643127599,-0.613718825149,-0.613794517058,-0.613870203325,-0.61394588395,-0.614021558931,-0.614097228268,-0.614172891961,-0.614248550008,-0.61432420241,-0.614399849164,-0.614475490271,-0.61455112573,-0.61462675554,-0.614702379701,-0.614777998211,-0.614853611071,-0.614929218279,-0.615004819834,-0.615080415737,-0.615156005986,-0.615231590581,-0.61530716952,-0.615382742804,-0.615458310431,-0.615533872401,-0.615609428713,-0.615684979367,-0.615760524361,-0.615836063696,-0.61591159737,-0.615987125382,-0.616062647733,-0.616138164421,-0.616213675445,-0.616289180805,-0.616364680501,-0.616440174531,-0.616515662895,-0.616591145592,-0.616666622621,-0.616742093982,-0.616817559674,-0.616893019697,-0.616968474049,-0.61704392273,-0.617119365739,-0.617194803076,-0.61727023474,-0.61734566073,-0.617421081045,-0.617496495686,-0.61757190465,-0.617647307938,-0.617722705548,-0.617798097481,-0.617873483735,-0.617948864309,-0.618024239204,-0.618099608417,-0.61817497195,-0.6182503298,-0.618325681967,-0.618401028451,-0.61847636925,-0.618551704365,-0.618627033794,-0.618702357537,-0.618777675593,-0.618852987961,-0.618928294641,-0.619003595631,-0.619078890932,-0.619154180543,-0.619229464462,-0.61930474269,-0.619380015225,-0.619455282067,-0.619530543215,-0.619605798668,-0.619681048426,-0.619756292488,-0.619831530854,-0.619906763522,-0.619981990492,-0.620057211763,-0.620132427335,-0.620207637207,-0.620282841378,-0.620358039847,-0.620433232614,-0.620508419679,-0.620583601039,-0.620658776696,-0.620733946647,-0.620809110893,-0.620884269433,-0.620959422265,-0.62103456939,-0.621109710806,-0.621184846514,-0.621259976511,-0.621335100798,-0.621410219374,-0.621485332238,-0.621560439389,-0.621635540827,-0.621710636551,-0.621785726561,-0.621860810855,-0.621935889433,-0.622010962295,-0.622086029439,-0.622161090865,-0.622236146572,-0.62231119656,-0.622386240827,-0.622461279374,-0.622536312199,-0.622611339302,-0.622686360683,-0.622761376339,-0.622836386271,-0.622911390479,-0.62298638896,-0.623061381715,-0.623136368744,-0.623211350044,-0.623286325616,-0.623361295459,-0.623436259572,-0.623511217955,-0.623586170606,-0.623661117526,-0.623736058713,-0.623810994166,-0.623885923886,-0.623960847871,-0.624035766121,-0.624110678635,-0.624185585412,-0.624260486452,-0.624335381754,-0.624410271317,-0.62448515514,-0.624560033224,-0.624634905566,-0.624709772168,-0.624784633026,-0.624859488142,-0.624934337515,-0.625009181143,-0.625084019026,-0.625158851164,-0.625233677555,-0.625308498199,-0.625383313096,-0.625458122244,-0.625532925643,-0.625607723292,-0.625682515191,-0.625757301339,-0.625832081735,-0.625906856378,-0.625981625268,-0.626056388404,-0.626131145786,-0.626205897412,-0.626280643283,-0.626355383397,-0.626430117753,-0.626504846352,-0.626579569192,-0.626654286272,-0.626728997592,-0.626803703152,-0.62687840295,-0.626953096986,-0.627027785259,-0.627102467769,-0.627177144515,-0.627251815495,-0.62732648071,-0.627401140159,-0.627475793841,-0.627550441755,-0.627625083901,-0.627699720278,-0.627774350885,-0.627848975722,-0.627923594788,-0.627998208082,-0.628072815604,-0.628147417352,-0.628222013327,-0.628296603527,-0.628371187953,-0.628445766602,-0.628520339475,-0.62859490657,-0.628669467888,-0.628744023427,-0.628818573186,-0.628893117166,-0.628967655365,-0.629042187783,-0.629116714419,-0.629191235272,-0.629265750341,-0.629340259627,-0.629414763128,-0.629489260843,-0.629563752772,-0.629638238915,-0.62971271927,-0.629787193837,-0.629861662614,-0.629936125603,-0.630010582801,-0.630085034208,-0.630159479824,-0.630233919647,-0.630308353677,-0.630382781914,-0.630457204356,-0.630531621003,-0.630606031855,-0.63068043691,-0.630754836168,-0.630829229628,-0.63090361729,-0.630977999153,-0.631052375216,-0.631126745478,-0.63120110994,-0.631275468599,-0.631349821456,-0.631424168509,-0.631498509759,-0.631572845204,-0.631647174844,-0.631721498678,-0.631795816705,-0.631870128925,-0.631944435337,-0.63201873594,-0.632093030734,-0.632167319717,-0.63224160289,-0.632315880252,-0.632390151801,-0.632464417538,-0.632538677461,-0.63261293157,-0.632687179864,-0.632761422343,-0.632835659005,-0.632909889851,-0.632984114878,-0.633058334088,-0.633132547479,-0.63320675505,-0.633280956801,-0.633355152731,-0.633429342839,-0.633503527125,-0.633577705588,-0.633651878227,-0.633726045041,-0.633800206031,-0.633874361195,-0.633948510532,-0.634022654043,-0.634096791725,-0.634170923579,-0.634245049604,-0.634319169799,-0.634393284164,-0.634467392697,-0.634541495398,-0.634615592267,-0.634689683303,-0.634763768504,-0.634837847872,-0.634911921403,-0.634985989099,-0.635060050958,-0.63513410698,-0.635208157164,-0.635282201509,-0.635356240015,-0.63543027268,-0.635504299505,-0.635578320489,-0.63565233563,-0.635726344929,-0.635800348384,-0.635874345995,-0.635948337761,-0.636022323682,-0.636096303756,-0.636170277984,-0.636244246364,-0.636318208896,-0.636392165579,-0.636466116412,-0.636540061395,-0.636614000527,-0.636687933808,-0.636761861236,-0.636835782812,-0.636909698533,-0.636983608401,-0.637057512413,-0.637131410569,-0.63720530287,-0.637279189313,-0.637353069898,-0.637426944625,-0.637500813493,-0.637574676501,-0.637648533649,-0.637722384936,-0.63779623036,-0.637870069923,-0.637943903622,-0.638017731457,-0.638091553428,-0.638165369533,-0.638239179773,-0.638312984146,-0.638386782652,-0.63846057529,-0.638534362059,-0.63860814296,-0.63868191799,-0.638755687149,-0.638829450437,-0.638903207854,-0.638976959397,-0.639050705068,-0.639124444864,-0.639198178785,-0.639271906831,-0.639345629002,-0.639419345295,-0.639493055711,-0.639566760249,-0.639640458908,-0.639714151688,-0.639787838587,-0.639861519606,-0.639935194743,-0.640008863998,-0.640082527371,-0.64015618486,-0.640229836464,-0.640303482184,-0.640377122018,-0.640450755966,-0.640524384028,-0.640598006201,-0.640671622487,-0.640745232883,-0.64081883739,-0.640892436007,-0.640966028732,-0.641039615566,-0.641113196508,-0.641186771557,-0.641260340712,-0.641333903973,-0.641407461338,-0.641481012809,-0.641554558382,-0.641628098059,-0.641701631838,-0.641775159719,-0.6418486817,-0.641922197782,-0.641995707963,-0.642069212244,-0.642142710622,-0.642216203098,-0.642289689671,-0.642363170341,-0.642436645105,-0.642510113965,-0.642583576919,-0.642657033966,-0.642730485106,-0.642803930339,-0.642877369662,-0.642950803077,-0.643024230582,-0.643097652176,-0.643171067859,-0.64324447763,-0.643317881489,-0.643391279434,-0.643464671465,-0.643538057582,-0.643611437784,-0.643684812069,-0.643758180438,-0.64383154289,-0.643904899424,-0.643978250039,-0.644051594734,-0.64412493351,-0.644198266365,-0.644271593299,-0.644344914311,-0.6444182294,-0.644491538566,-0.644564841807,-0.644638139125,-0.644711430516,-0.644784715982,-0.644857995521,-0.644931269132,-0.645004536816,-0.64507779857,-0.645151054395,-0.645224304291,-0.645297548255,-0.645370786288,-0.645444018389,-0.645517244557,-0.645590464792,-0.645663679092,-0.645736887458,-0.645810089888,-0.645883286382,-0.645956476939,-0.646029661559,-0.646102840241,-0.646176012983,-0.646249179787,-0.64632234065,-0.646395495572,-0.646468644552,-0.646541787591,-0.646614924687,-0.646688055839,-0.646761181046,-0.646834300309,-0.646907413627,-0.646980520998,-0.647053622422,-0.647126717899,-0.647199807427,-0.647272891007,-0.647345968637,-0.647419040316,-0.647492106045,-0.647565165822,-0.647638219647,-0.647711267519,-0.647784309437,-0.647857345401,-0.64793037541,-0.648003399463,-0.64807641756,-0.6481494297,-0.648222435882,-0.648295436107,-0.648368430372,-0.648441418677,-0.648514401022,-0.648587377406,-0.648660347829,-0.648733312289,-0.648806270786,-0.648879223319,-0.648952169888,-0.649025110492,-0.64909804513,-0.649170973802,-0.649243896507,-0.649316813244,-0.649389724013,-0.649462628813,-0.649535527643,-0.649608420502,-0.649681307391,-0.649754188307,-0.649827063252,-0.649899932223,-0.649972795221,-0.650045652244,-0.650118503292,-0.650191348364,-0.65026418746,-0.650337020579,-0.65040984772,-0.650482668883,-0.650555484067,-0.65062829327,-0.650701096494,-0.650773893736,-0.650846684996,-0.650919470274,-0.650992249569,-0.65106502288,-0.651137790207,-0.651210551549,-0.651283306905,-0.651356056274,-0.651428799656,-0.65150153705,-0.651574268456,-0.651646993873,-0.6517197133,-0.651792426737,-0.651865134182,-0.651937835636,-0.652010531097,-0.652083220565,-0.652155904039,-0.652228581519,-0.652301253003,-0.652373918492,-0.652446577984,-0.65251923148,-0.652591878977,-0.652664520476,-0.652737155975,-0.652809785475,-0.652882408975,-0.652955026473,-0.653027637969,-0.653100243463,-0.653172842954,-0.653245436441,-0.653318023923,-0.6533906054,-0.653463180872,-0.653535750337,-0.653608313795,-0.653680871244,-0.653753422686,-0.653825968118,-0.653898507541,-0.653971040953,-0.654043568353,-0.654116089742,-0.654188605119,-0.654261114482,-0.654333617832,-0.654406115167,-0.654478606487,-0.654551091791,-0.654623571078,-0.654696044349,-0.654768511601,-0.654840972835,-0.65491342805,-0.654985877245,-0.65505832042,-0.655130757573,-0.655203188705,-0.655275613814,-0.6553480329,-0.655420445962,-0.655492853,-0.655565254012,-0.655637648999,-0.655710037959,-0.655782420892,-0.655854797797,-0.655927168674,-0.655999533522,-0.65607189234,-0.656144245127,-0.656216591883,-0.656288932608,-0.6563612673,-0.656433595958,-0.656505918583,-0.656578235174,-0.656650545729,-0.656722850249,-0.656795148732,-0.656867441178,-0.656939727587,-0.657012007956,-0.657084282287,-0.657156550578,-0.657228812829,-0.657301069038,-0.657373319206,-0.657445563331,-0.657517801413,-0.657590033451,-0.657662259445,-0.657734479394,-0.657806693297,-0.657878901154,-0.657951102963,-0.658023298725,-0.658095488439,-0.658167672103,-0.658239849717,-0.658312021282,-0.658384186795,-0.658456346256,-0.658528499665,-0.658600647021,-0.658672788323,-0.658744923571,-0.658817052764,-0.658889175901,-0.658961292982,-0.659033404006,-0.659105508972,-0.659177607879,-0.659249700728,-0.659321787517,-0.659393868246,-0.659465942913,-0.659538011519,-0.659610074063,-0.659682130544,-0.659754180961,-0.659826225313,-0.659898263601,-0.659970295823,-0.660042321979,-0.660114342067,-0.660186356089,-0.660258364041,-0.660330365925,-0.66040236174,-0.660474351484,-0.660546335157,-0.660618312758,-0.660690284287,-0.660762249744,-0.660834209126,-0.660906162435,-0.660978109668,-0.661050050826,-0.661121985908,-0.661193914913,-0.66126583784,-0.661337754689,-0.661409665459,-0.66148157015,-0.66155346876,-0.66162536129,-0.661697247738,-0.661769128104,-0.661841002387,-0.661912870587,-0.661984732702,-0.662056588733,-0.662128438678,-0.662200282537,-0.662272120309,-0.662343951994,-0.66241577759,-0.662487597098,-0.662559410516,-0.662631217845,-0.662703019082,-0.662774814228,-0.662846603282,-0.662918386243,-0.662990163111,-0.663061933885,-0.663133698564,-0.663205457148,-0.663277209635,-0.663348956026,-0.66342069632,-0.663492430515,-0.663564158612,-0.66363588061,-0.663707596507,-0.663779306304,-0.663851009999,-0.663922707593,-0.663994399084,-0.664066084472,-0.664137763755,-0.664209436934,-0.664281104008,-0.664352764976,-0.664424419837,-0.664496068591,-0.664567711237,-0.664639347775,-0.664710978203,-0.664782602522,-0.66485422073,-0.664925832826,-0.664997438811,-0.665069038684,-0.665140632443,-0.665212220088,-0.665283801619,-0.665355377035,-0.665426946335,-0.665498509518,-0.665570066585,-0.665641617533,-0.665713162363,-0.665784701074,-0.665856233666,-0.665927760136,-0.665999280486,-0.666070794714,-0.66614230282,-0.666213804803,-0.666285300662,-0.666356790396,-0.666428274006,-0.66649975149,-0.666571222847,-0.666642688078,-0.666714147181,-0.666785600156,-0.666857047002,-0.666928487718,-0.666999922304,-0.667071350759,-0.667142773082,-0.667214189273,-0.667285599331,-0.667357003256,-0.667428401047,-0.667499792702,-0.667571178223,-0.667642557607,-0.667713930854,-0.667785297963,-0.667856658935,-0.667928013768,-0.667999362461,-0.668070705014,-0.668142041427,-0.668213371698,-0.668284695826,-0.668356013813,-0.668427325655,-0.668498631354,-0.668569930908,-0.668641224317,-0.66871251158,-0.668783792696,-0.668855067665,-0.668926336485,-0.668997599157,-0.66906885568,-0.669140106053,-0.669211350276,-0.669282588347,-0.669353820266,-0.669425046032,-0.669496265646,-0.669567479105,-0.66963868641,-0.66970988756,-0.669781082554,-0.669852271392,-0.669923454072,-0.669994630595,-0.670065800959,-0.670136965164,-0.670208123209,-0.670279275094,-0.670350420818,-0.67042156038,-0.67049269378,-0.670563821017,-0.67063494209,-0.670706056998,-0.670777165742,-0.67084826832,-0.670919364732,-0.670990454977,-0.671061539054,-0.671132616963,-0.671203688703,-0.671274754274,-0.671345813674,-0.671416866903,-0.671487913961,-0.671558954847,-0.67162998956,-0.671701018099,-0.671772040465,-0.671843056655,-0.67191406667,-0.671985070509,-0.672056068172,-0.672127059656,-0.672198044963,-0.672269024091,-0.67233999704,-0.672410963809,-0.672481924397,-0.672552878804,-0.672623827029,-0.672694769071,-0.67276570493,-0.672836634605,-0.672907558095,-0.6729784754,-0.67304938652,-0.673120291453,-0.673191190198,-0.673262082756,-0.673332969125,-0.673403849306,-0.673474723296,-0.673545591096,-0.673616452705,-0.673687308122,-0.673758157347,-0.673829000379,-0.673899837217,-0.673970667861,-0.674041492309,-0.674112310562,-0.674183122619,-0.674253928479,-0.674324728141,-0.674395521605,-0.67446630887,-0.674537089936,-0.674607864801,-0.674678633466,-0.674749395929,-0.674820152189,-0.674890902247,-0.674961646102,-0.675032383752,-0.675103115198,-0.675173840439,-0.675244559473,-0.6753152723,-0.675385978921,-0.675456679333,-0.675527373536,-0.675598061531,-0.675668743315,-0.675739418889,-0.675810088251,-0.675880751402,-0.67595140834,-0.676022059064,-0.676092703575,-0.676163341872,-0.676233973953,-0.676304599819,-0.676375219468,-0.6764458329,-0.676516440114,-0.67658704111,-0.676657635886,-0.676728224443,-0.67679880678,-0.676869382896,-0.67693995279,-0.677010516462,-0.677081073911,-0.677151625136,-0.677222170137,-0.677292708913,-0.677363241464,-0.677433767789,-0.677504287886,-0.677574801756,-0.677645309398,-0.677715810812,-0.677786305996,-0.677856794949,-0.677927277673,-0.677997754164,-0.678068224424,-0.678138688451,-0.678209146245,-0.678279597805,-0.67835004313,-0.67842048222,-0.678490915074,-0.678561341691,-0.678631762072,-0.678702176214,-0.678772584118,-0.678842985783,-0.678913381208,-0.678983770393,-0.679054153337,-0.679124530038,-0.679194900498,-0.679265264714,-0.679335622687,-0.679405974416,-0.679476319899,-0.679546659137,-0.679616992129,-0.679687318874,-0.679757639371,-0.67982795362,-0.679898261621,-0.679968563371,-0.680038858872,-0.680109148122,-0.68017943112,-0.680249707867,-0.680319978361,-0.680390242601,-0.680460500587,-0.680530752319,-0.680600997795,-0.680671237016,-0.68074146998,-0.680811696686,-0.680881917135,-0.680952131326,-0.681022339257,-0.681092540928,-0.681162736339,-0.681232925489,-0.681303108377,-0.681373285002,-0.681443455365,-0.681513619464,-0.681583777298,-0.681653928868,-0.681724074172,-0.681794213209,-0.68186434598,-0.681934472483,-0.682004592718,-0.682074706685,-0.682144814381,-0.682214915808,-0.682285010964,-0.682355099848,-0.682425182461,-0.6824952588,-0.682565328866,-0.682635392659,-0.682705450176,-0.682775501419,-0.682845546385,-0.682915585075,-0.682985617488,-0.683055643623,-0.683125663479,-0.683195677056,-0.683265684353,-0.68333568537,-0.683405680106,-0.68347566856,-0.683545650732,-0.683615626621,-0.683685596226,-0.683755559547,-0.683825516583,-0.683895467333,-0.683965411797,-0.684035349975,-0.684105281864,-0.684175207466,-0.684245126779,-0.684315039802,-0.684384946535,-0.684454846978,-0.684524741129,-0.684594628988,-0.684664510555,-0.684734385828,-0.684804254808,-0.684874117492,-0.684943973882,-0.685013823976,-0.685083667773,-0.685153505273,-0.685223336475,-0.685293161379,-0.685362979984,-0.685432792289,-0.685502598293,-0.685572397997,-0.685642191399,-0.685711978499,-0.685781759296,-0.685851533789,-0.685921301978,-0.685991063863,-0.686060819441,-0.686130568714,-0.68620031168,-0.686270048339,-0.686339778689,-0.686409502731,-0.686479220463,-0.686548931886,-0.686618636998,-0.686688335798,-0.686758028287,-0.686827714463,-0.686897394326,-0.686967067875,-0.68703673511,-0.68710639603,-0.687176050634,-0.687245698921,-0.687315340892,-0.687384976545,-0.687454605879,-0.687524228895,-0.687593845591,-0.687663455967,-0.687733060022,-0.687802657755,-0.687872249167,-0.687941834255,-0.68801141302,-0.688080985462,-0.688150551578,-0.688220111369,-0.688289664834,-0.688359211973,-0.688428752784,-0.688498287267,-0.688567815422,-0.688637337248,-0.688706852744,-0.688776361909,-0.688845864744,-0.688915361246,-0.688984851417,-0.689054335254,-0.689123812757,-0.689193283927,-0.689262748761,-0.68933220726,-0.689401659423,-0.689471105249,-0.689540544737,-0.689609977887,-0.689679404699,-0.689748825171,-0.689818239303,-0.689887647095,-0.689957048545,-0.690026443653,-0.690095832419,-0.690165214841,-0.69023459092,-0.690303960654,-0.690373324043,-0.690442681086,-0.690512031783,-0.690581376132,-0.690650714135,-0.690720045788,-0.690789371093,-0.690858690048,-0.690928002653,-0.690997308908,-0.69106660881,-0.691135902361,-0.691205189558,-0.691274470403,-0.691343744893,-0.691413013029,-0.691482274809,-0.691551530233,-0.691620779301,-0.691690022012,-0.691759258364,-0.691828488358,-0.691897711993,-0.691966929269,-0.692036140183,-0.692105344737,-0.692174542929,-0.692243734759,-0.692312920226,-0.692382099329,-0.692451272068,-0.692520438442,-0.692589598451,-0.692658752093,-0.692727899369,-0.692797040277,-0.692866174817,-0.692935302989,-0.693004424791,-0.693073540224,-0.693142649285,-0.693211751976,-0.693280848295,-0.693349938241,-0.693419021814,-0.693488099013,-0.693557169838,-0.693626234288,-0.693695292362,-0.69376434406,-0.693833389381,-0.693902428324,-0.69397146089,-0.694040487076,-0.694109506883,-0.69417852031,-0.694247527356,-0.69431652802,-0.694385522303,-0.694454510203,-0.69452349172,-0.694592466853,-0.694661435601,-0.694730397964,-0.694799353942,-0.694868303532,-0.694937246736,-0.695006183552,-0.69507511398,-0.695144038019,-0.695212955668,-0.695281866927,-0.695350771795,-0.695419670271,-0.695488562356,-0.695557448047,-0.695626327345,-0.695695200249,-0.695764066759,-0.695832926873,-0.695901780591,-0.695970627913,-0.696039468837,-0.696108303363,-0.696177131491,-0.69624595322,-0.69631476855,-0.696383577478,-0.696452380006,-0.696521176132,-0.696589965856,-0.696658749177,-0.696727526095,-0.696796296608,-0.696865060716,-0.696933818419,-0.697002569716,-0.697071314607,-0.69714005309,-0.697208785165,-0.697277510831,-0.697346230088,-0.697414942935,-0.697483649372,-0.697552349398,-0.697621043012,-0.697689730213,-0.697758411002,-0.697827085377,-0.697895753337,-0.697964414883,-0.698033070013,-0.698101718727,-0.698170361024,-0.698238996904,-0.698307626366,-0.698376249409,-0.698444866033,-0.698513476236,-0.69858208002,-0.698650677381,-0.698719268322,-0.698787852839,-0.698856430934,-0.698925002604,-0.698993567851,-0.699062126672,-0.699130679068,-0.699199225037,-0.69926776458,-0.699336297695,-0.699404824382,-0.69947334464,-0.699541858469,-0.699610365868,-0.699678866836,-0.699747361373,-0.699815849477,-0.69988433115,-0.699952806389,-0.700021275194,-0.700089737565,-0.700158193501,-0.700226643001,-0.700295086064,-0.700363522691,-0.70043195288,-0.700500376631,-0.700568793943,-0.700637204816,-0.700705609248,-0.70077400724,-0.700842398791,-0.700910783899,-0.700979162565,-0.701047534787,-0.701115900566,-0.7011842599,-0.701252612789,-0.701320959232,-0.701389299229,-0.701457632779,-0.701525959881,-0.701594280535,-0.70166259474,-0.701730902496,-0.701799203801,-0.701867498656,-0.701935787059,-0.70200406901,-0.702072344508,-0.702140613553,-0.702208876144,-0.702277132281,-0.702345381962,-0.702413625188,-0.702481861957,-0.702550092269,-0.702618316124,-0.70268653352,-0.702754744457,-0.702822948935,-0.702891146952,-0.702959338509,-0.703027523604,-0.703095702237,-0.703163874407,-0.703232040114,-0.703300199358,-0.703368352136,-0.703436498449,-0.703504638297,-0.703572771678,-0.703640898592,-0.703709019038,-0.703777133016,-0.703845240524,-0.703913341564,-0.703981436133,-0.704049524231,-0.704117605858,-0.704185681012,-0.704253749694,-0.704321811903,-0.704389867637,-0.704457916897,-0.704525959682,-0.704593995991,-0.704662025823,-0.704730049179,-0.704798066056,-0.704866076456,-0.704934080376,-0.705002077817,-0.705070068777,-0.705138053257,-0.705206031255,-0.705274002771,-0.705341967804,-0.705409926354,-0.70547787842,-0.705545824001,-0.705613763097,-0.705681695708,-0.705749621831,-0.705817541468,-0.705885454617,-0.705953361278,-0.706021261449,-0.706089155131,-0.706157042323,-0.706224923024,-0.706292797234,-0.706360664951,-0.706428526176,-0.706496380907,-0.706564229145,-0.706632070888,-0.706699906135,-0.706767734887,-0.706835557142,-0.706903372901,-0.706971182161,-0.707038984923,-0.707106781187,-0.70717457095,-0.707242354214,-0.707310130976,-0.707377901238,-0.707445664997,-0.707513422253,-0.707581173006,-0.707648917256,-0.707716655,-0.70778438624,-0.707852110974,-0.707919829201,-0.707987540921,-0.708055246134,-0.708122944838,-0.708190637033,-0.708258322719,-0.708326001895,-0.70839367456,-0.708461340713,-0.708529000354,-0.708596653483,-0.708664300099,-0.7087319402,-0.708799573788,-0.70886720086,-0.708934821416,-0.709002435456,-0.709070042978,-0.709137643984,-0.709205238471,-0.709272826439,-0.709340407888,-0.709407982816,-0.709475551224,-0.70954311311,-0.709610668475,-0.709678217317,-0.709745759636,-0.70981329543,-0.709880824701,-0.709948347446,-0.710015863666,-0.710083373359,-0.710150876526,-0.710218373164,-0.710285863275,-0.710353346857,-0.71042082391,-0.710488294432,-0.710555758424,-0.710623215884,-0.710690666813,-0.710758111209,-0.710825549072,-0.710892980401,-0.710960405196,-0.711027823456,-0.71109523518,-0.711162640368,-0.711230039019,-0.711297431133,-0.711364816708,-0.711432195745,-0.711499568243,-0.7115669342,-0.711634293617,-0.711701646493,-0.711768992827,-0.711836332619,-0.711903665867,-0.711970992572,-0.712038312733,-0.712105626348,-0.712172933418,-0.712240233942,-0.71230752792,-0.71237481535,-0.712442096231,-0.712509370565,-0.712576638349,-0.712643899583,-0.712711154267,-0.712778402399,-0.71284564398,-0.712912879009,-0.712980107484,-0.713047329406,-0.713114544774,-0.713181753587,-0.713248955845,-0.713316151547,-0.713383340692,-0.71345052328,-0.713517699309,-0.713584868781,-0.713652031693,-0.713719188046,-0.713786337838,-0.713853481069,-0.713920617738,-0.713987747846,-0.71405487139,-0.714121988372,-0.714189098789,-0.714256202641,-0.714323299928,-0.714390390649,-0.714457474804,-0.714524552392,-0.714591623411,-0.714658687863,-0.714725745745,-0.714792797058,-0.714859841801,-0.714926879972,-0.714993911573,-0.715060936601,-0.715127955056,-0.715194966939,-0.715261972247,-0.715328970981,-0.715395963139,-0.715462948722,-0.715529927729,-0.715596900158,-0.71566386601,-0.715730825284,-0.715797777979,-0.715864724094,-0.715931663629,-0.715998596584,-0.716065522957,-0.716132442748,-0.716199355957,-0.716266262583,-0.716333162625,-0.716400056082,-0.716466942955,-0.716533823242,-0.716600696943,-0.716667564056,-0.716734424583,-0.716801278521,-0.716868125871,-0.716934966631,-0.717001800802,-0.717068628381,-0.71713544937,-0.717202263767,-0.717269071572,-0.717335872784,-0.717402667402,-0.717469455425,-0.717536236854,-0.717603011688,-0.717669779926,-0.717736541566,-0.71780329661,-0.717870045056,-0.717936786903,-0.718003522151,-0.718070250799,-0.718136972847,-0.718203688294,-0.71827039714,-0.718337099383,-0.718403795023,-0.718470484061,-0.718537166494,-0.718603842322,-0.718670511545,-0.718737174162,-0.718803830173,-0.718870479577,-0.718937122373,-0.71900375856,-0.719070388139,-0.719137011108,-0.719203627467,-0.719270237216,-0.719336840353,-0.719403436878,-0.71947002679,-0.719536610089,-0.719603186774,-0.719669756845,-0.719736320301,-0.719802877141,-0.719869427365,-0.719935970972,-0.720002507961,-0.720069038333,-0.720135562085,-0.720202079219,-0.720268589732,-0.720335093625,-0.720401590897,-0.720468081546,-0.720534565574,-0.720601042978,-0.720667513759,-0.720733977916,-0.720800435448,-0.720866886354,-0.720933330634,-0.720999768288,-0.721066199315,-0.721132623713,-0.721199041483,-0.721265452624,-0.721331857135,-0.721398255016,-0.721464646266,-0.721531030884,-0.72159740887,-0.721663780224,-0.721730144944,-0.72179650303,-0.721862854481,-0.721929199298,-0.721995537478,-0.722061869022,-0.722128193929,-0.722194512199,-0.72226082383,-0.722327128822,-0.722393427175,-0.722459718887,-0.722526003959,-0.72259228239,-0.722658554179,-0.722724819325,-0.722791077828,-0.722857329687,-0.722923574902,-0.722989813472,-0.723056045397,-0.723122270675,-0.723188489307,-0.723254701291,-0.723320906627,-0.723387105314,-0.723453297353,-0.723519482741,-0.723585661479,-0.723651833566,-0.723717999001,-0.723784157784,-0.723850309915,-0.723916455391,-0.723982594214,-0.724048726382,-0.724114851895,-0.724180970751,-0.724247082951,-0.724313188495,-0.72437928738,-0.724445379607,-0.724511465175,-0.724577544084,-0.724643616332,-0.724709681919,-0.724775740846,-0.72484179311,-0.724907838712,-0.72497387765,-0.725039909925,-0.725105935535,-0.72517195448,-0.72523796676,-0.725303972373,-0.72536997132,-0.725435963599,-0.72550194921,-0.725567928152,-0.725633900425,-0.725699866028,-0.725765824961,-0.725831777223,-0.725897722813,-0.72596366173,-0.726029593975,-0.726095519546,-0.726161438444,-0.726227350666,-0.726293256213,-0.726359155084,-0.726425047279,-0.726490932796,-0.726556811636,-0.726622683798,-0.72668854928,-0.726754408083,-0.726820260206,-0.726886105648,-0.726951944408,-0.727017776487,-0.727083601883,-0.727149420595,-0.727215232624,-0.727281037969,-0.727346836628,-0.727412628602,-0.72747841389,-0.727544192491,-0.727609964404,-0.72767572963,-0.727741488167,-0.727807240014,-0.727872985172,-0.727938723639,-0.728004455415,-0.7280701805,-0.728135898892,-0.728201610591,-0.728267315597,-0.728333013909,-0.728398705526,-0.728464390448,-0.728530068674,-0.728595740204,-0.728661405036,-0.728727063171,-0.728792714607,-0.728858359345,-0.728923997383,-0.728989628721,-0.729055253358,-0.729120871293,-0.729186482527,-0.729252087059,-0.729317684887,-0.729383276012,-0.729448860432,-0.729514438147,-0.729580009157,-0.72964557346,-0.729711131057,-0.729776681947,-0.729842226128,-0.729907763601,-0.729973294365,-0.730038818419,-0.730104335763,-0.730169846395,-0.730235350317,-0.730300847526,-0.730366338022,-0.730431821805,-0.730497298874,-0.730562769228,-0.730628232867,-0.73069368979,-0.730759139997,-0.730824583487,-0.73089002026,-0.730955450314,-0.731020873649,-0.731086290265,-0.731151700162,-0.731217103337,-0.731282499791,-0.731347889524,-0.731413272534,-0.731478648821,-0.731544018385,-0.731609381224,-0.731674737338,-0.731740086728,-0.731805429391,-0.731870765327,-0.731936094537,-0.732001417018,-0.732066732771,-0.732132041795,-0.73219734409,-0.732262639654,-0.732327928488,-0.73239321059,-0.73245848596,-0.732523754598,-0.732589016502,-0.732654271672,-0.732719520109,-0.73278476181,-0.732849996775,-0.732915225005,-0.732980446497,-0.733045661252,-0.733110869269,-0.733176070548,-0.733241265087,-0.733306452887,-0.733371633946,-0.733436808264,-0.733501975841,-0.733567136675,-0.733632290766,-0.733697438115,-0.733762578719,-0.733827712578,-0.733892839693,-0.733957960061,-0.734023073684,-0.734088180559,-0.734153280687,-0.734218374066,-0.734283460697,-0.734348540578,-0.73441361371,-0.73447868009,-0.73454373972,-0.734608792598,-0.734673838723,-0.734738878096,-0.734803910715,-0.73486893658,-0.73493395569,-0.734998968044,-0.735063973643,-0.735128972485,-0.73519396457,-0.735258949898,-0.735323928467,-0.735388900277,-0.735453865327,-0.735518823618,-0.735583775147,-0.735648719916,-0.735713657922,-0.735778589166,-0.735843513646,-0.735908431363,-0.735973342316,-0.736038246504,-0.736103143926,-0.736168034582,-0.736232918472,-0.736297795594,-0.736362665948,-0.736427529534,-0.736492386351,-0.736557236398,-0.736622079675,-0.736686916181,-0.736751745915,-0.736816568877,-0.736881385067,-0.736946194484,-0.737010997126,-0.737075792994,-0.737140582087,-0.737205364405,-0.737270139946,-0.73733490871,-0.737399670697,-0.737464425906,-0.737529174337,-0.737593915988,-0.737658650859,-0.73772337895,-0.73778810026,-0.737852814788,-0.737917522535,-0.737982223498,-0.738046917678,-0.738111605074,-0.738176285686,-0.738240959512,-0.738305626552,-0.738370286807,-0.738434940274,-0.738499586954,-0.738564226845,-0.738628859948,-0.738693486262,-0.738758105785,-0.738822718519,-0.738887324461,-0.738951923611,-0.739016515969,-0.739081101534,-0.739145680306,-0.739210252284,-0.739274817467,-0.739339375854,-0.739403927446,-0.739468472242,-0.73953301024,-0.739597541441,-0.739662065843,-0.739726583447,-0.739791094251,-0.739855598256,-0.73992009546,-0.739984585862,-0.740049069463,-0.740113546261,-0.740178016257,-0.740242479449,-0.740306935836,-0.740371385419,-0.740435828197,-0.740500264169,-0.740564693334,-0.740629115692,-0.740693531242,-0.740757939984,-0.740822341918,-0.740886737041,-0.740951125355,-0.741015506858,-0.74107988155,-0.74114424943,-0.741208610497,-0.741272964751,-0.741337312192,-0.741401652819,-0.741465986631,-0.741530313627,-0.741594633807,-0.741658947171,-0.741723253718,-0.741787553447,-0.741851846357,-0.741916132449,-0.741980411721,-0.742044684173,-0.742108949804,-0.742173208614,-0.742237460602,-0.742301705767,-0.74236594411,-0.742430175629,-0.742494400323,-0.742558618193,-0.742622829237,-0.742687033455,-0.742751230847,-0.742815421411,-0.742879605148,-0.742943782056,-0.743007952135,-0.743072115385,-0.743136271804,-0.743200421393,-0.74326456415,-0.743328700076,-0.743392829169,-0.743456951429,-0.743521066855,-0.743585175447,-0.743649277203,-0.743713372125,-0.74377746021,-0.743841541459,-0.743905615871,-0.743969683445,-0.74403374418,-0.744097798076,-0.744161845133,-0.74422588535,-0.744289918725,-0.74435394526,-0.744417964952,-0.744481977802,-0.744545983809,-0.744609982972,-0.744673975291,-0.744737960765,-0.744801939394,-0.744865911176,-0.744929876112,-0.744993834201,-0.745057785441,-0.745121729834,-0.745185667377,-0.745249598071,-0.745313521914,-0.745377438907,-0.745441349049,-0.745505252338,-0.745569148775,-0.745633038359,-0.745696921089,-0.745760796965,-0.745824665986,-0.745888528152,-0.745952383461,-0.746016231914,-0.74608007351,-0.746143908248,-0.746207736127,-0.746271557148,-0.746335371309,-0.74639917861,-0.74646297905,-0.746526772628,-0.746590559345,-0.746654339199,-0.746718112191,-0.746781878318,-0.746845637581,-0.74690938998,-0.746973135513,-0.74703687418,-0.74710060598,-0.747164330913,-0.747228048979,-0.747291760176,-0.747355464504,-0.747419161963,-0.747482852551,-0.747546536269,-0.747610213115,-0.74767388309,-0.747737546192,-0.747801202421,-0.747864851777,-0.747928494258,-0.747992129864,-0.748055758595,-0.74811938045,-0.748182995429,-0.74824660353,-0.748310204754,-0.748373799099,-0.748437386566,-0.748500967153,-0.74856454086,-0.748628107686,-0.748691667631,-0.748755220695,-0.748818766875,-0.748882306173,-0.748945838588,-0.749009364118,-0.749072882763,-0.749136394523,-0.749199899398,-0.749263397385,-0.749326888486,-0.749390372699,-0.749453850024,-0.74951732046,-0.749580784006,-0.749644240663,-0.749707690429,-0.749771133304,-0.749834569287,-0.749897998378,-0.749961420576,-0.75002483588,-0.750088244291,-0.750151645806,-0.750215040427,-0.750278428151,-0.75034180898,-0.750405182911,-0.750468549945,-0.75053191008,-0.750595263317,-0.750658609655,-0.750721949092,-0.750785281629,-0.750848607265,-0.750911926,-0.750975237832,-0.751038542762,-0.751101840788,-0.75116513191,-0.751228416127,-0.75129169344,-0.751354963846,-0.751418227347,-0.75148148394,-0.751544733626,-0.751607976404,-0.751671212274,-0.751734441234,-0.751797663284,-0.751860878424,-0.751924086654,-0.751987287971,-0.752050482377,-0.75211366987,-0.752176850449,-0.752240024115,-0.752303190866,-0.752366350702,-0.752429503623,-0.752492649627,-0.752555788715,-0.752618920886,-0.752682046138,-0.752745164472,-0.752808275887,-0.752871380382,-0.752934477957,-0.752997568612,-0.753060652344,-0.753123729155,-0.753186799044,-0.753249862009,-0.75331291805,-0.753375967167,-0.75343900936,-0.753502044627,-0.753565072968,-0.753628094382,-0.753691108869,-0.753754116428,-0.753817117059,-0.753880110761,-0.753943097533,-0.754006077376,-0.754069050288,-0.754132016268,-0.754194975317,-0.754257927433,-0.754320872617,-0.754383810866,-0.754446742182,-0.754509666563,-0.754572584008,-0.754635494518,-0.754698398092,-0.754761294728,-0.754824184426,-0.754887067187,-0.754949943009,-0.755012811891,-0.755075673834,-0.755138528836,-0.755201376897,-0.755264218016,-0.755327052193,-0.755389879427,-0.755452699718,-0.755515513065,-0.755578319467,-0.755641118924,-0.755703911436,-0.755766697001,-0.75582947562,-0.755892247291,-0.755955012014,-0.756017769788,-0.756080520614,-0.756143264489,-0.756206001414,-0.756268731389,-0.756331454412,-0.756394170483,-0.756456879601,-0.756519581766,-0.756582276977,-0.756644965234,-0.756707646536,-0.756770320883,-0.756832988273,-0.756895648707,-0.756958302184,-0.757020948703,-0.757083588263,-0.757146220865,-0.757208846506,-0.757271465188,-0.75733407691,-0.757396681669,-0.757459279468,-0.757521870303,-0.757584454176,-0.757647031085,-0.75770960103,-0.757772164011,-0.757834720026,-0.757897269075,-0.757959811158,-0.758022346273,-0.758084874422,-0.758147395602,-0.758209909813,-0.758272417055,-0.758334917327,-0.758397410629,-0.75845989696,-0.758522376319,-0.758584848705,-0.75864731412,-0.75870977256,-0.758772224027,-0.75883466852,-0.758897106037,-0.758959536579,-0.759021960145,-0.759084376733,-0.759146786345,-0.759209188978,-0.759271584633,-0.759333973309,-0.759396355006,-0.759458729722,-0.759521097457,-0.759583458211,-0.759645811984,-0.759708158773,-0.75977049858,-0.759832831403,-0.759895157241,-0.759957476095,-0.760019787964,-0.760082092846,-0.760144390742,-0.760206681651,-0.760268965573,-0.760331242506,-0.76039351245,-0.760455775405,-0.76051803137,-0.760580280344,-0.760642522328,-0.760704757319,-0.760766985319,-0.760829206325,-0.760891420339,-0.760953627358,-0.761015827383,-0.761078020412,-0.761140206446,-0.761202385484,-0.761264557525,-0.761326722569,-0.761388880615,-0.761451031662,-0.76151317571,-0.761575312758,-0.761637442806,-0.761699565854,-0.761761681899,-0.761823790943,-0.761885892985,-0.761947988023,-0.762010076058,-0.762072157089,-0.762134231114,-0.762196298135,-0.762258358149,-0.762320411157,-0.762382457158,-0.762444496151,-0.762506528136,-0.762568553112,-0.762630571078,-0.762692582035,-0.762754585981,-0.762816582917,-0.76287857284,-0.762940555752,-0.76300253165,-0.763064500535,-0.763126462407,-0.763188417263,-0.763250365105,-0.763312305931,-0.763374239741,-0.763436166534,-0.76349808631,-0.763559999068,-0.763621904807,-0.763683803528,-0.763745695228,-0.763807579909,-0.763869457569,-0.763931328207,-0.763993191824,-0.764055048418,-0.764116897989,-0.764178740536,-0.764240576059,-0.764302404558,-0.764364226031,-0.764426040479,-0.7644878479,-0.764549648293,-0.76461144166,-0.764673227998,-0.764735007308,-0.764796779588,-0.764858544838,-0.764920303058,-0.764982054247,-0.765043798405,-0.76510553553,-0.765167265622,-0.765228988682,-0.765290704707,-0.765352413699,-0.765414115655,-0.765475810575,-0.76553749846,-0.765599179308,-0.765660853119,-0.765722519892,-0.765784179626,-0.765845832322,-0.765907477978,-0.765969116594,-0.76603074817,-0.766092372704,-0.766153990196,-0.766215600647,-0.766277204054,-0.766338800418,-0.766400389738,-0.766461972013,-0.766523547243,-0.766585115427,-0.766646676565,-0.766708230657,-0.7667697777,-0.766831317696,-0.766892850643,-0.766954376542,-0.76701589539,-0.767077407188,-0.767138911936,-0.767200409632,-0.767261900276,-0.767323383868,-0.767384860406,-0.767446329891,-0.767507792322,-0.767569247698,-0.767630696018,-0.767692137283,-0.767753571491,-0.767814998642,-0.767876418736,-0.767937831772,-0.767999237748,-0.768060636666,-0.768122028523,-0.768183413321,-0.768244791057,-0.768306161731,-0.768367525344,-0.768428881894,-0.768490231381,-0.768551573804,-0.768612909162,-0.768674237456,-0.768735558684,-0.768796872846,-0.768858179941,-0.76891947997,-0.76898077293,-0.769042058822,-0.769103337646,-0.769164609399,-0.769225874083,-0.769287131697,-0.769348382239,-0.76940962571,-0.769470862108,-0.769532091433,-0.769593313685,-0.769654528864,-0.769715736967,-0.769776937996,-0.769838131949,-0.769899318826,-0.769960498626,-0.770021671348,-0.770082836993,-0.77014399556,-0.770205147047,-0.770266291455,-0.770327428783,-0.77038855903,-0.770449682196,-0.77051079828,-0.770571907281,-0.7706330092,-0.770694104035,-0.770755191786,-0.770816272453,-0.770877346034,-0.77093841253,-0.770999471939,-0.771060524262,-0.771121569497,-0.771182607644,-0.771243638702,-0.771304662672,-0.771365679552,-0.771426689341,-0.77148769204,-0.771548687647,-0.771609676163,-0.771670657586,-0.771731631916,-0.771792599152,-0.771853559294,-0.771914512342,-0.771975458294,-0.77203639715,-0.77209732891,-0.772158253573,-0.772219171139,-0.772280081606,-0.772340984975,-0.772401881245,-0.772462770415,-0.772523652484,-0.772584527453,-0.77264539532,-0.772706256086,-0.772767109748,-0.772827956308,-0.772888795764,-0.772949628116,-0.773010453363,-0.773071271504,-0.77313208254,-0.773192886469,-0.773253683291,-0.773314473006,-0.773375255613,-0.77343603111,-0.773496799499,-0.773557560778,-0.773618314946,-0.773679062003,-0.773739801949,-0.773800534783,-0.773861260504,-0.773921979112,-0.773982690607,-0.774043394987,-0.774104092252,-0.774164782402,-0.774225465436,-0.774286141353,-0.774346810154,-0.774407471836,-0.774468126401,-0.774528773846,-0.774589414173,-0.774650047379,-0.774710673466,-0.774771292431,-0.774831904274,-0.774892508996,-0.774953106595,-0.775013697071,-0.775074280423,-0.77513485665,-0.775195425753,-0.77525598773,-0.775316542582,-0.775377090306,-0.775437630904,-0.775498164374,-0.775558690716,-0.775619209929,-0.775679722013,-0.775740226967,-0.77580072479,-0.775861215483,-0.775921699043,-0.775982175472,-0.776042644768,-0.776103106931,-0.77616356196,-0.776224009855,-0.776284450615,-0.776344884239,-0.776405310728,-0.77646573008,-0.776526142295,-0.776586547372,-0.776646945311,-0.776707336111,-0.776767719772,-0.776828096293,-0.776888465673,-0.776948827913,-0.777009183011,-0.777069530967,-0.77712987178,-0.77719020545,-0.777250531976,-0.777310851358,-0.777371163595,-0.777431468687,-0.777491766632,-0.777552057431,-0.777612341083,-0.777672617588,-0.777732886944,-0.777793149151,-0.777853404209,-0.777913652118,-0.777973892876,-0.778034126482,-0.778094352938,-0.778154572241,-0.778214784392,-0.778274989389,-0.778335187233,-0.778395377922,-0.778455561457,-0.778515737836,-0.778575907059,-0.778636069126,-0.778696224036,-0.778756371788,-0.778816512381,-0.778876645817,-0.778936772093,-0.778996891209,-0.779057003164,-0.779117107959,-0.779177205593,-0.779237296064,-0.779297379373,-0.779357455518,-0.7794175245,-0.779477586318,-0.779537640971,-0.779597688458,-0.77965772878,-0.779717761935,-0.779777787923,-0.779837806744,-0.779897818396,-0.77995782288,-0.780017820195,-0.78007781034,-0.780137793314,-0.780197769118,-0.78025773775,-0.780317699211,-0.780377653499,-0.780437600613,-0.780497540555,-0.780557473322,-0.780617398914,-0.780677317331,-0.780737228572,-0.780797132637,-0.780857029525,-0.780916919235,-0.780976801768,-0.781036677122,-0.781096545296,-0.781156406291,-0.781216260106,-0.78127610674,-0.781335946193,-0.781395778464,-0.781455603552,-0.781515421458,-0.78157523218,-0.781635035718,-0.781694832071,-0.781754621239,-0.781814403222,-0.781874178018,-0.781933945627,-0.781993706049,-0.782053459283,-0.782113205328,-0.782172944185,-0.782232675852,-0.782292400329,-0.782352117615,-0.78241182771,-0.782471530613,-0.782531226324,-0.782590914842,-0.782650596167,-0.782710270297,-0.782769937233,-0.782829596975,-0.78288924952,-0.782948894869,-0.783008533022,-0.783068163977,-0.783127787735,-0.783187404294,-0.783247013655,-0.783306615816,-0.783366210777,-0.783425798537,-0.783485379096,-0.783544952454,-0.78360451861,-0.783664077562,-0.783723629312,-0.783783173858,-0.783842711199,-0.783902241336,-0.783961764266,-0.784021279991,-0.78408078851,-0.784140289821,-0.784199783925,-0.78425927082,-0.784318750507,-0.784378222984,-0.784437688252,-0.784497146309,-0.784556597156,-0.78461604079,-0.784675477213,-0.784734906423,-0.78479432842,-0.784853743204,-0.784913150773,-0.784972551128,-0.785031944267,-0.78509133019,-0.785150708897,-0.785210080387,-0.78526944466,-0.785328801714,-0.78538815155,-0.785447494167,-0.785506829564,-0.785566157741,-0.785625478697,-0.785684792432,-0.785744098945,-0.785803398236,-0.785862690303,-0.785921975148,-0.785981252768,-0.786040523163,-0.786099786334,-0.786159042279,-0.786218290997,-0.786277532489,-0.786336766754,-0.786395993791,-0.786455213599,-0.786514426179,-0.786573631529,-0.786632829648,-0.786692020538,-0.786751204196,-0.786810380623,-0.786869549817,-0.786928711779,-0.786987866507,-0.787047014002,-0.787106154262,-0.787165287288,-0.787224413078,-0.787283531631,-0.787342642949,-0.787401747029,-0.787460843872,-0.787519933476,-0.787579015842,-0.787638090968,-0.787697158855,-0.787756219501,-0.787815272907,-0.787874319071,-0.787933357993,-0.787992389673,-0.788051414109,-0.788110431302,-0.788169441251,-0.788228443955,-0.788287439414,-0.788346427627,-0.788405408593,-0.788464382313,-0.788523348786,-0.78858230801,-0.788641259986,-0.788700204714,-0.788759142191,-0.788818072418,-0.788876995395,-0.788935911121,-0.788994819595,-0.789053720816,-0.789112614785,-0.7891715015,-0.789230380962,-0.789289253169,-0.789348118121,-0.789406975818,-0.789465826258,-0.789524669442,-0.789583505369,-0.789642334038,-0.789701155449,-0.789759969601,-0.789818776494,-0.789877576127,-0.789936368499,-0.789995153611,-0.790053931461,-0.790112702049,-0.790171465375,-0.790230221437,-0.790288970236,-0.790347711771,-0.790406446041,-0.790465173046,-0.790523892785,-0.790582605257,-0.790641310463,-0.790700008402,-0.790758699072,-0.790817382474,-0.790876058607,-0.790934727471,-0.790993389064,-0.791052043386,-0.791110690438,-0.791169330218,-0.791227962725,-0.79128658796,-0.791345205921,-0.791403816609,-0.791462420022,-0.79152101616,-0.791579605023,-0.791638186609,-0.791696760919,-0.791755327952,-0.791813887707,-0.791872440184,-0.791930985383,-0.791989523302,-0.792048053941,-0.7921065773,-0.792165093378,-0.792223602175,-0.79228210369,-0.792340597922,-0.792399084871,-0.792457564537,-0.792516036918,-0.792574502015,-0.792632959827,-0.792691410353,-0.792749853593,-0.792808289546,-0.792866718212,-0.79292513959,-0.792983553679,-0.793041960479,-0.79310035999,-0.793158752211,-0.793217137142,-0.793275514781,-0.793333885129,-0.793392248185,-0.793450603948,-0.793508952417,-0.793567293593,-0.793625627475,-0.793683954062,-0.793742273353,-0.793800585349,-0.793858890048,-0.79391718745,-0.793975477554,-0.794033760361,-0.794092035869,-0.794150304078,-0.794208564987,-0.794266818596,-0.794325064904,-0.794383303911,-0.794441535616,-0.794499760019,-0.794557977119,-0.794616186915,-0.794674389408,-0.794732584596,-0.794790772479,-0.794848953057,-0.794907126328,-0.794965292293,-0.795023450951,-0.795081602301,-0.795139746343,-0.795197883076,-0.7952560125,-0.795314134613,-0.795372249417,-0.79543035691,-0.795488457091,-0.79554654996,-0.795604635517,-0.795662713761,-0.795720784691,-0.795778848307,-0.795836904609,-0.795894953595,-0.795952995266,-0.79601102962,-0.796069056658,-0.796127076378,-0.796185088781,-0.796243093865,-0.79630109163,-0.796359082076,-0.796417065202,-0.796475041008,-0.796533009492,-0.796590970655,-0.796648924495,-0.796706871013,-0.796764810208,-0.79682274208,-0.796880666627,-0.796938583849,-0.796996493746,-0.797054396317,-0.797112291562,-0.79717017948,-0.79722806007,-0.797285933333,-0.797343799267,-0.797401657872,-0.797459509147,-0.797517353093,-0.797575189708,-0.797633018991,-0.797690840943,-0.797748655563,-0.79780646285,-0.797864262804,-0.797922055424,-0.79797984071,-0.798037618661,-0.798095389276,-0.798153152556,-0.798210908499,-0.798268657105,-0.798326398373,-0.798384132304,-0.798441858896,-0.798499578149,-0.798557290062,-0.798614994635,-0.798672691867,-0.798730381758,-0.798788064308,-0.798845739515,-0.798903407379,-0.7989610679,-0.799018721077,-0.799076366909,-0.799134005397,-0.799191636539,-0.799249260335,-0.799306876785,-0.799364485888,-0.799422087643,-0.79947968205,-0.799537269108,-0.799594848817,-0.799652421176,-0.799709986186,-0.799767543844,-0.799825094151,-0.799882637106,-0.799940172709,-0.799997700959,-0.800055221856,-0.800112735399,-0.800170241587,-0.80022774042,-0.800285231898,-0.80034271602,-0.800400192785,-0.800457662193,-0.800515124243,-0.800572578935,-0.800630026269,-0.800687466243,-0.800744898857,-0.800802324112,-0.800859742005,-0.800917152537,-0.800974555708,-0.801031951515,-0.80108933996,-0.801146721042,-0.80120409476,-0.801261461113,-0.801318820101,-0.801376171723,-0.80143351598,-0.801490852869,-0.801548182392,-0.801605504547,-0.801662819334,-0.801720126752,-0.801777426801,-0.80183471948,-0.801892004789,-0.801949282727,-0.802006553293,-0.802063816488,-0.802121072311,-0.80217832076,-0.802235561836,-0.802292795538,-0.802350021866,-0.802407240818,-0.802464452395,-0.802521656596,-0.80257885342,-0.802636042867,-0.802693224937,-0.802750399628,-0.802807566941,-0.802864726874,-0.802921879428,-0.802979024601,-0.803036162393,-0.803093292804,-0.803150415834,-0.803207531481,-0.803264639745,-0.803321740625,-0.803378834122,-0.803435920234,-0.803492998961,-0.803550070303,-0.803607134258,-0.803664190827,-0.803721240009,-0.803778281803,-0.803835316209,-0.803892343226,-0.803949362854,-0.804006375093,-0.804063379941,-0.804120377398,-0.804177367464,-0.804234350139,-0.80429132542,-0.804348293309,-0.804405253805,-0.804462206907,-0.804519152614,-0.804576090926,-0.804633021843,-0.804689945364,-0.804746861488,-0.804803770215,-0.804860671545,-0.804917565476,-0.804974452009,-0.805031331143,-0.805088202877,-0.805145067211,-0.805201924144,-0.805258773676,-0.805315615806,-0.805372450534,-0.805429277859,-0.80548609778,-0.805542910298,-0.805599715412,-0.80565651312,-0.805713303423,-0.805770086321,-0.805826861811,-0.805883629895,-0.805940390571,-0.805997143839,-0.806053889699,-0.80611062815,-0.806167359191,-0.806224082821,-0.806280799042,-0.806337507851,-0.806394209248,-0.806450903233,-0.806507589806,-0.806564268965,-0.80662094071,-0.806677605041,-0.806734261958,-0.806790911459,-0.806847553544,-0.806904188213,-0.806960815464,-0.807017435299,-0.807074047716,-0.807130652714,-0.807187250293,-0.807243840452,-0.807300423192,-0.807356998511,-0.807413566409,-0.807470126886,-0.80752667994,-0.807583225572,-0.80763976378,-0.807696294565,-0.807752817926,-0.807809333862,-0.807865842373,-0.807922343458,-0.807978837117,-0.80803532335,-0.808091802154,-0.808148273531,-0.80820473748,-0.808261194,-0.808317643091,-0.808374084751,-0.808430518982,-0.808486945781,-0.808543365149,-0.808599777085,-0.808656181588,-0.808712578659,-0.808768968296,-0.808825350499,-0.808881725267,-0.8089380926,-0.808994452498,-0.80905080496,-0.809107149985,-0.809163487572,-0.809219817723,-0.809276140435,-0.809332455708,-0.809388763542,-0.809445063937,-0.809501356891,-0.809557642404,-0.809613920476,-0.809670191106,-0.809726454294,-0.80978271004,-0.809838958341,-0.809895199199,-0.809951432613,-0.810007658582,-0.810063877105,-0.810120088182,-0.810176291813,-0.810232487997,-0.810288676733,-0.810344858022,-0.810401031862,-0.810457198253,-0.810513357194,-0.810569508685,-0.810625652726,-0.810681789315,-0.810737918453,-0.810794040139,-0.810850154372,-0.810906261152,-0.810962360479,-0.811018452351,-0.811074536768,-0.811130613731,-0.811186683237,-0.811242745287,-0.811298799881,-0.811354847017,-0.811410886695,-0.811466918916,-0.811522943677,-0.811578960979,-0.811634970821,-0.811690973202,-0.811746968123,-0.811802955583,-0.81185893558,-0.811914908115,-0.811970873187,-0.812026830796,-0.81208278094,-0.81213872362,-0.812194658836,-0.812250586585,-0.812306506869,-0.812362419686,-0.812418325036,-0.812474222918,-0.812530113333,-0.812585996278,-0.812641871755,-0.812697739762,-0.812753600299,-0.812809453365,-0.81286529896,-0.812921137083,-0.812976967734,-0.813032790913,-0.813088606618,-0.813144414849,-0.813200215606,-0.813256008889,-0.813311794696,-0.813367573027,-0.813423343883,-0.813479107261,-0.813534863162,-0.813590611585,-0.81364635253,-0.813702085995,-0.813757811982,-0.813813530489,-0.813869241515,-0.81392494506,-0.813980641124,-0.814036329706,-0.814092010805,-0.814147684422,-0.814203350555,-0.814259009204,-0.814314660369,-0.814370304048,-0.814425940242,-0.81448156895,-0.814537190172,-0.814592803906,-0.814648410153,-0.814704008912,-0.814759600182,-0.814815183964,-0.814870760255,-0.814926329057,-0.814981890367,-0.815037444187,-0.815092990515,-0.815148529351,-0.815204060694,-0.815259584544,-0.8153151009,-0.815370609762,-0.81542611113,-0.815481605002,-0.815537091378,-0.815592570259,-0.815648041642,-0.815703505528,-0.815758961917,-0.815814410807,-0.815869852198,-0.81592528609,-0.815980712482,-0.816036131374,-0.816091542765,-0.816146946655,-0.816202343043,-0.816257731928,-0.816313113311,-0.81636848719,-0.816423853566,-0.816479212437,-0.816534563803,-0.816589907664,-0.816645244018,-0.816700572867,-0.816755894208,-0.816811208042,-0.816866514368,-0.816921813186,-0.816977104494,-0.817032388294,-0.817087664583,-0.817142933361,-0.817198194629,-0.817253448385,-0.817308694629,-0.817363933361,-0.817419164579,-0.817474388284,-0.817529604475,-0.817584813152,-0.817640014313,-0.817695207959,-0.817750394088,-0.817805572701,-0.817860743797,-0.817915907376,-0.817971063436,-0.818026211978,-0.818081353,-0.818136486503,-0.818191612486,-0.818246730948,-0.818301841889,-0.818356945309,-0.818412041206,-0.81846712958,-0.818522210432,-0.818577283759,-0.818632349563,-0.818687407842,-0.818742458595,-0.818797501823,-0.818852537525,-0.8189075657,-0.818962586347,-0.819017599467,-0.819072605059,-0.819127603122,-0.819182593656,-0.81923757666,-0.819292552134,-0.819347520077,-0.819402480489,-0.819457433369,-0.819512378716,-0.819567316531,-0.819622246813,-0.819677169561,-0.819732084774,-0.819786992453,-0.819841892596,-0.819896785204,-0.819951670275,-0.82000654781,-0.820061417807,-0.820116280266,-0.820171135187,-0.820225982569,-0.820280822412,-0.820335654715,-0.820390479478,-0.8204452967,-0.82050010638,-0.820554908519,-0.820609703115,-0.820664490168,-0.820719269678,-0.820774041644,-0.820828806066,-0.820883562943,-0.820938312274,-0.82099305406,-0.821047788299,-0.821102514991,-0.821157234136,-0.821211945733,-0.821266649781,-0.821321346281,-0.821376035231,-0.821430716632,-0.821485390482,-0.821540056781,-0.821594715528,-0.821649366724,-0.821704010367,-0.821758646457,-0.821813274994,-0.821867895977,-0.821922509406,-0.821977115279,-0.822031713597,-0.82208630436,-0.822140887565,-0.822195463214,-0.822250031306,-0.822304591839,-0.822359144814,-0.82241369023,-0.822468228087,-0.822522758383,-0.822577281119,-0.822631796295,-0.822686303908,-0.82274080396,-0.822795296449,-0.822849781376,-0.822904258739,-0.822958728538,-0.823013190772,-0.823067645442,-0.823122092546,-0.823176532084,-0.823230964056,-0.82328538846,-0.823339805298,-0.823394214567,-0.823448616268,-0.8235030104,-0.823557396962,-0.823611775954,-0.823666147376,-0.823720511227,-0.823774867507,-0.823829216215,-0.82388355735,-0.823937890912,-0.8239922169,-0.824046535315,-0.824100846156,-0.824155149421,-0.824209445111,-0.824263733225,-0.824318013762,-0.824372286723,-0.824426552106,-0.824480809911,-0.824535060137,-0.824589302785,-0.824643537853,-0.824697765342,-0.824751985249,-0.824806197576,-0.824860402322,-0.824914599485,-0.824968789066,-0.825022971065,-0.825077145479,-0.82513131231,-0.825185471556,-0.825239623218,-0.825293767294,-0.825347903784,-0.825402032688,-0.825456154004,-0.825510267734,-0.825564373875,-0.825618472428,-0.825672563392,-0.825726646767,-0.825780722552,-0.825834790746,-0.82588885135,-0.825942904362,-0.825996949782,-0.82605098761,-0.826105017845,-0.826159040486,-0.826213055534,-0.826267062987,-0.826321062846,-0.826375055109,-0.826429039776,-0.826483016847,-0.826536986321,-0.826590948197,-0.826644902476,-0.826698849157,-0.826752788238,-0.826806719721,-0.826860643603,-0.826914559885,-0.826968468567,-0.827022369647,-0.827076263125,-0.827130149001,-0.827184027274,-0.827237897943,-0.827291761009,-0.827345616471,-0.827399464328,-0.82745330458,-0.827507137226,-0.827560962265,-0.827614779698,-0.827668589524,-0.827722391741,-0.827776186351,-0.827829973352,-0.827883752743,-0.827937524525,-0.827991288697,-0.828045045258,-0.828098794207,-0.828152535545,-0.828206269271,-0.828259995384,-0.828313713884,-0.828367424771,-0.828421128043,-0.8284748237,-0.828528511742,-0.828582192169,-0.828635864979,-0.828689530173,-0.82874318775,-0.828796837709,-0.82885048005,-0.828904114772,-0.828957741875,-0.829011361359,-0.829064973222,-0.829118577465,-0.829172174087,-0.829225763087,-0.829279344465,-0.829332918221,-0.829386484353,-0.829440042862,-0.829493593747,-0.829547137008,-0.829600672643,-0.829654200653,-0.829707721037,-0.829761233795,-0.829814738925,-0.829868236428,-0.829921726303,-0.829975208549,-0.830028683167,-0.830082150155,-0.830135609513,-0.830189061241,-0.830242505338,-0.830295941803,-0.830349370637,-0.830402791838,-0.830456205406,-0.830509611341,-0.830563009642,-0.830616400309,-0.830669783341,-0.830723158737,-0.830776526498,-0.830829886622,-0.83088323911,-0.83093658396,-0.830989921172,-0.831043250746,-0.831096572682,-0.831149886978,-0.831203193634,-0.83125649265,-0.831309784026,-0.83136306776,-0.831416343852,-0.831469612303,-0.83152287311,-0.831576126274,-0.831629371795,-0.831682609672,-0.831735839904,-0.83178906249,-0.831842277432,-0.831895484727,-0.831948684375,-0.832001876376,-0.83205506073,-0.832108237436,-0.832161406493,-0.832214567901,-0.832267721659,-0.832320867768,-0.832374006226,-0.832427137033,-0.832480260188,-0.832533375692,-0.832586483543,-0.832639583741,-0.832692676286,-0.832745761176,-0.832798838413,-0.832851907994,-0.83290496992,-0.83295802419,-0.833011070804,-0.833064109761,-0.83311714106,-0.833170164702,-0.833223180685,-0.83327618901,-0.833329189675,-0.833382182681,-0.833435168026,-0.83348814571,-0.833541115733,-0.833594078095,-0.833647032794,-0.833699979831,-0.833752919204,-0.833805850914,-0.833858774959,-0.83391169134,-0.833964600056,-0.834017501106,-0.83407039449,-0.834123280207,-0.834176158258,-0.83422902864,-0.834281891355,-0.834334746401,-0.834387593778,-0.834440433486,-0.834493265524,-0.834546089891,-0.834598906587,-0.834651715612,-0.834704516965,-0.834757310645,-0.834810096652,-0.834862874986,-0.834915645647,-0.834968408632,-0.835021163943,-0.835073911579,-0.835126651539,-0.835179383822,-0.835232108429,-0.835284825358,-0.83533753461,-0.835390236183,-0.835442930078,-0.835495616294,-0.835548294829,-0.835600965685,-0.83565362886,-0.835706284354,-0.835758932166,-0.835811572296,-0.835864204743,-0.835916829508,-0.835969446589,-0.836022055985,-0.836074657698,-0.836127251725,-0.836179838066,-0.836232416722,-0.836284987691,-0.836337550974,-0.836390106568,-0.836442654475,-0.836495194694,-0.836547727224,-0.836600252064,-0.836652769214,-0.836705278674,-0.836757780444,-0.836810274522,-0.836862760908,-0.836915239602,-0.836967710603,-0.837020173911,-0.837072629525,-0.837125077445,-0.837177517671,-0.837229950201,-0.837282375035,-0.837334792174,-0.837387201616,-0.83743960336,-0.837491997408,-0.837544383757,-0.837596762407,-0.837649133359,-0.837701496611,-0.837753852163,-0.837806200015,-0.837858540166,-0.837910872615,-0.837963197363,-0.838015514408,-0.83806782375,-0.838120125389,-0.838172419324,-0.838224705555,-0.838276984081,-0.838329254902,-0.838381518017,-0.838433773425,-0.838486021127,-0.838538261122,-0.838590493409,-0.838642717989,-0.838694934859,-0.83874714402,-0.838799345472,-0.838851539214,-0.838903725245,-0.838955903565,-0.839008074174,-0.83906023707,-0.839112392254,-0.839164539726,-0.839216679484,-0.839268811527,-0.839320935857,-0.839373052472,-0.839425161371,-0.839477262555,-0.839529356022,-0.839581441772,-0.839633519805,-0.839685590121,-0.839737652718,-0.839789707597,-0.839841754756,-0.839893794196,-0.839945825916,-0.839997849915,-0.840049866193,-0.840101874749,-0.840153875583,-0.840205868695,-0.840257854084,-0.84030983175,-0.840361801691,-0.840413763908,-0.8404657184,-0.840517665167,-0.840569604208,-0.840621535522,-0.84067345911,-0.84072537497,-0.840777283103,-0.840829183508,-0.840881076183,-0.84093296113,-0.840984838347,-0.841036707833,-0.841088569589,-0.841140423614,-0.841192269908,-0.841244108469,-0.841295939298,-0.841347762394,-0.841399577756,-0.841451385384,-0.841503185278,-0.841554977437,-0.84160676186,-0.841658538548,-0.841710307499,-0.841762068714,-0.841813822191,-0.841865567931,-0.841917305932,-0.841969036194,-0.842020758718,-0.842072473501,-0.842124180545,-0.842175879848,-0.842227571409,-0.842279255229,-0.842330931308,-0.842382599643,-0.842434260236,-0.842485913085,-0.84253755819,-0.842589195551,-0.842640825167,-0.842692447037,-0.842744061162,-0.84279566754,-0.842847266172,-0.842898857056,-0.842950440192,-0.84300201558,-0.84305358322,-0.84310514311,-0.843156695251,-0.843208239642,-0.843259776282,-0.843311305171,-0.843362826308,-0.843414339694,-0.843465845327,-0.843517343207,-0.843568833333,-0.843620315706,-0.843671790324,-0.843723257188,-0.843774716296,-0.843826167648,-0.843877611244,-0.843929047084,-0.843980475166,-0.84403189549,-0.844083308056,-0.844134712864,-0.844186109912,-0.844237499201,-0.84428888073,-0.844340254499,-0.844391620506,-0.844442978752,-0.844494329236,-0.844545671957,-0.844597006916,-0.844648334111,-0.844699653543,-0.84475096521,-0.844802269113,-0.84485356525,-0.844904853621,-0.844956134226,-0.845007407065,-0.845058672137,-0.845109929441,-0.845161178976,-0.845212420744,-0.845263654742,-0.845314880971,-0.84536609943,-0.845417310118,-0.845468513036,-0.845519708182,-0.845570895556,-0.845622075158,-0.845673246987,-0.845724411043,-0.845775567326,-0.845826715834,-0.845877856567,-0.845928989525,-0.845980114708,-0.846031232115,-0.846082341745,-0.846133443598,-0.846184537674,-0.846235623971,-0.846286702491,-0.846337773231,-0.846388836192,-0.846439891373,-0.846490938774,-0.846541978394,-0.846593010233,-0.84664403429,-0.846695050565,-0.846746059058,-0.846797059767,-0.846848052693,-0.846899037834,-0.846950015192,-0.847000984764,-0.84705194655,-0.847102900551,-0.847153846766,-0.847204785193,-0.847255715833,-0.847306638686,-0.84735755375,-0.847408461025,-0.847459360512,-0.847510252208,-0.847561136115,-0.847612012231,-0.847662880555,-0.847713741089,-0.84776459383,-0.847815438779,-0.847866275935,-0.847917105297,-0.847967926866,-0.84801874064,-0.848069546619,-0.848120344803,-0.848171135192,-0.848221917784,-0.848272692579,-0.848323459578,-0.848374218779,-0.848424970181,-0.848475713785,-0.848526449591,-0.848577177596,-0.848627897802,-0.848678610207,-0.848729314812,-0.848780011615,-0.848830700616,-0.848881381815,-0.848932055212,-0.848982720805,-0.849033378594,-0.84908402858,-0.84913467076,-0.849185305136,-0.849235931706,-0.84928655047,-0.849337161428,-0.849387764579,-0.849438359922,-0.849488947457,-0.849539527185,-0.849590099103,-0.849640663212,-0.849691219512,-0.849741768001,-0.849792308679,-0.849842841547,-0.849893366603,-0.849943883847,-0.849994393278,-0.850044894897,-0.850095388702,-0.850145874693,-0.850196352869,-0.850246823231,-0.850297285778,-0.850347740509,-0.850398187424,-0.850448626522,-0.850499057802,-0.850549481266,-0.850599896911,-0.850650304737,-0.850700704745,-0.850751096933,-0.850801481302,-0.850851857849,-0.850902226576,-0.850952587482,-0.851002940566,-0.851053285828,-0.851103623267,-0.851153952883,-0.851204274675,-0.851254588643,-0.851304894787,-0.851355193105,-0.851405483598,-0.851455766266,-0.851506041106,-0.85155630812,-0.851606567307,-0.851656818666,-0.851707062196,-0.851757297898,-0.851807525771,-0.851857745814,-0.851907958027,-0.851958162409,-0.85200835896,-0.85205854768,-0.852108728568,-0.852158901624,-0.852209066847,-0.852259224236,-0.852309373792,-0.852359515513,-0.8524096494,-0.852459775451,-0.852509893667,-0.852560004047,-0.85261010659,-0.852660201296,-0.852710288165,-0.852760367196,-0.852810438388,-0.852860501742,-0.852910557256,-0.85296060493,-0.853010644765,-0.853060676758,-0.853110700911,-0.853160717221,-0.85321072569,-0.853260726316,-0.8533107191,-0.853360704039,-0.853410681135,-0.853460650387,-0.853510611793,-0.853560565355,-0.85361051107,-0.85366044894,-0.853710378962,-0.853760301138,-0.853810215466,-0.853860121946,-0.853910020578,-0.85395991136,-0.854009794293,-0.854059669377,-0.85410953661,-0.854159395992,-0.854209247523,-0.854259091202,-0.854308927029,-0.854358755003,-0.854408575125,-0.854458387392,-0.854508191806,-0.854557988365,-0.85460777707,-0.854657557919,-0.854707330912,-0.854757096049,-0.854806853329,-0.854856602752,-0.854906344317,-0.854956078025,-0.855005803873,-0.855055521863,-0.855105231993,-0.855154934263,-0.855204628673,-0.855254315222,-0.855303993909,-0.855353664735,-0.855403327699,-0.8554529828,-0.855502630037,-0.855552269412,-0.855601900922,-0.855651524567,-0.855701140348,-0.855750748263,-0.855800348313,-0.855849940496,-0.855899524812,-0.855949101261,-0.855998669842,-0.856048230555,-0.8560977834,-0.856147328375,-0.856196865481,-0.856246394717,-0.856295916083,-0.856345429577,-0.8563949352,-0.856444432952,-0.856493922831,-0.856543404838,-0.856592878971,-0.856642345231,-0.856691803616,-0.856741254128,-0.856790696764,-0.856840131525,-0.856889558409,-0.856938977418,-0.85698838855,-0.857037791804,-0.857087187181,-0.857136574679,-0.857185954299,-0.85723532604,-0.857284689901,-0.857334045883,-0.857383393984,-0.857432734204,-0.857482066543,-0.857531390999,-0.857580707574,-0.857630016266,-0.857679317075,-0.85772861,-0.857777895041,-0.857827172198,-0.85787644147,-0.857925702856,-0.857974956357,-0.858024201971,-0.858073439698,-0.858122669538,-0.858171891491,-0.858221105555,-0.858270311731,-0.858319510017,-0.858368700414,-0.858417882922,-0.858467057538,-0.858516224264,-0.858565383099,-0.858614534042,-0.858663677093,-0.858712812251,-0.858761939516,-0.858811058887,-0.858860170365,-0.858909273948,-0.858958369636,-0.859007457429,-0.859056537325,-0.859105609326,-0.85915467343,-0.859203729637,-0.859252777946,-0.859301818357,-0.85935085087,-0.859399875483,-0.859448892197,-0.859497901012,-0.859546901926,-0.859595894939,-0.859644880051,-0.859693857261,-0.859742826569,-0.859791787975,-0.859840741477,-0.859889687077,-0.859938624772,-0.859987554563,-0.860036476449,-0.860085390429,-0.860134296504,-0.860183194673,-0.860232084935,-0.860280967291,-0.860329841738,-0.860378708278,-0.860427566909,-0.860476417632,-0.860525260445,-0.860574095348,-0.860622922341,-0.860671741424,-0.860720552595,-0.860769355855,-0.860818151202,-0.860866938638,-0.86091571816,-0.860964489769,-0.861013253464,-0.861062009245,-0.861110757112,-0.861159497063,-0.861208229099,-0.861256953218,-0.861305669421,-0.861354377707,-0.861403078076,-0.861451770527,-0.861500455059,-0.861549131673,-0.861597800368,-0.861646461143,-0.861695113998,-0.861743758933,-0.861792395946,-0.861841025038,-0.861889646209,-0.861938259456,-0.861986864782,-0.862035462184,-0.862084051662,-0.862132633216,-0.862181206846,-0.862229772551,-0.86227833033,-0.862326880184,-0.862375422111,-0.862423956111,-0.862472482184,-0.86252100033,-0.862569510547,-0.862618012836,-0.862666507196,-0.862714993626,-0.862763472126,-0.862811942697,-0.862860405336,-0.862908860044,-0.862957306821,-0.863005745665,-0.863054176577,-0.863102599555,-0.863151014601,-0.863199421712,-0.863247820889,-0.863296212131,-0.863344595439,-0.86339297081,-0.863441338245,-0.863489697744,-0.863538049305,-0.86358639293,-0.863634728616,-0.863683056364,-0.863731376173,-0.863779688043,-0.863827991973,-0.863876287963,-0.863924576013,-0.863972856122,-0.864021128289,-0.864069392514,-0.864117648797,-0.864165897137,-0.864214137534,-0.864262369987,-0.864310594496,-0.864358811061,-0.86440701968,-0.864455220354,-0.864503413082,-0.864551597864,-0.864599774699,-0.864647943587,-0.864696104527,-0.864744257519,-0.864792402563,-0.864840539658,-0.864888668803,-0.864936789998,-0.864984903243,-0.865033008537,-0.86508110588,-0.865129195272,-0.865177276711,-0.865225350198,-0.865273415731,-0.865321473312,-0.865369522938,-0.865417564611,-0.865465598328,-0.865513624091,-0.865561641897,-0.865609651748,-0.865657653642,-0.865705647579,-0.865753633559,-0.865801611581,-0.865849581645,-0.86589754375,-0.865945497896,-0.865993444082,-0.866041382309,-0.866089312575,-0.86613723488,-0.866185149223,-0.866233055605,-0.866280954025,-0.866328844481,-0.866376726975,-0.866424601505,-0.866472468072,-0.866520326674,-0.866568177311,-0.866616019982,-0.866663854688,-0.866711681428,-0.866759500201,-0.866807311007,-0.866855113845,-0.866902908716,-0.866950695618,-0.866998474552,-0.867046245516,-0.86709400851,-0.867141763534,-0.867189510588,-0.867237249671,-0.867284980782,-0.867332703921,-0.867380419088,-0.867428126282,-0.867475825503,-0.867523516751,-0.867571200024,-0.867618875323,-0.867666542646,-0.867714201995,-0.867761853367,-0.867809496763,-0.867857132183,-0.867904759625,-0.86795237909,-0.867999990577,-0.868047594085,-0.868095189614,-0.868142777164,-0.868190356734,-0.868237928324,-0.868285491934,-0.868333047562,-0.868380595209,-0.868428134873,-0.868475666556,-0.868523190255,-0.868570705971,-0.868618213704,-0.868665713452,-0.868713205216,-0.868760688995,-0.868808164788,-0.868855632595,-0.868903092416,-0.868950544251,-0.868997988098,-0.869045423957,-0.869092851828,-0.869140271711,-0.869187683605,-0.86923508751,-0.869282483424,-0.869329871349,-0.869377251282,-0.869424623225,-0.869471987176,-0.869519343135,-0.869566691101,-0.869614031075,-0.869661363056,-0.869708687042,-0.869756003035,-0.869803311033,-0.869850611035,-0.869897903043,-0.869945187054,-0.869992463069,-0.870039731088,-0.870086991109,-0.870134243132,-0.870181487157,-0.870228723184,-0.870275951212,-0.870323171241,-0.870370383269,-0.870417587298,-0.870464783325,-0.870511971352,-0.870559151377,-0.8706063234,-0.870653487421,-0.870700643438,-0.870747791453,-0.870794931464,-0.87084206347,-0.870889187472,-0.870936303469,-0.87098341146,-0.871030511446,-0.871077603425,-0.871124687398,-0.871171763363,-0.871218831321,-0.87126589127,-0.871312943212,-0.871359987144,-0.871407023067,-0.87145405098,-0.871501070883,-0.871548082775,-0.871595086656,-0.871642082526,-0.871689070383,-0.871736050229,-0.871783022061,-0.87182998588,-0.871876941686,-0.871923889477,-0.871970829254,-0.872017761016,-0.872064684763,-0.872111600493,-0.872158508208,-0.872205407906,-0.872252299586,-0.872299183249,-0.872346058894,-0.872392926521,-0.872439786129,-0.872486637717,-0.872533481286,-0.872580316835,-0.872627144363,-0.87267396387,-0.872720775356,-0.87276757882,-0.872814374261,-0.87286116168,-0.872907941076,-0.872954712448,-0.873001475796,-0.87304823112,-0.873094978418,-0.873141717692,-0.873188448939,-0.873235172161,-0.873281887356,-0.873328594524,-0.873375293664,-0.873421984777,-0.873468667861,-0.873515342917,-0.873562009943,-0.87360866894,-0.873655319907,-0.873701962843,-0.873748597749,-0.873795224623,-0.873841843465,-0.873888454276,-0.873935057053,-0.873981651798,-0.874028238509,-0.874074817186,-0.874121387829,-0.874167950438,-0.874214505011,-0.874261051548,-0.87430759005,-0.874354120515,-0.874400642943,-0.874447157334,-0.874493663687,-0.874540162002,-0.874586652278,-0.874633134516,-0.874679608713,-0.874726074872,-0.874772532989,-0.874818983066,-0.874865425102,-0.874911859097,-0.874958285049,-0.875004702959,-0.875051112826,-0.87509751465,-0.87514390843,-0.875190294165,-0.875236671857,-0.875283041503,-0.875329403104,-0.875375756659,-0.875422102168,-0.87546843963,-0.875514769045,-0.875561090413,-0.875607403732,-0.875653709003,-0.875700006226,-0.875746295399,-0.875792576522,-0.875838849595,-0.875885114618,-0.87593137159,-0.87597762051,-0.876023861379,-0.876070094195,-0.876116318959,-0.87616253567,-0.876208744327,-0.87625494493,-0.876301137479,-0.876347321973,-0.876393498412,-0.876439666796,-0.876485827123,-0.876531979394,-0.876578123608,-0.876624259764,-0.876670387863,-0.876716507904,-0.876762619886,-0.876808723809,-0.876854819673,-0.876900907477,-0.87694698722,-0.876993058903,-0.877039122525,-0.877085178085,-0.877131225583,-0.877177265019,-0.877223296392,-0.877269319701,-0.877315334947,-0.877361342129,-0.877407341246,-0.877453332299,-0.877499315286,-0.877545290207,-0.877591257062,-0.877637215851,-0.877683166572,-0.877729109226,-0.877775043812,-0.87782097033,-0.877866888779,-0.877912799159,-0.877958701469,-0.878004595709,-0.878050481879,-0.878096359978,-0.878142230005,-0.878188091961,-0.878233945845,-0.878279791657,-0.878325629395,-0.87837145906,-0.878417280651,-0.878463094168,-0.87850889961,-0.878554696977,-0.878600486269,-0.878646267485,-0.878692040625,-0.878737805687,-0.878783562673,-0.878829311581,-0.878875052411,-0.878920785162,-0.878966509835,-0.879012226429,-0.879057934942,-0.879103635376,-0.879149327729,-0.879195012001,-0.879240688192,-0.879286356301,-0.879332016328,-0.879377668272,-0.879423312133,-0.879468947911,-0.879514575604,-0.879560195214,-0.879605806739,-0.879651410178,-0.879697005532,-0.8797425928,-0.879788171982,-0.879833743076,-0.879879306084,-0.879924861004,-0.879970407836,-0.880015946579,-0.880061477233,-0.880106999798,-0.880152514274,-0.880198020659,-0.880243518953,-0.880289009157,-0.880334491269,-0.880379965289,-0.880425431217,-0.880470889052,-0.880516338794,-0.880561780443,-0.880607213998,-0.880652639458,-0.880698056824,-0.880743466094,-0.880788867269,-0.880834260348,-0.88087964533,-0.880925022216,-0.880970391004,-0.881015751694,-0.881061104287,-0.881106448781,-0.881151785176,-0.881197113471,-0.881242433667,-0.881287745763,-0.881333049758,-0.881378345652,-0.881423633444,-0.881468913135,-0.881514184723,-0.881559448209,-0.881604703592,-0.881649950871,-0.881695190046,-0.881740421117,-0.881785644083,-0.881830858944,-0.881876065699,-0.881921264348,-0.881966454891,-0.882011637327,-0.882056811656,-0.882101977877,-0.88214713599,-0.882192285994,-0.88223742789,-0.882282561676,-0.882327687352,-0.882372804919,-0.882417914374,-0.882463015719,-0.882508108952,-0.882553194074,-0.882598271083,-0.88264333998,-0.882688400763,-0.882733453433,-0.882778497989,-0.882823534431,-0.882868562758,-0.88291358297,-0.882958595066,-0.883003599047,-0.883048594911,-0.883093582658,-0.883138562288,-0.883183533801,-0.883228497195,-0.883273452471,-0.883318399628,-0.883363338666,-0.883408269584,-0.883453192382,-0.883498107059,-0.883543013616,-0.883587912051,-0.883632802365,-0.883677684556,-0.883722558625,-0.883767424571,-0.883812282393,-0.883857132091,-0.883901973666,-0.883946807116,-0.88399163244,-0.884036449639,-0.884081258713,-0.88412605966,-0.88417085248,-0.884215637173,-0.884260413739,-0.884305182177,-0.884349942486,-0.884394694667,-0.884439438718,-0.88448417464,-0.884528902432,-0.884573622094,-0.884618333624,-0.884663037024,-0.884707732292,-0.884752419428,-0.884797098431,-0.884841769301,-0.884886432039,-0.884931086642,-0.884975733112,-0.885020371447,-0.885065001647,-0.885109623711,-0.88515423764,-0.885198843433,-0.885243441089,-0.885288030609,-0.885332611991,-0.885377185235,-0.885421750341,-0.885466307308,-0.885510856136,-0.885555396825,-0.885599929374,-0.885644453783,-0.885688970051,-0.885733478178,-0.885777978164,-0.885822470007,-0.885866953709,-0.885911429268,-0.885955896683,-0.886000355955,-0.886044807084,-0.886089250067,-0.886133684907,-0.8861781116,-0.886222530149,-0.886266940551,-0.886311342807,-0.886355736917,-0.886400122879,-0.886444500693,-0.88648887036,-0.886533231878,-0.886577585247,-0.886621930467,-0.886666267537,-0.886710596458,-0.886754917228,-0.886799229847,-0.886843534314,-0.88688783063,-0.886932118794,-0.886976398806,-0.887020670664,-0.88706493437,-0.887109189921,-0.887153437319,-0.887197676562,-0.88724190765,-0.887286130582,-0.887330345359,-0.88737455198,-0.887418750444,-0.887462940752,-0.887507122901,-0.887551296894,-0.887595462728,-0.887639620403,-0.887683769919,-0.887727911276,-0.887772044473,-0.88781616951,-0.887860286387,-0.887904395102,-0.887948495656,-0.887992588048,-0.888036672278,-0.888080748345,-0.888124816249,-0.88816887599,-0.888212927566,-0.888256970979,-0.888301006227,-0.88834503331,-0.888389052227,-0.888433062978,-0.888477065564,-0.888521059982,-0.888565046233,-0.888609024317,-0.888652994233,-0.888696955981,-0.88874090956,-0.88878485497,-0.88882879221,-0.88887272128,-0.88891664218,-0.88896055491,-0.889004459468,-0.889048355855,-0.889092244069,-0.889136124112,-0.889179995981,-0.889223859678,-0.889267715201,-0.88931156255,-0.889355401724,-0.889399232724,-0.889443055549,-0.889486870198,-0.889530676671,-0.889574474968,-0.889618265088,-0.889662047031,-0.889705820796,-0.889749586383,-0.889793343792,-0.889837093022,-0.889880834073,-0.889924566944,-0.889968291635,-0.890012008146,-0.890055716476,-0.890099416625,-0.890143108592,-0.890186792378,-0.890230467981,-0.890274135401,-0.890317794637,-0.890361445691,-0.89040508856,-0.890448723245,-0.890492349745,-0.89053596806,-0.890579578189,-0.890623180132,-0.890666773889,-0.890710359459,-0.890753936841,-0.890797506036,-0.890841067043,-0.890884619862,-0.890928164492,-0.890971700932,-0.891015229183,-0.891058749244,-0.891102261115,-0.891145764795,-0.891189260283,-0.89123274758,-0.891276226685,-0.891319697597,-0.891363160317,-0.891406614843,-0.891450061176,-0.891493499315,-0.891536929259,-0.891580351009,-0.891623764563,-0.891667169922,-0.891710567084,-0.891753956051,-0.89179733682,-0.891840709392,-0.891884073767,-0.891927429944,-0.891970777922,-0.892014117701,-0.892057449282,-0.892100772662,-0.892144087843,-0.892187394823,-0.892230693602,-0.892273984181,-0.892317266557,-0.892360540732,-0.892403806704,-0.892447064474,-0.89249031404,-0.892533555403,-0.892576788562,-0.892620013516,-0.892663230265,-0.89270643881,-0.892749639149,-0.892792831282,-0.892836015208,-0.892879190928,-0.892922358441,-0.892965517746,-0.893008668843,-0.893051811732,-0.893094946412,-0.893138072883,-0.893181191144,-0.893224301196,-0.893267403037,-0.893310496667,-0.893353582086,-0.893396659294,-0.89343972829,-0.893482789074,-0.893525841644,-0.893568886002,-0.893611922146,-0.893654950077,-0.893697969793,-0.893740981294,-0.893783984581,-0.893826979651,-0.893869966506,-0.893912945145,-0.893955915567,-0.893998877772,-0.89404183176,-0.89408477753,-0.894127715081,-0.894170644414,-0.894213565528,-0.894256478422,-0.894299383097,-0.894342279551,-0.894385167785,-0.894428047798,-0.894470919589,-0.894513783159,-0.894556638506,-0.894599485631,-0.894642324533,-0.894685155212,-0.894727977667,-0.894770791897,-0.894813597903,-0.894856395685,-0.89489918524,-0.894941966571,-0.894984739675,-0.895027504552,-0.895070261203,-0.895113009626,-0.895155749822,-0.895198481789,-0.895241205528,-0.895283921039,-0.89532662832,-0.895369327371,-0.895412018192,-0.895454700783,-0.895497375143,-0.895540041272,-0.895582699169,-0.895625348834,-0.895667990267,-0.895710623467,-0.895753248434,-0.895795865167,-0.895838473666,-0.895881073931,-0.895923665961,-0.895966249756,-0.896008825316,-0.896051392639,-0.896093951727,-0.896136502577,-0.896179045191,-0.896221579567,-0.896264105705,-0.896306623604,-0.896349133266,-0.896391634688,-0.89643412787,-0.896476612813,-0.896519089516,-0.896561557978,-0.896604018199,-0.896646470179,-0.896688913917,-0.896731349412,-0.896773776665,-0.896816195676,-0.896858606442,-0.896901008965,-0.896943403244,-0.896985789279,-0.897028167068,-0.897070536613,-0.897112897911,-0.897155250964,-0.89719759577,-0.897239932329,-0.897282260641,-0.897324580705,-0.897366892522,-0.89740919609,-0.897451491409,-0.897493778479,-0.897536057299,-0.89757832787,-0.89762059019,-0.897662844259,-0.897705090077,-0.897747327644,-0.897789556959,-0.897831778021,-0.897873990831,-0.897916195388,-0.897958391691,-0.898000579741,-0.898042759536,-0.898084931077,-0.898127094362,-0.898169249393,-0.898211396167,-0.898253534685,-0.898295664947,-0.898337786952,-0.898379900699,-0.898422006189,-0.898464103421,-0.898506192394,-0.898548273108,-0.898590345563,-0.898632409759,-0.898674465694,-0.898716513369,-0.898758552783,-0.898800583936,-0.898842606827,-0.898884621457,-0.898926627824,-0.898968625928,-0.899010615769,-0.899052597347,-0.89909457066,-0.89913653571,-0.899178492495,-0.899220441014,-0.899262381269,-0.899304313257,-0.899346236979,-0.899388152435,-0.899430059624,-0.899471958545,-0.899513849198,-0.899555731584,-0.899597605701,-0.899639471549,-0.899681329127,-0.899723178436,-0.899765019475,-0.899806852244,-0.899848676742,-0.899890492968,-0.899932300923,-0.899974100606,-0.900015892016,-0.900057675154,-0.900099450019,-0.90014121661,-0.900182974927,-0.90022472497,-0.900266466738,-0.900308200231,-0.900349925449,-0.900391642391,-0.900433351056,-0.900475051445,-0.900516743558,-0.900558427392,-0.900600102949,-0.900641770228,-0.900683429229,-0.90072507995,-0.900766722392,-0.900808356555,-0.900849982438,-0.90089160004,-0.900933209361,-0.900974810401,-0.90101640316,-0.901057987636,-0.901099563831,-0.901141131742,-0.901182691371,-0.901224242716,-0.901265785777,-0.901307320554,-0.901348847046,-0.901390365253,-0.901431875175,-0.901473376811,-0.901514870161,-0.901556355225,-0.901597832001,-0.90163930049,-0.901680760692,-0.901722212606,-0.901763656231,-0.901805091567,-0.901846518614,-0.901887937371,-0.901929347839,-0.901970750016,-0.902012143902,-0.902053529498,-0.902094906802,-0.902136275814,-0.902177636533,-0.902218988961,-0.902260333095,-0.902301668935,-0.902342996482,-0.902384315735,-0.902425626694,-0.902466929357,-0.902508223725,-0.902549509798,-0.902590787574,-0.902632057054,-0.902673318237,-0.902714571123,-0.902755815712,-0.902797052002,-0.902838279995,-0.902879499688,-0.902920711082,-0.902961914177,-0.903003108973,-0.903044295468,-0.903085473662,-0.903126643555,-0.903167805147,-0.903208958438,-0.903250103426,-0.903291240112,-0.903332368495,-0.903373488574,-0.90341460035,-0.903455703822,-0.90349679899,-0.903537885853,-0.903578964411,-0.903620034663,-0.903661096609,-0.903702150249,-0.903743195583,-0.903784232609,-0.903825261328,-0.90386628174,-0.903907293843,-0.903948297638,-0.903989293123,-0.9040302803,-0.904071259167,-0.904112229724,-0.90415319197,-0.904194145906,-0.90423509153,-0.904276028843,-0.904316957844,-0.904357878533,-0.904398790909,-0.904439694972,-0.904480590721,-0.904521478157,-0.904562357279,-0.904603228086,-0.904644090578,-0.904684944755,-0.904725790616,-0.904766628162,-0.90480745739,-0.904848278302,-0.904889090897,-0.904929895174,-0.904970691134,-0.905011478775,-0.905052258097,-0.9050930291,-0.905133791784,-0.905174546148,-0.905215292192,-0.905256029916,-0.905296759318,-0.905337480399,-0.905378193159,-0.905418897596,-0.905459593711,-0.905500281504,-0.905540960973,-0.905581632118,-0.90562229494,-0.905662949437,-0.90570359561,-0.905744233458,-0.90578486298,-0.905825484176,-0.905866097047,-0.90590670159,-0.905947297807,-0.905987885697,-0.906028465259,-0.906069036493,-0.906109599398,-0.906150153975,-0.906190700223,-0.906231238141,-0.906271767729,-0.906312288987,-0.906352801915,-0.906393306511,-0.906433802776,-0.906474290709,-0.90651477031,-0.906555241579,-0.906595704515,-0.906636159117,-0.906676605386,-0.906717043321,-0.906757472922,-0.906797894188,-0.906838307119,-0.906878711714,-0.906919107974,-0.906959495897,-0.906999875484,-0.907040246734,-0.907080609646,-0.907120964221,-0.907161310458,-0.907201648356,-0.907241977915,-0.907282299136,-0.907322612016,-0.907362916557,-0.907403212758,-0.907443500618,-0.907483780137,-0.907524051314,-0.90756431415,-0.907604568643,-0.907644814795,-0.907685052603,-0.907725282068,-0.907765503189,-0.907805715966,-0.907845920399,-0.907886116488,-0.907926304231,-0.907966483629,-0.90800665468,-0.908046817386,-0.908086971745,-0.908127117757,-0.908167255422,-0.908207384739,-0.908247505709,-0.908287618329,-0.908327722601,-0.908367818524,-0.908407906097,-0.908447985321,-0.908488056194,-0.908528118716,-0.908568172888,-0.908608218708,-0.908648256176,-0.908688285293,-0.908728306056,-0.908768318467,-0.908808322525,-0.908848318229,-0.90888830558,-0.908928284576,-0.908968255217,-0.909008217503,-0.909048171434,-0.909088117009,-0.909128054228,-0.909167983091,-0.909207903596,-0.909247815744,-0.909287719535,-0.909327614968,-0.909367502042,-0.909407380758,-0.909447251114,-0.909487113112,-0.909526966749,-0.909566812026,-0.909606648943,-0.909646477498,-0.909686297693,-0.909726109525,-0.909765912996,-0.909805708105,-0.90984549485,-0.909885273233,-0.909925043252,-0.909964804907,-0.910004558198,-0.910044303125,-0.910084039686,-0.910123767883,-0.910163487713,-0.910203199178,-0.910242902276,-0.910282597007,-0.910322283372,-0.910361961368,-0.910401630997,-0.910441292258,-0.91048094515,-0.910520589673,-0.910560225827,-0.910599853612,-0.910639473026,-0.91067908407,-0.910718686743,-0.910758281044,-0.910797866975,-0.910837444533,-0.91087701372,-0.910916574533,-0.910956126974,-0.910995671042,-0.911035206735,-0.911074734055,-0.911114253001,-0.911153763571,-0.911193265767,-0.911232759586,-0.911272245031,-0.911311722098,-0.91135119079,-0.911390651104,-0.911430103041,-0.911469546601,-0.911508981782,-0.911548408585,-0.911587827009,-0.911627237054,-0.91166663872,-0.911706032005,-0.911745416911,-0.911784793436,-0.91182416158,-0.911863521343,-0.911902872724,-0.911942215723,-0.91198155034,-0.912020876574,-0.912060194424,-0.912099503892,-0.912138804975,-0.912178097675,-0.91221738199,-0.91225665792,-0.912295925464,-0.912335184623,-0.912374435396,-0.912413677783,-0.912452911783,-0.912492137396,-0.912531354622,-0.912570563459,-0.912609763909,-0.91264895597,-0.912688139642,-0.912727314925,-0.912766481818,-0.912805640322,-0.912844790435,-0.912883932157,-0.912923065488,-0.912962190428,-0.913001306977,-0.913040415133,-0.913079514896,-0.913118606267,-0.913157689245,-0.913196763829,-0.913235830019,-0.913274887815,-0.913313937216,-0.913352978222,-0.913392010833,-0.913431035049,-0.913470050868,-0.91350905829,-0.913548057316,-0.913587047945,-0.913626030177,-0.91366500401,-0.913703969445,-0.913742926482,-0.91378187512,-0.913820815358,-0.913859747197,-0.913898670636,-0.913937585674,-0.913976492312,-0.914015390549,-0.914054280384,-0.914093161817,-0.914132034849,-0.914170899478,-0.914209755704,-0.914248603526,-0.914287442945,-0.914326273961,-0.914365096571,-0.914403910778,-0.914442716579,-0.914481513975,-0.914520302965,-0.914559083549,-0.914597855727,-0.914636619498,-0.914675374862,-0.914714121818,-0.914752860366,-0.914791590506,-0.914830312238,-0.914869025561,-0.914907730474,-0.914946426978,-0.914985115072,-0.915023794755,-0.915062466028,-0.915101128889,-0.91513978334,-0.915178429378,-0.915217067005,-0.915255696218,-0.915294317019,-0.915332929407,-0.915371533382,-0.915410128942,-0.915448716088,-0.91548729482,-0.915525865136,-0.915564427038,-0.915602980523,-0.915641525593,-0.915680062246,-0.915718590483,-0.915757110302,-0.915795621704,-0.915834124688,-0.915872619254,-0.915911105402,-0.91594958313,-0.91598805244,-0.916026513329,-0.916064965799,-0.916103409849,-0.916141845478,-0.916180272686,-0.916218691473,-0.916257101838,-0.916295503781,-0.916333897301,-0.916372282399,-0.916410659074,-0.916449027325,-0.916487387153,-0.916525738556,-0.916564081535,-0.916602416089,-0.916640742218,-0.916679059921,-0.916717369198,-0.916755670049,-0.916793962474,-0.916832246471,-0.916870522041,-0.916908789184,-0.916947047898,-0.916985298184,-0.917023540041,-0.91706177347,-0.917099998468,-0.917138215037,-0.917176423176,-0.917214622885,-0.917252814162,-0.917290997008,-0.917329171423,-0.917367337406,-0.917405494957,-0.917443644075,-0.91748178476,-0.917519917012,-0.91755804083,-0.917596156214,-0.917634263164,-0.917672361679,-0.917710451759,-0.917748533404,-0.917786606613,-0.917824671385,-0.917862727722,-0.917900775621,-0.917938815084,-0.917976846109,-0.918014868696,-0.918052882845,-0.918090888555,-0.918128885827,-0.918166874659,-0.918204855051,-0.918242827004,-0.918280790517,-0.918318745588,-0.918356692219,-0.918394630408,-0.918432560156,-0.918470481462,-0.918508394325,-0.918546298746,-0.918584194723,-0.918622082257,-0.918659961348,-0.918697831994,-0.918735694196,-0.918773547952,-0.918811393264,-0.91884923013,-0.918887058551,-0.918924878525,-0.918962690052,-0.919000493133,-0.919038287766,-0.919076073952,-0.91911385169,-0.91915162098,-0.919189381821,-0.919227134212,-0.919264878155,-0.919302613648,-0.919340340691,-0.919378059283,-0.919415769425,-0.919453471116,-0.919491164355,-0.919528849142,-0.919566525478,-0.919604193361,-0.919641852791,-0.919679503768,-0.919717146291,-0.919754780361,-0.919792405976,-0.919830023137,-0.919867631843,-0.919905232094,-0.919942823889,-0.919980407229,-0.920017982112,-0.920055548538,-0.920093106508,-0.92013065602,-0.920168197074,-0.920205729671,-0.920243253809,-0.920280769489,-0.920318276709,-0.92035577547,-0.920393265772,-0.920430747613,-0.920468220994,-0.920505685914,-0.920543142373,-0.920580590371,-0.920618029907,-0.920655460981,-0.920692883592,-0.920730297741,-0.920767703426,-0.920805100648,-0.920842489406,-0.9208798697,-0.920917241529,-0.920954604894,-0.920991959793,-0.921029306227,-0.921066644194,-0.921103973696,-0.921141294731,-0.921178607299,-0.921215911399,-0.921253207033,-0.921290494198,-0.921327772894,-0.921365043123,-0.921402304882,-0.921439558172,-0.921476802992,-0.921514039342,-0.921551267222,-0.921588486631,-0.921625697569,-0.921662900036,-0.921700094031,-0.921737279554,-0.921774456604,-0.921811625182,-0.921848785286,-0.921885936918,-0.921923080075,-0.921960214758,-0.921997340967,-0.922034458701,-0.92207156796,-0.922108668743,-0.922145761051,-0.922182844882,-0.922219920237,-0.922256987115,-0.922294045516,-0.922331095439,-0.922368136885,-0.922405169852,-0.922442194341,-0.922479210351,-0.922516217881,-0.922553216932,-0.922590207503,-0.922627189594,-0.922664163205,-0.922701128334,-0.922738084982,-0.922775033148,-0.922811972833,-0.922848904035,-0.922885826755,-0.922922740991,-0.922959646745,-0.922996544014,-0.9230334328,-0.923070313101,-0.923107184918,-0.92314404825,-0.923180903096,-0.923217749457,-0.923254587331,-0.92329141672,-0.923328237621,-0.923365050036,-0.923401853963,-0.923438649402,-0.923475436354,-0.923512214817,-0.923548984791,-0.923585746276,-0.923622499272,-0.923659243778,-0.923695979794,-0.92373270732,-0.923769426355,-0.923806136898,-0.923842838951,-0.923879532511,-0.92391621758,-0.923952894156,-0.923989562239,-0.924026221829,-0.924062872926,-0.924099515529,-0.924136149637,-0.924172775252,-0.924209392371,-0.924246000996,-0.924282601125,-0.924319192758,-0.924355775895,-0.924392350535,-0.924428916679,-0.924465474325,-0.924502023474,-0.924538564125,-0.924575096279,-0.924611619933,-0.924648135089,-0.924684641745,-0.924721139902,-0.92475762956,-0.924794110717,-0.924830583373,-0.924867047529,-0.924903503183,-0.924939950336,-0.924976388987,-0.925012819136,-0.925049240783,-0.925085653926,-0.925122058567,-0.925158454703,-0.925194842336,-0.925231221465,-0.92526759209,-0.925303954209,-0.925340307823,-0.925376652932,-0.925412989535,-0.925449317631,-0.925485637221,-0.925521948305,-0.925558250881,-0.925594544949,-0.92563083051,-0.925667107562,-0.925703376106,-0.925739636141,-0.925775887667,-0.925812130683,-0.92584836519,-0.925884591186,-0.925920808672,-0.925957017647,-0.92599321811,-0.926029410062,-0.926065593503,-0.926101768431,-0.926137934846,-0.926174092749,-0.926210242138,-0.926246383014,-0.926282515376,-0.926318639224,-0.926354754558,-0.926390861376,-0.926426959679,-0.926463049467,-0.926499130739,-0.926535203495,-0.926571267734,-0.926607323457,-0.926643370662,-0.92667940935,-0.92671543952,-0.926751461171,-0.926787474305,-0.926823478919,-0.926859475014,-0.92689546259,-0.926931441646,-0.926967412182,-0.927003374197,-0.927039327691,-0.927075272665,-0.927111209117,-0.927147137047,-0.927183056455,-0.92721896734,-0.927254869703,-0.927290763542,-0.927326648858,-0.92736252565,-0.927398393919,-0.927434253662,-0.927470104881,-0.927505947575,-0.927541781743,-0.927577607386,-0.927613424502,-0.927649233093,-0.927685033156,-0.927720824692,-0.927756607701,-0.927792382182,-0.927828148135,-0.92786390556,-0.927899654456,-0.927935394823,-0.92797112666,-0.928006849968,-0.928042564746,-0.928078270993,-0.92811396871,-0.928149657895,-0.92818533855,-0.928221010672,-0.928256674263,-0.928292329321,-0.928327975847,-0.928363613839,-0.928399243299,-0.928434864224,-0.928470476616,-0.928506080473,-0.928541675796,-0.928577262584,-0.928612840836,-0.928648410553,-0.928683971734,-0.928719524379,-0.928755068487,-0.928790604058,-0.928826131092,-0.928861649588,-0.928897159547,-0.928932660967,-0.928968153849,-0.929003638192,-0.929039113995,-0.929074581259,-0.929110039984,-0.929145490168,-0.929180931811,-0.929216364914,-0.929251789475,-0.929287205496,-0.929322612974,-0.92935801191,-0.929393402304,-0.929428784155,-0.929464157462,-0.929499522227,-0.929534878447,-0.929570226124,-0.929605565256,-0.929640895843,-0.929676217885,-0.929711531382,-0.929746836334,-0.929782132739,-0.929817420598,-0.92985269991,-0.929887970675,-0.929923232893,-0.929958486563,-0.929993731685,-0.930028968259,-0.930064196284,-0.93009941576,-0.930134626687,-0.930169829065,-0.930205022892,-0.930240208169,-0.930275384896,-0.930310553072,-0.930345712696,-0.93038086377,-0.930416006291,-0.93045114026,-0.930486265676,-0.93052138254,-0.93055649085,-0.930591590607,-0.930626681811,-0.93066176446,-0.930696838554,-0.930731904094,-0.930766961079,-0.930802009508,-0.930837049382,-0.9308720807,-0.930907103461,-0.930942117665,-0.930977123313,-0.931012120403,-0.931047108936,-0.93108208891,-0.931117060326,-0.931152023184,-0.931186977483,-0.931221923222,-0.931256860402,-0.931291789022,-0.931326709081,-0.93136162058,-0.931396523518,-0.931431417895,-0.931466303711,-0.931501180965,-0.931536049656,-0.931570909785,-0.931605761351,-0.931640604354,-0.931675438794,-0.93171026467,-0.931745081982,-0.931779890729,-0.931814690912,-0.931849482529,-0.931884265582,-0.931919040068,-0.931953805989,-0.931988563343,-0.932023312131,-0.932058052351,-0.932092784005,-0.932127507091,-0.932162221609,-0.932196927558,-0.932231624939,-0.932266313752,-0.932300993995,-0.932335665668,-0.932370328772,-0.932404983305,-0.932439629268,-0.932474266661,-0.932508895482,-0.932543515732,-0.93257812741,-0.932612730516,-0.932647325049,-0.93268191101,-0.932716488398,-0.932751057213,-0.932785617454,-0.932820169121,-0.932854712213,-0.932889246731,-0.932923772674,-0.932958290042,-0.932992798835,-0.933027299051,-0.933061790692,-0.933096273755,-0.933130748242,-0.933165214152,-0.933199671485,-0.933234120239,-0.933268560416,-0.933302992014,-0.933337415033,-0.933371829474,-0.933406235335,-0.933440632616,-0.933475021317,-0.933509401438,-0.933543772979,-0.933578135938,-0.933612490317,-0.933646836113,-0.933681173328,-0.933715501961,-0.933749822011,-0.933784133478,-0.933818436362,-0.933852730663,-0.93388701638,-0.933921293513,-0.933955562061,-0.933989822025,-0.934024073403,-0.934058316197,-0.934092550404,-0.934126776026,-0.934160993061,-0.93419520151,-0.934229401372,-0.934263592646,-0.934297775334,-0.934331949433,-0.934366114944,-0.934400271866,-0.9344344202,-0.934468559945,-0.9345026911,-0.934536813665,-0.93457092764,-0.934605033025,-0.93463912982,-0.934673218023,-0.934707297635,-0.934741368655,-0.934775431084,-0.93480948492,-0.934843530163,-0.934877566814,-0.934911594872,-0.934945614336,-0.934979625206,-0.935013627482,-0.935047621163,-0.93508160625,-0.935115582742,-0.935149550638,-0.935183509939,-0.935217460644,-0.935251402752,-0.935285336264,-0.935319261179,-0.935353177496,-0.935387085216,-0.935420984338,-0.935454874862,-0.935488756787,-0.935522630114,-0.935556494841,-0.93559035097,-0.935624198498,-0.935658037426,-0.935691867754,-0.935725689481,-0.935759502607,-0.935793307132,-0.935827103055,-0.935860890377,-0.935894669096,-0.935928439213,-0.935962200726,-0.935995953637,-0.936029697944,-0.936063433647,-0.936097160746,-0.936130879241,-0.936164589131,-0.936198290416,-0.936231983096,-0.93626566717,-0.936299342638,-0.9363330095,-0.936366667756,-0.936400317404,-0.936433958445,-0.936467590879,-0.936501214705,-0.936534829923,-0.936568436532,-0.936602034533,-0.936635623924,-0.936669204707,-0.936702776879,-0.936736340442,-0.936769895394,-0.936803441736,-0.936836979467,-0.936870508586,-0.936904029095,-0.936937540991,-0.936971044275,-0.937004538947,-0.937038025006,-0.937071502452,-0.937104971284,-0.937138431503,-0.937171883108,-0.937205326099,-0.937238760475,-0.937272186236,-0.937305603382,-0.937339011913,-0.937372411827,-0.937405803126,-0.937439185808,-0.937472559873,-0.937505925321,-0.937539282152,-0.937572630366,-0.937605969961,-0.937639300938,-0.937672623297,-0.937705937036,-0.937739242156,-0.937772538657,-0.937805826538,-0.937839105799,-0.93787237644,-0.93790563846,-0.937938891859,-0.937972136636,-0.938005372792,-0.938038600326,-0.938071819238,-0.938105029527,-0.938138231193,-0.938171424236,-0.938204608655,-0.938237784451,-0.938270951623,-0.93830411017,-0.938337260093,-0.938370401391,-0.938403534063,-0.93843665811,-0.938469773531,-0.938502880325,-0.938535978494,-0.938569068035,-0.938602148949,-0.938635221236,-0.938668284895,-0.938701339926,-0.938734386328,-0.938767424102,-0.938800453247,-0.938833473763,-0.938866485649,-0.938899488906,-0.938932483532,-0.938965469528,-0.938998446893,-0.939031415627,-0.939064375729,-0.9390973272,-0.939130270039,-0.939163204246,-0.93919612982,-0.939229046761,-0.939261955069,-0.939294854743,-0.939327745784,-0.93936062819,-0.939393501962,-0.9394263671,-0.939459223602,-0.939492071469,-0.939524910701,-0.939557741296,-0.939590563256,-0.939623376579,-0.939656181265,-0.939688977314,-0.939721764725,-0.939754543499,-0.939787313635,-0.939820075132,-0.939852827991,-0.939885572211,-0.939918307792,-0.939951034733,-0.939983753034,-0.940016462695,-0.940049163716,-0.940081856096,-0.940114539835,-0.940147214933,-0.940179881389,-0.940212539203,-0.940245188375,-0.940277828904,-0.94031046079,-0.940343084034,-0.940375698634,-0.94040830459,-0.940440901902,-0.94047349057,-0.940506070593,-0.940538641972,-0.940571204705,-0.940603758792,-0.940636304234,-0.940668841029,-0.940701369179,-0.940733888681,-0.940766399536,-0.940798901744,-0.940831395305,-0.940863880217,-0.940896356482,-0.940928824098,-0.940961283065,-0.940993733382,-0.941026175051,-0.94105860807,-0.941091032438,-0.941123448157,-0.941155855225,-0.941188253642,-0.941220643407,-0.941253024521,-0.941285396984,-0.941317760794,-0.941350115952,-0.941382462457,-0.94141480031,-0.941447129509,-0.941479450054,-0.941511761946,-0.941544065183,-0.941576359766,-0.941608645694,-0.941640922967,-0.941673191585,-0.941705451547,-0.941737702853,-0.941769945503,-0.941802179496,-0.941834404832,-0.941866621512,-0.941898829534,-0.941931028898,-0.941963219604,-0.941995401652,-0.942027575041,-0.942059739771,-0.942091895842,-0.942124043254,-0.942156182005,-0.942188312097,-0.942220433528,-0.942252546299,-0.942284650408,-0.942316745857,-0.942348832643,-0.942380910768,-0.942412980231,-0.942445041031,-0.942477093168,-0.942509136643,-0.942541171454,-0.942573197601,-0.942605215085,-0.942637223904,-0.942669224059,-0.942701215549,-0.942733198374,-0.942765172533,-0.942797138027,-0.942829094855,-0.942861043016,-0.942892982511,-0.942924913339,-0.9429568355,-0.942988748994,-0.943020653819,-0.943052549977,-0.943084437466,-0.943116316287,-0.943148186438,-0.943180047921,-0.943211900734,-0.943243744877,-0.94327558035,-0.943307407153,-0.943339225285,-0.943371034746,-0.943402835536,-0.943434627654,-0.943466411101,-0.943498185875,-0.943529951977,-0.943561709406,-0.943593458162,-0.943625198245,-0.943656929654,-0.943688652389,-0.94372036645,-0.943752071837,-0.943783768549,-0.943815456586,-0.943847135947,-0.943878806633,-0.943910468643,-0.943942121976,-0.943973766634,-0.944005402614,-0.944037029917,-0.944068648543,-0.944100258491,-0.944131859761,-0.944163452353,-0.944195036267,-0.944226611501,-0.944258178057,-0.944289735933,-0.944321285129,-0.944352825646,-0.944384357482,-0.944415880637,-0.944447395112,-0.944478900905,-0.944510398017,-0.944541886447,-0.944573366196,-0.944604837261,-0.944636299645,-0.944667753345,-0.944699198362,-0.944730634696,-0.944762062346,-0.944793481312,-0.944824891594,-0.944856293191,-0.944887686103,-0.94491907033,-0.944950445871,-0.944981812727,-0.945013170896,-0.945044520379,-0.945075861176,-0.945107193285,-0.945138516708,-0.945169831442,-0.945201137489,-0.945232434848,-0.945263723519,-0.945295003501,-0.945326274794,-0.945357537398,-0.945388791312,-0.945420036536,-0.945451273071,-0.945482500914,-0.945513720068,-0.94554493053,-0.945576132301,-0.945607325381,-0.945638509768,-0.945669685464,-0.945700852467,-0.945732010777,-0.945763160395,-0.945794301319,-0.94582543355,-0.945856557087,-0.94588767193,-0.945918778078,-0.945949875532,-0.945980964291,-0.946012044354,-0.946043115722,-0.946074178394,-0.94610523237,-0.94613627765,-0.946167314233,-0.946198342119,-0.946229361308,-0.946260371799,-0.946291373592,-0.946322366688,-0.946353351084,-0.946384326783,-0.946415293782,-0.946446252082,-0.946477201682,-0.946508142583,-0.946539074784,-0.946569998284,-0.946600913083,-0.946631819182,-0.946662716579,-0.946693605275,-0.946724485269,-0.946755356561,-0.94678621915,-0.946817073037,-0.946847918221,-0.946878754702,-0.946909582479,-0.946940401552,-0.946971211922,-0.947002013587,-0.947032806547,-0.947063590803,-0.947094366353,-0.947125133198,-0.947155891336,-0.947186640769,-0.947217381496,-0.947248113516,-0.947278836829,-0.947309551435,-0.947340257333,-0.947370954524,-0.947401643006,-0.947432322781,-0.947462993846,-0.947493656203,-0.947524309851,-0.947554954789,-0.947585591018,-0.947616218536,-0.947646837344,-0.947677447442,-0.947708048829,-0.947738641505,-0.947769225469,-0.947799800721,-0.947830367262,-0.94786092509,-0.947891474206,-0.947922014609,-0.947952546299,-0.947983069276,-0.948013583539,-0.948044089088,-0.948074585922,-0.948105074043,-0.948135553448,-0.948166024138,-0.948196486113,-0.948226939373,-0.948257383916,-0.948287819744,-0.948318246855,-0.948348665249,-0.948379074926,-0.948409475886,-0.948439868128,-0.948470251652,-0.948500626459,-0.948530992547,-0.948561349916,-0.948591698566,-0.948622038497,-0.948652369708,-0.9486826922,-0.948713005971,-0.948743311023,-0.948773607353,-0.948803894963,-0.948834173851,-0.948864444018,-0.948894705463,-0.948924958186,-0.948955202187,-0.948985437465,-0.949015664021,-0.949045881853,-0.949076090961,-0.949106291347,-0.949136483008,-0.949166665944,-0.949196840157,-0.949227005644,-0.949257162406,-0.949287310444,-0.949317449755,-0.94934758034,-0.9493777022,-0.949407815332,-0.949437919738,-0.949468015417,-0.949498102369,-0.949528180593,-0.949558250089,-0.949588310857,-0.949618362897,-0.949648406208,-0.94967844079,-0.949708466643,-0.949738483766,-0.94976849216,-0.949798491823,-0.949828482756,-0.949858464959,-0.94988843843,-0.94991840317,-0.949948359179,-0.949978306457,-0.950008245002,-0.950038174815,-0.950068095895,-0.950098008243,-0.950127911857,-0.950157806738,-0.950187692886,-0.950217570299,-0.950247438979,-0.950277298924,-0.950307150134,-0.950336992609,-0.950366826349,-0.950396651353,-0.950426467621,-0.950456275154,-0.950486073949,-0.950515864009,-0.950545645331,-0.950575417916,-0.950605181764,-0.950634936874,-0.950664683245,-0.950694420879,-0.950724149774,-0.95075386993,-0.950783581347,-0.950813284024,-0.950842977962,-0.95087266316,-0.950902339618,-0.950932007335,-0.950961666312,-0.950991316547,-0.951020958041,-0.951050590794,-0.951080214804,-0.951109830073,-0.951139436599,-0.951169034383,-0.951198623423,-0.95122820372,-0.951257775274,-0.951287338084,-0.95131689215,-0.951346437472,-0.951375974049,-0.951405501882,-0.951435020969,-0.951464531311,-0.951494032907,-0.951523525757,-0.951553009861,-0.951582485219,-0.95161195183,-0.951641409694,-0.95167085881,-0.951700299179,-0.9517297308,-0.951759153673,-0.951788567798,-0.951817973174,-0.951847369801,-0.951876757679,-0.951906136808,-0.951935507187,-0.951964868816,-0.951994221694,-0.952023565822,-0.9520529012,-0.952082227826,-0.952111545701,-0.952140854824,-0.952170155195,-0.952199446814,-0.952228729681,-0.952258003795,-0.952287269157,-0.952316525765,-0.952345773619,-0.95237501272,-0.952404243066,-0.952433464659,-0.952462677497,-0.95249188158,-0.952521076908,-0.95255026348,-0.952579441297,-0.952608610358,-0.952637770663,-0.952666922211,-0.952696065003,-0.952725199038,-0.952754324315,-0.952783440835,-0.952812548597,-0.952841647601,-0.952870737847,-0.952899819334,-0.952928892063,-0.952957956032,-0.952987011242,-0.953016057692,-0.953045095382,-0.953074124312,-0.953103144482,-0.953132155891,-0.953161158539,-0.953190152425,-0.95321913755,-0.953248113914,-0.953277081515,-0.953306040354,-0.953334990431,-0.953363931744,-0.953392864295,-0.953421788082,-0.953450703105,-0.953479609365,-0.95350850686,-0.953537395591,-0.953566275557,-0.953595146758,-0.953624009194,-0.953652862865,-0.953681707769,-0.953710543908,-0.95373937128,-0.953768189886,-0.953796999725,-0.953825800797,-0.953854593101,-0.953883376638,-0.953912151407,-0.953940917408,-0.95396967464,-0.953998423104,-0.954027162799,-0.954055893724,-0.95408461588,-0.954113329267,-0.954142033883,-0.954170729729,-0.954199416804,-0.954228095109,-0.954256764643,-0.954285425405,-0.954314077396,-0.954342720615,-0.954371355061,-0.954399980736,-0.954428597638,-0.954457205767,-0.954485805122,-0.954514395704,-0.954542977513,-0.954571550548,-0.954600114808,-0.954628670294,-0.954657217005,-0.954685754941,-0.954714284102,-0.954742804488,-0.954771316097,-0.954799818931,-0.954828312988,-0.954856798269,-0.954885274772,-0.954913742499,-0.954942201448,-0.95497065162,-0.954999093014,-0.95502752563,-0.955055949467,-0.955084364526,-0.955112770805,-0.955141168306,-0.955169557027,-0.955197936968,-0.955226308129,-0.955254670511,-0.955283024111,-0.955311368931,-0.95533970497,-0.955368032227,-0.955396350703,-0.955424660398,-0.95545296131,-0.95548125344,-0.955509536787,-0.955537811351,-0.955566077133,-0.955594334131,-0.955622582345,-0.955650821776,-0.955679052422,-0.955707274284,-0.955735487361,-0.955763691654,-0.955791887161,-0.955820073883,-0.955848251819,-0.955876420969,-0.955904581333,-0.95593273291,-0.955960875701,-0.955989009705,-0.956017134921,-0.95604525135,-0.956073358991,-0.956101457844,-0.956129547909,-0.956157629186,-0.956185701673,-0.956213765372,-0.956241820281,-0.956269866401,-0.95629790373,-0.95632593227,-0.95635395202,-0.956381962978,-0.956409965146,-0.956437958523,-0.956465943109,-0.956493918902,-0.956521885904,-0.956549844114,-0.956577793531,-0.956605734156,-0.956633665988,-0.956661589027,-0.956689503272,-0.956717408723,-0.956745305381,-0.956773193244,-0.956801072313,-0.956828942588,-0.956856804067,-0.956884656751,-0.956912500639,-0.956940335732,-0.956968162029,-0.95699597953,-0.957023788234,-0.957051588141,-0.957079379251,-0.957107161564,-0.95713493508,-0.957162699798,-0.957190455717,-0.957218202839,-0.957245941162,-0.957273670686,-0.957301391411,-0.957329103336,-0.957356806463,-0.957384500789,-0.957412186315,-0.957439863041,-0.957467530967,-0.957495190091,-0.957522840414,-0.957550481937,-0.957578114657,-0.957605738576,-0.957633353692,-0.957660960006,-0.957688557518,-0.957716146227,-0.957743726132,-0.957771297234,-0.957798859533,-0.957826413028,-0.957853957718,-0.957881493604,-0.957909020686,-0.957936538962,-0.957964048434,-0.9579915491,-0.95801904096,-0.958046524015,-0.958073998263,-0.958101463705,-0.95812892034,-0.958156368169,-0.95818380719,-0.958211237404,-0.95823865881,-0.958266071408,-0.958293475198,-0.95832087018,-0.958348256352,-0.958375633716,-0.958403002271,-0.958430362017,-0.958457712952,-0.958485055078,-0.958512388394,-0.958539712899,-0.958567028593,-0.958594335476,-0.958621633549,-0.95864892281,-0.958676203259,-0.958703474896,-0.958730737721,-0.958757991733,-0.958785236933,-0.95881247332,-0.958839700894,-0.958866919654,-0.958894129601,-0.958921330733,-0.958948523052,-0.958975706556,-0.959002881245,-0.959030047119,-0.959057204178,-0.959084352422,-0.95911149185,-0.959138622462,-0.959165744258,-0.959192857237,-0.9592199614,-0.959247056745,-0.959274143274,-0.959301220985,-0.959328289878,-0.959355349954,-0.959382401211,-0.95940944365,-0.95943647727,-0.959463502071,-0.959490518053,-0.959517525216,-0.959544523559,-0.959571513082,-0.959598493785,-0.959625465667,-0.959652428729,-0.95967938297,-0.959706328389,-0.959733264988,-0.959760192764,-0.959787111719,-0.959814021851,-0.959840923161,-0.959867815649,-0.959894699313,-0.959921574155,-0.959948440173,-0.959975297367,-0.960002145738,-0.960028985284,-0.960055816006,-0.960082637903,-0.960109450976,-0.960136255223,-0.960163050645,-0.960189837241,-0.960216615012,-0.960243383956,-0.960270144074,-0.960296895366,-0.96032363783,-0.960350371468,-0.960377096278,-0.960403812261,-0.960430519416,-0.960457217742,-0.960483907241,-0.96051058791,-0.960537259752,-0.960563922763,-0.960590576946,-0.960617222299,-0.960643858823,-0.960670486516,-0.960697105379,-0.960723715411,-0.960750316613,-0.960776908984,-0.960803492523,-0.960830067231,-0.960856633108,-0.960883190152,-0.960909738364,-0.960936277743,-0.96096280829,-0.960989330004,-0.961015842885,-0.961042346932,-0.961068842146,-0.961095328525,-0.96112180607,-0.961148274781,-0.961174734658,-0.961201185699,-0.961227627905,-0.961254061276,-0.961280485811,-0.961306901511,-0.961333308374,-0.961359706401,-0.961386095591,-0.961412475944,-0.96143884746,-0.961465210139,-0.961491563981,-0.961517908984,-0.961544245149,-0.961570572477,-0.961596890965,-0.961623200615,-0.961649501426,-0.961675793397,-0.961702076529,-0.961728350821,-0.961754616274,-0.961780872885,-0.961807120657,-0.961833359588,-0.961859589677,-0.961885810926,-0.961912023333,-0.961938226899,-0.961964421622,-0.961990607503,-0.962016784542,-0.962042952739,-0.962069112092,-0.962095262602,-0.962121404269,-0.962147537092,-0.962173661072,-0.962199776207,-0.962225882498,-0.962251979944,-0.962278068546,-0.962304148302,-0.962330219214,-0.962356281279,-0.962382334499,-0.962408378873,-0.962434414401,-0.962460441082,-0.962486458917,-0.962512467904,-0.962538468044,-0.962564459337,-0.962590441782,-0.96261641538,-0.962642380129,-0.962668336029,-0.962694283081,-0.962720221284,-0.962746150638,-0.962772071143,-0.962797982798,-0.962823885603,-0.962849779559,-0.962875664663,-0.962901540918,-0.962927408321,-0.962953266874,-0.962979116575,-0.963004957425,-0.963030789423,-0.963056612569,-0.963082426863,-0.963108232304,-0.963134028893,-0.963159816628,-0.963185595511,-0.96321136554,-0.963237126716,-0.963262879038,-0.963288622505,-0.963314357118,-0.963340082877,-0.963365799781,-0.96339150783,-0.963417207023,-0.963442897361,-0.963468578844,-0.96349425147,-0.96351991524,-0.963545570153,-0.96357121621,-0.96359685341,-0.963622481753,-0.963648101238,-0.963673711866,-0.963699313636,-0.963724906547,-0.963750490601,-0.963776065795,-0.963801632131,-0.963827189608,-0.963852738226,-0.963878277984,-0.963903808882,-0.96392933092,-0.963954844098,-0.963980348416,-0.964005843873,-0.964031330469,-0.964056808204,-0.964082277077,-0.964107737089,-0.964133188239,-0.964158630526,-0.964184063952,-0.964209488515,-0.964234904215,-0.964260311052,-0.964285709025,-0.964311098136,-0.964336478382,-0.964361849765,-0.964387212283,-0.964412565937,-0.964437910726,-0.96446324665,-0.964488573709,-0.964513891903,-0.964539201231,-0.964564501694,-0.96458979329,-0.96461507602,-0.964640349883,-0.96466561488,-0.964690871009,-0.964716118272,-0.964741356667,-0.964766586194,-0.964791806853,-0.964817018645,-0.964842221567,-0.964867415622,-0.964892600807,-0.964917777123,-0.96494294457,-0.964968103147,-0.964993252855,-0.965018393692,-0.96504352566,-0.965068648757,-0.965093762983,-0.965118868338,-0.965143964822,-0.965169052435,-0.965194131176,-0.965219201045,-0.965244262042,-0.965269314167,-0.965294357419,-0.965319391798,-0.965344417305,-0.965369433938,-0.965394441698,-0.965419440584,-0.965444430596,-0.965469411734,-0.965494383997,-0.965519347386,-0.9655443019,-0.965569247539,-0.965594184303,-0.965619112191,-0.965644031204,-0.96566894134,-0.9656938426,-0.965718734984,-0.965743618491,-0.965768493121,-0.965793358874,-0.96581821575,-0.965843063748,-0.965867902868,-0.96589273311,-0.965917554474,-0.965942366959,-0.965967170566,-0.965991965294,-0.966016751142,-0.966041528111,-0.966066296201,-0.96609105541,-0.96611580574,-0.966140547189,-0.966165279758,-0.966190003445,-0.966214718252,-0.966239424178,-0.966264121222,-0.966288809384,-0.966313488665,-0.966338159063,-0.966362820579,-0.966387473212,-0.966412116963,-0.96643675183,-0.966461377814,-0.966485994915,-0.966510603132,-0.966535202465,-0.966559792914,-0.966584374478,-0.966608947158,-0.966633510953,-0.966658065863,-0.966682611887,-0.966707149026,-0.966731677279,-0.966756196647,-0.966780707128,-0.966805208722,-0.96682970143,-0.966854185251,-0.966878660185,-0.966903126232,-0.966927583391,-0.966952031662,-0.966976471045,-0.96700090154,-0.967025323146,-0.967049735864,-0.967074139693,-0.967098534633,-0.967122920683,-0.967147297844,-0.967171666115,-0.967196025496,-0.967220375986,-0.967244717586,-0.967269050296,-0.967293374114,-0.967317689042,-0.967341995078,-0.967366292222,-0.967390580475,-0.967414859835,-0.967439130304,-0.96746339188,-0.967487644563,-0.967511888353,-0.96753612325,-0.967560349253,-0.967584566363,-0.967608774579,-0.967632973902,-0.967657164329,-0.967681345863,-0.967705518501,-0.967729682245,-0.967753837093,-0.967777983047,-0.967802120104,-0.967826248266,-0.967850367531,-0.967874477901,-0.967898579374,-0.96792267195,-0.967946755629,-0.967970830411,-0.967994896296,-0.968018953283,-0.968043001372,-0.968067040563,-0.968091070856,-0.968115092251,-0.968139104746,-0.968163108343,-0.968187103041,-0.968211088839,-0.968235065738,-0.968259033737,-0.968282992836,-0.968306943034,-0.968330884332,-0.96835481673,-0.968378740226,-0.968402654822,-0.968426560516,-0.968450457308,-0.968474345199,-0.968498224188,-0.968522094274,-0.968545955458,-0.96856980774,-0.968593651118,-0.968617485594,-0.968641311166,-0.968665127834,-0.968688935599,-0.96871273446,-0.968736524416,-0.968760305469,-0.968784077616,-0.968807840859,-0.968831595196,-0.968855340629,-0.968879077155,-0.968902804776,-0.968926523492,-0.9689502333,-0.968973934203,-0.968997626199,-0.969021309288,-0.96904498347,-0.969068648745,-0.969092305113,-0.969115952572,-0.969139591124,-0.969163220768,-0.969186841503,-0.96921045333,-0.969234056248,-0.969257650257,-0.969281235357,-0.969304811547,-0.969328378828,-0.969351937199,-0.969375486659,-0.96939902721,-0.96942255885,-0.969446081579,-0.969469595397,-0.969493100305,-0.9695165963,-0.969540083385,-0.969563561557,-0.969587030817,-0.969610491166,-0.969633942601,-0.969657385124,-0.969680818734,-0.969704243431,-0.969727659215,-0.969751066085,-0.969774464042,-0.969797853084,-0.969821233213,-0.969844604427,-0.969867966726,-0.969891320111,-0.96991466458,-0.969938000134,-0.969961326773,-0.969984644496,-0.970007953303,-0.970031253195,-0.970054544169,-0.970077826228,-0.970101099369,-0.970124363594,-0.970147618901,-0.970170865291,-0.970194102763,-0.970217331318,-0.970240550955,-0.970263761673,-0.970286963473,-0.970310156354,-0.970333340316,-0.970356515359,-0.970379681483,-0.970402838688,-0.970425986972,-0.970449126337,-0.970472256781,-0.970495378306,-0.970518490909,-0.970541594592,-0.970564689354,-0.970587775194,-0.970610852113,-0.970633920111,-0.970656979186,-0.97068002934,-0.970703070571,-0.97072610288,-0.970749126266,-0.970772140729,-0.970795146269,-0.970818142886,-0.970841130579,-0.970864109348,-0.970887079193,-0.970910040115,-0.970932992111,-0.970955935184,-0.970978869331,-0.971001794553,-0.97102471085,-0.971047618222,-0.971070516668,-0.971093406188,-0.971116286782,-0.97113915845,-0.971162021191,-0.971184875005,-0.971207719893,-0.971230555853,-0.971253382887,-0.971276200992,-0.97129901017,-0.97132181042,-0.971344601741,-0.971367384135,-0.971390157599,-0.971412922135,-0.971435677742,-0.97145842442,-0.971481162168,-0.971503890986,-0.971526610875,-0.971549321833,-0.971572023862,-0.97159471696,-0.971617401127,-0.971640076363,-0.971662742668,-0.971685400042,-0.971708048484,-0.971730687995,-0.971753318574,-0.97177594022,-0.971798552934,-0.971821156716,-0.971843751564,-0.97186633748,-0.971888914463,-0.971911482512,-0.971934041628,-0.97195659181,-0.971979133057,-0.972001665371,-0.97202418875,-0.972046703195,-0.972069208704,-0.972091705279,-0.972114192918,-0.972136671622,-0.97215914139,-0.972181602223,-0.972204054119,-0.972226497079,-0.972248931102,-0.972271356189,-0.972293772339,-0.972316179552,-0.972338577827,-0.972360967165,-0.972383347565,-0.972405719027,-0.972428081552,-0.972450435137,-0.972472779784,-0.972495115493,-0.972517442262,-0.972539760093,-0.972562068983,-0.972584368935,-0.972606659946,-0.972628942018,-0.972651215149,-0.97267347934,-0.97269573459,-0.9727179809,-0.972740218268,-0.972762446696,-0.972784666182,-0.972806876726,-0.972829078328,-0.972851270989,-0.972873454707,-0.972895629482,-0.972917795315,-0.972939952206,-0.972962100153,-0.972984239157,-0.973006369217,-0.973028490334,-0.973050602507,-0.973072705735,-0.97309480002,-0.97311688536,-0.973138961755,-0.973161029206,-0.973183087711,-0.973205137271,-0.973227177886,-0.973249209555,-0.973271232278,-0.973293246055,-0.973315250885,-0.973337246769,-0.973359233707,-0.973381211697,-0.973403180741,-0.973425140837,-0.973447091985,-0.973469034186,-0.973490967439,-0.973512891744,-0.9735348071,-0.973556713508,-0.973578610967,-0.973600499478,-0.973622379039,-0.973644249651,-0.973666111313,-0.973687964026,-0.973709807788,-0.973731642601,-0.973753468463,-0.973775285375,-0.973797093336,-0.973818892346,-0.973840682405,-0.973862463512,-0.973884235668,-0.973905998872,-0.973927753125,-0.973949498425,-0.973971234773,-0.973992962168,-0.974014680611,-0.9740363901,-0.974058090637,-0.97407978222,-0.97410146485,-0.974123138525,-0.974144803247,-0.974166459015,-0.974188105829,-0.974209743688,-0.974231372592,-0.974252992541,-0.974274603536,-0.974296205575,-0.974317798658,-0.974339382786,-0.974360957957,-0.974382524173,-0.974404081432,-0.974425629735,-0.974447169081,-0.97446869947,-0.974490220902,-0.974511733377,-0.974533236894,-0.974554731454,-0.974576217056,-0.974597693699,-0.974619161384,-0.974640620111,-0.974662069879,-0.974683510689,-0.974704942539,-0.974726365429,-0.974747779361,-0.974769184333,-0.974790580344,-0.974811967396,-0.974833345488,-0.974854714619,-0.974876074789,-0.974897425999,-0.974918768247,-0.974940101534,-0.97496142586,-0.974982741224,-0.975004047627,-0.975025345067,-0.975046633545,-0.975067913061,-0.975089183614,-0.975110445204,-0.975131697831,-0.975152941495,-0.975174176196,-0.975195401933,-0.975216618706,-0.975237826516,-0.975259025361,-0.975280215241,-0.975301396158,-0.975322568109,-0.975343731095,-0.975364885117,-0.975386030173,-0.975407166263,-0.975428293388,-0.975449411546,-0.975470520739,-0.975491620965,-0.975512712225,-0.975533794518,-0.975554867844,-0.975575932204,-0.975596987595,-0.97561803402,-0.975639071476,-0.975660099965,-0.975681119486,-0.975702130039,-0.975723131623,-0.975744124238,-0.975765107885,-0.975786082562,-0.975807048271,-0.975828005009,-0.975848952779,-0.975869891578,-0.975890821408,-0.975911742267,-0.975932654156,-0.975953557075,-0.975974451022,-0.975995335999,-0.976016212005,-0.976037079039,-0.976057937102,-0.976078786193,-0.976099626312,-0.976120457459,-0.976141279634,-0.976162092836,-0.976182897066,-0.976203692322,-0.976224478606,-0.976245255916,-0.976266024253,-0.976286783617,-0.976307534006,-0.976328275422,-0.976349007863,-0.97636973133,-0.976390445822,-0.97641115134,-0.976431847883,-0.97645253545,-0.976473214042,-0.976493883659,-0.9765145443,-0.976535195965,-0.976555838653,-0.976576472366,-0.976597097102,-0.976617712862,-0.976638319644,-0.97665891745,-0.976679506278,-0.976700086129,-0.976720657002,-0.976741218897,-0.976761771815,-0.976782315754,-0.976802850715,-0.976823376697,-0.976843893701,-0.976864401725,-0.976884900771,-0.976905390837,-0.976925871924,-0.976946344031,-0.976966807158,-0.976987261305,-0.977007706471,-0.977028142658,-0.977048569863,-0.977068988088,-0.977089397332,-0.977109797595,-0.977130188876,-0.977150571176,-0.977170944494,-0.97719130883,-0.977211664184,-0.977232010555,-0.977252347944,-0.977272676351,-0.977292995774,-0.977313306214,-0.977333607671,-0.977353900145,-0.977374183635,-0.977394458142,-0.977414723664,-0.977434980202,-0.977455227756,-0.977475466325,-0.977495695909,-0.977515916509,-0.977536128123,-0.977556330752,-0.977576524396,-0.977596709053,-0.977616884725,-0.977637051411,-0.977657209111,-0.977677357825,-0.977697497551,-0.977717628291,-0.977737750044,-0.97775786281,-0.977777966588,-0.977798061379,-0.977818147183,-0.977838223998,-0.977858291825,-0.977878350664,-0.977898400515,-0.977918441377,-0.97793847325,-0.977958496134,-0.977978510029,-0.977998514935,-0.978018510851,-0.978038497777,-0.978058475713,-0.978078444659,-0.978098404615,-0.978118355581,-0.978138297556,-0.97815823054,-0.978178154533,-0.978198069534,-0.978217975545,-0.978237872564,-0.978257760591,-0.978277639626,-0.978297509669,-0.97831737072,-0.978337222778,-0.978357065843,-0.978376899916,-0.978396724996,-0.978416541082,-0.978436348175,-0.978456146275,-0.978475935381,-0.978495715492,-0.97851548661,-0.978535248733,-0.978555001862,-0.978574745997,-0.978594481136,-0.97861420728,-0.978633924429,-0.978653632583,-0.978673331741,-0.978693021904,-0.97871270307,-0.978732375241,-0.978752038415,-0.978771692592,-0.978791337773,-0.978810973957,-0.978830601144,-0.978850219334,-0.978869828527,-0.978889428721,-0.978909019919,-0.978928602118,-0.978948175319,-0.978967739522,-0.978987294726,-0.979006840932,-0.979026378139,-0.979045906347,-0.979065425556,-0.979084935765,-0.979104436975,-0.979123929185,-0.979143412395,-0.979162886606,-0.979182351816,-0.979201808025,-0.979221255234,-0.979240693442,-0.979260122649,-0.979279542855,-0.97929895406,-0.979318356263,-0.979337749464,-0.979357133664,-0.979376508861,-0.979395875057,-0.97941523225,-0.97943458044,-0.979453919628,-0.979473249812,-0.979492570994,-0.979511883172,-0.979531186347,-0.979550480518,-0.979569765685,-0.979589041849,-0.979608309008,-0.979627567163,-0.979646816313,-0.979666056459,-0.979685287599,-0.979704509735,-0.979723722866,-0.979742926991,-0.97976212211,-0.979781308224,-0.979800485331,-0.979819653433,-0.979838812528,-0.979857962617,-0.9798771037,-0.979896235775,-0.979915358843,-0.979934472905,-0.979953577958,-0.979972674005,-0.979991761043,-0.980010839074,-0.980029908097,-0.980048968112,-0.980068019118,-0.980087061115,-0.980106094104,-0.980125118084,-0.980144133055,-0.980163139016,-0.980182135968,-0.980201123911,-0.980220102843,-0.980239072766,-0.980258033678,-0.98027698558,-0.980295928472,-0.980314862353,-0.980333787223,-0.980352703082,-0.98037160993,-0.980390507767,-0.980409396592,-0.980428276405,-0.980447147207,-0.980466008996,-0.980484861773,-0.980503705538,-0.98052254029,-0.98054136603,-0.980560182756,-0.98057899047,-0.98059778917,-0.980616578857,-0.98063535953,-0.980654131189,-0.980672893834,-0.980691647465,-0.980710392082,-0.980729127685,-0.980747854272,-0.980766571845,-0.980785280403,-0.980803979946,-0.980822670473,-0.980841351985,-0.980860024482,-0.980878687962,-0.980897342426,-0.980915987874,-0.980934624306,-0.980953251721,-0.98097187012,-0.980990479502,-0.981009079866,-0.981027671213,-0.981046253543,-0.981064826856,-0.98108339115,-0.981101946427,-0.981120492686,-0.981139029926,-0.981157558148,-0.981176077352,-0.981194587536,-0.981213088702,-0.981231580849,-0.981250063976,-0.981268538084,-0.981287003172,-0.981305459241,-0.981323906289,-0.981342344318,-0.981360773326,-0.981379193314,-0.981397604281,-0.981416006227,-0.981434399152,-0.981452783057,-0.98147115794,-0.981489523801,-0.981507880641,-0.981526228459,-0.981544567255,-0.981562897028,-0.98158121778,-0.981599529509,-0.981617832215,-0.981636125899,-0.98165441056,-0.981672686197,-0.981690952811,-0.981709210402,-0.981727458969,-0.981745698512,-0.981763929031,-0.981782150526,-0.981800362996,-0.981818566443,-0.981836760864,-0.981854946261,-0.981873122632,-0.981891289979,-0.9819094483,-0.981927597595,-0.981945737865,-0.98196386911,-0.981981991328,-0.98200010452,-0.982018208685,-0.982036303824,-0.982054389937,-0.982072467022,-0.982090535081,-0.982108594113,-0.982126644117,-0.982144685093,-0.982162717042,-0.982180739963,-0.982198753856,-0.982216758721,-0.982234754558,-0.982252741366,-0.982270719146,-0.982288687896,-0.982306647618,-0.982324598311,-0.982342539974,-0.982360472608,-0.982378396212,-0.982396310786,-0.98241421633,-0.982432112845,-0.982450000328,-0.982467878782,-0.982485748205,-0.982503608597,-0.982521459958,-0.982539302287,-0.982557135586,-0.982574959853,-0.982592775089,-0.982610581292,-0.982628378464,-0.982646166604,-0.982663945711,-0.982681715786,-0.982699476829,-0.982717228838,-0.982734971815,-0.982752705758,-0.982770430669,-0.982788146546,-0.982805853389,-0.982823551199,-0.982841239974,-0.982858919716,-0.982876590423,-0.982894252096,-0.982911904735,-0.982929548339,-0.982947182908,-0.982964808441,-0.98298242494,-0.983000032403,-0.983017630831,-0.983035220223,-0.983052800579,-0.983070371899,-0.983087934184,-0.983105487431,-0.983123031642,-0.983140566817,-0.983158092955,-0.983175610055,-0.983193118119,-0.983210617145,-0.983228107134,-0.983245588085,-0.983263059999,-0.983280522874,-0.983297976712,-0.983315421511,-0.983332857272,-0.983350283994,-0.983367701677,-0.983385110322,-0.983402509927,-0.983419900493,-0.98343728202,-0.983454654507,-0.983472017955,-0.983489372362,-0.98350671773,-0.983524054058,-0.983541381345,-0.983558699591,-0.983576008797,-0.983593308962,-0.983610600087,-0.98362788217,-0.983645155211,-0.983662419212,-0.98367967417,-0.983696920087,-0.983714156962,-0.983731384795,-0.983748603586,-0.983765813334,-0.98378301404,-0.983800205703,-0.983817388323,-0.9838345619,-0.983851726434,-0.983868881924,-0.983886028371,-0.983903165774,-0.983920294134,-0.983937413449,-0.983954523721,-0.983971624948,-0.98398871713,-0.984005800268,-0.984022874361,-0.98403993941,-0.984056995413,-0.984074042371,-0.984091080283,-0.98410810915,-0.984125128972,-0.984142139747,-0.984159141476,-0.98417613416,-0.984193117797,-0.984210092387,-0.984227057931,-0.984244014428,-0.984260961878,-0.98427790028,-0.984294829636,-0.984311749944,-0.984328661205,-0.984345563418,-0.984362456583,-0.984379340699,-0.984396215768,-0.984413081789,-0.98442993876,-0.984446786684,-0.984463625558,-0.984480455383,-0.984497276159,-0.984514087886,-0.984530890564,-0.984547684192,-0.98456446877,-0.984581244298,-0.984598010776,-0.984614768204,-0.984631516582,-0.984648255909,-0.984664986185,-0.984681707411,-0.984698419586,-0.984715122709,-0.984731816781,-0.984748501802,-0.984765177771,-0.984781844688,-0.984798502554,-0.984815151367,-0.984831791128,-0.984848421837,-0.984865043494,-0.984881656097,-0.984898259648,-0.984914854146,-0.984931439591,-0.984948015982,-0.98496458332,-0.984981141605,-0.984997690835,-0.985014231012,-0.985030762135,-0.985047284204,-0.985063797218,-0.985080301178,-0.985096796083,-0.985113281933,-0.985129758728,-0.985146226469,-0.985162685154,-0.985179134783,-0.985195575357,-0.985212006876,-0.985228429338,-0.985244842745,-0.985261247095,-0.985277642389,-0.985294028626,-0.985310405807,-0.985326773932,-0.985343132999,-0.985359483009,-0.985375823962,-0.985392155858,-0.985408478696,-0.985424792476,-0.985441097199,-0.985457392864,-0.98547367947,-0.985489957018,-0.985506225508,-0.98552248494,-0.985538735312,-0.985554976626,-0.985571208881,-0.985587432076,-0.985603646213,-0.985619851289,-0.985636047307,-0.985652234264,-0.985668412162,-0.985684580999,-0.985700740776,-0.985716891493,-0.98573303315,-0.985749165746,-0.985765289281,-0.985781403755,-0.985797509168,-0.985813605519,-0.98582969281,-0.985845771038,-0.985861840206,-0.985877900311,-0.985893951354,-0.985909993335,-0.985926026254,-0.985942050111,-0.985958064905,-0.985974070636,-0.985990067304,-0.98600605491,-0.986022033452,-0.986038002931,-0.986053963346,-0.986069914698,-0.986085856986,-0.98610179021,-0.986117714371,-0.986133629467,-0.986149535498,-0.986165432465,-0.986181320368,-0.986197199206,-0.986213068979,-0.986228929686,-0.986244781329,-0.986260623906,-0.986276457418,-0.986292281864,-0.986308097245,-0.986323903559,-0.986339700807,-0.986355488989,-0.986371268105,-0.986387038154,-0.986402799137,-0.986418551053,-0.986434293902,-0.986450027683,-0.986465752398,-0.986481468045,-0.986497174625,-0.986512872136,-0.986528560581,-0.986544239957,-0.986559910265,-0.986575571505,-0.986591223676,-0.986606866779,-0.986622500813,-0.986638125778,-0.986653741675,-0.986669348502,-0.98668494626,-0.986700534949,-0.986716114568,-0.986731685117,-0.986747246597,-0.986762799007,-0.986778342346,-0.986793876615,-0.986809401814,-0.986824917943,-0.986840425,-0.986855922987,-0.986871411903,-0.986886891748,-0.986902362521,-0.986917824223,-0.986933276854,-0.986948720413,-0.9869641549,-0.986979580315,-0.986994996658,-0.987010403928,-0.987025802127,-0.987041191253,-0.987056571306,-0.987071942286,-0.987087304193,-0.987102657028,-0.987118000789,-0.987133335477,-0.987148661091,-0.987163977631,-0.987179285098,-0.987194583491,-0.987209872809,-0.987225153054,-0.987240424224,-0.987255686319,-0.98727093934,-0.987286183287,-0.987301418158,-0.987316643954,-0.987331860675,-0.987347068321,-0.987362266891,-0.987377456385,-0.987392636804,-0.987407808147,-0.987422970414,-0.987438123605,-0.987453267719,-0.987468402757,-0.987483528718,-0.987498645603,-0.98751375341,-0.987528852141,-0.987543941794,-0.987559022371,-0.987574093869,-0.987589156291,-0.987604209634,-0.9876192539,-0.987634289087,-0.987649315197,-0.987664332228,-0.987679340181,-0.987694339055,-0.987709328851,-0.987724309568,-0.987739281206,-0.987754243765,-0.987769197244,-0.987784141645,-0.987799076965,-0.987814003206,-0.987828920368,-0.987843828449,-0.987858727451,-0.987873617372,-0.987888498213,-0.987903369973,-0.987918232653,-0.987933086252,-0.98794793077,-0.987962766207,-0.987977592563,-0.987992409838,-0.988007218031,-0.988022017143,-0.988036807173,-0.988051588122,-0.988066359988,-0.988081122772,-0.988095876474,-0.988110621094,-0.988125356631,-0.988140083086,-0.988154800457,-0.988169508746,-0.988184207952,-0.988198898075,-0.988213579114,-0.98822825107,-0.988242913942,-0.988257567731,-0.988272212435,-0.988286848056,-0.988301474593,-0.988316092045,-0.988330700413,-0.988345299697,-0.988359889895,-0.988374471009,-0.988389043038,-0.988403605982,-0.988418159841,-0.988432704615,-0.988447240303,-0.988461766905,-0.988476284422,-0.988490792853,-0.988505292198,-0.988519782456,-0.988534263629,-0.988548735715,-0.988563198714,-0.988577652627,-0.988592097453,-0.988606533192,-0.988620959844,-0.988635377409,-0.988649785887,-0.988664185277,-0.98867857558,-0.988692956794,-0.988707328921,-0.98872169196,-0.988736045911,-0.988750390774,-0.988764726548,-0.988779053234,-0.988793370831,-0.988807679339,-0.988821978758,-0.988836269089,-0.98885055033,-0.988864822482,-0.988879085544,-0.988893339517,-0.9889075844,-0.988921820194,-0.988936046897,-0.98895026451,-0.988964473033,-0.988978672466,-0.988992862808,-0.98900704406,-0.989021216221,-0.989035379291,-0.98904953327,-0.989063678158,-0.989077813955,-0.98909194066,-0.989106058273,-0.989120166796,-0.989134266226,-0.989148356564,-0.989162437811,-0.989176509965,-0.989190573027,-0.989204626996,-0.989218671873,-0.989232707657,-0.989246734349,-0.989260751947,-0.989274760452,-0.989288759865,-0.989302750183,-0.989316731409,-0.989330703541,-0.989344666579,-0.989358620523,-0.989372565373,-0.989386501129,-0.989400427791,-0.989414345359,-0.989428253832,-0.989442153211,-0.989456043494,-0.989469924683,-0.989483796777,-0.989497659776,-0.989511513679,-0.989525358487,-0.9895391942,-0.989553020817,-0.989566838338,-0.989580646764,-0.989594446093,-0.989608236326,-0.989622017463,-0.989635789504,-0.989649552448,-0.989663306295,-0.989677051046,-0.989690786699,-0.989704513256,-0.989718230716,-0.989731939078,-0.989745638343,-0.98975932851,-0.98977300958,-0.989786681552,-0.989800344426,-0.989813998202,-0.989827642879,-0.989841278459,-0.98985490494,-0.989868522322,-0.989882130606,-0.989895729791,-0.989909319878,-0.989922900865,-0.989936472753,-0.989950035542,-0.989963589231,-0.989977133821,-0.989990669311,-0.990004195701,-0.990017712992,-0.990031221182,-0.990044720272,-0.990058210262,-0.990071691152,-0.990085162941,-0.990098625629,-0.990112079217,-0.990125523704,-0.990138959089,-0.990152385374,-0.990165802557,-0.990179210639,-0.99019260962,-0.990205999498,-0.990219380275,-0.99023275195,-0.990246114523,-0.990259467994,-0.990272812363,-0.99028614763,-0.990299473793,-0.990312790855,-0.990326098813,-0.990339397669,-0.990352687421,-0.990365968071,-0.990379239617,-0.99039250206,-0.9904057554,-0.990418999635,-0.990432234768,-0.990445460796,-0.99045867772,-0.99047188554,-0.990485084256,-0.990498273868,-0.990511454375,-0.990524625778,-0.990537788076,-0.990550941269,-0.990564085358,-0.990577220341,-0.990590346219,-0.990603462992,-0.990616570659,-0.990629669221,-0.990642758677,-0.990655839027,-0.990668910272,-0.99068197241,-0.990695025443,-0.990708069369,-0.990721104188,-0.990734129902,-0.990747146508,-0.990760154008,-0.990773152401,-0.990786141687,-0.990799121866,-0.990812092938,-0.990825054902,-0.990838007759,-0.990850951508,-0.99086388615,-0.990876811684,-0.99088972811,-0.990902635428,-0.990915533638,-0.990928422739,-0.990941302732,-0.990954173617,-0.990967035392,-0.99097988806,-0.990992731618,-0.991005566067,-0.991018391407,-0.991031207638,-0.99104401476,-0.991056812772,-0.991069601674,-0.991082381467,-0.99109515215,-0.991107913723,-0.991120666186,-0.991133409539,-0.991146143782,-0.991158868914,-0.991171584936,-0.991184291847,-0.991196989647,-0.991209678336,-0.991222357915,-0.991235028382,-0.991247689738,-0.991260341983,-0.991272985116,-0.991285619138,-0.991298244048,-0.991310859846,-0.991323466532,-0.991336064107,-0.991348652569,-0.991361231919,-0.991373802156,-0.991386363281,-0.991398915294,-0.991411458193,-0.99142399198,-0.991436516654,-0.991449032215,-0.991461538662,-0.991474035997,-0.991486524218,-0.991499003325,-0.991511473319,-0.991523934199,-0.991536385965,-0.991548828617,-0.991561262155,-0.991573686579,-0.991586101888,-0.991598508083,-0.991610905163,-0.991623293129,-0.99163567198,-0.991648041716,-0.991660402337,-0.991672753843,-0.991685096234,-0.991697429509,-0.991709753669,-0.991722068713,-0.991734374642,-0.991746671455,-0.991758959152,-0.991771237732,-0.991783507197,-0.991795767545,-0.991808018777,-0.991820260893,-0.991832493892,-0.991844717774,-0.991856932539,-0.991869138188,-0.991881334719,-0.991893522134,-0.991905700431,-0.99191786961,-0.991930029672,-0.991942180617,-0.991954322444,-0.991966455153,-0.991978578744,-0.991990693216,-0.992002798571,-0.992014894808,-0.992026981926,-0.992039059925,-0.992051128806,-0.992063188569,-0.992075239212,-0.992087280737,-0.992099313142,-0.992111336428,-0.992123350596,-0.992135355643,-0.992147351571,-0.99215933838,-0.992171316069,-0.992183284638,-0.992195244087,-0.992207194416,-0.992219135625,-0.992231067713,-0.992242990681,-0.992254904529,-0.992266809256,-0.992278704863,-0.992290591348,-0.992302468713,-0.992314336957,-0.992326196079,-0.99233804608,-0.99234988696,-0.992361718719,-0.992373541356,-0.992385354871,-0.992397159264,-0.992408954536,-0.992420740685,-0.992432517713,-0.992444285618,-0.992456044401,-0.992467794061,-0.992479534599,-0.992491266014,-0.992502988306,-0.992514701476,-0.992526405522,-0.992538100446,-0.992549786246,-0.992561462923,-0.992573130476,-0.992584788906,-0.992596438213,-0.992608078395,-0.992619709454,-0.992631331389,-0.9926429442,-0.992654547887,-0.992666142449,-0.992677727887,-0.9926893042,-0.992700871389,-0.992712429454,-0.992723978393,-0.992735518208,-0.992747048897,-0.992758570462,-0.992770082901,-0.992781586215,-0.992793080403,-0.992804565466,-0.992816041403,-0.992827508215,-0.9928389659,-0.99285041446,-0.992861853893,-0.992873284201,-0.992884705382,-0.992896117437,-0.992907520365,-0.992918914167,-0.992930298842,-0.99294167439,-0.992953040811,-0.992964398105,-0.992975746273,-0.992987085312,-0.992998415225,-0.99300973601,-0.993021047668,-0.993032350198,-0.9930436436,-0.993054927875,-0.993066203021,-0.993077469039,-0.99308872593,-0.993099973692,-0.993111212325,-0.99312244183,-0.993133662207,-0.993144873455,-0.993156075574,-0.993167268564,-0.993178452426,-0.993189627158,-0.993200792761,-0.993211949235,-0.993223096579,-0.993234234794,-0.993245363879,-0.993256483835,-0.993267594661,-0.993278696356,-0.993289788922,-0.993300872358,-0.993311946664,-0.993323011839,-0.993334067884,-0.993345114798,-0.993356152582,-0.993367181235,-0.993378200757,-0.993389211148,-0.993400212408,-0.993411204537,-0.993422187535,-0.993433161402,-0.993444126137,-0.993455081741,-0.993466028213,-0.993476965553,-0.993487893761,-0.993498812838,-0.993509722782,-0.993520623595,-0.993531515275,-0.993542397822,-0.993553271238,-0.993564135521,-0.993574990671,-0.993585836688,-0.993596673573,-0.993607501325,-0.993618319943,-0.993629129429,-0.993639929781,-0.993650721,-0.993661503086,-0.993672276038,-0.993683039856,-0.993693794541,-0.993704540092,-0.993715276509,-0.993726003792,-0.993736721941,-0.993747430955,-0.993758130836,-0.993768821582,-0.993779503193,-0.99379017567,-0.993800839012,-0.993811493219,-0.993822138292,-0.993832774229,-0.993843401031,-0.993854018698,-0.99386462723,-0.993875226626,-0.993885816887,-0.993896398013,-0.993906970002,-0.993917532856,-0.993928086574,-0.993938631156,-0.993949166602,-0.993959692912,-0.993970210085,-0.993980718123,-0.993991217023,-0.994001706787,-0.994012187415,-0.994022658906,-0.99403312126,-0.994043574477,-0.994054018557,-0.994064453499,-0.994074879305,-0.994085295973,-0.994095703504,-0.994106101897,-0.994116491153,-0.994126871271,-0.994137242251,-0.994147604093,-0.994157956798,-0.994168300364,-0.994178634792,-0.994188960082,-0.994199276233,-0.994209583246,-0.994219881121,-0.994230169856,-0.994240449453,-0.994250719911,-0.99426098123,-0.994271233411,-0.994281476452,-0.994291710353,-0.994301935116,-0.994312150739,-0.994322357223,-0.994332554567,-0.994342742771,-0.994352921835,-0.99436309176,-0.994373252545,-0.994383404189,-0.994393546694,-0.994403680058,-0.994413804281,-0.994423919365,-0.994434025308,-0.99444412211,-0.994454209771,-0.994464288292,-0.994474357672,-0.994484417911,-0.994494469008,-0.994504510965,-0.99451454378,-0.994524567454,-0.994534581987,-0.994544587377,-0.994554583627,-0.994564570734,-0.9945745487,-0.994584517524,-0.994594477206,-0.994604427745,-0.994614369143,-0.994624301398,-0.994634224511,-0.994644138481,-0.994654043309,-0.994663938994,-0.994673825536,-0.994683702936,-0.994693571193,-0.994703430306,-0.994713280277,-0.994723121104,-0.994732952788,-0.994742775329,-0.994752588726,-0.99476239298,-0.99477218809,-0.994781974057,-0.994791750879,-0.994801518558,-0.994811277092,-0.994821026483,-0.994830766729,-0.994840497831,-0.994850219789,-0.994859932602,-0.994869636271,-0.994879330795,-0.994889016174,-0.994898692409,-0.994908359498,-0.994918017443,-0.994927666243,-0.994937305897,-0.994946936406,-0.99495655777,-0.994966169989,-0.994975773061,-0.994985366989,-0.99499495177,-0.995004527406,-0.995014093896,-0.99502365124,-0.995033199438,-0.99504273849,-0.995052268396,-0.995061789155,-0.995071300768,-0.995080803234,-0.995090296554,-0.995099780727,-0.995109255754,-0.995118721633,-0.995128178366,-0.995137625952,-0.99514706439,-0.995156493682,-0.995165913826,-0.995175324823,-0.995184726672,-0.995194119374,-0.995203502928,-0.995212877335,-0.995222242594,-0.995231598705,-0.995240945667,-0.995250283482,-0.995259612149,-0.995268931668,-0.995278242038,-0.99528754326,-0.995296835333,-0.995306118258,-0.995315392034,-0.995324656662,-0.99533391214,-0.99534315847,-0.995352395651,-0.995361623683,-0.995370842565,-0.995380052299,-0.995389252883,-0.995398444317,-0.995407626603,-0.995416799738,-0.995425963724,-0.99543511856,-0.995444264247,-0.995453400783,-0.995462528169,-0.995471646406,-0.995480755492,-0.995489855428,-0.995498946213,-0.995508027849,-0.995517100333,-0.995526163668,-0.995535217851,-0.995544262884,-0.995553298766,-0.995562325497,-0.995571343077,-0.995580351506,-0.995589350783,-0.99559834091,-0.995607321885,-0.995616293709,-0.995625256381,-0.995634209902,-0.995643154271,-0.995652089488,-0.995661015554,-0.995669932467,-0.995678840229,-0.995687738838,-0.995696628296,-0.995705508601,-0.995714379754,-0.995723241754,-0.995732094602,-0.995740938298,-0.99574977284,-0.99575859823,-0.995767414468,-0.995776221552,-0.995785019483,-0.995793808262,-0.995802587887,-0.995811358359,-0.995820119678,-0.995828871843,-0.995837614855,-0.995846348714,-0.995855073419,-0.99586378897,-0.995872495367,-0.995881192611,-0.9958898807,-0.995898559636,-0.995907229417,-0.995915890045,-0.995924541518,-0.995933183837,-0.995941817001,-0.995950441011,-0.995959055866,-0.995967661567,-0.995976258113,-0.995984845504,-0.99599342374,-0.996001992822,-0.996010552748,-0.996019103519,-0.996027645135,-0.996036177596,-0.996044700901,-0.996053215051,-0.996061720046,-0.996070215884,-0.996078702568,-0.996087180095,-0.996095648467,-0.996104107682,-0.996112557742,-0.996120998646,-0.996129430393,-0.996137852985,-0.99614626642,-0.996154670699,-0.996163065821,-0.996171451787,-0.996179828596,-0.996188196248,-0.996196554744,-0.996204904083,-0.996213244265,-0.99622157529,-0.996229897158,-0.996238209869,-0.996246513422,-0.996254807819,-0.996263093058,-0.996271369139,-0.996279636063,-0.99628789383,-0.996296142438,-0.99630438189,-0.996312612183,-0.996320833318,-0.996329045295,-0.996337248115,-0.996345441776,-0.996353626279,-0.996361801624,-0.99636996781,-0.996378124838,-0.996386272708,-0.996394411419,-0.996402540971,-0.996410661364,-0.996418772599,-0.996426874675,-0.996434967592,-0.99644305135,-0.996451125949,-0.996459191389,-0.996467247669,-0.99647529479,-0.996483332752,-0.996491361554,-0.996499381197,-0.99650739168,-0.996515393004,-0.996523385167,-0.996531368171,-0.996539342015,-0.996547306699,-0.996555262223,-0.996563208587,-0.996571145791,-0.996579073834,-0.996586992717,-0.99659490244,-0.996602803002,-0.996610694403,-0.996618576644,-0.996626449724,-0.996634313644,-0.996642168402,-0.996650014,-0.996657850437,-0.996665677712,-0.996673495827,-0.99668130478,-0.996689104572,-0.996696895203,-0.996704676672,-0.99671244898,-0.996720212126,-0.996727966111,-0.996735710933,-0.996743446594,-0.996751173094,-0.996758890431,-0.996766598606,-0.996774297619,-0.99678198747,-0.996789668159,-0.996797339686,-0.99680500205,-0.996812655252,-0.996820299291,-0.996827934168,-0.996835559882,-0.996843176434,-0.996850783822,-0.996858382048,-0.996865971111,-0.996873551011,-0.996881121748,-0.996888683322,-0.996896235732,-0.99690377898,-0.996911313064,-0.996918837984,-0.996926353741,-0.996933860335,-0.996941357765,-0.996948846031,-0.996956325134,-0.996963795073,-0.996971255848,-0.996978707459,-0.996986149906,-0.996993583189,-0.997001007307,-0.997008422262,-0.997015828052,-0.997023224678,-0.997030612139,-0.997037990436,-0.997045359569,-0.997052719536,-0.997060070339,-0.997067411978,-0.997074744451,-0.99708206776,-0.997089381903,-0.997096686882,-0.997103982696,-0.997111269344,-0.997118546827,-0.997125815145,-0.997133074297,-0.997140324284,-0.997147565106,-0.997154796762,-0.997162019252,-0.997169232576,-0.997176436735,-0.997183631728,-0.997190817555,-0.997197994217,-0.997205161712,-0.997212320041,-0.997219469204,-0.9972266092,-0.99723374003,-0.997240861694,-0.997247974192,-0.997255077523,-0.997262171688,-0.997269256685,-0.997276332517,-0.997283399181,-0.997290456679,-0.997297505009,-0.997304544173,-0.99731157417,-0.997318595,-0.997325606662,-0.997332609158,-0.997339602486,-0.997346586647,-0.99735356164,-0.997360527466,-0.997367484124,-0.997374431615,-0.997381369938,-0.997388299094,-0.997395219081,-0.997402129901,-0.997409031553,-0.997415924037,-0.997422807353,-0.997429681501,-0.997436546481,-0.997443402292,-0.997450248935,-0.99745708641,-0.997463914716,-0.997470733854,-0.997477543824,-0.997484344624,-0.997491136257,-0.99749791872,-0.997504692015,-0.99751145614,-0.997518211097,-0.997524956885,-0.997531693504,-0.997538420954,-0.997545139234,-0.997551848346,-0.997558548288,-0.99756523906,-0.997571920664,-0.997578593098,-0.997585256362,-0.997591910457,-0.997598555382,-0.997605191137,-0.997611817723,-0.997618435139,-0.997625043384,-0.99763164246,-0.997638232366,-0.997644813102,-0.997651384668,-0.997657947063,-0.997664500289,-0.997671044343,-0.997677579228,-0.997684104942,-0.997690621486,-0.997697128859,-0.997703627061,-0.997710116093,-0.997716595954,-0.997723066644,-0.997729528164,-0.997735980512,-0.997742423689,-0.997748857696,-0.997755282531,-0.997761698195,-0.997768104688,-0.99777450201,-0.997780890161,-0.99778726914,-0.997793638947,-0.997799999583,-0.997806351048,-0.99781269334,-0.997819026462,-0.997825350411,-0.997831665189,-0.997837970795,-0.997844267228,-0.99785055449,-0.99785683258,-0.997863101498,-0.997869361244,-0.997875611817,-0.997881853218,-0.997888085447,-0.997894308504,-0.997900522388,-0.997906727099,-0.997912922638,-0.997919109005,-0.997925286199,-0.99793145422,-0.997937613068,-0.997943762743,-0.997949903246,-0.997956034576,-0.997962156732,-0.997968269716,-0.997974373526,-0.997980468164,-0.997986553628,-0.997992629919,-0.997998697036,-0.99800475498,-0.998010803751,-0.998016843348,-0.998022873771,-0.998028895021,-0.998034907098,-0.99804091,-0.998046903729,-0.998052888284,-0.998058863665,-0.998064829872,-0.998070786905,-0.998076734765,-0.99808267345,-0.99808860296,-0.998094523297,-0.998100434459,-0.998106336447,-0.998112229261,-0.9981181129,-0.998123987365,-0.998129852655,-0.998135708771,-0.998141555712,-0.998147393478,-0.998153222069,-0.998159041486,-0.998164851728,-0.998170652795,-0.998176444686,-0.998182227403,-0.998188000945,-0.998193765312,-0.998199520503,-0.99820526652,-0.99821100336,-0.998216731026,-0.998222449516,-0.998228158831,-0.99823385897,-0.998239549934,-0.998245231722,-0.998250904335,-0.998256567771,-0.998262222032,-0.998267867118,-0.998273503027,-0.99827912976,-0.998284747318,-0.998290355699,-0.998295954905,-0.998301544934,-0.998307125787,-0.998312697464,-0.998318259964,-0.998323813289,-0.998329357436,-0.998334892408,-0.998340418203,-0.998345934821,-0.998351442263,-0.998356940528,-0.998362429617,-0.998367909529,-0.998373380264,-0.998378841822,-0.998384294203,-0.998389737407,-0.998395171435,-0.998400596285,-0.998406011958,-0.998411418454,-0.998416815773,-0.998422203915,-0.998427582879,-0.998432952667,-0.998438313276,-0.998443664708,-0.998449006963,-0.998454340041,-0.99845966394,-0.998464978662,-0.998470284207,-0.998475580573,-0.998480867762,-0.998486145773,-0.998491414606,-0.998496674262,-0.998501924739,-0.998507166038,-0.99851239816,-0.998517621103,-0.998522834868,-0.998528039454,-0.998533234863,-0.998538421093,-0.998543598145,-0.998548766018,-0.998553924713,-0.99855907423,-0.998564214568,-0.998569345727,-0.998574467708,-0.99857958051,-0.998584684133,-0.998589778578,-0.998594863843,-0.99859993993,-0.998605006838,-0.998610064567,-0.998615113117,-0.998620152488,-0.99862518268,-0.998630203693,-0.998635215526,-0.99864021818,-0.998645211655,-0.998650195951,-0.998655171067,-0.998660137004,-0.998665093761,-0.998670041339,-0.998674979737,-0.998679908956,-0.998684828995,-0.998689739854,-0.998694641534,-0.998699534034,-0.998704417353,-0.998709291494,-0.998714156454,-0.998719012234,-0.998723858834,-0.998728696254,-0.998733524494,-0.998738343554,-0.998743153434,-0.998747954133,-0.998752745652,-0.998757527991,-0.99876230115,-0.998767065128,-0.998771819925,-0.998776565542,-0.998781301979,-0.998786029235,-0.99879074731,-0.998795456205,-0.998800155919,-0.998804846452,-0.998809527805,-0.998814199976,-0.998818862967,-0.998823516777,-0.998828161406,-0.998832796854,-0.99883742312,-0.998842040206,-0.99884664811,-0.998851246834,-0.998855836376,-0.998860416737,-0.998864987916,-0.998869549914,-0.998874102731,-0.998878646366,-0.99888318082,-0.998887706093,-0.998892222183,-0.998896729092,-0.99890122682,-0.998905715366,-0.99891019473,-0.998914664912,-0.998919125913,-0.998923577731,-0.998928020368,-0.998932453823,-0.998936878096,-0.998941293187,-0.998945699096,-0.998950095822,-0.998954483367,-0.998958861729,-0.99896323091,-0.998967590908,-0.998971941723,-0.998976283356,-0.998980615807,-0.998984939076,-0.998989253162,-0.998993558066,-0.998997853787,-0.999002140325,-0.999006417681,-0.999010685854,-0.999014944845,-0.999019194652,-0.999023435277,-0.99902766672,-0.999031888979,-0.999036102055,-0.999040305949,-0.999044500659,-0.999048686187,-0.999052862532,-0.999057029693,-0.999061187671,-0.999065336466,-0.999069476078,-0.999073606507,-0.999077727753,-0.999081839815,-0.999085942694,-0.999090036389,-0.999094120901,-0.99909819623,-0.999102262375,-0.999106319336,-0.999110367114,-0.999114405709,-0.999118435119,-0.999122455346,-0.99912646639,-0.999130468249,-0.999134460925,-0.999138444417,-0.999142418725,-0.999146383849,-0.999150339789,-0.999154286545,-0.999158224118,-0.999162152506,-0.99916607171,-0.99916998173,-0.999173882566,-0.999177774217,-0.999181656685,-0.999185529968,-0.999189394067,-0.999193248981,-0.999197094711,-0.999200931257,-0.999204758618,-0.999208576795,-0.999212385787,-0.999216185595,-0.999219976218,-0.999223757657,-0.999227529911,-0.99923129298,-0.999235046865,-0.999238791564,-0.999242527079,-0.999246253409,-0.999249970555,-0.999253678515,-0.999257377291,-0.999261066881,-0.999264747287,-0.999268418507,-0.999272080543,-0.999275733393,-0.999279377058,-0.999283011538,-0.999286636833,-0.999290252943,-0.999293859867,-0.999297457606,-0.99930104616,-0.999304625528,-0.999308195711,-0.999311756709,-0.999315308521,-0.999318851147,-0.999322384588,-0.999325908844,-0.999329423914,-0.999332929798,-0.999336426497,-0.99933991401,-0.999343392337,-0.999346861478,-0.999350321434,-0.999353772204,-0.999357213788,-0.999360646186,-0.999364069399,-0.999367483425,-0.999370888265,-0.99937428392,-0.999377670388,-0.99938104767,-0.999384415766,-0.999387774676,-0.9993911244,-0.999394464938,-0.99939779629,-0.999401118455,-0.999404431434,-0.999407735226,-0.999411029833,-0.999414315253,-0.999417591486,-0.999420858533,-0.999424116394,-0.999427365068,-0.999430604555,-0.999433834857,-0.999437055971,-0.999440267899,-0.99944347064,-0.999446664195,-0.999449848562,-0.999453023744,-0.999456189738,-0.999459346546,-0.999462494166,-0.9994656326,-0.999468761847,-0.999471881907,-0.999474992781,-0.999478094467,-0.999481186966,-0.999484270278,-0.999487344404,-0.999490409342,-0.999493465093,-0.999496511657,-0.999499549033,-0.999502577223,-0.999505596225,-0.99950860604,-0.999511606668,-0.999514598109,-0.999517580362,-0.999520553428,-0.999523517306,-0.999526471997,-0.999529417501,-0.999532353817,-0.999535280946,-0.999538198887,-0.999541107641,-0.999544007207,-0.999546897585,-0.999549778776,-0.999552650779,-0.999555513595,-0.999558367223,-0.999561211663,-0.999564046915,-0.99956687298,-0.999569689857,-0.999572497546,-0.999575296047,-0.99957808536,-0.999580865485,-0.999583636423,-0.999586398172,-0.999589150734,-0.999591894107,-0.999594628292,-0.99959735329,-0.999600069099,-0.99960277572,-0.999605473153,-0.999608161398,-0.999610840455,-0.999613510323,-0.999616171003,-0.999618822495,-0.999621464799,-0.999624097914,-0.999626721841,-0.99962933658,-0.99963194213,-0.999634538492,-0.999637125666,-0.999639703651,-0.999642272447,-0.999644832055,-0.999647382475,-0.999649923706,-0.999652455748,-0.999654978602,-0.999657492267,-0.999659996744,-0.999662492032,-0.999664978131,-0.999667455042,-0.999669922763,-0.999672381297,-0.999674830641,-0.999677270796,-0.999679701763,-0.999682123541,-0.99968453613,-0.99968693953,-0.999689333741,-0.999691718763,-0.999694094597,-0.999696461241,-0.999698818696,-0.999701166963,-0.99970350604,-0.999705835928,-0.999708156627,-0.999710468137,-0.999712770458,-0.99971506359,-0.999717347532,-0.999719622286,-0.99972188785,-0.999724144225,-0.999726391411,-0.999728629407,-0.999730858214,-0.999733077832,-0.999735288261,-0.9997374895,-0.999739681549,-0.99974186441,-0.999744038081,-0.999746202562,-0.999748357855,-0.999750503957,-0.99975264087,-0.999754768594,-0.999756887128,-0.999758996472,-0.999761096627,-0.999763187593,-0.999765269369,-0.999767341955,-0.999769405351,-0.999771459558,-0.999773504575,-0.999775540403,-0.99977756704,-0.999779584488,-0.999781592747,-0.999783591815,-0.999785581694,-0.999787562382,-0.999789533881,-0.999791496191,-0.99979344931,-0.999795393239,-0.999797327979,-0.999799253528,-0.999801169888,-0.999803077058,-0.999804975037,-0.999806863827,-0.999808743427,-0.999810613836,-0.999812475056,-0.999814327085,-0.999816169925,-0.999818003574,-0.999819828034,-0.999821643303,-0.999823449382,-0.99982524627,-0.999827033969,-0.999828812478,-0.999830581796,-0.999832341924,-0.999834092862,-0.999835834609,-0.999837567166,-0.999839290533,-0.99984100471,-0.999842709696,-0.999844405492,-0.999846092098,-0.999847769513,-0.999849437738,-0.999851096772,-0.999852746616,-0.99985438727,-0.999856018733,-0.999857641006,-0.999859254088,-0.99986085798,-0.999862452681,-0.999864038192,-0.999865614512,-0.999867181641,-0.999868739581,-0.999870288329,-0.999871827887,-0.999873358254,-0.999874879431,-0.999876391417,-0.999877894212,-0.999879387817,-0.999880872231,-0.999882347454,-0.999883813487,-0.999885270329,-0.99988671798,-0.99988815644,-0.99988958571,-0.999891005789,-0.999892416677,-0.999893818374,-0.999895210881,-0.999896594197,-0.999897968321,-0.999899333256,-0.999900688999,-0.999902035551,-0.999903372912,-0.999904701083,-0.999906020062,-0.999907329851,-0.999908630449,-0.999909921856,-0.999911204071,-0.999912477096,-0.99991374093,-0.999914995573,-0.999916241025,-0.999917477286,-0.999918704356,-0.999919922235,-0.999921130922,-0.999922330419,-0.999923520725,-0.999924701839,-0.999925873763,-0.999927036495,-0.999928190036,-0.999929334386,-0.999930469545,-0.999931595513,-0.99993271229,-0.999933819875,-0.99993491827,-0.999936007473,-0.999937087485,-0.999938158305,-0.999939219935,-0.999940272373,-0.99994131562,-0.999942349676,-0.999943374541,-0.999944390214,-0.999945396696,-0.999946393987,-0.999947382086,-0.999948360994,-0.999949330711,-0.999950291236,-0.999951242571,-0.999952184714,-0.999953117665,-0.999954041425,-0.999954955994,-0.999955861371,-0.999956757557,-0.999957644552,-0.999958522355,-0.999959390967,-0.999960250387,-0.999961100616,-0.999961941654,-0.9999627735,-0.999963596155,-0.999964409618,-0.99996521389,-0.99996600897,-0.999966794859,-0.999967571556,-0.999968339062,-0.999969097377,-0.9999698465,-0.999970586431,-0.999971317171,-0.999972038719,-0.999972751076,-0.999973454241,-0.999974148215,-0.999974832997,-0.999975508588,-0.999976174987,-0.999976832194,-0.99997748021,-0.999978119035,-0.999978748667,-0.999979369109,-0.999979980358,-0.999980582416,-0.999981175283,-0.999981758957,-0.999982333441,-0.999982898732,-0.999983454832,-0.99998400174,-0.999984539457,-0.999985067982,-0.999985587315,-0.999986097457,-0.999986598407,-0.999987090165,-0.999987572732,-0.999988046107,-0.99998851029,-0.999988965282,-0.999989411082,-0.99998984769,-0.999990275107,-0.999990693332,-0.999991102365,-0.999991502206,-0.999991892856,-0.999992274314,-0.999992646581,-0.999993009655,-0.999993363538,-0.99999370823,-0.999994043729,-0.999994370037,-0.999994687153,-0.999994995077,-0.99999529381,-0.99999558335,-0.999995863699,-0.999996134857,-0.999996396822,-0.999996649596,-0.999996893178,-0.999997127568,-0.999997352767,-0.999997568774,-0.999997775589,-0.999997973212,-0.999998161643,-0.999998340883,-0.999998510931,-0.999998671787,-0.999998823452,-0.999998965924,-0.999999099205,-0.999999223294,-0.999999338192,-0.999999443897,-0.999999540411,-0.999999627733,-0.999999705863,-0.999999774801,-0.999999834548,-0.999999885103,-0.999999926466,-0.999999958637,-0.999999981616,-0.999999995404,-1.0,-0.999999995404,-0.999999981616,-0.999999958637,-0.999999926466,-0.999999885103,-0.999999834548,-0.999999774801,-0.999999705863,-0.999999627733,-0.999999540411,-0.999999443897,-0.999999338192,-0.999999223294,-0.999999099205,-0.999998965924,-0.999998823452,-0.999998671787,-0.999998510931,-0.999998340883,-0.999998161643,-0.999997973212,-0.999997775589,-0.999997568774,-0.999997352767,-0.999997127568,-0.999996893178,-0.999996649596,-0.999996396822,-0.999996134857,-0.999995863699,-0.99999558335,-0.99999529381,-0.999994995077,-0.999994687153,-0.999994370037,-0.999994043729,-0.99999370823,-0.999993363538,-0.999993009655,-0.999992646581,-0.999992274314,-0.999991892856,-0.999991502206,-0.999991102365,-0.999990693332,-0.999990275107,-0.99998984769,-0.999989411082,-0.999988965282,-0.99998851029,-0.999988046107,-0.999987572732,-0.999987090165,-0.999986598407,-0.999986097457,-0.999985587315,-0.999985067982,-0.999984539457,-0.99998400174,-0.999983454832,-0.999982898732,-0.999982333441,-0.999981758957,-0.999981175283,-0.999980582416,-0.999979980358,-0.999979369109,-0.999978748667,-0.999978119035,-0.99997748021,-0.999976832194,-0.999976174987,-0.999975508588,-0.999974832997,-0.999974148215,-0.999973454241,-0.999972751076,-0.999972038719,-0.999971317171,-0.999970586431,-0.9999698465,-0.999969097377,-0.999968339062,-0.999967571556,-0.999966794859,-0.99996600897,-0.99996521389,-0.999964409618,-0.999963596155,-0.9999627735,-0.999961941654,-0.999961100616,-0.999960250387,-0.999959390967,-0.999958522355,-0.999957644552,-0.999956757557,-0.999955861371,-0.999954955994,-0.999954041425,-0.999953117665,-0.999952184714,-0.999951242571,-0.999950291236,-0.999949330711,-0.999948360994,-0.999947382086,-0.999946393987,-0.999945396696,-0.999944390214,-0.999943374541,-0.999942349676,-0.99994131562,-0.999940272373,-0.999939219935,-0.999938158305,-0.999937087485,-0.999936007473,-0.99993491827,-0.999933819875,-0.99993271229,-0.999931595513,-0.999930469545,-0.999929334386,-0.999928190036,-0.999927036495,-0.999925873763,-0.999924701839,-0.999923520725,-0.999922330419,-0.999921130922,-0.999919922235,-0.999918704356,-0.999917477286,-0.999916241025,-0.999914995573,-0.99991374093,-0.999912477096,-0.999911204071,-0.999909921856,-0.999908630449,-0.999907329851,-0.999906020062,-0.999904701083,-0.999903372912,-0.999902035551,-0.999900688999,-0.999899333256,-0.999897968321,-0.999896594197,-0.999895210881,-0.999893818374,-0.999892416677,-0.999891005789,-0.99988958571,-0.99988815644,-0.99988671798,-0.999885270329,-0.999883813487,-0.999882347454,-0.999880872231,-0.999879387817,-0.999877894212,-0.999876391417,-0.999874879431,-0.999873358254,-0.999871827887,-0.999870288329,-0.999868739581,-0.999867181641,-0.999865614512,-0.999864038192,-0.999862452681,-0.99986085798,-0.999859254088,-0.999857641006,-0.999856018733,-0.99985438727,-0.999852746616,-0.999851096772,-0.999849437738,-0.999847769513,-0.999846092098,-0.999844405492,-0.999842709696,-0.99984100471,-0.999839290533,-0.999837567166,-0.999835834609,-0.999834092862,-0.999832341924,-0.999830581796,-0.999828812478,-0.999827033969,-0.99982524627,-0.999823449382,-0.999821643303,-0.999819828034,-0.999818003574,-0.999816169925,-0.999814327085,-0.999812475056,-0.999810613836,-0.999808743427,-0.999806863827,-0.999804975037,-0.999803077058,-0.999801169888,-0.999799253528,-0.999797327979,-0.999795393239,-0.99979344931,-0.999791496191,-0.999789533881,-0.999787562382,-0.999785581694,-0.999783591815,-0.999781592747,-0.999779584488,-0.99977756704,-0.999775540403,-0.999773504575,-0.999771459558,-0.999769405351,-0.999767341955,-0.999765269369,-0.999763187593,-0.999761096627,-0.999758996472,-0.999756887128,-0.999754768594,-0.99975264087,-0.999750503957,-0.999748357855,-0.999746202562,-0.999744038081,-0.99974186441,-0.999739681549,-0.9997374895,-0.999735288261,-0.999733077832,-0.999730858214,-0.999728629407,-0.999726391411,-0.999724144225,-0.99972188785,-0.999719622286,-0.999717347532,-0.99971506359,-0.999712770458,-0.999710468137,-0.999708156627,-0.999705835928,-0.99970350604,-0.999701166963,-0.999698818696,-0.999696461241,-0.999694094597,-0.999691718763,-0.999689333741,-0.99968693953,-0.99968453613,-0.999682123541,-0.999679701763,-0.999677270796,-0.999674830641,-0.999672381297,-0.999669922763,-0.999667455042,-0.999664978131,-0.999662492032,-0.999659996744,-0.999657492267,-0.999654978602,-0.999652455748,-0.999649923706,-0.999647382475,-0.999644832055,-0.999642272447,-0.999639703651,-0.999637125666,-0.999634538492,-0.99963194213,-0.99962933658,-0.999626721841,-0.999624097914,-0.999621464799,-0.999618822495,-0.999616171003,-0.999613510323,-0.999610840455,-0.999608161398,-0.999605473153,-0.99960277572,-0.999600069099,-0.99959735329,-0.999594628292,-0.999591894107,-0.999589150734,-0.999586398172,-0.999583636423,-0.999580865485,-0.99957808536,-0.999575296047,-0.999572497546,-0.999569689857,-0.99956687298,-0.999564046915,-0.999561211663,-0.999558367223,-0.999555513595,-0.999552650779,-0.999549778776,-0.999546897585,-0.999544007207,-0.999541107641,-0.999538198887,-0.999535280946,-0.999532353817,-0.999529417501,-0.999526471997,-0.999523517306,-0.999520553428,-0.999517580362,-0.999514598109,-0.999511606668,-0.99950860604,-0.999505596225,-0.999502577223,-0.999499549033,-0.999496511657,-0.999493465093,-0.999490409342,-0.999487344404,-0.999484270278,-0.999481186966,-0.999478094467,-0.999474992781,-0.999471881907,-0.999468761847,-0.9994656326,-0.999462494166,-0.999459346546,-0.999456189738,-0.999453023744,-0.999449848562,-0.999446664195,-0.99944347064,-0.999440267899,-0.999437055971,-0.999433834857,-0.999430604555,-0.999427365068,-0.999424116394,-0.999420858533,-0.999417591486,-0.999414315253,-0.999411029833,-0.999407735226,-0.999404431434,-0.999401118455,-0.99939779629,-0.999394464938,-0.9993911244,-0.999387774676,-0.999384415766,-0.99938104767,-0.999377670388,-0.99937428392,-0.999370888265,-0.999367483425,-0.999364069399,-0.999360646186,-0.999357213788,-0.999353772204,-0.999350321434,-0.999346861478,-0.999343392337,-0.99933991401,-0.999336426497,-0.999332929798,-0.999329423914,-0.999325908844,-0.999322384588,-0.999318851147,-0.999315308521,-0.999311756709,-0.999308195711,-0.999304625528,-0.99930104616,-0.999297457606,-0.999293859867,-0.999290252943,-0.999286636833,-0.999283011538,-0.999279377058,-0.999275733393,-0.999272080543,-0.999268418507,-0.999264747287,-0.999261066881,-0.999257377291,-0.999253678515,-0.999249970555,-0.999246253409,-0.999242527079,-0.999238791564,-0.999235046865,-0.99923129298,-0.999227529911,-0.999223757657,-0.999219976218,-0.999216185595,-0.999212385787,-0.999208576795,-0.999204758618,-0.999200931257,-0.999197094711,-0.999193248981,-0.999189394067,-0.999185529968,-0.999181656685,-0.999177774217,-0.999173882566,-0.99916998173,-0.99916607171,-0.999162152506,-0.999158224118,-0.999154286545,-0.999150339789,-0.999146383849,-0.999142418725,-0.999138444417,-0.999134460925,-0.999130468249,-0.99912646639,-0.999122455346,-0.999118435119,-0.999114405709,-0.999110367114,-0.999106319336,-0.999102262375,-0.99909819623,-0.999094120901,-0.999090036389,-0.999085942694,-0.999081839815,-0.999077727753,-0.999073606507,-0.999069476078,-0.999065336466,-0.999061187671,-0.999057029693,-0.999052862532,-0.999048686187,-0.999044500659,-0.999040305949,-0.999036102055,-0.999031888979,-0.99902766672,-0.999023435277,-0.999019194652,-0.999014944845,-0.999010685854,-0.999006417681,-0.999002140325,-0.998997853787,-0.998993558066,-0.998989253162,-0.998984939076,-0.998980615807,-0.998976283356,-0.998971941723,-0.998967590908,-0.99896323091,-0.998958861729,-0.998954483367,-0.998950095822,-0.998945699096,-0.998941293187,-0.998936878096,-0.998932453823,-0.998928020368,-0.998923577731,-0.998919125913,-0.998914664912,-0.99891019473,-0.998905715366,-0.99890122682,-0.998896729092,-0.998892222183,-0.998887706093,-0.99888318082,-0.998878646366,-0.998874102731,-0.998869549914,-0.998864987916,-0.998860416737,-0.998855836376,-0.998851246834,-0.99884664811,-0.998842040206,-0.99883742312,-0.998832796854,-0.998828161406,-0.998823516777,-0.998818862967,-0.998814199976,-0.998809527805,-0.998804846452,-0.998800155919,-0.998795456205,-0.99879074731,-0.998786029235,-0.998781301979,-0.998776565542,-0.998771819925,-0.998767065128,-0.99876230115,-0.998757527991,-0.998752745652,-0.998747954133,-0.998743153434,-0.998738343554,-0.998733524494,-0.998728696254,-0.998723858834,-0.998719012234,-0.998714156454,-0.998709291494,-0.998704417353,-0.998699534034,-0.998694641534,-0.998689739854,-0.998684828995,-0.998679908956,-0.998674979737,-0.998670041339,-0.998665093761,-0.998660137004,-0.998655171067,-0.998650195951,-0.998645211655,-0.99864021818,-0.998635215526,-0.998630203693,-0.99862518268,-0.998620152488,-0.998615113117,-0.998610064567,-0.998605006838,-0.99859993993,-0.998594863843,-0.998589778578,-0.998584684133,-0.99857958051,-0.998574467708,-0.998569345727,-0.998564214568,-0.99855907423,-0.998553924713,-0.998548766018,-0.998543598145,-0.998538421093,-0.998533234863,-0.998528039454,-0.998522834868,-0.998517621103,-0.99851239816,-0.998507166038,-0.998501924739,-0.998496674262,-0.998491414606,-0.998486145773,-0.998480867762,-0.998475580573,-0.998470284207,-0.998464978662,-0.99845966394,-0.998454340041,-0.998449006963,-0.998443664708,-0.998438313276,-0.998432952667,-0.998427582879,-0.998422203915,-0.998416815773,-0.998411418454,-0.998406011958,-0.998400596285,-0.998395171435,-0.998389737407,-0.998384294203,-0.998378841822,-0.998373380264,-0.998367909529,-0.998362429617,-0.998356940528,-0.998351442263,-0.998345934821,-0.998340418203,-0.998334892408,-0.998329357436,-0.998323813289,-0.998318259964,-0.998312697464,-0.998307125787,-0.998301544934,-0.998295954905,-0.998290355699,-0.998284747318,-0.99827912976,-0.998273503027,-0.998267867118,-0.998262222032,-0.998256567771,-0.998250904335,-0.998245231722,-0.998239549934,-0.99823385897,-0.998228158831,-0.998222449516,-0.998216731026,-0.99821100336,-0.99820526652,-0.998199520503,-0.998193765312,-0.998188000945,-0.998182227403,-0.998176444686,-0.998170652795,-0.998164851728,-0.998159041486,-0.998153222069,-0.998147393478,-0.998141555712,-0.998135708771,-0.998129852655,-0.998123987365,-0.9981181129,-0.998112229261,-0.998106336447,-0.998100434459,-0.998094523297,-0.99808860296,-0.99808267345,-0.998076734765,-0.998070786905,-0.998064829872,-0.998058863665,-0.998052888284,-0.998046903729,-0.99804091,-0.998034907098,-0.998028895021,-0.998022873771,-0.998016843348,-0.998010803751,-0.99800475498,-0.997998697036,-0.997992629919,-0.997986553628,-0.997980468164,-0.997974373526,-0.997968269716,-0.997962156732,-0.997956034576,-0.997949903246,-0.997943762743,-0.997937613068,-0.99793145422,-0.997925286199,-0.997919109005,-0.997912922638,-0.997906727099,-0.997900522388,-0.997894308504,-0.997888085447,-0.997881853218,-0.997875611817,-0.997869361244,-0.997863101498,-0.99785683258,-0.99785055449,-0.997844267228,-0.997837970795,-0.997831665189,-0.997825350411,-0.997819026462,-0.99781269334,-0.997806351048,-0.997799999583,-0.997793638947,-0.99778726914,-0.997780890161,-0.99777450201,-0.997768104688,-0.997761698195,-0.997755282531,-0.997748857696,-0.997742423689,-0.997735980512,-0.997729528164,-0.997723066644,-0.997716595954,-0.997710116093,-0.997703627061,-0.997697128859,-0.997690621486,-0.997684104942,-0.997677579228,-0.997671044343,-0.997664500289,-0.997657947063,-0.997651384668,-0.997644813102,-0.997638232366,-0.99763164246,-0.997625043384,-0.997618435139,-0.997611817723,-0.997605191137,-0.997598555382,-0.997591910457,-0.997585256362,-0.997578593098,-0.997571920664,-0.99756523906,-0.997558548288,-0.997551848346,-0.997545139234,-0.997538420954,-0.997531693504,-0.997524956885,-0.997518211097,-0.99751145614,-0.997504692015,-0.99749791872,-0.997491136257,-0.997484344624,-0.997477543824,-0.997470733854,-0.997463914716,-0.99745708641,-0.997450248935,-0.997443402292,-0.997436546481,-0.997429681501,-0.997422807353,-0.997415924037,-0.997409031553,-0.997402129901,-0.997395219081,-0.997388299094,-0.997381369938,-0.997374431615,-0.997367484124,-0.997360527466,-0.99735356164,-0.997346586647,-0.997339602486,-0.997332609158,-0.997325606662,-0.997318595,-0.99731157417,-0.997304544173,-0.997297505009,-0.997290456679,-0.997283399181,-0.997276332517,-0.997269256685,-0.997262171688,-0.997255077523,-0.997247974192,-0.997240861694,-0.99723374003,-0.9972266092,-0.997219469204,-0.997212320041,-0.997205161712,-0.997197994217,-0.997190817555,-0.997183631728,-0.997176436735,-0.997169232576,-0.997162019252,-0.997154796762,-0.997147565106,-0.997140324284,-0.997133074297,-0.997125815145,-0.997118546827,-0.997111269344,-0.997103982696,-0.997096686882,-0.997089381903,-0.99708206776,-0.997074744451,-0.997067411978,-0.997060070339,-0.997052719536,-0.997045359569,-0.997037990436,-0.997030612139,-0.997023224678,-0.997015828052,-0.997008422262,-0.997001007307,-0.996993583189,-0.996986149906,-0.996978707459,-0.996971255848,-0.996963795073,-0.996956325134,-0.996948846031,-0.996941357765,-0.996933860335,-0.996926353741,-0.996918837984,-0.996911313064,-0.99690377898,-0.996896235732,-0.996888683322,-0.996881121748,-0.996873551011,-0.996865971111,-0.996858382048,-0.996850783822,-0.996843176434,-0.996835559882,-0.996827934168,-0.996820299291,-0.996812655252,-0.99680500205,-0.996797339686,-0.996789668159,-0.99678198747,-0.996774297619,-0.996766598606,-0.996758890431,-0.996751173094,-0.996743446594,-0.996735710933,-0.996727966111,-0.996720212126,-0.99671244898,-0.996704676672,-0.996696895203,-0.996689104572,-0.99668130478,-0.996673495827,-0.996665677712,-0.996657850437,-0.996650014,-0.996642168402,-0.996634313644,-0.996626449724,-0.996618576644,-0.996610694403,-0.996602803002,-0.99659490244,-0.996586992717,-0.996579073834,-0.996571145791,-0.996563208587,-0.996555262223,-0.996547306699,-0.996539342015,-0.996531368171,-0.996523385167,-0.996515393004,-0.99650739168,-0.996499381197,-0.996491361554,-0.996483332752,-0.99647529479,-0.996467247669,-0.996459191389,-0.996451125949,-0.99644305135,-0.996434967592,-0.996426874675,-0.996418772599,-0.996410661364,-0.996402540971,-0.996394411419,-0.996386272708,-0.996378124838,-0.99636996781,-0.996361801624,-0.996353626279,-0.996345441776,-0.996337248115,-0.996329045295,-0.996320833318,-0.996312612183,-0.99630438189,-0.996296142438,-0.99628789383,-0.996279636063,-0.996271369139,-0.996263093058,-0.996254807819,-0.996246513422,-0.996238209869,-0.996229897158,-0.99622157529,-0.996213244265,-0.996204904083,-0.996196554744,-0.996188196248,-0.996179828596,-0.996171451787,-0.996163065821,-0.996154670699,-0.99614626642,-0.996137852985,-0.996129430393,-0.996120998646,-0.996112557742,-0.996104107682,-0.996095648467,-0.996087180095,-0.996078702568,-0.996070215884,-0.996061720046,-0.996053215051,-0.996044700901,-0.996036177596,-0.996027645135,-0.996019103519,-0.996010552748,-0.996001992822,-0.99599342374,-0.995984845504,-0.995976258113,-0.995967661567,-0.995959055866,-0.995950441011,-0.995941817001,-0.995933183837,-0.995924541518,-0.995915890045,-0.995907229417,-0.995898559636,-0.9958898807,-0.995881192611,-0.995872495367,-0.99586378897,-0.995855073419,-0.995846348714,-0.995837614855,-0.995828871843,-0.995820119678,-0.995811358359,-0.995802587887,-0.995793808262,-0.995785019483,-0.995776221552,-0.995767414468,-0.99575859823,-0.99574977284,-0.995740938298,-0.995732094602,-0.995723241754,-0.995714379754,-0.995705508601,-0.995696628296,-0.995687738838,-0.995678840229,-0.995669932467,-0.995661015554,-0.995652089488,-0.995643154271,-0.995634209902,-0.995625256381,-0.995616293709,-0.995607321885,-0.99559834091,-0.995589350783,-0.995580351506,-0.995571343077,-0.995562325497,-0.995553298766,-0.995544262884,-0.995535217851,-0.995526163668,-0.995517100333,-0.995508027849,-0.995498946213,-0.995489855428,-0.995480755492,-0.995471646406,-0.995462528169,-0.995453400783,-0.995444264247,-0.99543511856,-0.995425963724,-0.995416799738,-0.995407626603,-0.995398444317,-0.995389252883,-0.995380052299,-0.995370842565,-0.995361623683,-0.995352395651,-0.99534315847,-0.99533391214,-0.995324656662,-0.995315392034,-0.995306118258,-0.995296835333,-0.99528754326,-0.995278242038,-0.995268931668,-0.995259612149,-0.995250283482,-0.995240945667,-0.995231598705,-0.995222242594,-0.995212877335,-0.995203502928,-0.995194119374,-0.995184726672,-0.995175324823,-0.995165913826,-0.995156493682,-0.99514706439,-0.995137625952,-0.995128178366,-0.995118721633,-0.995109255754,-0.995099780727,-0.995090296554,-0.995080803234,-0.995071300768,-0.995061789155,-0.995052268396,-0.99504273849,-0.995033199438,-0.99502365124,-0.995014093896,-0.995004527406,-0.99499495177,-0.994985366989,-0.994975773061,-0.994966169989,-0.99495655777,-0.994946936406,-0.994937305897,-0.994927666243,-0.994918017443,-0.994908359498,-0.994898692409,-0.994889016174,-0.994879330795,-0.994869636271,-0.994859932602,-0.994850219789,-0.994840497831,-0.994830766729,-0.994821026483,-0.994811277092,-0.994801518558,-0.994791750879,-0.994781974057,-0.99477218809,-0.99476239298,-0.994752588726,-0.994742775329,-0.994732952788,-0.994723121104,-0.994713280277,-0.994703430306,-0.994693571193,-0.994683702936,-0.994673825536,-0.994663938994,-0.994654043309,-0.994644138481,-0.994634224511,-0.994624301398,-0.994614369143,-0.994604427745,-0.994594477206,-0.994584517524,-0.9945745487,-0.994564570734,-0.994554583627,-0.994544587377,-0.994534581987,-0.994524567454,-0.99451454378,-0.994504510965,-0.994494469008,-0.994484417911,-0.994474357672,-0.994464288292,-0.994454209771,-0.99444412211,-0.994434025308,-0.994423919365,-0.994413804281,-0.994403680058,-0.994393546694,-0.994383404189,-0.994373252545,-0.99436309176,-0.994352921835,-0.994342742771,-0.994332554567,-0.994322357223,-0.994312150739,-0.994301935116,-0.994291710353,-0.994281476452,-0.994271233411,-0.99426098123,-0.994250719911,-0.994240449453,-0.994230169856,-0.994219881121,-0.994209583246,-0.994199276233,-0.994188960082,-0.994178634792,-0.994168300364,-0.994157956798,-0.994147604093,-0.994137242251,-0.994126871271,-0.994116491153,-0.994106101897,-0.994095703504,-0.994085295973,-0.994074879305,-0.994064453499,-0.994054018557,-0.994043574477,-0.99403312126,-0.994022658906,-0.994012187415,-0.994001706787,-0.993991217023,-0.993980718123,-0.993970210085,-0.993959692912,-0.993949166602,-0.993938631156,-0.993928086574,-0.993917532856,-0.993906970002,-0.993896398013,-0.993885816887,-0.993875226626,-0.99386462723,-0.993854018698,-0.993843401031,-0.993832774229,-0.993822138292,-0.993811493219,-0.993800839012,-0.99379017567,-0.993779503193,-0.993768821582,-0.993758130836,-0.993747430955,-0.993736721941,-0.993726003792,-0.993715276509,-0.993704540092,-0.993693794541,-0.993683039856,-0.993672276038,-0.993661503086,-0.993650721,-0.993639929781,-0.993629129429,-0.993618319943,-0.993607501325,-0.993596673573,-0.993585836688,-0.993574990671,-0.993564135521,-0.993553271238,-0.993542397822,-0.993531515275,-0.993520623595,-0.993509722782,-0.993498812838,-0.993487893761,-0.993476965553,-0.993466028213,-0.993455081741,-0.993444126137,-0.993433161402,-0.993422187535,-0.993411204537,-0.993400212408,-0.993389211148,-0.993378200757,-0.993367181235,-0.993356152582,-0.993345114798,-0.993334067884,-0.993323011839,-0.993311946664,-0.993300872358,-0.993289788922,-0.993278696356,-0.993267594661,-0.993256483835,-0.993245363879,-0.993234234794,-0.993223096579,-0.993211949235,-0.993200792761,-0.993189627158,-0.993178452426,-0.993167268564,-0.993156075574,-0.993144873455,-0.993133662207,-0.99312244183,-0.993111212325,-0.993099973692,-0.99308872593,-0.993077469039,-0.993066203021,-0.993054927875,-0.9930436436,-0.993032350198,-0.993021047668,-0.99300973601,-0.992998415225,-0.992987085312,-0.992975746273,-0.992964398105,-0.992953040811,-0.99294167439,-0.992930298842,-0.992918914167,-0.992907520365,-0.992896117437,-0.992884705382,-0.992873284201,-0.992861853893,-0.99285041446,-0.9928389659,-0.992827508215,-0.992816041403,-0.992804565466,-0.992793080403,-0.992781586215,-0.992770082901,-0.992758570462,-0.992747048897,-0.992735518208,-0.992723978393,-0.992712429454,-0.992700871389,-0.9926893042,-0.992677727887,-0.992666142449,-0.992654547887,-0.9926429442,-0.992631331389,-0.992619709454,-0.992608078395,-0.992596438213,-0.992584788906,-0.992573130476,-0.992561462923,-0.992549786246,-0.992538100446,-0.992526405522,-0.992514701476,-0.992502988306,-0.992491266014,-0.992479534599,-0.992467794061,-0.992456044401,-0.992444285618,-0.992432517713,-0.992420740685,-0.992408954536,-0.992397159264,-0.992385354871,-0.992373541356,-0.992361718719,-0.99234988696,-0.99233804608,-0.992326196079,-0.992314336957,-0.992302468713,-0.992290591348,-0.992278704863,-0.992266809256,-0.992254904529,-0.992242990681,-0.992231067713,-0.992219135625,-0.992207194416,-0.992195244087,-0.992183284638,-0.992171316069,-0.99215933838,-0.992147351571,-0.992135355643,-0.992123350596,-0.992111336428,-0.992099313142,-0.992087280737,-0.992075239212,-0.992063188569,-0.992051128806,-0.992039059925,-0.992026981926,-0.992014894808,-0.992002798571,-0.991990693216,-0.991978578744,-0.991966455153,-0.991954322444,-0.991942180617,-0.991930029672,-0.99191786961,-0.991905700431,-0.991893522134,-0.991881334719,-0.991869138188,-0.991856932539,-0.991844717774,-0.991832493892,-0.991820260893,-0.991808018777,-0.991795767545,-0.991783507197,-0.991771237732,-0.991758959152,-0.991746671455,-0.991734374642,-0.991722068713,-0.991709753669,-0.991697429509,-0.991685096234,-0.991672753843,-0.991660402337,-0.991648041716,-0.99163567198,-0.991623293129,-0.991610905163,-0.991598508083,-0.991586101888,-0.991573686579,-0.991561262155,-0.991548828617,-0.991536385965,-0.991523934199,-0.991511473319,-0.991499003325,-0.991486524218,-0.991474035997,-0.991461538662,-0.991449032215,-0.991436516654,-0.99142399198,-0.991411458193,-0.991398915294,-0.991386363281,-0.991373802156,-0.991361231919,-0.991348652569,-0.991336064107,-0.991323466532,-0.991310859846,-0.991298244048,-0.991285619138,-0.991272985116,-0.991260341983,-0.991247689738,-0.991235028382,-0.991222357915,-0.991209678336,-0.991196989647,-0.991184291847,-0.991171584936,-0.991158868914,-0.991146143782,-0.991133409539,-0.991120666186,-0.991107913723,-0.99109515215,-0.991082381467,-0.991069601674,-0.991056812772,-0.99104401476,-0.991031207638,-0.991018391407,-0.991005566067,-0.990992731618,-0.99097988806,-0.990967035392,-0.990954173617,-0.990941302732,-0.990928422739,-0.990915533638,-0.990902635428,-0.99088972811,-0.990876811684,-0.99086388615,-0.990850951508,-0.990838007759,-0.990825054902,-0.990812092938,-0.990799121866,-0.990786141687,-0.990773152401,-0.990760154008,-0.990747146508,-0.990734129902,-0.990721104188,-0.990708069369,-0.990695025443,-0.99068197241,-0.990668910272,-0.990655839027,-0.990642758677,-0.990629669221,-0.990616570659,-0.990603462992,-0.990590346219,-0.990577220341,-0.990564085358,-0.990550941269,-0.990537788076,-0.990524625778,-0.990511454375,-0.990498273868,-0.990485084256,-0.99047188554,-0.99045867772,-0.990445460796,-0.990432234768,-0.990418999635,-0.9904057554,-0.99039250206,-0.990379239617,-0.990365968071,-0.990352687421,-0.990339397669,-0.990326098813,-0.990312790855,-0.990299473793,-0.99028614763,-0.990272812363,-0.990259467994,-0.990246114523,-0.99023275195,-0.990219380275,-0.990205999498,-0.99019260962,-0.990179210639,-0.990165802557,-0.990152385374,-0.990138959089,-0.990125523704,-0.990112079217,-0.990098625629,-0.990085162941,-0.990071691152,-0.990058210262,-0.990044720272,-0.990031221182,-0.990017712992,-0.990004195701,-0.989990669311,-0.989977133821,-0.989963589231,-0.989950035542,-0.989936472753,-0.989922900865,-0.989909319878,-0.989895729791,-0.989882130606,-0.989868522322,-0.98985490494,-0.989841278459,-0.989827642879,-0.989813998202,-0.989800344426,-0.989786681552,-0.98977300958,-0.98975932851,-0.989745638343,-0.989731939078,-0.989718230716,-0.989704513256,-0.989690786699,-0.989677051046,-0.989663306295,-0.989649552448,-0.989635789504,-0.989622017463,-0.989608236326,-0.989594446093,-0.989580646764,-0.989566838338,-0.989553020817,-0.9895391942,-0.989525358487,-0.989511513679,-0.989497659776,-0.989483796777,-0.989469924683,-0.989456043494,-0.989442153211,-0.989428253832,-0.989414345359,-0.989400427791,-0.989386501129,-0.989372565373,-0.989358620523,-0.989344666579,-0.989330703541,-0.989316731409,-0.989302750183,-0.989288759865,-0.989274760452,-0.989260751947,-0.989246734349,-0.989232707657,-0.989218671873,-0.989204626996,-0.989190573027,-0.989176509965,-0.989162437811,-0.989148356564,-0.989134266226,-0.989120166796,-0.989106058273,-0.98909194066,-0.989077813955,-0.989063678158,-0.98904953327,-0.989035379291,-0.989021216221,-0.98900704406,-0.988992862808,-0.988978672466,-0.988964473033,-0.98895026451,-0.988936046897,-0.988921820194,-0.9889075844,-0.988893339517,-0.988879085544,-0.988864822482,-0.98885055033,-0.988836269089,-0.988821978758,-0.988807679339,-0.988793370831,-0.988779053234,-0.988764726548,-0.988750390774,-0.988736045911,-0.98872169196,-0.988707328921,-0.988692956794,-0.98867857558,-0.988664185277,-0.988649785887,-0.988635377409,-0.988620959844,-0.988606533192,-0.988592097453,-0.988577652627,-0.988563198714,-0.988548735715,-0.988534263629,-0.988519782456,-0.988505292198,-0.988490792853,-0.988476284422,-0.988461766905,-0.988447240303,-0.988432704615,-0.988418159841,-0.988403605982,-0.988389043038,-0.988374471009,-0.988359889895,-0.988345299697,-0.988330700413,-0.988316092045,-0.988301474593,-0.988286848056,-0.988272212435,-0.988257567731,-0.988242913942,-0.98822825107,-0.988213579114,-0.988198898075,-0.988184207952,-0.988169508746,-0.988154800457,-0.988140083086,-0.988125356631,-0.988110621094,-0.988095876474,-0.988081122772,-0.988066359988,-0.988051588122,-0.988036807173,-0.988022017143,-0.988007218031,-0.987992409838,-0.987977592563,-0.987962766207,-0.98794793077,-0.987933086252,-0.987918232653,-0.987903369973,-0.987888498213,-0.987873617372,-0.987858727451,-0.987843828449,-0.987828920368,-0.987814003206,-0.987799076965,-0.987784141645,-0.987769197244,-0.987754243765,-0.987739281206,-0.987724309568,-0.987709328851,-0.987694339055,-0.987679340181,-0.987664332228,-0.987649315197,-0.987634289087,-0.9876192539,-0.987604209634,-0.987589156291,-0.987574093869,-0.987559022371,-0.987543941794,-0.987528852141,-0.98751375341,-0.987498645603,-0.987483528718,-0.987468402757,-0.987453267719,-0.987438123605,-0.987422970414,-0.987407808147,-0.987392636804,-0.987377456385,-0.987362266891,-0.987347068321,-0.987331860675,-0.987316643954,-0.987301418158,-0.987286183287,-0.98727093934,-0.987255686319,-0.987240424224,-0.987225153054,-0.987209872809,-0.987194583491,-0.987179285098,-0.987163977631,-0.987148661091,-0.987133335477,-0.987118000789,-0.987102657028,-0.987087304193,-0.987071942286,-0.987056571306,-0.987041191253,-0.987025802127,-0.987010403928,-0.986994996658,-0.986979580315,-0.9869641549,-0.986948720413,-0.986933276854,-0.986917824223,-0.986902362521,-0.986886891748,-0.986871411903,-0.986855922987,-0.986840425,-0.986824917943,-0.986809401814,-0.986793876615,-0.986778342346,-0.986762799007,-0.986747246597,-0.986731685117,-0.986716114568,-0.986700534949,-0.98668494626,-0.986669348502,-0.986653741675,-0.986638125778,-0.986622500813,-0.986606866779,-0.986591223676,-0.986575571505,-0.986559910265,-0.986544239957,-0.986528560581,-0.986512872136,-0.986497174625,-0.986481468045,-0.986465752398,-0.986450027683,-0.986434293902,-0.986418551053,-0.986402799137,-0.986387038154,-0.986371268105,-0.986355488989,-0.986339700807,-0.986323903559,-0.986308097245,-0.986292281864,-0.986276457418,-0.986260623906,-0.986244781329,-0.986228929686,-0.986213068979,-0.986197199206,-0.986181320368,-0.986165432465,-0.986149535498,-0.986133629467,-0.986117714371,-0.98610179021,-0.986085856986,-0.986069914698,-0.986053963346,-0.986038002931,-0.986022033452,-0.98600605491,-0.985990067304,-0.985974070636,-0.985958064905,-0.985942050111,-0.985926026254,-0.985909993335,-0.985893951354,-0.985877900311,-0.985861840206,-0.985845771038,-0.98582969281,-0.985813605519,-0.985797509168,-0.985781403755,-0.985765289281,-0.985749165746,-0.98573303315,-0.985716891493,-0.985700740776,-0.985684580999,-0.985668412162,-0.985652234264,-0.985636047307,-0.985619851289,-0.985603646213,-0.985587432076,-0.985571208881,-0.985554976626,-0.985538735312,-0.98552248494,-0.985506225508,-0.985489957018,-0.98547367947,-0.985457392864,-0.985441097199,-0.985424792476,-0.985408478696,-0.985392155858,-0.985375823962,-0.985359483009,-0.985343132999,-0.985326773932,-0.985310405807,-0.985294028626,-0.985277642389,-0.985261247095,-0.985244842745,-0.985228429338,-0.985212006876,-0.985195575357,-0.985179134783,-0.985162685154,-0.985146226469,-0.985129758728,-0.985113281933,-0.985096796083,-0.985080301178,-0.985063797218,-0.985047284204,-0.985030762135,-0.985014231012,-0.984997690835,-0.984981141605,-0.98496458332,-0.984948015982,-0.984931439591,-0.984914854146,-0.984898259648,-0.984881656097,-0.984865043494,-0.984848421837,-0.984831791128,-0.984815151367,-0.984798502554,-0.984781844688,-0.984765177771,-0.984748501802,-0.984731816781,-0.984715122709,-0.984698419586,-0.984681707411,-0.984664986185,-0.984648255909,-0.984631516582,-0.984614768204,-0.984598010776,-0.984581244298,-0.98456446877,-0.984547684192,-0.984530890564,-0.984514087886,-0.984497276159,-0.984480455383,-0.984463625558,-0.984446786684,-0.98442993876,-0.984413081789,-0.984396215768,-0.984379340699,-0.984362456583,-0.984345563418,-0.984328661205,-0.984311749944,-0.984294829636,-0.98427790028,-0.984260961878,-0.984244014428,-0.984227057931,-0.984210092387,-0.984193117797,-0.98417613416,-0.984159141476,-0.984142139747,-0.984125128972,-0.98410810915,-0.984091080283,-0.984074042371,-0.984056995413,-0.98403993941,-0.984022874361,-0.984005800268,-0.98398871713,-0.983971624948,-0.983954523721,-0.983937413449,-0.983920294134,-0.983903165774,-0.983886028371,-0.983868881924,-0.983851726434,-0.9838345619,-0.983817388323,-0.983800205703,-0.98378301404,-0.983765813334,-0.983748603586,-0.983731384795,-0.983714156962,-0.983696920087,-0.98367967417,-0.983662419212,-0.983645155211,-0.98362788217,-0.983610600087,-0.983593308962,-0.983576008797,-0.983558699591,-0.983541381345,-0.983524054058,-0.98350671773,-0.983489372362,-0.983472017955,-0.983454654507,-0.98343728202,-0.983419900493,-0.983402509927,-0.983385110322,-0.983367701677,-0.983350283994,-0.983332857272,-0.983315421511,-0.983297976712,-0.983280522874,-0.983263059999,-0.983245588085,-0.983228107134,-0.983210617145,-0.983193118119,-0.983175610055,-0.983158092955,-0.983140566817,-0.983123031642,-0.983105487431,-0.983087934184,-0.983070371899,-0.983052800579,-0.983035220223,-0.983017630831,-0.983000032403,-0.98298242494,-0.982964808441,-0.982947182908,-0.982929548339,-0.982911904735,-0.982894252096,-0.982876590423,-0.982858919716,-0.982841239974,-0.982823551199,-0.982805853389,-0.982788146546,-0.982770430669,-0.982752705758,-0.982734971815,-0.982717228838,-0.982699476829,-0.982681715786,-0.982663945711,-0.982646166604,-0.982628378464,-0.982610581292,-0.982592775089,-0.982574959853,-0.982557135586,-0.982539302287,-0.982521459958,-0.982503608597,-0.982485748205,-0.982467878782,-0.982450000328,-0.982432112845,-0.98241421633,-0.982396310786,-0.982378396212,-0.982360472608,-0.982342539974,-0.982324598311,-0.982306647618,-0.982288687896,-0.982270719146,-0.982252741366,-0.982234754558,-0.982216758721,-0.982198753856,-0.982180739963,-0.982162717042,-0.982144685093,-0.982126644117,-0.982108594113,-0.982090535081,-0.982072467022,-0.982054389937,-0.982036303824,-0.982018208685,-0.98200010452,-0.981981991328,-0.98196386911,-0.981945737865,-0.981927597595,-0.9819094483,-0.981891289979,-0.981873122632,-0.981854946261,-0.981836760864,-0.981818566443,-0.981800362996,-0.981782150526,-0.981763929031,-0.981745698512,-0.981727458969,-0.981709210402,-0.981690952811,-0.981672686197,-0.98165441056,-0.981636125899,-0.981617832215,-0.981599529509,-0.98158121778,-0.981562897028,-0.981544567255,-0.981526228459,-0.981507880641,-0.981489523801,-0.98147115794,-0.981452783057,-0.981434399152,-0.981416006227,-0.981397604281,-0.981379193314,-0.981360773326,-0.981342344318,-0.981323906289,-0.981305459241,-0.981287003172,-0.981268538084,-0.981250063976,-0.981231580849,-0.981213088702,-0.981194587536,-0.981176077352,-0.981157558148,-0.981139029926,-0.981120492686,-0.981101946427,-0.98108339115,-0.981064826856,-0.981046253543,-0.981027671213,-0.981009079866,-0.980990479502,-0.98097187012,-0.980953251721,-0.980934624306,-0.980915987874,-0.980897342426,-0.980878687962,-0.980860024482,-0.980841351985,-0.980822670473,-0.980803979946,-0.980785280403,-0.980766571845,-0.980747854272,-0.980729127685,-0.980710392082,-0.980691647465,-0.980672893834,-0.980654131189,-0.98063535953,-0.980616578857,-0.98059778917,-0.98057899047,-0.980560182756,-0.98054136603,-0.98052254029,-0.980503705538,-0.980484861773,-0.980466008996,-0.980447147207,-0.980428276405,-0.980409396592,-0.980390507767,-0.98037160993,-0.980352703082,-0.980333787223,-0.980314862353,-0.980295928472,-0.98027698558,-0.980258033678,-0.980239072766,-0.980220102843,-0.980201123911,-0.980182135968,-0.980163139016,-0.980144133055,-0.980125118084,-0.980106094104,-0.980087061115,-0.980068019118,-0.980048968112,-0.980029908097,-0.980010839074,-0.979991761043,-0.979972674005,-0.979953577958,-0.979934472905,-0.979915358843,-0.979896235775,-0.9798771037,-0.979857962617,-0.979838812528,-0.979819653433,-0.979800485331,-0.979781308224,-0.97976212211,-0.979742926991,-0.979723722866,-0.979704509735,-0.979685287599,-0.979666056459,-0.979646816313,-0.979627567163,-0.979608309008,-0.979589041849,-0.979569765685,-0.979550480518,-0.979531186347,-0.979511883172,-0.979492570994,-0.979473249812,-0.979453919628,-0.97943458044,-0.97941523225,-0.979395875057,-0.979376508861,-0.979357133664,-0.979337749464,-0.979318356263,-0.97929895406,-0.979279542855,-0.979260122649,-0.979240693442,-0.979221255234,-0.979201808025,-0.979182351816,-0.979162886606,-0.979143412395,-0.979123929185,-0.979104436975,-0.979084935765,-0.979065425556,-0.979045906347,-0.979026378139,-0.979006840932,-0.978987294726,-0.978967739522,-0.978948175319,-0.978928602118,-0.978909019919,-0.978889428721,-0.978869828527,-0.978850219334,-0.978830601144,-0.978810973957,-0.978791337773,-0.978771692592,-0.978752038415,-0.978732375241,-0.97871270307,-0.978693021904,-0.978673331741,-0.978653632583,-0.978633924429,-0.97861420728,-0.978594481136,-0.978574745997,-0.978555001862,-0.978535248733,-0.97851548661,-0.978495715492,-0.978475935381,-0.978456146275,-0.978436348175,-0.978416541082,-0.978396724996,-0.978376899916,-0.978357065843,-0.978337222778,-0.97831737072,-0.978297509669,-0.978277639626,-0.978257760591,-0.978237872564,-0.978217975545,-0.978198069534,-0.978178154533,-0.97815823054,-0.978138297556,-0.978118355581,-0.978098404615,-0.978078444659,-0.978058475713,-0.978038497777,-0.978018510851,-0.977998514935,-0.977978510029,-0.977958496134,-0.97793847325,-0.977918441377,-0.977898400515,-0.977878350664,-0.977858291825,-0.977838223998,-0.977818147183,-0.977798061379,-0.977777966588,-0.97775786281,-0.977737750044,-0.977717628291,-0.977697497551,-0.977677357825,-0.977657209111,-0.977637051411,-0.977616884725,-0.977596709053,-0.977576524396,-0.977556330752,-0.977536128123,-0.977515916509,-0.977495695909,-0.977475466325,-0.977455227756,-0.977434980202,-0.977414723664,-0.977394458142,-0.977374183635,-0.977353900145,-0.977333607671,-0.977313306214,-0.977292995774,-0.977272676351,-0.977252347944,-0.977232010555,-0.977211664184,-0.97719130883,-0.977170944494,-0.977150571176,-0.977130188876,-0.977109797595,-0.977089397332,-0.977068988088,-0.977048569863,-0.977028142658,-0.977007706471,-0.976987261305,-0.976966807158,-0.976946344031,-0.976925871924,-0.976905390837,-0.976884900771,-0.976864401725,-0.976843893701,-0.976823376697,-0.976802850715,-0.976782315754,-0.976761771815,-0.976741218897,-0.976720657002,-0.976700086129,-0.976679506278,-0.97665891745,-0.976638319644,-0.976617712862,-0.976597097102,-0.976576472366,-0.976555838653,-0.976535195965,-0.9765145443,-0.976493883659,-0.976473214042,-0.97645253545,-0.976431847883,-0.97641115134,-0.976390445822,-0.97636973133,-0.976349007863,-0.976328275422,-0.976307534006,-0.976286783617,-0.976266024253,-0.976245255916,-0.976224478606,-0.976203692322,-0.976182897066,-0.976162092836,-0.976141279634,-0.976120457459,-0.976099626312,-0.976078786193,-0.976057937102,-0.976037079039,-0.976016212005,-0.975995335999,-0.975974451022,-0.975953557075,-0.975932654156,-0.975911742267,-0.975890821408,-0.975869891578,-0.975848952779,-0.975828005009,-0.975807048271,-0.975786082562,-0.975765107885,-0.975744124238,-0.975723131623,-0.975702130039,-0.975681119486,-0.975660099965,-0.975639071476,-0.97561803402,-0.975596987595,-0.975575932204,-0.975554867844,-0.975533794518,-0.975512712225,-0.975491620965,-0.975470520739,-0.975449411546,-0.975428293388,-0.975407166263,-0.975386030173,-0.975364885117,-0.975343731095,-0.975322568109,-0.975301396158,-0.975280215241,-0.975259025361,-0.975237826516,-0.975216618706,-0.975195401933,-0.975174176196,-0.975152941495,-0.975131697831,-0.975110445204,-0.975089183614,-0.975067913061,-0.975046633545,-0.975025345067,-0.975004047627,-0.974982741224,-0.97496142586,-0.974940101534,-0.974918768247,-0.974897425999,-0.974876074789,-0.974854714619,-0.974833345488,-0.974811967396,-0.974790580344,-0.974769184333,-0.974747779361,-0.974726365429,-0.974704942539,-0.974683510689,-0.974662069879,-0.974640620111,-0.974619161384,-0.974597693699,-0.974576217056,-0.974554731454,-0.974533236894,-0.974511733377,-0.974490220902,-0.97446869947,-0.974447169081,-0.974425629735,-0.974404081432,-0.974382524173,-0.974360957957,-0.974339382786,-0.974317798658,-0.974296205575,-0.974274603536,-0.974252992541,-0.974231372592,-0.974209743688,-0.974188105829,-0.974166459015,-0.974144803247,-0.974123138525,-0.97410146485,-0.97407978222,-0.974058090637,-0.9740363901,-0.974014680611,-0.973992962168,-0.973971234773,-0.973949498425,-0.973927753125,-0.973905998872,-0.973884235668,-0.973862463512,-0.973840682405,-0.973818892346,-0.973797093336,-0.973775285375,-0.973753468463,-0.973731642601,-0.973709807788,-0.973687964026,-0.973666111313,-0.973644249651,-0.973622379039,-0.973600499478,-0.973578610967,-0.973556713508,-0.9735348071,-0.973512891744,-0.973490967439,-0.973469034186,-0.973447091985,-0.973425140837,-0.973403180741,-0.973381211697,-0.973359233707,-0.973337246769,-0.973315250885,-0.973293246055,-0.973271232278,-0.973249209555,-0.973227177886,-0.973205137271,-0.973183087711,-0.973161029206,-0.973138961755,-0.97311688536,-0.97309480002,-0.973072705735,-0.973050602507,-0.973028490334,-0.973006369217,-0.972984239157,-0.972962100153,-0.972939952206,-0.972917795315,-0.972895629482,-0.972873454707,-0.972851270989,-0.972829078328,-0.972806876726,-0.972784666182,-0.972762446696,-0.972740218268,-0.9727179809,-0.97269573459,-0.97267347934,-0.972651215149,-0.972628942018,-0.972606659946,-0.972584368935,-0.972562068983,-0.972539760093,-0.972517442262,-0.972495115493,-0.972472779784,-0.972450435137,-0.972428081552,-0.972405719027,-0.972383347565,-0.972360967165,-0.972338577827,-0.972316179552,-0.972293772339,-0.972271356189,-0.972248931102,-0.972226497079,-0.972204054119,-0.972181602223,-0.97215914139,-0.972136671622,-0.972114192918,-0.972091705279,-0.972069208704,-0.972046703195,-0.97202418875,-0.972001665371,-0.971979133057,-0.97195659181,-0.971934041628,-0.971911482512,-0.971888914463,-0.97186633748,-0.971843751564,-0.971821156716,-0.971798552934,-0.97177594022,-0.971753318574,-0.971730687995,-0.971708048484,-0.971685400042,-0.971662742668,-0.971640076363,-0.971617401127,-0.97159471696,-0.971572023862,-0.971549321833,-0.971526610875,-0.971503890986,-0.971481162168,-0.97145842442,-0.971435677742,-0.971412922135,-0.971390157599,-0.971367384135,-0.971344601741,-0.97132181042,-0.97129901017,-0.971276200992,-0.971253382887,-0.971230555853,-0.971207719893,-0.971184875005,-0.971162021191,-0.97113915845,-0.971116286782,-0.971093406188,-0.971070516668,-0.971047618222,-0.97102471085,-0.971001794553,-0.970978869331,-0.970955935184,-0.970932992111,-0.970910040115,-0.970887079193,-0.970864109348,-0.970841130579,-0.970818142886,-0.970795146269,-0.970772140729,-0.970749126266,-0.97072610288,-0.970703070571,-0.97068002934,-0.970656979186,-0.970633920111,-0.970610852113,-0.970587775194,-0.970564689354,-0.970541594592,-0.970518490909,-0.970495378306,-0.970472256781,-0.970449126337,-0.970425986972,-0.970402838688,-0.970379681483,-0.970356515359,-0.970333340316,-0.970310156354,-0.970286963473,-0.970263761673,-0.970240550955,-0.970217331318,-0.970194102763,-0.970170865291,-0.970147618901,-0.970124363594,-0.970101099369,-0.970077826228,-0.970054544169,-0.970031253195,-0.970007953303,-0.969984644496,-0.969961326773,-0.969938000134,-0.96991466458,-0.969891320111,-0.969867966726,-0.969844604427,-0.969821233213,-0.969797853084,-0.969774464042,-0.969751066085,-0.969727659215,-0.969704243431,-0.969680818734,-0.969657385124,-0.969633942601,-0.969610491166,-0.969587030817,-0.969563561557,-0.969540083385,-0.9695165963,-0.969493100305,-0.969469595397,-0.969446081579,-0.96942255885,-0.96939902721,-0.969375486659,-0.969351937199,-0.969328378828,-0.969304811547,-0.969281235357,-0.969257650257,-0.969234056248,-0.96921045333,-0.969186841503,-0.969163220768,-0.969139591124,-0.969115952572,-0.969092305113,-0.969068648745,-0.96904498347,-0.969021309288,-0.968997626199,-0.968973934203,-0.9689502333,-0.968926523492,-0.968902804776,-0.968879077155,-0.968855340629,-0.968831595196,-0.968807840859,-0.968784077616,-0.968760305469,-0.968736524416,-0.96871273446,-0.968688935599,-0.968665127834,-0.968641311166,-0.968617485594,-0.968593651118,-0.96856980774,-0.968545955458,-0.968522094274,-0.968498224188,-0.968474345199,-0.968450457308,-0.968426560516,-0.968402654822,-0.968378740226,-0.96835481673,-0.968330884332,-0.968306943034,-0.968282992836,-0.968259033737,-0.968235065738,-0.968211088839,-0.968187103041,-0.968163108343,-0.968139104746,-0.968115092251,-0.968091070856,-0.968067040563,-0.968043001372,-0.968018953283,-0.967994896296,-0.967970830411,-0.967946755629,-0.96792267195,-0.967898579374,-0.967874477901,-0.967850367531,-0.967826248266,-0.967802120104,-0.967777983047,-0.967753837093,-0.967729682245,-0.967705518501,-0.967681345863,-0.967657164329,-0.967632973902,-0.967608774579,-0.967584566363,-0.967560349253,-0.96753612325,-0.967511888353,-0.967487644563,-0.96746339188,-0.967439130304,-0.967414859835,-0.967390580475,-0.967366292222,-0.967341995078,-0.967317689042,-0.967293374114,-0.967269050296,-0.967244717586,-0.967220375986,-0.967196025496,-0.967171666115,-0.967147297844,-0.967122920683,-0.967098534633,-0.967074139693,-0.967049735864,-0.967025323146,-0.96700090154,-0.966976471045,-0.966952031662,-0.966927583391,-0.966903126232,-0.966878660185,-0.966854185251,-0.96682970143,-0.966805208722,-0.966780707128,-0.966756196647,-0.966731677279,-0.966707149026,-0.966682611887,-0.966658065863,-0.966633510953,-0.966608947158,-0.966584374478,-0.966559792914,-0.966535202465,-0.966510603132,-0.966485994915,-0.966461377814,-0.96643675183,-0.966412116963,-0.966387473212,-0.966362820579,-0.966338159063,-0.966313488665,-0.966288809384,-0.966264121222,-0.966239424178,-0.966214718252,-0.966190003445,-0.966165279758,-0.966140547189,-0.96611580574,-0.96609105541,-0.966066296201,-0.966041528111,-0.966016751142,-0.965991965294,-0.965967170566,-0.965942366959,-0.965917554474,-0.96589273311,-0.965867902868,-0.965843063748,-0.96581821575,-0.965793358874,-0.965768493121,-0.965743618491,-0.965718734984,-0.9656938426,-0.96566894134,-0.965644031204,-0.965619112191,-0.965594184303,-0.965569247539,-0.9655443019,-0.965519347386,-0.965494383997,-0.965469411734,-0.965444430596,-0.965419440584,-0.965394441698,-0.965369433938,-0.965344417305,-0.965319391798,-0.965294357419,-0.965269314167,-0.965244262042,-0.965219201045,-0.965194131176,-0.965169052435,-0.965143964822,-0.965118868338,-0.965093762983,-0.965068648757,-0.96504352566,-0.965018393692,-0.964993252855,-0.964968103147,-0.96494294457,-0.964917777123,-0.964892600807,-0.964867415622,-0.964842221567,-0.964817018645,-0.964791806853,-0.964766586194,-0.964741356667,-0.964716118272,-0.964690871009,-0.96466561488,-0.964640349883,-0.96461507602,-0.96458979329,-0.964564501694,-0.964539201231,-0.964513891903,-0.964488573709,-0.96446324665,-0.964437910726,-0.964412565937,-0.964387212283,-0.964361849765,-0.964336478382,-0.964311098136,-0.964285709025,-0.964260311052,-0.964234904215,-0.964209488515,-0.964184063952,-0.964158630526,-0.964133188239,-0.964107737089,-0.964082277077,-0.964056808204,-0.964031330469,-0.964005843873,-0.963980348416,-0.963954844098,-0.96392933092,-0.963903808882,-0.963878277984,-0.963852738226,-0.963827189608,-0.963801632131,-0.963776065795,-0.963750490601,-0.963724906547,-0.963699313636,-0.963673711866,-0.963648101238,-0.963622481753,-0.96359685341,-0.96357121621,-0.963545570153,-0.96351991524,-0.96349425147,-0.963468578844,-0.963442897361,-0.963417207023,-0.96339150783,-0.963365799781,-0.963340082877,-0.963314357118,-0.963288622505,-0.963262879038,-0.963237126716,-0.96321136554,-0.963185595511,-0.963159816628,-0.963134028893,-0.963108232304,-0.963082426863,-0.963056612569,-0.963030789423,-0.963004957425,-0.962979116575,-0.962953266874,-0.962927408321,-0.962901540918,-0.962875664663,-0.962849779559,-0.962823885603,-0.962797982798,-0.962772071143,-0.962746150638,-0.962720221284,-0.962694283081,-0.962668336029,-0.962642380129,-0.96261641538,-0.962590441782,-0.962564459337,-0.962538468044,-0.962512467904,-0.962486458917,-0.962460441082,-0.962434414401,-0.962408378873,-0.962382334499,-0.962356281279,-0.962330219214,-0.962304148302,-0.962278068546,-0.962251979944,-0.962225882498,-0.962199776207,-0.962173661072,-0.962147537092,-0.962121404269,-0.962095262602,-0.962069112092,-0.962042952739,-0.962016784542,-0.961990607503,-0.961964421622,-0.961938226899,-0.961912023333,-0.961885810926,-0.961859589677,-0.961833359588,-0.961807120657,-0.961780872885,-0.961754616274,-0.961728350821,-0.961702076529,-0.961675793397,-0.961649501426,-0.961623200615,-0.961596890965,-0.961570572477,-0.96154424515,-0.961517908984,-0.961491563981,-0.961465210139,-0.96143884746,-0.961412475944,-0.961386095591,-0.961359706401,-0.961333308374,-0.961306901511,-0.961280485811,-0.961254061276,-0.961227627905,-0.961201185699,-0.961174734658,-0.961148274781,-0.96112180607,-0.961095328525,-0.961068842146,-0.961042346932,-0.961015842885,-0.960989330004,-0.96096280829,-0.960936277743,-0.960909738364,-0.960883190152,-0.960856633108,-0.960830067231,-0.960803492523,-0.960776908984,-0.960750316613,-0.960723715411,-0.960697105379,-0.960670486516,-0.960643858823,-0.960617222299,-0.960590576946,-0.960563922763,-0.960537259752,-0.96051058791,-0.960483907241,-0.960457217742,-0.960430519416,-0.960403812261,-0.960377096278,-0.960350371468,-0.96032363783,-0.960296895366,-0.960270144074,-0.960243383956,-0.960216615012,-0.960189837241,-0.960163050645,-0.960136255223,-0.960109450976,-0.960082637903,-0.960055816006,-0.960028985284,-0.960002145738,-0.959975297367,-0.959948440173,-0.959921574155,-0.959894699313,-0.959867815649,-0.959840923161,-0.959814021851,-0.959787111719,-0.959760192764,-0.959733264988,-0.959706328389,-0.95967938297,-0.959652428729,-0.959625465667,-0.959598493785,-0.959571513082,-0.959544523559,-0.959517525216,-0.959490518053,-0.959463502071,-0.95943647727,-0.95940944365,-0.959382401211,-0.959355349954,-0.959328289878,-0.959301220985,-0.959274143274,-0.959247056745,-0.9592199614,-0.959192857237,-0.959165744258,-0.959138622462,-0.95911149185,-0.959084352422,-0.959057204178,-0.959030047119,-0.959002881245,-0.958975706556,-0.958948523052,-0.958921330733,-0.958894129601,-0.958866919654,-0.958839700894,-0.95881247332,-0.958785236933,-0.958757991733,-0.958730737721,-0.958703474896,-0.958676203259,-0.95864892281,-0.958621633549,-0.958594335476,-0.958567028593,-0.958539712899,-0.958512388394,-0.958485055078,-0.958457712952,-0.958430362017,-0.958403002271,-0.958375633716,-0.958348256352,-0.95832087018,-0.958293475198,-0.958266071408,-0.95823865881,-0.958211237404,-0.95818380719,-0.958156368169,-0.95812892034,-0.958101463705,-0.958073998263,-0.958046524015,-0.95801904096,-0.9579915491,-0.957964048434,-0.957936538962,-0.957909020686,-0.957881493604,-0.957853957718,-0.957826413028,-0.957798859533,-0.957771297234,-0.957743726132,-0.957716146227,-0.957688557518,-0.957660960006,-0.957633353692,-0.957605738576,-0.957578114657,-0.957550481937,-0.957522840414,-0.957495190091,-0.957467530967,-0.957439863041,-0.957412186315,-0.957384500789,-0.957356806463,-0.957329103336,-0.957301391411,-0.957273670686,-0.957245941162,-0.957218202839,-0.957190455717,-0.957162699798,-0.95713493508,-0.957107161564,-0.957079379251,-0.957051588141,-0.957023788234,-0.95699597953,-0.956968162029,-0.956940335732,-0.956912500639,-0.956884656751,-0.956856804067,-0.956828942588,-0.956801072313,-0.956773193244,-0.956745305381,-0.956717408723,-0.956689503272,-0.956661589027,-0.956633665988,-0.956605734156,-0.956577793531,-0.956549844114,-0.956521885904,-0.956493918902,-0.956465943109,-0.956437958523,-0.956409965146,-0.956381962978,-0.95635395202,-0.95632593227,-0.95629790373,-0.956269866401,-0.956241820281,-0.956213765372,-0.956185701673,-0.956157629186,-0.956129547909,-0.956101457844,-0.956073358991,-0.95604525135,-0.956017134921,-0.955989009705,-0.955960875701,-0.95593273291,-0.955904581333,-0.955876420969,-0.955848251819,-0.955820073883,-0.955791887161,-0.955763691654,-0.955735487361,-0.955707274284,-0.955679052422,-0.955650821776,-0.955622582345,-0.955594334131,-0.955566077133,-0.955537811351,-0.955509536787,-0.95548125344,-0.95545296131,-0.955424660398,-0.955396350703,-0.955368032227,-0.95533970497,-0.955311368931,-0.955283024111,-0.955254670511,-0.955226308129,-0.955197936968,-0.955169557027,-0.955141168306,-0.955112770805,-0.955084364526,-0.955055949467,-0.95502752563,-0.954999093014,-0.95497065162,-0.954942201448,-0.954913742499,-0.954885274772,-0.954856798269,-0.954828312988,-0.954799818931,-0.954771316097,-0.954742804488,-0.954714284102,-0.954685754941,-0.954657217005,-0.954628670294,-0.954600114808,-0.954571550548,-0.954542977513,-0.954514395704,-0.954485805122,-0.954457205767,-0.954428597638,-0.954399980736,-0.954371355061,-0.954342720615,-0.954314077396,-0.954285425405,-0.954256764643,-0.954228095109,-0.954199416804,-0.954170729729,-0.954142033883,-0.954113329267,-0.95408461588,-0.954055893724,-0.954027162799,-0.953998423104,-0.95396967464,-0.953940917408,-0.953912151407,-0.953883376638,-0.953854593101,-0.953825800797,-0.953796999725,-0.953768189886,-0.95373937128,-0.953710543908,-0.953681707769,-0.953652862865,-0.953624009194,-0.953595146758,-0.953566275557,-0.953537395591,-0.95350850686,-0.953479609365,-0.953450703105,-0.953421788082,-0.953392864295,-0.953363931744,-0.953334990431,-0.953306040354,-0.953277081515,-0.953248113914,-0.95321913755,-0.953190152425,-0.953161158539,-0.953132155891,-0.953103144482,-0.953074124312,-0.953045095382,-0.953016057692,-0.952987011242,-0.952957956032,-0.952928892063,-0.952899819334,-0.952870737847,-0.952841647601,-0.952812548597,-0.952783440835,-0.952754324315,-0.952725199038,-0.952696065003,-0.952666922211,-0.952637770663,-0.952608610358,-0.952579441297,-0.95255026348,-0.952521076908,-0.95249188158,-0.952462677497,-0.952433464659,-0.952404243066,-0.95237501272,-0.952345773619,-0.952316525765,-0.952287269157,-0.952258003795,-0.952228729681,-0.952199446814,-0.952170155195,-0.952140854824,-0.952111545701,-0.952082227826,-0.9520529012,-0.952023565822,-0.951994221694,-0.951964868816,-0.951935507187,-0.951906136808,-0.951876757679,-0.951847369801,-0.951817973174,-0.951788567798,-0.951759153673,-0.9517297308,-0.951700299179,-0.95167085881,-0.951641409694,-0.95161195183,-0.951582485219,-0.951553009861,-0.951523525757,-0.951494032907,-0.951464531311,-0.951435020969,-0.951405501882,-0.951375974049,-0.951346437472,-0.95131689215,-0.951287338084,-0.951257775274,-0.95122820372,-0.951198623423,-0.951169034383,-0.951139436599,-0.951109830073,-0.951080214804,-0.951050590794,-0.951020958041,-0.950991316547,-0.950961666312,-0.950932007335,-0.950902339618,-0.95087266316,-0.950842977962,-0.950813284024,-0.950783581347,-0.95075386993,-0.950724149774,-0.950694420879,-0.950664683245,-0.950634936874,-0.950605181764,-0.950575417916,-0.950545645331,-0.950515864009,-0.950486073949,-0.950456275154,-0.950426467621,-0.950396651353,-0.950366826349,-0.950336992609,-0.950307150134,-0.950277298924,-0.950247438979,-0.950217570299,-0.950187692886,-0.950157806738,-0.950127911857,-0.950098008243,-0.950068095895,-0.950038174815,-0.950008245002,-0.949978306457,-0.949948359179,-0.94991840317,-0.94988843843,-0.949858464959,-0.949828482756,-0.949798491823,-0.94976849216,-0.949738483766,-0.949708466643,-0.94967844079,-0.949648406208,-0.949618362897,-0.949588310857,-0.949558250089,-0.949528180593,-0.949498102369,-0.949468015417,-0.949437919738,-0.949407815332,-0.9493777022,-0.94934758034,-0.949317449755,-0.949287310444,-0.949257162406,-0.949227005644,-0.949196840157,-0.949166665944,-0.949136483008,-0.949106291347,-0.949076090961,-0.949045881853,-0.949015664021,-0.948985437465,-0.948955202187,-0.948924958186,-0.948894705463,-0.948864444018,-0.948834173851,-0.948803894963,-0.948773607353,-0.948743311023,-0.948713005971,-0.9486826922,-0.948652369708,-0.948622038497,-0.948591698566,-0.948561349916,-0.948530992547,-0.948500626459,-0.948470251652,-0.948439868128,-0.948409475886,-0.948379074926,-0.948348665249,-0.948318246855,-0.948287819744,-0.948257383916,-0.948226939373,-0.948196486113,-0.948166024138,-0.948135553448,-0.948105074043,-0.948074585922,-0.948044089088,-0.948013583539,-0.947983069276,-0.947952546299,-0.947922014609,-0.947891474206,-0.94786092509,-0.947830367262,-0.947799800721,-0.947769225469,-0.947738641505,-0.947708048829,-0.947677447442,-0.947646837344,-0.947616218536,-0.947585591018,-0.947554954789,-0.947524309851,-0.947493656203,-0.947462993846,-0.947432322781,-0.947401643006,-0.947370954524,-0.947340257333,-0.947309551435,-0.947278836829,-0.947248113516,-0.947217381496,-0.947186640769,-0.947155891336,-0.947125133198,-0.947094366353,-0.947063590803,-0.947032806547,-0.947002013587,-0.946971211922,-0.946940401552,-0.946909582479,-0.946878754702,-0.946847918221,-0.946817073037,-0.94678621915,-0.946755356561,-0.946724485269,-0.946693605275,-0.946662716579,-0.946631819182,-0.946600913083,-0.946569998284,-0.946539074784,-0.946508142583,-0.946477201682,-0.946446252082,-0.946415293782,-0.946384326783,-0.946353351084,-0.946322366688,-0.946291373592,-0.946260371799,-0.946229361308,-0.946198342119,-0.946167314233,-0.94613627765,-0.94610523237,-0.946074178394,-0.946043115722,-0.946012044354,-0.945980964291,-0.945949875532,-0.945918778078,-0.94588767193,-0.945856557087,-0.94582543355,-0.945794301319,-0.945763160395,-0.945732010777,-0.945700852467,-0.945669685464,-0.945638509768,-0.945607325381,-0.945576132301,-0.94554493053,-0.945513720068,-0.945482500914,-0.945451273071,-0.945420036536,-0.945388791312,-0.945357537398,-0.945326274794,-0.945295003501,-0.945263723519,-0.945232434848,-0.945201137489,-0.945169831442,-0.945138516708,-0.945107193285,-0.945075861176,-0.945044520379,-0.945013170896,-0.944981812727,-0.944950445871,-0.94491907033,-0.944887686103,-0.944856293191,-0.944824891594,-0.944793481312,-0.944762062346,-0.944730634696,-0.944699198362,-0.944667753345,-0.944636299645,-0.944604837261,-0.944573366196,-0.944541886447,-0.944510398017,-0.944478900905,-0.944447395112,-0.944415880637,-0.944384357482,-0.944352825646,-0.944321285129,-0.944289735933,-0.944258178057,-0.944226611501,-0.944195036267,-0.944163452353,-0.944131859761,-0.944100258491,-0.944068648543,-0.944037029917,-0.944005402614,-0.943973766634,-0.943942121976,-0.943910468643,-0.943878806633,-0.943847135947,-0.943815456586,-0.943783768549,-0.943752071837,-0.94372036645,-0.943688652389,-0.943656929654,-0.943625198245,-0.943593458162,-0.943561709406,-0.943529951977,-0.943498185875,-0.943466411101,-0.943434627654,-0.943402835536,-0.943371034746,-0.943339225285,-0.943307407153,-0.94327558035,-0.943243744877,-0.943211900734,-0.943180047921,-0.943148186438,-0.943116316287,-0.943084437466,-0.943052549977,-0.943020653819,-0.942988748994,-0.9429568355,-0.942924913339,-0.942892982511,-0.942861043016,-0.942829094855,-0.942797138027,-0.942765172533,-0.942733198374,-0.942701215549,-0.942669224059,-0.942637223904,-0.942605215085,-0.942573197601,-0.942541171454,-0.942509136643,-0.942477093168,-0.942445041031,-0.942412980231,-0.942380910768,-0.942348832643,-0.942316745857,-0.942284650408,-0.942252546299,-0.942220433528,-0.942188312097,-0.942156182005,-0.942124043254,-0.942091895842,-0.942059739771,-0.942027575041,-0.941995401652,-0.941963219604,-0.941931028898,-0.941898829534,-0.941866621512,-0.941834404832,-0.941802179496,-0.941769945503,-0.941737702853,-0.941705451547,-0.941673191585,-0.941640922967,-0.941608645694,-0.941576359766,-0.941544065183,-0.941511761946,-0.941479450054,-0.941447129509,-0.94141480031,-0.941382462457,-0.941350115952,-0.941317760794,-0.941285396984,-0.941253024521,-0.941220643407,-0.941188253642,-0.941155855225,-0.941123448157,-0.941091032438,-0.94105860807,-0.941026175051,-0.940993733382,-0.940961283065,-0.940928824098,-0.940896356482,-0.940863880217,-0.940831395305,-0.940798901744,-0.940766399536,-0.940733888681,-0.940701369179,-0.940668841029,-0.940636304234,-0.940603758792,-0.940571204705,-0.940538641972,-0.940506070593,-0.94047349057,-0.940440901902,-0.94040830459,-0.940375698634,-0.940343084034,-0.94031046079,-0.940277828904,-0.940245188375,-0.940212539203,-0.940179881389,-0.940147214933,-0.940114539835,-0.940081856096,-0.940049163716,-0.940016462695,-0.939983753034,-0.939951034733,-0.939918307792,-0.939885572211,-0.939852827991,-0.939820075132,-0.939787313635,-0.939754543499,-0.939721764725,-0.939688977314,-0.939656181265,-0.939623376579,-0.939590563256,-0.939557741296,-0.939524910701,-0.939492071469,-0.939459223602,-0.9394263671,-0.939393501962,-0.93936062819,-0.939327745784,-0.939294854743,-0.939261955069,-0.939229046761,-0.93919612982,-0.939163204246,-0.939130270039,-0.9390973272,-0.939064375729,-0.939031415627,-0.938998446893,-0.938965469528,-0.938932483532,-0.938899488906,-0.938866485649,-0.938833473763,-0.938800453247,-0.938767424102,-0.938734386328,-0.938701339926,-0.938668284895,-0.938635221236,-0.938602148949,-0.938569068035,-0.938535978494,-0.938502880325,-0.938469773531,-0.93843665811,-0.938403534063,-0.938370401391,-0.938337260093,-0.93830411017,-0.938270951623,-0.938237784451,-0.938204608655,-0.938171424236,-0.938138231193,-0.938105029527,-0.938071819238,-0.938038600326,-0.938005372792,-0.937972136636,-0.937938891859,-0.93790563846,-0.93787237644,-0.937839105799,-0.937805826538,-0.937772538657,-0.937739242156,-0.937705937036,-0.937672623297,-0.937639300938,-0.937605969961,-0.937572630366,-0.937539282152,-0.937505925321,-0.937472559873,-0.937439185808,-0.937405803126,-0.937372411827,-0.937339011913,-0.937305603382,-0.937272186236,-0.937238760475,-0.937205326099,-0.937171883108,-0.937138431503,-0.937104971284,-0.937071502452,-0.937038025006,-0.937004538947,-0.936971044275,-0.936937540991,-0.936904029095,-0.936870508586,-0.936836979467,-0.936803441736,-0.936769895394,-0.936736340442,-0.936702776879,-0.936669204707,-0.936635623924,-0.936602034533,-0.936568436532,-0.936534829923,-0.936501214705,-0.936467590879,-0.936433958445,-0.936400317404,-0.936366667756,-0.9363330095,-0.936299342638,-0.93626566717,-0.936231983096,-0.936198290416,-0.936164589131,-0.936130879241,-0.936097160746,-0.936063433647,-0.936029697944,-0.935995953637,-0.935962200726,-0.935928439213,-0.935894669096,-0.935860890377,-0.935827103055,-0.935793307132,-0.935759502607,-0.935725689481,-0.935691867754,-0.935658037426,-0.935624198498,-0.93559035097,-0.935556494841,-0.935522630114,-0.935488756787,-0.935454874862,-0.935420984338,-0.935387085216,-0.935353177496,-0.935319261179,-0.935285336264,-0.935251402752,-0.935217460644,-0.935183509939,-0.935149550638,-0.935115582742,-0.93508160625,-0.935047621163,-0.935013627482,-0.934979625206,-0.934945614336,-0.934911594872,-0.934877566814,-0.934843530163,-0.93480948492,-0.934775431084,-0.934741368655,-0.934707297635,-0.934673218023,-0.93463912982,-0.934605033025,-0.93457092764,-0.934536813665,-0.9345026911,-0.934468559945,-0.9344344202,-0.934400271866,-0.934366114944,-0.934331949433,-0.934297775334,-0.934263592646,-0.934229401372,-0.93419520151,-0.934160993061,-0.934126776026,-0.934092550404,-0.934058316197,-0.934024073403,-0.933989822025,-0.933955562061,-0.933921293513,-0.93388701638,-0.933852730663,-0.933818436362,-0.933784133478,-0.933749822011,-0.933715501961,-0.933681173328,-0.933646836113,-0.933612490317,-0.933578135938,-0.933543772979,-0.933509401438,-0.933475021317,-0.933440632616,-0.933406235335,-0.933371829474,-0.933337415033,-0.933302992014,-0.933268560416,-0.933234120239,-0.933199671485,-0.933165214152,-0.933130748242,-0.933096273755,-0.933061790692,-0.933027299051,-0.932992798835,-0.932958290042,-0.932923772674,-0.932889246731,-0.932854712213,-0.932820169121,-0.932785617454,-0.932751057213,-0.932716488398,-0.93268191101,-0.932647325049,-0.932612730516,-0.93257812741,-0.932543515732,-0.932508895482,-0.932474266661,-0.932439629268,-0.932404983305,-0.932370328772,-0.932335665668,-0.932300993995,-0.932266313752,-0.932231624939,-0.932196927558,-0.932162221609,-0.932127507091,-0.932092784005,-0.932058052351,-0.932023312131,-0.931988563343,-0.931953805989,-0.931919040068,-0.931884265582,-0.931849482529,-0.931814690912,-0.931779890729,-0.931745081982,-0.93171026467,-0.931675438794,-0.931640604354,-0.931605761351,-0.931570909785,-0.931536049656,-0.931501180965,-0.931466303711,-0.931431417895,-0.931396523518,-0.93136162058,-0.931326709081,-0.931291789022,-0.931256860402,-0.931221923222,-0.931186977483,-0.931152023184,-0.931117060326,-0.93108208891,-0.931047108936,-0.931012120403,-0.930977123313,-0.930942117665,-0.930907103461,-0.9308720807,-0.930837049382,-0.930802009508,-0.930766961079,-0.930731904094,-0.930696838554,-0.93066176446,-0.930626681811,-0.930591590607,-0.93055649085,-0.93052138254,-0.930486265676,-0.93045114026,-0.930416006291,-0.93038086377,-0.930345712696,-0.930310553072,-0.930275384896,-0.930240208169,-0.930205022892,-0.930169829065,-0.930134626687,-0.93009941576,-0.930064196284,-0.930028968259,-0.929993731685,-0.929958486563,-0.929923232893,-0.929887970675,-0.92985269991,-0.929817420598,-0.929782132739,-0.929746836334,-0.929711531382,-0.929676217885,-0.929640895843,-0.929605565256,-0.929570226124,-0.929534878447,-0.929499522227,-0.929464157462,-0.929428784155,-0.929393402304,-0.92935801191,-0.929322612974,-0.929287205496,-0.929251789475,-0.929216364914,-0.929180931811,-0.929145490168,-0.929110039984,-0.929074581259,-0.929039113995,-0.929003638192,-0.928968153849,-0.928932660967,-0.928897159547,-0.928861649588,-0.928826131092,-0.928790604058,-0.928755068487,-0.928719524379,-0.928683971734,-0.928648410553,-0.928612840836,-0.928577262584,-0.928541675796,-0.928506080473,-0.928470476616,-0.928434864224,-0.928399243299,-0.928363613839,-0.928327975847,-0.928292329321,-0.928256674263,-0.928221010672,-0.92818533855,-0.928149657895,-0.92811396871,-0.928078270993,-0.928042564746,-0.928006849968,-0.92797112666,-0.927935394823,-0.927899654456,-0.92786390556,-0.927828148135,-0.927792382182,-0.927756607701,-0.927720824692,-0.927685033156,-0.927649233093,-0.927613424502,-0.927577607386,-0.927541781743,-0.927505947575,-0.927470104881,-0.927434253662,-0.927398393919,-0.92736252565,-0.927326648858,-0.927290763542,-0.927254869703,-0.92721896734,-0.927183056455,-0.927147137047,-0.927111209117,-0.927075272665,-0.927039327691,-0.927003374197,-0.926967412182,-0.926931441646,-0.92689546259,-0.926859475014,-0.926823478919,-0.926787474305,-0.926751461171,-0.92671543952,-0.92667940935,-0.926643370662,-0.926607323457,-0.926571267734,-0.926535203495,-0.926499130739,-0.926463049467,-0.926426959679,-0.926390861376,-0.926354754558,-0.926318639224,-0.926282515376,-0.926246383014,-0.926210242138,-0.926174092749,-0.926137934846,-0.926101768431,-0.926065593503,-0.926029410062,-0.92599321811,-0.925957017647,-0.925920808672,-0.925884591186,-0.92584836519,-0.925812130683,-0.925775887667,-0.925739636141,-0.925703376106,-0.925667107562,-0.92563083051,-0.925594544949,-0.925558250881,-0.925521948305,-0.925485637221,-0.925449317631,-0.925412989535,-0.925376652932,-0.925340307823,-0.925303954209,-0.92526759209,-0.925231221465,-0.925194842336,-0.925158454703,-0.925122058567,-0.925085653926,-0.925049240783,-0.925012819136,-0.924976388987,-0.924939950336,-0.924903503183,-0.924867047529,-0.924830583373,-0.924794110717,-0.92475762956,-0.924721139902,-0.924684641745,-0.924648135089,-0.924611619933,-0.924575096279,-0.924538564125,-0.924502023474,-0.924465474325,-0.924428916679,-0.924392350535,-0.924355775895,-0.924319192758,-0.924282601125,-0.924246000996,-0.924209392371,-0.924172775252,-0.924136149637,-0.924099515529,-0.924062872926,-0.924026221829,-0.923989562239,-0.923952894156,-0.92391621758,-0.923879532511,-0.923842838951,-0.923806136898,-0.923769426355,-0.92373270732,-0.923695979794,-0.923659243778,-0.923622499272,-0.923585746276,-0.923548984791,-0.923512214817,-0.923475436354,-0.923438649402,-0.923401853963,-0.923365050036,-0.923328237621,-0.92329141672,-0.923254587331,-0.923217749457,-0.923180903096,-0.92314404825,-0.923107184918,-0.923070313101,-0.9230334328,-0.922996544014,-0.922959646745,-0.922922740991,-0.922885826755,-0.922848904035,-0.922811972833,-0.922775033148,-0.922738084982,-0.922701128334,-0.922664163205,-0.922627189594,-0.922590207503,-0.922553216932,-0.922516217881,-0.922479210351,-0.922442194341,-0.922405169852,-0.922368136885,-0.922331095439,-0.922294045516,-0.922256987115,-0.922219920237,-0.922182844882,-0.922145761051,-0.922108668743,-0.92207156796,-0.922034458701,-0.921997340967,-0.921960214758,-0.921923080075,-0.921885936918,-0.921848785286,-0.921811625182,-0.921774456604,-0.921737279554,-0.921700094031,-0.921662900036,-0.921625697569,-0.921588486631,-0.921551267222,-0.921514039342,-0.921476802992,-0.921439558172,-0.921402304882,-0.921365043123,-0.921327772894,-0.921290494198,-0.921253207033,-0.921215911399,-0.921178607299,-0.921141294731,-0.921103973696,-0.921066644194,-0.921029306227,-0.920991959793,-0.920954604894,-0.920917241529,-0.9208798697,-0.920842489406,-0.920805100648,-0.920767703426,-0.920730297741,-0.920692883592,-0.920655460981,-0.920618029907,-0.920580590371,-0.920543142373,-0.920505685914,-0.920468220994,-0.920430747613,-0.920393265772,-0.92035577547,-0.920318276709,-0.920280769489,-0.920243253809,-0.920205729671,-0.920168197074,-0.92013065602,-0.920093106508,-0.920055548538,-0.920017982112,-0.919980407229,-0.919942823889,-0.919905232094,-0.919867631843,-0.919830023137,-0.919792405976,-0.919754780361,-0.919717146291,-0.919679503768,-0.919641852791,-0.919604193361,-0.919566525478,-0.919528849142,-0.919491164355,-0.919453471116,-0.919415769425,-0.919378059283,-0.919340340691,-0.919302613648,-0.919264878155,-0.919227134212,-0.919189381821,-0.91915162098,-0.91911385169,-0.919076073952,-0.919038287766,-0.919000493133,-0.918962690052,-0.918924878525,-0.918887058551,-0.91884923013,-0.918811393264,-0.918773547952,-0.918735694196,-0.918697831994,-0.918659961348,-0.918622082257,-0.918584194723,-0.918546298746,-0.918508394325,-0.918470481462,-0.918432560156,-0.918394630408,-0.918356692219,-0.918318745588,-0.918280790517,-0.918242827004,-0.918204855051,-0.918166874659,-0.918128885827,-0.918090888555,-0.918052882845,-0.918014868696,-0.917976846109,-0.917938815084,-0.917900775621,-0.917862727722,-0.917824671385,-0.917786606613,-0.917748533404,-0.917710451759,-0.917672361679,-0.917634263164,-0.917596156214,-0.91755804083,-0.917519917012,-0.91748178476,-0.917443644075,-0.917405494957,-0.917367337406,-0.917329171423,-0.917290997008,-0.917252814162,-0.917214622885,-0.917176423176,-0.917138215037,-0.917099998468,-0.91706177347,-0.917023540041,-0.916985298184,-0.916947047898,-0.916908789184,-0.916870522041,-0.916832246471,-0.916793962474,-0.916755670049,-0.916717369198,-0.916679059921,-0.916640742218,-0.916602416089,-0.916564081535,-0.916525738556,-0.916487387153,-0.916449027325,-0.916410659074,-0.916372282399,-0.916333897301,-0.916295503781,-0.916257101838,-0.916218691473,-0.916180272686,-0.916141845478,-0.916103409849,-0.916064965799,-0.916026513329,-0.91598805244,-0.91594958313,-0.915911105402,-0.915872619254,-0.915834124688,-0.915795621704,-0.915757110302,-0.915718590483,-0.915680062246,-0.915641525593,-0.915602980523,-0.915564427038,-0.915525865136,-0.91548729482,-0.915448716088,-0.915410128942,-0.915371533382,-0.915332929407,-0.915294317019,-0.915255696218,-0.915217067005,-0.915178429378,-0.91513978334,-0.915101128889,-0.915062466028,-0.915023794755,-0.914985115072,-0.914946426978,-0.914907730474,-0.914869025561,-0.914830312238,-0.914791590506,-0.914752860366,-0.914714121818,-0.914675374862,-0.914636619498,-0.914597855727,-0.914559083549,-0.914520302965,-0.914481513975,-0.914442716579,-0.914403910778,-0.914365096571,-0.914326273961,-0.914287442945,-0.914248603526,-0.914209755704,-0.914170899478,-0.914132034849,-0.914093161817,-0.914054280384,-0.914015390549,-0.913976492312,-0.913937585674,-0.913898670636,-0.913859747197,-0.913820815358,-0.91378187512,-0.913742926482,-0.913703969445,-0.91366500401,-0.913626030177,-0.913587047945,-0.913548057316,-0.91350905829,-0.913470050868,-0.913431035049,-0.913392010833,-0.913352978222,-0.913313937216,-0.913274887815,-0.913235830019,-0.913196763829,-0.913157689245,-0.913118606267,-0.913079514896,-0.913040415133,-0.913001306977,-0.912962190428,-0.912923065488,-0.912883932157,-0.912844790435,-0.912805640322,-0.912766481818,-0.912727314925,-0.912688139642,-0.91264895597,-0.912609763909,-0.912570563459,-0.912531354622,-0.912492137396,-0.912452911783,-0.912413677783,-0.912374435396,-0.912335184623,-0.912295925464,-0.91225665792,-0.91221738199,-0.912178097675,-0.912138804975,-0.912099503892,-0.912060194424,-0.912020876574,-0.91198155034,-0.911942215723,-0.911902872724,-0.911863521343,-0.91182416158,-0.911784793436,-0.911745416911,-0.911706032005,-0.91166663872,-0.911627237054,-0.911587827009,-0.911548408585,-0.911508981782,-0.911469546601,-0.911430103041,-0.911390651104,-0.91135119079,-0.911311722098,-0.911272245031,-0.911232759586,-0.911193265767,-0.911153763571,-0.911114253001,-0.911074734055,-0.911035206735,-0.910995671042,-0.910956126974,-0.910916574533,-0.91087701372,-0.910837444533,-0.910797866975,-0.910758281044,-0.910718686743,-0.91067908407,-0.910639473026,-0.910599853612,-0.910560225827,-0.910520589673,-0.91048094515,-0.910441292258,-0.910401630997,-0.910361961368,-0.910322283372,-0.910282597007,-0.910242902276,-0.910203199178,-0.910163487713,-0.910123767883,-0.910084039686,-0.910044303125,-0.910004558198,-0.909964804907,-0.909925043252,-0.909885273233,-0.90984549485,-0.909805708105,-0.909765912996,-0.909726109525,-0.909686297693,-0.909646477498,-0.909606648943,-0.909566812026,-0.909526966749,-0.909487113112,-0.909447251114,-0.909407380758,-0.909367502042,-0.909327614968,-0.909287719535,-0.909247815744,-0.909207903596,-0.909167983091,-0.909128054228,-0.909088117009,-0.909048171434,-0.909008217503,-0.908968255217,-0.908928284576,-0.90888830558,-0.908848318229,-0.908808322525,-0.908768318467,-0.908728306056,-0.908688285293,-0.908648256176,-0.908608218708,-0.908568172888,-0.908528118716,-0.908488056194,-0.908447985321,-0.908407906097,-0.908367818524,-0.908327722601,-0.908287618329,-0.908247505709,-0.908207384739,-0.908167255422,-0.908127117757,-0.908086971745,-0.908046817386,-0.90800665468,-0.907966483629,-0.907926304231,-0.907886116488,-0.907845920399,-0.907805715966,-0.907765503189,-0.907725282068,-0.907685052603,-0.907644814795,-0.907604568643,-0.90756431415,-0.907524051314,-0.907483780137,-0.907443500618,-0.907403212758,-0.907362916557,-0.907322612016,-0.907282299136,-0.907241977915,-0.907201648356,-0.907161310458,-0.907120964221,-0.907080609646,-0.907040246734,-0.906999875484,-0.906959495897,-0.906919107974,-0.906878711714,-0.906838307119,-0.906797894188,-0.906757472922,-0.906717043321,-0.906676605386,-0.906636159117,-0.906595704515,-0.906555241579,-0.90651477031,-0.906474290709,-0.906433802776,-0.906393306511,-0.906352801915,-0.906312288987,-0.906271767729,-0.906231238141,-0.906190700223,-0.906150153975,-0.906109599398,-0.906069036493,-0.906028465259,-0.905987885697,-0.905947297807,-0.90590670159,-0.905866097047,-0.905825484176,-0.90578486298,-0.905744233458,-0.90570359561,-0.905662949437,-0.90562229494,-0.905581632118,-0.905540960973,-0.905500281504,-0.905459593711,-0.905418897596,-0.905378193159,-0.905337480399,-0.905296759318,-0.905256029916,-0.905215292192,-0.905174546148,-0.905133791784,-0.9050930291,-0.905052258097,-0.905011478775,-0.904970691134,-0.904929895174,-0.904889090897,-0.904848278302,-0.90480745739,-0.904766628162,-0.904725790616,-0.904684944755,-0.904644090578,-0.904603228086,-0.904562357279,-0.904521478157,-0.904480590721,-0.904439694972,-0.904398790909,-0.904357878533,-0.904316957844,-0.904276028843,-0.90423509153,-0.904194145906,-0.90415319197,-0.904112229724,-0.904071259167,-0.9040302803,-0.903989293123,-0.903948297638,-0.903907293843,-0.90386628174,-0.903825261328,-0.903784232609,-0.903743195583,-0.903702150249,-0.903661096609,-0.903620034663,-0.903578964411,-0.903537885853,-0.90349679899,-0.903455703822,-0.90341460035,-0.903373488574,-0.903332368495,-0.903291240112,-0.903250103426,-0.903208958438,-0.903167805147,-0.903126643555,-0.903085473662,-0.903044295468,-0.903003108973,-0.902961914177,-0.902920711082,-0.902879499688,-0.902838279995,-0.902797052002,-0.902755815712,-0.902714571123,-0.902673318237,-0.902632057054,-0.902590787574,-0.902549509798,-0.902508223725,-0.902466929357,-0.902425626694,-0.902384315735,-0.902342996482,-0.902301668935,-0.902260333095,-0.902218988961,-0.902177636533,-0.902136275814,-0.902094906802,-0.902053529498,-0.902012143902,-0.901970750016,-0.901929347839,-0.901887937371,-0.901846518614,-0.901805091567,-0.901763656231,-0.901722212606,-0.901680760692,-0.90163930049,-0.901597832001,-0.901556355225,-0.901514870161,-0.901473376811,-0.901431875175,-0.901390365253,-0.901348847046,-0.901307320554,-0.901265785777,-0.901224242716,-0.901182691371,-0.901141131742,-0.901099563831,-0.901057987636,-0.90101640316,-0.900974810401,-0.900933209361,-0.90089160004,-0.900849982438,-0.900808356555,-0.900766722392,-0.90072507995,-0.900683429229,-0.900641770228,-0.900600102949,-0.900558427392,-0.900516743558,-0.900475051445,-0.900433351056,-0.900391642391,-0.900349925449,-0.900308200231,-0.900266466738,-0.90022472497,-0.900182974927,-0.90014121661,-0.900099450019,-0.900057675154,-0.900015892016,-0.899974100606,-0.899932300923,-0.899890492968,-0.899848676742,-0.899806852244,-0.899765019475,-0.899723178436,-0.899681329127,-0.899639471549,-0.899597605701,-0.899555731584,-0.899513849198,-0.899471958545,-0.899430059624,-0.899388152435,-0.899346236979,-0.899304313257,-0.899262381269,-0.899220441014,-0.899178492495,-0.89913653571,-0.89909457066,-0.899052597347,-0.899010615769,-0.898968625928,-0.898926627824,-0.898884621457,-0.898842606827,-0.898800583936,-0.898758552783,-0.898716513369,-0.898674465694,-0.898632409759,-0.898590345563,-0.898548273108,-0.898506192394,-0.898464103421,-0.898422006189,-0.898379900699,-0.898337786952,-0.898295664947,-0.898253534685,-0.898211396167,-0.898169249393,-0.898127094362,-0.898084931077,-0.898042759536,-0.898000579741,-0.897958391691,-0.897916195388,-0.897873990831,-0.897831778021,-0.897789556959,-0.897747327644,-0.897705090077,-0.897662844259,-0.89762059019,-0.89757832787,-0.897536057299,-0.897493778479,-0.897451491409,-0.89740919609,-0.897366892522,-0.897324580705,-0.897282260641,-0.897239932329,-0.89719759577,-0.897155250964,-0.897112897911,-0.897070536613,-0.897028167068,-0.896985789279,-0.896943403244,-0.896901008965,-0.896858606442,-0.896816195676,-0.896773776665,-0.896731349412,-0.896688913917,-0.896646470179,-0.896604018199,-0.896561557978,-0.896519089516,-0.896476612813,-0.89643412787,-0.896391634688,-0.896349133266,-0.896306623604,-0.896264105705,-0.896221579567,-0.896179045191,-0.896136502577,-0.896093951727,-0.896051392639,-0.896008825316,-0.895966249756,-0.895923665961,-0.895881073931,-0.895838473666,-0.895795865167,-0.895753248434,-0.895710623467,-0.895667990267,-0.895625348834,-0.895582699169,-0.895540041272,-0.895497375143,-0.895454700783,-0.895412018192,-0.895369327371,-0.89532662832,-0.895283921039,-0.895241205528,-0.895198481789,-0.895155749822,-0.895113009626,-0.895070261203,-0.895027504552,-0.894984739675,-0.894941966571,-0.89489918524,-0.894856395685,-0.894813597903,-0.894770791897,-0.894727977667,-0.894685155212,-0.894642324533,-0.894599485631,-0.894556638506,-0.894513783159,-0.894470919589,-0.894428047798,-0.894385167785,-0.894342279551,-0.894299383097,-0.894256478422,-0.894213565528,-0.894170644414,-0.894127715081,-0.89408477753,-0.89404183176,-0.893998877772,-0.893955915567,-0.893912945145,-0.893869966506,-0.893826979651,-0.893783984581,-0.893740981294,-0.893697969793,-0.893654950077,-0.893611922146,-0.893568886002,-0.893525841644,-0.893482789074,-0.89343972829,-0.893396659294,-0.893353582086,-0.893310496667,-0.893267403037,-0.893224301196,-0.893181191144,-0.893138072883,-0.893094946412,-0.893051811732,-0.893008668843,-0.892965517746,-0.892922358441,-0.892879190928,-0.892836015208,-0.892792831282,-0.892749639149,-0.89270643881,-0.892663230265,-0.892620013516,-0.892576788562,-0.892533555403,-0.89249031404,-0.892447064474,-0.892403806704,-0.892360540732,-0.892317266557,-0.892273984181,-0.892230693602,-0.892187394823,-0.892144087843,-0.892100772662,-0.892057449282,-0.892014117701,-0.891970777922,-0.891927429944,-0.891884073767,-0.891840709392,-0.89179733682,-0.891753956051,-0.891710567084,-0.891667169922,-0.891623764563,-0.891580351009,-0.891536929259,-0.891493499315,-0.891450061176,-0.891406614843,-0.891363160317,-0.891319697597,-0.891276226685,-0.89123274758,-0.891189260283,-0.891145764795,-0.891102261115,-0.891058749244,-0.891015229183,-0.890971700932,-0.890928164492,-0.890884619862,-0.890841067043,-0.890797506036,-0.890753936841,-0.890710359459,-0.890666773889,-0.890623180132,-0.890579578189,-0.89053596806,-0.890492349745,-0.890448723245,-0.89040508856,-0.890361445691,-0.890317794637,-0.890274135401,-0.890230467981,-0.890186792378,-0.890143108592,-0.890099416625,-0.890055716476,-0.890012008146,-0.889968291635,-0.889924566944,-0.889880834073,-0.889837093022,-0.889793343792,-0.889749586383,-0.889705820796,-0.889662047031,-0.889618265088,-0.889574474968,-0.889530676671,-0.889486870198,-0.889443055549,-0.889399232724,-0.889355401724,-0.88931156255,-0.889267715201,-0.889223859678,-0.889179995981,-0.889136124112,-0.889092244069,-0.889048355855,-0.889004459468,-0.88896055491,-0.88891664218,-0.88887272128,-0.88882879221,-0.88878485497,-0.88874090956,-0.888696955981,-0.888652994233,-0.888609024317,-0.888565046233,-0.888521059982,-0.888477065564,-0.888433062978,-0.888389052227,-0.88834503331,-0.888301006227,-0.888256970979,-0.888212927566,-0.88816887599,-0.888124816249,-0.888080748345,-0.888036672278,-0.887992588048,-0.887948495656,-0.887904395102,-0.887860286387,-0.88781616951,-0.887772044473,-0.887727911276,-0.887683769919,-0.887639620403,-0.887595462728,-0.887551296894,-0.887507122901,-0.887462940752,-0.887418750444,-0.88737455198,-0.887330345359,-0.887286130582,-0.88724190765,-0.887197676562,-0.887153437319,-0.887109189921,-0.88706493437,-0.887020670664,-0.886976398806,-0.886932118794,-0.88688783063,-0.886843534314,-0.886799229847,-0.886754917228,-0.886710596458,-0.886666267537,-0.886621930467,-0.886577585247,-0.886533231878,-0.88648887036,-0.886444500693,-0.886400122879,-0.886355736917,-0.886311342807,-0.886266940551,-0.886222530149,-0.8861781116,-0.886133684907,-0.886089250067,-0.886044807084,-0.886000355955,-0.885955896683,-0.885911429268,-0.885866953709,-0.885822470007,-0.885777978164,-0.885733478178,-0.885688970051,-0.885644453783,-0.885599929374,-0.885555396825,-0.885510856136,-0.885466307308,-0.885421750341,-0.885377185235,-0.885332611991,-0.885288030609,-0.885243441089,-0.885198843433,-0.88515423764,-0.885109623711,-0.885065001647,-0.885020371447,-0.884975733112,-0.884931086642,-0.884886432039,-0.884841769301,-0.884797098431,-0.884752419428,-0.884707732292,-0.884663037024,-0.884618333624,-0.884573622094,-0.884528902432,-0.88448417464,-0.884439438718,-0.884394694667,-0.884349942486,-0.884305182177,-0.884260413739,-0.884215637173,-0.88417085248,-0.88412605966,-0.884081258713,-0.884036449639,-0.88399163244,-0.883946807116,-0.883901973666,-0.883857132091,-0.883812282393,-0.883767424571,-0.883722558625,-0.883677684556,-0.883632802365,-0.883587912051,-0.883543013616,-0.883498107059,-0.883453192382,-0.883408269584,-0.883363338666,-0.883318399628,-0.883273452471,-0.883228497195,-0.883183533801,-0.883138562288,-0.883093582658,-0.883048594911,-0.883003599047,-0.882958595066,-0.88291358297,-0.882868562758,-0.882823534431,-0.882778497989,-0.882733453433,-0.882688400763,-0.88264333998,-0.882598271083,-0.882553194074,-0.882508108952,-0.882463015719,-0.882417914374,-0.882372804919,-0.882327687352,-0.882282561676,-0.88223742789,-0.882192285994,-0.88214713599,-0.882101977877,-0.882056811656,-0.882011637327,-0.881966454891,-0.881921264348,-0.881876065699,-0.881830858944,-0.881785644083,-0.881740421117,-0.881695190046,-0.881649950871,-0.881604703592,-0.881559448209,-0.881514184723,-0.881468913135,-0.881423633444,-0.881378345652,-0.881333049758,-0.881287745763,-0.881242433667,-0.881197113471,-0.881151785176,-0.881106448781,-0.881061104287,-0.881015751694,-0.880970391004,-0.880925022216,-0.88087964533,-0.880834260348,-0.880788867269,-0.880743466094,-0.880698056824,-0.880652639458,-0.880607213998,-0.880561780443,-0.880516338794,-0.880470889052,-0.880425431217,-0.880379965289,-0.880334491269,-0.880289009157,-0.880243518953,-0.880198020659,-0.880152514274,-0.880106999798,-0.880061477233,-0.880015946579,-0.879970407836,-0.879924861004,-0.879879306084,-0.879833743076,-0.879788171982,-0.8797425928,-0.879697005532,-0.879651410178,-0.879605806739,-0.879560195214,-0.879514575604,-0.879468947911,-0.879423312133,-0.879377668272,-0.879332016328,-0.879286356301,-0.879240688192,-0.879195012001,-0.879149327729,-0.879103635376,-0.879057934942,-0.879012226429,-0.878966509835,-0.878920785162,-0.878875052411,-0.878829311581,-0.878783562673,-0.878737805687,-0.878692040625,-0.878646267485,-0.878600486269,-0.878554696977,-0.87850889961,-0.878463094168,-0.878417280651,-0.87837145906,-0.878325629395,-0.878279791657,-0.878233945845,-0.878188091961,-0.878142230005,-0.878096359978,-0.878050481879,-0.878004595709,-0.877958701469,-0.877912799159,-0.877866888779,-0.87782097033,-0.877775043812,-0.877729109226,-0.877683166572,-0.877637215851,-0.877591257062,-0.877545290207,-0.877499315286,-0.877453332299,-0.877407341246,-0.877361342129,-0.877315334947,-0.877269319701,-0.877223296392,-0.877177265019,-0.877131225583,-0.877085178085,-0.877039122525,-0.876993058903,-0.87694698722,-0.876900907477,-0.876854819673,-0.876808723809,-0.876762619886,-0.876716507904,-0.876670387863,-0.876624259764,-0.876578123608,-0.876531979394,-0.876485827123,-0.876439666796,-0.876393498412,-0.876347321973,-0.876301137479,-0.87625494493,-0.876208744327,-0.87616253567,-0.876116318959,-0.876070094195,-0.876023861379,-0.87597762051,-0.87593137159,-0.875885114618,-0.875838849595,-0.875792576522,-0.875746295399,-0.875700006226,-0.875653709003,-0.875607403732,-0.875561090413,-0.875514769045,-0.87546843963,-0.875422102168,-0.875375756659,-0.875329403104,-0.875283041503,-0.875236671857,-0.875190294165,-0.87514390843,-0.87509751465,-0.875051112826,-0.875004702959,-0.874958285049,-0.874911859097,-0.874865425102,-0.874818983066,-0.874772532989,-0.874726074872,-0.874679608713,-0.874633134516,-0.874586652278,-0.874540162002,-0.874493663687,-0.874447157334,-0.874400642943,-0.874354120515,-0.87430759005,-0.874261051548,-0.874214505011,-0.874167950438,-0.874121387829,-0.874074817186,-0.874028238509,-0.873981651798,-0.873935057053,-0.873888454276,-0.873841843465,-0.873795224623,-0.873748597749,-0.873701962843,-0.873655319907,-0.87360866894,-0.873562009943,-0.873515342917,-0.873468667861,-0.873421984777,-0.873375293664,-0.873328594524,-0.873281887356,-0.873235172161,-0.873188448939,-0.873141717692,-0.873094978418,-0.87304823112,-0.873001475796,-0.872954712448,-0.872907941076,-0.87286116168,-0.872814374261,-0.87276757882,-0.872720775356,-0.87267396387,-0.872627144363,-0.872580316835,-0.872533481286,-0.872486637717,-0.872439786129,-0.872392926521,-0.872346058894,-0.872299183249,-0.872252299586,-0.872205407906,-0.872158508208,-0.872111600493,-0.872064684763,-0.872017761016,-0.871970829254,-0.871923889477,-0.871876941686,-0.87182998588,-0.871783022061,-0.871736050229,-0.871689070383,-0.871642082526,-0.871595086656,-0.871548082775,-0.871501070883,-0.87145405098,-0.871407023067,-0.871359987144,-0.871312943212,-0.87126589127,-0.871218831321,-0.871171763363,-0.871124687398,-0.871077603425,-0.871030511446,-0.87098341146,-0.870936303469,-0.870889187472,-0.87084206347,-0.870794931464,-0.870747791453,-0.870700643438,-0.870653487421,-0.8706063234,-0.870559151377,-0.870511971352,-0.870464783325,-0.870417587298,-0.870370383269,-0.870323171241,-0.870275951212,-0.870228723184,-0.870181487157,-0.870134243132,-0.870086991109,-0.870039731088,-0.869992463069,-0.869945187054,-0.869897903043,-0.869850611035,-0.869803311033,-0.869756003035,-0.869708687042,-0.869661363056,-0.869614031075,-0.869566691101,-0.869519343135,-0.869471987176,-0.869424623225,-0.869377251282,-0.869329871349,-0.869282483424,-0.86923508751,-0.869187683605,-0.869140271711,-0.869092851828,-0.869045423957,-0.868997988098,-0.868950544251,-0.868903092416,-0.868855632595,-0.868808164788,-0.868760688995,-0.868713205216,-0.868665713452,-0.868618213704,-0.868570705971,-0.868523190255,-0.868475666556,-0.868428134873,-0.868380595209,-0.868333047562,-0.868285491934,-0.868237928324,-0.868190356734,-0.868142777164,-0.868095189614,-0.868047594085,-0.867999990577,-0.86795237909,-0.867904759625,-0.867857132183,-0.867809496763,-0.867761853367,-0.867714201995,-0.867666542646,-0.867618875323,-0.867571200024,-0.867523516751,-0.867475825503,-0.867428126282,-0.867380419088,-0.867332703921,-0.867284980782,-0.867237249671,-0.867189510588,-0.867141763534,-0.86709400851,-0.867046245516,-0.866998474552,-0.866950695618,-0.866902908716,-0.866855113845,-0.866807311007,-0.866759500201,-0.866711681428,-0.866663854688,-0.866616019982,-0.866568177311,-0.866520326674,-0.866472468072,-0.866424601505,-0.866376726975,-0.866328844481,-0.866280954025,-0.866233055605,-0.866185149223,-0.86613723488,-0.866089312575,-0.866041382309,-0.865993444082,-0.865945497896,-0.86589754375,-0.865849581645,-0.865801611581,-0.865753633559,-0.865705647579,-0.865657653642,-0.865609651748,-0.865561641897,-0.865513624091,-0.865465598328,-0.865417564611,-0.865369522938,-0.865321473312,-0.865273415731,-0.865225350198,-0.865177276711,-0.865129195272,-0.86508110588,-0.865033008537,-0.864984903243,-0.864936789998,-0.864888668803,-0.864840539658,-0.864792402563,-0.864744257519,-0.864696104527,-0.864647943587,-0.864599774699,-0.864551597864,-0.864503413082,-0.864455220354,-0.86440701968,-0.864358811061,-0.864310594496,-0.864262369987,-0.864214137534,-0.864165897137,-0.864117648797,-0.864069392514,-0.864021128289,-0.863972856122,-0.863924576013,-0.863876287963,-0.863827991973,-0.863779688043,-0.863731376173,-0.863683056364,-0.863634728616,-0.86358639293,-0.863538049305,-0.863489697744,-0.863441338245,-0.86339297081,-0.863344595439,-0.863296212131,-0.863247820889,-0.863199421712,-0.863151014601,-0.863102599555,-0.863054176577,-0.863005745665,-0.862957306821,-0.862908860044,-0.862860405336,-0.862811942697,-0.862763472126,-0.862714993626,-0.862666507196,-0.862618012836,-0.862569510547,-0.86252100033,-0.862472482184,-0.862423956111,-0.862375422111,-0.862326880184,-0.86227833033,-0.862229772551,-0.862181206846,-0.862132633216,-0.862084051662,-0.862035462184,-0.861986864782,-0.861938259456,-0.861889646209,-0.861841025038,-0.861792395946,-0.861743758933,-0.861695113998,-0.861646461143,-0.861597800368,-0.861549131673,-0.861500455059,-0.861451770527,-0.861403078076,-0.861354377707,-0.861305669421,-0.861256953218,-0.861208229099,-0.861159497063,-0.861110757112,-0.861062009245,-0.861013253464,-0.860964489769,-0.86091571816,-0.860866938638,-0.860818151202,-0.860769355855,-0.860720552595,-0.860671741424,-0.860622922341,-0.860574095348,-0.860525260445,-0.860476417632,-0.860427566909,-0.860378708278,-0.860329841738,-0.860280967291,-0.860232084935,-0.860183194673,-0.860134296504,-0.860085390429,-0.860036476449,-0.859987554563,-0.859938624772,-0.859889687077,-0.859840741477,-0.859791787975,-0.859742826569,-0.859693857261,-0.859644880051,-0.859595894939,-0.859546901926,-0.859497901012,-0.859448892197,-0.859399875483,-0.85935085087,-0.859301818357,-0.859252777946,-0.859203729637,-0.85915467343,-0.859105609326,-0.859056537325,-0.859007457429,-0.858958369636,-0.858909273948,-0.858860170365,-0.858811058887,-0.858761939516,-0.858712812251,-0.858663677093,-0.858614534042,-0.858565383099,-0.858516224264,-0.858467057538,-0.858417882922,-0.858368700414,-0.858319510017,-0.858270311731,-0.858221105555,-0.858171891491,-0.858122669538,-0.858073439698,-0.858024201971,-0.857974956357,-0.857925702856,-0.85787644147,-0.857827172198,-0.857777895041,-0.85772861,-0.857679317075,-0.857630016266,-0.857580707574,-0.857531390999,-0.857482066543,-0.857432734204,-0.857383393984,-0.857334045883,-0.857284689901,-0.85723532604,-0.857185954299,-0.857136574679,-0.857087187181,-0.857037791804,-0.85698838855,-0.856938977418,-0.856889558409,-0.856840131525,-0.856790696764,-0.856741254128,-0.856691803616,-0.856642345231,-0.856592878971,-0.856543404838,-0.856493922831,-0.856444432952,-0.8563949352,-0.856345429577,-0.856295916083,-0.856246394717,-0.856196865481,-0.856147328375,-0.8560977834,-0.856048230555,-0.855998669842,-0.855949101261,-0.855899524812,-0.855849940496,-0.855800348313,-0.855750748263,-0.855701140348,-0.855651524567,-0.855601900922,-0.855552269412,-0.855502630037,-0.8554529828,-0.855403327699,-0.855353664735,-0.855303993909,-0.855254315222,-0.855204628673,-0.855154934263,-0.855105231993,-0.855055521863,-0.855005803873,-0.854956078025,-0.854906344317,-0.854856602752,-0.854806853329,-0.854757096049,-0.854707330912,-0.854657557919,-0.85460777707,-0.854557988365,-0.854508191806,-0.854458387392,-0.854408575125,-0.854358755003,-0.854308927029,-0.854259091202,-0.854209247523,-0.854159395992,-0.85410953661,-0.854059669377,-0.854009794293,-0.85395991136,-0.853910020578,-0.853860121946,-0.853810215466,-0.853760301138,-0.853710378962,-0.85366044894,-0.85361051107,-0.853560565355,-0.853510611793,-0.853460650387,-0.853410681135,-0.853360704039,-0.8533107191,-0.853260726316,-0.85321072569,-0.853160717221,-0.853110700911,-0.853060676758,-0.853010644765,-0.85296060493,-0.852910557256,-0.852860501742,-0.852810438388,-0.852760367196,-0.852710288165,-0.852660201296,-0.85261010659,-0.852560004047,-0.852509893667,-0.852459775451,-0.8524096494,-0.852359515513,-0.852309373792,-0.852259224236,-0.852209066847,-0.852158901624,-0.852108728568,-0.85205854768,-0.85200835896,-0.851958162409,-0.851907958027,-0.851857745814,-0.851807525771,-0.851757297898,-0.851707062196,-0.851656818666,-0.851606567307,-0.85155630812,-0.851506041106,-0.851455766266,-0.851405483598,-0.851355193105,-0.851304894787,-0.851254588643,-0.851204274675,-0.851153952883,-0.851103623267,-0.851053285828,-0.851002940566,-0.850952587482,-0.850902226576,-0.850851857849,-0.850801481302,-0.850751096933,-0.850700704745,-0.850650304737,-0.850599896911,-0.850549481266,-0.850499057802,-0.850448626522,-0.850398187424,-0.850347740509,-0.850297285778,-0.850246823231,-0.850196352869,-0.850145874693,-0.850095388702,-0.850044894897,-0.849994393278,-0.849943883847,-0.849893366603,-0.849842841547,-0.849792308679,-0.849741768001,-0.849691219512,-0.849640663212,-0.849590099103,-0.849539527185,-0.849488947457,-0.849438359922,-0.849387764579,-0.849337161428,-0.84928655047,-0.849235931706,-0.849185305136,-0.84913467076,-0.84908402858,-0.849033378594,-0.848982720805,-0.848932055212,-0.848881381815,-0.848830700616,-0.848780011615,-0.848729314812,-0.848678610207,-0.848627897802,-0.848577177596,-0.848526449591,-0.848475713785,-0.848424970181,-0.848374218779,-0.848323459578,-0.848272692579,-0.848221917784,-0.848171135192,-0.848120344803,-0.848069546619,-0.84801874064,-0.847967926866,-0.847917105297,-0.847866275935,-0.847815438779,-0.84776459383,-0.847713741089,-0.847662880555,-0.847612012231,-0.847561136115,-0.847510252208,-0.847459360512,-0.847408461025,-0.84735755375,-0.847306638686,-0.847255715833,-0.847204785193,-0.847153846766,-0.847102900551,-0.84705194655,-0.847000984764,-0.846950015192,-0.846899037834,-0.846848052693,-0.846797059767,-0.846746059058,-0.846695050565,-0.84664403429,-0.846593010233,-0.846541978394,-0.846490938774,-0.846439891373,-0.846388836192,-0.846337773231,-0.846286702491,-0.846235623971,-0.846184537674,-0.846133443598,-0.846082341745,-0.846031232115,-0.845980114708,-0.845928989525,-0.845877856567,-0.845826715834,-0.845775567326,-0.845724411043,-0.845673246987,-0.845622075158,-0.845570895556,-0.845519708182,-0.845468513036,-0.845417310118,-0.84536609943,-0.845314880971,-0.845263654742,-0.845212420744,-0.845161178976,-0.845109929441,-0.845058672137,-0.845007407065,-0.844956134226,-0.844904853621,-0.84485356525,-0.844802269113,-0.84475096521,-0.844699653543,-0.844648334111,-0.844597006916,-0.844545671957,-0.844494329236,-0.844442978752,-0.844391620506,-0.844340254499,-0.84428888073,-0.844237499201,-0.844186109912,-0.844134712864,-0.844083308056,-0.84403189549,-0.843980475166,-0.843929047084,-0.843877611244,-0.843826167648,-0.843774716296,-0.843723257188,-0.843671790324,-0.843620315706,-0.843568833333,-0.843517343207,-0.843465845327,-0.843414339694,-0.843362826308,-0.843311305171,-0.843259776282,-0.843208239642,-0.843156695251,-0.84310514311,-0.84305358322,-0.84300201558,-0.842950440192,-0.842898857056,-0.842847266172,-0.84279566754,-0.842744061162,-0.842692447037,-0.842640825167,-0.842589195551,-0.84253755819,-0.842485913085,-0.842434260236,-0.842382599643,-0.842330931308,-0.842279255229,-0.842227571409,-0.842175879848,-0.842124180545,-0.842072473501,-0.842020758718,-0.841969036194,-0.841917305932,-0.841865567931,-0.841813822191,-0.841762068714,-0.841710307499,-0.841658538548,-0.84160676186,-0.841554977437,-0.841503185278,-0.841451385384,-0.841399577756,-0.841347762394,-0.841295939298,-0.841244108469,-0.841192269908,-0.841140423614,-0.841088569589,-0.841036707833,-0.840984838347,-0.84093296113,-0.840881076183,-0.840829183508,-0.840777283103,-0.84072537497,-0.84067345911,-0.840621535522,-0.840569604208,-0.840517665167,-0.8404657184,-0.840413763908,-0.840361801691,-0.84030983175,-0.840257854084,-0.840205868695,-0.840153875583,-0.840101874749,-0.840049866193,-0.839997849915,-0.839945825916,-0.839893794196,-0.839841754756,-0.839789707597,-0.839737652718,-0.839685590121,-0.839633519805,-0.839581441772,-0.839529356022,-0.839477262555,-0.839425161371,-0.839373052472,-0.839320935857,-0.839268811527,-0.839216679484,-0.839164539726,-0.839112392254,-0.83906023707,-0.839008074174,-0.838955903565,-0.838903725245,-0.838851539214,-0.838799345472,-0.83874714402,-0.838694934859,-0.838642717989,-0.838590493409,-0.838538261122,-0.838486021127,-0.838433773425,-0.838381518017,-0.838329254902,-0.838276984081,-0.838224705555,-0.838172419324,-0.838120125389,-0.83806782375,-0.838015514408,-0.837963197363,-0.837910872615,-0.837858540166,-0.837806200015,-0.837753852163,-0.837701496611,-0.837649133359,-0.837596762407,-0.837544383757,-0.837491997408,-0.83743960336,-0.837387201616,-0.837334792174,-0.837282375035,-0.837229950201,-0.837177517671,-0.837125077445,-0.837072629525,-0.837020173911,-0.836967710603,-0.836915239602,-0.836862760908,-0.836810274522,-0.836757780444,-0.836705278674,-0.836652769214,-0.836600252064,-0.836547727224,-0.836495194694,-0.836442654475,-0.836390106568,-0.836337550974,-0.836284987691,-0.836232416722,-0.836179838066,-0.836127251725,-0.836074657698,-0.836022055985,-0.835969446589,-0.835916829508,-0.835864204743,-0.835811572296,-0.835758932166,-0.835706284354,-0.83565362886,-0.835600965685,-0.835548294829,-0.835495616294,-0.835442930078,-0.835390236183,-0.83533753461,-0.835284825358,-0.835232108429,-0.835179383822,-0.835126651539,-0.835073911579,-0.835021163943,-0.834968408632,-0.834915645647,-0.834862874986,-0.834810096652,-0.834757310645,-0.834704516965,-0.834651715612,-0.834598906587,-0.834546089891,-0.834493265524,-0.834440433486,-0.834387593778,-0.834334746401,-0.834281891355,-0.83422902864,-0.834176158258,-0.834123280207,-0.83407039449,-0.834017501106,-0.833964600056,-0.83391169134,-0.833858774959,-0.833805850914,-0.833752919204,-0.833699979831,-0.833647032794,-0.833594078095,-0.833541115733,-0.83348814571,-0.833435168026,-0.833382182681,-0.833329189675,-0.83327618901,-0.833223180685,-0.833170164702,-0.83311714106,-0.833064109761,-0.833011070804,-0.83295802419,-0.83290496992,-0.832851907994,-0.832798838413,-0.832745761176,-0.832692676286,-0.832639583741,-0.832586483543,-0.832533375692,-0.832480260188,-0.832427137033,-0.832374006226,-0.832320867768,-0.832267721659,-0.832214567901,-0.832161406493,-0.832108237436,-0.83205506073,-0.832001876376,-0.831948684375,-0.831895484727,-0.831842277432,-0.83178906249,-0.831735839904,-0.831682609672,-0.831629371795,-0.831576126274,-0.83152287311,-0.831469612303,-0.831416343852,-0.83136306776,-0.831309784026,-0.83125649265,-0.831203193634,-0.831149886978,-0.831096572682,-0.831043250746,-0.830989921172,-0.83093658396,-0.83088323911,-0.830829886622,-0.830776526498,-0.830723158737,-0.830669783341,-0.830616400309,-0.830563009642,-0.830509611341,-0.830456205406,-0.830402791838,-0.830349370637,-0.830295941803,-0.830242505338,-0.830189061241,-0.830135609513,-0.830082150155,-0.830028683167,-0.829975208549,-0.829921726303,-0.829868236428,-0.829814738925,-0.829761233795,-0.829707721037,-0.829654200653,-0.829600672643,-0.829547137008,-0.829493593747,-0.829440042862,-0.829386484353,-0.829332918221,-0.829279344465,-0.829225763087,-0.829172174087,-0.829118577465,-0.829064973222,-0.829011361359,-0.828957741875,-0.828904114772,-0.82885048005,-0.828796837709,-0.82874318775,-0.828689530173,-0.828635864979,-0.828582192169,-0.828528511742,-0.8284748237,-0.828421128043,-0.828367424771,-0.828313713884,-0.828259995384,-0.828206269271,-0.828152535545,-0.828098794207,-0.828045045258,-0.827991288697,-0.827937524525,-0.827883752743,-0.827829973352,-0.827776186351,-0.827722391741,-0.827668589524,-0.827614779698,-0.827560962265,-0.827507137226,-0.82745330458,-0.827399464328,-0.827345616471,-0.827291761009,-0.827237897943,-0.827184027274,-0.827130149001,-0.827076263125,-0.827022369647,-0.826968468567,-0.826914559885,-0.826860643603,-0.826806719721,-0.826752788238,-0.826698849157,-0.826644902476,-0.826590948197,-0.826536986321,-0.826483016847,-0.826429039776,-0.826375055109,-0.826321062846,-0.826267062987,-0.826213055534,-0.826159040486,-0.826105017845,-0.82605098761,-0.825996949782,-0.825942904362,-0.82588885135,-0.825834790746,-0.825780722552,-0.825726646767,-0.825672563392,-0.825618472428,-0.825564373875,-0.825510267734,-0.825456154004,-0.825402032688,-0.825347903784,-0.825293767294,-0.825239623218,-0.825185471556,-0.82513131231,-0.825077145479,-0.825022971065,-0.824968789066,-0.824914599485,-0.824860402322,-0.824806197576,-0.824751985249,-0.824697765342,-0.824643537853,-0.824589302785,-0.824535060137,-0.824480809911,-0.824426552106,-0.824372286723,-0.824318013762,-0.824263733225,-0.824209445111,-0.824155149421,-0.824100846156,-0.824046535315,-0.8239922169,-0.823937890912,-0.82388355735,-0.823829216215,-0.823774867507,-0.823720511227,-0.823666147376,-0.823611775954,-0.823557396962,-0.8235030104,-0.823448616268,-0.823394214567,-0.823339805298,-0.82328538846,-0.823230964056,-0.823176532084,-0.823122092546,-0.823067645442,-0.823013190772,-0.822958728538,-0.822904258739,-0.822849781376,-0.822795296449,-0.82274080396,-0.822686303908,-0.822631796295,-0.822577281119,-0.822522758383,-0.822468228087,-0.82241369023,-0.822359144814,-0.822304591839,-0.822250031306,-0.822195463214,-0.822140887565,-0.82208630436,-0.822031713597,-0.821977115279,-0.821922509406,-0.821867895977,-0.821813274994,-0.821758646457,-0.821704010367,-0.821649366724,-0.821594715528,-0.821540056781,-0.821485390482,-0.821430716632,-0.821376035231,-0.821321346281,-0.821266649781,-0.821211945733,-0.821157234136,-0.821102514991,-0.821047788299,-0.82099305406,-0.820938312274,-0.820883562943,-0.820828806066,-0.820774041644,-0.820719269678,-0.820664490168,-0.820609703115,-0.820554908519,-0.82050010638,-0.8204452967,-0.820390479478,-0.820335654715,-0.820280822412,-0.820225982569,-0.820171135187,-0.820116280266,-0.820061417807,-0.82000654781,-0.819951670275,-0.819896785204,-0.819841892596,-0.819786992453,-0.819732084774,-0.819677169561,-0.819622246813,-0.819567316531,-0.819512378716,-0.819457433369,-0.819402480489,-0.819347520077,-0.819292552134,-0.81923757666,-0.819182593656,-0.819127603122,-0.819072605059,-0.819017599467,-0.818962586347,-0.8189075657,-0.818852537525,-0.818797501823,-0.818742458595,-0.818687407842,-0.818632349563,-0.818577283759,-0.818522210432,-0.81846712958,-0.818412041206,-0.818356945309,-0.818301841889,-0.818246730948,-0.818191612486,-0.818136486503,-0.818081353,-0.818026211978,-0.817971063436,-0.817915907376,-0.817860743797,-0.817805572701,-0.817750394088,-0.817695207959,-0.817640014313,-0.817584813152,-0.817529604475,-0.817474388284,-0.817419164579,-0.817363933361,-0.817308694629,-0.817253448385,-0.817198194629,-0.817142933361,-0.817087664583,-0.817032388294,-0.816977104494,-0.816921813186,-0.816866514368,-0.816811208042,-0.816755894208,-0.816700572867,-0.816645244018,-0.816589907664,-0.816534563803,-0.816479212437,-0.816423853566,-0.81636848719,-0.816313113311,-0.816257731928,-0.816202343043,-0.816146946655,-0.816091542765,-0.816036131374,-0.815980712482,-0.81592528609,-0.815869852198,-0.815814410807,-0.815758961917,-0.815703505528,-0.815648041642,-0.815592570259,-0.815537091378,-0.815481605002,-0.81542611113,-0.815370609762,-0.8153151009,-0.815259584544,-0.815204060694,-0.815148529351,-0.815092990515,-0.815037444187,-0.814981890367,-0.814926329057,-0.814870760255,-0.814815183964,-0.814759600182,-0.814704008912,-0.814648410153,-0.814592803906,-0.814537190172,-0.81448156895,-0.814425940242,-0.814370304048,-0.814314660369,-0.814259009204,-0.814203350555,-0.814147684422,-0.814092010805,-0.814036329706,-0.813980641124,-0.81392494506,-0.813869241515,-0.813813530489,-0.813757811982,-0.813702085995,-0.81364635253,-0.813590611585,-0.813534863162,-0.813479107261,-0.813423343883,-0.813367573027,-0.813311794696,-0.813256008889,-0.813200215606,-0.813144414849,-0.813088606618,-0.813032790913,-0.812976967734,-0.812921137083,-0.81286529896,-0.812809453365,-0.812753600299,-0.812697739762,-0.812641871755,-0.812585996278,-0.812530113333,-0.812474222918,-0.812418325036,-0.812362419686,-0.812306506869,-0.812250586585,-0.812194658836,-0.81213872362,-0.81208278094,-0.812026830796,-0.811970873187,-0.811914908115,-0.81185893558,-0.811802955583,-0.811746968123,-0.811690973202,-0.811634970821,-0.811578960979,-0.811522943677,-0.811466918916,-0.811410886695,-0.811354847017,-0.811298799881,-0.811242745287,-0.811186683237,-0.811130613731,-0.811074536768,-0.811018452351,-0.810962360479,-0.810906261152,-0.810850154372,-0.810794040139,-0.810737918453,-0.810681789315,-0.810625652726,-0.810569508685,-0.810513357194,-0.810457198253,-0.810401031862,-0.810344858022,-0.810288676733,-0.810232487997,-0.810176291813,-0.810120088182,-0.810063877105,-0.810007658582,-0.809951432613,-0.809895199199,-0.809838958341,-0.80978271004,-0.809726454294,-0.809670191106,-0.809613920476,-0.809557642404,-0.809501356891,-0.809445063937,-0.809388763542,-0.809332455708,-0.809276140435,-0.809219817723,-0.809163487572,-0.809107149985,-0.80905080496,-0.808994452498,-0.8089380926,-0.808881725267,-0.808825350499,-0.808768968296,-0.808712578659,-0.808656181588,-0.808599777085,-0.808543365149,-0.808486945781,-0.808430518982,-0.808374084751,-0.808317643091,-0.808261194,-0.80820473748,-0.808148273531,-0.808091802154,-0.80803532335,-0.807978837117,-0.807922343458,-0.807865842373,-0.807809333862,-0.807752817926,-0.807696294565,-0.80763976378,-0.807583225572,-0.80752667994,-0.807470126886,-0.807413566409,-0.807356998511,-0.807300423192,-0.807243840452,-0.807187250293,-0.807130652714,-0.807074047716,-0.807017435299,-0.806960815464,-0.806904188213,-0.806847553544,-0.806790911459,-0.806734261958,-0.806677605041,-0.80662094071,-0.806564268965,-0.806507589806,-0.806450903233,-0.806394209248,-0.806337507851,-0.806280799042,-0.806224082821,-0.806167359191,-0.80611062815,-0.806053889699,-0.805997143839,-0.805940390571,-0.805883629895,-0.805826861811,-0.805770086321,-0.805713303423,-0.80565651312,-0.805599715412,-0.805542910298,-0.80548609778,-0.805429277859,-0.805372450534,-0.805315615806,-0.805258773676,-0.805201924144,-0.805145067211,-0.805088202877,-0.805031331143,-0.804974452009,-0.804917565476,-0.804860671545,-0.804803770215,-0.804746861488,-0.804689945364,-0.804633021843,-0.804576090926,-0.804519152614,-0.804462206907,-0.804405253805,-0.804348293309,-0.80429132542,-0.804234350139,-0.804177367464,-0.804120377398,-0.804063379941,-0.804006375093,-0.803949362854,-0.803892343226,-0.803835316209,-0.803778281803,-0.803721240009,-0.803664190827,-0.803607134258,-0.803550070303,-0.803492998961,-0.803435920234,-0.803378834122,-0.803321740625,-0.803264639745,-0.803207531481,-0.803150415834,-0.803093292804,-0.803036162393,-0.802979024601,-0.802921879428,-0.802864726874,-0.802807566941,-0.802750399628,-0.802693224937,-0.802636042867,-0.80257885342,-0.802521656596,-0.802464452395,-0.802407240818,-0.802350021866,-0.802292795538,-0.802235561836,-0.80217832076,-0.802121072311,-0.802063816488,-0.802006553293,-0.801949282727,-0.801892004789,-0.80183471948,-0.801777426801,-0.801720126752,-0.801662819334,-0.801605504547,-0.801548182392,-0.801490852869,-0.80143351598,-0.801376171723,-0.801318820101,-0.801261461113,-0.80120409476,-0.801146721042,-0.80108933996,-0.801031951515,-0.800974555708,-0.800917152537,-0.800859742005,-0.800802324112,-0.800744898857,-0.800687466243,-0.800630026269,-0.800572578935,-0.800515124243,-0.800457662193,-0.800400192785,-0.80034271602,-0.800285231898,-0.80022774042,-0.800170241587,-0.800112735399,-0.800055221856,-0.799997700959,-0.799940172709,-0.799882637106,-0.799825094151,-0.799767543844,-0.799709986186,-0.799652421176,-0.799594848817,-0.799537269108,-0.79947968205,-0.799422087643,-0.799364485888,-0.799306876785,-0.799249260335,-0.799191636539,-0.799134005397,-0.799076366909,-0.799018721077,-0.7989610679,-0.798903407379,-0.798845739515,-0.798788064308,-0.798730381758,-0.798672691867,-0.798614994635,-0.798557290062,-0.798499578149,-0.798441858896,-0.798384132304,-0.798326398373,-0.798268657105,-0.798210908499,-0.798153152556,-0.798095389276,-0.798037618661,-0.79797984071,-0.797922055424,-0.797864262804,-0.79780646285,-0.797748655563,-0.797690840943,-0.797633018991,-0.797575189708,-0.797517353093,-0.797459509147,-0.797401657872,-0.797343799267,-0.797285933333,-0.79722806007,-0.79717017948,-0.797112291562,-0.797054396317,-0.796996493746,-0.796938583849,-0.796880666627,-0.79682274208,-0.796764810208,-0.796706871013,-0.796648924495,-0.796590970655,-0.796533009492,-0.796475041008,-0.796417065202,-0.796359082076,-0.79630109163,-0.796243093865,-0.796185088781,-0.796127076378,-0.796069056658,-0.79601102962,-0.795952995266,-0.795894953595,-0.795836904609,-0.795778848307,-0.795720784691,-0.795662713761,-0.795604635517,-0.79554654996,-0.795488457091,-0.79543035691,-0.795372249417,-0.795314134613,-0.7952560125,-0.795197883076,-0.795139746343,-0.795081602301,-0.795023450951,-0.794965292293,-0.794907126328,-0.794848953057,-0.794790772479,-0.794732584596,-0.794674389408,-0.794616186915,-0.794557977119,-0.794499760019,-0.794441535616,-0.794383303911,-0.794325064904,-0.794266818596,-0.794208564987,-0.794150304078,-0.794092035869,-0.794033760361,-0.793975477554,-0.79391718745,-0.793858890048,-0.793800585349,-0.793742273353,-0.793683954062,-0.793625627475,-0.793567293593,-0.793508952417,-0.793450603948,-0.793392248185,-0.793333885129,-0.793275514781,-0.793217137142,-0.793158752211,-0.79310035999,-0.793041960479,-0.792983553679,-0.79292513959,-0.792866718212,-0.792808289546,-0.792749853593,-0.792691410353,-0.792632959827,-0.792574502015,-0.792516036918,-0.792457564537,-0.792399084871,-0.792340597922,-0.79228210369,-0.792223602175,-0.792165093378,-0.7921065773,-0.792048053941,-0.791989523302,-0.791930985383,-0.791872440184,-0.791813887707,-0.791755327952,-0.791696760919,-0.791638186609,-0.791579605023,-0.79152101616,-0.791462420022,-0.791403816609,-0.791345205921,-0.79128658796,-0.791227962725,-0.791169330218,-0.791110690438,-0.791052043386,-0.790993389064,-0.790934727471,-0.790876058607,-0.790817382474,-0.790758699072,-0.790700008402,-0.790641310463,-0.790582605257,-0.790523892785,-0.790465173046,-0.790406446041,-0.790347711771,-0.790288970236,-0.790230221437,-0.790171465375,-0.790112702049,-0.790053931461,-0.789995153611,-0.789936368499,-0.789877576127,-0.789818776494,-0.789759969601,-0.789701155449,-0.789642334038,-0.789583505369,-0.789524669442,-0.789465826258,-0.789406975818,-0.789348118121,-0.789289253169,-0.789230380962,-0.7891715015,-0.789112614785,-0.789053720816,-0.788994819595,-0.788935911121,-0.788876995395,-0.788818072418,-0.788759142191,-0.788700204714,-0.788641259986,-0.78858230801,-0.788523348786,-0.788464382313,-0.788405408593,-0.788346427627,-0.788287439414,-0.788228443955,-0.788169441251,-0.788110431302,-0.788051414109,-0.787992389673,-0.787933357993,-0.787874319071,-0.787815272907,-0.787756219501,-0.787697158855,-0.787638090968,-0.787579015842,-0.787519933476,-0.787460843872,-0.787401747029,-0.787342642949,-0.787283531631,-0.787224413078,-0.787165287288,-0.787106154262,-0.787047014002,-0.786987866507,-0.786928711779,-0.786869549817,-0.786810380623,-0.786751204196,-0.786692020538,-0.786632829648,-0.786573631529,-0.786514426179,-0.786455213599,-0.786395993791,-0.786336766754,-0.786277532489,-0.786218290997,-0.786159042279,-0.786099786334,-0.786040523163,-0.785981252768,-0.785921975148,-0.785862690303,-0.785803398236,-0.785744098945,-0.785684792432,-0.785625478697,-0.785566157741,-0.785506829564,-0.785447494167,-0.78538815155,-0.785328801714,-0.78526944466,-0.785210080387,-0.785150708897,-0.78509133019,-0.785031944267,-0.784972551128,-0.784913150773,-0.784853743204,-0.78479432842,-0.784734906423,-0.784675477213,-0.78461604079,-0.784556597156,-0.784497146309,-0.784437688252,-0.784378222984,-0.784318750507,-0.78425927082,-0.784199783925,-0.784140289821,-0.78408078851,-0.784021279991,-0.783961764266,-0.783902241336,-0.783842711199,-0.783783173858,-0.783723629312,-0.783664077562,-0.78360451861,-0.783544952454,-0.783485379096,-0.783425798537,-0.783366210777,-0.783306615816,-0.783247013655,-0.783187404294,-0.783127787735,-0.783068163977,-0.783008533022,-0.782948894869,-0.78288924952,-0.782829596975,-0.782769937233,-0.782710270297,-0.782650596167,-0.782590914842,-0.782531226324,-0.782471530613,-0.78241182771,-0.782352117615,-0.782292400329,-0.782232675852,-0.782172944185,-0.782113205328,-0.782053459283,-0.781993706049,-0.781933945627,-0.781874178018,-0.781814403222,-0.781754621239,-0.781694832071,-0.781635035718,-0.78157523218,-0.781515421458,-0.781455603552,-0.781395778464,-0.781335946193,-0.78127610674,-0.781216260106,-0.781156406291,-0.781096545296,-0.781036677122,-0.780976801768,-0.780916919235,-0.780857029525,-0.780797132637,-0.780737228572,-0.780677317331,-0.780617398914,-0.780557473322,-0.780497540555,-0.780437600613,-0.780377653499,-0.780317699211,-0.78025773775,-0.780197769118,-0.780137793314,-0.78007781034,-0.780017820195,-0.77995782288,-0.779897818396,-0.779837806744,-0.779777787923,-0.779717761935,-0.77965772878,-0.779597688458,-0.779537640971,-0.779477586318,-0.7794175245,-0.779357455518,-0.779297379373,-0.779237296064,-0.779177205593,-0.779117107959,-0.779057003164,-0.778996891209,-0.778936772093,-0.778876645817,-0.778816512381,-0.778756371788,-0.778696224036,-0.778636069126,-0.778575907059,-0.778515737836,-0.778455561457,-0.778395377922,-0.778335187233,-0.778274989389,-0.778214784392,-0.778154572241,-0.778094352938,-0.778034126482,-0.777973892876,-0.777913652118,-0.777853404209,-0.777793149151,-0.777732886944,-0.777672617588,-0.777612341083,-0.777552057431,-0.777491766632,-0.777431468687,-0.777371163595,-0.777310851358,-0.777250531976,-0.77719020545,-0.77712987178,-0.777069530967,-0.777009183011,-0.776948827913,-0.776888465673,-0.776828096293,-0.776767719772,-0.776707336111,-0.776646945311,-0.776586547372,-0.776526142295,-0.77646573008,-0.776405310728,-0.776344884239,-0.776284450615,-0.776224009855,-0.77616356196,-0.776103106931,-0.776042644768,-0.775982175472,-0.775921699043,-0.775861215483,-0.77580072479,-0.775740226967,-0.775679722013,-0.775619209929,-0.775558690716,-0.775498164374,-0.775437630904,-0.775377090306,-0.775316542582,-0.77525598773,-0.775195425753,-0.77513485665,-0.775074280423,-0.775013697071,-0.774953106595,-0.774892508996,-0.774831904274,-0.774771292431,-0.774710673466,-0.774650047379,-0.774589414173,-0.774528773846,-0.774468126401,-0.774407471836,-0.774346810154,-0.774286141353,-0.774225465436,-0.774164782402,-0.774104092252,-0.774043394987,-0.773982690607,-0.773921979112,-0.773861260504,-0.773800534783,-0.773739801949,-0.773679062003,-0.773618314946,-0.773557560778,-0.773496799499,-0.77343603111,-0.773375255613,-0.773314473006,-0.773253683291,-0.773192886469,-0.77313208254,-0.773071271504,-0.773010453363,-0.772949628116,-0.772888795764,-0.772827956308,-0.772767109748,-0.772706256086,-0.77264539532,-0.772584527453,-0.772523652484,-0.772462770415,-0.772401881245,-0.772340984975,-0.772280081606,-0.772219171139,-0.772158253573,-0.77209732891,-0.77203639715,-0.771975458294,-0.771914512342,-0.771853559294,-0.771792599152,-0.771731631916,-0.771670657586,-0.771609676163,-0.771548687647,-0.77148769204,-0.771426689341,-0.771365679552,-0.771304662672,-0.771243638702,-0.771182607644,-0.771121569497,-0.771060524262,-0.770999471939,-0.77093841253,-0.770877346034,-0.770816272453,-0.770755191786,-0.770694104035,-0.7706330092,-0.770571907281,-0.77051079828,-0.770449682196,-0.77038855903,-0.770327428783,-0.770266291455,-0.770205147047,-0.77014399556,-0.770082836993,-0.770021671348,-0.769960498626,-0.769899318826,-0.769838131949,-0.769776937996,-0.769715736967,-0.769654528864,-0.769593313685,-0.769532091433,-0.769470862108,-0.76940962571,-0.769348382239,-0.769287131697,-0.769225874083,-0.769164609399,-0.769103337646,-0.769042058822,-0.76898077293,-0.76891947997,-0.768858179941,-0.768796872846,-0.768735558684,-0.768674237456,-0.768612909162,-0.768551573804,-0.768490231381,-0.768428881894,-0.768367525344,-0.768306161731,-0.768244791057,-0.768183413321,-0.768122028523,-0.768060636666,-0.767999237748,-0.767937831772,-0.767876418736,-0.767814998642,-0.767753571491,-0.767692137283,-0.767630696018,-0.767569247698,-0.767507792322,-0.767446329891,-0.767384860406,-0.767323383868,-0.767261900276,-0.767200409632,-0.767138911936,-0.767077407188,-0.76701589539,-0.766954376542,-0.766892850643,-0.766831317696,-0.7667697777,-0.766708230657,-0.766646676565,-0.766585115427,-0.766523547243,-0.766461972013,-0.766400389738,-0.766338800418,-0.766277204054,-0.766215600647,-0.766153990196,-0.766092372704,-0.76603074817,-0.765969116594,-0.765907477978,-0.765845832322,-0.765784179626,-0.765722519892,-0.765660853119,-0.765599179308,-0.76553749846,-0.765475810575,-0.765414115655,-0.765352413699,-0.765290704707,-0.765228988682,-0.765167265622,-0.76510553553,-0.765043798405,-0.764982054247,-0.764920303058,-0.764858544838,-0.764796779588,-0.764735007308,-0.764673227998,-0.76461144166,-0.764549648293,-0.7644878479,-0.764426040479,-0.764364226031,-0.764302404558,-0.764240576059,-0.764178740536,-0.764116897989,-0.764055048418,-0.763993191824,-0.763931328207,-0.763869457569,-0.763807579909,-0.763745695228,-0.763683803528,-0.763621904807,-0.763559999068,-0.76349808631,-0.763436166534,-0.763374239741,-0.763312305931,-0.763250365105,-0.763188417263,-0.763126462407,-0.763064500535,-0.76300253165,-0.762940555752,-0.76287857284,-0.762816582917,-0.762754585981,-0.762692582035,-0.762630571078,-0.762568553112,-0.762506528136,-0.762444496151,-0.762382457158,-0.762320411157,-0.762258358149,-0.762196298135,-0.762134231114,-0.762072157089,-0.762010076058,-0.761947988023,-0.761885892985,-0.761823790943,-0.761761681899,-0.761699565854,-0.761637442806,-0.761575312758,-0.76151317571,-0.761451031662,-0.761388880615,-0.761326722569,-0.761264557525,-0.761202385484,-0.761140206446,-0.761078020412,-0.761015827383,-0.760953627358,-0.760891420339,-0.760829206325,-0.760766985319,-0.760704757319,-0.760642522328,-0.760580280344,-0.76051803137,-0.760455775405,-0.76039351245,-0.760331242506,-0.760268965573,-0.760206681651,-0.760144390742,-0.760082092846,-0.760019787964,-0.759957476095,-0.759895157241,-0.759832831403,-0.75977049858,-0.759708158773,-0.759645811984,-0.759583458211,-0.759521097457,-0.759458729722,-0.759396355006,-0.759333973309,-0.759271584633,-0.759209188978,-0.759146786345,-0.759084376733,-0.759021960145,-0.758959536579,-0.758897106037,-0.75883466852,-0.758772224027,-0.75870977256,-0.75864731412,-0.758584848705,-0.758522376319,-0.75845989696,-0.758397410629,-0.758334917327,-0.758272417055,-0.758209909813,-0.758147395602,-0.758084874422,-0.758022346273,-0.757959811158,-0.757897269075,-0.757834720026,-0.757772164011,-0.75770960103,-0.757647031085,-0.757584454176,-0.757521870303,-0.757459279468,-0.757396681669,-0.75733407691,-0.757271465188,-0.757208846506,-0.757146220865,-0.757083588263,-0.757020948703,-0.756958302184,-0.756895648707,-0.756832988273,-0.756770320883,-0.756707646536,-0.756644965234,-0.756582276977,-0.756519581766,-0.756456879601,-0.756394170483,-0.756331454412,-0.756268731389,-0.756206001414,-0.756143264489,-0.756080520614,-0.756017769788,-0.755955012014,-0.755892247291,-0.75582947562,-0.755766697001,-0.755703911436,-0.755641118924,-0.755578319467,-0.755515513065,-0.755452699718,-0.755389879427,-0.755327052193,-0.755264218016,-0.755201376897,-0.755138528836,-0.755075673834,-0.755012811891,-0.754949943009,-0.754887067187,-0.754824184426,-0.754761294728,-0.754698398092,-0.754635494518,-0.754572584008,-0.754509666563,-0.754446742182,-0.754383810866,-0.754320872617,-0.754257927433,-0.754194975317,-0.754132016268,-0.754069050288,-0.754006077376,-0.753943097533,-0.753880110761,-0.753817117059,-0.753754116428,-0.753691108869,-0.753628094382,-0.753565072968,-0.753502044627,-0.75343900936,-0.753375967167,-0.75331291805,-0.753249862009,-0.753186799044,-0.753123729155,-0.753060652344,-0.752997568612,-0.752934477957,-0.752871380382,-0.752808275887,-0.752745164472,-0.752682046138,-0.752618920886,-0.752555788715,-0.752492649627,-0.752429503623,-0.752366350702,-0.752303190866,-0.752240024115,-0.752176850449,-0.75211366987,-0.752050482377,-0.751987287971,-0.751924086654,-0.751860878424,-0.751797663284,-0.751734441234,-0.751671212274,-0.751607976404,-0.751544733626,-0.75148148394,-0.751418227347,-0.751354963846,-0.75129169344,-0.751228416127,-0.75116513191,-0.751101840788,-0.751038542762,-0.750975237832,-0.750911926,-0.750848607265,-0.750785281629,-0.750721949092,-0.750658609655,-0.750595263317,-0.75053191008,-0.750468549945,-0.750405182911,-0.75034180898,-0.750278428151,-0.750215040427,-0.750151645806,-0.750088244291,-0.75002483588,-0.749961420576,-0.749897998378,-0.749834569287,-0.749771133304,-0.749707690429,-0.749644240663,-0.749580784006,-0.74951732046,-0.749453850024,-0.749390372699,-0.749326888486,-0.749263397385,-0.749199899398,-0.749136394523,-0.749072882763,-0.749009364118,-0.748945838588,-0.748882306173,-0.748818766875,-0.748755220695,-0.748691667631,-0.748628107686,-0.74856454086,-0.748500967153,-0.748437386566,-0.748373799099,-0.748310204754,-0.74824660353,-0.748182995429,-0.74811938045,-0.748055758595,-0.747992129864,-0.747928494258,-0.747864851777,-0.747801202421,-0.747737546192,-0.74767388309,-0.747610213115,-0.747546536269,-0.747482852551,-0.747419161963,-0.747355464504,-0.747291760176,-0.747228048979,-0.747164330913,-0.74710060598,-0.74703687418,-0.746973135513,-0.74690938998,-0.746845637581,-0.746781878318,-0.746718112191,-0.746654339199,-0.746590559345,-0.746526772628,-0.74646297905,-0.74639917861,-0.746335371309,-0.746271557148,-0.746207736127,-0.746143908248,-0.74608007351,-0.746016231914,-0.745952383461,-0.745888528152,-0.745824665986,-0.745760796965,-0.745696921089,-0.745633038359,-0.745569148775,-0.745505252338,-0.745441349049,-0.745377438907,-0.745313521914,-0.745249598071,-0.745185667377,-0.745121729834,-0.745057785441,-0.744993834201,-0.744929876112,-0.744865911176,-0.744801939394,-0.744737960765,-0.744673975291,-0.744609982972,-0.744545983809,-0.744481977802,-0.744417964952,-0.74435394526,-0.744289918725,-0.74422588535,-0.744161845133,-0.744097798076,-0.74403374418,-0.743969683445,-0.743905615871,-0.743841541459,-0.74377746021,-0.743713372125,-0.743649277203,-0.743585175447,-0.743521066855,-0.743456951429,-0.743392829169,-0.743328700076,-0.74326456415,-0.743200421393,-0.743136271804,-0.743072115385,-0.743007952135,-0.742943782056,-0.742879605148,-0.742815421411,-0.742751230847,-0.742687033455,-0.742622829237,-0.742558618193,-0.742494400323,-0.742430175629,-0.74236594411,-0.742301705767,-0.742237460602,-0.742173208614,-0.742108949804,-0.742044684173,-0.741980411721,-0.741916132449,-0.741851846357,-0.741787553447,-0.741723253718,-0.741658947171,-0.741594633807,-0.741530313627,-0.741465986631,-0.741401652819,-0.741337312192,-0.741272964751,-0.741208610497,-0.74114424943,-0.74107988155,-0.741015506858,-0.740951125355,-0.740886737041,-0.740822341918,-0.740757939984,-0.740693531242,-0.740629115692,-0.740564693334,-0.740500264169,-0.740435828197,-0.740371385419,-0.740306935836,-0.740242479449,-0.740178016257,-0.740113546261,-0.740049069463,-0.739984585862,-0.73992009546,-0.739855598256,-0.739791094251,-0.739726583447,-0.739662065843,-0.739597541441,-0.73953301024,-0.739468472242,-0.739403927446,-0.739339375854,-0.739274817467,-0.739210252284,-0.739145680306,-0.739081101534,-0.739016515969,-0.738951923611,-0.738887324461,-0.738822718519,-0.738758105785,-0.738693486262,-0.738628859948,-0.738564226845,-0.738499586954,-0.738434940274,-0.738370286807,-0.738305626552,-0.738240959512,-0.738176285686,-0.738111605074,-0.738046917678,-0.737982223498,-0.737917522535,-0.737852814788,-0.73778810026,-0.73772337895,-0.737658650859,-0.737593915988,-0.737529174337,-0.737464425906,-0.737399670697,-0.73733490871,-0.737270139946,-0.737205364405,-0.737140582087,-0.737075792994,-0.737010997126,-0.736946194484,-0.736881385067,-0.736816568877,-0.736751745915,-0.736686916181,-0.736622079675,-0.736557236398,-0.736492386351,-0.736427529534,-0.736362665948,-0.736297795594,-0.736232918472,-0.736168034582,-0.736103143926,-0.736038246504,-0.735973342316,-0.735908431363,-0.735843513646,-0.735778589166,-0.735713657922,-0.735648719916,-0.735583775147,-0.735518823618,-0.735453865327,-0.735388900277,-0.735323928467,-0.735258949898,-0.73519396457,-0.735128972485,-0.735063973643,-0.734998968044,-0.73493395569,-0.73486893658,-0.734803910715,-0.734738878096,-0.734673838723,-0.734608792598,-0.73454373972,-0.73447868009,-0.73441361371,-0.734348540578,-0.734283460697,-0.734218374066,-0.734153280687,-0.734088180559,-0.734023073684,-0.733957960061,-0.733892839693,-0.733827712578,-0.733762578719,-0.733697438115,-0.733632290766,-0.733567136675,-0.733501975841,-0.733436808264,-0.733371633946,-0.733306452887,-0.733241265087,-0.733176070548,-0.733110869269,-0.733045661252,-0.732980446497,-0.732915225005,-0.732849996775,-0.73278476181,-0.732719520109,-0.732654271672,-0.732589016502,-0.732523754598,-0.73245848596,-0.73239321059,-0.732327928488,-0.732262639654,-0.73219734409,-0.732132041795,-0.732066732771,-0.732001417018,-0.731936094537,-0.731870765327,-0.731805429391,-0.731740086728,-0.731674737338,-0.731609381224,-0.731544018385,-0.731478648821,-0.731413272534,-0.731347889524,-0.731282499791,-0.731217103337,-0.731151700162,-0.731086290265,-0.731020873649,-0.730955450314,-0.73089002026,-0.730824583487,-0.730759139997,-0.73069368979,-0.730628232867,-0.730562769228,-0.730497298874,-0.730431821805,-0.730366338022,-0.730300847526,-0.730235350317,-0.730169846395,-0.730104335763,-0.730038818419,-0.729973294365,-0.729907763601,-0.729842226128,-0.729776681947,-0.729711131057,-0.72964557346,-0.729580009157,-0.729514438147,-0.729448860432,-0.729383276012,-0.729317684887,-0.729252087059,-0.729186482527,-0.729120871293,-0.729055253358,-0.728989628721,-0.728923997383,-0.728858359345,-0.728792714607,-0.728727063171,-0.728661405036,-0.728595740204,-0.728530068674,-0.728464390448,-0.728398705526,-0.728333013909,-0.728267315597,-0.728201610591,-0.728135898892,-0.7280701805,-0.728004455415,-0.727938723639,-0.727872985172,-0.727807240014,-0.727741488167,-0.72767572963,-0.727609964404,-0.727544192491,-0.72747841389,-0.727412628602,-0.727346836628,-0.727281037969,-0.727215232624,-0.727149420595,-0.727083601883,-0.727017776487,-0.726951944408,-0.726886105648,-0.726820260206,-0.726754408083,-0.72668854928,-0.726622683798,-0.726556811636,-0.726490932796,-0.726425047279,-0.726359155084,-0.726293256213,-0.726227350666,-0.726161438444,-0.726095519546,-0.726029593975,-0.72596366173,-0.725897722813,-0.725831777223,-0.725765824961,-0.725699866028,-0.725633900425,-0.725567928152,-0.72550194921,-0.725435963599,-0.72536997132,-0.725303972373,-0.72523796676,-0.72517195448,-0.725105935535,-0.725039909925,-0.72497387765,-0.724907838712,-0.72484179311,-0.724775740846,-0.724709681919,-0.724643616332,-0.724577544084,-0.724511465175,-0.724445379607,-0.72437928738,-0.724313188495,-0.724247082951,-0.724180970751,-0.724114851895,-0.724048726382,-0.723982594214,-0.723916455391,-0.723850309915,-0.723784157784,-0.723717999001,-0.723651833566,-0.723585661479,-0.723519482741,-0.723453297353,-0.723387105314,-0.723320906627,-0.723254701291,-0.723188489307,-0.723122270675,-0.723056045397,-0.722989813472,-0.722923574902,-0.722857329687,-0.722791077828,-0.722724819325,-0.722658554179,-0.72259228239,-0.722526003959,-0.722459718887,-0.722393427175,-0.722327128822,-0.72226082383,-0.722194512199,-0.722128193929,-0.722061869022,-0.721995537478,-0.721929199298,-0.721862854481,-0.72179650303,-0.721730144944,-0.721663780224,-0.72159740887,-0.721531030884,-0.721464646266,-0.721398255016,-0.721331857135,-0.721265452624,-0.721199041483,-0.721132623713,-0.721066199315,-0.720999768288,-0.720933330634,-0.720866886354,-0.720800435448,-0.720733977916,-0.720667513759,-0.720601042978,-0.720534565574,-0.720468081546,-0.720401590897,-0.720335093625,-0.720268589732,-0.720202079219,-0.720135562085,-0.720069038333,-0.720002507961,-0.719935970972,-0.719869427365,-0.719802877141,-0.719736320301,-0.719669756845,-0.719603186774,-0.719536610089,-0.71947002679,-0.719403436878,-0.719336840353,-0.719270237216,-0.719203627467,-0.719137011108,-0.719070388139,-0.71900375856,-0.718937122373,-0.718870479577,-0.718803830173,-0.718737174162,-0.718670511545,-0.718603842322,-0.718537166494,-0.718470484061,-0.718403795023,-0.718337099383,-0.71827039714,-0.718203688294,-0.718136972847,-0.718070250799,-0.718003522151,-0.717936786903,-0.717870045056,-0.71780329661,-0.717736541566,-0.717669779926,-0.717603011688,-0.717536236854,-0.717469455425,-0.717402667402,-0.717335872784,-0.717269071572,-0.717202263767,-0.71713544937,-0.717068628381,-0.717001800802,-0.716934966631,-0.716868125871,-0.716801278521,-0.716734424583,-0.716667564056,-0.716600696943,-0.716533823242,-0.716466942955,-0.716400056082,-0.716333162625,-0.716266262583,-0.716199355957,-0.716132442748,-0.716065522957,-0.715998596584,-0.715931663629,-0.715864724094,-0.715797777979,-0.715730825284,-0.71566386601,-0.715596900158,-0.715529927729,-0.715462948722,-0.715395963139,-0.715328970981,-0.715261972247,-0.715194966939,-0.715127955056,-0.715060936601,-0.714993911573,-0.714926879972,-0.714859841801,-0.714792797058,-0.714725745745,-0.714658687863,-0.714591623411,-0.714524552392,-0.714457474804,-0.714390390649,-0.714323299928,-0.714256202641,-0.714189098789,-0.714121988372,-0.71405487139,-0.713987747846,-0.713920617738,-0.713853481069,-0.713786337838,-0.713719188046,-0.713652031693,-0.713584868781,-0.713517699309,-0.71345052328,-0.713383340692,-0.713316151547,-0.713248955845,-0.713181753587,-0.713114544774,-0.713047329406,-0.712980107484,-0.712912879009,-0.71284564398,-0.712778402399,-0.712711154267,-0.712643899583,-0.712576638349,-0.712509370565,-0.712442096231,-0.71237481535,-0.71230752792,-0.712240233942,-0.712172933418,-0.712105626348,-0.712038312733,-0.711970992572,-0.711903665867,-0.711836332619,-0.711768992827,-0.711701646493,-0.711634293617,-0.7115669342,-0.711499568243,-0.711432195745,-0.711364816708,-0.711297431133,-0.711230039019,-0.711162640368,-0.71109523518,-0.711027823456,-0.710960405196,-0.710892980401,-0.710825549072,-0.710758111209,-0.710690666813,-0.710623215884,-0.710555758424,-0.710488294432,-0.71042082391,-0.710353346857,-0.710285863275,-0.710218373164,-0.710150876526,-0.710083373359,-0.710015863666,-0.709948347446,-0.709880824701,-0.70981329543,-0.709745759636,-0.709678217317,-0.709610668475,-0.70954311311,-0.709475551224,-0.709407982816,-0.709340407888,-0.709272826439,-0.709205238471,-0.709137643984,-0.709070042978,-0.709002435456,-0.708934821416,-0.70886720086,-0.708799573788,-0.7087319402,-0.708664300099,-0.708596653483,-0.708529000354,-0.708461340713,-0.70839367456,-0.708326001895,-0.708258322719,-0.708190637033,-0.708122944838,-0.708055246134,-0.707987540921,-0.707919829201,-0.707852110974,-0.70778438624,-0.707716655,-0.707648917256,-0.707581173006,-0.707513422253,-0.707445664997,-0.707377901238,-0.707310130976,-0.707242354214,-0.70717457095,-0.707106781187,-0.707038984923,-0.706971182161,-0.706903372901,-0.706835557142,-0.706767734887,-0.706699906135,-0.706632070888,-0.706564229145,-0.706496380907,-0.706428526176,-0.706360664951,-0.706292797234,-0.706224923024,-0.706157042323,-0.706089155131,-0.706021261449,-0.705953361278,-0.705885454617,-0.705817541468,-0.705749621831,-0.705681695708,-0.705613763097,-0.705545824001,-0.70547787842,-0.705409926354,-0.705341967804,-0.705274002771,-0.705206031255,-0.705138053257,-0.705070068777,-0.705002077817,-0.704934080376,-0.704866076456,-0.704798066056,-0.704730049179,-0.704662025823,-0.704593995991,-0.704525959682,-0.704457916897,-0.704389867637,-0.704321811903,-0.704253749694,-0.704185681012,-0.704117605858,-0.704049524231,-0.703981436133,-0.703913341564,-0.703845240524,-0.703777133016,-0.703709019038,-0.703640898592,-0.703572771678,-0.703504638297,-0.703436498449,-0.703368352136,-0.703300199358,-0.703232040114,-0.703163874407,-0.703095702237,-0.703027523604,-0.702959338509,-0.702891146952,-0.702822948935,-0.702754744457,-0.70268653352,-0.702618316124,-0.702550092269,-0.702481861957,-0.702413625188,-0.702345381962,-0.702277132281,-0.702208876144,-0.702140613553,-0.702072344508,-0.70200406901,-0.701935787059,-0.701867498656,-0.701799203801,-0.701730902496,-0.70166259474,-0.701594280535,-0.701525959881,-0.701457632779,-0.701389299229,-0.701320959232,-0.701252612789,-0.7011842599,-0.701115900566,-0.701047534787,-0.700979162565,-0.700910783899,-0.700842398791,-0.70077400724,-0.700705609248,-0.700637204816,-0.700568793943,-0.700500376631,-0.70043195288,-0.700363522691,-0.700295086064,-0.700226643001,-0.700158193501,-0.700089737565,-0.700021275194,-0.699952806389,-0.69988433115,-0.699815849477,-0.699747361373,-0.699678866836,-0.699610365868,-0.699541858469,-0.69947334464,-0.699404824382,-0.699336297695,-0.69926776458,-0.699199225037,-0.699130679068,-0.699062126672,-0.698993567851,-0.698925002604,-0.698856430934,-0.698787852839,-0.698719268322,-0.698650677381,-0.69858208002,-0.698513476236,-0.698444866033,-0.698376249409,-0.698307626366,-0.698238996904,-0.698170361024,-0.698101718727,-0.698033070013,-0.697964414883,-0.697895753337,-0.697827085377,-0.697758411002,-0.697689730213,-0.697621043012,-0.697552349398,-0.697483649372,-0.697414942935,-0.697346230088,-0.697277510831,-0.697208785165,-0.69714005309,-0.697071314607,-0.697002569716,-0.696933818419,-0.696865060716,-0.696796296608,-0.696727526095,-0.696658749177,-0.696589965856,-0.696521176132,-0.696452380006,-0.696383577478,-0.69631476855,-0.69624595322,-0.696177131491,-0.696108303363,-0.696039468837,-0.695970627913,-0.695901780591,-0.695832926873,-0.695764066759,-0.695695200249,-0.695626327345,-0.695557448047,-0.695488562356,-0.695419670271,-0.695350771795,-0.695281866927,-0.695212955668,-0.695144038019,-0.69507511398,-0.695006183552,-0.694937246736,-0.694868303532,-0.694799353942,-0.694730397964,-0.694661435601,-0.694592466853,-0.69452349172,-0.694454510203,-0.694385522303,-0.69431652802,-0.694247527356,-0.69417852031,-0.694109506883,-0.694040487076,-0.69397146089,-0.693902428324,-0.693833389381,-0.69376434406,-0.693695292362,-0.693626234288,-0.693557169838,-0.693488099013,-0.693419021814,-0.693349938241,-0.693280848295,-0.693211751976,-0.693142649285,-0.693073540224,-0.693004424791,-0.692935302989,-0.692866174817,-0.692797040277,-0.692727899369,-0.692658752093,-0.692589598451,-0.692520438442,-0.692451272068,-0.692382099329,-0.692312920226,-0.692243734759,-0.692174542929,-0.692105344737,-0.692036140183,-0.691966929269,-0.691897711993,-0.691828488358,-0.691759258364,-0.691690022012,-0.691620779301,-0.691551530233,-0.691482274809,-0.691413013029,-0.691343744893,-0.691274470403,-0.691205189558,-0.691135902361,-0.69106660881,-0.690997308908,-0.690928002653,-0.690858690048,-0.690789371093,-0.690720045788,-0.690650714135,-0.690581376132,-0.690512031783,-0.690442681086,-0.690373324043,-0.690303960654,-0.69023459092,-0.690165214841,-0.690095832419,-0.690026443653,-0.689957048545,-0.689887647095,-0.689818239303,-0.689748825171,-0.689679404699,-0.689609977887,-0.689540544737,-0.689471105249,-0.689401659423,-0.68933220726,-0.689262748761,-0.689193283927,-0.689123812757,-0.689054335254,-0.688984851417,-0.688915361246,-0.688845864744,-0.688776361909,-0.688706852744,-0.688637337248,-0.688567815422,-0.688498287267,-0.688428752784,-0.688359211973,-0.688289664834,-0.688220111369,-0.688150551578,-0.688080985462,-0.68801141302,-0.687941834255,-0.687872249167,-0.687802657755,-0.687733060022,-0.687663455967,-0.687593845591,-0.687524228895,-0.687454605879,-0.687384976545,-0.687315340892,-0.687245698921,-0.687176050634,-0.68710639603,-0.68703673511,-0.686967067875,-0.686897394326,-0.686827714463,-0.686758028287,-0.686688335798,-0.686618636998,-0.686548931886,-0.686479220463,-0.686409502731,-0.686339778689,-0.686270048339,-0.68620031168,-0.686130568714,-0.686060819441,-0.685991063863,-0.685921301978,-0.685851533789,-0.685781759296,-0.685711978499,-0.685642191399,-0.685572397997,-0.685502598293,-0.685432792289,-0.685362979984,-0.685293161379,-0.685223336475,-0.685153505273,-0.685083667773,-0.685013823976,-0.684943973882,-0.684874117492,-0.684804254808,-0.684734385828,-0.684664510555,-0.684594628988,-0.684524741129,-0.684454846978,-0.684384946535,-0.684315039802,-0.684245126779,-0.684175207466,-0.684105281864,-0.684035349975,-0.683965411797,-0.683895467333,-0.683825516583,-0.683755559547,-0.683685596226,-0.683615626621,-0.683545650732,-0.68347566856,-0.683405680106,-0.68333568537,-0.683265684353,-0.683195677056,-0.683125663479,-0.683055643623,-0.682985617488,-0.682915585075,-0.682845546385,-0.682775501419,-0.682705450176,-0.682635392659,-0.682565328866,-0.6824952588,-0.682425182461,-0.682355099848,-0.682285010964,-0.682214915808,-0.682144814381,-0.682074706685,-0.682004592718,-0.681934472483,-0.68186434598,-0.681794213209,-0.681724074172,-0.681653928868,-0.681583777298,-0.681513619464,-0.681443455365,-0.681373285002,-0.681303108377,-0.681232925489,-0.681162736339,-0.681092540928,-0.681022339257,-0.680952131326,-0.680881917135,-0.680811696686,-0.68074146998,-0.680671237016,-0.680600997795,-0.680530752319,-0.680460500587,-0.680390242601,-0.680319978361,-0.680249707867,-0.68017943112,-0.680109148122,-0.680038858872,-0.679968563371,-0.679898261621,-0.67982795362,-0.679757639371,-0.679687318874,-0.679616992129,-0.679546659137,-0.679476319899,-0.679405974416,-0.679335622687,-0.679265264714,-0.679194900498,-0.679124530038,-0.679054153337,-0.678983770393,-0.678913381208,-0.678842985783,-0.678772584118,-0.678702176214,-0.678631762072,-0.678561341691,-0.678490915074,-0.67842048222,-0.67835004313,-0.678279597805,-0.678209146245,-0.678138688451,-0.678068224424,-0.677997754164,-0.677927277673,-0.677856794949,-0.677786305996,-0.677715810812,-0.677645309398,-0.677574801756,-0.677504287886,-0.677433767789,-0.677363241464,-0.677292708913,-0.677222170137,-0.677151625136,-0.677081073911,-0.677010516462,-0.67693995279,-0.676869382896,-0.67679880678,-0.676728224443,-0.676657635886,-0.67658704111,-0.676516440114,-0.6764458329,-0.676375219468,-0.676304599819,-0.676233973953,-0.676163341872,-0.676092703575,-0.676022059064,-0.67595140834,-0.675880751402,-0.675810088251,-0.675739418889,-0.675668743315,-0.675598061531,-0.675527373536,-0.675456679333,-0.675385978921,-0.6753152723,-0.675244559473,-0.675173840439,-0.675103115198,-0.675032383752,-0.674961646102,-0.674890902247,-0.674820152189,-0.674749395929,-0.674678633466,-0.674607864801,-0.674537089936,-0.67446630887,-0.674395521605,-0.674324728141,-0.674253928479,-0.674183122619,-0.674112310562,-0.674041492309,-0.673970667861,-0.673899837217,-0.673829000379,-0.673758157347,-0.673687308122,-0.673616452705,-0.673545591096,-0.673474723296,-0.673403849306,-0.673332969125,-0.673262082756,-0.673191190198,-0.673120291453,-0.67304938652,-0.6729784754,-0.672907558095,-0.672836634605,-0.67276570493,-0.672694769071,-0.672623827029,-0.672552878804,-0.672481924397,-0.672410963809,-0.67233999704,-0.672269024091,-0.672198044963,-0.672127059656,-0.672056068172,-0.671985070509,-0.67191406667,-0.671843056655,-0.671772040465,-0.671701018099,-0.67162998956,-0.671558954847,-0.671487913961,-0.671416866903,-0.671345813674,-0.671274754274,-0.671203688703,-0.671132616963,-0.671061539054,-0.670990454977,-0.670919364732,-0.67084826832,-0.670777165742,-0.670706056998,-0.67063494209,-0.670563821017,-0.67049269378,-0.67042156038,-0.670350420818,-0.670279275094,-0.670208123209,-0.670136965164,-0.670065800959,-0.669994630595,-0.669923454072,-0.669852271392,-0.669781082554,-0.66970988756,-0.66963868641,-0.669567479105,-0.669496265646,-0.669425046032,-0.669353820266,-0.669282588347,-0.669211350276,-0.669140106053,-0.66906885568,-0.668997599157,-0.668926336485,-0.668855067665,-0.668783792696,-0.66871251158,-0.668641224317,-0.668569930908,-0.668498631354,-0.668427325655,-0.668356013813,-0.668284695826,-0.668213371698,-0.668142041427,-0.668070705014,-0.667999362461,-0.667928013768,-0.667856658935,-0.667785297963,-0.667713930854,-0.667642557607,-0.667571178223,-0.667499792702,-0.667428401047,-0.667357003256,-0.667285599331,-0.667214189273,-0.667142773082,-0.667071350759,-0.666999922304,-0.666928487718,-0.666857047002,-0.666785600156,-0.666714147181,-0.666642688078,-0.666571222847,-0.66649975149,-0.666428274006,-0.666356790396,-0.666285300662,-0.666213804803,-0.66614230282,-0.666070794714,-0.665999280486,-0.665927760136,-0.665856233666,-0.665784701074,-0.665713162363,-0.665641617533,-0.665570066585,-0.665498509518,-0.665426946335,-0.665355377035,-0.665283801619,-0.665212220088,-0.665140632443,-0.665069038684,-0.664997438811,-0.664925832826,-0.66485422073,-0.664782602522,-0.664710978203,-0.664639347775,-0.664567711237,-0.664496068591,-0.664424419837,-0.664352764976,-0.664281104008,-0.664209436934,-0.664137763755,-0.664066084472,-0.663994399084,-0.663922707593,-0.663851009999,-0.663779306304,-0.663707596507,-0.66363588061,-0.663564158612,-0.663492430515,-0.66342069632,-0.663348956026,-0.663277209635,-0.663205457148,-0.663133698564,-0.663061933885,-0.662990163111,-0.662918386243,-0.662846603282,-0.662774814228,-0.662703019082,-0.662631217845,-0.662559410516,-0.662487597098,-0.66241577759,-0.662343951994,-0.662272120309,-0.662200282537,-0.662128438678,-0.662056588733,-0.661984732702,-0.661912870587,-0.661841002387,-0.661769128104,-0.661697247738,-0.66162536129,-0.66155346876,-0.66148157015,-0.661409665459,-0.661337754689,-0.66126583784,-0.661193914913,-0.661121985908,-0.661050050826,-0.660978109668,-0.660906162435,-0.660834209126,-0.660762249744,-0.660690284287,-0.660618312758,-0.660546335157,-0.660474351484,-0.66040236174,-0.660330365925,-0.660258364041,-0.660186356089,-0.660114342067,-0.660042321979,-0.659970295823,-0.659898263601,-0.659826225313,-0.659754180961,-0.659682130544,-0.659610074063,-0.659538011519,-0.659465942913,-0.659393868246,-0.659321787517,-0.659249700728,-0.659177607879,-0.659105508972,-0.659033404006,-0.658961292982,-0.658889175901,-0.658817052764,-0.658744923571,-0.658672788323,-0.658600647021,-0.658528499665,-0.658456346256,-0.658384186795,-0.658312021282,-0.658239849717,-0.658167672103,-0.658095488439,-0.658023298725,-0.657951102963,-0.657878901154,-0.657806693297,-0.657734479394,-0.657662259445,-0.657590033451,-0.657517801413,-0.657445563331,-0.657373319206,-0.657301069038,-0.657228812829,-0.657156550578,-0.657084282287,-0.657012007956,-0.656939727587,-0.656867441178,-0.656795148732,-0.656722850249,-0.656650545729,-0.656578235174,-0.656505918583,-0.656433595958,-0.6563612673,-0.656288932608,-0.656216591883,-0.656144245127,-0.65607189234,-0.655999533522,-0.655927168674,-0.655854797797,-0.655782420892,-0.655710037959,-0.655637648999,-0.655565254012,-0.655492853,-0.655420445962,-0.6553480329,-0.655275613814,-0.655203188705,-0.655130757573,-0.65505832042,-0.654985877245,-0.65491342805,-0.654840972835,-0.654768511601,-0.654696044349,-0.654623571078,-0.654551091791,-0.654478606487,-0.654406115167,-0.654333617832,-0.654261114482,-0.654188605119,-0.654116089742,-0.654043568353,-0.653971040953,-0.653898507541,-0.653825968118,-0.653753422686,-0.653680871244,-0.653608313795,-0.653535750337,-0.653463180872,-0.6533906054,-0.653318023923,-0.653245436441,-0.653172842954,-0.653100243463,-0.653027637969,-0.652955026473,-0.652882408975,-0.652809785475,-0.652737155975,-0.652664520476,-0.652591878977,-0.65251923148,-0.652446577984,-0.652373918492,-0.652301253003,-0.652228581519,-0.652155904039,-0.652083220565,-0.652010531097,-0.651937835636,-0.651865134182,-0.651792426737,-0.6517197133,-0.651646993873,-0.651574268456,-0.65150153705,-0.651428799656,-0.651356056274,-0.651283306905,-0.651210551549,-0.651137790207,-0.65106502288,-0.650992249569,-0.650919470274,-0.650846684996,-0.650773893736,-0.650701096494,-0.65062829327,-0.650555484067,-0.650482668883,-0.65040984772,-0.650337020579,-0.65026418746,-0.650191348364,-0.650118503292,-0.650045652244,-0.649972795221,-0.649899932223,-0.649827063252,-0.649754188307,-0.649681307391,-0.649608420502,-0.649535527643,-0.649462628813,-0.649389724013,-0.649316813244,-0.649243896507,-0.649170973802,-0.64909804513,-0.649025110492,-0.648952169888,-0.648879223319,-0.648806270786,-0.648733312289,-0.648660347829,-0.648587377406,-0.648514401022,-0.648441418677,-0.648368430372,-0.648295436107,-0.648222435882,-0.6481494297,-0.64807641756,-0.648003399463,-0.64793037541,-0.647857345401,-0.647784309437,-0.647711267519,-0.647638219647,-0.647565165822,-0.647492106045,-0.647419040316,-0.647345968637,-0.647272891007,-0.647199807427,-0.647126717899,-0.647053622422,-0.646980520998,-0.646907413627,-0.646834300309,-0.646761181046,-0.646688055839,-0.646614924687,-0.646541787591,-0.646468644552,-0.646395495572,-0.64632234065,-0.646249179787,-0.646176012983,-0.646102840241,-0.646029661559,-0.645956476939,-0.645883286382,-0.645810089888,-0.645736887458,-0.645663679092,-0.645590464792,-0.645517244557,-0.645444018389,-0.645370786288,-0.645297548255,-0.645224304291,-0.645151054395,-0.64507779857,-0.645004536816,-0.644931269132,-0.644857995521,-0.644784715982,-0.644711430516,-0.644638139125,-0.644564841807,-0.644491538566,-0.6444182294,-0.644344914311,-0.644271593299,-0.644198266365,-0.64412493351,-0.644051594734,-0.643978250039,-0.643904899424,-0.64383154289,-0.643758180438,-0.643684812069,-0.643611437784,-0.643538057582,-0.643464671465,-0.643391279434,-0.643317881489,-0.64324447763,-0.643171067859,-0.643097652176,-0.643024230582,-0.642950803077,-0.642877369662,-0.642803930339,-0.642730485106,-0.642657033966,-0.642583576919,-0.642510113965,-0.642436645105,-0.642363170341,-0.642289689671,-0.642216203098,-0.642142710622,-0.642069212244,-0.641995707963,-0.641922197782,-0.6418486817,-0.641775159719,-0.641701631838,-0.641628098059,-0.641554558382,-0.641481012809,-0.641407461338,-0.641333903973,-0.641260340712,-0.641186771557,-0.641113196508,-0.641039615566,-0.640966028732,-0.640892436007,-0.64081883739,-0.640745232883,-0.640671622487,-0.640598006201,-0.640524384028,-0.640450755966,-0.640377122018,-0.640303482184,-0.640229836464,-0.64015618486,-0.640082527371,-0.640008863998,-0.639935194743,-0.639861519606,-0.639787838587,-0.639714151688,-0.639640458908,-0.639566760249,-0.639493055711,-0.639419345295,-0.639345629002,-0.639271906831,-0.639198178785,-0.639124444864,-0.639050705068,-0.638976959397,-0.638903207854,-0.638829450437,-0.638755687149,-0.63868191799,-0.63860814296,-0.638534362059,-0.63846057529,-0.638386782652,-0.638312984146,-0.638239179773,-0.638165369533,-0.638091553428,-0.638017731457,-0.637943903622,-0.637870069923,-0.63779623036,-0.637722384936,-0.637648533649,-0.637574676501,-0.637500813493,-0.637426944625,-0.637353069898,-0.637279189313,-0.63720530287,-0.637131410569,-0.637057512413,-0.636983608401,-0.636909698533,-0.636835782812,-0.636761861236,-0.636687933808,-0.636614000527,-0.636540061395,-0.636466116412,-0.636392165579,-0.636318208896,-0.636244246364,-0.636170277984,-0.636096303756,-0.636022323682,-0.635948337761,-0.635874345995,-0.635800348384,-0.635726344929,-0.63565233563,-0.635578320489,-0.635504299505,-0.63543027268,-0.635356240015,-0.635282201509,-0.635208157164,-0.63513410698,-0.635060050958,-0.634985989099,-0.634911921403,-0.634837847872,-0.634763768504,-0.634689683303,-0.634615592267,-0.634541495398,-0.634467392697,-0.634393284164,-0.634319169799,-0.634245049604,-0.634170923579,-0.634096791725,-0.634022654043,-0.633948510532,-0.633874361195,-0.633800206031,-0.633726045041,-0.633651878227,-0.633577705588,-0.633503527125,-0.633429342839,-0.633355152731,-0.633280956801,-0.63320675505,-0.633132547479,-0.633058334088,-0.632984114878,-0.632909889851,-0.632835659005,-0.632761422343,-0.632687179864,-0.63261293157,-0.632538677461,-0.632464417538,-0.632390151801,-0.632315880252,-0.63224160289,-0.632167319717,-0.632093030734,-0.63201873594,-0.631944435337,-0.631870128925,-0.631795816705,-0.631721498678,-0.631647174844,-0.631572845204,-0.631498509759,-0.631424168509,-0.631349821456,-0.631275468599,-0.63120110994,-0.631126745478,-0.631052375216,-0.630977999153,-0.63090361729,-0.630829229628,-0.630754836168,-0.63068043691,-0.630606031855,-0.630531621003,-0.630457204356,-0.630382781914,-0.630308353677,-0.630233919647,-0.630159479824,-0.630085034208,-0.630010582801,-0.629936125603,-0.629861662614,-0.629787193837,-0.62971271927,-0.629638238915,-0.629563752772,-0.629489260843,-0.629414763128,-0.629340259627,-0.629265750341,-0.629191235272,-0.629116714419,-0.629042187783,-0.628967655365,-0.628893117166,-0.628818573186,-0.628744023427,-0.628669467888,-0.62859490657,-0.628520339475,-0.628445766602,-0.628371187953,-0.628296603527,-0.628222013327,-0.628147417352,-0.628072815604,-0.627998208082,-0.627923594788,-0.627848975722,-0.627774350885,-0.627699720278,-0.627625083901,-0.627550441755,-0.627475793841,-0.627401140159,-0.62732648071,-0.627251815495,-0.627177144515,-0.627102467769,-0.627027785259,-0.626953096986,-0.62687840295,-0.626803703152,-0.626728997592,-0.626654286272,-0.626579569192,-0.626504846352,-0.626430117753,-0.626355383397,-0.626280643283,-0.626205897412,-0.626131145786,-0.626056388404,-0.625981625268,-0.625906856378,-0.625832081735,-0.625757301339,-0.625682515191,-0.625607723292,-0.625532925643,-0.625458122244,-0.625383313096,-0.625308498199,-0.625233677555,-0.625158851164,-0.625084019026,-0.625009181143,-0.624934337515,-0.624859488142,-0.624784633026,-0.624709772168,-0.624634905566,-0.624560033224,-0.62448515514,-0.624410271317,-0.624335381754,-0.624260486452,-0.624185585412,-0.624110678635,-0.624035766121,-0.623960847871,-0.623885923886,-0.623810994166,-0.623736058713,-0.623661117526,-0.623586170606,-0.623511217955,-0.623436259572,-0.623361295459,-0.623286325616,-0.623211350044,-0.623136368744,-0.623061381715,-0.62298638896,-0.622911390479,-0.622836386271,-0.622761376339,-0.622686360683,-0.622611339302,-0.622536312199,-0.622461279374,-0.622386240827,-0.62231119656,-0.622236146572,-0.622161090865,-0.622086029439,-0.622010962295,-0.621935889433,-0.621860810855,-0.621785726561,-0.621710636551,-0.621635540827,-0.621560439389,-0.621485332238,-0.621410219374,-0.621335100798,-0.621259976511,-0.621184846514,-0.621109710806,-0.62103456939,-0.620959422265,-0.620884269433,-0.620809110893,-0.620733946647,-0.620658776696,-0.620583601039,-0.620508419679,-0.620433232614,-0.620358039847,-0.620282841378,-0.620207637207,-0.620132427335,-0.620057211763,-0.619981990492,-0.619906763522,-0.619831530854,-0.619756292488,-0.619681048426,-0.619605798668,-0.619530543215,-0.619455282067,-0.619380015225,-0.61930474269,-0.619229464462,-0.619154180543,-0.619078890932,-0.619003595631,-0.618928294641,-0.618852987961,-0.618777675593,-0.618702357537,-0.618627033794,-0.618551704365,-0.61847636925,-0.618401028451,-0.618325681967,-0.6182503298,-0.61817497195,-0.618099608417,-0.618024239204,-0.617948864309,-0.617873483735,-0.617798097481,-0.617722705548,-0.617647307938,-0.61757190465,-0.617496495686,-0.617421081045,-0.61734566073,-0.61727023474,-0.617194803076,-0.617119365739,-0.61704392273,-0.616968474049,-0.616893019697,-0.616817559674,-0.616742093982,-0.616666622621,-0.616591145592,-0.616515662895,-0.616440174531,-0.616364680501,-0.616289180805,-0.616213675445,-0.616138164421,-0.616062647733,-0.615987125382,-0.61591159737,-0.615836063696,-0.615760524361,-0.615684979367,-0.615609428713,-0.615533872401,-0.615458310431,-0.615382742804,-0.61530716952,-0.615231590581,-0.615156005986,-0.615080415737,-0.615004819834,-0.614929218279,-0.614853611071,-0.614777998211,-0.614702379701,-0.61462675554,-0.61455112573,-0.614475490271,-0.614399849164,-0.61432420241,-0.614248550008,-0.614172891961,-0.614097228268,-0.614021558931,-0.61394588395,-0.613870203325,-0.613794517058,-0.613718825149,-0.613643127599,-0.613567424408,-0.613491715578,-0.613416001109,-0.613340281001,-0.613264555255,-0.613188823873,-0.613113086854,-0.613037344199,-0.61296159591,-0.612885841986,-0.612810082429,-0.61273431724,-0.612658546417,-0.612582769964,-0.61250698788,-0.612431200166,-0.612355406822,-0.61227960785,-0.61220380325,-0.612127993022,-0.612052177169,-0.611976355689,-0.611900528584,-0.611824695854,-0.611748857501,-0.611673013525,-0.611597163926,-0.611521308706,-0.611445447865,-0.611369581403,-0.611293709322,-0.611217831622,-0.611141948304,-0.611066059369,-0.610990164816,-0.610914264648,-0.610838358864,-0.610762447465,-0.610686530453,-0.610610607827,-0.610534679588,-0.610458745738,-0.610382806276,-0.610306861204,-0.610230910522,-0.610154954231,-0.610078992332,-0.610003024825,-0.60992705171,-0.60985107299,-0.609775088664,-0.609699098733,-0.609623103198,-0.609547102059,-0.609471095317,-0.609395082973,-0.609319065028,-0.609243041482,-0.609167012336,-0.609090977591,-0.609014937247,-0.608938891305,-0.608862839766,-0.608786782631,-0.608710719899,-0.608634651573,-0.608558577652,-0.608482498137,-0.608406413029,-0.608330322329,-0.608254226037,-0.608178124155,-0.608102016682,-0.608025903619,-0.607949784968,-0.607873660728,-0.607797530901,-0.607721395488,-0.607645254488,-0.607569107903,-0.607492955733,-0.607416797979,-0.607340634643,-0.607264465723,-0.607188291222,-0.607112111139,-0.607035925477,-0.606959734234,-0.606883537412,-0.606807335012,-0.606731127035,-0.60665491348,-0.606578694349,-0.606502469643,-0.606426239361,-0.606350003506,-0.606273762077,-0.606197515076,-0.606121262502,-0.606045004357,-0.605968740642,-0.605892471356,-0.605816196502,-0.605739916078,-0.605663630087,-0.605587338529,-0.605511041404,-0.605434738714,-0.605358430459,-0.605282116639,-0.605205797255,-0.605129472309,-0.605053141801,-0.604976805731,-0.6049004641,-0.604824116909,-0.604747764159,-0.60467140585,-0.604595041983,-0.604518672558,-0.604442297577,-0.60436591704,-0.604289530948,-0.604213139302,-0.604136742101,-0.604060339348,-0.603983931042,-0.603907517184,-0.603831097776,-0.603754672817,-0.603678242308,-0.603601806251,-0.603525364646,-0.603448917493,-0.603372464793,-0.603296006547,-0.603219542756,-0.60314307342,-0.60306659854,-0.602990118117,-0.602913632152,-0.602837140644,-0.602760643596,-0.602684141007,-0.602607632878,-0.60253111921,-0.602454600004,-0.60237807526,-0.602301544979,-0.602225009162,-0.60214846781,-0.602071920922,-0.601995368501,-0.601918810546,-0.601842247059,-0.601765678039,-0.601689103488,-0.601612523407,-0.601535937795,-0.601459346655,-0.601382749986,-0.601306147789,-0.601229540065,-0.601152926815,-0.601076308039,-0.600999683738,-0.600923053913,-0.600846418564,-0.600769777693,-0.600693131299,-0.600616479384,-0.600539821948,-0.600463158992,-0.600386490517,-0.600309816523,-0.600233137011,-0.600156451982,-0.600079761437,-0.600003065375,-0.599926363799,-0.599849656708,-0.599772944104,-0.599696225986,-0.599619502356,-0.599542773215,-0.599466038563,-0.599389298401,-0.599312552729,-0.599235801548,-0.59915904486,-0.599082282664,-0.599005514961,-0.598928741752,-0.598851963039,-0.59877517882,-0.598698389098,-0.598621593873,-0.598544793146,-0.598467986916,-0.598391175186,-0.598314357955,-0.598237535225,-0.598160706996,-0.598083873269,-0.598007034045,-0.597930189323,-0.597853339106,-0.597776483393,-0.597699622186,-0.597622755484,-0.59754588329,-0.597469005603,-0.597392122424,-0.597315233754,-0.597238339593,-0.597161439943,-0.597084534804,-0.597007624177,-0.596930708062,-0.59685378646,-0.596776859373,-0.596699926799,-0.596622988741,-0.596546045199,-0.596469096174,-0.596392141666,-0.596315181676,-0.596238216205,-0.596161245253,-0.596084268822,-0.596007286911,-0.595930299522,-0.595853306656,-0.595776308312,-0.595699304492,-0.595622295197,-0.595545280427,-0.595468260183,-0.595391234465,-0.595314203275,-0.595237166612,-0.595160124479,-0.595083076875,-0.5950060238,-0.594928965257,-0.594851901245,-0.594774831766,-0.594697756819,-0.594620676407,-0.594543590528,-0.594466499185,-0.594389402377,-0.594312300106,-0.594235192372,-0.594158079176,-0.594080960519,-0.594003836401,-0.593926706823,-0.593849571785,-0.59377243129,-0.593695285336,-0.593618133925,-0.593540977058,-0.593463814735,-0.593386646958,-0.593309473725,-0.59323229504,-0.593155110901,-0.593077921311,-0.593000726268,-0.592923525776,-0.592846319833,-0.59276910844,-0.5926918916,-0.592614669311,-0.592537441575,-0.592460208393,-0.592382969764,-0.592305725691,-0.592228476174,-0.592151221212,-0.592073960808,-0.591996694962,-0.591919423674,-0.591842146946,-0.591764864777,-0.591687577169,-0.591610284122,-0.591532985637,-0.591455681715,-0.591378372357,-0.591301057562,-0.591223737333,-0.591146411669,-0.591069080572,-0.590991744041,-0.590914402078,-0.590837054684,-0.590759701859,-0.590682343604,-0.590604979919,-0.590527610805,-0.590450236264,-0.590372856295,-0.5902954709,-0.590218080079,-0.590140683832,-0.590063282161,-0.589985875067,-0.589908462549,-0.589831044609,-0.589753621248,-0.589676192466,-0.589598758263,-0.589521318641,-0.5894438736,-0.589366423141,-0.589288967265,-0.589211505973,-0.589134039264,-0.58905656714,-0.588979089602,-0.58890160665,-0.588824118285,-0.588746624507,-0.588669125318,-0.588591620718,-0.588514110708,-0.588436595288,-0.588359074459,-0.588281548223,-0.588204016579,-0.588126479528,-0.588048937072,-0.58797138921,-0.587893835943,-0.587816277273,-0.5877387132,-0.587661143725,-0.587583568848,-0.587505988569,-0.587428402891,-0.587350811813,-0.587273215337,-0.587195613462,-0.58711800619,-0.587040393521,-0.586962775456,-0.586885151996,-0.586807523142,-0.586729888893,-0.586652249252,-0.586574604218,-0.586496953793,-0.586419297976,-0.58634163677,-0.586263970174,-0.586186298189,-0.586108620815,-0.586030938055,-0.585953249908,-0.585875556375,-0.585797857456,-0.585720153154,-0.585642443467,-0.585564728397,-0.585487007945,-0.585409282111,-0.585331550896,-0.585253814301,-0.585176072327,-0.585098324973,-0.585020572242,-0.584942814133,-0.584865050648,-0.584787281786,-0.584709507549,-0.584631727938,-0.584553942953,-0.584476152595,-0.584398356864,-0.584320555762,-0.584242749289,-0.584164937446,-0.584087120233,-0.584009297651,-0.583931469701,-0.583853636384,-0.5837757977,-0.583697953651,-0.583620104236,-0.583542249456,-0.583464389313,-0.583386523806,-0.583308652938,-0.583230776707,-0.583152895116,-0.583075008164,-0.582997115853,-0.582919218184,-0.582841315156,-0.582763406771,-0.582685493029,-0.582607573931,-0.582529649478,-0.58245171967,-0.582373784509,-0.582295843995,-0.582217898128,-0.58213994691,-0.582061990341,-0.581984028421,-0.581906061153,-0.581828088535,-0.581750110569,-0.581672127256,-0.581594138597,-0.581516144591,-0.581438145241,-0.581360140546,-0.581282130507,-0.581204115125,-0.581126094401,-0.581048068335,-0.580970036929,-0.580892000182,-0.580813958096,-0.580735910671,-0.580657857908,-0.580579799808,-0.580501736371,-0.580423667598,-0.580345593491,-0.580267514049,-0.580189429273,-0.580111339164,-0.580033243723,-0.57995514295,-0.579877036847,-0.579798925413,-0.579720808651,-0.579642686559,-0.579564559139,-0.579486426393,-0.579408288319,-0.57933014492,-0.579251996196,-0.579173842148,-0.579095682775,-0.57901751808,-0.578939348063,-0.578861172724,-0.578782992065,-0.578704806085,-0.578626614786,-0.578548418169,-0.578470216233,-0.578392008981,-0.578313796412,-0.578235578527,-0.578157355327,-0.578079126813,-0.578000892985,-0.577922653845,-0.577844409392,-0.577766159628,-0.577687904553,-0.577609644168,-0.577531378474,-0.577453107472,-0.577374831161,-0.577296549544,-0.57721826262,-0.57713997039,-0.577061672856,-0.576983370017,-0.576905061875,-0.57682674843,-0.576748429682,-0.576670105634,-0.576591776285,-0.576513441636,-0.576435101688,-0.576356756441,-0.576278405897,-0.576200050055,-0.576121688917,-0.576043322484,-0.575964950756,-0.575886573734,-0.575808191418,-0.575729803809,-0.575651410909,-0.575573012717,-0.575494609235,-0.575416200463,-0.575337786402,-0.575259367052,-0.575180942415,-0.575102512491,-0.57502407728,-0.574945636784,-0.574867191004,-0.574788739939,-0.574710283591,-0.57463182196,-0.574553355048,-0.574474882854,-0.57439640538,-0.574317922626,-0.574239434593,-0.574160941282,-0.574082442693,-0.574003938827,-0.573925429686,-0.573846915269,-0.573768395577,-0.573689870611,-0.573611340372,-0.57353280486,-0.573454264077,-0.573375718023,-0.573297166698,-0.573218610104,-0.57314004824,-0.573061481109,-0.57298290871,-0.572904331045,-0.572825748113,-0.572747159916,-0.572668566454,-0.572589967729,-0.572511363741,-0.57243275449,-0.572354139977,-0.572275520204,-0.57219689517,-0.572118264877,-0.572039629325,-0.571960988515,-0.571882342447,-0.571803691123,-0.571725034543,-0.571646372708,-0.571567705618,-0.571489033275,-0.571410355679,-0.57133167283,-0.57125298473,-0.571174291379,-0.571095592778,-0.571016888928,-0.570938179828,-0.570859465481,-0.570780745887,-0.570702021046,-0.57062329096,-0.570544555628,-0.570465815052,-0.570387069232,-0.57030831817,-0.570229561865,-0.570150800319,-0.570072033533,-0.569993261506,-0.56991448424,-0.569835701736,-0.569756913993,-0.569678121014,-0.569599322798,-0.569520519347,-0.569441710661,-0.56936289674,-0.569284077586,-0.5692052532,-0.569126423581,-0.569047588731,-0.568968748651,-0.56888990334,-0.568811052801,-0.568732197033,-0.568653336037,-0.568574469815,-0.568495598366,-0.568416721692,-0.568337839793,-0.56825895267,-0.568180060324,-0.568101162755,-0.568022259964,-0.567943351952,-0.56786443872,-0.567785520268,-0.567706596597,-0.567627667708,-0.567548733601,-0.567469794278,-0.567390849738,-0.567311899983,-0.567232945014,-0.567153984831,-0.567075019434,-0.566996048825,-0.566917073004,-0.566838091973,-0.566759105731,-0.56668011428,-0.566601117619,-0.566522115751,-0.566443108675,-0.566364096393,-0.566285078905,-0.566206056212,-0.566127028314,-0.566047995212,-0.565968956908,-0.565889913401,-0.565810864693,-0.565731810784,-0.565652751674,-0.565573687366,-0.565494617859,-0.565415543154,-0.565336463251,-0.565257378153,-0.565178287858,-0.565099192369,-0.565020091685,-0.564940985808,-0.564861874738,-0.564782758476,-0.564703637022,-0.564624510378,-0.564545378544,-0.564466241521,-0.564387099309,-0.564307951909,-0.564228799323,-0.56414964155,-0.564070478592,-0.563991310449,-0.563912137122,-0.563832958611,-0.563753774918,-0.563674586043,-0.563595391987,-0.56351619275,-0.563436988334,-0.563357778739,-0.563278563965,-0.563199344014,-0.563120118886,-0.563040888582,-0.562961653102,-0.562882412448,-0.56280316662,-0.562723915619,-0.562644659446,-0.562565398101,-0.562486131584,-0.562406859898,-0.562327583042,-0.562248301017,-0.562169013824,-0.562089721464,-0.562010423937,-0.561931121245,-0.561851813387,-0.561772500365,-0.561693182179,-0.56161385883,-0.561534530319,-0.561455196646,-0.561375857813,-0.561296513819,-0.561217164666,-0.561137810355,-0.561058450886,-0.560979086259,-0.560899716477,-0.560820341538,-0.560740961445,-0.560661576197,-0.560582185796,-0.560502790242,-0.560423389537,-0.56034398368,-0.560264572672,-0.560185156514,-0.560105735208,-0.560026308753,-0.55994687715,-0.559867440401,-0.559787998505,-0.559708551464,-0.559629099278,-0.559549641948,-0.559470179475,-0.559390711859,-0.559311239102,-0.559231761203,-0.559152278164,-0.559072789986,-0.558993296668,-0.558913798213,-0.55883429462,-0.55875478589,-0.558675272025,-0.558595753024,-0.558516228889,-0.55843669962,-0.558357165218,-0.558277625683,-0.558198081017,-0.558118531221,-0.558038976294,-0.557959416237,-0.557879851053,-0.55780028074,-0.5577207053,-0.557641124733,-0.557561539041,-0.557481948224,-0.557402352283,-0.557322751218,-0.55724314503,-0.55716353372,-0.557083917289,-0.557004295737,-0.556924669066,-0.556845037275,-0.556765400366,-0.556685758339,-0.556606111196,-0.556526458936,-0.55644680156,-0.55636713907,-0.556287471466,-0.556207798749,-0.556128120919,-0.556048437977,-0.555968749924,-0.555889056761,-0.555809358488,-0.555729655107,-0.555649946617,-0.55557023302,-0.555490514316,-0.555410790506,-0.555331061591,-0.555251327571,-0.555171588448,-0.555091844222,-0.555012094893,-0.554932340463,-0.554852580932,-0.554772816301,-0.55469304657,-0.554613271741,-0.554533491814,-0.55445370679,-0.55437391667,-0.554294121454,-0.554214321142,-0.554134515737,-0.554054705238,-0.553974889647,-0.553895068963,-0.553815243188,-0.553735412323,-0.553655576367,-0.553575735323,-0.55349588919,-0.55341603797,-0.553336181663,-0.55325632027,-0.553176453791,-0.553096582227,-0.55301670558,-0.552936823849,-0.552856937036,-0.552777045142,-0.552697148166,-0.55261724611,-0.552537338974,-0.55245742676,-0.552377509467,-0.552297587097,-0.552217659651,-0.552137727129,-0.552057789531,-0.551977846859,-0.551897899114,-0.551817946295,-0.551737988405,-0.551658025443,-0.55157805741,-0.551498084307,-0.551418106135,-0.551338122894,-0.551258134586,-0.551178141211,-0.551098142769,-0.551018139262,-0.55093813069,-0.550858117053,-0.550778098354,-0.550698074592,-0.550618045768,-0.550538011882,-0.550457972937,-0.550377928931,-0.550297879867,-0.550217825744,-0.550137766564,-0.550057702327,-0.549977633035,-0.549897558687,-0.549817479284,-0.549737394827,-0.549657305318,-0.549577210756,-0.549497111143,-0.549417006478,-0.549336896764,-0.549256782,-0.549176662188,-0.549096537327,-0.54901640742,-0.548936272466,-0.548856132466,-0.548775987421,-0.548695837333,-0.5486156822,-0.548535522025,-0.548455356808,-0.548375186549,-0.54829501125,-0.548214830912,-0.548134645534,-0.548054455118,-0.547974259664,-0.547894059173,-0.547813853646,-0.547733643084,-0.547653427487,-0.547573206857,-0.547492981193,-0.547412750496,-0.547332514768,-0.547252274009,-0.54717202822,-0.547091777401,-0.547011521554,-0.546931260678,-0.546850994775,-0.546770723846,-0.546690447891,-0.546610166911,-0.546529880906,-0.546449589878,-0.546369293827,-0.546288992754,-0.54620868666,-0.546128375545,-0.54604805941,-0.545967738256,-0.545887412083,-0.545807080893,-0.545726744686,-0.545646403463,-0.545566057224,-0.54548570597,-0.545405349703,-0.545324988422,-0.545244622129,-0.545164250824,-0.545083874508,-0.545003493181,-0.544923106845,-0.544842715501,-0.544762319148,-0.544681917788,-0.544601511421,-0.544521100048,-0.544440683671,-0.544360262288,-0.544279835903,-0.544199404514,-0.544118968123,-0.544038526731,-0.543958080338,-0.543877628945,-0.543797172553,-0.543716711162,-0.543636244774,-0.543555773389,-0.543475297007,-0.54339481563,-0.543314329258,-0.543233837893,-0.543153341534,-0.543072840182,-0.542992333838,-0.542911822504,-0.542831306179,-0.542750784865,-0.542670258561,-0.54258972727,-0.542509190991,-0.542428649726,-0.542348103474,-0.542267552238,-0.542186996017,-0.542106434812,-0.542025868625,-0.541945297455,-0.541864721304,-0.541784140172,-0.541703554061,-0.54162296297,-0.5415423669,-0.541461765853,-0.541381159829,-0.541300548828,-0.541219932853,-0.541139311902,-0.541058685977,-0.540978055079,-0.540897419208,-0.540816778366,-0.540736132552,-0.540655481768,-0.540574826015,-0.540494165293,-0.540413499602,-0.540332828945,-0.54025215332,-0.54017147273,-0.540090787174,-0.540010096655,-0.539929401171,-0.539848700725,-0.539767995316,-0.539687284946,-0.539606569616,-0.539525849325,-0.539445124075,-0.539364393867,-0.539283658701,-0.539202918578,-0.539122173499,-0.539041423464,-0.538960668474,-0.538879908531,-0.538799143634,-0.538718373785,-0.538637598984,-0.538556819232,-0.538476034529,-0.538395244877,-0.538314450277,-0.538233650728,-0.538152846232,-0.538072036789,-0.5379912224,-0.537910403067,-0.537829578789,-0.537748749567,-0.537667915402,-0.537587076296,-0.537506232248,-0.537425383259,-0.53734452933,-0.537263670463,-0.537182806656,-0.537101937913,-0.537021064232,-0.536940185615,-0.536859302062,-0.536778413575,-0.536697520154,-0.5366166218,-0.536535718513,-0.536454810295,-0.536373897146,-0.536292979066,-0.536212056057,-0.536131128119,-0.536050195253,-0.53596925746,-0.53588831474,-0.535807367095,-0.535726414524,-0.53564545703,-0.535564494611,-0.53548352727,-0.535402555007,-0.535321577823,-0.535240595718,-0.535159608693,-0.535078616749,-0.534997619887,-0.534916618107,-0.534835611411,-0.534754599798,-0.53467358327,-0.534592561827,-0.534511535471,-0.534430504201,-0.534349468019,-0.534268426926,-0.534187380921,-0.534106330006,-0.534025274182,-0.53394421345,-0.533863147809,-0.533782077261,-0.533701001807,-0.533619921447,-0.533538836183,-0.533457746014,-0.533376650941,-0.533295550966,-0.533214446089,-0.533133336311,-0.533052221633,-0.532971102054,-0.532889977577,-0.532808848202,-0.532727713929,-0.532646574759,-0.532565430693,-0.532484281733,-0.532403127877,-0.532321969128,-0.532240805486,-0.532159636952,-0.532078463526,-0.531997285209,-0.531916102003,-0.531834913907,-0.531753720923,-0.531672523051,-0.531591320292,-0.531510112646,-0.531428900115,-0.5313476827,-0.5312664604,-0.531185233217,-0.531104001151,-0.531022764204,-0.530941522376,-0.530860275667,-0.530779024079,-0.530697767612,-0.530616506266,-0.530535240044,-0.530453968945,-0.53037269297,-0.53029141212,-0.530210126396,-0.530128835798,-0.530047540328,-0.529966239985,-0.529884934771,-0.529803624686,-0.529722309732,-0.529640989908,-0.529559665216,-0.529478335657,-0.52939700123,-0.529315661938,-0.52923431778,-0.529152968758,-0.529071614872,-0.528990256122,-0.52890889251,-0.528827524037,-0.528746150703,-0.528664772508,-0.528583389455,-0.528502001542,-0.528420608772,-0.528339211145,-0.528257808661,-0.528176401321,-0.528094989127,-0.528013572079,-0.527932150177,-0.527850723423,-0.527769291816,-0.527687855359,-0.527606414051,-0.527524967893,-0.527443516887,-0.527362061032,-0.52728060033,-0.527199134782,-0.527117664387,-0.527036189148,-0.526954709064,-0.526873224136,-0.526791734365,-0.526710239753,-0.526628740298,-0.526547236004,-0.526465726869,-0.526384212895,-0.526302694083,-0.526221170433,-0.526139641946,-0.526058108623,-0.525976570464,-0.525895027471,-0.525813479644,-0.525731926984,-0.525650369491,-0.525568807167,-0.525487240012,-0.525405668026,-0.525324091212,-0.525242509568,-0.525160923097,-0.525079331798,-0.524997735673,-0.524916134723,-0.524834528947,-0.524752918347,-0.524671302924,-0.524589682678,-0.524508057611,-0.524426427722,-0.524344793013,-0.524263153484,-0.524181509136,-0.52409985997,-0.524018205986,-0.523936547186,-0.52385488357,-0.523773215139,-0.523691541893,-0.523609863834,-0.523528180962,-0.523446493278,-0.523364800782,-0.523283103476,-0.523201401359,-0.523119694434,-0.5230379827,-0.522956266159,-0.52287454481,-0.522792818656,-0.522711087696,-0.522629351931,-0.522547611363,-0.522465865991,-0.522384115817,-0.522302360841,-0.522220601065,-0.522138836488,-0.522057067112,-0.521975292937,-0.521893513965,-0.521811730195,-0.521729941629,-0.521648148267,-0.52156635011,-0.521484547159,-0.521402739415,-0.521320926879,-0.52123910955,-0.52115728743,-0.52107546052,-0.52099362882,-0.520911792332,-0.520829951055,-0.520748104991,-0.52066625414,-0.520584398504,-0.520502538082,-0.520420672876,-0.520338802887,-0.520256928114,-0.52017504856,-0.520093164224,-0.520011275108,-0.519929381211,-0.519847482536,-0.519765579082,-0.519683670851,-0.519601757843,-0.519519840059,-0.5194379175,-0.519355990166,-0.519274058058,-0.519192121177,-0.519110179524,-0.519028233099,-0.518946281904,-0.518864325938,-0.518782365203,-0.5187003997,-0.518618429429,-0.518536454391,-0.518454474586,-0.518372490016,-0.518290500681,-0.518208506583,-0.518126507721,-0.518044504096,-0.51796249571,-0.517880482562,-0.517798464655,-0.517716441988,-0.517634414562,-0.517552382378,-0.517470345437,-0.51738830374,-0.517306257287,-0.517224206079,-0.517142150116,-0.5170600894,-0.516978023932,-0.516895953711,-0.51681387874,-0.516731799018,-0.516649714546,-0.516567625325,-0.516485531356,-0.51640343264,-0.516321329177,-0.516239220968,-0.516157108014,-0.516074990315,-0.515992867873,-0.515910740688,-0.515828608761,-0.515746472092,-0.515664330683,-0.515582184534,-0.515500033646,-0.515417878019,-0.515335717655,-0.515253552554,-0.515171382717,-0.515089208145,-0.515007028838,-0.514924844797,-0.514842656023,-0.514760462517,-0.514678264279,-0.51459606131,-0.514513853611,-0.514431641183,-0.514349424027,-0.514267202142,-0.514184975531,-0.514102744193,-0.51402050813,-0.513938267342,-0.51385602183,-0.513773771595,-0.513691516637,-0.513609256958,-0.513526992557,-0.513444723437,-0.513362449596,-0.513280171038,-0.513197887761,-0.513115599767,-0.513033307056,-0.51295100963,-0.512868707489,-0.512786400634,-0.512704089065,-0.512621772783,-0.51253945179,-0.512457126086,-0.512374795671,-0.512292460546,-0.512210120713,-0.512127776172,-0.512045426923,-0.511963072967,-0.511880714306,-0.511798350939,-0.511715982869,-0.511633610094,-0.511551232617,-0.511468850438,-0.511386463557,-0.511304071976,-0.511221675695,-0.511139274715,-0.511056869037,-0.510974458661,-0.510892043589,-0.51080962382,-0.510727199357,-0.510644770198,-0.510562336346,-0.510479897801,-0.510397454564,-0.510315006635,-0.510232554016,-0.510150096707,-0.510067634708,-0.509985168021,-0.509902696647,-0.509820220585,-0.509737739837,-0.509655254404,-0.509572764287,-0.509490269485,-0.50940777,-0.509325265833,-0.509242756984,-0.509160243455,-0.509077725245,-0.508995202356,-0.508912674789,-0.508830142543,-0.508747605621,-0.508665064022,-0.508582517748,-0.508499966799,-0.508417411175,-0.508334850879,-0.50825228591,-0.50816971627,-0.508087141958,-0.508004562976,-0.507921979325,-0.507839391005,-0.507756798017,-0.507674200362,-0.50759159804,-0.507508991053,-0.507426379401,-0.507343763084,-0.507261142105,-0.507178516462,-0.507095886158,-0.507013251193,-0.506930611567,-0.506847967282,-0.506765318338,-0.506682664736,-0.506600006476,-0.50651734356,-0.506434675988,-0.506352003761,-0.50626932688,-0.506186645345,-0.506103959158,-0.506021268318,-0.505938572827,-0.505855872686,-0.505773167895,-0.505690458455,-0.505607744367,-0.505525025632,-0.50544230225,-0.505359574222,-0.505276841548,-0.505194104231,-0.505111362269,-0.505028615665,-0.504945864419,-0.504863108531,-0.504780348003,-0.504697582835,-0.504614813028,-0.504532038582,-0.504449259499,-0.50436647578,-0.504283687424,-0.504200894433,-0.504118096807,-0.504035294548,-0.503952487655,-0.503869676131,-0.503786859975,-0.503704039188,-0.503621213772,-0.503538383726,-0.503455549051,-0.50337270975,-0.503289865821,-0.503207017266,-0.503124164086,-0.503041306281,-0.502958443852,-0.5028755768,-0.502792705126,-0.50270982883,-0.502626947914,-0.502544062377,-0.502461172221,-0.502378277447,-0.502295378055,-0.502212474046,-0.50212956542,-0.50204665218,-0.501963734324,-0.501880811855,-0.501797884772,-0.501714953077,-0.50163201677,-0.501549075853,-0.501466130325,-0.501383180188,-0.501300225442,-0.501217266089,-0.501134302128,-0.501051333561,-0.500968360389,-0.500885382611,-0.50080240023,-0.500719413245,-0.500636421658,-0.500553425469,-0.50047042468,-0.50038741929,-0.5003044093,-0.500221394712,-0.500138375526,-0.500055351742,-0.499972323363,-0.499889290387,-0.499806252817,-0.499723210653,-0.499640163895,-0.499557112545,-0.499474056603,-0.49939099607,-0.499307930946,-0.499224861234,-0.499141786932,-0.499058708042,-0.498975624565,-0.498892536502,-0.498809443853,-0.498726346619,-0.4986432448,-0.498560138399,-0.498477027414,-0.498393911848,-0.498310791701,-0.498227666973,-0.498144537665,-0.498061403779,-0.497978265315,-0.497895122273,-0.497811974655,-0.497728822461,-0.497645665692,-0.497562504349,-0.497479338433,-0.497396167943,-0.497312992882,-0.497229813249,-0.497146629046,-0.497063440274,-0.496980246932,-0.496897049023,-0.496813846546,-0.496730639502,-0.496647427893,-0.496564211718,-0.496480990979,-0.496397765677,-0.496314535811,-0.496231301384,-0.496148062396,-0.496064818847,-0.495981570738,-0.495898318071,-0.495815060845,-0.495731799061,-0.495648532722,-0.495565261826,-0.495481986375,-0.49539870637,-0.495315421811,-0.495232132699,-0.495148839035,-0.49506554082,-0.494982238054,-0.494898930739,-0.494815618875,-0.494732302462,-0.494648981502,-0.494565655995,-0.494482325942,-0.494398991344,-0.494315652202,-0.494232308516,-0.494148960287,-0.494065607516,-0.493982250204,-0.493898888351,-0.493815521958,-0.493732151026,-0.493648775556,-0.493565395549,-0.493482011004,-0.493398621924,-0.493315228309,-0.493231830159,-0.493148427475,-0.493065020259,-0.49298160851,-0.49289819223,-0.492814771419,-0.492731346079,-0.492647916209,-0.492564481811,-0.492481042886,-0.492397599433,-0.492314151455,-0.492230698951,-0.492147241923,-0.492063780372,-0.491980314297,-0.4918968437,-0.491813368582,-0.491729888943,-0.491646404784,-0.491562916107,-0.49147942291,-0.491395925197,-0.491312422966,-0.491228916219,-0.491145404957,-0.491061889181,-0.490978368891,-0.490894844088,-0.490811314773,-0.490727780946,-0.490644242608,-0.490560699761,-0.490477152405,-0.49039360054,-0.490310044167,-0.490226483288,-0.490142917903,-0.490059348012,-0.489975773617,-0.489892194719,-0.489808611317,-0.489725023413,-0.489641431007,-0.489557834101,-0.489474232695,-0.48939062679,-0.489307016386,-0.489223401485,-0.489139782087,-0.489056158193,-0.488972529804,-0.48888889692,-0.488805259542,-0.488721617671,-0.488637971309,-0.488554320454,-0.488470665109,-0.488387005274,-0.48830334095,-0.488219672138,-0.488135998838,-0.488052321051,-0.487968638778,-0.487884952019,-0.487801260776,-0.48771756505,-0.48763386484,-0.487550160148,-0.487466450975,-0.487382737321,-0.487299019187,-0.487215296574,-0.487131569483,-0.487047837914,-0.486964101868,-0.486880361346,-0.486796616349,-0.486712866877,-0.486629112932,-0.486545354513,-0.486461591622,-0.48637782426,-0.486294052427,-0.486210276124,-0.486126495353,-0.486042710112,-0.485958920404,-0.48587512623,-0.485791327589,-0.485707524483,-0.485623716912,-0.485539904878,-0.485456088381,-0.485372267421,-0.485288442,-0.485204612119,-0.485120777777,-0.485036938976,-0.484953095717,-0.484869248001,-0.484785395827,-0.484701539198,-0.484617678113,-0.484533812574,-0.484449942581,-0.484366068135,-0.484282189237,-0.484198305888,-0.484114418087,-0.484030525837,-0.483946629138,-0.483862727991,-0.483778822396,-0.483694912354,-0.483610997866,-0.483527078933,-0.483443155555,-0.483359227734,-0.48327529547,-0.483191358763,-0.483107417616,-0.483023472027,-0.482939521999,-0.482855567532,-0.482771608626,-0.482687645283,-0.482603677503,-0.482519705287,-0.482435728636,-0.482351747551,-0.482267762031,-0.482183772079,-0.482099777695,-0.482015778879,-0.481931775633,-0.481847767957,-0.481763755852,-0.481679739319,-0.481595718358,-0.48151169297,-0.481427663157,-0.481343628918,-0.481259590255,-0.481175547168,-0.481091499659,-0.481007447727,-0.480923391374,-0.4808393306,-0.480755265407,-0.480671195795,-0.480587121764,-0.480503043316,-0.480418960451,-0.480334873171,-0.480250781475,-0.480166685365,-0.480082584841,-0.479998479905,-0.479914370556,-0.479830256797,-0.479746138626,-0.479662016046,-0.479577889057,-0.47949375766,-0.479409621856,-0.479325481644,-0.479241337027,-0.479157188005,-0.479073034579,-0.478988876749,-0.478904714516,-0.478820547881,-0.478736376845,-0.478652201409,-0.478568021573,-0.478483837338,-0.478399648705,-0.478315455675,-0.478231258248,-0.478147056425,-0.478062850207,-0.477978639595,-0.477894424589,-0.477810205191,-0.477725981401,-0.47764175322,-0.477557520648,-0.477473283687,-0.477389042337,-0.477304796598,-0.477220546473,-0.477136291961,-0.477052033063,-0.47696776978,-0.476883502114,-0.476799230063,-0.47671495363,-0.476630672816,-0.47654638762,-0.476462098044,-0.476377804088,-0.476293505753,-0.476209203041,-0.476124895951,-0.476040584485,-0.475956268643,-0.475871948427,-0.475787623836,-0.475703294872,-0.475618961535,-0.475534623827,-0.475450281747,-0.475365935297,-0.475281584478,-0.47519722929,-0.475112869735,-0.475028505812,-0.474944137522,-0.474859764868,-0.474775387848,-0.474691006464,-0.474606620717,-0.474522230608,-0.474437836137,-0.474353437305,-0.474269034112,-0.474184626561,-0.474100214651,-0.474015798383,-0.473931377757,-0.473846952776,-0.473762523439,-0.473678089748,-0.473593651702,-0.473509209303,-0.473424762552,-0.47334031145,-0.473255855996,-0.473171396192,-0.473086932039,-0.473002463538,-0.472917990689,-0.472833513493,-0.47274903195,-0.472664546063,-0.47258005583,-0.472495561254,-0.472411062335,-0.472326559073,-0.47224205147,-0.472157539526,-0.472073023242,-0.471988502619,-0.471903977658,-0.471819448359,-0.471734914723,-0.471650376751,-0.471565834443,-0.471481287802,-0.471396736826,-0.471312181517,-0.471227621877,-0.471143057904,-0.471058489601,-0.470973916969,-0.470889340007,-0.470804758717,-0.470720173099,-0.470635583155,-0.470550988884,-0.470466390289,-0.470381787369,-0.470297180125,-0.470212568558,-0.47012795267,-0.47004333246,-0.469958707929,-0.469874079079,-0.46978944591,-0.469704808422,-0.469620166617,-0.469535520496,-0.469450870058,-0.469366215306,-0.469281556239,-0.469196892859,-0.469112225165,-0.46902755316,-0.468942876844,-0.468858196217,-0.468773511281,-0.468688822036,-0.468604128483,-0.468519430622,-0.468434728455,-0.468350021982,-0.468265311204,-0.468180596122,-0.468095876736,-0.468011153048,-0.467926425058,-0.467841692767,-0.467756956176,-0.467672215285,-0.467587470095,-0.467502720608,-0.467417966823,-0.467333208742,-0.467248446365,-0.467163679694,-0.467078908728,-0.466994133469,-0.466909353917,-0.466824570074,-0.46673978194,-0.466654989516,-0.466570192802,-0.466485391799,-0.466400586509,-0.466315776932,-0.466230963068,-0.466146144919,-0.466061322486,-0.465976495768,-0.465891664767,-0.465806829484,-0.465721989919,-0.465637146073,-0.465552297948,-0.465467445543,-0.46538258886,-0.465297727898,-0.46521286266,-0.465127993146,-0.465043119357,-0.464958241293,-0.464873358955,-0.464788472344,-0.464703581461,-0.464618686306,-0.464533786881,-0.464448883186,-0.464363975222,-0.464279062989,-0.464194146489,-0.464109225722,-0.464024300689,-0.463939371391,-0.463854437828,-0.463769500002,-0.463684557913,-0.463599611562,-0.463514660949,-0.463429706076,-0.463344746944,-0.463259783552,-0.463174815902,-0.463089843995,-0.463004867831,-0.462919887411,-0.462834902736,-0.462749913807,-0.462664920624,-0.462579923189,-0.462494921502,-0.462409915563,-0.462324905375,-0.462239890936,-0.462154872249,-0.462069849314,-0.461984822131,-0.461899790702,-0.461814755028,-0.461729715108,-0.461644670945,-0.461559622538,-0.461474569888,-0.461389512997,-0.461304451865,-0.461219386492,-0.46113431688,-0.46104924303,-0.460964164941,-0.460879082616,-0.460793996054,-0.460708905256,-0.460623810224,-0.460538710958,-0.460453607459,-0.460368499727,-0.460283387764,-0.46019827157,-0.460113151146,-0.460028026493,-0.459942897611,-0.459857764501,-0.459772627165,-0.459687485602,-0.459602339814,-0.459517189802,-0.459432035566,-0.459346877106,-0.459261714425,-0.459176547522,-0.459091376398,-0.459006201055,-0.458921021492,-0.458835837712,-0.458750649713,-0.458665457498,-0.458580261067,-0.458495060421,-0.45840985556,-0.458324646486,-0.458239433199,-0.4581542157,-0.45806899399,-0.457983768069,-0.457898537938,-0.457813303599,-0.457728065051,-0.457642822297,-0.457557575335,-0.457472324168,-0.457387068796,-0.457301809219,-0.45721654544,-0.457131277457,-0.457046005273,-0.456960728888,-0.456875448302,-0.456790163517,-0.456704874533,-0.456619581351,-0.456534283972,-0.456448982397,-0.456363676626,-0.45627836666,-0.456193052501,-0.456107734148,-0.456022411602,-0.455937084865,-0.455851753937,-0.455766418819,-0.455681079512,-0.455595736016,-0.455510388333,-0.455425036462,-0.455339680406,-0.455254320163,-0.455168955737,-0.455083587126,-0.454998214333,-0.454912837357,-0.4548274562,-0.454742070862,-0.454656681344,-0.454571287647,-0.454485889772,-0.454400487719,-0.45431508149,-0.454229671084,-0.454144256504,-0.454058837749,-0.45397341482,-0.453887987718,-0.453802556445,-0.453717121,-0.453631681385,-0.4535462376,-0.453460789646,-0.453375337524,-0.453289881235,-0.453204420779,-0.453118956157,-0.453033487371,-0.45294801442,-0.452862537306,-0.452777056029,-0.452691570591,-0.452606080991,-0.452520587231,-0.452435089312,-0.452349587234,-0.452264080998,-0.452178570605,-0.452093056055,-0.45200753735,-0.451922014491,-0.451836487477,-0.45175095631,-0.451665420991,-0.45157988152,-0.451494337898,-0.451408790127,-0.451323238206,-0.451237682136,-0.451152121919,-0.451066557555,-0.450980989045,-0.45089541639,-0.45080983959,-0.450724258646,-0.450638673559,-0.45055308433,-0.45046749096,-0.450381893449,-0.450296291799,-0.450210686009,-0.450125076081,-0.450039462016,-0.449953843814,-0.449868221476,-0.449782595003,-0.449696964395,-0.449611329655,-0.449525690781,-0.449440047776,-0.449354400639,-0.449268749372,-0.449183093975,-0.44909743445,-0.449011770796,-0.448926103016,-0.448840431109,-0.448754755076,-0.448669074918,-0.448583390637,-0.448497702232,-0.448412009704,-0.448326313055,-0.448240612285,-0.448154907395,-0.448069198386,-0.447983485257,-0.447897768012,-0.447812046649,-0.44772632117,-0.447640591575,-0.447554857866,-0.447469120043,-0.447383378108,-0.447297632059,-0.4472118819,-0.447126127629,-0.447040369249,-0.44695460676,-0.446868840162,-0.446783069457,-0.446697294645,-0.446611515728,-0.446525732705,-0.446439945577,-0.446354154346,-0.446268359013,-0.446182559577,-0.44609675604,-0.446010948403,-0.445925136666,-0.44583932083,-0.445753500896,-0.445667676865,-0.445581848737,-0.445496016514,-0.445410180196,-0.445324339783,-0.445238495278,-0.44515264668,-0.44506679399,-0.444980937209,-0.444895076338,-0.444809211377,-0.444723342328,-0.444637469191,-0.444551591967,-0.444465710657,-0.444379825262,-0.444293935782,-0.444208042218,-0.44412214457,-0.444036242841,-0.44395033703,-0.443864427139,-0.443778513167,-0.443692595117,-0.443606672988,-0.443520746781,-0.443434816498,-0.443348882139,-0.443262943705,-0.443177001196,-0.443091054614,-0.443005103959,-0.442919149232,-0.442833190433,-0.442747227565,-0.442661260626,-0.442575289619,-0.442489314544,-0.442403335401,-0.442317352192,-0.442231364918,-0.442145373578,-0.442059378174,-0.441973378707,-0.441887375178,-0.441801367586,-0.441715355934,-0.441629340222,-0.44154332045,-0.44145729662,-0.441371268732,-0.441285236787,-0.441199200785,-0.441113160729,-0.441027116617,-0.440941068452,-0.440855016234,-0.440768959964,-0.440682899642,-0.440596835269,-0.440510766847,-0.440424694375,-0.440338617856,-0.440252537288,-0.440166452675,-0.440080364015,-0.43999427131,-0.43990817456,-0.439822073767,-0.439735968932,-0.439649860054,-0.439563747135,-0.439477630176,-0.439391509178,-0.43930538414,-0.439219255065,-0.439133121952,-0.439046984803,-0.438960843618,-0.438874698398,-0.438788549145,-0.438702395858,-0.438616238539,-0.438530077188,-0.438443911806,-0.438357742394,-0.438271568952,-0.438185391483,-0.438099209985,-0.438013024461,-0.43792683491,-0.437840641334,-0.437754443734,-0.43766824211,-0.437582036463,-0.437495826794,-0.437409613103,-0.437323395392,-0.437237173661,-0.437150947911,-0.437064718143,-0.436978484357,-0.436892246555,-0.436806004737,-0.436719758904,-0.436633509057,-0.436547255196,-0.436460997323,-0.436374735438,-0.436288469542,-0.436202199635,-0.436115925719,-0.436029647794,-0.435943365862,-0.435857079922,-0.435770789976,-0.435684496025,-0.435598198069,-0.435511896108,-0.435425590145,-0.43533928018,-0.435252966213,-0.435166648245,-0.435080326277,-0.43499400031,-0.434907670344,-0.434821336381,-0.434734998422,-0.434648656466,-0.434562310515,-0.43447596057,-0.434389606631,-0.434303248699,-0.434216886775,-0.43413052086,-0.434044150955,-0.43395777706,-0.433871399176,-0.433785017304,-0.433698631444,-0.433612241599,-0.433525847767,-0.433439449951,-0.433353048151,-0.433266642367,-0.433180232601,-0.433093818853,-0.433007401124,-0.432920979416,-0.432834553727,-0.432748124061,-0.432661690416,-0.432575252795,-0.432488811198,-0.432402365625,-0.432315916077,-0.432229462556,-0.432143005062,-0.432056543596,-0.431970078158,-0.43188360875,-0.431797135372,-0.431710658025,-0.43162417671,-0.431537691427,-0.431451202178,-0.431364708963,-0.431278211783,-0.431191710639,-0.431105205531,-0.431018696461,-0.430932183429,-0.430845666436,-0.430759145483,-0.43067262057,-0.430586091698,-0.430499558869,-0.430413022083,-0.43032648134,-0.430239936642,-0.430153387989,-0.430066835383,-0.429980278823,-0.429893718311,-0.429807153847,-0.429720585433,-0.429634013069,-0.429547436756,-0.429460856494,-0.429374272285,-0.42928768413,-0.429201092028,-0.429114495981,-0.42902789599,-0.428941292055,-0.428854684178,-0.428768072359,-0.428681456598,-0.428594836897,-0.428508213257,-0.428421585678,-0.428334954161,-0.428248318707,-0.428161679316,-0.42807503599,-0.427988388729,-0.427901737534,-0.427815082406,-0.427728423345,-0.427641760353,-0.42755509343,-0.427468422577,-0.427381747795,-0.427295069085,-0.427208386447,-0.427121699882,-0.427035009391,-0.426948314975,-0.426861616634,-0.42677491437,-0.426688208183,-0.426601498074,-0.426514784044,-0.426428066093,-0.426341344223,-0.426254618434,-0.426167888727,-0.426081155102,-0.425994417562,-0.425907676105,-0.425820930734,-0.425734181448,-0.42564742825,-0.425560671138,-0.425473910116,-0.425387145182,-0.425300376338,-0.425213603585,-0.425126826924,-0.425040046355,-0.424953261879,-0.424866473496,-0.424779681209,-0.424692885017,-0.424606084922,-0.424519280923,-0.424432473023,-0.424345661221,-0.424258845519,-0.424172025917,-0.424085202416,-0.423998375017,-0.42391154372,-0.423824708528,-0.423737869439,-0.423651026456,-0.423564179578,-0.423477328807,-0.423390474144,-0.423303615589,-0.423216753143,-0.423129886807,-0.423043016581,-0.422956142467,-0.422869264466,-0.422782382577,-0.422695496802,-0.422608607142,-0.422521713598,-0.422434816169,-0.422347914858,-0.422261009665,-0.42217410059,-0.422087187635,-0.4220002708,-0.421913350086,-0.421826425494,-0.421739497024,-0.421652564679,-0.421565628457,-0.42147868836,-0.42139174439,-0.421304796545,-0.421217844829,-0.42113088924,-0.421043929781,-0.420956966452,-0.420869999253,-0.420783028186,-0.42069605325,-0.420609074448,-0.42052209178,-0.420435105247,-0.420348114849,-0.420261120587,-0.420174122462,-0.420087120475,-0.420000114627,-0.419913104918,-0.419826091349,-0.419739073922,-0.419652052636,-0.419565027493,-0.419477998493,-0.419390965638,-0.419303928928,-0.419216888363,-0.419129843945,-0.419042795675,-0.418955743553,-0.41886868758,-0.418781627757,-0.418694564084,-0.418607496563,-0.418520425194,-0.418433349978,-0.418346270916,-0.418259188009,-0.418172101257,-0.418085010662,-0.417997916223,-0.417910817942,-0.41782371582,-0.417736609858,-0.417649500055,-0.417562386414,-0.417475268935,-0.417388147618,-0.417301022464,-0.417213893475,-0.417126760651,-0.417039623993,-0.416952483502,-0.416865339178,-0.416778191022,-0.416691039035,-0.416603883218,-0.416516723572,-0.416429560098,-0.416342392795,-0.416255221666,-0.41616804671,-0.41608086793,-0.415993685324,-0.415906498895,-0.415819308643,-0.415732114569,-0.415644916674,-0.415557714958,-0.415470509422,-0.415383300068,-0.415296086895,-0.415208869905,-0.415121649098,-0.415034424476,-0.414947196039,-0.414859963788,-0.414772727723,-0.414685487846,-0.414598244157,-0.414510996658,-0.414423745348,-0.414336490229,-0.414249231301,-0.414161968566,-0.414074702024,-0.413987431676,-0.413900157523,-0.413812879565,-0.413725597803,-0.413638312238,-0.413551022872,-0.413463729704,-0.413376432736,-0.413289131968,-0.413201827401,-0.413114519036,-0.413027206874,-0.412939890915,-0.412852571161,-0.412765247612,-0.412677920268,-0.412590589132,-0.412503254203,-0.412415915483,-0.412328572971,-0.41224122667,-0.412153876579,-0.4120665227,-0.411979165034,-0.41189180358,-0.41180443834,-0.411717069316,-0.411629696507,-0.411542319914,-0.411454939538,-0.411367555381,-0.411280167442,-0.411192775723,-0.411105380224,-0.411017980946,-0.410930577891,-0.410843171058,-0.410755760449,-0.410668346064,-0.410580927905,-0.410493505971,-0.410406080264,-0.410318650785,-0.410231217535,-0.410143780514,-0.410056339722,-0.409968895162,-0.409881446833,-0.409793994737,-0.409706538874,-0.409619079245,-0.409531615851,-0.409444148692,-0.40935667777,-0.409269203086,-0.409181724639,-0.409094242431,-0.409006756463,-0.408919266736,-0.40883177325,-0.408744276005,-0.408656775004,-0.408569270247,-0.408481761734,-0.408394249466,-0.408306733445,-0.40821921367,-0.408131690143,-0.408044162865,-0.407956631836,-0.407869097057,-0.407781558529,-0.407694016253,-0.40760647023,-0.40751892046,-0.407431366944,-0.407343809683,-0.407256248677,-0.407168683929,-0.407081115438,-0.406993543204,-0.40690596723,-0.406818387516,-0.406730804063,-0.40664321687,-0.40655562594,-0.406468031273,-0.40638043287,-0.406292830732,-0.406205224859,-0.406117615252,-0.406030001912,-0.40594238484,-0.405854764037,-0.405767139503,-0.40567951124,-0.405591879248,-0.405504243527,-0.405416604079,-0.405328960905,-0.405241314005,-0.40515366338,-0.405066009031,-0.404978350959,-0.404890689164,-0.404803023648,-0.40471535441,-0.404627681453,-0.404540004777,-0.404452324382,-0.404364640269,-0.404276952439,-0.404189260894,-0.404101565633,-0.404013866658,-0.403926163969,-0.403838457568,-0.403750747454,-0.403663033629,-0.403575316094,-0.403487594849,-0.403399869896,-0.403312141235,-0.403224408866,-0.403136672791,-0.40304893301,-0.402961189525,-0.402873442336,-0.402785691444,-0.402697936849,-0.402610178553,-0.402522416556,-0.402434650859,-0.402346881464,-0.402259108369,-0.402171331578,-0.40208355109,-0.401995766905,-0.401907979026,-0.401820187453,-0.401732392186,-0.401644593226,-0.401556790575,-0.401468984233,-0.4013811742,-0.401293360478,-0.401205543067,-0.401117721969,-0.401029897184,-0.400942068712,-0.400854236555,-0.400766400714,-0.400678561188,-0.40059071798,-0.40050287109,-0.400415020518,-0.400327166266,-0.400239308334,-0.400151446723,-0.400063581434,-0.399975712468,-0.399887839825,-0.399799963506,-0.399712083513,-0.399624199846,-0.399536312505,-0.399448421492,-0.399360526807,-0.399272628452,-0.399184726426,-0.399096820731,-0.399008911368,-0.398920998337,-0.398833081639,-0.398745161276,-0.398657237247,-0.398569309554,-0.398481378197,-0.398393443177,-0.398305504496,-0.398217562153,-0.39812961615,-0.398041666488,-0.397953713167,-0.397865756188,-0.397777795552,-0.397689831259,-0.397601863311,-0.397513891709,-0.397425916452,-0.397337937543,-0.397249954981,-0.397161968768,-0.397073978904,-0.39698598539,-0.396897988228,-0.396809987417,-0.396721982958,-0.396633974854,-0.396545963103,-0.396457947707,-0.396369928668,-0.396281905985,-0.396193879659,-0.396105849692,-0.396017816083,-0.395929778835,-0.395841737947,-0.395753693421,-0.395665645257,-0.395577593457,-0.39548953802,-0.395401478948,-0.395313416241,-0.395225349901,-0.395137279928,-0.395049206323,-0.394961129087,-0.394873048221,-0.394784963724,-0.394696875599,-0.394608783847,-0.394520688466,-0.39443258946,-0.394344486828,-0.394256380571,-0.394168270691,-0.394080157187,-0.393992040061,-0.393903919314,-0.393815794945,-0.393727666957,-0.39363953535,-0.393551400125,-0.393463261282,-0.393375118823,-0.393286972747,-0.393198823057,-0.393110669753,-0.393022512835,-0.392934352304,-0.392846188162,-0.392758020409,-0.392669849046,-0.392581674073,-0.392493495492,-0.392405313303,-0.392317127507,-0.392228938105,-0.392140745098,-0.392052548486,-0.391964348271,-0.391876144453,-0.391787937033,-0.391699726011,-0.391611511389,-0.391523293168,-0.391435071348,-0.391346845929,-0.391258616914,-0.391170384302,-0.391082148095,-0.390993908293,-0.390905664897,-0.390817417908,-0.390729167326,-0.390640913153,-0.39055265539,-0.390464394036,-0.390376129094,-0.390287860563,-0.390199588444,-0.39011131274,-0.390023033449,-0.389934750573,-0.389846464113,-0.38975817407,-0.389669880444,-0.389581583236,-0.389493282448,-0.389404978079,-0.389316670131,-0.389228358604,-0.3891400435,-0.389051724819,-0.388963402562,-0.388875076729,-0.388786747322,-0.388698414342,-0.388610077788,-0.388521737663,-0.388433393966,-0.388345046699,-0.388256695862,-0.388168341457,-0.388079983483,-0.387991621943,-0.387903256836,-0.387814888164,-0.387726515926,-0.387638140125,-0.387549760761,-0.387461377835,-0.387372991347,-0.387284601299,-0.38719620769,-0.387107810523,-0.387019409797,-0.386931005514,-0.386842597675,-0.38675418628,-0.386665771329,-0.386577352825,-0.386488930767,-0.386400505157,-0.386312075995,-0.386223643282,-0.386135207019,-0.386046767207,-0.385958323846,-0.385869876938,-0.385781426482,-0.385692972481,-0.385604514935,-0.385516053844,-0.38542758921,-0.385339121032,-0.385250649313,-0.385162174053,-0.385073695252,-0.384985212912,-0.384896727034,-0.384808237617,-0.384719744663,-0.384631248173,-0.384542748148,-0.384454244587,-0.384365737494,-0.384277226867,-0.384188712707,-0.384100195017,-0.384011673796,-0.383923149045,-0.383834620765,-0.383746088957,-0.383657553622,-0.38356901476,-0.383480472373,-0.383391926461,-0.383303377024,-0.383214824065,-0.383126267583,-0.383037707579,-0.382949144055,-0.382860577011,-0.382772006447,-0.382683432365,-0.382594854766,-0.382506273649,-0.382417689017,-0.38232910087,-0.382240509209,-0.382151914034,-0.382063315346,-0.381974713147,-0.381886107436,-0.381797498215,-0.381708885485,-0.381620269247,-0.3815316495,-0.381443026247,-0.381354399487,-0.381265769222,-0.381177135453,-0.38108849818,-0.380999857404,-0.380911213126,-0.380822565346,-0.380733914067,-0.380645259287,-0.380556601009,-0.380467939233,-0.380379273959,-0.38029060519,-0.380201932924,-0.380113257164,-0.38002457791,-0.379935895163,-0.379847208924,-0.379758519193,-0.379669825972,-0.37958112926,-0.37949242906,-0.379403725372,-0.379315018196,-0.379226307533,-0.379137593385,-0.379048875752,-0.378960154634,-0.378871430034,-0.37878270195,-0.378693970385,-0.37860523534,-0.378516496814,-0.378427754809,-0.378339009325,-0.378250260364,-0.378161507926,-0.378072752012,-0.377983992623,-0.37789522976,-0.377806463423,-0.377717693613,-0.377628920332,-0.377540143579,-0.377451363356,-0.377362579664,-0.377273792503,-0.377185001874,-0.377096207778,-0.377007410216,-0.376918609189,-0.376829804697,-0.376740996741,-0.376652185323,-0.376563370442,-0.3764745521,-0.376385730298,-0.376296905036,-0.376208076315,-0.376119244136,-0.3760304085,-0.375941569407,-0.375852726859,-0.375763880856,-0.375675031399,-0.375586178489,-0.375497322127,-0.375408462313,-0.375319599049,-0.375230732334,-0.375141862171,-0.37505298856,-0.374964111501,-0.374875230995,-0.374786347044,-0.374697459647,-0.374608568807,-0.374519674523,-0.374430776797,-0.374341875629,-0.37425297102,-0.374164062971,-0.374075151483,-0.373986236557,-0.373897318193,-0.373808396392,-0.373719471155,-0.373630542483,-0.373541610377,-0.373452674837,-0.373363735864,-0.37327479346,-0.373185847624,-0.373096898359,-0.373007945663,-0.37291898954,-0.372830029988,-0.37274106701,-0.372652100605,-0.372563130775,-0.37247415752,-0.372385180842,-0.372296200741,-0.372207217218,-0.372118230273,-0.372029239908,-0.371940246124,-0.37185124892,-0.371762248299,-0.371673244261,-0.371584236806,-0.371495225936,-0.371406211651,-0.371317193952,-0.37122817284,-0.371139148316,-0.37105012038,-0.370961089034,-0.370872054278,-0.370783016113,-0.37069397454,-0.370604929559,-0.370515881172,-0.370426829379,-0.370337774182,-0.37024871558,-0.370159653575,-0.370070588168,-0.369981519359,-0.369892447149,-0.369803371539,-0.36971429253,-0.369625210123,-0.369536124318,-0.369447035117,-0.36935794252,-0.369268846527,-0.369179747141,-0.369090644361,-0.369001538188,-0.368912428624,-0.368823315668,-0.368734199323,-0.368645079588,-0.368555956464,-0.368466829953,-0.368377700055,-0.368288566771,-0.368199430102,-0.368110290049,-0.368021146612,-0.367931999792,-0.36784284959,-0.367753696007,-0.367664539043,-0.3675753787,-0.367486214979,-0.367397047879,-0.367307877403,-0.36721870355,-0.367129526322,-0.36704034572,-0.366951161743,-0.366861974394,-0.366772783673,-0.36668358958,-0.366594392117,-0.366505191284,-0.366415987082,-0.366326779513,-0.366237568576,-0.366148354272,-0.366059136604,-0.36596991557,-0.365880691173,-0.365791463412,-0.365702232289,-0.365612997805,-0.36552375996,-0.365434518755,-0.365345274191,-0.365256026269,-0.36516677499,-0.365077520354,-0.364988262363,-0.364899001016,-0.364809736316,-0.364720468262,-0.364631196856,-0.364541922098,-0.364452643989,-0.364363362531,-0.364274077723,-0.364184789567,-0.364095498064,-0.364006203213,-0.363916905017,-0.363827603476,-0.363738298591,-0.363648990362,-0.36355967879,-0.363470363877,-0.363381045623,-0.363291724029,-0.363202399096,-0.363113070824,-0.363023739214,-0.362934404268,-0.362845065985,-0.362755724367,-0.362666379415,-0.36257703113,-0.362487679511,-0.362398324561,-0.36230896628,-0.362219604668,-0.362130239727,-0.362040871458,-0.36195149986,-0.361862124936,-0.361772746685,-0.361683365109,-0.361593980209,-0.361504591985,-0.361415200438,-0.361325805568,-0.361236407378,-0.361147005867,-0.361057601037,-0.360968192888,-0.360878781421,-0.360789366637,-0.360699948537,-0.360610527121,-0.36052110239,-0.360431674346,-0.360342242988,-0.360252808319,-0.360163370338,-0.360073929046,-0.359984484445,-0.359895036535,-0.359805585317,-0.359716130791,-0.359626672959,-0.359537211822,-0.35944774738,-0.359358279633,-0.359268808584,-0.359179334232,-0.359089856579,-0.359000375625,-0.358910891371,-0.358821403819,-0.358731912968,-0.358642418819,-0.358552921374,-0.358463420634,-0.358373916598,-0.358284409268,-0.358194898645,-0.35810538473,-0.358015867523,-0.357926347025,-0.357836823237,-0.35774729616,-0.357657765795,-0.357568232142,-0.357478695203,-0.357389154977,-0.357299611467,-0.357210064672,-0.357120514594,-0.357030961233,-0.356941404591,-0.356851844668,-0.356762281464,-0.356672714982,-0.35658314522,-0.356493572182,-0.356403995866,-0.356314416274,-0.356224833408,-0.356135247267,-0.356045657852,-0.355956065165,-0.355866469205,-0.355776869975,-0.355687267475,-0.355597661705,-0.355508052666,-0.35541844036,-0.355328824787,-0.355239205948,-0.355149583843,-0.355059958474,-0.354970329842,-0.354880697946,-0.354791062789,-0.35470142437,-0.354611782691,-0.354522137753,-0.354432489556,-0.354342838101,-0.354253183389,-0.35416352542,-0.354073864197,-0.353984199719,-0.353894531987,-0.353804861002,-0.353715186765,-0.353625509277,-0.353535828538,-0.353446144549,-0.353356457312,-0.353266766827,-0.353177073095,-0.353087376116,-0.352997675892,-0.352907972424,-0.352818265711,-0.352728555755,-0.352638842557,-0.352549126118,-0.352459406438,-0.352369683519,-0.35227995736,-0.352190227964,-0.35210049533,-0.35201075946,-0.351921020354,-0.351831278013,-0.351741532439,-0.351651783631,-0.351562031591,-0.35147227632,-0.351382517818,-0.351292756086,-0.351202991125,-0.351113222935,-0.351023451519,-0.350933676876,-0.350843899007,-0.350754117913,-0.350664333596,-0.350574546055,-0.350484755292,-0.350394961307,-0.350305164101,-0.350215363675,-0.350125560031,-0.350035753168,-0.349945943087,-0.34985612979,-0.349766313277,-0.349676493549,-0.349586670607,-0.349496844452,-0.349407015084,-0.349317182505,-0.349227346714,-0.349137507714,-0.349047665505,-0.348957820087,-0.348867971461,-0.348778119629,-0.348688264591,-0.348598406348,-0.3485085449,-0.348418680249,-0.348328812396,-0.348238941341,-0.348149067085,-0.348059189629,-0.347969308973,-0.347879425119,-0.347789538067,-0.347699647819,-0.347609754375,-0.347519857735,-0.347429957901,-0.347340054874,-0.347250148654,-0.347160239242,-0.347070326639,-0.346980410846,-0.346890491863,-0.346800569692,-0.346710644334,-0.346620715788,-0.346530784056,-0.346440849139,-0.346350911038,-0.346260969753,-0.346171025285,-0.346081077636,-0.345991126805,-0.345901172794,-0.345811215604,-0.345721255235,-0.345631291688,-0.345541324964,-0.345451355064,-0.345361381989,-0.345271405739,-0.345181426316,-0.345091443719,-0.345001457951,-0.344911469012,-0.344821476902,-0.344731481622,-0.344641483174,-0.344551481559,-0.344461476776,-0.344371468826,-0.344281457712,-0.344191443433,-0.34410142599,-0.344011405384,-0.343921381616,-0.343831354687,-0.343741324598,-0.343651291349,-0.343561254941,-0.343471215375,-0.343381172652,-0.343291126773,-0.343201077738,-0.343111025549,-0.343020970206,-0.34293091171,-0.342840850062,-0.342750785262,-0.342660717312,-0.342570646212,-0.342480571964,-0.342390494567,-0.342300414024,-0.342210330333,-0.342120243498,-0.342030153518,-0.341940060393,-0.341849964126,-0.341759864717,-0.341669762166,-0.341579656475,-0.341489547644,-0.341399435674,-0.341309320566,-0.34121920232,-0.341129080939,-0.341038956421,-0.340948828769,-0.340858697983,-0.340768564064,-0.340678427013,-0.34058828683,-0.340498143517,-0.340407997074,-0.340317847501,-0.340227694801,-0.340137538974,-0.340047380019,-0.33995721794,-0.339867052735,-0.339776884407,-0.339686712955,-0.339596538381,-0.339506360686,-0.33941617987,-0.339325995934,-0.339235808879,-0.339145618705,-0.339055425415,-0.338965229008,-0.338875029485,-0.338784826848,-0.338694621096,-0.338604412231,-0.338514200254,-0.338423985165,-0.338333766966,-0.338243545656,-0.338153321238,-0.338063093711,-0.337972863077,-0.337882629336,-0.33779239249,-0.337702152538,-0.337611909483,-0.337521663324,-0.337431414063,-0.337341161701,-0.337250906237,-0.337160647674,-0.337070386011,-0.33698012125,-0.336889853392,-0.336799582437,-0.336709308387,-0.336619031241,-0.336528751001,-0.336438467668,-0.336348181243,-0.336257891726,-0.336167599118,-0.33607730342,-0.335987004633,-0.335896702757,-0.335806397794,-0.335716089745,-0.335625778609,-0.335535464389,-0.335445147085,-0.335354826697,-0.335264503226,-0.335174176674,-0.335083847041,-0.334993514328,-0.334903178536,-0.334812839666,-0.334722497718,-0.334632152693,-0.334541804592,-0.334451453417,-0.334361099167,-0.334270741844,-0.334180381448,-0.33409001798,-0.333999651442,-0.333909281834,-0.333818909156,-0.33372853341,-0.333638154596,-0.333547772716,-0.33345738777,-0.333366999759,-0.333276608683,-0.333186214544,-0.333095817343,-0.333005417079,-0.332915013755,-0.332824607371,-0.332734197927,-0.332643785426,-0.332553369866,-0.33246295125,-0.332372529578,-0.33228210485,-0.332191677069,-0.332101246234,-0.332010812346,-0.331920375407,-0.331829935416,-0.331739492376,-0.331649046286,-0.331558597148,-0.331468144962,-0.33137768973,-0.331287231451,-0.331196770128,-0.33110630576,-0.331015838349,-0.330925367895,-0.330834894399,-0.330744417862,-0.330653938285,-0.330563455669,-0.330472970014,-0.330382481322,-0.330291989593,-0.330201494828,-0.330110997028,-0.330020496193,-0.329929992325,-0.329839485424,-0.329748975492,-0.329658462529,-0.329567946535,-0.329477427512,-0.329386905461,-0.329296380382,-0.329205852276,-0.329115321144,-0.329024786987,-0.328934249806,-0.328843709601,-0.328753166373,-0.328662620124,-0.328572070854,-0.328481518563,-0.328390963253,-0.328300404925,-0.328209843579,-0.328119279216,-0.328028711837,-0.327938141443,-0.327847568035,-0.327756991613,-0.327666412179,-0.327575829733,-0.327485244275,-0.327394655808,-0.327304064331,-0.327213469845,-0.327122872352,-0.327032271853,-0.326941668347,-0.326851061836,-0.32676045232,-0.326669839801,-0.32657922428,-0.326488605756,-0.326397984232,-0.326307359707,-0.326216732183,-0.326126101661,-0.32603546814,-0.325944831623,-0.32585419211,-0.325763549602,-0.325672904099,-0.325582255603,-0.325491604115,-0.325400949634,-0.325310292162,-0.3252196317,-0.325128968249,-0.32503830181,-0.324947632382,-0.324856959968,-0.324766284568,-0.324675606182,-0.324584924813,-0.324494240459,-0.324403553123,-0.324312862805,-0.324222169507,-0.324131473228,-0.324040773969,-0.323950071732,-0.323859366518,-0.323768658326,-0.323677947159,-0.323587233016,-0.3234965159,-0.323405795809,-0.323315072746,-0.323224346711,-0.323133617705,-0.323042885729,-0.322952150783,-0.322861412869,-0.322770671988,-0.322679928139,-0.322589181325,-0.322498431545,-0.322407678801,-0.322316923094,-0.322226164423,-0.322135402791,-0.322044638198,-0.321953870645,-0.321863100133,-0.321772326662,-0.321681550233,-0.321590770847,-0.321499988506,-0.321409203209,-0.321318414958,-0.321227623754,-0.321136829597,-0.321046032488,-0.320955232428,-0.320864429418,-0.320773623458,-0.320682814551,-0.320592002695,-0.320501187893,-0.320410370144,-0.320319549451,-0.320228725813,-0.320137899232,-0.320047069708,-0.319956237242,-0.319865401836,-0.319774563489,-0.319683722203,-0.319592877978,-0.319502030816,-0.319411180717,-0.319320327682,-0.319229471712,-0.319138612808,-0.31904775097,-0.318956886199,-0.318866018497,-0.318775147864,-0.318684274301,-0.318593397808,-0.318502518387,-0.318411636039,-0.318320750763,-0.318229862562,-0.318138971436,-0.318048077385,-0.317957180411,-0.317866280514,-0.317775377696,-0.317684471956,-0.317593563297,-0.317502651718,-0.317411737221,-0.317320819806,-0.317229899475,-0.317138976228,-0.317048050065,-0.316957120989,-0.316866188998,-0.316775254096,-0.316684316281,-0.316593375556,-0.316502431921,-0.316411485376,-0.316320535923,-0.316229583563,-0.316138628296,-0.316047670123,-0.315956709045,-0.315865745062,-0.315774778176,-0.315683808388,-0.315592835698,-0.315501860108,-0.315410881617,-0.315319900227,-0.315228915938,-0.315137928753,-0.31504693867,-0.314955945692,-0.314864949818,-0.314773951051,-0.31468294939,-0.314591944836,-0.314500937391,-0.314409927055,-0.314318913829,-0.314227897714,-0.314136878711,-0.31404585682,-0.313954832043,-0.31386380438,-0.313772773831,-0.313681740399,-0.313590704083,-0.313499664885,-0.313408622805,-0.313317577845,-0.313226530004,-0.313135479285,-0.313044425687,-0.312953369212,-0.31286230986,-0.312771247632,-0.312680182529,-0.312589114553,-0.312498043703,-0.31240696998,-0.312315893386,-0.312224813922,-0.312133731587,-0.312042646384,-0.311951558312,-0.311860467372,-0.311769373567,-0.311678276895,-0.311587177359,-0.311496074958,-0.311404969695,-0.311313861569,-0.311222750581,-0.311131636733,-0.311040520025,-0.310949400458,-0.310858278032,-0.31076715275,-0.31067602461,-0.310584893616,-0.310493759766,-0.310402623062,-0.310311483506,-0.310220341096,-0.310129195836,-0.310038047725,-0.309946896764,-0.309855742954,-0.309764586295,-0.30967342679,-0.309582264438,-0.309491099241,-0.309399931198,-0.309308760312,-0.309217586583,-0.309126410011,-0.309035230598,-0.308944048345,-0.308852863252,-0.308761675319,-0.308670484549,-0.308579290942,-0.308488094498,-0.308396895218,-0.308305693104,-0.308214488156,-0.308123280375,-0.308032069761,-0.307940856317,-0.307849640042,-0.307758420937,-0.307667199003,-0.307575974241,-0.307484746652,-0.307393516237,-0.307302282996,-0.307211046931,-0.307119808042,-0.307028566329,-0.306937321795,-0.306846074439,-0.306754824263,-0.306663571267,-0.306572315453,-0.30648105682,-0.306389795371,-0.306298531105,-0.306207264024,-0.306115994128,-0.306024721418,-0.305933445896,-0.305842167561,-0.305750886415,-0.305659602459,-0.305568315693,-0.305477026119,-0.305385733736,-0.305294438547,-0.305203140551,-0.30511183975,-0.305020536145,-0.304929229735,-0.304837920523,-0.304746608509,-0.304655293694,-0.304563976079,-0.304472655663,-0.30438133245,-0.304290006438,-0.30419867763,-0.304107346025,-0.304016011625,-0.303924674431,-0.303833334443,-0.303741991662,-0.30365064609,-0.303559297726,-0.303467946572,-0.303376592629,-0.303285235897,-0.303193876377,-0.30310251407,-0.303011148978,-0.3029197811,-0.302828410438,-0.302737036992,-0.302645660763,-0.302554281753,-0.302462899962,-0.30237151539,-0.302280128039,-0.30218873791,-0.302097345003,-0.302005949319,-0.301914550859,-0.301823149625,-0.301731745615,-0.301640338833,-0.301548929277,-0.30145751695,-0.301366101852,-0.301274683984,-0.301183263347,-0.301091839941,-0.301000413768,-0.300908984828,-0.300817553122,-0.300726118651,-0.300634681416,-0.300543241417,-0.300451798656,-0.300360353133,-0.30026890485,-0.300177453806,-0.300086000003,-0.299994543442,-0.299903084124,-0.299811622048,-0.299720157217,-0.299628689631,-0.299537219291,-0.299445746198,-0.299354270352,-0.299262791754,-0.299171310406,-0.299079826308,-0.298988339461,-0.298896849865,-0.298805357523,-0.298713862433,-0.298622364598,-0.298530864018,-0.298439360694,-0.298347854627,-0.298256345817,-0.298164834266,-0.298073319974,-0.297981802943,-0.297890283172,-0.297798760664,-0.297707235418,-0.297615707435,-0.297524176717,-0.297432643264,-0.297341107077,-0.297249568157,-0.297158026505,-0.297066482122,-0.296974935008,-0.296883385164,-0.296791832591,-0.29670027729,-0.296608719262,-0.296517158508,-0.296425595028,-0.296334028823,-0.296242459895,-0.296150888244,-0.29605931387,-0.295967736775,-0.29587615696,-0.295784574425,-0.295692989171,-0.295601401199,-0.295509810511,-0.295418217106,-0.295326620985,-0.29523502215,-0.295143420601,-0.295051816339,-0.294960209366,-0.294868599681,-0.294776987285,-0.294685372181,-0.294593754367,-0.294502133846,-0.294410510617,-0.294318884683,-0.294227256043,-0.294135624698,-0.29404399065,-0.2939523539,-0.293860714447,-0.293769072293,-0.293677427439,-0.293585779886,-0.293494129634,-0.293402476684,-0.293310821037,-0.293219162694,-0.293127501656,-0.293035837924,-0.292944171498,-0.29285250238,-0.292760830569,-0.292669156068,-0.292577478876,-0.292485798996,-0.292394116426,-0.292302431169,-0.292210743226,-0.292119052596,-0.292027359281,-0.291935663282,-0.2918439646,-0.291752263235,-0.291660559188,-0.291568852461,-0.291477143053,-0.291385430966,-0.291293716201,-0.291201998759,-0.291110278639,-0.291018555844,-0.290926830374,-0.29083510223,-0.290743371412,-0.290651637922,-0.290559901761,-0.290468162928,-0.290376421426,-0.290284677254,-0.290192930415,-0.290101180908,-0.290009428734,-0.289917673895,-0.289825916391,-0.289734156223,-0.289642393391,-0.289550627898,-0.289458859743,-0.289367088927,-0.289275315451,-0.289183539317,-0.289091760524,-0.288999979074,-0.288908194968,-0.288816408206,-0.288724618789,-0.288632826719,-0.288541031995,-0.288449234619,-0.288357434592,-0.288265631915,-0.288173826587,-0.288082018611,-0.287990207987,-0.287898394715,-0.287806578798,-0.287714760235,-0.287622939027,-0.287531115176,-0.287439288681,-0.287347459545,-0.287255627767,-0.287163793349,-0.287071956291,-0.286980116595,-0.286888274261,-0.286796429289,-0.286704581682,-0.286612731439,-0.286520878562,-0.286429023051,-0.286337164908,-0.286245304132,-0.286153440725,-0.286061574688,-0.285969706022,-0.285877834727,-0.285785960804,-0.285694084255,-0.285602205079,-0.285510323278,-0.285418438853,-0.285326551805,-0.285234662133,-0.28514276984,-0.285050874926,-0.284958977392,-0.284867077238,-0.284775174466,-0.284683269077,-0.284591361071,-0.284499450449,-0.284407537211,-0.28431562136,-0.284223702895,-0.284131781818,-0.284039858129,-0.283947931829,-0.283856002919,-0.2837640714,-0.283672137273,-0.283580200538,-0.283488261197,-0.283396319249,-0.283304374697,-0.283212427541,-0.283120477782,-0.28302852542,-0.282936570457,-0.282844612893,-0.282752652729,-0.282660689967,-0.282568724606,-0.282476756647,-0.282384786093,-0.282292812942,-0.282200837197,-0.282108858858,-0.282016877926,-0.281924894402,-0.281832908286,-0.28174091958,-0.281648928284,-0.281556934399,-0.281464937926,-0.281372938866,-0.281280937219,-0.281188932988,-0.281096926171,-0.281004916771,-0.280912904788,-0.280820890222,-0.280728873076,-0.280636853349,-0.280544831042,-0.280452806157,-0.280360778694,-0.280268748654,-0.280176716038,-0.280084680846,-0.27999264308,-0.279900602741,-0.279808559828,-0.279716514344,-0.279624466288,-0.279532415663,-0.279440362467,-0.279348306704,-0.279256248372,-0.279164187474,-0.27907212401,-0.27898005798,-0.278887989387,-0.278795918229,-0.278703844509,-0.278611768228,-0.278519689385,-0.278427607982,-0.27833552402,-0.2782434375,-0.278151348422,-0.278059256787,-0.277967162597,-0.277875065852,-0.277782966552,-0.277690864699,-0.277598760293,-0.277506653336,-0.277414543828,-0.277322431771,-0.277230317164,-0.277138200009,-0.277046080306,-0.276953958057,-0.276861833262,-0.276769705923,-0.276677576039,-0.276585443612,-0.276493308643,-0.276401171132,-0.276309031081,-0.27621688849,-0.27612474336,-0.276032595692,-0.275940445487,-0.275848292746,-0.275756137468,-0.275663979657,-0.275571819311,-0.275479656432,-0.275387491021,-0.275295323079,-0.275203152607,-0.275110979605,-0.275018804074,-0.274926626015,-0.274834445429,-0.274742262317,-0.274650076679,-0.274557888517,-0.274465697831,-0.274373504623,-0.274281308892,-0.274189110641,-0.274096909869,-0.274004706577,-0.273912500767,-0.27382029244,-0.273728081595,-0.273635868234,-0.273543652358,-0.273451433968,-0.273359213064,-0.273266989648,-0.27317476372,-0.273082535281,-0.272990304331,-0.272898070873,-0.272805834906,-0.272713596431,-0.27262135545,-0.272529111963,-0.272436865971,-0.272344617474,-0.272252366475,-0.272160112972,-0.272067856969,-0.271975598464,-0.271883337459,-0.271791073956,-0.271698807954,-0.271606539455,-0.271514268459,-0.271421994967,-0.271329718981,-0.2712374405,-0.271145159527,-0.271052876061,-0.270960590104,-0.270868301656,-0.270776010718,-0.270683717291,-0.270591421377,-0.270499122975,-0.270406822087,-0.270314518713,-0.270222212854,-0.270129904512,-0.270037593687,-0.269945280379,-0.269852964591,-0.269760646322,-0.269668325573,-0.269576002346,-0.26948367664,-0.269391348458,-0.269299017799,-0.269206684665,-0.269114349057,-0.269022010975,-0.26892967042,-0.268837327394,-0.268744981896,-0.268652633928,-0.26856028349,-0.268467930584,-0.268375575211,-0.26828321737,-0.268190857063,-0.268098494292,-0.268006129056,-0.267913761356,-0.267821391194,-0.26772901857,-0.267636643486,-0.267544265941,-0.267451885937,-0.267359503474,-0.267267118554,-0.267174731178,-0.267082341345,-0.266989949058,-0.266897554317,-0.266805157122,-0.266712757475,-0.266620355376,-0.266527950827,-0.266435543828,-0.266343134379,-0.266250722483,-0.266158308139,-0.266065891349,-0.265973472113,-0.265881050432,-0.265788626308,-0.26569619974,-0.26560377073,-0.265511339279,-0.265418905387,-0.265326469056,-0.265234030286,-0.265141589077,-0.265049145432,-0.26495669935,-0.264864250833,-0.264771799882,-0.264679346496,-0.264586890678,-0.264494432428,-0.264401971746,-0.264309508635,-0.264217043093,-0.264124575124,-0.264032104726,-0.263939631901,-0.263847156651,-0.263754678975,-0.263662198875,-0.263569716351,-0.263477231404,-0.263384744036,-0.263292254247,-0.263199762037,-0.263107267409,-0.263014770362,-0.262922270897,-0.262829769016,-0.262737264719,-0.262644758006,-0.26255224888,-0.26245973734,-0.262367223388,-0.262274707024,-0.262182188249,-0.262089667065,-0.261997143471,-0.261904617469,-0.26181208906,-0.261719558244,-0.261627025023,-0.261534489397,-0.261441951366,-0.261349410933,-0.261256868097,-0.26116432286,-0.261071775223,-0.260979225186,-0.260886672749,-0.260794117915,-0.260701560684,-0.260609001056,-0.260516439033,-0.260423874615,-0.260331307804,-0.2602387386,-0.260146167003,-0.260053593015,-0.259961016637,-0.25986843787,-0.259775856714,-0.25968327317,-0.259590687239,-0.259498098922,-0.25940550822,-0.259312915133,-0.259220319663,-0.25912772181,-0.259035121575,-0.258942518959,-0.258849913963,-0.258757306588,-0.258664696834,-0.258572084703,-0.258479470195,-0.258386853311,-0.258294234052,-0.258201612419,-0.258108988413,-0.258016362034,-0.257923733283,-0.257831102162,-0.257738468671,-0.257645832811,-0.257553194582,-0.257460553986,-0.257367911024,-0.257275265696,-0.257182618003,-0.257089967946,-0.256997315526,-0.256904660743,-0.2568120036,-0.256719344096,-0.256626682232,-0.256534018009,-0.256441351428,-0.25634868249,-0.256256011196,-0.256163337546,-0.256070661542,-0.255977983184,-0.255885302473,-0.25579261941,-0.255699933995,-0.255607246231,-0.255514556117,-0.255421863654,-0.255329168844,-0.255236471686,-0.255143772183,-0.255051070334,-0.254958366141,-0.254865659605,-0.254772950725,-0.254680239504,-0.254587525942,-0.25449481004,-0.254402091799,-0.254309371219,-0.254216648301,-0.254123923047,-0.254031195457,-0.253938465532,-0.253845733273,-0.253752998681,-0.253660261756,-0.2535675225,-0.253474780913,-0.253382036996,-0.25328929075,-0.253196542175,-0.253103791274,-0.253011038046,-0.252918282492,-0.252825524613,-0.252732764411,-0.252640001886,-0.252547237038,-0.252454469869,-0.25236170038,-0.25226892857,-0.252176154442,-0.252083377996,-0.251990599233,-0.251897818154,-0.25180503476,-0.25171224905,-0.251619461028,-0.251526670692,-0.251433878044,-0.251341083085,-0.251248285816,-0.251155486238,-0.251062684351,-0.250969880156,-0.250877073654,-0.250784264847,-0.250691453734,-0.250598640317,-0.250505824596,-0.250413006573,-0.250320186248,-0.250227363622,-0.250134538696,-0.250041711471,-0.249948881948,-0.249856050127,-0.24976321601,-0.249670379597,-0.249577540889,-0.249484699886,-0.249391856591,-0.249299011003,-0.249206163124,-0.249113312954,-0.249020460494,-0.248927605746,-0.248834748709,-0.248741889385,-0.248649027775,-0.248556163879,-0.248463297698,-0.248370429234,-0.248277558487,-0.248184685457,-0.248091810146,-0.247998932555,-0.247906052685,-0.247813170535,-0.247720286108,-0.247627399404,-0.247534510423,-0.247441619168,-0.247348725638,-0.247255829834,-0.247162931758,-0.247070031409,-0.24697712879,-0.246884223901,-0.246791316742,-0.246698407315,-0.24660549562,-0.246512581659,-0.246419665431,-0.246326746939,-0.246233826182,-0.246140903162,-0.24604797788,-0.245955050336,-0.245862120531,-0.245769188466,-0.245676254142,-0.245583317561,-0.245490378721,-0.245397437625,-0.245304494274,-0.245211548668,-0.245118600807,-0.245025650694,-0.244932698329,-0.244839743712,-0.244746786844,-0.244653827727,-0.244560866362,-0.244467902748,-0.244374936887,-0.24428196878,-0.244188998427,-0.24409602583,-0.24400305099,-0.243910073906,-0.24381709458,-0.243724113014,-0.243631129207,-0.243538143161,-0.243445154876,-0.243352164353,-0.243259171594,-0.243166176599,-0.243073179368,-0.242980179903,-0.242887178205,-0.242794174274,-0.242701168112,-0.242608159718,-0.242515149095,-0.242422136243,-0.242329121162,-0.242236103854,-0.242143084319,-0.242050062558,-0.241957038573,-0.241864012364,-0.241770983931,-0.241677953276,-0.2415849204,-0.241491885303,-0.241398847986,-0.241305808451,-0.241212766697,-0.241119722726,-0.241026676539,-0.240933628137,-0.24084057752,-0.240747524689,-0.240654469645,-0.240561412389,-0.240468352922,-0.240375291244,-0.240282227358,-0.240189161262,-0.240096092959,-0.240003022449,-0.239909949733,-0.239816874811,-0.239723797685,-0.239630718356,-0.239537636824,-0.239444553091,-0.239351467156,-0.239258379021,-0.239165288687,-0.239072196155,-0.238979101425,-0.238886004499,-0.238792905377,-0.23869980406,-0.238606700549,-0.238513594844,-0.238420486948,-0.238327376859,-0.23823426458,-0.238141150112,-0.238048033454,-0.237954914608,-0.237861793575,-0.237768670356,-0.237675544951,-0.237582417362,-0.237489287588,-0.237396155632,-0.237303021494,-0.237209885174,-0.237116746674,-0.237023605994,-0.236930463136,-0.2368373181,-0.236744170887,-0.236651021498,-0.236557869934,-0.236464716195,-0.236371560283,-0.236278402198,-0.236185241941,-0.236092079513,-0.235998914916,-0.235905748149,-0.235812579213,-0.23571940811,-0.23562623484,-0.235533059405,-0.235439881805,-0.23534670204,-0.235253520112,-0.235160336022,-0.23506714977,-0.234973961358,-0.234880770785,-0.234787578054,-0.234694383165,-0.234601186118,-0.234507986915,-0.234414785556,-0.234321582043,-0.234228376376,-0.234135168556,-0.234041958584,-0.23394874646,-0.233855532186,-0.233762315763,-0.233669097191,-0.233575876471,-0.233482653604,-0.233389428591,-0.233296201432,-0.233202972129,-0.233109740683,-0.233016507094,-0.232923271363,-0.232830033492,-0.23273679348,-0.232643551328,-0.232550307039,-0.232457060612,-0.232363812048,-0.232270561348,-0.232177308513,-0.232084053545,-0.231990796442,-0.231897537208,-0.231804275842,-0.231711012345,-0.231617746719,-0.231524478963,-0.231431209079,-0.231337937069,-0.231244662931,-0.231151386668,-0.231058108281,-0.230964827769,-0.230871545135,-0.230778260378,-0.230684973501,-0.230591684502,-0.230498393385,-0.230405100148,-0.230311804794,-0.230218507323,-0.230125207735,-0.230031906033,-0.229938602216,-0.229845296285,-0.229751988242,-0.229658678087,-0.229565365821,-0.229472051444,-0.229378734959,-0.229285416365,-0.229192095664,-0.229098772856,-0.229005447942,-0.228912120923,-0.2288187918,-0.228725460574,-0.228632127245,-0.228538791815,-0.228445454284,-0.228352114653,-0.228258772924,-0.228165429096,-0.228072083171,-0.22797873515,-0.227885385033,-0.227792032821,-0.227698678516,-0.227605322117,-0.227511963627,-0.227418603045,-0.227325240373,-0.227231875611,-0.227138508761,-0.227045139823,-0.226951768798,-0.226858395687,-0.226765020491,-0.22667164321,-0.226578263846,-0.226484882399,-0.22639149887,-0.22629811326,-0.226204725571,-0.226111335802,-0.226017943954,-0.22592455003,-0.225831154028,-0.225737755951,-0.225644355799,-0.225550953572,-0.225457549273,-0.225364142901,-0.225270734458,-0.225177323944,-0.22508391136,-0.224990496707,-0.224897079986,-0.224803661198,-0.224710240344,-0.224616817424,-0.22452339244,-0.224429965392,-0.22433653628,-0.224243105107,-0.224149671873,-0.224056236578,-0.223962799224,-0.223869359811,-0.223775918341,-0.223682474813,-0.22358902923,-0.223495581591,-0.223402131898,-0.223308680152,-0.223215226353,-0.223121770502,-0.2230283126,-0.222934852648,-0.222841390647,-0.222747926598,-0.222654460502,-0.222560992358,-0.222467522169,-0.222374049935,-0.222280575658,-0.222187099337,-0.222093620973,-0.222000140568,-0.221906658123,-0.221813173638,-0.221719687114,-0.221626198552,-0.221532707953,-0.221439215318,-0.221345720647,-0.221252223942,-0.221158725203,-0.221065224431,-0.220971721627,-0.220878216792,-0.220784709927,-0.220691201032,-0.220597690109,-0.220504177158,-0.22041066218,-0.220317145177,-0.220223626148,-0.220130105095,-0.220036582018,-0.219943056919,-0.219849529799,-0.219756000657,-0.219662469496,-0.219568936315,-0.219475401117,-0.219381863901,-0.219288324668,-0.21919478342,-0.219101240157,-0.21900769488,-0.21891414759,-0.218820598288,-0.218727046974,-0.21863349365,-0.218539938316,-0.218446380974,-0.218352821623,-0.218259260266,-0.218165696902,-0.218072131533,-0.21797856416,-0.217884994783,-0.217791423403,-0.217697850021,-0.217604274638,-0.217510697256,-0.217417117873,-0.217323536493,-0.217229953114,-0.217136367739,-0.217042780369,-0.216949191003,-0.216855599643,-0.216762006289,-0.216668410944,-0.216574813606,-0.216481214278,-0.21638761296,-0.216294009653,-0.216200404358,-0.216106797076,-0.216013187808,-0.215919576553,-0.215825963314,-0.215732348092,-0.215638730886,-0.215545111698,-0.215451490529,-0.21535786738,-0.215264242251,-0.215170615143,-0.215076986058,-0.214983354995,-0.214889721957,-0.214796086943,-0.214702449955,-0.214608810994,-0.21451517006,-0.214421527154,-0.214327882277,-0.21423423543,-0.214140586614,-0.214046935829,-0.213953283078,-0.213859628359,-0.213765971675,-0.213672313026,-0.213578652412,-0.213484989836,-0.213391325297,-0.213297658797,-0.213203990337,-0.213110319916,-0.213016647537,-0.2129229732,-0.212829296905,-0.212735618654,-0.212641938448,-0.212548256288,-0.212454572173,-0.212360886106,-0.212267198087,-0.212173508116,-0.212079816196,-0.211986122326,-0.211892426507,-0.211798728741,-0.211705029028,-0.211611327369,-0.211517623765,-0.211423918217,-0.211330210725,-0.211236501291,-0.211142789916,-0.211049076599,-0.210955361343,-0.210861644147,-0.210767925013,-0.210674203942,-0.210580480935,-0.210486755992,-0.210393029114,-0.210299300302,-0.210205569557,-0.21011183688,-0.210018102272,-0.209924365734,-0.209830627265,-0.209736886868,-0.209643144543,-0.209549400292,-0.209455654114,-0.20936190601,-0.209268155983,-0.209174404032,-0.209080650158,-0.208986894362,-0.208893136645,-0.208799377009,-0.208705615453,-0.208611851978,-0.208518086586,-0.208424319278,-0.208330550053,-0.208236778914,-0.208143005861,-0.208049230894,-0.207955454015,-0.207861675225,-0.207767894524,-0.207674111913,-0.207580327394,-0.207486540966,-0.207392752631,-0.20729896239,-0.207205170243,-0.207111376192,-0.207017580237,-0.20692378238,-0.20682998262,-0.206736180959,-0.206642377398,-0.206548571937,-0.206454764578,-0.206360955321,-0.206267144167,-0.206173331118,-0.206079516173,-0.205985699334,-0.205891880602,-0.205798059977,-0.20570423746,-0.205610413053,-0.205516586756,-0.20542275857,-0.205328928495,-0.205235096533,-0.205141262685,-0.205047426951,-0.204953589332,-0.20485974983,-0.204765908444,-0.204672065176,-0.204578220027,-0.204484372998,-0.204390524089,-0.204296673301,-0.204202820635,-0.204108966093,-0.204015109674,-0.20392125138,-0.203827391212,-0.20373352917,-0.203639665255,-0.203545799469,-0.203451931811,-0.203358062284,-0.203264190887,-0.203170317622,-0.203076442489,-0.20298256549,-0.202888686625,-0.202794805895,-0.202700923302,-0.202607038844,-0.202513152525,-0.202419264344,-0.202325374303,-0.202231482401,-0.202137588641,-0.202043693023,-0.201949795548,-0.201855896217,-0.20176199503,-0.201668091988,-0.201574187093,-0.201480280345,-0.201386371745,-0.201292461294,-0.201198548993,-0.201104634842,-0.201010718843,-0.200916800996,-0.200822881302,-0.200728959763,-0.200635036378,-0.20054111115,-0.200447184078,-0.200353255163,-0.200259324407,-0.20016539181,-0.200071457373,-0.199977521097,-0.199883582983,-0.199789643032,-0.199695701244,-0.199601757621,-0.199507812163,-0.199413864871,-0.199319915747,-0.19922596479,-0.199132012002,-0.199038057383,-0.198944100935,-0.198850142659,-0.198756182554,-0.198662220623,-0.198568256866,-0.198474291283,-0.198380323876,-0.198286354646,-0.198192383593,-0.198098410718,-0.198004436022,-0.197910459507,-0.197816481172,-0.197722501019,-0.197628519048,-0.197534535261,-0.197440549659,-0.197346562241,-0.197252573009,-0.197158581965,-0.197064589108,-0.19697059444,-0.196876597961,-0.196782599672,-0.196688599575,-0.19659459767,-0.196500593958,-0.19640658844,-0.196312581116,-0.196218571988,-0.196124561056,-0.196030548321,-0.195936533785,-0.195842517448,-0.19574849931,-0.195654479373,-0.195560457638,-0.195466434105,-0.195372408776,-0.195278381651,-0.19518435273,-0.195090322016,-0.194996289509,-0.194902255209,-0.194808219117,-0.194714181235,-0.194620141563,-0.194526100103,-0.194432056854,-0.194338011818,-0.194243964996,-0.194149916388,-0.194055865996,-0.19396181382,-0.193867759861,-0.19377370412,-0.193679646598,-0.193585587296,-0.193491526214,-0.193397463354,-0.193303398716,-0.193209332302,-0.193115264111,-0.193021194145,-0.192927122405,-0.192833048892,-0.192738973607,-0.192644896549,-0.192550817721,-0.192456737123,-0.192362654756,-0.192268570621,-0.192174484719,-0.19208039705,-0.191986307615,-0.191892216416,-0.191798123453,-0.191704028728,-0.19160993224,-0.19151583399,-0.191421733981,-0.191327632212,-0.191233528684,-0.191139423398,-0.191045316356,-0.190951207557,-0.190857097004,-0.190762984696,-0.190668870634,-0.19057475482,-0.190480637254,-0.190386517938,-0.190292396871,-0.190198274056,-0.190104149492,-0.19001002318,-0.189915895122,-0.189821765319,-0.18972763377,-0.189633500478,-0.189539365443,-0.189445228665,-0.189351090146,-0.189256949887,-0.189162807888,-0.18906866415,-0.188974518674,-0.188880371462,-0.188786222513,-0.188692071829,-0.18859791941,-0.188503765258,-0.188409609373,-0.188315451757,-0.188221292409,-0.188127131332,-0.188032968525,-0.18793880399,-0.187844637727,-0.187750469738,-0.187656300023,-0.187562128583,-0.187467955419,-0.187373780531,-0.187279603922,-0.187185425591,-0.18709124554,-0.186997063768,-0.186902880278,-0.18680869507,-0.186714508145,-0.186620319504,-0.186526129147,-0.186431937076,-0.186337743291,-0.186243547794,-0.186149350584,-0.186055151663,-0.185960951033,-0.185866748693,-0.185772544644,-0.185678338888,-0.185584131425,-0.185489922257,-0.185395711383,-0.185301498805,-0.185207284524,-0.185113068541,-0.185018850856,-0.18492463147,-0.184830410385,-0.1847361876,-0.184641963118,-0.184547736939,-0.184453509063,-0.184359279491,-0.184265048226,-0.184170815266,-0.184076580613,-0.183982344269,-0.183888106233,-0.183793866507,-0.183699625092,-0.183605381988,-0.183511137197,-0.183416890719,-0.183322642555,-0.183228392705,-0.183134141172,-0.183039887955,-0.182945633056,-0.182851376475,-0.182757118214,-0.182662858272,-0.182568596652,-0.182474333353,-0.182380068377,-0.182285801725,-0.182191533397,-0.182097263395,-0.182002991719,-0.18190871837,-0.181814443348,-0.181720166656,-0.181625888293,-0.181531608261,-0.18143732656,-0.181343043192,-0.181248758156,-0.181154471455,-0.181060183088,-0.180965893058,-0.180871601363,-0.180777308007,-0.180683012988,-0.180588716309,-0.18049441797,-0.180400117972,-0.180305816315,-0.180211513002,-0.180117208031,-0.180022901406,-0.179928593125,-0.179834283191,-0.179739971603,-0.179645658364,-0.179551343473,-0.179457026932,-0.179362708741,-0.179268388902,-0.179174067415,-0.179079744281,-0.1789854195,-0.178891093075,-0.178796765005,-0.178702435292,-0.178608103936,-0.178513770939,-0.178419436301,-0.178325100022,-0.178230762105,-0.178136422549,-0.178042081356,-0.177947738526,-0.177853394061,-0.177759047961,-0.177664700227,-0.17757035086,-0.177475999861,-0.17738164723,-0.177287292969,-0.177192937079,-0.177098579559,-0.177004220412,-0.176909859638,-0.176815497238,-0.176721133212,-0.176626767562,-0.176532400289,-0.176438031393,-0.176343660875,-0.176249288736,-0.176154914977,-0.176060539599,-0.175966162603,-0.175871783989,-0.175777403759,-0.175683021913,-0.175588638452,-0.175494253377,-0.175399866689,-0.175305478389,-0.175211088478,-0.175116696956,-0.175022303824,-0.174927909083,-0.174833512735,-0.17473911478,-0.174644715218,-0.174550314051,-0.17445591128,-0.174361506905,-0.174267100928,-0.174172693348,-0.174078284168,-0.173983873387,-0.173889461008,-0.17379504703,-0.173700631454,-0.173606214282,-0.173511795514,-0.173417375152,-0.173322953195,-0.173228529645,-0.173134104503,-0.173039677769,-0.172945249445,-0.172850819531,-0.172756388029,-0.172661954938,-0.172567520261,-0.172473083997,-0.172378646148,-0.172284206714,-0.172189765697,-0.172095323097,-0.172000878915,-0.171906433152,-0.171811985809,-0.171717536887,-0.171623086386,-0.171528634308,-0.171434180654,-0.171339725423,-0.171245268618,-0.171150810238,-0.171056350285,-0.17096188876,-0.170867425664,-0.170772960997,-0.17067849476,-0.170584026954,-0.170489557581,-0.17039508664,-0.170300614133,-0.170206140061,-0.170111664424,-0.170017187224,-0.169922708461,-0.169828228136,-0.16973374625,-0.169639262803,-0.169544777798,-0.169450291234,-0.169355803112,-0.169261313434,-0.1691668222,-0.169072329411,-0.168977835068,-0.168883339172,-0.168788841724,-0.168694342724,-0.168599842173,-0.168505340073,-0.168410836423,-0.168316331226,-0.168221824482,-0.168127316191,-0.168032806355,-0.167938294975,-0.167843782051,-0.167749267584,-0.167654751575,-0.167560234025,-0.167465714935,-0.167371194305,-0.167276672137,-0.167182148432,-0.16708762319,-0.166993096412,-0.166898568099,-0.166804038252,-0.166709506872,-0.166614973959,-0.166520439515,-0.16642590354,-0.166331366036,-0.166236827003,-0.166142286441,-0.166047744353,-0.165953200738,-0.165858655598,-0.165764108933,-0.165669560745,-0.165575011034,-0.1654804598,-0.165385907046,-0.165291352772,-0.165196796978,-0.165102239666,-0.165007680836,-0.16491312049,-0.164818558628,-0.16472399525,-0.164629430359,-0.164534863954,-0.164440296037,-0.164345726609,-0.16425115567,-0.164156583221,-0.164062009263,-0.163967433797,-0.163872856825,-0.163778278345,-0.163683698361,-0.163589116871,-0.163494533879,-0.163399949383,-0.163305363385,-0.163210775887,-0.163116186888,-0.16302159639,-0.162927004393,-0.162832410899,-0.162737815908,-0.162643219421,-0.162548621439,-0.162454021963,-0.162359420994,-0.162264818533,-0.16217021458,-0.162075609136,-0.161981002202,-0.16188639378,-0.16179178387,-0.161697172472,-0.161602559588,-0.161507945219,-0.161413329366,-0.161318712028,-0.161224093208,-0.161129472906,-0.161034851122,-0.160940227859,-0.160845603116,-0.160750976895,-0.160656349196,-0.160561720021,-0.160467089369,-0.160372457243,-0.160277823642,-0.160183188569,-0.160088552023,-0.159993914005,-0.159899274517,-0.159804633559,-0.159709991132,-0.159615347237,-0.159520701875,-0.159426055047,-0.159331406753,-0.159236756995,-0.159142105773,-0.159047453088,-0.158952798942,-0.158858143334,-0.158763486266,-0.158668827739,-0.158574167753,-0.15847950631,-0.15838484341,-0.158290179054,-0.158195513243,-0.158100845978,-0.15800617726,-0.15791150709,-0.157816835468,-0.157722162395,-0.157627487873,-0.157532811902,-0.157438134483,-0.157343455616,-0.157248775304,-0.157154093546,-0.157059410343,-0.156964725697,-0.156870039608,-0.156775352077,-0.156680663105,-0.156585972693,-0.156491280842,-0.156396587552,-0.156301892824,-0.15620719666,-0.15611249906,-0.156017800025,-0.155923099556,-0.155828397654,-0.15573369432,-0.155638989554,-0.155544283357,-0.155449575731,-0.155354866676,-0.155260156193,-0.155165444282,-0.155070730946,-0.154976016184,-0.154881299997,-0.154786582387,-0.154691863355,-0.1545971429,-0.154502421024,-0.154407697728,-0.154312973013,-0.154218246879,-0.154123519328,-0.154028790361,-0.153934059977,-0.153839328178,-0.153744594966,-0.15364986034,-0.153555124302,-0.153460386852,-0.153365647992,-0.153270907723,-0.153176166044,-0.153081422957,-0.152986678464,-0.152891932564,-0.152797185258,-0.152702436549,-0.152607686435,-0.152512934919,-0.152418182001,-0.152323427682,-0.152228671963,-0.152133914845,-0.152039156328,-0.151944396414,-0.151849635103,-0.151754872397,-0.151660108295,-0.151565342799,-0.151470575911,-0.15137580763,-0.151281037957,-0.151186266894,-0.151091494442,-0.1509967206,-0.150901945371,-0.150807168755,-0.150712390752,-0.150617611364,-0.150522830592,-0.150428048436,-0.150333264897,-0.150238479977,-0.150143693675,-0.150048905994,-0.149954116933,-0.149859326494,-0.149764534677,-0.149669741484,-0.149574946915,-0.149480150972,-0.149385353654,-0.149290554963,-0.1491957549,-0.149100953465,-0.14900615066,-0.148911346486,-0.148816540942,-0.148721734031,-0.148626925753,-0.148532116108,-0.148437305099,-0.148342492725,-0.148247678987,-0.148152863887,-0.148058047424,-0.147963229601,-0.147868410418,-0.147773589876,-0.147678767976,-0.147583944718,-0.147489120103,-0.147394294133,-0.147299466808,-0.147204638129,-0.147109808097,-0.147014976713,-0.146920143977,-0.146825309891,-0.146730474455,-0.146635637671,-0.146540799539,-0.14644596006,-0.146351119234,-0.146256277064,-0.146161433549,-0.146066588691,-0.14597174249,-0.145876894947,-0.145782046064,-0.14568719584,-0.145592344277,-0.145497491376,-0.145402637138,-0.145307781563,-0.145212924653,-0.145118066408,-0.145023206829,-0.144928345916,-0.144833483672,-0.144738620097,-0.144643755191,-0.144548888955,-0.144454021391,-0.144359152499,-0.14426428228,-0.144169410735,-0.144074537865,-0.143979663671,-0.143884788153,-0.143789911312,-0.14369503315,-0.143600153667,-0.143505272865,-0.143410390743,-0.143315507303,-0.143220622545,-0.143125736471,-0.143030849082,-0.142935960378,-0.14284107036,-0.142746179029,-0.142651286386,-0.142556392431,-0.142461497167,-0.142366600593,-0.14227170271,-0.142176803519,-0.142081903022,-0.141987001219,-0.14189209811,-0.141797193698,-0.141702287982,-0.141607380963,-0.141512472643,-0.141417563022,-0.141322652102,-0.141227739882,-0.141132826364,-0.141037911549,-0.140942995437,-0.14084807803,-0.140753159328,-0.140658239333,-0.140563318044,-0.140468395464,-0.140373471592,-0.140278546431,-0.140183619979,-0.14008869224,-0.139993763212,-0.139898832898,-0.139803901298,-0.139708968412,-0.139614034243,-0.13951909879,-0.139424162055,-0.139329224038,-0.139234284741,-0.139139344164,-0.139044402308,-0.138949459173,-0.138854514762,-0.138759569074,-0.138664622111,-0.138569673873,-0.138474724362,-0.138379773578,-0.138284821522,-0.138189868194,-0.138094913597,-0.13799995773,-0.137905000595,-0.137810042192,-0.137715082522,-0.137620121586,-0.137525159386,-0.137430195921,-0.137335231194,-0.137240265204,-0.137145297952,-0.13705032944,-0.136955359668,-0.136860388637,-0.136765416348,-0.136670442802,-0.136575468,-0.136480491942,-0.13638551463,-0.136290536064,-0.136195556246,-0.136100575176,-0.136005592854,-0.135910609283,-0.135815624462,-0.135720638393,-0.135625651076,-0.135530662513,-0.135435672704,-0.13534068165,-0.135245689352,-0.135150695811,-0.135055701028,-0.134960705003,-0.134865707738,-0.134770709233,-0.134675709489,-0.134580708507,-0.134485706288,-0.134390702834,-0.134295698143,-0.134200692219,-0.134105685061,-0.13401067667,-0.133915667047,-0.133820656194,-0.13372564411,-0.133630630797,-0.133535616256,-0.133440600488,-0.133345583493,-0.133250565272,-0.133155545827,-0.133060525157,-0.132965503265,-0.13287048015,-0.132775455814,-0.132680430257,-0.132585403481,-0.132490375487,-0.132395346274,-0.132300315844,-0.132205284199,-0.132110251338,-0.132015217263,-0.131920181974,-0.131825145473,-0.13173010776,-0.131635068837,-0.131540028703,-0.13144498736,-0.131349944809,-0.131254901051,-0.131159856086,-0.131064809916,-0.130969762541,-0.130874713962,-0.13077966418,-0.130684613196,-0.13058956101,-0.130494507625,-0.13039945304,-0.130304397256,-0.130209340275,-0.130114282096,-0.130019222722,-0.129924162153,-0.129829100389,-0.129734037432,-0.129638973283,-0.129543907942,-0.12944884141,-0.129353773688,-0.129258704778,-0.129163634679,-0.129068563393,-0.128973490921,-0.128878417263,-0.12878334242,-0.128688266394,-0.128593189185,-0.128498110794,-0.128403031222,-0.128307950469,-0.128212868537,-0.128117785427,-0.128022701139,-0.127927615674,-0.127832529033,-0.127737441218,-0.127642352228,-0.127547262065,-0.127452170729,-0.127357078222,-0.127261984545,-0.127166889697,-0.127071793681,-0.126976696497,-0.126881598145,-0.126786498628,-0.126691397945,-0.126596296097,-0.126501193086,-0.126406088912,-0.126310983576,-0.126215877079,-0.126120769422,-0.126025660606,-0.125930550631,-0.125835439498,-0.12574032721,-0.125645213765,-0.125550099165,-0.125454983412,-0.125359866505,-0.125264748446,-0.125169629235,-0.125074508874,-0.124979387363,-0.124884264704,-0.124789140897,-0.124694015942,-0.124598889842,-0.124503762596,-0.124408634205,-0.124313504672,-0.124218373995,-0.124123242177,-0.124028109218,-0.123932975119,-0.12383783988,-0.123742703503,-0.123647565989,-0.123552427339,-0.123457287552,-0.123362146631,-0.123267004576,-0.123171861388,-0.123076717068,-0.122981571617,-0.122886425035,-0.122791277323,-0.122696128483,-0.122600978515,-0.12250582742,-0.122410675199,-0.122315521853,-0.122220367383,-0.122125211789,-0.122030055073,-0.121934897235,-0.121839738276,-0.121744578197,-0.121649416999,-0.121554254683,-0.12145909125,-0.1213639267,-0.121268761035,-0.121173594255,-0.121078426361,-0.120983257354,-0.120888087236,-0.120792916006,-0.120697743666,-0.120602570216,-0.120507395658,-0.120412219992,-0.120317043219,-0.120221865341,-0.120126686357,-0.120031506269,-0.119936325078,-0.119841142785,-0.119745959389,-0.119650774894,-0.119555589298,-0.119460402604,-0.119365214811,-0.119270025921,-0.119174835935,-0.119079644854,-0.118984452678,-0.118889259408,-0.118794065045,-0.118698869591,-0.118603673045,-0.11850847541,-0.118413276685,-0.118318076871,-0.11822287597,-0.118127673983,-0.118032470909,-0.117937266751,-0.117842061508,-0.117746855183,-0.117651647775,-0.117556439285,-0.117461229715,-0.117366019066,-0.117270807338,-0.117175594531,-0.117080380648,-0.116985165688,-0.116889949653,-0.116794732544,-0.116699514361,-0.116604295106,-0.116509074778,-0.11641385338,-0.116318630912,-0.116223407374,-0.116128182769,-0.116032957095,-0.115937730356,-0.11584250255,-0.11574727368,-0.115652043746,-0.115556812749,-0.115461580689,-0.115366347569,-0.115271113388,-0.115175878147,-0.115080641848,-0.114985404491,-0.114890166077,-0.114794926607,-0.114699686081,-0.114604444502,-0.114509201869,-0.114413958183,-0.114318713446,-0.114223467658,-0.11412822082,-0.114032972933,-0.113937723998,-0.113842474016,-0.113747222987,-0.113651970913,-0.113556717794,-0.113461463631,-0.113366208425,-0.113270952178,-0.113175694889,-0.113080436559,-0.112985177191,-0.112889916784,-0.112794655339,-0.112699392857,-0.11260412934,-0.112508864787,-0.112413599201,-0.112318332581,-0.112223064928,-0.112127796244,-0.11203252653,-0.111937255786,-0.111841984012,-0.111746711211,-0.111651437383,-0.111556162528,-0.111460886648,-0.111365609743,-0.111270331815,-0.111175052864,-0.111079772891,-0.110984491897,-0.110889209883,-0.11079392685,-0.110698642798,-0.110603357729,-0.110508071643,-0.110412784541,-0.110317496424,-0.110222207294,-0.11012691715,-0.110031625994,-0.109936333827,-0.109841040649,-0.109745746461,-0.109650451265,-0.109555155061,-0.10945985785,-0.109364559632,-0.10926926041,-0.109173960183,-0.109078658952,-0.108983356719,-0.108888053485,-0.108792749249,-0.108697444013,-0.108602137778,-0.108506830545,-0.108411522315,-0.108316213088,-0.108220902865,-0.108125591648,-0.108030279437,-0.107934966233,-0.107839652036,-0.107744336849,-0.107649020671,-0.107553703504,-0.107458385348,-0.107363066204,-0.107267746073,-0.107172424957,-0.107077102855,-0.106981779769,-0.1068864557,-0.106791130648,-0.106695804615,-0.106600477601,-0.106505149607,-0.106409820634,-0.106314490683,-0.106219159755,-0.106123827851,-0.106028494971,-0.105933161116,-0.105837826288,-0.105742490487,-0.105647153713,-0.105551815969,-0.105456477255,-0.105361137571,-0.105265796919,-0.105170455299,-0.105075112713,-0.10497976916,-0.104884424643,-0.104789079162,-0.104693732717,-0.10459838531,-0.104503036942,-0.104407687613,-0.104312337325,-0.104216986077,-0.104121633872,-0.10402628071,-0.103930926591,-0.103835571517,-0.103740215489,-0.103644858507,-0.103549500573,-0.103454141686,-0.103358781849,-0.103263421062,-0.103168059325,-0.10307269664,-0.102977333008,-0.102881968429,-0.102786602905,-0.102691236436,-0.102595869022,-0.102500500666,-0.102405131368,-0.102309761128,-0.102214389948,-0.102119017829,-0.10202364477,-0.101928270774,-0.101832895841,-0.101737519973,-0.101642143168,-0.10154676543,-0.101451386758,-0.101356007154,-0.101260626618,-0.101165245151,-0.101069862755,-0.100974479429,-0.100879095176,-0.100783709995,-0.100688323887,-0.100592936854,-0.100497548897,-0.100402160016,-0.100306770211,-0.100211379485,-0.100115987838,-0.100020595271,-0.0999252017837,-0.0998298073783,-0.0997344120553,-0.0996390158156,-0.0995436186601,-0.0994482205895,-0.0993528216049,-0.099257421707,-0.0991620208967,-0.099066619175,-0.0989712165427,-0.0988758130007,-0.0987804085498,-0.098685003191,-0.098589596925,-0.0984941897529,-0.0983987816754,-0.0983033726934,-0.0982079628079,-0.0981125520196,-0.0980171403296,-0.0979217277385,-0.0978263142474,-0.0977308998571,-0.0976354845685,-0.0975400683825,-0.0974446512998,-0.0973492333215,-0.0972538144484,-0.0971583946813,-0.0970629740212,-0.0969675524688,-0.0968721300252,-0.0967767066912,-0.0966812824676,-0.0965858573553,-0.0964904313553,-0.0963950044683,-0.0962995766952,-0.096204148037,-0.0961087184946,-0.0960132880687,-0.0959178567602,-0.0958224245702,-0.0957269914993,-0.0956315575485,-0.0955361227188,-0.0954406870108,-0.0953452504256,-0.095249812964,-0.0951543746269,-0.0950589354152,-0.0949634953296,-0.0948680543712,-0.0947726125408,-0.0946771698393,-0.0945817262675,-0.0944862818264,-0.0943908365167,-0.0942953903394,-0.0941999432954,-0.0941044953855,-0.0940090466106,-0.0939135969716,-0.0938181464694,-0.0937226951048,-0.0936272428788,-0.0935317897921,-0.0934363358457,-0.0933408810405,-0.0932454253773,-0.093149968857,-0.0930545114805,-0.0929590532487,-0.0928635941624,-0.0927681342225,-0.0926726734299,-0.0925772117855,-0.0924817492901,-0.0923862859447,-0.0922908217501,-0.0921953567071,-0.0920998908167,-0.0920044240798,-0.0919089564971,-0.0918134880697,-0.0917180187983,-0.0916225486839,-0.0915270777273,-0.0914316059294,-0.0913361332911,-0.0912406598132,-0.0911451854967,-0.0910497103424,-0.0909542343511,-0.0908587575239,-0.0907632798615,-0.0906678013648,-0.0905723220347,-0.0904768418721,-0.0903813608779,-0.0902858790529,-0.0901903963979,-0.090094912914,-0.089999428602,-0.0899039434627,-0.089808457497,-0.0897129707058,-0.08961748309,-0.0895219946505,-0.0894265053881,-0.0893310153037,-0.0892355243981,-0.0891400326724,-0.0890445401273,-0.0889490467637,-0.0888535525825,-0.0887580575846,-0.0886625617709,-0.0885670651421,-0.0884715676993,-0.0883760694433,-0.088280570375,-0.0881850704952,-0.0880895698048,-0.0879940683047,-0.0878985659958,-0.0878030628789,-0.087707558955,-0.0876120542249,-0.0875165486895,-0.0874210423496,-0.0873255352062,-0.0872300272601,-0.0871345185122,-0.0870390089634,-0.0869434986145,-0.0868479874665,-0.0867524755202,-0.0866569627765,-0.0865614492363,-0.0864659349003,-0.0863704197697,-0.0862749038451,-0.0861793871275,-0.0860838696177,-0.0859883513167,-0.0858928322253,-0.0857973123444,-0.0857017916749,-0.0856062702176,-0.0855107479735,-0.0854152249433,-0.085319701128,-0.0852241765285,-0.0851286511456,-0.0850331249803,-0.0849375980333,-0.0848420703056,-0.0847465417981,-0.0846510125116,-0.0845554824469,-0.0844599516051,-0.0843644199869,-0.0842688875933,-0.0841733544251,-0.0840778204832,-0.0839822857685,-0.0838867502818,-0.083791214024,-0.0836956769961,-0.0836001391988,-0.0835046006332,-0.0834090612999,-0.0833135212,-0.0832179803343,-0.0831224387036,-0.0830268963089,-0.0829313531511,-0.0828358092309,-0.0827402645494,-0.0826447191073,-0.0825491729056,-0.0824536259451,-0.0823580782266,-0.0822625297512,-0.0821669805197,-0.0820714305328,-0.0819758797916,-0.0818803282969,-0.0817847760496,-0.0816892230505,-0.0815936693005,-0.0814981148006,-0.0814025595515,-0.0813070035542,-0.0812114468096,-0.0811158893185,-0.0810203310817,-0.0809247721003,-0.080829212375,-0.0807336519067,-0.0806380906964,-0.0805425287448,-0.080446966053,-0.0803514026216,-0.0802558384517,-0.0801602735441,-0.0800647078997,-0.0799691415193,-0.0798735744039,-0.0797780065543,-0.0796824379714,-0.0795868686561,-0.0794912986092,-0.0793957278317,-0.0793001563244,-0.0792045840882,-0.0791090111239,-0.0790134374325,-0.0789178630148,-0.0788222878717,-0.0787267120041,-0.0786311354129,-0.0785355580988,-0.078439980063,-0.0783444013061,-0.0782488218291,-0.0781532416328,-0.0780576607182,-0.077962079086,-0.0778664967373,-0.0777709136729,-0.0776753298935,-0.0775797454003,-0.0774841601939,-0.0773885742753,-0.0772929876453,-0.0771974003049,-0.0771018122549,-0.0770062234962,-0.0769106340297,-0.0768150438563,-0.0767194529767,-0.076623861392,-0.076528269103,-0.0764326761105,-0.0763370824155,-0.0762414880189,-0.0761458929214,-0.076050297124,-0.0759547006275,-0.075859103433,-0.0757635055411,-0.0756679069528,-0.075572307669,-0.0754767076906,-0.0753811070184,-0.0752855056533,-0.0751899035962,-0.0750943008479,-0.0749986974094,-0.0749030932816,-0.0748074884652,-0.0747118829613,-0.0746162767706,-0.074520669894,-0.0744250623325,-0.0743294540868,-0.074233845158,-0.0741382355468,-0.0740426252541,-0.0739470142809,-0.073851402628,-0.0737557902962,-0.0736601772865,-0.0735645635997,-0.0734689492367,-0.0733733341984,-0.0732777184857,-0.0731821020994,-0.0730864850405,-0.0729908673097,-0.072895248908,-0.0727996298364,-0.0727040100955,-0.0726083896864,-0.0725127686098,-0.0724171468668,-0.0723215244581,-0.0722259013846,-0.0721302776472,-0.0720346532469,-0.0719390281844,-0.0718434024607,-0.0717477760766,-0.071652149033,-0.0715565213308,-0.0714608929708,-0.0713652639541,-0.0712696342813,-0.0711740039534,-0.0710783729714,-0.070982741336,-0.0708871090481,-0.0707914761086,-0.0706958425185,-0.0706002082785,-0.0705045733896,-0.0704089378526,-0.0703133016685,-0.070217664838,-0.0701220273621,-0.0700263892417,-0.0699307504776,-0.0698351110707,-0.0697394710219,-0.0696438303321,-0.0695481890021,-0.0694525470328,-0.0693569044252,-0.06926126118,-0.0691656172982,-0.0690699727807,-0.0689743276283,-0.0688786818418,-0.0687830354223,-0.0686873883705,-0.0685917406874,-0.0684960923738,-0.0684004434305,-0.0683047938586,-0.0682091436588,-0.0681134928321,-0.0680178413792,-0.0679221893012,-0.0678265365988,-0.067730883273,-0.0676352293246,-0.0675395747545,-0.0674439195637,-0.0673482637529,-0.067252607323,-0.067156950275,-0.0670612926096,-0.0669656343279,-0.0668699754306,-0.0667743159187,-0.066678655793,-0.0665829950544,-0.0664873337038,-0.066391671742,-0.06629600917,-0.0662003459886,-0.0661046821988,-0.0660090178013,-0.065913352797,-0.0658176871869,-0.0657220209718,-0.0656263541526,-0.0655306867302,-0.0654350187054,-0.0653393500792,-0.0652436808524,-0.0651480110259,-0.0650523406005,-0.0649566695772,-0.0648609979569,-0.0647653257403,-0.0646696529285,-0.0645739795222,-0.0644783055224,-0.0643826309299,-0.0642869557456,-0.0641912799704,-0.0640956036051,-0.0639999266507,-0.063904249108,-0.063808570978,-0.0637128922614,-0.0636172129592,-0.0635215330722,-0.0634258526014,-0.0633301715475,-0.0632344899116,-0.0631388076944,-0.0630431248968,-0.0629474415198,-0.0628517575642,-0.0627560730308,-0.0626603879206,-0.0625647022345,-0.0624690159732,-0.0623733291378,-0.062277641729,-0.0621819537478,-0.0620862651951,-0.0619905760716,-0.0618948863784,-0.0617991961162,-0.061703505286,-0.0616078138886,-0.0615121219249,-0.0614164293958,-0.0613207363022,-0.061225042645,-0.0611293484249,-0.061033653643,-0.0609379583001,-0.0608422623971,-0.0607465659348,-0.0606508689141,-0.0605551713359,-0.0604594732012,-0.0603637745107,-0.0602680752653,-0.060172375466,-0.0600766751136,-0.059980974209,-0.059885272753,-0.0597895707466,-0.0596938681907,-0.059598165086,-0.0595024614335,-0.0594067572341,-0.0593110524886,-0.059215347198,-0.059119641363,-0.0590239349847,-0.0589282280638,-0.0588325206012,-0.0587368125979,-0.0586411040547,-0.0585453949724,-0.0584496853521,-0.0583539751944,-0.0582582645004,-0.0581625532709,-0.0580668415068,-0.0579711292089,-0.0578754163782,-0.0577797030155,-0.0576839891217,-0.0575882746977,-0.0574925597444,-0.0573968442626,-0.0573011282532,-0.0572054117171,-0.0571096946552,-0.0570139770683,-0.0569182589574,-0.0568225403233,-0.0567268211669,-0.0566311014891,-0.0565353812907,-0.0564396605727,-0.0563439393359,-0.0562482175812,-0.0561524953095,-0.0560567725216,-0.0559610492185,-0.055865325401,-0.05576960107,-0.0556738762264,-0.055578150871,-0.0554824250048,-0.0553866986286,-0.0552909717432,-0.0551952443497,-0.0550995164488,-0.0550037880415,-0.0549080591285,-0.0548123297109,-0.0547165997894,-0.054620869365,-0.0545251384386,-0.0544294070109,-0.054333675083,-0.0542379426556,-0.0541422097297,-0.0540464763061,-0.0539507423857,-0.0538550079695,-0.0537592730582,-0.0536635376527,-0.053567801754,-0.0534720653629,-0.0533763284804,-0.0532805911071,-0.0531848532442,-0.0530891148924,-0.0529933760526,-0.0528976367257,-0.0528018969125,-0.0527061566141,-0.0526104158311,-0.0525146745646,-0.0524189328154,-0.0523231905843,-0.0522274478723,-0.0521317046803,-0.052035961009,-0.0519402168595,-0.0518444722325,-0.051748727129,-0.0516529815499,-0.0515572354959,-0.051461488968,-0.0513657419672,-0.0512699944941,-0.0511742465499,-0.0510784981352,-0.050982749251,-0.0508869998982,-0.0507912500777,-0.0506954997903,-0.0505997490369,-0.0505039978184,-0.0504082461357,-0.0503124939897,-0.0502167413812,-0.0501209883111,-0.0500252347803,-0.0499294807897,-0.0498337263401,-0.0497379714325,-0.0496422160677,-0.0495464602466,-0.0494507039701,-0.049354947239,-0.0492591900543,-0.0491634324168,-0.0490676743274,-0.048971915787,-0.0488761567964,-0.0487803973566,-0.0486846374684,-0.0485888771327,-0.0484931163504,-0.0483973551224,-0.0483015934495,-0.0482058313326,-0.0481100687726,-0.0480143057704,-0.0479185423269,-0.0478227784429,-0.0477270141193,-0.047631249357,-0.047535484157,-0.0474397185199,-0.0473439524469,-0.0472481859386,-0.0471524189961,-0.0470566516201,-0.0469608838116,-0.0468651155715,-0.0467693469005,-0.0466735777997,-0.0465778082699,-0.0464820383119,-0.0463862679267,-0.0462904971151,-0.046194725878,-0.0460989542163,-0.0460031821309,-0.0459074096226,-0.0458116366924,-0.045715863341,-0.0456200895695,-0.0455243153786,-0.0454285407693,-0.0453327657424,-0.0452369902988,-0.0451412144394,-0.0450454381651,-0.0449496614767,-0.0448538843752,-0.0447581068613,-0.0446623289361,-0.0445665506003,-0.0444707718549,-0.0443749927008,-0.0442792131387,-0.0441834331696,-0.0440876527945,-0.043991872014,-0.0438960908292,-0.0438003092409,-0.0437045272501,-0.0436087448575,-0.043512962064,-0.0434171788706,-0.0433213952781,-0.0432256112874,-0.0431298268994,-0.043034042115,-0.0429382569349,-0.0428424713602,-0.0427466853918,-0.0426508990304,-0.0425551122769,-0.0424593251323,-0.0423635375974,-0.0422677496731,-0.0421719613603,-0.0420761726599,-0.0419803835727,-0.0418845940997,-0.0417888042416,-0.0416930139995,-0.0415972233741,-0.0415014323663,-0.0414056409771,-0.0413098492073,-0.0412140570577,-0.0411182645294,-0.0410224716231,-0.0409266783397,-0.0408308846801,-0.0407350906452,-0.0406392962359,-0.0405435014531,-0.0404477062976,-0.0403519107703,-0.040256114872,-0.0401603186038,-0.0400645219664,-0.0399687249608,-0.0398729275877,-0.0397771298482,-0.039681331743,-0.0395855332731,-0.0394897344394,-0.0393939352426,-0.0392981356838,-0.0392023357637,-0.0391065354833,-0.0390107348435,-0.038914933845,-0.0388191324889,-0.0387233307759,-0.038627528707,-0.0385317262831,-0.038435923505,-0.0383401203736,-0.0382443168897,-0.0381485130544,-0.0380527088683,-0.0379569043325,-0.0378610994479,-0.0377652942152,-0.0376694886353,-0.0375736827093,-0.0374778764378,-0.0373820698219,-0.0372862628624,-0.0371904555601,-0.037094647916,-0.0369988399309,-0.0369030316057,-0.0368072229414,-0.0367114139387,-0.0366156045985,-0.0365197949218,-0.0364239849094,-0.0363281745623,-0.0362323638812,-0.036136552867,-0.0360407415207,-0.0359449298431,-0.0358491178351,-0.0357533054976,-0.0356574928315,-0.0355616798376,-0.0354658665169,-0.0353700528701,-0.0352742388982,-0.0351784246021,-0.0350826099826,-0.0349867950407,-0.0348909797772,-0.034795164193,-0.0346993482889,-0.0346035320659,-0.0345077155248,-0.0344118986665,-0.034316081492,-0.034220264002,-0.0341244461974,-0.0340286280792,-0.0339328096482,-0.0338369909053,-0.0337411718514,-0.0336453524873,-0.033549532814,-0.0334537128323,-0.0333578925431,-0.0332620719473,-0.0331662510457,-0.0330704298393,-0.0329746083289,-0.0328787865154,-0.0327829643997,-0.0326871419827,-0.0325913192652,-0.0324954962481,-0.0323996729324,-0.0323038493188,-0.0322080254083,-0.0321122012018,-0.0320163767,-0.031920551904,-0.0318247268146,-0.0317289014327,-0.0316330757591,-0.0315372497948,-0.0314414235406,-0.0313455969973,-0.031249770166,-0.0311539430474,-0.0310581156424,-0.030962287952,-0.030866459977,-0.0307706317182,-0.0306748031766,-0.0305789743531,-0.0304831452485,-0.0303873158637,-0.0302914861995,-0.030195656257,-0.0300998260369,-0.0300039955401,-0.0299081647675,-0.02981233372,-0.0297165023985,-0.0296206708039,-0.0295248389369,-0.0294290067986,-0.0293331743898,-0.0292373417114,-0.0291415087642,-0.0290456755491,-0.0289498420671,-0.028854008319,-0.0287581743056,-0.028662340028,-0.0285665054868,-0.0284706706831,-0.0283748356177,-0.0282790002914,-0.0281831647053,-0.02808732886,-0.0279914927567,-0.027895656396,-0.0277998197789,-0.0277039829062,-0.027608145779,-0.0275123083979,-0.027416470764,-0.0273206328781,-0.027224794741,-0.0271289563537,-0.027033117717,-0.0269372788319,-0.0268414396991,-0.0267456003196,-0.0266497606943,-0.026553920824,-0.0264580807097,-0.0263622403521,-0.0262663997523,-0.026170558911,-0.0260747178291,-0.0259788765076,-0.0258830349473,-0.025787193149,-0.0256913511138,-0.0255955088423,-0.0254996663357,-0.0254038235946,-0.02530798062,-0.0252121374128,-0.0251162939739,-0.0250204503041,-0.0249246064043,-0.0248287622754,-0.0247329179183,-0.0246370733338,-0.0245412285229,-0.0244453834864,-0.0243495382252,-0.0242536927402,-0.0241578470323,-0.0240620011023,-0.0239661549511,-0.0238703085797,-0.0237744619888,-0.0236786151794,-0.0235827681524,-0.0234869209086,-0.0233910734489,-0.0232952257742,-0.0231993778853,-0.0231035297833,-0.0230076814688,-0.0229118329429,-0.0228159842064,-0.0227201352602,-0.0226242861051,-0.0225284367421,-0.0224325871719,-0.0223367373956,-0.022240887414,-0.022145037228,-0.0220491868384,-0.0219533362461,-0.021857485452,-0.021761634457,-0.021665783262,-0.0215699318679,-0.0214740802755,-0.0213782284857,-0.0212823764994,-0.0211865243174,-0.0210906719408,-0.0209948193702,-0.0208989666067,-0.0208031136511,-0.0207072605043,-0.0206114071671,-0.0205155536405,-0.0204196999253,-0.0203238460224,-0.0202279919327,-0.0201321376571,-0.0200362831964,-0.0199404285515,-0.0198445737234,-0.0197487187128,-0.0196528635207,-0.019557008148,-0.0194611525955,-0.0193652968642,-0.0192694409548,-0.0191735848683,-0.0190777286056,-0.0189818721675,-0.0188860155549,-0.0187901587688,-0.0186943018099,-0.0185984446792,-0.0185025873775,-0.0184067299058,-0.0183108722649,-0.0182150144556,-0.018119156479,-0.0180232983358,-0.0179274400269,-0.0178315815532,-0.0177357229157,-0.0176398641151,-0.0175440051524,-0.0174481460284,-0.017352286744,-0.0172564273001,-0.0171605676976,-0.0170647079374,-0.0169688480203,-0.0168729879473,-0.0167771277191,-0.0166812673368,-0.0165854068011,-0.016489546113,-0.0163936852733,-0.0162978242829,-0.0162019631427,-0.0161061018535,-0.0160102404164,-0.015914378832,-0.0158185171014,-0.0157226552254,-0.0156267932049,-0.0155309310407,-0.0154350687338,-0.015339206285,-0.0152433436952,-0.0151474809653,-0.0150516180961,-0.0149557550886,-0.0148598919437,-0.0147640286621,-0.0146681652449,-0.0145723016928,-0.0144764380067,-0.0143805741876,-0.0142847102364,-0.0141888461538,-0.0140929819408,-0.0139971175982,-0.013901253127,-0.0138053885281,-0.0137095238022,-0.0136136589503,-0.0135177939733,-0.013421928872,-0.0133260636473,-0.0132301983002,-0.0131343328315,-0.013038467242,-0.0129426015327,-0.0128467357044,-0.012750869758,-0.0126550036944,-0.0125591375145,-0.0124632712192,-0.0123674048093,-0.0122715382857,-0.0121756716493,-0.0120798049011,-0.0119839380417,-0.0118880710723,-0.0117922039935,-0.0116963368064,-0.0116004695117,-0.0115046021104,-0.0114087346034,-0.0113128669915,-0.0112169992756,-0.0111211314566,-0.0110252635354,-0.0109293955129,-0.0108335273899,-0.0107376591673,-0.010641790846,-0.0105459224269,-0.0104500539108,-0.0103541852987,-0.0102583165915,-0.0101624477899,-0.0100665788949,-0.00997070990742,-0.00987484082827,-0.00977897165835,-0.00968310239854,-0.00958723304973,-0.00949136361279,-0.00939549408862,-0.00929962447808,-0.00920375478206,-0.00910788500144,-0.00901201513711,-0.00891614518993,-0.00882027516081,-0.00872440505061,-0.00862853486021,-0.00853266459051,-0.00843679424237,-0.00834092381668,-0.00824505331433,-0.00814918273619,-0.00805331208315,-0.00795744135608,-0.00786157055586,-0.00776569968339,-0.00766982873953,-0.00757395772518,-0.0074780866412,-0.00738221548849,-0.00728634426793,-0.00719047298039,-0.00709460162675,-0.00699873020791,-0.00690285872473,-0.0068069871781,-0.00671111556891,-0.00661524389803,-0.00651937216634,-0.00642350037473,-0.00632762852407,-0.00623175661525,-0.00613588464915,-0.00604001262666,-0.00594414054864,-0.00584826841598,-0.00575239622957,-0.00565652399029,-0.00556065169901,-0.00546477935662,-0.005368906964,-0.00527303452202,-0.00517716203158,-0.00508128949356,-0.00498541690882,-0.00488954427826,-0.00479367160276,-0.0046977988832,-0.00460192612045,-0.0045060533154,-0.00441018046894,-0.00431430758194,-0.00421843465528,-0.00412256168984,-0.00402668868652,-0.00393081564618,-0.00383494256971,-0.00373906945799,-0.0036431963119,-0.00354732313232,-0.00345144992014,-0.00335557667623,-0.00325970340148,-0.00316383009676,-0.00306795676297,-0.00297208340097,-0.00287621001166,-0.0027803365959,-0.0026844631546,-0.00258858968861,-0.00249271619884,-0.00239684268615,-0.00230096915143,-0.00220509559556,-0.00210922201942,-0.00201334842389,-0.00191747480986,-0.0018216011782,-0.0017257275298,-0.00162985386553,-0.00153398018629,-0.00143810649294,-0.00134223278637,-0.00124635906747,-0.00115048533711,-0.00105461159618,-0.000958737845554,-0.000862864086114,-0.000766990318743,-0.000671116544322,-0.000575242763732,-0.000479368977855,-0.000383495187572,-0.000287621393764,-0.000191747597311,-9.58737990961e-05,0.0,9.5873799096e-05}; + +}; \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/stb_vorbis.c b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/stb_vorbis.c new file mode 100644 index 0000000..d98b4a8 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/stb_vorbis.c @@ -0,0 +1,5042 @@ +// Ogg Vorbis I audio decoder -- version 0.99996 +// +// Written in April 2007 by Sean Barrett, sponsored by RAD Game Tools. +// +// Placed in the public domain April 2007 by the author: no copyright is +// claimed, and you may use it for any purpose you like. +// +// No warranty for any purpose is expressed or implied by the author (nor +// by RAD Game Tools). Report bugs and send enhancements to the author. +// +// Get the latest version and other information at: +// http://nothings.org/stb_vorbis/ + + +// Todo: +// +// - seeking (note you can seek yourself using the pushdata API) +// +// Limitations: +// +// - floor 0 not supported (used in old ogg vorbis files) +// - lossless sample-truncation at beginning ignored +// - cannot concatenate multiple vorbis streams +// - sample positions are 32-bit, limiting seekable 192Khz +// files to around 6 hours (Ogg supports 64-bit) +// +// All of these limitations may be removed in future versions. + +#include "stb_vorbis.h" + +#ifndef STB_VORBIS_HEADER_ONLY + +// global configuration settings (e.g. set these in the project/makefile), +// or just set them in this file at the top (although ideally the first few +// should be visible when the header file is compiled too, although it's not +// crucial) + +// STB_VORBIS_NO_PUSHDATA_API +// does not compile the code for the various stb_vorbis_*_pushdata() +// functions +// #define STB_VORBIS_NO_PUSHDATA_API + +// STB_VORBIS_NO_PULLDATA_API +// does not compile the code for the non-pushdata APIs +// #define STB_VORBIS_NO_PULLDATA_API + +// STB_VORBIS_NO_STDIO +// does not compile the code for the APIs that use FILE *s internally +// or externally (implied by STB_VORBIS_NO_PULLDATA_API) +// #define STB_VORBIS_NO_STDIO + +// STB_VORBIS_NO_INTEGER_CONVERSION +// does not compile the code for converting audio sample data from +// float to integer (implied by STB_VORBIS_NO_PULLDATA_API) +// #define STB_VORBIS_NO_INTEGER_CONVERSION + +// STB_VORBIS_NO_FAST_SCALED_FLOAT +// does not use a fast float-to-int trick to accelerate float-to-int on +// most platforms which requires endianness be defined correctly. +//#define STB_VORBIS_NO_FAST_SCALED_FLOAT + + +// STB_VORBIS_MAX_CHANNELS [number] +// globally define this to the maximum number of channels you need. +// The spec does not put a restriction on channels except that +// the count is stored in a byte, so 255 is the hard limit. +// Reducing this saves about 16 bytes per value, so using 16 saves +// (255-16)*16 or around 4KB. Plus anything other memory usage +// I forgot to account for. Can probably go as low as 8 (7.1 audio), +// 6 (5.1 audio), or 2 (stereo only). +#ifndef STB_VORBIS_MAX_CHANNELS +#define STB_VORBIS_MAX_CHANNELS 16 // enough for anyone? +#endif + +// STB_VORBIS_PUSHDATA_CRC_COUNT [number] +// after a flush_pushdata(), stb_vorbis begins scanning for the +// next valid page, without backtracking. when it finds something +// that looks like a page, it streams through it and verifies its +// CRC32. Should that validation fail, it keeps scanning. But it's +// possible that _while_ streaming through to check the CRC32 of +// one candidate page, it sees another candidate page. This #define +// determines how many "overlapping" candidate pages it can search +// at once. Note that "real" pages are typically ~4KB to ~8KB, whereas +// garbage pages could be as big as 64KB, but probably average ~16KB. +// So don't hose ourselves by scanning an apparent 64KB page and +// missing a ton of real ones in the interim; so minimum of 2 +#ifndef STB_VORBIS_PUSHDATA_CRC_COUNT +#define STB_VORBIS_PUSHDATA_CRC_COUNT 4 +#endif + +// STB_VORBIS_FAST_HUFFMAN_LENGTH [number] +// sets the log size of the huffman-acceleration table. Maximum +// supported value is 24. with larger numbers, more decodings are O(1), +// but the table size is larger so worse cache missing, so you'll have +// to probe (and try multiple ogg vorbis files) to find the sweet spot. +#ifndef STB_VORBIS_FAST_HUFFMAN_LENGTH +#define STB_VORBIS_FAST_HUFFMAN_LENGTH 10 +#endif + +// STB_VORBIS_FAST_BINARY_LENGTH [number] +// sets the log size of the binary-search acceleration table. this +// is used in similar fashion to the fast-huffman size to set initial +// parameters for the binary search + +// STB_VORBIS_FAST_HUFFMAN_INT +// The fast huffman tables are much more efficient if they can be +// stored as 16-bit results instead of 32-bit results. This restricts +// the codebooks to having only 65535 possible outcomes, though. +// (At least, accelerated by the huffman table.) +#ifndef STB_VORBIS_FAST_HUFFMAN_INT +#define STB_VORBIS_FAST_HUFFMAN_SHORT +#endif + +// STB_VORBIS_NO_HUFFMAN_BINARY_SEARCH +// If the 'fast huffman' search doesn't succeed, then stb_vorbis falls +// back on binary searching for the correct one. This requires storing +// extra tables with the huffman codes in sorted order. Defining this +// symbol trades off space for speed by forcing a linear search in the +// non-fast case, except for "sparse" codebooks. +// #define STB_VORBIS_NO_HUFFMAN_BINARY_SEARCH + +// STB_VORBIS_DIVIDES_IN_RESIDUE +// stb_vorbis precomputes the result of the scalar residue decoding +// that would otherwise require a divide per chunk. you can trade off +// space for time by defining this symbol. +// #define STB_VORBIS_DIVIDES_IN_RESIDUE + +// STB_VORBIS_DIVIDES_IN_CODEBOOK +// vorbis VQ codebooks can be encoded two ways: with every case explicitly +// stored, or with all elements being chosen from a small range of values, +// and all values possible in all elements. By default, stb_vorbis expands +// this latter kind out to look like the former kind for ease of decoding, +// because otherwise an integer divide-per-vector-element is required to +// unpack the index. If you define STB_VORBIS_DIVIDES_IN_CODEBOOK, you can +// trade off storage for speed. +//#define STB_VORBIS_DIVIDES_IN_CODEBOOK + +// STB_VORBIS_CODEBOOK_SHORTS +// The vorbis file format encodes VQ codebook floats as ax+b where a and +// b are floating point per-codebook constants, and x is a 16-bit int. +// Normally, stb_vorbis decodes them to floats rather than leaving them +// as 16-bit ints and computing ax+b while decoding. This is a speed/space +// tradeoff; you can save space by defining this flag. +#ifndef STB_VORBIS_CODEBOOK_SHORTS +#define STB_VORBIS_CODEBOOK_FLOATS +#endif + +// STB_VORBIS_DIVIDE_TABLE +// this replaces small integer divides in the floor decode loop with +// table lookups. made less than 1% difference, so disabled by default. + +// STB_VORBIS_NO_INLINE_DECODE +// disables the inlining of the scalar codebook fast-huffman decode. +// might save a little codespace; useful for debugging +// #define STB_VORBIS_NO_INLINE_DECODE + +// STB_VORBIS_NO_DEFER_FLOOR +// Normally we only decode the floor without synthesizing the actual +// full curve. We can instead synthesize the curve immediately. This +// requires more memory and is very likely slower, so I don't think +// you'd ever want to do it except for debugging. +// #define STB_VORBIS_NO_DEFER_FLOOR + + + + +////////////////////////////////////////////////////////////////////////////// + +#ifdef STB_VORBIS_NO_PULLDATA_API + #define STB_VORBIS_NO_INTEGER_CONVERSION + #define STB_VORBIS_NO_STDIO +#endif + +#if defined(STB_VORBIS_NO_CRT) && !defined(STB_VORBIS_NO_STDIO) + #define STB_VORBIS_NO_STDIO 1 +#endif + +#ifndef STB_VORBIS_NO_INTEGER_CONVERSION +#ifndef STB_VORBIS_NO_FAST_SCALED_FLOAT + + // only need endianness for fast-float-to-int, which we don't + // use for pushdata + + #ifndef STB_VORBIS_BIG_ENDIAN + #define STB_VORBIS_ENDIAN 0 + #else + #define STB_VORBIS_ENDIAN 1 + #endif + +#endif +#endif + + +#ifndef STB_VORBIS_NO_STDIO +#include +#endif + +#ifndef STB_VORBIS_NO_CRT +#include +#include +#include +#include +#if !(defined(__APPLE__) || defined(MACOSX) || defined(macintosh) || defined(Macintosh)) +#include +#endif +#else +#define NULL 0 +#endif + +#ifndef _MSC_VER + #if __GNUC__ + #define __forceinline inline + #else + #define __forceinline + #endif +#endif + +#if STB_VORBIS_MAX_CHANNELS > 256 +#error "Value of STB_VORBIS_MAX_CHANNELS outside of allowed range" +#endif + +#if STB_VORBIS_FAST_HUFFMAN_LENGTH > 24 +#error "Value of STB_VORBIS_FAST_HUFFMAN_LENGTH outside of allowed range" +#endif + + +#define MAX_BLOCKSIZE_LOG 13 // from specification +#define MAX_BLOCKSIZE (1 << MAX_BLOCKSIZE_LOG) + + +typedef unsigned char uint8; +typedef signed char int8; +typedef unsigned short uint16; +typedef signed short int16; +typedef unsigned int uint32; +typedef signed int int32; + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +#ifdef STB_VORBIS_CODEBOOK_FLOATS +typedef float codetype; +#else +typedef uint16 codetype; +#endif + +// @NOTE +// +// Some arrays below are tagged "//varies", which means it's actually +// a variable-sized piece of data, but rather than malloc I assume it's +// small enough it's better to just allocate it all together with the +// main thing +// +// Most of the variables are specified with the smallest size I could pack +// them into. It might give better performance to make them all full-sized +// integers. It should be safe to freely rearrange the structures or change +// the sizes larger--nothing relies on silently truncating etc., nor the +// order of variables. + +#define FAST_HUFFMAN_TABLE_SIZE (1 << STB_VORBIS_FAST_HUFFMAN_LENGTH) +#define FAST_HUFFMAN_TABLE_MASK (FAST_HUFFMAN_TABLE_SIZE - 1) + +typedef struct +{ + int dimensions, entries; + uint8 *codeword_lengths; + float minimum_value; + float delta_value; + uint8 value_bits; + uint8 lookup_type; + uint8 sequence_p; + uint8 sparse; + uint32 lookup_values; + codetype *multiplicands; + uint32 *codewords; + #ifdef STB_VORBIS_FAST_HUFFMAN_SHORT + int16 fast_huffman[FAST_HUFFMAN_TABLE_SIZE]; + #else + int32 fast_huffman[FAST_HUFFMAN_TABLE_SIZE]; + #endif + uint32 *sorted_codewords; + int *sorted_values; + int sorted_entries; +} Codebook; + +typedef struct +{ + uint8 order; + uint16 rate; + uint16 bark_map_size; + uint8 amplitude_bits; + uint8 amplitude_offset; + uint8 number_of_books; + uint8 book_list[16]; // varies +} Floor0; + +typedef struct +{ + uint8 partitions; + uint8 partition_class_list[32]; // varies + uint8 class_dimensions[16]; // varies + uint8 class_subclasses[16]; // varies + uint8 class_masterbooks[16]; // varies + int16 subclass_books[16][8]; // varies + uint16 Xlist[31*8+2]; // varies + uint8 sorted_order[31*8+2]; + uint8 neighbors[31*8+2][2]; + uint8 floor1_multiplier; + uint8 rangebits; + int values; +} Floor1; + +typedef union +{ + Floor0 floor0; + Floor1 floor1; +} Floor; + +typedef struct +{ + uint32 begin, end; + uint32 part_size; + uint8 classifications; + uint8 classbook; + uint8 **classdata; + int16 (*residue_books)[8]; +} Residue; + +typedef struct +{ + uint8 magnitude; + uint8 angle; + uint8 mux; +} MappingChannel; + +typedef struct +{ + uint16 coupling_steps; + MappingChannel *chan; + uint8 submaps; + uint8 submap_floor[15]; // varies + uint8 submap_residue[15]; // varies +} Mapping; + +typedef struct +{ + uint8 blockflag; + uint8 mapping; + uint16 windowtype; + uint16 transformtype; +} Mode; + +typedef struct +{ + uint32 goal_crc; // expected crc if match + int bytes_left; // bytes left in packet + uint32 crc_so_far; // running crc + int bytes_done; // bytes processed in _current_ chunk + uint32 sample_loc; // granule pos encoded in page +} CRCscan; + +typedef struct +{ + uint32 page_start, page_end; + uint32 after_previous_page_start; + uint32 first_decoded_sample; + uint32 last_decoded_sample; +} ProbedPage; + +struct stb_vorbis +{ + // user-accessible info + unsigned int sample_rate; + int channels; + + unsigned int setup_memory_required; + unsigned int temp_memory_required; + unsigned int setup_temp_memory_required; + + // input config +#ifndef STB_VORBIS_NO_STDIO + FILE *f; + uint32 f_start; + int close_on_free; +#endif + + uint8 *stream; + uint8 *stream_start; + uint8 *stream_end; + + uint32 stream_len; + + uint8 push_mode; + + uint32 first_audio_page_offset; + + ProbedPage p_first, p_last; + + // memory management + stb_vorbis_alloc alloc; + int setup_offset; + int temp_offset; + + // run-time results + int eof; + enum STBVorbisError error; + + // user-useful data + + // header info + int blocksize[2]; + int blocksize_0, blocksize_1; + int codebook_count; + Codebook *codebooks; + int floor_count; + uint16 floor_types[64]; // varies + Floor *floor_config; + int residue_count; + uint16 residue_types[64]; // varies + Residue *residue_config; + int mapping_count; + Mapping *mapping; + int mode_count; + Mode mode_config[64]; // varies + + uint32 total_samples; + + // decode buffer + float *channel_buffers[STB_VORBIS_MAX_CHANNELS]; + float *outputs [STB_VORBIS_MAX_CHANNELS]; + + float *previous_window[STB_VORBIS_MAX_CHANNELS]; + int previous_length; + + #ifndef STB_VORBIS_NO_DEFER_FLOOR + int16 *finalY[STB_VORBIS_MAX_CHANNELS]; + #else + float *floor_buffers[STB_VORBIS_MAX_CHANNELS]; + #endif + + uint32 current_loc; // sample location of next frame to decode + int current_loc_valid; + + // per-blocksize precomputed data + + // twiddle factors + float *A[2],*B[2],*C[2]; + float *window[2]; + uint16 *bit_reverse[2]; + + // current page/packet/segment streaming info + uint32 serial; // stream serial number for verification + int last_page; + int segment_count; + uint8 segments[255]; + uint8 page_flag; + uint8 bytes_in_seg; + uint8 first_decode; + int next_seg; + int last_seg; // flag that we're on the last segment + int last_seg_which; // what was the segment number of the last seg? + uint32 acc; + int valid_bits; + int packet_bytes; + int end_seg_with_known_loc; + uint32 known_loc_for_packet; + int discard_samples_deferred; + uint32 samples_output; + + // push mode scanning + int page_crc_tests; // only in push_mode: number of tests active; -1 if not searching +#ifndef STB_VORBIS_NO_PUSHDATA_API + CRCscan scan[STB_VORBIS_PUSHDATA_CRC_COUNT]; +#endif + + // sample-access + int channel_buffer_start; + int channel_buffer_end; +}; + +extern int my_prof(int slot); +//#define stb_prof my_prof + +#ifndef stb_prof +#define stb_prof(x) 0 +#endif + +#if defined(STB_VORBIS_NO_PUSHDATA_API) + #define IS_PUSH_MODE(f) FALSE +#elif defined(STB_VORBIS_NO_PULLDATA_API) + #define IS_PUSH_MODE(f) TRUE +#else + #define IS_PUSH_MODE(f) ((f)->push_mode) +#endif + +typedef struct stb_vorbis vorb; + +static int error(vorb *f, enum STBVorbisError e) +{ + f->error = e; + if (!f->eof && e != VORBIS_need_more_data) { + f->error=e; // breakpoint for debugging + } + return 0; +} + + +// these functions are used for allocating temporary memory +// while decoding. if you can afford the stack space, use +// alloca(); otherwise, provide a temp buffer and it will +// allocate out of those. + +#define array_size_required(count,size) (count*(sizeof(void *)+(size))) + +#define temp_alloc(f,size) (f->alloc.alloc_buffer ? setup_temp_malloc(f,size) : alloca(size)) +#ifdef dealloca +#define temp_free(f,p) (f->alloc.alloc_buffer ? 0 : dealloca(size)) +#else +#define temp_free(f,p) 0 +#endif +#define temp_alloc_save(f) ((f)->temp_offset) +#define temp_alloc_restore(f,p) ((f)->temp_offset = (p)) + +#define temp_block_array(f,count,size) make_block_array(temp_alloc(f,array_size_required(count,size)), count, size) + +// given a sufficiently large block of memory, make an array of pointers to subblocks of it +static void *make_block_array(void *mem, int count, int size) +{ + int i; + void ** p = (void **) mem; + char *q = (char *) (p + count); + for (i=0; i < count; ++i) { + p[i] = q; + q += size; + } + return p; +} + +static void *setup_malloc(vorb *f, int sz) +{ + sz = (sz+3) & ~3; + f->setup_memory_required += sz; + if (f->alloc.alloc_buffer) { + void *p = (char *) f->alloc.alloc_buffer + f->setup_offset; + if (f->setup_offset + sz > f->temp_offset) return NULL; + f->setup_offset += sz; + return p; + } + return sz ? malloc(sz) : NULL; +} + +static void setup_free(vorb *f, void *p) +{ + if (f->alloc.alloc_buffer) return; // do nothing; setup mem is not a stack + free(p); +} + +static void *setup_temp_malloc(vorb *f, int sz) +{ + sz = (sz+3) & ~3; + if (f->alloc.alloc_buffer) { + if (f->temp_offset - sz < f->setup_offset) return NULL; + f->temp_offset -= sz; + return (char *) f->alloc.alloc_buffer + f->temp_offset; + } + return malloc(sz); +} + +static void setup_temp_free(vorb *f, void *p, size_t sz) +{ + if (f->alloc.alloc_buffer) { + f->temp_offset += (sz+3)&~3; + return; + } + free(p); +} + +#define CRC32_POLY 0x04c11db7 // from spec + +static uint32 crc_table[256]; +static void crc32_init(void) +{ + int i,j; + uint32 s; + for(i=0; i < 256; i++) { + for (s=i<<24, j=0; j < 8; ++j) + s = (s << 1) ^ (s >= (1<<31) ? CRC32_POLY : 0); + crc_table[i] = s; + } +} + +static __forceinline uint32 crc32_update(uint32 crc, uint8 byte) +{ + return (crc << 8) ^ crc_table[byte ^ (crc >> 24)]; +} + + +// used in setup, and for huffman that doesn't go fast path +static unsigned int bit_reverse(unsigned int n) +{ + n = ((n & 0xAAAAAAAA) >> 1) | ((n & 0x55555555) << 1); + n = ((n & 0xCCCCCCCC) >> 2) | ((n & 0x33333333) << 2); + n = ((n & 0xF0F0F0F0) >> 4) | ((n & 0x0F0F0F0F) << 4); + n = ((n & 0xFF00FF00) >> 8) | ((n & 0x00FF00FF) << 8); + return (n >> 16) | (n << 16); +} + +static float square(float x) +{ + return x*x; +} + +// this is a weird definition of log2() for which log2(1) = 1, log2(2) = 2, log2(4) = 3 +// as required by the specification. fast(?) implementation from stb.h +// @OPTIMIZE: called multiple times per-packet with "constants"; move to setup +static int ilog(int32 n) +{ + static signed char log2_4[16] = { 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4 }; + + // 2 compares if n < 16, 3 compares otherwise (4 if signed or n > 1<<29) + if (n < (1U << 14)) + if (n < (1U << 4)) return 0 + log2_4[n ]; + else if (n < (1U << 9)) return 5 + log2_4[n >> 5]; + else return 10 + log2_4[n >> 10]; + else if (n < (1U << 24)) + if (n < (1U << 19)) return 15 + log2_4[n >> 15]; + else return 20 + log2_4[n >> 20]; + else if (n < (1U << 29)) return 25 + log2_4[n >> 25]; + else if (n < (1U << 31)) return 30 + log2_4[n >> 30]; + else return 0; // signed n returns 0 +} + +#ifndef M_PI + #define M_PI 3.14159265358979323846264f // from CRC +#endif + +// code length assigned to a value with no huffman encoding +#define NO_CODE 255 + +/////////////////////// LEAF SETUP FUNCTIONS ////////////////////////// +// +// these functions are only called at setup, and only a few times +// per file + +static float float32_unpack(uint32 x) +{ + // from the specification + uint32 mantissa = x & 0x1fffff; + uint32 sign = x & 0x80000000; + uint32 exp = (x & 0x7fe00000) >> 21; + double res = sign ? -(double)mantissa : (double)mantissa; + return (float) ldexp((float)res, exp-788); +} + + +// zlib & jpeg huffman tables assume that the output symbols +// can either be arbitrarily arranged, or have monotonically +// increasing frequencies--they rely on the lengths being sorted; +// this makes for a very simple generation algorithm. +// vorbis allows a huffman table with non-sorted lengths. This +// requires a more sophisticated construction, since symbols in +// order do not map to huffman codes "in order". +static void add_entry(Codebook *c, uint32 huff_code, int symbol, int count, int len, uint32 *values) +{ + if (!c->sparse) { + c->codewords [symbol] = huff_code; + } else { + c->codewords [count] = huff_code; + c->codeword_lengths[count] = len; + values [count] = symbol; + } +} + +static int compute_codewords(Codebook *c, uint8 *len, int n, uint32 *values) +{ + int i,k,m=0; + uint32 available[32]; + + memset(available, 0, sizeof(available)); + // find the first entry + for (k=0; k < n; ++k) if (len[k] < NO_CODE) break; + if (k == n) { assert(c->sorted_entries == 0); return TRUE; } + // add to the list + add_entry(c, 0, k, m++, len[k], values); + // add all available leaves + for (i=1; i <= len[k]; ++i) + available[i] = 1 << (32-i); + // note that the above code treats the first case specially, + // but it's really the same as the following code, so they + // could probably be combined (except the initial code is 0, + // and I use 0 in available[] to mean 'empty') + for (i=k+1; i < n; ++i) { + uint32 res; + int z = len[i], y; + if (z == NO_CODE) continue; + // find lowest available leaf (should always be earliest, + // which is what the specification calls for) + // note that this property, and the fact we can never have + // more than one free leaf at a given level, isn't totally + // trivial to prove, but it seems true and the assert never + // fires, so! + while (z > 0 && !available[z]) --z; + if (z == 0) { assert(0); return FALSE; } + res = available[z]; + available[z] = 0; + add_entry(c, bit_reverse(res), i, m++, len[i], values); + // propogate availability up the tree + if (z != len[i]) { + for (y=len[i]; y > z; --y) { + assert(available[y] == 0); + available[y] = res + (1 << (32-y)); + } + } + } + return TRUE; +} + +// accelerated huffman table allows fast O(1) match of all symbols +// of length <= STB_VORBIS_FAST_HUFFMAN_LENGTH +static void compute_accelerated_huffman(Codebook *c) +{ + int i, len; + for (i=0; i < FAST_HUFFMAN_TABLE_SIZE; ++i) + c->fast_huffman[i] = -1; + + len = c->sparse ? c->sorted_entries : c->entries; + #ifdef STB_VORBIS_FAST_HUFFMAN_SHORT + if (len > 32767) len = 32767; // largest possible value we can encode! + #endif + for (i=0; i < len; ++i) { + if (c->codeword_lengths[i] <= STB_VORBIS_FAST_HUFFMAN_LENGTH) { + uint32 z = c->sparse ? bit_reverse(c->sorted_codewords[i]) : c->codewords[i]; + // set table entries for all bit combinations in the higher bits + while (z < FAST_HUFFMAN_TABLE_SIZE) { + c->fast_huffman[z] = i; + z += 1 << c->codeword_lengths[i]; + } + } + } +} + +static int uint32_compare(const void *p, const void *q) +{ + uint32 x = * (uint32 *) p; + uint32 y = * (uint32 *) q; + return x < y ? -1 : x > y; +} + +static int include_in_sort(Codebook *c, uint8 len) +{ + if (c->sparse) { assert(len != NO_CODE); return TRUE; } + if (len == NO_CODE) return FALSE; + if (len > STB_VORBIS_FAST_HUFFMAN_LENGTH) return TRUE; + return FALSE; +} + +// if the fast table above doesn't work, we want to binary +// search them... need to reverse the bits +static void compute_sorted_huffman(Codebook *c, uint8 *lengths, uint32 *values) +{ + int i, len; + // build a list of all the entries + // OPTIMIZATION: don't include the short ones, since they'll be caught by FAST_HUFFMAN. + // this is kind of a frivolous optimization--I don't see any performance improvement, + // but it's like 4 extra lines of code, so. + if (!c->sparse) { + int k = 0; + for (i=0; i < c->entries; ++i) + if (include_in_sort(c, lengths[i])) + c->sorted_codewords[k++] = bit_reverse(c->codewords[i]); + assert(k == c->sorted_entries); + } else { + for (i=0; i < c->sorted_entries; ++i) + c->sorted_codewords[i] = bit_reverse(c->codewords[i]); + } + + qsort(c->sorted_codewords, c->sorted_entries, sizeof(c->sorted_codewords[0]), uint32_compare); + c->sorted_codewords[c->sorted_entries] = 0xffffffff; + + len = c->sparse ? c->sorted_entries : c->entries; + // now we need to indicate how they correspond; we could either + // #1: sort a different data structure that says who they correspond to + // #2: for each sorted entry, search the original list to find who corresponds + // #3: for each original entry, find the sorted entry + // #1 requires extra storage, #2 is slow, #3 can use binary search! + for (i=0; i < len; ++i) { + int huff_len = c->sparse ? lengths[values[i]] : lengths[i]; + if (include_in_sort(c,huff_len)) { + uint32 code = bit_reverse(c->codewords[i]); + int x=0, n=c->sorted_entries; + while (n > 1) { + // invariant: sc[x] <= code < sc[x+n] + int m = x + (n >> 1); + if (c->sorted_codewords[m] <= code) { + x = m; + n -= (n>>1); + } else { + n >>= 1; + } + } + assert(c->sorted_codewords[x] == code); + if (c->sparse) { + c->sorted_values[x] = values[i]; + c->codeword_lengths[x] = huff_len; + } else { + c->sorted_values[x] = i; + } + } + } +} + +// only run while parsing the header (3 times) +static int vorbis_validate(uint8 *data) +{ + static uint8 vorbis[6] = { 'v', 'o', 'r', 'b', 'i', 's' }; + return memcmp(data, vorbis, 6) == 0; +} + +// called from setup only, once per code book +// (formula implied by specification) +static int lookup1_values(int entries, int dim) +{ + int r = (int) floor(exp((float) log((float) entries) / dim)); + if ((int) floor(pow((float) r+1, dim)) <= entries) // (int) cast for MinGW warning; + ++r; // floor() to avoid _ftol() when non-CRT + assert(pow((float) r+1, dim) > entries); + assert((int) floor(pow((float) r, dim)) <= entries); // (int),floor() as above + return r; +} + +// called twice per file +static void compute_twiddle_factors(int n, float *A, float *B, float *C) +{ + int n4 = n >> 2, n8 = n >> 3; + int k,k2; + + for (k=k2=0; k < n4; ++k,k2+=2) { + A[k2 ] = (float) cos(4*k*M_PI/n); + A[k2+1] = (float) -sin(4*k*M_PI/n); + B[k2 ] = (float) cos((k2+1)*M_PI/n/2) * 0.5f; + B[k2+1] = (float) sin((k2+1)*M_PI/n/2) * 0.5f; + } + for (k=k2=0; k < n8; ++k,k2+=2) { + C[k2 ] = (float) cos(2*(k2+1)*M_PI/n); + C[k2+1] = (float) -sin(2*(k2+1)*M_PI/n); + } +} + +static void compute_window(int n, float *window) +{ + int n2 = n >> 1, i; + for (i=0; i < n2; ++i) + window[i] = (float) sin(0.5 * M_PI * square((float) sin((i - 0 + 0.5) / n2 * 0.5 * M_PI))); +} + +static void compute_bitreverse(int n, uint16 *rev) +{ + int ld = ilog(n) - 1; // ilog is off-by-one from normal definitions + int i, n8 = n >> 3; + for (i=0; i < n8; ++i) + rev[i] = (bit_reverse(i) >> (32-ld+3)) << 2; +} + +static int init_blocksize(vorb *f, int b, int n) +{ + int n2 = n >> 1, n4 = n >> 2, n8 = n >> 3; + f->A[b] = (float *) setup_malloc(f, sizeof(float) * n2); + f->B[b] = (float *) setup_malloc(f, sizeof(float) * n2); + f->C[b] = (float *) setup_malloc(f, sizeof(float) * n4); + if (!f->A[b] || !f->B[b] || !f->C[b]) return error(f, VORBIS_outofmem); + compute_twiddle_factors(n, f->A[b], f->B[b], f->C[b]); + f->window[b] = (float *) setup_malloc(f, sizeof(float) * n2); + if (!f->window[b]) return error(f, VORBIS_outofmem); + compute_window(n, f->window[b]); + f->bit_reverse[b] = (uint16 *) setup_malloc(f, sizeof(uint16) * n8); + if (!f->bit_reverse[b]) return error(f, VORBIS_outofmem); + compute_bitreverse(n, f->bit_reverse[b]); + return TRUE; +} + +static void neighbors(uint16 *x, int n, int *plow, int *phigh) +{ + int low = -1; + int high = 65536; + int i; + for (i=0; i < n; ++i) { + if (x[i] > low && x[i] < x[n]) { *plow = i; low = x[i]; } + if (x[i] < high && x[i] > x[n]) { *phigh = i; high = x[i]; } + } +} + +// this has been repurposed so y is now the original index instead of y +typedef struct +{ + uint16 x,y; +} VorbisPoint; + +int point_compare(const void *p, const void *q) +{ + VorbisPoint *a = (VorbisPoint *) p; + VorbisPoint *b = (VorbisPoint *) q; + return a->x < b->x ? -1 : a->x > b->x; +} + +// +/////////////////////// END LEAF SETUP FUNCTIONS ////////////////////////// + + +#if defined(STB_VORBIS_NO_STDIO) + #define USE_MEMORY(z) TRUE +#else + #define USE_MEMORY(z) ((z)->stream) +#endif + +static uint8 get8(vorb *z) +{ + if (USE_MEMORY(z)) { + if (z->stream >= z->stream_end) { z->eof = TRUE; return 0; } + return *z->stream++; + } + + #ifndef STB_VORBIS_NO_STDIO + { + int c = fgetc(z->f); + if (c == EOF) { z->eof = TRUE; return 0; } + return c; + } + #endif +} + +static uint32 get32(vorb *f) +{ + uint32 x; + x = get8(f); + x += get8(f) << 8; + x += get8(f) << 16; + x += get8(f) << 24; + return x; +} + +static int getn(vorb *z, uint8 *data, int n) +{ + if (USE_MEMORY(z)) { + if (z->stream+n > z->stream_end) { z->eof = 1; return 0; } + memcpy(data, z->stream, n); + z->stream += n; + return 1; + } + + #ifndef STB_VORBIS_NO_STDIO + if (fread(data, n, 1, z->f) == 1) + return 1; + else { + z->eof = 1; + return 0; + } + #endif +} + +static void skip(vorb *z, int n) +{ + if (USE_MEMORY(z)) { + z->stream += n; + if (z->stream >= z->stream_end) z->eof = 1; + return; + } + #ifndef STB_VORBIS_NO_STDIO + { + long x = ftell(z->f); + fseek(z->f, x+n, SEEK_SET); + } + #endif +} + +static int set_file_offset(stb_vorbis *f, unsigned int loc) +{ + #ifndef STB_VORBIS_NO_PUSHDATA_API + if (f->push_mode) return 0; + #endif + f->eof = 0; + if (USE_MEMORY(f)) { + if (f->stream_start + loc >= f->stream_end || f->stream_start + loc < f->stream_start) { + f->stream = f->stream_end; + f->eof = 1; + return 0; + } else { + f->stream = f->stream_start + loc; + return 1; + } + } + #ifndef STB_VORBIS_NO_STDIO + if (loc + f->f_start < loc || loc >= 0x80000000) { + loc = 0x7fffffff; + f->eof = 1; + } else { + loc += f->f_start; + } + if (!fseek(f->f, loc, SEEK_SET)) + return 1; + f->eof = 1; + fseek(f->f, f->f_start, SEEK_END); + return 0; + #endif +} + + +static uint8 ogg_page_header[4] = { 0x4f, 0x67, 0x67, 0x53 }; + +static int capture_pattern(vorb *f) +{ + if (0x4f != get8(f)) return FALSE; + if (0x67 != get8(f)) return FALSE; + if (0x67 != get8(f)) return FALSE; + if (0x53 != get8(f)) return FALSE; + return TRUE; +} + +#define PAGEFLAG_continued_packet 1 +#define PAGEFLAG_first_page 2 +#define PAGEFLAG_last_page 4 + +static int start_page_no_capturepattern(vorb *f) +{ + uint32 loc0,loc1,n,i; + // stream structure version + if (0 != get8(f)) return error(f, VORBIS_invalid_stream_structure_version); + // header flag + f->page_flag = get8(f); + // absolute granule position + loc0 = get32(f); + loc1 = get32(f); + // @TODO: validate loc0,loc1 as valid positions? + // stream serial number -- vorbis doesn't interleave, so discard + get32(f); + //if (f->serial != get32(f)) return error(f, VORBIS_incorrect_stream_serial_number); + // page sequence number + n = get32(f); + f->last_page = n; + // CRC32 + get32(f); + // page_segments + f->segment_count = get8(f); + if (!getn(f, f->segments, f->segment_count)) + return error(f, VORBIS_unexpected_eof); + // assume we _don't_ know any the sample position of any segments + f->end_seg_with_known_loc = -2; + if (loc0 != ~0 || loc1 != ~0) { + // determine which packet is the last one that will complete + for (i=f->segment_count-1; i >= 0; --i) + if (f->segments[i] < 255) + break; + // 'i' is now the index of the _last_ segment of a packet that ends + if (i >= 0) { + f->end_seg_with_known_loc = i; + f->known_loc_for_packet = loc0; + } + } + if (f->first_decode) { + int i,len; + ProbedPage p; + len = 0; + for (i=0; i < f->segment_count; ++i) + len += f->segments[i]; + len += 27 + f->segment_count; + p.page_start = f->first_audio_page_offset; + p.page_end = p.page_start + len; + p.after_previous_page_start = p.page_start; + p.first_decoded_sample = 0; + p.last_decoded_sample = loc0; + f->p_first = p; + } + f->next_seg = 0; + return TRUE; +} + +static int start_page(vorb *f) +{ + if (!capture_pattern(f)) return error(f, VORBIS_missing_capture_pattern); + return start_page_no_capturepattern(f); +} + +static int start_packet(vorb *f) +{ + while (f->next_seg == -1) { + if (!start_page(f)) return FALSE; + if (f->page_flag & PAGEFLAG_continued_packet) + return error(f, VORBIS_continued_packet_flag_invalid); + } + f->last_seg = FALSE; + f->valid_bits = 0; + f->packet_bytes = 0; + f->bytes_in_seg = 0; + // f->next_seg is now valid + return TRUE; +} + +static int maybe_start_packet(vorb *f) +{ + if (f->next_seg == -1) { + int x = get8(f); + if (f->eof) return FALSE; // EOF at page boundary is not an error! + if (0x4f != x ) return error(f, VORBIS_missing_capture_pattern); + if (0x67 != get8(f)) return error(f, VORBIS_missing_capture_pattern); + if (0x67 != get8(f)) return error(f, VORBIS_missing_capture_pattern); + if (0x53 != get8(f)) return error(f, VORBIS_missing_capture_pattern); + if (!start_page_no_capturepattern(f)) return FALSE; + if (f->page_flag & PAGEFLAG_continued_packet) { + // set up enough state that we can read this packet if we want, + // e.g. during recovery + f->last_seg = FALSE; + f->bytes_in_seg = 0; + return error(f, VORBIS_continued_packet_flag_invalid); + } + } + return start_packet(f); +} + +static int next_segment(vorb *f) +{ + int len; + if (f->last_seg) return 0; + if (f->next_seg == -1) { + f->last_seg_which = f->segment_count-1; // in case start_page fails + if (!start_page(f)) { f->last_seg = 1; return 0; } + if (!(f->page_flag & PAGEFLAG_continued_packet)) return error(f, VORBIS_continued_packet_flag_invalid); + } + len = f->segments[f->next_seg++]; + if (len < 255) { + f->last_seg = TRUE; + f->last_seg_which = f->next_seg-1; + } + if (f->next_seg >= f->segment_count) + f->next_seg = -1; + assert(f->bytes_in_seg == 0); + f->bytes_in_seg = len; + return len; +} + +#define EOP (-1) +#define INVALID_BITS (-1) + +static int get8_packet_raw(vorb *f) +{ + if (!f->bytes_in_seg) + if (f->last_seg) return EOP; + else if (!next_segment(f)) return EOP; + assert(f->bytes_in_seg > 0); + --f->bytes_in_seg; + ++f->packet_bytes; + return get8(f); +} + +static int get8_packet(vorb *f) +{ + int x = get8_packet_raw(f); + f->valid_bits = 0; + return x; +} + +static void flush_packet(vorb *f) +{ + while (get8_packet_raw(f) != EOP); +} + +// @OPTIMIZE: this is the secondary bit decoder, so it's probably not as important +// as the huffman decoder? +static uint32 get_bits(vorb *f, int n) +{ + uint32 z; + + if (f->valid_bits < 0) return 0; + if (f->valid_bits < n) { + if (n > 24) { + // the accumulator technique below would not work correctly in this case + z = get_bits(f, 24); + z += get_bits(f, n-24) << 24; + return z; + } + if (f->valid_bits == 0) f->acc = 0; + while (f->valid_bits < n) { + int z = get8_packet_raw(f); + if (z == EOP) { + f->valid_bits = INVALID_BITS; + return 0; + } + f->acc += z << f->valid_bits; + f->valid_bits += 8; + } + } + if (f->valid_bits < 0) return 0; + z = f->acc & ((1 << n)-1); + f->acc >>= n; + f->valid_bits -= n; + return z; +} + +static int32 get_bits_signed(vorb *f, int n) +{ + uint32 z = get_bits(f, n); + if (z & (1 << (n-1))) + z += ~((1 << n) - 1); + return (int32) z; +} + +// @OPTIMIZE: primary accumulator for huffman +// expand the buffer to as many bits as possible without reading off end of packet +// it might be nice to allow f->valid_bits and f->acc to be stored in registers, +// e.g. cache them locally and decode locally +static __forceinline void prep_huffman(vorb *f) +{ + if (f->valid_bits <= 24) { + if (f->valid_bits == 0) f->acc = 0; + do { + int z; + if (f->last_seg && !f->bytes_in_seg) return; + z = get8_packet_raw(f); + if (z == EOP) return; + f->acc += z << f->valid_bits; + f->valid_bits += 8; + } while (f->valid_bits <= 24); + } +} + +enum +{ + VORBIS_packet_id = 1, + VORBIS_packet_comment = 3, + VORBIS_packet_setup = 5, +}; + +static int codebook_decode_scalar_raw(vorb *f, Codebook *c) +{ + int i; + prep_huffman(f); + + assert(c->sorted_codewords || c->codewords); + // cases to use binary search: sorted_codewords && !c->codewords + // sorted_codewords && c->entries > 8 + if (c->entries > 8 ? c->sorted_codewords!=NULL : !c->codewords) { + // binary search + uint32 code = bit_reverse(f->acc); + int x=0, n=c->sorted_entries, len; + + while (n > 1) { + // invariant: sc[x] <= code < sc[x+n] + int m = x + (n >> 1); + if (c->sorted_codewords[m] <= code) { + x = m; + n -= (n>>1); + } else { + n >>= 1; + } + } + // x is now the sorted index + if (!c->sparse) x = c->sorted_values[x]; + // x is now sorted index if sparse, or symbol otherwise + len = c->codeword_lengths[x]; + if (f->valid_bits >= len) { + f->acc >>= len; + f->valid_bits -= len; + return x; + } + + f->valid_bits = 0; + return -1; + } + + // if small, linear search + assert(!c->sparse); + for (i=0; i < c->entries; ++i) { + if (c->codeword_lengths[i] == NO_CODE) continue; + if (c->codewords[i] == (f->acc & ((1 << c->codeword_lengths[i])-1))) { + if (f->valid_bits >= c->codeword_lengths[i]) { + f->acc >>= c->codeword_lengths[i]; + f->valid_bits -= c->codeword_lengths[i]; + return i; + } + f->valid_bits = 0; + return -1; + } + } + + error(f, VORBIS_invalid_stream); + f->valid_bits = 0; + return -1; +} + +static int codebook_decode_scalar(vorb *f, Codebook *c) +{ + int i; + if (f->valid_bits < STB_VORBIS_FAST_HUFFMAN_LENGTH) + prep_huffman(f); + // fast huffman table lookup + i = f->acc & FAST_HUFFMAN_TABLE_MASK; + i = c->fast_huffman[i]; + if (i >= 0) { + f->acc >>= c->codeword_lengths[i]; + f->valid_bits -= c->codeword_lengths[i]; + if (f->valid_bits < 0) { f->valid_bits = 0; return -1; } + return i; + } + return codebook_decode_scalar_raw(f,c); +} + +#ifndef STB_VORBIS_NO_INLINE_DECODE + +#define DECODE_RAW(var, f,c) \ + if (f->valid_bits < STB_VORBIS_FAST_HUFFMAN_LENGTH) \ + prep_huffman(f); \ + var = f->acc & FAST_HUFFMAN_TABLE_MASK; \ + var = c->fast_huffman[var]; \ + if (var >= 0) { \ + int n = c->codeword_lengths[var]; \ + f->acc >>= n; \ + f->valid_bits -= n; \ + if (f->valid_bits < 0) { f->valid_bits = 0; var = -1; } \ + } else { \ + var = codebook_decode_scalar_raw(f,c); \ + } + +#else + +#define DECODE_RAW(var,f,c) var = codebook_decode_scalar(f,c); + +#endif + +#define DECODE(var,f,c) \ + DECODE_RAW(var,f,c) \ + if (c->sparse) var = c->sorted_values[var]; + +#ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK + #define DECODE_VQ(var,f,c) DECODE_RAW(var,f,c) +#else + #define DECODE_VQ(var,f,c) DECODE(var,f,c) +#endif + + + + + + +// CODEBOOK_ELEMENT_FAST is an optimization for the CODEBOOK_FLOATS case +// where we avoid one addition +#ifndef STB_VORBIS_CODEBOOK_FLOATS + #define CODEBOOK_ELEMENT(c,off) (c->multiplicands[off] * c->delta_value + c->minimum_value) + #define CODEBOOK_ELEMENT_FAST(c,off) (c->multiplicands[off] * c->delta_value) + #define CODEBOOK_ELEMENT_BASE(c) (c->minimum_value) +#else + #define CODEBOOK_ELEMENT(c,off) (c->multiplicands[off]) + #define CODEBOOK_ELEMENT_FAST(c,off) (c->multiplicands[off]) + #define CODEBOOK_ELEMENT_BASE(c) (0) +#endif + +static int codebook_decode_start(vorb *f, Codebook *c, int len) +{ + int z = -1; + + // type 0 is only legal in a scalar context + if (c->lookup_type == 0) + error(f, VORBIS_invalid_stream); + else { + DECODE_VQ(z,f,c); + if (c->sparse) assert(z < c->sorted_entries); + if (z < 0) { // check for EOP + if (!f->bytes_in_seg) + if (f->last_seg) + return z; + error(f, VORBIS_invalid_stream); + } + } + return z; +} + +static int codebook_decode(vorb *f, Codebook *c, float *output, int len) +{ + int i,z = codebook_decode_start(f,c,len); + if (z < 0) return FALSE; + if (len > c->dimensions) len = c->dimensions; + +#ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK + if (c->lookup_type == 1) { + float last = CODEBOOK_ELEMENT_BASE(c); + int div = 1; + for (i=0; i < len; ++i) { + int off = (z / div) % c->lookup_values; + float val = CODEBOOK_ELEMENT_FAST(c,off) + last; + output[i] += val; + if (c->sequence_p) last = val + c->minimum_value; + div *= c->lookup_values; + } + return TRUE; + } +#endif + + z *= c->dimensions; + if (c->sequence_p) { + float last = CODEBOOK_ELEMENT_BASE(c); + for (i=0; i < len; ++i) { + float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; + output[i] += val; + last = val + c->minimum_value; + } + } else { + float last = CODEBOOK_ELEMENT_BASE(c); + for (i=0; i < len; ++i) { + output[i] += CODEBOOK_ELEMENT_FAST(c,z+i) + last; + } + } + + return TRUE; +} + +static int codebook_decode_step(vorb *f, Codebook *c, float *output, int len, int step) +{ + int i,z = codebook_decode_start(f,c,len); + float last = CODEBOOK_ELEMENT_BASE(c); + if (z < 0) return FALSE; + if (len > c->dimensions) len = c->dimensions; + +#ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK + if (c->lookup_type == 1) { + int div = 1; + for (i=0; i < len; ++i) { + int off = (z / div) % c->lookup_values; + float val = CODEBOOK_ELEMENT_FAST(c,off) + last; + output[i*step] += val; + if (c->sequence_p) last = val; + div *= c->lookup_values; + } + return TRUE; + } +#endif + + z *= c->dimensions; + for (i=0; i < len; ++i) { + float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; + output[i*step] += val; + if (c->sequence_p) last = val; + } + + return TRUE; +} + +static int codebook_decode_deinterleave_repeat(vorb *f, Codebook *c, float **outputs, int ch, int *c_inter_p, int *p_inter_p, int len, int total_decode) +{ + int c_inter = *c_inter_p; + int p_inter = *p_inter_p; + int i,z, effective = c->dimensions; + + // type 0 is only legal in a scalar context + if (c->lookup_type == 0) return error(f, VORBIS_invalid_stream); + + while (total_decode > 0) { + float last = CODEBOOK_ELEMENT_BASE(c); + DECODE_VQ(z,f,c); + #ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK + assert(!c->sparse || z < c->sorted_entries); + #endif + if (z < 0) { + if (!f->bytes_in_seg) + if (f->last_seg) return FALSE; + return error(f, VORBIS_invalid_stream); + } + + // if this will take us off the end of the buffers, stop short! + // we check by computing the length of the virtual interleaved + // buffer (len*ch), our current offset within it (p_inter*ch)+(c_inter), + // and the length we'll be using (effective) + if (c_inter + p_inter*ch + effective > len * ch) { + effective = len*ch - (p_inter*ch - c_inter); + } + + #ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK + if (c->lookup_type == 1) { + int div = 1; + for (i=0; i < effective; ++i) { + int off = (z / div) % c->lookup_values; + float val = CODEBOOK_ELEMENT_FAST(c,off) + last; + outputs[c_inter][p_inter] += val; + if (++c_inter == ch) { c_inter = 0; ++p_inter; } + if (c->sequence_p) last = val; + div *= c->lookup_values; + } + } else + #endif + { + z *= c->dimensions; + if (c->sequence_p) { + for (i=0; i < effective; ++i) { + float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; + outputs[c_inter][p_inter] += val; + if (++c_inter == ch) { c_inter = 0; ++p_inter; } + last = val; + } + } else { + for (i=0; i < effective; ++i) { + float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; + outputs[c_inter][p_inter] += val; + if (++c_inter == ch) { c_inter = 0; ++p_inter; } + } + } + } + + total_decode -= effective; + } + *c_inter_p = c_inter; + *p_inter_p = p_inter; + return TRUE; +} + +#ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK +static int codebook_decode_deinterleave_repeat_2(vorb *f, Codebook *c, float **outputs, int *c_inter_p, int *p_inter_p, int len, int total_decode) +{ + int c_inter = *c_inter_p; + int p_inter = *p_inter_p; + int i,z, effective = c->dimensions; + + // type 0 is only legal in a scalar context + if (c->lookup_type == 0) return error(f, VORBIS_invalid_stream); + + while (total_decode > 0) { + float last = CODEBOOK_ELEMENT_BASE(c); + DECODE_VQ(z,f,c); + + if (z < 0) { + if (!f->bytes_in_seg) + if (f->last_seg) return FALSE; + return error(f, VORBIS_invalid_stream); + } + + // if this will take us off the end of the buffers, stop short! + // we check by computing the length of the virtual interleaved + // buffer (len*ch), our current offset within it (p_inter*ch)+(c_inter), + // and the length we'll be using (effective) + if (c_inter + p_inter*2 + effective > len * 2) { + effective = len*2 - (p_inter*2 - c_inter); + } + + { + z *= c->dimensions; + stb_prof(11); + if (c->sequence_p) { + // haven't optimized this case because I don't have any examples + for (i=0; i < effective; ++i) { + float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; + outputs[c_inter][p_inter] += val; + if (++c_inter == 2) { c_inter = 0; ++p_inter; } + last = val; + } + } else { + i=0; + if (c_inter == 1) { + float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; + outputs[c_inter][p_inter] += val; + c_inter = 0; ++p_inter; + ++i; + } + { + float *z0 = outputs[0]; + float *z1 = outputs[1]; + for (; i+1 < effective;) { + z0[p_inter] += CODEBOOK_ELEMENT_FAST(c,z+i) + last; + z1[p_inter] += CODEBOOK_ELEMENT_FAST(c,z+i+1) + last; + ++p_inter; + i += 2; + } + } + if (i < effective) { + float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; + outputs[c_inter][p_inter] += val; + if (++c_inter == 2) { c_inter = 0; ++p_inter; } + } + } + } + + total_decode -= effective; + } + *c_inter_p = c_inter; + *p_inter_p = p_inter; + return TRUE; +} +#endif + +static int predict_point(int x, int x0, int x1, int y0, int y1) +{ + int dy = y1 - y0; + int adx = x1 - x0; + // @OPTIMIZE: force int division to round in the right direction... is this necessary on x86? + int err = abs(dy) * (x - x0); + int off = err / adx; + return dy < 0 ? y0 - off : y0 + off; +} + +// the following table is block-copied from the specification +static float inverse_db_table[256] = +{ + 1.0649863e-07f, 1.1341951e-07f, 1.2079015e-07f, 1.2863978e-07f, + 1.3699951e-07f, 1.4590251e-07f, 1.5538408e-07f, 1.6548181e-07f, + 1.7623575e-07f, 1.8768855e-07f, 1.9988561e-07f, 2.1287530e-07f, + 2.2670913e-07f, 2.4144197e-07f, 2.5713223e-07f, 2.7384213e-07f, + 2.9163793e-07f, 3.1059021e-07f, 3.3077411e-07f, 3.5226968e-07f, + 3.7516214e-07f, 3.9954229e-07f, 4.2550680e-07f, 4.5315863e-07f, + 4.8260743e-07f, 5.1396998e-07f, 5.4737065e-07f, 5.8294187e-07f, + 6.2082472e-07f, 6.6116941e-07f, 7.0413592e-07f, 7.4989464e-07f, + 7.9862701e-07f, 8.5052630e-07f, 9.0579828e-07f, 9.6466216e-07f, + 1.0273513e-06f, 1.0941144e-06f, 1.1652161e-06f, 1.2409384e-06f, + 1.3215816e-06f, 1.4074654e-06f, 1.4989305e-06f, 1.5963394e-06f, + 1.7000785e-06f, 1.8105592e-06f, 1.9282195e-06f, 2.0535261e-06f, + 2.1869758e-06f, 2.3290978e-06f, 2.4804557e-06f, 2.6416497e-06f, + 2.8133190e-06f, 2.9961443e-06f, 3.1908506e-06f, 3.3982101e-06f, + 3.6190449e-06f, 3.8542308e-06f, 4.1047004e-06f, 4.3714470e-06f, + 4.6555282e-06f, 4.9580707e-06f, 5.2802740e-06f, 5.6234160e-06f, + 5.9888572e-06f, 6.3780469e-06f, 6.7925283e-06f, 7.2339451e-06f, + 7.7040476e-06f, 8.2047000e-06f, 8.7378876e-06f, 9.3057248e-06f, + 9.9104632e-06f, 1.0554501e-05f, 1.1240392e-05f, 1.1970856e-05f, + 1.2748789e-05f, 1.3577278e-05f, 1.4459606e-05f, 1.5399272e-05f, + 1.6400004e-05f, 1.7465768e-05f, 1.8600792e-05f, 1.9809576e-05f, + 2.1096914e-05f, 2.2467911e-05f, 2.3928002e-05f, 2.5482978e-05f, + 2.7139006e-05f, 2.8902651e-05f, 3.0780908e-05f, 3.2781225e-05f, + 3.4911534e-05f, 3.7180282e-05f, 3.9596466e-05f, 4.2169667e-05f, + 4.4910090e-05f, 4.7828601e-05f, 5.0936773e-05f, 5.4246931e-05f, + 5.7772202e-05f, 6.1526565e-05f, 6.5524908e-05f, 6.9783085e-05f, + 7.4317983e-05f, 7.9147585e-05f, 8.4291040e-05f, 8.9768747e-05f, + 9.5602426e-05f, 0.00010181521f, 0.00010843174f, 0.00011547824f, + 0.00012298267f, 0.00013097477f, 0.00013948625f, 0.00014855085f, + 0.00015820453f, 0.00016848555f, 0.00017943469f, 0.00019109536f, + 0.00020351382f, 0.00021673929f, 0.00023082423f, 0.00024582449f, + 0.00026179955f, 0.00027881276f, 0.00029693158f, 0.00031622787f, + 0.00033677814f, 0.00035866388f, 0.00038197188f, 0.00040679456f, + 0.00043323036f, 0.00046138411f, 0.00049136745f, 0.00052329927f, + 0.00055730621f, 0.00059352311f, 0.00063209358f, 0.00067317058f, + 0.00071691700f, 0.00076350630f, 0.00081312324f, 0.00086596457f, + 0.00092223983f, 0.00098217216f, 0.0010459992f, 0.0011139742f, + 0.0011863665f, 0.0012634633f, 0.0013455702f, 0.0014330129f, + 0.0015261382f, 0.0016253153f, 0.0017309374f, 0.0018434235f, + 0.0019632195f, 0.0020908006f, 0.0022266726f, 0.0023713743f, + 0.0025254795f, 0.0026895994f, 0.0028643847f, 0.0030505286f, + 0.0032487691f, 0.0034598925f, 0.0036847358f, 0.0039241906f, + 0.0041792066f, 0.0044507950f, 0.0047400328f, 0.0050480668f, + 0.0053761186f, 0.0057254891f, 0.0060975636f, 0.0064938176f, + 0.0069158225f, 0.0073652516f, 0.0078438871f, 0.0083536271f, + 0.0088964928f, 0.009474637f, 0.010090352f, 0.010746080f, + 0.011444421f, 0.012188144f, 0.012980198f, 0.013823725f, + 0.014722068f, 0.015678791f, 0.016697687f, 0.017782797f, + 0.018938423f, 0.020169149f, 0.021479854f, 0.022875735f, + 0.024362330f, 0.025945531f, 0.027631618f, 0.029427276f, + 0.031339626f, 0.033376252f, 0.035545228f, 0.037855157f, + 0.040315199f, 0.042935108f, 0.045725273f, 0.048696758f, + 0.051861348f, 0.055231591f, 0.058820850f, 0.062643361f, + 0.066714279f, 0.071049749f, 0.075666962f, 0.080584227f, + 0.085821044f, 0.091398179f, 0.097337747f, 0.10366330f, + 0.11039993f, 0.11757434f, 0.12521498f, 0.13335215f, + 0.14201813f, 0.15124727f, 0.16107617f, 0.17154380f, + 0.18269168f, 0.19456402f, 0.20720788f, 0.22067342f, + 0.23501402f, 0.25028656f, 0.26655159f, 0.28387361f, + 0.30232132f, 0.32196786f, 0.34289114f, 0.36517414f, + 0.38890521f, 0.41417847f, 0.44109412f, 0.46975890f, + 0.50028648f, 0.53279791f, 0.56742212f, 0.60429640f, + 0.64356699f, 0.68538959f, 0.72993007f, 0.77736504f, + 0.82788260f, 0.88168307f, 0.9389798f, 1.0f +}; + + +// @OPTIMIZE: if you want to replace this bresenham line-drawing routine, +// note that you must produce bit-identical output to decode correctly; +// this specific sequence of operations is specified in the spec (it's +// drawing integer-quantized frequency-space lines that the encoder +// expects to be exactly the same) +// ... also, isn't the whole point of Bresenham's algorithm to NOT +// have to divide in the setup? sigh. +#ifndef STB_VORBIS_NO_DEFER_FLOOR +#define LINE_OP(a,b) a *= b +#else +#define LINE_OP(a,b) a = b +#endif + +#ifdef STB_VORBIS_DIVIDE_TABLE +#define DIVTAB_NUMER 32 +#define DIVTAB_DENOM 64 +int8 integer_divide_table[DIVTAB_NUMER][DIVTAB_DENOM]; // 2KB +#endif + +static __forceinline void draw_line(float *output, int x0, int y0, int x1, int y1, int n) +{ + int dy = y1 - y0; + int adx = x1 - x0; + int ady = abs(dy); + int base; + int x=x0,y=y0; + int err = 0; + int sy; + +#ifdef STB_VORBIS_DIVIDE_TABLE + if (adx < DIVTAB_DENOM && ady < DIVTAB_NUMER) { + if (dy < 0) { + base = -integer_divide_table[ady][adx]; + sy = base-1; + } else { + base = integer_divide_table[ady][adx]; + sy = base+1; + } + } else { + base = dy / adx; + if (dy < 0) + sy = base - 1; + else + sy = base+1; + } +#else + base = dy / adx; + if (dy < 0) + sy = base - 1; + else + sy = base+1; +#endif + ady -= abs(base) * adx; + if (x1 > n) x1 = n; + LINE_OP(output[x], inverse_db_table[y]); + for (++x; x < x1; ++x) { + err += ady; + if (err >= adx) { + err -= adx; + y += sy; + } else + y += base; + LINE_OP(output[x], inverse_db_table[y]); + } +} + +static int residue_decode(vorb *f, Codebook *book, float *target, int offset, int n, int rtype) +{ + int k; + if (rtype == 0) { + int step = n / book->dimensions; + for (k=0; k < step; ++k) + if (!codebook_decode_step(f, book, target+offset+k, n-offset-k, step)) + return FALSE; + } else { + for (k=0; k < n; ) { + if (!codebook_decode(f, book, target+offset, n-k)) + return FALSE; + k += book->dimensions; + offset += book->dimensions; + } + } + return TRUE; +} + +static void decode_residue(vorb *f, float *residue_buffers[], int ch, int n, int rn, uint8 *do_not_decode) +{ + int i,j,pass; + Residue *r = f->residue_config + rn; + int rtype = f->residue_types[rn]; + int c = r->classbook; + int classwords = f->codebooks[c].dimensions; + int n_read = r->end - r->begin; + int part_read = n_read / r->part_size; + int temp_alloc_point = temp_alloc_save(f); + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + uint8 ***part_classdata = (uint8 ***) temp_block_array(f,f->channels, part_read * sizeof(**part_classdata)); + #else + int **classifications = (int **) temp_block_array(f,f->channels, part_read * sizeof(**classifications)); + #endif + + stb_prof(2); + for (i=0; i < ch; ++i) + if (!do_not_decode[i]) + memset(residue_buffers[i], 0, sizeof(float) * n); + + if (rtype == 2 && ch != 1) { + int len = ch * n; + for (j=0; j < ch; ++j) + if (!do_not_decode[j]) + break; + if (j == ch) + goto done; + + stb_prof(3); + for (pass=0; pass < 8; ++pass) { + int pcount = 0, class_set = 0; + if (ch == 2) { + stb_prof(13); + while (pcount < part_read) { + int z = r->begin + pcount*r->part_size; + int c_inter = (z & 1), p_inter = z>>1; + if (pass == 0) { + Codebook *c = f->codebooks+r->classbook; + int q; + DECODE(q,f,c); + if (q == EOP) goto done; + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + part_classdata[0][class_set] = r->classdata[q]; + #else + for (i=classwords-1; i >= 0; --i) { + classifications[0][i+pcount] = q % r->classifications; + q /= r->classifications; + } + #endif + } + stb_prof(5); + for (i=0; i < classwords && pcount < part_read; ++i, ++pcount) { + int z = r->begin + pcount*r->part_size; + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + int c = part_classdata[0][class_set][i]; + #else + int c = classifications[0][pcount]; + #endif + int b = r->residue_books[c][pass]; + if (b >= 0) { + Codebook *book = f->codebooks + b; + stb_prof(20); // accounts for X time + #ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK + if (!codebook_decode_deinterleave_repeat(f, book, residue_buffers, ch, &c_inter, &p_inter, n, r->part_size)) + goto done; + #else + // saves 1% + if (!codebook_decode_deinterleave_repeat_2(f, book, residue_buffers, &c_inter, &p_inter, n, r->part_size)) + goto done; + #endif + stb_prof(7); + } else { + z += r->part_size; + c_inter = z & 1; + p_inter = z >> 1; + } + } + stb_prof(8); + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + ++class_set; + #endif + } + } else if (ch == 1) { + while (pcount < part_read) { + int z = r->begin + pcount*r->part_size; + int c_inter = 0, p_inter = z; + if (pass == 0) { + Codebook *c = f->codebooks+r->classbook; + int q; + DECODE(q,f,c); + if (q == EOP) goto done; + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + part_classdata[0][class_set] = r->classdata[q]; + #else + for (i=classwords-1; i >= 0; --i) { + classifications[0][i+pcount] = q % r->classifications; + q /= r->classifications; + } + #endif + } + for (i=0; i < classwords && pcount < part_read; ++i, ++pcount) { + int z = r->begin + pcount*r->part_size; + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + int c = part_classdata[0][class_set][i]; + #else + int c = classifications[0][pcount]; + #endif + int b = r->residue_books[c][pass]; + if (b >= 0) { + Codebook *book = f->codebooks + b; + stb_prof(22); + if (!codebook_decode_deinterleave_repeat(f, book, residue_buffers, ch, &c_inter, &p_inter, n, r->part_size)) + goto done; + stb_prof(3); + } else { + z += r->part_size; + c_inter = 0; + p_inter = z; + } + } + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + ++class_set; + #endif + } + } else { + while (pcount < part_read) { + int z = r->begin + pcount*r->part_size; + int c_inter = z % ch, p_inter = z/ch; + if (pass == 0) { + Codebook *c = f->codebooks+r->classbook; + int q; + DECODE(q,f,c); + if (q == EOP) goto done; + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + part_classdata[0][class_set] = r->classdata[q]; + #else + for (i=classwords-1; i >= 0; --i) { + classifications[0][i+pcount] = q % r->classifications; + q /= r->classifications; + } + #endif + } + for (i=0; i < classwords && pcount < part_read; ++i, ++pcount) { + int z = r->begin + pcount*r->part_size; + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + int c = part_classdata[0][class_set][i]; + #else + int c = classifications[0][pcount]; + #endif + int b = r->residue_books[c][pass]; + if (b >= 0) { + Codebook *book = f->codebooks + b; + stb_prof(22); + if (!codebook_decode_deinterleave_repeat(f, book, residue_buffers, ch, &c_inter, &p_inter, n, r->part_size)) + goto done; + stb_prof(3); + } else { + z += r->part_size; + c_inter = z % ch; + p_inter = z / ch; + } + } + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + ++class_set; + #endif + } + } + } + goto done; + } + stb_prof(9); + + for (pass=0; pass < 8; ++pass) { + int pcount = 0, class_set=0; + while (pcount < part_read) { + if (pass == 0) { + for (j=0; j < ch; ++j) { + if (!do_not_decode[j]) { + Codebook *c = f->codebooks+r->classbook; + int temp; + DECODE(temp,f,c); + if (temp == EOP) goto done; + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + part_classdata[j][class_set] = r->classdata[temp]; + #else + for (i=classwords-1; i >= 0; --i) { + classifications[j][i+pcount] = temp % r->classifications; + temp /= r->classifications; + } + #endif + } + } + } + for (i=0; i < classwords && pcount < part_read; ++i, ++pcount) { + for (j=0; j < ch; ++j) { + if (!do_not_decode[j]) { + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + int c = part_classdata[j][class_set][i]; + #else + int c = classifications[j][pcount]; + #endif + int b = r->residue_books[c][pass]; + if (b >= 0) { + float *target = residue_buffers[j]; + int offset = r->begin + pcount * r->part_size; + int n = r->part_size; + Codebook *book = f->codebooks + b; + if (!residue_decode(f, book, target, offset, n, rtype)) + goto done; + } + } + } + } + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + ++class_set; + #endif + } + } + done: + stb_prof(0); + temp_alloc_restore(f,temp_alloc_point); +} + + +#if 0 +// slow way for debugging +void inverse_mdct_slow(float *buffer, int n) +{ + int i,j; + int n2 = n >> 1; + float *x = (float *) malloc(sizeof(*x) * n2); + memcpy(x, buffer, sizeof(*x) * n2); + for (i=0; i < n; ++i) { + float acc = 0; + for (j=0; j < n2; ++j) + // formula from paper: + //acc += n/4.0f * x[j] * (float) cos(M_PI / 2 / n * (2 * i + 1 + n/2.0)*(2*j+1)); + // formula from wikipedia + //acc += 2.0f / n2 * x[j] * (float) cos(M_PI/n2 * (i + 0.5 + n2/2)*(j + 0.5)); + // these are equivalent, except the formula from the paper inverts the multiplier! + // however, what actually works is NO MULTIPLIER!?! + //acc += 64 * 2.0f / n2 * x[j] * (float) cos(M_PI/n2 * (i + 0.5 + n2/2)*(j + 0.5)); + acc += x[j] * (float) cos(M_PI / 2 / n * (2 * i + 1 + n/2.0)*(2*j+1)); + buffer[i] = acc; + } + free(x); +} +#elif 0 +// same as above, but just barely able to run in real time on modern machines +void inverse_mdct_slow(float *buffer, int n, vorb *f, int blocktype) +{ + float mcos[16384]; + int i,j; + int n2 = n >> 1, nmask = (n << 2) -1; + float *x = (float *) malloc(sizeof(*x) * n2); + memcpy(x, buffer, sizeof(*x) * n2); + for (i=0; i < 4*n; ++i) + mcos[i] = (float) cos(M_PI / 2 * i / n); + + for (i=0; i < n; ++i) { + float acc = 0; + for (j=0; j < n2; ++j) + acc += x[j] * mcos[(2 * i + 1 + n2)*(2*j+1) & nmask]; + buffer[i] = acc; + } + free(x); +} +#else +// transform to use a slow dct-iv; this is STILL basically trivial, +// but only requires half as many ops +void dct_iv_slow(float *buffer, int n) +{ + float mcos[16384]; + float x[2048]; + int i,j; + int n2 = n >> 1, nmask = (n << 3) - 1; + memcpy(x, buffer, sizeof(*x) * n); + for (i=0; i < 8*n; ++i) + mcos[i] = (float) cos(M_PI / 4 * i / n); + for (i=0; i < n; ++i) { + float acc = 0; + for (j=0; j < n; ++j) + acc += x[j] * mcos[((2 * i + 1)*(2*j+1)) & nmask]; + //acc += x[j] * cos(M_PI / n * (i + 0.5) * (j + 0.5)); + buffer[i] = acc; + } + free(x); +} + +void inverse_mdct_slow(float *buffer, int n, vorb *f, int blocktype) +{ + int i, n4 = n >> 2, n2 = n >> 1, n3_4 = n - n4; + float temp[4096]; + + memcpy(temp, buffer, n2 * sizeof(float)); + dct_iv_slow(temp, n2); // returns -c'-d, a-b' + + for (i=0; i < n4 ; ++i) buffer[i] = temp[i+n4]; // a-b' + for ( ; i < n3_4; ++i) buffer[i] = -temp[n3_4 - i - 1]; // b-a', c+d' + for ( ; i < n ; ++i) buffer[i] = -temp[i - n3_4]; // c'+d +} +#endif + +#ifndef LIBVORBIS_MDCT +#define LIBVORBIS_MDCT 0 +#endif + +#if LIBVORBIS_MDCT +// directly call the vorbis MDCT using an interface documented +// by Jeff Roberts... useful for performance comparison +typedef struct +{ + int n; + int log2n; + + float *trig; + int *bitrev; + + float scale; +} mdct_lookup; + +extern void mdct_init(mdct_lookup *lookup, int n); +extern void mdct_clear(mdct_lookup *l); +extern void mdct_backward(mdct_lookup *init, float *in, float *out); + +mdct_lookup M1,M2; + +void inverse_mdct(float *buffer, int n, vorb *f, int blocktype) +{ + mdct_lookup *M; + if (M1.n == n) M = &M1; + else if (M2.n == n) M = &M2; + else if (M1.n == 0) { mdct_init(&M1, n); M = &M1; } + else { + if (M2.n) __asm int 3; + mdct_init(&M2, n); + M = &M2; + } + + mdct_backward(M, buffer, buffer); +} +#endif + + +// the following were split out into separate functions while optimizing; +// they could be pushed back up but eh. __forceinline showed no change; +// they're probably already being inlined. +static void imdct_step3_iter0_loop(int n, float *e, int i_off, int k_off, float *A) +{ + float *ee0 = e + i_off; + float *ee2 = ee0 + k_off; + int i; + + assert((n & 3) == 0); + for (i=(n>>2); i > 0; --i) { + float k00_20, k01_21; + k00_20 = ee0[ 0] - ee2[ 0]; + k01_21 = ee0[-1] - ee2[-1]; + ee0[ 0] += ee2[ 0];//ee0[ 0] = ee0[ 0] + ee2[ 0]; + ee0[-1] += ee2[-1];//ee0[-1] = ee0[-1] + ee2[-1]; + ee2[ 0] = k00_20 * A[0] - k01_21 * A[1]; + ee2[-1] = k01_21 * A[0] + k00_20 * A[1]; + A += 8; + + k00_20 = ee0[-2] - ee2[-2]; + k01_21 = ee0[-3] - ee2[-3]; + ee0[-2] += ee2[-2];//ee0[-2] = ee0[-2] + ee2[-2]; + ee0[-3] += ee2[-3];//ee0[-3] = ee0[-3] + ee2[-3]; + ee2[-2] = k00_20 * A[0] - k01_21 * A[1]; + ee2[-3] = k01_21 * A[0] + k00_20 * A[1]; + A += 8; + + k00_20 = ee0[-4] - ee2[-4]; + k01_21 = ee0[-5] - ee2[-5]; + ee0[-4] += ee2[-4];//ee0[-4] = ee0[-4] + ee2[-4]; + ee0[-5] += ee2[-5];//ee0[-5] = ee0[-5] + ee2[-5]; + ee2[-4] = k00_20 * A[0] - k01_21 * A[1]; + ee2[-5] = k01_21 * A[0] + k00_20 * A[1]; + A += 8; + + k00_20 = ee0[-6] - ee2[-6]; + k01_21 = ee0[-7] - ee2[-7]; + ee0[-6] += ee2[-6];//ee0[-6] = ee0[-6] + ee2[-6]; + ee0[-7] += ee2[-7];//ee0[-7] = ee0[-7] + ee2[-7]; + ee2[-6] = k00_20 * A[0] - k01_21 * A[1]; + ee2[-7] = k01_21 * A[0] + k00_20 * A[1]; + A += 8; + ee0 -= 8; + ee2 -= 8; + } +} + +static void imdct_step3_inner_r_loop(int lim, float *e, int d0, int k_off, float *A, int k1) +{ + int i; + float k00_20, k01_21; + + float *e0 = e + d0; + float *e2 = e0 + k_off; + + for (i=lim >> 2; i > 0; --i) { + k00_20 = e0[-0] - e2[-0]; + k01_21 = e0[-1] - e2[-1]; + e0[-0] += e2[-0];//e0[-0] = e0[-0] + e2[-0]; + e0[-1] += e2[-1];//e0[-1] = e0[-1] + e2[-1]; + e2[-0] = (k00_20)*A[0] - (k01_21) * A[1]; + e2[-1] = (k01_21)*A[0] + (k00_20) * A[1]; + + A += k1; + + k00_20 = e0[-2] - e2[-2]; + k01_21 = e0[-3] - e2[-3]; + e0[-2] += e2[-2];//e0[-2] = e0[-2] + e2[-2]; + e0[-3] += e2[-3];//e0[-3] = e0[-3] + e2[-3]; + e2[-2] = (k00_20)*A[0] - (k01_21) * A[1]; + e2[-3] = (k01_21)*A[0] + (k00_20) * A[1]; + + A += k1; + + k00_20 = e0[-4] - e2[-4]; + k01_21 = e0[-5] - e2[-5]; + e0[-4] += e2[-4];//e0[-4] = e0[-4] + e2[-4]; + e0[-5] += e2[-5];//e0[-5] = e0[-5] + e2[-5]; + e2[-4] = (k00_20)*A[0] - (k01_21) * A[1]; + e2[-5] = (k01_21)*A[0] + (k00_20) * A[1]; + + A += k1; + + k00_20 = e0[-6] - e2[-6]; + k01_21 = e0[-7] - e2[-7]; + e0[-6] += e2[-6];//e0[-6] = e0[-6] + e2[-6]; + e0[-7] += e2[-7];//e0[-7] = e0[-7] + e2[-7]; + e2[-6] = (k00_20)*A[0] - (k01_21) * A[1]; + e2[-7] = (k01_21)*A[0] + (k00_20) * A[1]; + + e0 -= 8; + e2 -= 8; + + A += k1; + } +} + +static void imdct_step3_inner_s_loop(int n, float *e, int i_off, int k_off, float *A, int a_off, int k0) +{ + int i; + float A0 = A[0]; + float A1 = A[0+1]; + float A2 = A[0+a_off]; + float A3 = A[0+a_off+1]; + float A4 = A[0+a_off*2+0]; + float A5 = A[0+a_off*2+1]; + float A6 = A[0+a_off*3+0]; + float A7 = A[0+a_off*3+1]; + + float k00,k11; + + float *ee0 = e +i_off; + float *ee2 = ee0+k_off; + + for (i=n; i > 0; --i) { + k00 = ee0[ 0] - ee2[ 0]; + k11 = ee0[-1] - ee2[-1]; + ee0[ 0] = ee0[ 0] + ee2[ 0]; + ee0[-1] = ee0[-1] + ee2[-1]; + ee2[ 0] = (k00) * A0 - (k11) * A1; + ee2[-1] = (k11) * A0 + (k00) * A1; + + k00 = ee0[-2] - ee2[-2]; + k11 = ee0[-3] - ee2[-3]; + ee0[-2] = ee0[-2] + ee2[-2]; + ee0[-3] = ee0[-3] + ee2[-3]; + ee2[-2] = (k00) * A2 - (k11) * A3; + ee2[-3] = (k11) * A2 + (k00) * A3; + + k00 = ee0[-4] - ee2[-4]; + k11 = ee0[-5] - ee2[-5]; + ee0[-4] = ee0[-4] + ee2[-4]; + ee0[-5] = ee0[-5] + ee2[-5]; + ee2[-4] = (k00) * A4 - (k11) * A5; + ee2[-5] = (k11) * A4 + (k00) * A5; + + k00 = ee0[-6] - ee2[-6]; + k11 = ee0[-7] - ee2[-7]; + ee0[-6] = ee0[-6] + ee2[-6]; + ee0[-7] = ee0[-7] + ee2[-7]; + ee2[-6] = (k00) * A6 - (k11) * A7; + ee2[-7] = (k11) * A6 + (k00) * A7; + + ee0 -= k0; + ee2 -= k0; + } +} + +static __forceinline void iter_54(float *z) +{ + float k00,k11,k22,k33; + float y0,y1,y2,y3; + + k00 = z[ 0] - z[-4]; + y0 = z[ 0] + z[-4]; + y2 = z[-2] + z[-6]; + k22 = z[-2] - z[-6]; + + z[-0] = y0 + y2; // z0 + z4 + z2 + z6 + z[-2] = y0 - y2; // z0 + z4 - z2 - z6 + + // done with y0,y2 + + k33 = z[-3] - z[-7]; + + z[-4] = k00 + k33; // z0 - z4 + z3 - z7 + z[-6] = k00 - k33; // z0 - z4 - z3 + z7 + + // done with k33 + + k11 = z[-1] - z[-5]; + y1 = z[-1] + z[-5]; + y3 = z[-3] + z[-7]; + + z[-1] = y1 + y3; // z1 + z5 + z3 + z7 + z[-3] = y1 - y3; // z1 + z5 - z3 - z7 + z[-5] = k11 - k22; // z1 - z5 + z2 - z6 + z[-7] = k11 + k22; // z1 - z5 - z2 + z6 +} + +static void imdct_step3_inner_s_loop_ld654(int n, float *e, int i_off, float *A, int base_n) +{ + int k_off = -8; + int a_off = base_n >> 3; + float A2 = A[0+a_off]; + float *z = e + i_off; + float *base = z - 16 * n; + + while (z > base) { + float k00,k11; + + k00 = z[-0] - z[-8]; + k11 = z[-1] - z[-9]; + z[-0] = z[-0] + z[-8]; + z[-1] = z[-1] + z[-9]; + z[-8] = k00; + z[-9] = k11 ; + + k00 = z[ -2] - z[-10]; + k11 = z[ -3] - z[-11]; + z[ -2] = z[ -2] + z[-10]; + z[ -3] = z[ -3] + z[-11]; + z[-10] = (k00+k11) * A2; + z[-11] = (k11-k00) * A2; + + k00 = z[-12] - z[ -4]; // reverse to avoid a unary negation + k11 = z[ -5] - z[-13]; + z[ -4] = z[ -4] + z[-12]; + z[ -5] = z[ -5] + z[-13]; + z[-12] = k11; + z[-13] = k00; + + k00 = z[-14] - z[ -6]; // reverse to avoid a unary negation + k11 = z[ -7] - z[-15]; + z[ -6] = z[ -6] + z[-14]; + z[ -7] = z[ -7] + z[-15]; + z[-14] = (k00+k11) * A2; + z[-15] = (k00-k11) * A2; + + iter_54(z); + iter_54(z-8); + z -= 16; + } +} + +static void inverse_mdct(float *buffer, int n, vorb *f, int blocktype) +{ + int n2 = n >> 1, n4 = n >> 2, n8 = n >> 3, l; + int n3_4 = n - n4, ld; + // @OPTIMIZE: reduce register pressure by using fewer variables? + int save_point = temp_alloc_save(f); + float *buf2 = (float *) temp_alloc(f, n2 * sizeof(*buf2)); + float *u=NULL,*v=NULL; + // twiddle factors + float *A = f->A[blocktype]; + + // IMDCT algorithm from "The use of multirate filter banks for coding of high quality digital audio" + // See notes about bugs in that paper in less-optimal implementation 'inverse_mdct_old' after this function. + + // kernel from paper + + + // merged: + // copy and reflect spectral data + // step 0 + + // note that it turns out that the items added together during + // this step are, in fact, being added to themselves (as reflected + // by step 0). inexplicable inefficiency! this became obvious + // once I combined the passes. + + // so there's a missing 'times 2' here (for adding X to itself). + // this propogates through linearly to the end, where the numbers + // are 1/2 too small, and need to be compensated for. + + { + float *d,*e, *AA, *e_stop; + d = &buf2[n2-2]; + AA = A; + e = &buffer[0]; + e_stop = &buffer[n2]; + while (e != e_stop) { + d[1] = (e[0] * AA[0] - e[2]*AA[1]); + d[0] = (e[0] * AA[1] + e[2]*AA[0]); + d -= 2; + AA += 2; + e += 4; + } + + e = &buffer[n2-3]; + while (d >= buf2) { + d[1] = (-e[2] * AA[0] - -e[0]*AA[1]); + d[0] = (-e[2] * AA[1] + -e[0]*AA[0]); + d -= 2; + AA += 2; + e -= 4; + } + } + + // now we use symbolic names for these, so that we can + // possibly swap their meaning as we change which operations + // are in place + + u = buffer; + v = buf2; + + // step 2 (paper output is w, now u) + // this could be in place, but the data ends up in the wrong + // place... _somebody_'s got to swap it, so this is nominated + { + float *AA = &A[n2-8]; + float *d0,*d1, *e0, *e1; + + e0 = &v[n4]; + e1 = &v[0]; + + d0 = &u[n4]; + d1 = &u[0]; + + while (AA >= A) { + float v40_20, v41_21; + + v41_21 = e0[1] - e1[1]; + v40_20 = e0[0] - e1[0]; + d0[1] = e0[1] + e1[1]; + d0[0] = e0[0] + e1[0]; + d1[1] = v41_21*AA[4] - v40_20*AA[5]; + d1[0] = v40_20*AA[4] + v41_21*AA[5]; + + v41_21 = e0[3] - e1[3]; + v40_20 = e0[2] - e1[2]; + d0[3] = e0[3] + e1[3]; + d0[2] = e0[2] + e1[2]; + d1[3] = v41_21*AA[0] - v40_20*AA[1]; + d1[2] = v40_20*AA[0] + v41_21*AA[1]; + + AA -= 8; + + d0 += 4; + d1 += 4; + e0 += 4; + e1 += 4; + } + } + + // step 3 + ld = ilog(n) - 1; // ilog is off-by-one from normal definitions + + // optimized step 3: + + // the original step3 loop can be nested r inside s or s inside r; + // it's written originally as s inside r, but this is dumb when r + // iterates many times, and s few. So I have two copies of it and + // switch between them halfway. + + // this is iteration 0 of step 3 + imdct_step3_iter0_loop(n >> 4, u, n2-1-n4*0, -(n >> 3), A); + imdct_step3_iter0_loop(n >> 4, u, n2-1-n4*1, -(n >> 3), A); + + // this is iteration 1 of step 3 + imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*0, -(n >> 4), A, 16); + imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*1, -(n >> 4), A, 16); + imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*2, -(n >> 4), A, 16); + imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*3, -(n >> 4), A, 16); + + l=2; + for (; l < (ld-3)>>1; ++l) { + int k0 = n >> (l+2), k0_2 = k0>>1; + int lim = 1 << (l+1); + int i; + for (i=0; i < lim; ++i) + imdct_step3_inner_r_loop(n >> (l+4), u, n2-1 - k0*i, -k0_2, A, 1 << (l+3)); + } + + for (; l < ld-6; ++l) { + int k0 = n >> (l+2), k1 = 1 << (l+3), k0_2 = k0>>1; + int rlim = n >> (l+6), r; + int lim = 1 << (l+1); + int i_off; + float *A0 = A; + i_off = n2-1; + for (r=rlim; r > 0; --r) { + imdct_step3_inner_s_loop(lim, u, i_off, -k0_2, A0, k1, k0); + A0 += k1*4; + i_off -= 8; + } + } + + // iterations with count: + // ld-6,-5,-4 all interleaved together + // the big win comes from getting rid of needless flops + // due to the constants on pass 5 & 4 being all 1 and 0; + // combining them to be simultaneous to improve cache made little difference + imdct_step3_inner_s_loop_ld654(n >> 5, u, n2-1, A, n); + + // output is u + + // step 4, 5, and 6 + // cannot be in-place because of step 5 + { + uint16 *bitrev = f->bit_reverse[blocktype]; + // weirdly, I'd have thought reading sequentially and writing + // erratically would have been better than vice-versa, but in + // fact that's not what my testing showed. (That is, with + // j = bitreverse(i), do you read i and write j, or read j and write i.) + + float *d0 = &v[n4-4]; + float *d1 = &v[n2-4]; + while (d0 >= v) { + int k4; + + k4 = bitrev[0]; + d1[3] = u[k4+0]; + d1[2] = u[k4+1]; + d0[3] = u[k4+2]; + d0[2] = u[k4+3]; + + k4 = bitrev[1]; + d1[1] = u[k4+0]; + d1[0] = u[k4+1]; + d0[1] = u[k4+2]; + d0[0] = u[k4+3]; + + d0 -= 4; + d1 -= 4; + bitrev += 2; + } + } + // (paper output is u, now v) + + + // data must be in buf2 + assert(v == buf2); + + // step 7 (paper output is v, now v) + // this is now in place + { + float *C = f->C[blocktype]; + float *d, *e; + + d = v; + e = v + n2 - 4; + + while (d < e) { + float a02,a11,b0,b1,b2,b3; + + a02 = d[0] - e[2]; + a11 = d[1] + e[3]; + + b0 = C[1]*a02 + C[0]*a11; + b1 = C[1]*a11 - C[0]*a02; + + b2 = d[0] + e[ 2]; + b3 = d[1] - e[ 3]; + + d[0] = b2 + b0; + d[1] = b3 + b1; + e[2] = b2 - b0; + e[3] = b1 - b3; + + a02 = d[2] - e[0]; + a11 = d[3] + e[1]; + + b0 = C[3]*a02 + C[2]*a11; + b1 = C[3]*a11 - C[2]*a02; + + b2 = d[2] + e[ 0]; + b3 = d[3] - e[ 1]; + + d[2] = b2 + b0; + d[3] = b3 + b1; + e[0] = b2 - b0; + e[1] = b1 - b3; + + C += 4; + d += 4; + e -= 4; + } + } + + // data must be in buf2 + + + // step 8+decode (paper output is X, now buffer) + // this generates pairs of data a la 8 and pushes them directly through + // the decode kernel (pushing rather than pulling) to avoid having + // to make another pass later + + // this cannot POSSIBLY be in place, so we refer to the buffers directly + + { + float *d0,*d1,*d2,*d3; + + float *B = f->B[blocktype] + n2 - 8; + float *e = buf2 + n2 - 8; + d0 = &buffer[0]; + d1 = &buffer[n2-4]; + d2 = &buffer[n2]; + d3 = &buffer[n-4]; + while (e >= v) { + float p0,p1,p2,p3; + + p3 = e[6]*B[7] - e[7]*B[6]; + p2 = -e[6]*B[6] - e[7]*B[7]; + + d0[0] = p3; + d1[3] = - p3; + d2[0] = p2; + d3[3] = p2; + + p1 = e[4]*B[5] - e[5]*B[4]; + p0 = -e[4]*B[4] - e[5]*B[5]; + + d0[1] = p1; + d1[2] = - p1; + d2[1] = p0; + d3[2] = p0; + + p3 = e[2]*B[3] - e[3]*B[2]; + p2 = -e[2]*B[2] - e[3]*B[3]; + + d0[2] = p3; + d1[1] = - p3; + d2[2] = p2; + d3[1] = p2; + + p1 = e[0]*B[1] - e[1]*B[0]; + p0 = -e[0]*B[0] - e[1]*B[1]; + + d0[3] = p1; + d1[0] = - p1; + d2[3] = p0; + d3[0] = p0; + + B -= 8; + e -= 8; + d0 += 4; + d2 += 4; + d1 -= 4; + d3 -= 4; + } + } + + temp_alloc_restore(f,save_point); +} + +#if 0 +// this is the original version of the above code, if you want to optimize it from scratch +void inverse_mdct_naive(float *buffer, int n) +{ + float s; + float A[1 << 12], B[1 << 12], C[1 << 11]; + int i,k,k2,k4, n2 = n >> 1, n4 = n >> 2, n8 = n >> 3, l; + int n3_4 = n - n4, ld; + // how can they claim this only uses N words?! + // oh, because they're only used sparsely, whoops + float u[1 << 13], X[1 << 13], v[1 << 13], w[1 << 13]; + // set up twiddle factors + + for (k=k2=0; k < n4; ++k,k2+=2) { + A[k2 ] = (float) cos(4*k*M_PI/n); + A[k2+1] = (float) -sin(4*k*M_PI/n); + B[k2 ] = (float) cos((k2+1)*M_PI/n/2); + B[k2+1] = (float) sin((k2+1)*M_PI/n/2); + } + for (k=k2=0; k < n8; ++k,k2+=2) { + C[k2 ] = (float) cos(2*(k2+1)*M_PI/n); + C[k2+1] = (float) -sin(2*(k2+1)*M_PI/n); + } + + // IMDCT algorithm from "The use of multirate filter banks for coding of high quality digital audio" + // Note there are bugs in that pseudocode, presumably due to them attempting + // to rename the arrays nicely rather than representing the way their actual + // implementation bounces buffers back and forth. As a result, even in the + // "some formulars corrected" version, a direct implementation fails. These + // are noted below as "paper bug". + + // copy and reflect spectral data + for (k=0; k < n2; ++k) u[k] = buffer[k]; + for ( ; k < n ; ++k) u[k] = -buffer[n - k - 1]; + // kernel from paper + // step 1 + for (k=k2=k4=0; k < n4; k+=1, k2+=2, k4+=4) { + v[n-k4-1] = (u[k4] - u[n-k4-1]) * A[k2] - (u[k4+2] - u[n-k4-3])*A[k2+1]; + v[n-k4-3] = (u[k4] - u[n-k4-1]) * A[k2+1] + (u[k4+2] - u[n-k4-3])*A[k2]; + } + // step 2 + for (k=k4=0; k < n8; k+=1, k4+=4) { + w[n2+3+k4] = v[n2+3+k4] + v[k4+3]; + w[n2+1+k4] = v[n2+1+k4] + v[k4+1]; + w[k4+3] = (v[n2+3+k4] - v[k4+3])*A[n2-4-k4] - (v[n2+1+k4]-v[k4+1])*A[n2-3-k4]; + w[k4+1] = (v[n2+1+k4] - v[k4+1])*A[n2-4-k4] + (v[n2+3+k4]-v[k4+3])*A[n2-3-k4]; + } + // step 3 + ld = ilog(n) - 1; // ilog is off-by-one from normal definitions + for (l=0; l < ld-3; ++l) { + int k0 = n >> (l+2), k1 = 1 << (l+3); + int rlim = n >> (l+4), r4, r; + int s2lim = 1 << (l+2), s2; + for (r=r4=0; r < rlim; r4+=4,++r) { + for (s2=0; s2 < s2lim; s2+=2) { + u[n-1-k0*s2-r4] = w[n-1-k0*s2-r4] + w[n-1-k0*(s2+1)-r4]; + u[n-3-k0*s2-r4] = w[n-3-k0*s2-r4] + w[n-3-k0*(s2+1)-r4]; + u[n-1-k0*(s2+1)-r4] = (w[n-1-k0*s2-r4] - w[n-1-k0*(s2+1)-r4]) * A[r*k1] + - (w[n-3-k0*s2-r4] - w[n-3-k0*(s2+1)-r4]) * A[r*k1+1]; + u[n-3-k0*(s2+1)-r4] = (w[n-3-k0*s2-r4] - w[n-3-k0*(s2+1)-r4]) * A[r*k1] + + (w[n-1-k0*s2-r4] - w[n-1-k0*(s2+1)-r4]) * A[r*k1+1]; + } + } + if (l+1 < ld-3) { + // paper bug: ping-ponging of u&w here is omitted + memcpy(w, u, sizeof(u)); + } + } + + // step 4 + for (i=0; i < n8; ++i) { + int j = bit_reverse(i) >> (32-ld+3); + assert(j < n8); + if (i == j) { + // paper bug: original code probably swapped in place; if copying, + // need to directly copy in this case + int i8 = i << 3; + v[i8+1] = u[i8+1]; + v[i8+3] = u[i8+3]; + v[i8+5] = u[i8+5]; + v[i8+7] = u[i8+7]; + } else if (i < j) { + int i8 = i << 3, j8 = j << 3; + v[j8+1] = u[i8+1], v[i8+1] = u[j8 + 1]; + v[j8+3] = u[i8+3], v[i8+3] = u[j8 + 3]; + v[j8+5] = u[i8+5], v[i8+5] = u[j8 + 5]; + v[j8+7] = u[i8+7], v[i8+7] = u[j8 + 7]; + } + } + // step 5 + for (k=0; k < n2; ++k) { + w[k] = v[k*2+1]; + } + // step 6 + for (k=k2=k4=0; k < n8; ++k, k2 += 2, k4 += 4) { + u[n-1-k2] = w[k4]; + u[n-2-k2] = w[k4+1]; + u[n3_4 - 1 - k2] = w[k4+2]; + u[n3_4 - 2 - k2] = w[k4+3]; + } + // step 7 + for (k=k2=0; k < n8; ++k, k2 += 2) { + v[n2 + k2 ] = ( u[n2 + k2] + u[n-2-k2] + C[k2+1]*(u[n2+k2]-u[n-2-k2]) + C[k2]*(u[n2+k2+1]+u[n-2-k2+1]))/2; + v[n-2 - k2] = ( u[n2 + k2] + u[n-2-k2] - C[k2+1]*(u[n2+k2]-u[n-2-k2]) - C[k2]*(u[n2+k2+1]+u[n-2-k2+1]))/2; + v[n2+1+ k2] = ( u[n2+1+k2] - u[n-1-k2] + C[k2+1]*(u[n2+1+k2]+u[n-1-k2]) - C[k2]*(u[n2+k2]-u[n-2-k2]))/2; + v[n-1 - k2] = (-u[n2+1+k2] + u[n-1-k2] + C[k2+1]*(u[n2+1+k2]+u[n-1-k2]) - C[k2]*(u[n2+k2]-u[n-2-k2]))/2; + } + // step 8 + for (k=k2=0; k < n4; ++k,k2 += 2) { + X[k] = v[k2+n2]*B[k2 ] + v[k2+1+n2]*B[k2+1]; + X[n2-1-k] = v[k2+n2]*B[k2+1] - v[k2+1+n2]*B[k2 ]; + } + + // decode kernel to output + // determined the following value experimentally + // (by first figuring out what made inverse_mdct_slow work); then matching that here + // (probably vorbis encoder premultiplies by n or n/2, to save it on the decoder?) + s = 0.5; // theoretically would be n4 + + // [[[ note! the s value of 0.5 is compensated for by the B[] in the current code, + // so it needs to use the "old" B values to behave correctly, or else + // set s to 1.0 ]]] + for (i=0; i < n4 ; ++i) buffer[i] = s * X[i+n4]; + for ( ; i < n3_4; ++i) buffer[i] = -s * X[n3_4 - i - 1]; + for ( ; i < n ; ++i) buffer[i] = -s * X[i - n3_4]; +} +#endif + +static float *get_window(vorb *f, int len) +{ + len <<= 1; + if (len == f->blocksize_0) return f->window[0]; + if (len == f->blocksize_1) return f->window[1]; + assert(0); + return NULL; +} + +#ifndef STB_VORBIS_NO_DEFER_FLOOR +typedef int16 YTYPE; +#else +typedef int YTYPE; +#endif +static int do_floor(vorb *f, Mapping *map, int i, int n, float *target, YTYPE *finalY, uint8 *step2_flag) +{ + int n2 = n >> 1; + int s = map->chan[i].mux, floor; + floor = map->submap_floor[s]; + if (f->floor_types[floor] == 0) { + return error(f, VORBIS_invalid_stream); + } else { + Floor1 *g = &f->floor_config[floor].floor1; + int j,q; + int lx = 0, ly = finalY[0] * g->floor1_multiplier; + for (q=1; q < g->values; ++q) { + j = g->sorted_order[q]; + #ifndef STB_VORBIS_NO_DEFER_FLOOR + if (finalY[j] >= 0) + #else + if (step2_flag[j]) + #endif + { + int hy = finalY[j] * g->floor1_multiplier; + int hx = g->Xlist[j]; + draw_line(target, lx,ly, hx,hy, n2); + lx = hx, ly = hy; + } + } + if (lx < n2) + // optimization of: draw_line(target, lx,ly, n,ly, n2); + for (j=lx; j < n2; ++j) + LINE_OP(target[j], inverse_db_table[ly]); + } + return TRUE; +} + +static int vorbis_decode_initial(vorb *f, int *p_left_start, int *p_left_end, int *p_right_start, int *p_right_end, int *mode) +{ + Mode *m; + int i, n, prev, next, window_center; + f->channel_buffer_start = f->channel_buffer_end = 0; + + retry: + if (f->eof) return FALSE; + if (!maybe_start_packet(f)) + return FALSE; + // check packet type + if (get_bits(f,1) != 0) { + if (IS_PUSH_MODE(f)) + return error(f,VORBIS_bad_packet_type); + while (EOP != get8_packet(f)); + goto retry; + } + + if (f->alloc.alloc_buffer) + assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset); + + i = get_bits(f, ilog(f->mode_count-1)); + if (i == EOP) return FALSE; + if (i >= f->mode_count) return FALSE; + *mode = i; + m = f->mode_config + i; + if (m->blockflag) { + n = f->blocksize_1; + prev = get_bits(f,1); + next = get_bits(f,1); + } else { + prev = next = 0; + n = f->blocksize_0; + } + +// WINDOWING + + window_center = n >> 1; + if (m->blockflag && !prev) { + *p_left_start = (n - f->blocksize_0) >> 2; + *p_left_end = (n + f->blocksize_0) >> 2; + } else { + *p_left_start = 0; + *p_left_end = window_center; + } + if (m->blockflag && !next) { + *p_right_start = (n*3 - f->blocksize_0) >> 2; + *p_right_end = (n*3 + f->blocksize_0) >> 2; + } else { + *p_right_start = window_center; + *p_right_end = n; + } + return TRUE; +} + +static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start, int left_end, int right_start, int right_end, int *p_left) +{ + Mapping *map; + int i,j,k,n,n2; + int zero_channel[256]; + int really_zero_channel[256]; + int window_center; + +// WINDOWING + + n = f->blocksize[m->blockflag]; + window_center = n >> 1; + + map = &f->mapping[m->mapping]; + +// FLOORS + n2 = n >> 1; + + stb_prof(1); + for (i=0; i < f->channels; ++i) { + int s = map->chan[i].mux, floor; + zero_channel[i] = FALSE; + floor = map->submap_floor[s]; + if (f->floor_types[floor] == 0) { + return error(f, VORBIS_invalid_stream); + } else { + Floor1 *g = &f->floor_config[floor].floor1; + if (get_bits(f, 1)) { + short *finalY; + uint8 step2_flag[256]; + static int range_list[4] = { 256, 128, 86, 64 }; + int range = range_list[g->floor1_multiplier-1]; + int offset = 2; + finalY = f->finalY[i]; + finalY[0] = get_bits(f, ilog(range)-1); + finalY[1] = get_bits(f, ilog(range)-1); + for (j=0; j < g->partitions; ++j) { + int pclass = g->partition_class_list[j]; + int cdim = g->class_dimensions[pclass]; + int cbits = g->class_subclasses[pclass]; + int csub = (1 << cbits)-1; + int cval = 0; + if (cbits) { + Codebook *c = f->codebooks + g->class_masterbooks[pclass]; + DECODE(cval,f,c); + } + for (k=0; k < cdim; ++k) { + int book = g->subclass_books[pclass][cval & csub]; + cval = cval >> cbits; + if (book >= 0) { + int temp; + Codebook *c = f->codebooks + book; + DECODE(temp,f,c); + finalY[offset++] = temp; + } else + finalY[offset++] = 0; + } + } + if (f->valid_bits == INVALID_BITS) goto error; // behavior according to spec + step2_flag[0] = step2_flag[1] = 1; + for (j=2; j < g->values; ++j) { + int low, high, pred, highroom, lowroom, room, val; + low = g->neighbors[j][0]; + high = g->neighbors[j][1]; + //neighbors(g->Xlist, j, &low, &high); + pred = predict_point(g->Xlist[j], g->Xlist[low], g->Xlist[high], finalY[low], finalY[high]); + val = finalY[j]; + highroom = range - pred; + lowroom = pred; + if (highroom < lowroom) + room = highroom * 2; + else + room = lowroom * 2; + if (val) { + step2_flag[low] = step2_flag[high] = 1; + step2_flag[j] = 1; + if (val >= room) + if (highroom > lowroom) + finalY[j] = val - lowroom + pred; + else + finalY[j] = pred - val + highroom - 1; + else + if (val & 1) + finalY[j] = pred - ((val+1)>>1); + else + finalY[j] = pred + (val>>1); + } else { + step2_flag[j] = 0; + finalY[j] = pred; + } + } + +#ifdef STB_VORBIS_NO_DEFER_FLOOR + do_floor(f, map, i, n, f->floor_buffers[i], finalY, step2_flag); +#else + // defer final floor computation until _after_ residue + for (j=0; j < g->values; ++j) { + if (!step2_flag[j]) + finalY[j] = -1; + } +#endif + } else { + error: + zero_channel[i] = TRUE; + } + // So we just defer everything else to later + + // at this point we've decoded the floor into buffer + } + } + stb_prof(0); + // at this point we've decoded all floors + + if (f->alloc.alloc_buffer) + assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset); + + // re-enable coupled channels if necessary + memcpy(really_zero_channel, zero_channel, sizeof(really_zero_channel[0]) * f->channels); + for (i=0; i < map->coupling_steps; ++i) + if (!zero_channel[map->chan[i].magnitude] || !zero_channel[map->chan[i].angle]) { + zero_channel[map->chan[i].magnitude] = zero_channel[map->chan[i].angle] = FALSE; + } + +// RESIDUE DECODE + for (i=0; i < map->submaps; ++i) { + float *residue_buffers[STB_VORBIS_MAX_CHANNELS]; + int r,t; + uint8 do_not_decode[256]; + int ch = 0; + for (j=0; j < f->channels; ++j) { + if (map->chan[j].mux == i) { + if (zero_channel[j]) { + do_not_decode[ch] = TRUE; + residue_buffers[ch] = NULL; + } else { + do_not_decode[ch] = FALSE; + residue_buffers[ch] = f->channel_buffers[j]; + } + ++ch; + } + } + r = map->submap_residue[i]; + t = f->residue_types[r]; + decode_residue(f, residue_buffers, ch, n2, r, do_not_decode); + } + + if (f->alloc.alloc_buffer) + assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset); + +// INVERSE COUPLING + stb_prof(14); + for (i = map->coupling_steps-1; i >= 0; --i) { + int n2 = n >> 1; + float *m = f->channel_buffers[map->chan[i].magnitude]; + float *a = f->channel_buffers[map->chan[i].angle ]; + for (j=0; j < n2; ++j) { + float a2,m2; + if (m[j] > 0) + if (a[j] > 0) + m2 = m[j], a2 = m[j] - a[j]; + else + a2 = m[j], m2 = m[j] + a[j]; + else + if (a[j] > 0) + m2 = m[j], a2 = m[j] + a[j]; + else + a2 = m[j], m2 = m[j] - a[j]; + m[j] = m2; + a[j] = a2; + } + } + + // finish decoding the floors +#ifndef STB_VORBIS_NO_DEFER_FLOOR + stb_prof(15); + for (i=0; i < f->channels; ++i) { + if (really_zero_channel[i]) { + memset(f->channel_buffers[i], 0, sizeof(*f->channel_buffers[i]) * n2); + } else { + do_floor(f, map, i, n, f->channel_buffers[i], f->finalY[i], NULL); + } + } +#else + for (i=0; i < f->channels; ++i) { + if (really_zero_channel[i]) { + memset(f->channel_buffers[i], 0, sizeof(*f->channel_buffers[i]) * n2); + } else { + for (j=0; j < n2; ++j) + f->channel_buffers[i][j] *= f->floor_buffers[i][j]; + } + } +#endif + +// INVERSE MDCT + stb_prof(16); + for (i=0; i < f->channels; ++i) + inverse_mdct(f->channel_buffers[i], n, f, m->blockflag); + stb_prof(0); + + // this shouldn't be necessary, unless we exited on an error + // and want to flush to get to the next packet + flush_packet(f); + + if (f->first_decode) { + // assume we start so first non-discarded sample is sample 0 + // this isn't to spec, but spec would require us to read ahead + // and decode the size of all current frames--could be done, + // but presumably it's not a commonly used feature + f->current_loc = -n2; // start of first frame is positioned for discard + // we might have to discard samples "from" the next frame too, + // if we're lapping a large block then a small at the start? + f->discard_samples_deferred = n - right_end; + f->current_loc_valid = TRUE; + f->first_decode = FALSE; + } else if (f->discard_samples_deferred) { + left_start += f->discard_samples_deferred; + *p_left = left_start; + f->discard_samples_deferred = 0; + } else if (f->previous_length == 0 && f->current_loc_valid) { + // we're recovering from a seek... that means we're going to discard + // the samples from this packet even though we know our position from + // the last page header, so we need to update the position based on + // the discarded samples here + // but wait, the code below is going to add this in itself even + // on a discard, so we don't need to do it here... + } + + // check if we have ogg information about the sample # for this packet + if (f->last_seg_which == f->end_seg_with_known_loc) { + // if we have a valid current loc, and this is final: + if (f->current_loc_valid && (f->page_flag & PAGEFLAG_last_page)) { + uint32 current_end = f->known_loc_for_packet - (n-right_end); + // then let's infer the size of the (probably) short final frame + if (current_end < f->current_loc + right_end) { + if (current_end < f->current_loc) { + // negative truncation, that's impossible! + *len = 0; + } else { + *len = current_end - f->current_loc; + } + *len += left_start; + f->current_loc += *len; + return TRUE; + } + } + // otherwise, just set our sample loc + // guess that the ogg granule pos refers to the _middle_ of the + // last frame? + // set f->current_loc to the position of left_start + f->current_loc = f->known_loc_for_packet - (n2-left_start); + f->current_loc_valid = TRUE; + } + if (f->current_loc_valid) + f->current_loc += (right_start - left_start); + + if (f->alloc.alloc_buffer) + assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset); + *len = right_end; // ignore samples after the window goes to 0 + return TRUE; +} + +static int vorbis_decode_packet(vorb *f, int *len, int *p_left, int *p_right) +{ + int mode, left_end, right_end; + if (!vorbis_decode_initial(f, p_left, &left_end, p_right, &right_end, &mode)) return 0; + return vorbis_decode_packet_rest(f, len, f->mode_config + mode, *p_left, left_end, *p_right, right_end, p_left); +} + +static int vorbis_finish_frame(stb_vorbis *f, int len, int left, int right) +{ + int prev,i,j; + // we use right&left (the start of the right- and left-window sin()-regions) + // to determine how much to return, rather than inferring from the rules + // (same result, clearer code); 'left' indicates where our sin() window + // starts, therefore where the previous window's right edge starts, and + // therefore where to start mixing from the previous buffer. 'right' + // indicates where our sin() ending-window starts, therefore that's where + // we start saving, and where our returned-data ends. + + // mixin from previous window + if (f->previous_length) { + int i,j, n = f->previous_length; + float *w = get_window(f, n); + for (i=0; i < f->channels; ++i) { + for (j=0; j < n; ++j) + f->channel_buffers[i][left+j] = + f->channel_buffers[i][left+j]*w[ j] + + f->previous_window[i][ j]*w[n-1-j]; + } + } + + prev = f->previous_length; + + // last half of this data becomes previous window + f->previous_length = len - right; + + // @OPTIMIZE: could avoid this copy by double-buffering the + // output (flipping previous_window with channel_buffers), but + // then previous_window would have to be 2x as large, and + // channel_buffers couldn't be temp mem (although they're NOT + // currently temp mem, they could be (unless we want to level + // performance by spreading out the computation)) + for (i=0; i < f->channels; ++i) + for (j=0; right+j < len; ++j) + f->previous_window[i][j] = f->channel_buffers[i][right+j]; + + if (!prev) + // there was no previous packet, so this data isn't valid... + // this isn't entirely true, only the would-have-overlapped data + // isn't valid, but this seems to be what the spec requires + return 0; + + // truncate a short frame + if (len < right) right = len; + + f->samples_output += right-left; + + return right - left; +} + +static void vorbis_pump_first_frame(stb_vorbis *f) +{ + int len, right, left; + if (vorbis_decode_packet(f, &len, &left, &right)) + vorbis_finish_frame(f, len, left, right); +} + +#ifndef STB_VORBIS_NO_PUSHDATA_API +static int is_whole_packet_present(stb_vorbis *f, int end_page) +{ + // make sure that we have the packet available before continuing... + // this requires a full ogg parse, but we know we can fetch from f->stream + + // instead of coding this out explicitly, we could save the current read state, + // read the next packet with get8() until end-of-packet, check f->eof, then + // reset the state? but that would be slower, esp. since we'd have over 256 bytes + // of state to restore (primarily the page segment table) + + int s = f->next_seg, first = TRUE; + uint8 *p = f->stream; + + if (s != -1) { // if we're not starting the packet with a 'continue on next page' flag + for (; s < f->segment_count; ++s) { + p += f->segments[s]; + if (f->segments[s] < 255) // stop at first short segment + break; + } + // either this continues, or it ends it... + if (end_page) + if (s < f->segment_count-1) return error(f, VORBIS_invalid_stream); + if (s == f->segment_count) + s = -1; // set 'crosses page' flag + if (p > f->stream_end) return error(f, VORBIS_need_more_data); + first = FALSE; + } + for (; s == -1;) { + uint8 *q; + int n; + + // check that we have the page header ready + if (p + 26 >= f->stream_end) return error(f, VORBIS_need_more_data); + // validate the page + if (memcmp(p, ogg_page_header, 4)) return error(f, VORBIS_invalid_stream); + if (p[4] != 0) return error(f, VORBIS_invalid_stream); + if (first) { // the first segment must NOT have 'continued_packet', later ones MUST + if (f->previous_length) + if ((p[5] & PAGEFLAG_continued_packet)) return error(f, VORBIS_invalid_stream); + // if no previous length, we're resynching, so we can come in on a continued-packet, + // which we'll just drop + } else { + if (!(p[5] & PAGEFLAG_continued_packet)) return error(f, VORBIS_invalid_stream); + } + n = p[26]; // segment counts + q = p+27; // q points to segment table + p = q + n; // advance past header + // make sure we've read the segment table + if (p > f->stream_end) return error(f, VORBIS_need_more_data); + for (s=0; s < n; ++s) { + p += q[s]; + if (q[s] < 255) + break; + } + if (end_page) + if (s < n-1) return error(f, VORBIS_invalid_stream); + if (s == f->segment_count) + s = -1; // set 'crosses page' flag + if (p > f->stream_end) return error(f, VORBIS_need_more_data); + first = FALSE; + } + return TRUE; +} +#endif // !STB_VORBIS_NO_PUSHDATA_API + +static int start_decoder(vorb *f) +{ + uint8 header[6], x,y; + int len,i,j,k, max_submaps = 0; + int longest_floorlist=0; + + // first page, first packet + + if (!start_page(f)) return FALSE; + // validate page flag + if (!(f->page_flag & PAGEFLAG_first_page)) return error(f, VORBIS_invalid_first_page); + if (f->page_flag & PAGEFLAG_last_page) return error(f, VORBIS_invalid_first_page); + if (f->page_flag & PAGEFLAG_continued_packet) return error(f, VORBIS_invalid_first_page); + // check for expected packet length + if (f->segment_count != 1) return error(f, VORBIS_invalid_first_page); + if (f->segments[0] != 30) return error(f, VORBIS_invalid_first_page); + // read packet + // check packet header + if (get8(f) != VORBIS_packet_id) return error(f, VORBIS_invalid_first_page); + if (!getn(f, header, 6)) return error(f, VORBIS_unexpected_eof); + if (!vorbis_validate(header)) return error(f, VORBIS_invalid_first_page); + // vorbis_version + if (get32(f) != 0) return error(f, VORBIS_invalid_first_page); + f->channels = get8(f); if (!f->channels) return error(f, VORBIS_invalid_first_page); + if (f->channels > STB_VORBIS_MAX_CHANNELS) return error(f, VORBIS_too_many_channels); + f->sample_rate = get32(f); if (!f->sample_rate) return error(f, VORBIS_invalid_first_page); + get32(f); // bitrate_maximum + get32(f); // bitrate_nominal + get32(f); // bitrate_minimum + x = get8(f); + { int log0,log1; + log0 = x & 15; + log1 = x >> 4; + f->blocksize_0 = 1 << log0; + f->blocksize_1 = 1 << log1; + if (log0 < 6 || log0 > 13) return error(f, VORBIS_invalid_setup); + if (log1 < 6 || log1 > 13) return error(f, VORBIS_invalid_setup); + if (log0 > log1) return error(f, VORBIS_invalid_setup); + } + + // framing_flag + x = get8(f); + if (!(x & 1)) return error(f, VORBIS_invalid_first_page); + + // second packet! + if (!start_page(f)) return FALSE; + + if (!start_packet(f)) return FALSE; + do { + len = next_segment(f); + skip(f, len); + f->bytes_in_seg = 0; + } while (len); + + // third packet! + if (!start_packet(f)) return FALSE; + + #ifndef STB_VORBIS_NO_PUSHDATA_API + if (IS_PUSH_MODE(f)) { + if (!is_whole_packet_present(f, TRUE)) { + // convert error in ogg header to write type + if (f->error == VORBIS_invalid_stream) + f->error = VORBIS_invalid_setup; + return FALSE; + } + } + #endif + + crc32_init(); // always init it, to avoid multithread race conditions + + if (get8_packet(f) != VORBIS_packet_setup) return error(f, VORBIS_invalid_setup); + for (i=0; i < 6; ++i) header[i] = get8_packet(f); + if (!vorbis_validate(header)) return error(f, VORBIS_invalid_setup); + + // codebooks + + f->codebook_count = get_bits(f,8) + 1; + f->codebooks = (Codebook *) setup_malloc(f, sizeof(*f->codebooks) * f->codebook_count); + if (f->codebooks == NULL) return error(f, VORBIS_outofmem); + memset(f->codebooks, 0, sizeof(*f->codebooks) * f->codebook_count); + for (i=0; i < f->codebook_count; ++i) { + uint32 *values; + int ordered, sorted_count; + int total=0; + uint8 *lengths; + Codebook *c = f->codebooks+i; + x = get_bits(f, 8); if (x != 0x42) return error(f, VORBIS_invalid_setup); + x = get_bits(f, 8); if (x != 0x43) return error(f, VORBIS_invalid_setup); + x = get_bits(f, 8); if (x != 0x56) return error(f, VORBIS_invalid_setup); + x = get_bits(f, 8); + c->dimensions = (get_bits(f, 8)<<8) + x; + x = get_bits(f, 8); + y = get_bits(f, 8); + c->entries = (get_bits(f, 8)<<16) + (y<<8) + x; + ordered = get_bits(f,1); + c->sparse = ordered ? 0 : get_bits(f,1); + + if (c->sparse) + lengths = (uint8 *) setup_temp_malloc(f, c->entries); + else + lengths = c->codeword_lengths = (uint8 *) setup_malloc(f, c->entries); + + if (!lengths) return error(f, VORBIS_outofmem); + + if (ordered) { + int current_entry = 0; + int current_length = get_bits(f,5) + 1; + while (current_entry < c->entries) { + int limit = c->entries - current_entry; + int n = get_bits(f, ilog(limit)); + if (current_entry + n > (int) c->entries) { return error(f, VORBIS_invalid_setup); } + memset(lengths + current_entry, current_length, n); + current_entry += n; + ++current_length; + } + } else { + for (j=0; j < c->entries; ++j) { + int present = c->sparse ? get_bits(f,1) : 1; + if (present) { + lengths[j] = get_bits(f, 5) + 1; + ++total; + } else { + lengths[j] = NO_CODE; + } + } + } + + if (c->sparse && total >= c->entries >> 2) { + // convert sparse items to non-sparse! + if (c->entries > (int) f->setup_temp_memory_required) + f->setup_temp_memory_required = c->entries; + + c->codeword_lengths = (uint8 *) setup_malloc(f, c->entries); + memcpy(c->codeword_lengths, lengths, c->entries); + setup_temp_free(f, lengths, c->entries); // note this is only safe if there have been no intervening temp mallocs! + lengths = c->codeword_lengths; + c->sparse = 0; + } + + // compute the size of the sorted tables + if (c->sparse) { + sorted_count = total; + //assert(total != 0); + } else { + sorted_count = 0; + #ifndef STB_VORBIS_NO_HUFFMAN_BINARY_SEARCH + for (j=0; j < c->entries; ++j) + if (lengths[j] > STB_VORBIS_FAST_HUFFMAN_LENGTH && lengths[j] != NO_CODE) + ++sorted_count; + #endif + } + + c->sorted_entries = sorted_count; + values = NULL; + + if (!c->sparse) { + c->codewords = (uint32 *) setup_malloc(f, sizeof(c->codewords[0]) * c->entries); + if (!c->codewords) return error(f, VORBIS_outofmem); + } else { + unsigned int size; + if (c->sorted_entries) { + c->codeword_lengths = (uint8 *) setup_malloc(f, c->sorted_entries); + if (!c->codeword_lengths) return error(f, VORBIS_outofmem); + c->codewords = (uint32 *) setup_temp_malloc(f, sizeof(*c->codewords) * c->sorted_entries); + if (!c->codewords) return error(f, VORBIS_outofmem); + values = (uint32 *) setup_temp_malloc(f, sizeof(*values) * c->sorted_entries); + if (!values) return error(f, VORBIS_outofmem); + } + size = c->entries + (sizeof(*c->codewords) + sizeof(*values)) * c->sorted_entries; + if (size > f->setup_temp_memory_required) + f->setup_temp_memory_required = size; + } + + if (!compute_codewords(c, lengths, c->entries, values)) { + if (c->sparse) setup_temp_free(f, values, 0); + return error(f, VORBIS_invalid_setup); + } + + if (c->sorted_entries) { + // allocate an extra slot for sentinels + c->sorted_codewords = (uint32 *) setup_malloc(f, sizeof(*c->sorted_codewords) * (c->sorted_entries+1)); + // allocate an extra slot at the front so that c->sorted_values[-1] is defined + // so that we can catch that case without an extra if + c->sorted_values = ( int *) setup_malloc(f, sizeof(*c->sorted_values ) * (c->sorted_entries+1)); + if (c->sorted_values) { ++c->sorted_values; c->sorted_values[-1] = -1; } + compute_sorted_huffman(c, lengths, values); + } + + if (c->sparse) { + setup_temp_free(f, values, sizeof(*values)*c->sorted_entries); + setup_temp_free(f, c->codewords, sizeof(*c->codewords)*c->sorted_entries); + setup_temp_free(f, lengths, c->entries); + c->codewords = NULL; + } + + compute_accelerated_huffman(c); + + c->lookup_type = get_bits(f, 4); + if (c->lookup_type > 2) return error(f, VORBIS_invalid_setup); + if (c->lookup_type > 0) { + uint16 *mults; + c->minimum_value = float32_unpack(get_bits(f, 32)); + c->delta_value = float32_unpack(get_bits(f, 32)); + c->value_bits = get_bits(f, 4)+1; + c->sequence_p = get_bits(f,1); + if (c->lookup_type == 1) { + c->lookup_values = lookup1_values(c->entries, c->dimensions); + } else { + c->lookup_values = c->entries * c->dimensions; + } + mults = (uint16 *) setup_temp_malloc(f, sizeof(mults[0]) * c->lookup_values); + if (mults == NULL) return error(f, VORBIS_outofmem); + for (j=0; j < (int) c->lookup_values; ++j) { + int q = get_bits(f, c->value_bits); + if (q == EOP) { setup_temp_free(f,mults,sizeof(mults[0])*c->lookup_values); return error(f, VORBIS_invalid_setup); } + mults[j] = q; + } + +#ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK + if (c->lookup_type == 1) { + int len, sparse = c->sparse; + // pre-expand the lookup1-style multiplicands, to avoid a divide in the inner loop + if (sparse) { + if (c->sorted_entries == 0) goto skip; + c->multiplicands = (codetype *) setup_malloc(f, sizeof(c->multiplicands[0]) * c->sorted_entries * c->dimensions); + } else + c->multiplicands = (codetype *) setup_malloc(f, sizeof(c->multiplicands[0]) * c->entries * c->dimensions); + if (c->multiplicands == NULL) { setup_temp_free(f,mults,sizeof(mults[0])*c->lookup_values); return error(f, VORBIS_outofmem); } + len = sparse ? c->sorted_entries : c->entries; + for (j=0; j < len; ++j) { + int z = sparse ? c->sorted_values[j] : j, div=1; + for (k=0; k < c->dimensions; ++k) { + int off = (z / div) % c->lookup_values; + c->multiplicands[j*c->dimensions + k] = + #ifndef STB_VORBIS_CODEBOOK_FLOATS + mults[off]; + #else + mults[off]*c->delta_value + c->minimum_value; + // in this case (and this case only) we could pre-expand c->sequence_p, + // and throw away the decode logic for it; have to ALSO do + // it in the case below, but it can only be done if + // STB_VORBIS_CODEBOOK_FLOATS + // !STB_VORBIS_DIVIDES_IN_CODEBOOK + #endif + div *= c->lookup_values; + } + } + setup_temp_free(f, mults,sizeof(mults[0])*c->lookup_values); + c->lookup_type = 2; + } + else +#endif + { + c->multiplicands = (codetype *) setup_malloc(f, sizeof(c->multiplicands[0]) * c->lookup_values); + #ifndef STB_VORBIS_CODEBOOK_FLOATS + memcpy(c->multiplicands, mults, sizeof(c->multiplicands[0]) * c->lookup_values); + #else + for (j=0; j < (int) c->lookup_values; ++j) + c->multiplicands[j] = mults[j] * c->delta_value + c->minimum_value; + setup_temp_free(f, mults,sizeof(mults[0])*c->lookup_values); + #endif + } + skip:; + + #ifdef STB_VORBIS_CODEBOOK_FLOATS + if (c->lookup_type == 2 && c->sequence_p) { + for (j=1; j < (int) c->lookup_values; ++j) + c->multiplicands[j] = c->multiplicands[j-1]; + c->sequence_p = 0; + } + #endif + } + } + + // time domain transfers (notused) + + x = get_bits(f, 6) + 1; + for (i=0; i < x; ++i) { + uint32 z = get_bits(f, 16); + if (z != 0) return error(f, VORBIS_invalid_setup); + } + + // Floors + f->floor_count = get_bits(f, 6)+1; + f->floor_config = (Floor *) setup_malloc(f, f->floor_count * sizeof(*f->floor_config)); + for (i=0; i < f->floor_count; ++i) { + f->floor_types[i] = get_bits(f, 16); + if (f->floor_types[i] > 1) return error(f, VORBIS_invalid_setup); + if (f->floor_types[i] == 0) { + Floor0 *g = &f->floor_config[i].floor0; + g->order = get_bits(f,8); + g->rate = get_bits(f,16); + g->bark_map_size = get_bits(f,16); + g->amplitude_bits = get_bits(f,6); + g->amplitude_offset = get_bits(f,8); + g->number_of_books = get_bits(f,4) + 1; + for (j=0; j < g->number_of_books; ++j) + g->book_list[j] = get_bits(f,8); + return error(f, VORBIS_feature_not_supported); + } else { + VorbisPoint p[31*8+2]; + Floor1 *g = &f->floor_config[i].floor1; + int max_class = -1; + g->partitions = get_bits(f, 5); + for (j=0; j < g->partitions; ++j) { + g->partition_class_list[j] = get_bits(f, 4); + if (g->partition_class_list[j] > max_class) + max_class = g->partition_class_list[j]; + } + for (j=0; j <= max_class; ++j) { + g->class_dimensions[j] = get_bits(f, 3)+1; + g->class_subclasses[j] = get_bits(f, 2); + if (g->class_subclasses[j]) { + g->class_masterbooks[j] = get_bits(f, 8); + if (g->class_masterbooks[j] >= f->codebook_count) return error(f, VORBIS_invalid_setup); + } + for (k=0; k < 1 << g->class_subclasses[j]; ++k) { + g->subclass_books[j][k] = get_bits(f,8)-1; + if (g->subclass_books[j][k] >= f->codebook_count) return error(f, VORBIS_invalid_setup); + } + } + g->floor1_multiplier = get_bits(f,2)+1; + g->rangebits = get_bits(f,4); + g->Xlist[0] = 0; + g->Xlist[1] = 1 << g->rangebits; + g->values = 2; + for (j=0; j < g->partitions; ++j) { + int c = g->partition_class_list[j]; + for (k=0; k < g->class_dimensions[c]; ++k) { + g->Xlist[g->values] = get_bits(f, g->rangebits); + ++g->values; + } + } + // precompute the sorting + for (j=0; j < g->values; ++j) { + p[j].x = g->Xlist[j]; + p[j].y = j; + } + qsort(p, g->values, sizeof(p[0]), point_compare); + for (j=0; j < g->values; ++j) + g->sorted_order[j] = (uint8) p[j].y; + // precompute the neighbors + for (j=2; j < g->values; ++j) { + int low,hi; + neighbors(g->Xlist, j, &low,&hi); + g->neighbors[j][0] = low; + g->neighbors[j][1] = hi; + } + + if (g->values > longest_floorlist) + longest_floorlist = g->values; + } + } + + // Residue + f->residue_count = get_bits(f, 6)+1; + f->residue_config = (Residue *) setup_malloc(f, f->residue_count * sizeof(*f->residue_config)); + for (i=0; i < f->residue_count; ++i) { + uint8 residue_cascade[64]; + Residue *r = f->residue_config+i; + f->residue_types[i] = get_bits(f, 16); + if (f->residue_types[i] > 2) return error(f, VORBIS_invalid_setup); + r->begin = get_bits(f, 24); + r->end = get_bits(f, 24); + r->part_size = get_bits(f,24)+1; + r->classifications = get_bits(f,6)+1; + r->classbook = get_bits(f,8); + for (j=0; j < r->classifications; ++j) { + uint8 high_bits=0; + uint8 low_bits=get_bits(f,3); + if (get_bits(f,1)) + high_bits = get_bits(f,5); + residue_cascade[j] = high_bits*8 + low_bits; + } + r->residue_books = (short (*)[8]) setup_malloc(f, sizeof(r->residue_books[0]) * r->classifications); + for (j=0; j < r->classifications; ++j) { + for (k=0; k < 8; ++k) { + if (residue_cascade[j] & (1 << k)) { + r->residue_books[j][k] = get_bits(f, 8); + if (r->residue_books[j][k] >= f->codebook_count) return error(f, VORBIS_invalid_setup); + } else { + r->residue_books[j][k] = -1; + } + } + } + // precompute the classifications[] array to avoid inner-loop mod/divide + // call it 'classdata' since we already have r->classifications + r->classdata = (uint8 **) setup_malloc(f, sizeof(*r->classdata) * f->codebooks[r->classbook].entries); + if (!r->classdata) return error(f, VORBIS_outofmem); + memset(r->classdata, 0, sizeof(*r->classdata) * f->codebooks[r->classbook].entries); + for (j=0; j < f->codebooks[r->classbook].entries; ++j) { + int classwords = f->codebooks[r->classbook].dimensions; + int temp = j; + r->classdata[j] = (uint8 *) setup_malloc(f, sizeof(r->classdata[j][0]) * classwords); + for (k=classwords-1; k >= 0; --k) { + r->classdata[j][k] = temp % r->classifications; + temp /= r->classifications; + } + } + } + + f->mapping_count = get_bits(f,6)+1; + f->mapping = (Mapping *) setup_malloc(f, f->mapping_count * sizeof(*f->mapping)); + for (i=0; i < f->mapping_count; ++i) { + Mapping *m = f->mapping + i; + int mapping_type = get_bits(f,16); + if (mapping_type != 0) return error(f, VORBIS_invalid_setup); + m->chan = (MappingChannel *) setup_malloc(f, f->channels * sizeof(*m->chan)); + if (get_bits(f,1)) + m->submaps = get_bits(f,4); + else + m->submaps = 1; + if (m->submaps > max_submaps) + max_submaps = m->submaps; + if (get_bits(f,1)) { + m->coupling_steps = get_bits(f,8)+1; + for (k=0; k < m->coupling_steps; ++k) { + m->chan[k].magnitude = get_bits(f, ilog(f->channels)-1); + m->chan[k].angle = get_bits(f, ilog(f->channels)-1); + if (m->chan[k].magnitude >= f->channels) return error(f, VORBIS_invalid_setup); + if (m->chan[k].angle >= f->channels) return error(f, VORBIS_invalid_setup); + if (m->chan[k].magnitude == m->chan[k].angle) return error(f, VORBIS_invalid_setup); + } + } else + m->coupling_steps = 0; + + // reserved field + if (get_bits(f,2)) return error(f, VORBIS_invalid_setup); + if (m->submaps > 1) { + for (j=0; j < f->channels; ++j) { + m->chan[j].mux = get_bits(f, 4); + if (m->chan[j].mux >= m->submaps) return error(f, VORBIS_invalid_setup); + } + } else + // @SPECIFICATION: this case is missing from the spec + for (j=0; j < f->channels; ++j) + m->chan[j].mux = 0; + + for (j=0; j < m->submaps; ++j) { + get_bits(f,8); // discard + m->submap_floor[j] = get_bits(f,8); + m->submap_residue[j] = get_bits(f,8); + if (m->submap_floor[j] >= f->floor_count) return error(f, VORBIS_invalid_setup); + if (m->submap_residue[j] >= f->residue_count) return error(f, VORBIS_invalid_setup); + } + } + + // Modes + f->mode_count = get_bits(f, 6)+1; + for (i=0; i < f->mode_count; ++i) { + Mode *m = f->mode_config+i; + m->blockflag = get_bits(f,1); + m->windowtype = get_bits(f,16); + m->transformtype = get_bits(f,16); + m->mapping = get_bits(f,8); + if (m->windowtype != 0) return error(f, VORBIS_invalid_setup); + if (m->transformtype != 0) return error(f, VORBIS_invalid_setup); + if (m->mapping >= f->mapping_count) return error(f, VORBIS_invalid_setup); + } + + flush_packet(f); + + f->previous_length = 0; + + for (i=0; i < f->channels; ++i) { + f->channel_buffers[i] = (float *) setup_malloc(f, sizeof(float) * f->blocksize_1); + f->previous_window[i] = (float *) setup_malloc(f, sizeof(float) * f->blocksize_1/2); + f->finalY[i] = (int16 *) setup_malloc(f, sizeof(int16) * longest_floorlist); + #ifdef STB_VORBIS_NO_DEFER_FLOOR + f->floor_buffers[i] = (float *) setup_malloc(f, sizeof(float) * f->blocksize_1/2); + #endif + } + + if (!init_blocksize(f, 0, f->blocksize_0)) return FALSE; + if (!init_blocksize(f, 1, f->blocksize_1)) return FALSE; + f->blocksize[0] = f->blocksize_0; + f->blocksize[1] = f->blocksize_1; + +#ifdef STB_VORBIS_DIVIDE_TABLE + if (integer_divide_table[1][1]==0) + for (i=0; i < DIVTAB_NUMER; ++i) + for (j=1; j < DIVTAB_DENOM; ++j) + integer_divide_table[i][j] = i / j; +#endif + + // compute how much temporary memory is needed + + // 1. + { + uint32 imdct_mem = (f->blocksize_1 * sizeof(float) >> 1); + uint32 classify_mem; + int i,max_part_read=0; + for (i=0; i < f->residue_count; ++i) { + Residue *r = f->residue_config + i; + int n_read = r->end - r->begin; + int part_read = n_read / r->part_size; + if (part_read > max_part_read) + max_part_read = part_read; + } + #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE + classify_mem = f->channels * (sizeof(void*) + max_part_read * sizeof(uint8 *)); + #else + classify_mem = f->channels * (sizeof(void*) + max_part_read * sizeof(int *)); + #endif + + f->temp_memory_required = classify_mem; + if (imdct_mem > f->temp_memory_required) + f->temp_memory_required = imdct_mem; + } + + f->first_decode = TRUE; + + if (f->alloc.alloc_buffer) { + assert(f->temp_offset == f->alloc.alloc_buffer_length_in_bytes); + // check if there's enough temp memory so we don't error later + if (f->setup_offset + sizeof(*f) + f->temp_memory_required > (unsigned) f->temp_offset) + return error(f, VORBIS_outofmem); + } + + f->first_audio_page_offset = stb_vorbis_get_file_offset(f); + + return TRUE; +} + +static void vorbis_deinit(stb_vorbis *p) +{ + int i,j; + for (i=0; i < p->residue_count; ++i) { + Residue *r = p->residue_config+i; + if (r->classdata) { + for (j=0; j < p->codebooks[r->classbook].entries; ++j) + setup_free(p, r->classdata[j]); + setup_free(p, r->classdata); + } + setup_free(p, r->residue_books); + } + + if (p->codebooks) { + for (i=0; i < p->codebook_count; ++i) { + Codebook *c = p->codebooks + i; + setup_free(p, c->codeword_lengths); + setup_free(p, c->multiplicands); + setup_free(p, c->codewords); + setup_free(p, c->sorted_codewords); + // c->sorted_values[-1] is the first entry in the array + setup_free(p, c->sorted_values ? c->sorted_values-1 : NULL); + } + setup_free(p, p->codebooks); + } + setup_free(p, p->floor_config); + setup_free(p, p->residue_config); + for (i=0; i < p->mapping_count; ++i) + setup_free(p, p->mapping[i].chan); + setup_free(p, p->mapping); + for (i=0; i < p->channels; ++i) { + setup_free(p, p->channel_buffers[i]); + setup_free(p, p->previous_window[i]); + #ifdef STB_VORBIS_NO_DEFER_FLOOR + setup_free(p, p->floor_buffers[i]); + #endif + setup_free(p, p->finalY[i]); + } + for (i=0; i < 2; ++i) { + setup_free(p, p->A[i]); + setup_free(p, p->B[i]); + setup_free(p, p->C[i]); + setup_free(p, p->window[i]); + } + #ifndef STB_VORBIS_NO_STDIO + if (p->close_on_free) fclose(p->f); + #endif +} + +void stb_vorbis_close(stb_vorbis *p) +{ + if (p == NULL) return; + vorbis_deinit(p); + setup_free(p,p); +} + +static void vorbis_init(stb_vorbis *p, stb_vorbis_alloc *z) +{ + memset(p, 0, sizeof(*p)); // NULL out all malloc'd pointers to start + if (z) { + p->alloc = *z; + p->alloc.alloc_buffer_length_in_bytes = (p->alloc.alloc_buffer_length_in_bytes+3) & ~3; + p->temp_offset = p->alloc.alloc_buffer_length_in_bytes; + } + p->eof = 0; + p->error = VORBIS__no_error; + p->stream = NULL; + p->codebooks = NULL; + p->page_crc_tests = -1; + #ifndef STB_VORBIS_NO_STDIO + p->close_on_free = FALSE; + p->f = NULL; + #endif +} + +int stb_vorbis_get_sample_offset(stb_vorbis *f) +{ + if (f->current_loc_valid) + return f->current_loc; + else + return -1; +} + +stb_vorbis_info stb_vorbis_get_info(stb_vorbis *f) +{ + stb_vorbis_info d; + d.channels = f->channels; + d.sample_rate = f->sample_rate; + d.setup_memory_required = f->setup_memory_required; + d.setup_temp_memory_required = f->setup_temp_memory_required; + d.temp_memory_required = f->temp_memory_required; + d.max_frame_size = f->blocksize_1 >> 1; + return d; +} + +int stb_vorbis_get_error(stb_vorbis *f) +{ + int e = f->error; + f->error = VORBIS__no_error; + return e; +} + +static stb_vorbis * vorbis_alloc(stb_vorbis *f) +{ + stb_vorbis *p = (stb_vorbis *) setup_malloc(f, sizeof(*p)); + return p; +} + +#ifndef STB_VORBIS_NO_PUSHDATA_API + +void stb_vorbis_flush_pushdata(stb_vorbis *f) +{ + f->previous_length = 0; + f->page_crc_tests = 0; + f->discard_samples_deferred = 0; + f->current_loc_valid = FALSE; + f->first_decode = FALSE; + f->samples_output = 0; + f->channel_buffer_start = 0; + f->channel_buffer_end = 0; +} + +static int vorbis_search_for_page_pushdata(vorb *f, uint8 *data, int data_len) +{ + int i,n; + for (i=0; i < f->page_crc_tests; ++i) + f->scan[i].bytes_done = 0; + + // if we have room for more scans, search for them first, because + // they may cause us to stop early if their header is incomplete + if (f->page_crc_tests < STB_VORBIS_PUSHDATA_CRC_COUNT) { + if (data_len < 4) return 0; + data_len -= 3; // need to look for 4-byte sequence, so don't miss + // one that straddles a boundary + for (i=0; i < data_len; ++i) { + if (data[i] == 0x4f) { + if (0==memcmp(data+i, ogg_page_header, 4)) { + int j,len; + uint32 crc; + // make sure we have the whole page header + if (i+26 >= data_len || i+27+data[i+26] >= data_len) { + // only read up to this page start, so hopefully we'll + // have the whole page header start next time + data_len = i; + break; + } + // ok, we have it all; compute the length of the page + len = 27 + data[i+26]; + for (j=0; j < data[i+26]; ++j) + len += data[i+27+j]; + // scan everything up to the embedded crc (which we must 0) + crc = 0; + for (j=0; j < 22; ++j) + crc = crc32_update(crc, data[i+j]); + // now process 4 0-bytes + for ( ; j < 26; ++j) + crc = crc32_update(crc, 0); + // len is the total number of bytes we need to scan + n = f->page_crc_tests++; + f->scan[n].bytes_left = len-j; + f->scan[n].crc_so_far = crc; + f->scan[n].goal_crc = data[i+22] + (data[i+23] << 8) + (data[i+24]<<16) + (data[i+25]<<24); + // if the last frame on a page is continued to the next, then + // we can't recover the sample_loc immediately + if (data[i+27+data[i+26]-1] == 255) + f->scan[n].sample_loc = ~0; + else + f->scan[n].sample_loc = data[i+6] + (data[i+7] << 8) + (data[i+ 8]<<16) + (data[i+ 9]<<24); + f->scan[n].bytes_done = i+j; + if (f->page_crc_tests == STB_VORBIS_PUSHDATA_CRC_COUNT) + break; + // keep going if we still have room for more + } + } + } + } + + for (i=0; i < f->page_crc_tests;) { + uint32 crc; + int j; + int n = f->scan[i].bytes_done; + int m = f->scan[i].bytes_left; + if (m > data_len - n) m = data_len - n; + // m is the bytes to scan in the current chunk + crc = f->scan[i].crc_so_far; + for (j=0; j < m; ++j) + crc = crc32_update(crc, data[n+j]); + f->scan[i].bytes_left -= m; + f->scan[i].crc_so_far = crc; + if (f->scan[i].bytes_left == 0) { + // does it match? + if (f->scan[i].crc_so_far == f->scan[i].goal_crc) { + // Houston, we have page + data_len = n+m; // consumption amount is wherever that scan ended + f->page_crc_tests = -1; // drop out of page scan mode + f->previous_length = 0; // decode-but-don't-output one frame + f->next_seg = -1; // start a new page + f->current_loc = f->scan[i].sample_loc; // set the current sample location + // to the amount we'd have decoded had we decoded this page + f->current_loc_valid = f->current_loc != ~0; + return data_len; + } + // delete entry + f->scan[i] = f->scan[--f->page_crc_tests]; + } else { + ++i; + } + } + + return data_len; +} + +// return value: number of bytes we used +int stb_vorbis_decode_frame_pushdata( + stb_vorbis *f, // the file we're decoding + uint8 *data, int data_len, // the memory available for decoding + int *channels, // place to write number of float * buffers + float ***output, // place to write float ** array of float * buffers + int *samples // place to write number of output samples + ) +{ + int i; + int len,right,left; + + if (!IS_PUSH_MODE(f)) return error(f, VORBIS_invalid_api_mixing); + + if (f->page_crc_tests >= 0) { + *samples = 0; + return vorbis_search_for_page_pushdata(f, data, data_len); + } + + f->stream = data; + f->stream_end = data + data_len; + f->error = VORBIS__no_error; + + // check that we have the entire packet in memory + if (!is_whole_packet_present(f, FALSE)) { + *samples = 0; + return 0; + } + + if (!vorbis_decode_packet(f, &len, &left, &right)) { + // save the actual error we encountered + enum STBVorbisError error = f->error; + if (error == VORBIS_bad_packet_type) { + // flush and resynch + f->error = VORBIS__no_error; + while (get8_packet(f) != EOP) + if (f->eof) break; + *samples = 0; + return f->stream - data; + } + if (error == VORBIS_continued_packet_flag_invalid) { + if (f->previous_length == 0) { + // we may be resynching, in which case it's ok to hit one + // of these; just discard the packet + f->error = VORBIS__no_error; + while (get8_packet(f) != EOP) + if (f->eof) break; + *samples = 0; + return f->stream - data; + } + } + // if we get an error while parsing, what to do? + // well, it DEFINITELY won't work to continue from where we are! + stb_vorbis_flush_pushdata(f); + // restore the error that actually made us bail + f->error = error; + *samples = 0; + return 1; + } + + // success! + len = vorbis_finish_frame(f, len, left, right); + for (i=0; i < f->channels; ++i) + f->outputs[i] = f->channel_buffers[i] + left; + + if (channels) *channels = f->channels; + *samples = len; + *output = f->outputs; + return f->stream - data; +} + +stb_vorbis *stb_vorbis_open_pushdata( + unsigned char *data, int data_len, // the memory available for decoding + int *data_used, // only defined if result is not NULL + int *error, stb_vorbis_alloc *alloc) +{ + stb_vorbis *f, p; + vorbis_init(&p, alloc); + p.stream = data; + p.stream_end = data + data_len; + p.push_mode = TRUE; + if (!start_decoder(&p)) { + if (p.eof) + *error = VORBIS_need_more_data; + else + *error = p.error; + return NULL; + } + f = vorbis_alloc(&p); + if (f) { + *f = p; + *data_used = f->stream - data; + *error = 0; + return f; + } else { + vorbis_deinit(&p); + return NULL; + } +} +#endif // STB_VORBIS_NO_PUSHDATA_API + +unsigned int stb_vorbis_get_file_offset(stb_vorbis *f) +{ + #ifndef STB_VORBIS_NO_PUSHDATA_API + if (f->push_mode) return 0; + #endif + if (USE_MEMORY(f)) return f->stream - f->stream_start; + #ifndef STB_VORBIS_NO_STDIO + return ftell(f->f) - f->f_start; + #endif +} + +#ifndef STB_VORBIS_NO_PULLDATA_API +// +// DATA-PULLING API +// + +static uint32 vorbis_find_page(stb_vorbis *f, uint32 *end, uint32 *last) +{ + for(;;) { + int n; + if (f->eof) return 0; + n = get8(f); + if (n == 0x4f) { // page header + unsigned int retry_loc = stb_vorbis_get_file_offset(f); + int i; + // check if we're off the end of a file_section stream + if (retry_loc - 25 > f->stream_len) + return 0; + // check the rest of the header + for (i=1; i < 4; ++i) + if (get8(f) != ogg_page_header[i]) + break; + if (f->eof) return 0; + if (i == 4) { + uint8 header[27]; + uint32 i, crc, goal, len; + for (i=0; i < 4; ++i) + header[i] = ogg_page_header[i]; + for (; i < 27; ++i) + header[i] = get8(f); + if (f->eof) return 0; + if (header[4] != 0) goto invalid; + goal = header[22] + (header[23] << 8) + (header[24]<<16) + (header[25]<<24); + for (i=22; i < 26; ++i) + header[i] = 0; + crc = 0; + for (i=0; i < 27; ++i) + crc = crc32_update(crc, header[i]); + len = 0; + for (i=0; i < header[26]; ++i) { + int s = get8(f); + crc = crc32_update(crc, s); + len += s; + } + if (len && f->eof) return 0; + for (i=0; i < len; ++i) + crc = crc32_update(crc, get8(f)); + // finished parsing probable page + if (crc == goal) { + // we could now check that it's either got the last + // page flag set, OR it's followed by the capture + // pattern, but I guess TECHNICALLY you could have + // a file with garbage between each ogg page and recover + // from it automatically? So even though that paranoia + // might decrease the chance of an invalid decode by + // another 2^32, not worth it since it would hose those + // invalid-but-useful files? + if (end) + *end = stb_vorbis_get_file_offset(f); + if (last) + if (header[5] & 0x04) + *last = 1; + else + *last = 0; + set_file_offset(f, retry_loc-1); + return 1; + } + } + invalid: + // not a valid page, so rewind and look for next one + set_file_offset(f, retry_loc); + } + } +} + +// seek is implemented with 'interpolation search'--this is like +// binary search, but we use the data values to estimate the likely +// location of the data item (plus a bit of a bias so when the +// estimation is wrong we don't waste overly much time) + +#define SAMPLE_unknown 0xffffffff + + +// ogg vorbis, in its insane infinite wisdom, only provides +// information about the sample at the END of the page. +// therefore we COULD have the data we need in the current +// page, and not know it. we could just use the end location +// as our only knowledge for bounds, seek back, and eventually +// the binary search finds it. or we can try to be smart and +// not waste time trying to locate more pages. we try to be +// smart, since this data is already in memory anyway, so +// doing needless I/O would be crazy! +static int vorbis_analyze_page(stb_vorbis *f, ProbedPage *z) +{ + uint8 header[27], lacing[255]; + uint8 packet_type[255]; + int num_packet, packet_start, previous =0; + int i,len; + uint32 samples; + + // record where the page starts + z->page_start = stb_vorbis_get_file_offset(f); + + // parse the header + getn(f, header, 27); + assert(header[0] == 'O' && header[1] == 'g' && header[2] == 'g' && header[3] == 'S'); + getn(f, lacing, header[26]); + + // determine the length of the payload + len = 0; + for (i=0; i < header[26]; ++i) + len += lacing[i]; + + // this implies where the page ends + z->page_end = z->page_start + 27 + header[26] + len; + + // read the last-decoded sample out of the data + z->last_decoded_sample = header[6] + (header[7] << 8) + (header[8] << 16) + (header[9] << 16); + + if (header[5] & 4) { + // if this is the last page, it's not possible to work + // backwards to figure out the first sample! whoops! fuck. + z->first_decoded_sample = SAMPLE_unknown; + set_file_offset(f, z->page_start); + return 1; + } + + // scan through the frames to determine the sample-count of each one... + // our goal is the sample # of the first fully-decoded sample on the + // page, which is the first decoded sample of the 2nd page + + num_packet=0; + + packet_start = ((header[5] & 1) == 0); + + for (i=0; i < header[26]; ++i) { + if (packet_start) { + uint8 n,b,m; + if (lacing[i] == 0) goto bail; // trying to read from zero-length packet + n = get8(f); + // if bottom bit is non-zero, we've got corruption + if (n & 1) goto bail; + n >>= 1; + b = ilog(f->mode_count-1); + m = n >> b; + n &= (1 << b)-1; + if (n >= f->mode_count) goto bail; + if (num_packet == 0 && f->mode_config[n].blockflag) + previous = (m & 1); + packet_type[num_packet++] = f->mode_config[n].blockflag; + skip(f, lacing[i]-1); + } else + skip(f, lacing[i]); + packet_start = (lacing[i] < 255); + } + + // now that we know the sizes of all the pages, we can start determining + // how much sample data there is. + + samples = 0; + + // for the last packet, we step by its whole length, because the definition + // is that we encoded the end sample loc of the 'last packet completed', + // where 'completed' refers to packets being split, and we are left to guess + // what 'end sample loc' means. we assume it means ignoring the fact that + // the last half of the data is useless without windowing against the next + // packet... (so it's not REALLY complete in that sense) + if (num_packet > 1) + samples += f->blocksize[packet_type[num_packet-1]]; + + for (i=num_packet-2; i >= 1; --i) { + // now, for this packet, how many samples do we have that + // do not overlap the following packet? + if (packet_type[i] == 1) + if (packet_type[i+1] == 1) + samples += f->blocksize_1 >> 1; + else + samples += ((f->blocksize_1 - f->blocksize_0) >> 2) + (f->blocksize_0 >> 1); + else + samples += f->blocksize_0 >> 1; + } + // now, at this point, we've rewound to the very beginning of the + // _second_ packet. if we entirely discard the first packet after + // a seek, this will be exactly the right sample number. HOWEVER! + // we can't as easily compute this number for the LAST page. The + // only way to get the sample offset of the LAST page is to use + // the end loc from the previous page. But what that returns us + // is _exactly_ the place where we get our first non-overlapped + // sample. (I think. Stupid spec for being ambiguous.) So for + // consistency it's better to do that here, too. However, that + // will then require us to NOT discard all of the first frame we + // decode, in some cases, which means an even weirder frame size + // and extra code. what a fucking pain. + + // we're going to discard the first packet if we + // start the seek here, so we don't care about it. (we could actually + // do better; if the first packet is long, and the previous packet + // is short, there's actually data in the first half of the first + // packet that doesn't need discarding... but not worth paying the + // effort of tracking that of that here and in the seeking logic) + // except crap, if we infer it from the _previous_ packet's end + // location, we DO need to use that definition... and we HAVE to + // infer the start loc of the LAST packet from the previous packet's + // end location. fuck you, ogg vorbis. + + z->first_decoded_sample = z->last_decoded_sample - samples; + + // restore file state to where we were + set_file_offset(f, z->page_start); + return 1; + + // restore file state to where we were + bail: + set_file_offset(f, z->page_start); + return 0; +} + +static int vorbis_seek_frame_from_page(stb_vorbis *f, uint32 page_start, uint32 first_sample, uint32 target_sample, int fine) +{ + int left_start, left_end, right_start, right_end, mode,i; + int frame=0; + uint32 frame_start; + int frames_to_skip, data_to_skip; + + // first_sample is the sample # of the first sample that doesn't + // overlap the previous page... note that this requires us to + // _partially_ discard the first packet! bleh. + set_file_offset(f, page_start); + + f->next_seg = -1; // force page resync + + frame_start = first_sample; + // frame start is where the previous packet's last decoded sample + // was, which corresponds to left_end... EXCEPT if the previous + // packet was long and this packet is short? Probably a bug here. + + + // now, we can start decoding frames... we'll only FAKE decode them, + // until we find the frame that contains our sample; then we'll rewind, + // and try again + for (;;) { + int start; + + if (!vorbis_decode_initial(f, &left_start, &left_end, &right_start, &right_end, &mode)) + return error(f, VORBIS_seek_failed); + + if (frame == 0) + start = left_end; + else + start = left_start; + + // the window starts at left_start; the last valid sample we generate + // before the next frame's window start is right_start-1 + if (target_sample < frame_start + right_start-start) + break; + + flush_packet(f); + if (f->eof) + return error(f, VORBIS_seek_failed); + + frame_start += right_start - start; + + ++frame; + } + + // ok, at this point, the sample we want is contained in frame #'frame' + + // to decode frame #'frame' normally, we have to decode the + // previous frame first... but if it's the FIRST frame of the page + // we can't. if it's the first frame, it means it falls in the part + // of the first frame that doesn't overlap either of the other frames. + // so, if we have to handle that case for the first frame, we might + // as well handle it for all of them, so: + if (target_sample > frame_start + (left_end - left_start)) { + // so what we want to do is go ahead and just immediately decode + // this frame, but then make it so the next get_frame_float() uses + // this already-decoded data? or do we want to go ahead and rewind, + // and leave a flag saying to skip the first N data? let's do that + frames_to_skip = frame; // if this is frame #1, skip 1 frame (#0) + data_to_skip = left_end - left_start; + } else { + // otherwise, we want to skip frames 0, 1, 2, ... frame-2 + // (which means frame-2+1 total frames) then decode frame-1, + // then leave frame pending + frames_to_skip = frame - 1; + assert(frames_to_skip >= 0); + data_to_skip = -1; + } + + set_file_offset(f, page_start); + f->next_seg = - 1; // force page resync + + for (i=0; i < frames_to_skip; ++i) { + maybe_start_packet(f); + flush_packet(f); + } + + if (data_to_skip >= 0) { + int i,j,n = f->blocksize_0 >> 1; + f->discard_samples_deferred = data_to_skip; + for (i=0; i < f->channels; ++i) + for (j=0; j < n; ++j) + f->previous_window[i][j] = 0; + f->previous_length = n; + frame_start += data_to_skip; + } else { + f->previous_length = 0; + vorbis_pump_first_frame(f); + } + + // at this point, the NEXT decoded frame will generate the desired sample + if (fine) { + // so if we're doing sample accurate streaming, we want to go ahead and decode it! + if (target_sample != frame_start) { + int n; + stb_vorbis_get_frame_float(f, &n, NULL); + assert(target_sample > frame_start); + assert(f->channel_buffer_start + (int) (target_sample-frame_start) < f->channel_buffer_end); + f->channel_buffer_start += (target_sample - frame_start); + } + } + + return 0; +} + +static int vorbis_seek_base(stb_vorbis *f, unsigned int sample_number, int fine) +{ + ProbedPage p[2],q; + if (IS_PUSH_MODE(f)) return error(f, VORBIS_invalid_api_mixing); + + // do we know the location of the last page? + if (f->p_last.page_start == 0) { + uint32 z = stb_vorbis_stream_length_in_samples(f); + if (z == 0) return error(f, VORBIS_cant_find_last_page); + } + + p[0] = f->p_first; + p[1] = f->p_last; + + if (sample_number >= f->p_last.last_decoded_sample) + sample_number = f->p_last.last_decoded_sample-1; + + if (sample_number < f->p_first.last_decoded_sample) { + vorbis_seek_frame_from_page(f, p[0].page_start, 0, sample_number, fine); + return 0; + } else { + int attempts=0; + while (p[0].page_end < p[1].page_start) { + uint32 probe; + uint32 start_offset, end_offset; + uint32 start_sample, end_sample; + + // copy these into local variables so we can tweak them + // if any are unknown + start_offset = p[0].page_end; + end_offset = p[1].after_previous_page_start; // an address known to seek to page p[1] + start_sample = p[0].last_decoded_sample; + end_sample = p[1].last_decoded_sample; + + // currently there is no such tweaking logic needed/possible? + if (start_sample == SAMPLE_unknown || end_sample == SAMPLE_unknown) + return error(f, VORBIS_seek_failed); + + // now we want to lerp between these for the target samples... + + // step 1: we need to bias towards the page start... + if (start_offset + 4000 < end_offset) + end_offset -= 4000; + + // now compute an interpolated search loc + probe = start_offset + (int) floor((float) (end_offset - start_offset) / (end_sample - start_sample) * (sample_number - start_sample)); + + // next we need to bias towards binary search... + // code is a little wonky to allow for full 32-bit unsigned values + if (attempts >= 4) { + uint32 probe2 = start_offset + ((end_offset - start_offset) >> 1); + if (attempts >= 8) + probe = probe2; + else if (probe < probe2) + probe = probe + ((probe2 - probe) >> 1); + else + probe = probe2 + ((probe - probe2) >> 1); + } + ++attempts; + + set_file_offset(f, probe); + if (!vorbis_find_page(f, NULL, NULL)) return error(f, VORBIS_seek_failed); + if (!vorbis_analyze_page(f, &q)) return error(f, VORBIS_seek_failed); + q.after_previous_page_start = probe; + + // it's possible we've just found the last page again + if (q.page_start == p[1].page_start) { + p[1] = q; + continue; + } + + if (sample_number < q.last_decoded_sample) + p[1] = q; + else + p[0] = q; + } + + if (p[0].last_decoded_sample <= sample_number && sample_number < p[1].last_decoded_sample) { + vorbis_seek_frame_from_page(f, p[1].page_start, p[0].last_decoded_sample, sample_number, fine); + return 0; + } + return error(f, VORBIS_seek_failed); + } +} + +int stb_vorbis_seek_frame(stb_vorbis *f, unsigned int sample_number) +{ + return vorbis_seek_base(f, sample_number, FALSE); +} + +int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number) +{ + return vorbis_seek_base(f, sample_number, TRUE); +} + +void stb_vorbis_seek_start(stb_vorbis *f) +{ + if (IS_PUSH_MODE(f)) { error(f, VORBIS_invalid_api_mixing); return; } + set_file_offset(f, f->first_audio_page_offset); + f->previous_length = 0; + f->first_decode = TRUE; + f->next_seg = -1; + vorbis_pump_first_frame(f); +} + +unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f) +{ + unsigned int restore_offset, previous_safe; + unsigned int end, last_page_loc; + + if (IS_PUSH_MODE(f)) return error(f, VORBIS_invalid_api_mixing); + if (!f->total_samples) { + int last; + uint32 lo,hi; + char header[6]; + + // first, store the current decode position so we can restore it + restore_offset = stb_vorbis_get_file_offset(f); + + // now we want to seek back 64K from the end (the last page must + // be at most a little less than 64K, but let's allow a little slop) + if (f->stream_len >= 65536 && f->stream_len-65536 >= f->first_audio_page_offset) + previous_safe = f->stream_len - 65536; + else + previous_safe = f->first_audio_page_offset; + + set_file_offset(f, previous_safe); + // previous_safe is now our candidate 'earliest known place that seeking + // to will lead to the final page' + + if (!vorbis_find_page(f, &end, (int unsigned *)&last)) { + // if we can't find a page, we're hosed! + f->error = VORBIS_cant_find_last_page; + f->total_samples = 0xffffffff; + goto done; + } + + // check if there are more pages + last_page_loc = stb_vorbis_get_file_offset(f); + + // stop when the last_page flag is set, not when we reach eof; + // this allows us to stop short of a 'file_section' end without + // explicitly checking the length of the section + while (!last) { + set_file_offset(f, end); + if (!vorbis_find_page(f, &end, (int unsigned *)&last)) { + // the last page we found didn't have the 'last page' flag + // set. whoops! + break; + } + previous_safe = last_page_loc+1; + last_page_loc = stb_vorbis_get_file_offset(f); + } + + set_file_offset(f, last_page_loc); + + // parse the header + getn(f, (unsigned char *)header, 6); + // extract the absolute granule position + lo = get32(f); + hi = get32(f); + if (lo == 0xffffffff && hi == 0xffffffff) { + f->error = VORBIS_cant_find_last_page; + f->total_samples = SAMPLE_unknown; + goto done; + } + if (hi) + lo = 0xfffffffe; // saturate + f->total_samples = lo; + + f->p_last.page_start = last_page_loc; + f->p_last.page_end = end; + f->p_last.last_decoded_sample = lo; + f->p_last.first_decoded_sample = SAMPLE_unknown; + f->p_last.after_previous_page_start = previous_safe; + + done: + set_file_offset(f, restore_offset); + } + return f->total_samples == SAMPLE_unknown ? 0 : f->total_samples; +} + +float stb_vorbis_stream_length_in_seconds(stb_vorbis *f) +{ + return stb_vorbis_stream_length_in_samples(f) / (float) f->sample_rate; +} + + + +int stb_vorbis_get_frame_float(stb_vorbis *f, int *channels, float ***output) +{ + int len, right,left,i; + if (IS_PUSH_MODE(f)) return error(f, VORBIS_invalid_api_mixing); + + if (!vorbis_decode_packet(f, &len, &left, &right)) { + f->channel_buffer_start = f->channel_buffer_end = 0; + return 0; + } + + len = vorbis_finish_frame(f, len, left, right); + for (i=0; i < f->channels; ++i) + f->outputs[i] = f->channel_buffers[i] + left; + + f->channel_buffer_start = left; + f->channel_buffer_end = left+len; + + if (channels) *channels = f->channels; + if (output) *output = f->outputs; + return len; +} + +#ifndef STB_VORBIS_NO_STDIO + +stb_vorbis * stb_vorbis_open_file_section(FILE *file, int close_on_free, int *error, stb_vorbis_alloc *alloc, unsigned int length) +{ + stb_vorbis *f, p; + vorbis_init(&p, alloc); + p.f = file; + p.f_start = ftell(file); + p.stream_len = length; + p.close_on_free = close_on_free; + if (start_decoder(&p)) { + f = vorbis_alloc(&p); + if (f) { + *f = p; + vorbis_pump_first_frame(f); + return f; + } + } + if (error) *error = p.error; + vorbis_deinit(&p); + return NULL; +} + +stb_vorbis * stb_vorbis_open_file(FILE *file, int close_on_free, int *error, stb_vorbis_alloc *alloc) +{ + unsigned int len, start; + start = ftell(file); + fseek(file, 0, SEEK_END); + len = ftell(file) - start; + fseek(file, start, SEEK_SET); + return stb_vorbis_open_file_section(file, close_on_free, error, alloc, len); +} + +stb_vorbis * stb_vorbis_open_filename(char *filename, int *error, stb_vorbis_alloc *alloc) +{ + FILE *f = fopen(filename, "rb"); + if (f) + return stb_vorbis_open_file(f, TRUE, error, alloc); + if (error) *error = VORBIS_file_open_failure; + return NULL; +} +#endif // STB_VORBIS_NO_STDIO + +stb_vorbis * stb_vorbis_open_memory(unsigned char *data, int len, int *error, stb_vorbis_alloc *alloc) +{ + stb_vorbis *f, p; + if (data == NULL) return NULL; + vorbis_init(&p, alloc); + p.stream = data; + p.stream_end = data + len; + p.stream_start = p.stream; + p.stream_len = len; + p.push_mode = FALSE; + if (start_decoder(&p)) { + f = vorbis_alloc(&p); + if (f) { + *f = p; + vorbis_pump_first_frame(f); + return f; + } + } + if (error) *error = p.error; + vorbis_deinit(&p); + return NULL; +} + +#ifndef STB_VORBIS_NO_INTEGER_CONVERSION +#define PLAYBACK_MONO 1 +#define PLAYBACK_LEFT 2 +#define PLAYBACK_RIGHT 4 + +#define L (PLAYBACK_LEFT | PLAYBACK_MONO) +#define C (PLAYBACK_LEFT | PLAYBACK_RIGHT | PLAYBACK_MONO) +#define R (PLAYBACK_RIGHT | PLAYBACK_MONO) + +static int8 channel_position[7][6] = +{ + { 0 }, + { C }, + { L, R }, + { L, C, R }, + { L, R, L, R }, + { L, C, R, L, R }, + { L, C, R, L, R, C }, +}; + + +#ifndef STB_VORBIS_NO_FAST_SCALED_FLOAT + typedef union { + float f; + int i; + } float_conv; + typedef char stb_vorbis_float_size_test[sizeof(float)==4 && sizeof(int) == 4]; + #define FASTDEF(x) float_conv x + // add (1<<23) to convert to int, then divide by 2^SHIFT, then add 0.5/2^SHIFT to round + #define MAGIC(SHIFT) (1.5f * (1 << (23-SHIFT)) + 0.5f/(1 << SHIFT)) + #define ADDEND(SHIFT) (((150-SHIFT) << 23) + (1 << 22)) + #define FAST_SCALED_FLOAT_TO_INT(temp,x,s) (temp.f = (x) + MAGIC(s), temp.i - ADDEND(s)) + #define check_endianness() +#else + #define FAST_SCALED_FLOAT_TO_INT(temp,x,s) ((int) ((x) * (1 << (s)))) + #define check_endianness() + #define FASTDEF(x) +#endif + +static void copy_samples(short *dest, float *src, int len) +{ + int i; + check_endianness(); + for (i=0; i < len; ++i) { + FASTDEF(temp); + int v = FAST_SCALED_FLOAT_TO_INT(temp, src[i],15); + if ((unsigned int) (v + 32768) > 65535) + v = v < 0 ? -32768 : 32767; + dest[i] = v; + } +} + +static void compute_samples(int mask, short *output, int num_c, float **data, int d_offset, int len) +{ + #define BUFFER_SIZE 32 + float buffer[BUFFER_SIZE]; + int i,j,o,n = BUFFER_SIZE; + check_endianness(); + for (o = 0; o < len; o += BUFFER_SIZE) { + memset(buffer, 0, sizeof(buffer)); + if (o + n > len) n = len - o; + for (j=0; j < num_c; ++j) { + if (channel_position[num_c][j] & mask) { + for (i=0; i < n; ++i) + buffer[i] += data[j][d_offset+o+i]; + } + } + for (i=0; i < n; ++i) { + FASTDEF(temp); + int v = FAST_SCALED_FLOAT_TO_INT(temp,buffer[i],15); + if ((unsigned int) (v + 32768) > 65535) + v = v < 0 ? -32768 : 32767; + output[o+i] = v; + } + } +} + +static int channel_selector[3][2] = { {0}, {PLAYBACK_MONO}, {PLAYBACK_LEFT, PLAYBACK_RIGHT} }; +static void compute_stereo_samples(short *output, int num_c, float **data, int d_offset, int len) +{ + #define BUFFER_SIZE 32 + float buffer[BUFFER_SIZE]; + int i,j,o,n = BUFFER_SIZE >> 1; + // o is the offset in the source data + check_endianness(); + for (o = 0; o < len; o += BUFFER_SIZE >> 1) { + // o2 is the offset in the output data + int o2 = o << 1; + memset(buffer, 0, sizeof(buffer)); + if (o + n > len) n = len - o; + for (j=0; j < num_c; ++j) { + int m = channel_position[num_c][j] & (PLAYBACK_LEFT | PLAYBACK_RIGHT); + if (m == (PLAYBACK_LEFT | PLAYBACK_RIGHT)) { + for (i=0; i < n; ++i) { + buffer[i*2+0] += data[j][d_offset+o+i]; + buffer[i*2+1] += data[j][d_offset+o+i]; + } + } else if (m == PLAYBACK_LEFT) { + for (i=0; i < n; ++i) { + buffer[i*2+0] += data[j][d_offset+o+i]; + } + } else if (m == PLAYBACK_RIGHT) { + for (i=0; i < n; ++i) { + buffer[i*2+1] += data[j][d_offset+o+i]; + } + } + } + for (i=0; i < (n<<1); ++i) { + FASTDEF(temp); + int v = FAST_SCALED_FLOAT_TO_INT(temp,buffer[i],15); + if ((unsigned int) (v + 32768) > 65535) + v = v < 0 ? -32768 : 32767; + output[o2+i] = v; + } + } +} + +static void convert_samples_short(int buf_c, short **buffer, int b_offset, int data_c, float **data, int d_offset, int samples) +{ + int i; + if (buf_c != data_c && buf_c <= 2 && data_c <= 6) { + static int channel_selector[3][2] = { {0}, {PLAYBACK_MONO}, {PLAYBACK_LEFT, PLAYBACK_RIGHT} }; + for (i=0; i < buf_c; ++i) + compute_samples(channel_selector[buf_c][i], buffer[i]+b_offset, data_c, data, d_offset, samples); + } else { + int limit = buf_c < data_c ? buf_c : data_c; + for (i=0; i < limit; ++i) + copy_samples(buffer[i]+b_offset, data[i], samples); + for ( ; i < buf_c; ++i) + memset(buffer[i]+b_offset, 0, sizeof(short) * samples); + } +} + +int stb_vorbis_get_frame_short(stb_vorbis *f, int num_c, short **buffer, int num_samples) +{ + float **output; + int len = stb_vorbis_get_frame_float(f, NULL, &output); + if (len > num_samples) len = num_samples; + if (len) + convert_samples_short(num_c, buffer, 0, f->channels, output, 0, len); + return len; +} + +static void convert_channels_short_interleaved(int buf_c, short *buffer, int data_c, float **data, int d_offset, int len) +{ + int i; + check_endianness(); + if (buf_c != data_c && buf_c <= 2 && data_c <= 6) { + assert(buf_c == 2); + for (i=0; i < buf_c; ++i) + compute_stereo_samples(buffer, data_c, data, d_offset, len); + } else { + int limit = buf_c < data_c ? buf_c : data_c; + int j; + for (j=0; j < len; ++j) { + for (i=0; i < limit; ++i) { + FASTDEF(temp); + float f = data[i][d_offset+j]; + int v = FAST_SCALED_FLOAT_TO_INT(temp, f,15);//data[i][d_offset+j],15); + if ((unsigned int) (v + 32768) > 65535) + v = v < 0 ? -32768 : 32767; + *buffer++ = v; + } + for ( ; i < buf_c; ++i) + *buffer++ = 0; + } + } +} + +int stb_vorbis_get_frame_short_interleaved(stb_vorbis *f, int num_c, short *buffer, int num_shorts) +{ + float **output; + int len; + if (num_c == 1) return stb_vorbis_get_frame_short(f,num_c,&buffer, num_shorts); + len = stb_vorbis_get_frame_float(f, NULL, &output); + if (len) { + if (len*num_c > num_shorts) len = num_shorts / num_c; + convert_channels_short_interleaved(num_c, buffer, f->channels, output, 0, len); + } + return len; +} + +int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short *buffer, int num_shorts) +{ + float **outputs; + int len = num_shorts / channels; + int n=0; + int z = f->channels; + if (z > channels) z = channels; + while (n < len) { + int k = f->channel_buffer_end - f->channel_buffer_start; + if (n+k >= len) k = len - n; + if (k) + convert_channels_short_interleaved(channels, buffer, f->channels, f->channel_buffers, f->channel_buffer_start, k); + buffer += k*channels; + n += k; + f->channel_buffer_start += k; + if (n == len) break; + if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break; + } + return n; +} + +int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, int len) +{ + float **outputs; + int n=0; + int z = f->channels; + if (z > channels) z = channels; + while (n < len) { + int k = f->channel_buffer_end - f->channel_buffer_start; + if (n+k >= len) k = len - n; + if (k) + convert_samples_short(channels, buffer, n, f->channels, f->channel_buffers, f->channel_buffer_start, k); + n += k; + f->channel_buffer_start += k; + if (n == len) break; + if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break; + } + return n; +} + +#ifndef STB_VORBIS_NO_STDIO +int stb_vorbis_decode_filename(char *filename, int *channels, short **output) +{ + int data_len, offset, total, limit, error; + short *data; + stb_vorbis *v = stb_vorbis_open_filename(filename, &error, NULL); + if (v == NULL) return -1; + limit = v->channels * 4096; + *channels = v->channels; + offset = data_len = 0; + total = limit; + data = (short *) malloc(total * sizeof(*data)); + if (data == NULL) { + stb_vorbis_close(v); + return -2; + } + for (;;) { + int n = stb_vorbis_get_frame_short_interleaved(v, v->channels, data+offset, total-offset); + if (n == 0) break; + data_len += n; + offset += n * v->channels; + if (offset + limit > total) { + short *data2; + total *= 2; + data2 = (short *) realloc(data, total * sizeof(*data)); + if (data2 == NULL) { + free(data); + stb_vorbis_close(v); + return -2; + } + data = data2; + } + } + *output = data; + return data_len; +} +#endif // NO_STDIO + +int stb_vorbis_decode_memory(uint8 *mem, int len, int *channels, short **output) +{ + int data_len, offset, total, limit, error; + short *data; + stb_vorbis *v = stb_vorbis_open_memory(mem, len, &error, NULL); + if (v == NULL) return -1; + limit = v->channels * 4096; + *channels = v->channels; + offset = data_len = 0; + total = limit; + data = (short *) malloc(total * sizeof(*data)); + if (data == NULL) { + stb_vorbis_close(v); + return -2; + } + for (;;) { + int n = stb_vorbis_get_frame_short_interleaved(v, v->channels, data+offset, total-offset); + if (n == 0) break; + data_len += n; + offset += n * v->channels; + if (offset + limit > total) { + short *data2; + total *= 2; + data2 = (short *) realloc(data, total * sizeof(*data)); + if (data2 == NULL) { + free(data); + stb_vorbis_close(v); + return -2; + } + data = data2; + } + } + *output = data; + return data_len; +} +#endif + +int stb_vorbis_get_samples_float_interleaved(stb_vorbis *f, int channels, float *buffer, int num_floats) +{ + float **outputs; + int len = num_floats / channels; + int n=0; + int z = f->channels; + if (z > channels) z = channels; + while (n < len) { + int i,j; + int k = f->channel_buffer_end - f->channel_buffer_start; + if (n+k >= len) k = len - n; + for (j=0; j < k; ++j) { + for (i=0; i < z; ++i) + *buffer++ = f->channel_buffers[i][f->channel_buffer_start+j]; + for ( ; i < channels; ++i) + *buffer++ = 0; + } + n += k; + f->channel_buffer_start += k; + if (n == len) break; + if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break; + } + return n; +} + +int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, int num_samples) +{ + float **outputs; + int n=0; + int z = f->channels; + if (z > channels) z = channels; + while (n < num_samples) { + int i; + int k = f->channel_buffer_end - f->channel_buffer_start; + if (n+k >= num_samples) k = num_samples - n; + if (k) { + for (i=0; i < z; ++i) + memcpy(buffer[i]+n, f->channel_buffers+f->channel_buffer_start, sizeof(float)*k); + for ( ; i < channels; ++i) + memset(buffer[i]+n, 0, sizeof(float) * k); + } + n += k; + f->channel_buffer_start += k; + if (n == num_samples) break; + if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break; + } + return n; +} +#endif // STB_VORBIS_NO_PULLDATA_API + +#endif // STB_VORBIS_HEADER_ONLY diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/stb_vorbis.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/stb_vorbis.h new file mode 100644 index 0000000..94fd6fe --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/libs/stb_vorbis.h @@ -0,0 +1,338 @@ +// +// stb_vorbis.h +// oggdecode +// +// Created by Michael Grierson on 04/04/2012. +// Copyright (c) 2012 goldsmiths college. All rights reserved. +// + + + +////////////////////////////////////////////////////////////////////////////// +// +// HEADER BEGINS HERE +// + +#ifndef STB_VORBIS_INCLUDE_STB_VORBIS_H +#define STB_VORBIS_INCLUDE_STB_VORBIS_H + +#if defined(STB_VORBIS_NO_CRT) && !defined(STB_VORBIS_NO_STDIO) +#define STB_VORBIS_NO_STDIO 1 +#endif + +#ifndef STB_VORBIS_NO_STDIO +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + /////////// THREAD SAFETY + + // Individual stb_vorbis* handles are not thread-safe; you cannot decode from + // them from multiple threads at the same time. However, you can have multiple + // stb_vorbis* handles and decode from them independently in multiple thrads. + + + /////////// MEMORY ALLOCATION + + // normally stb_vorbis uses malloc() to allocate memory at startup, + // and alloca() to allocate temporary memory during a frame on the + // stack. (Memory consumption will depend on the amount of setup + // data in the file and how you set the compile flags for speed + // vs. size. In my test files the maximal-size usage is ~150KB.) + // + // You can modify the wrapper functions in the source (setup_malloc, + // setup_temp_malloc, temp_malloc) to change this behavior, or you + // can use a simpler allocation model: you pass in a buffer from + // which stb_vorbis will allocate _all_ its memory (including the + // temp memory). "open" may fail with a VORBIS_outofmem if you + // do not pass in enough data; there is no way to determine how + // much you do need except to succeed (at which point you can + // query get_info to find the exact amount required. yes I know + // this is lame). + // + // If you pass in a non-NULL buffer of the type below, allocation + // will occur from it as described above. Otherwise just pass NULL + // to use malloc()/alloca() + + typedef struct + { + char *alloc_buffer; + int alloc_buffer_length_in_bytes; + } stb_vorbis_alloc; + + + /////////// FUNCTIONS USEABLE WITH ALL INPUT MODES + + typedef struct stb_vorbis stb_vorbis; + + typedef struct + { + unsigned int sample_rate; + int channels; + + unsigned int setup_memory_required; + unsigned int setup_temp_memory_required; + unsigned int temp_memory_required; + + int max_frame_size; + } stb_vorbis_info; + + // get general information about the file + extern stb_vorbis_info stb_vorbis_get_info(stb_vorbis *f); + + // get the last error detected (clears it, too) + extern int stb_vorbis_get_error(stb_vorbis *f); + + // close an ogg vorbis file and free all memory in use + extern void stb_vorbis_close(stb_vorbis *f); + + // this function returns the offset (in samples) from the beginning of the + // file that will be returned by the next decode, if it is known, or -1 + // otherwise. after a flush_pushdata() call, this may take a while before + // it becomes valid again. + // NOT WORKING YET after a seek with PULLDATA API + extern int stb_vorbis_get_sample_offset(stb_vorbis *f); + + // returns the current seek point within the file, or offset from the beginning + // of the memory buffer. In pushdata mode it returns 0. + extern unsigned int stb_vorbis_get_file_offset(stb_vorbis *f); + + /////////// PUSHDATA API + +#ifndef STB_VORBIS_NO_PUSHDATA_API + + // this API allows you to get blocks of data from any source and hand + // them to stb_vorbis. you have to buffer them; stb_vorbis will tell + // you how much it used, and you have to give it the rest next time; + // and stb_vorbis may not have enough data to work with and you will + // need to give it the same data again PLUS more. Note that the Vorbis + // specification does not bound the size of an individual frame. + + extern stb_vorbis *stb_vorbis_open_pushdata( + unsigned char *datablock, int datablock_length_in_bytes, + int *datablock_memory_consumed_in_bytes, + int *error, + stb_vorbis_alloc *alloc_buffer); + // create a vorbis decoder by passing in the initial data block containing + // the ogg&vorbis headers (you don't need to do parse them, just provide + // the first N bytes of the file--you're told if it's not enough, see below) + // on success, returns an stb_vorbis *, does not set error, returns the amount of + // data parsed/consumed on this call in *datablock_memory_consumed_in_bytes; + // on failure, returns NULL on error and sets *error, does not change *datablock_memory_consumed + // if returns NULL and *error is VORBIS_need_more_data, then the input block was + // incomplete and you need to pass in a larger block from the start of the file + + extern int stb_vorbis_decode_frame_pushdata( + stb_vorbis *f, unsigned char *datablock, int datablock_length_in_bytes, + int *channels, // place to write number of float * buffers + float ***output, // place to write float ** array of float * buffers + int *samples // place to write number of output samples + ); + // decode a frame of audio sample data if possible from the passed-in data block + // + // return value: number of bytes we used from datablock + // possible cases: + // 0 bytes used, 0 samples output (need more data) + // N bytes used, 0 samples output (resynching the stream, keep going) + // N bytes used, M samples output (one frame of data) + // note that after opening a file, you will ALWAYS get one N-bytes,0-sample + // frame, because Vorbis always "discards" the first frame. + // + // Note that on resynch, stb_vorbis will rarely consume all of the buffer, + // instead only datablock_length_in_bytes-3 or less. This is because it wants + // to avoid missing parts of a page header if they cross a datablock boundary, + // without writing state-machiney code to record a partial detection. + // + // The number of channels returned are stored in *channels (which can be + // NULL--it is always the same as the number of channels reported by + // get_info). *output will contain an array of float* buffers, one per + // channel. In other words, (*output)[0][0] contains the first sample from + // the first channel, and (*output)[1][0] contains the first sample from + // the second channel. + + extern void stb_vorbis_flush_pushdata(stb_vorbis *f); + // inform stb_vorbis that your next datablock will not be contiguous with + // previous ones (e.g. you've seeked in the data); future attempts to decode + // frames will cause stb_vorbis to resynchronize (as noted above), and + // once it sees a valid Ogg page (typically 4-8KB, as large as 64KB), it + // will begin decoding the _next_ frame. + // + // if you want to seek using pushdata, you need to seek in your file, then + // call stb_vorbis_flush_pushdata(), then start calling decoding, then once + // decoding is returning you data, call stb_vorbis_get_sample_offset, and + // if you don't like the result, seek your file again and repeat. +#endif + + + ////////// PULLING INPUT API + +#ifndef STB_VORBIS_NO_PULLDATA_API + // This API assumes stb_vorbis is allowed to pull data from a source-- + // either a block of memory containing the _entire_ vorbis stream, or a + // FILE * that you or it create, or possibly some other reading mechanism + // if you go modify the source to replace the FILE * case with some kind + // of callback to your code. (But if you don't support seeking, you may + // just want to go ahead and use pushdata.) + +#if !defined(STB_VORBIS_NO_STDIO) && !defined(STB_VORBIS_NO_INTEGER_CONVERSION) + extern int stb_vorbis_decode_filename(char *filename, int *channels, short **output); +#endif + extern int stb_vorbis_decode_memory(unsigned char *mem, int len, int *channels, short **output); + // decode an entire file and output the data interleaved into a malloc()ed + // buffer stored in *output. The return value is the number of samples + // decoded, or -1 if the file could not be opened or was not an ogg vorbis file. + // When you're done with it, just free() the pointer returned in *output. + + extern stb_vorbis * stb_vorbis_open_memory(unsigned char *data, int len, + int *error, stb_vorbis_alloc *alloc_buffer); + // create an ogg vorbis decoder from an ogg vorbis stream in memory (note + // this must be the entire stream!). on failure, returns NULL and sets *error + +#ifndef STB_VORBIS_NO_STDIO + extern stb_vorbis * stb_vorbis_open_filename(char *filename, + int *error, stb_vorbis_alloc *alloc_buffer); + // create an ogg vorbis decoder from a filename via fopen(). on failure, + // returns NULL and sets *error (possibly to VORBIS_file_open_failure). + + extern stb_vorbis * stb_vorbis_open_file(FILE *f, int close_handle_on_close, + int *error, stb_vorbis_alloc *alloc_buffer); + // create an ogg vorbis decoder from an open FILE *, looking for a stream at + // the _current_ seek point (ftell). on failure, returns NULL and sets *error. + // note that stb_vorbis must "own" this stream; if you seek it in between + // calls to stb_vorbis, it will become confused. Morever, if you attempt to + // perform stb_vorbis_seek_*() operations on this file, it will assume it + // owns the _entire_ rest of the file after the start point. Use the next + // function, stb_vorbis_open_file_section(), to limit it. + + extern stb_vorbis * stb_vorbis_open_file_section(FILE *f, int close_handle_on_close, + int *error, stb_vorbis_alloc *alloc_buffer, unsigned int len); + // create an ogg vorbis decoder from an open FILE *, looking for a stream at + // the _current_ seek point (ftell); the stream will be of length 'len' bytes. + // on failure, returns NULL and sets *error. note that stb_vorbis must "own" + // this stream; if you seek it in between calls to stb_vorbis, it will become + // confused. +#endif + + extern int stb_vorbis_seek_frame(stb_vorbis *f, unsigned int sample_number); + extern int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number); + // NOT WORKING YET + // these functions seek in the Vorbis file to (approximately) 'sample_number'. + // after calling seek_frame(), the next call to get_frame_*() will include + // the specified sample. after calling stb_vorbis_seek(), the next call to + // stb_vorbis_get_samples_* will start with the specified sample. If you + // do not need to seek to EXACTLY the target sample when using get_samples_*, + // you can also use seek_frame(). + + extern void stb_vorbis_seek_start(stb_vorbis *f); + // this function is equivalent to stb_vorbis_seek(f,0), but it + // actually works + + extern unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f); + extern float stb_vorbis_stream_length_in_seconds(stb_vorbis *f); + // these functions return the total length of the vorbis stream + + extern int stb_vorbis_get_frame_float(stb_vorbis *f, int *channels, float ***output); + // decode the next frame and return the number of samples. the number of + // channels returned are stored in *channels (which can be NULL--it is always + // the same as the number of channels reported by get_info). *output will + // contain an array of float* buffers, one per channel. These outputs will + // be overwritten on the next call to stb_vorbis_get_frame_*. + // + // You generally should not intermix calls to stb_vorbis_get_frame_*() + // and stb_vorbis_get_samples_*(), since the latter calls the former. + +#ifndef STB_VORBIS_NO_INTEGER_CONVERSION + extern int stb_vorbis_get_frame_short_interleaved(stb_vorbis *f, int num_c, short *buffer, int num_shorts); + extern int stb_vorbis_get_frame_short (stb_vorbis *f, int num_c, short **buffer, int num_samples); +#endif + // decode the next frame and return the number of samples per channel. the + // data is coerced to the number of channels you request according to the + // channel coercion rules (see below). You must pass in the size of your + // buffer(s) so that stb_vorbis will not overwrite the end of the buffer. + // The maximum buffer size needed can be gotten from get_info(); however, + // the Vorbis I specification implies an absolute maximum of 4096 samples + // per channel. Note that for interleaved data, you pass in the number of + // shorts (the size of your array), but the return value is the number of + // samples per channel, not the total number of samples. + + // Channel coercion rules: + // Let M be the number of channels requested, and N the number of channels present, + // and Cn be the nth channel; let stereo L be the sum of all L and center channels, + // and stereo R be the sum of all R and center channels (channel assignment from the + // vorbis spec). + // M N output + // 1 k sum(Ck) for all k + // 2 * stereo L, stereo R + // k l k > l, the first l channels, then 0s + // k l k <= l, the first k channels + // Note that this is not _good_ surround etc. mixing at all! It's just so + // you get something useful. + + extern int stb_vorbis_get_samples_float_interleaved(stb_vorbis *f, int channels, float *buffer, int num_floats); + extern int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, int num_samples); + // gets num_samples samples, not necessarily on a frame boundary--this requires + // buffering so you have to supply the buffers. DOES NOT APPLY THE COERCION RULES. + // Returns the number of samples stored per channel; it may be less than requested + // at the end of the file. If there are no more samples in the file, returns 0. + +#ifndef STB_VORBIS_NO_INTEGER_CONVERSION + extern int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short *buffer, int num_shorts); + extern int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, int num_samples); +#endif + // gets num_samples samples, not necessarily on a frame boundary--this requires + // buffering so you have to supply the buffers. Applies the coercion rules above + // to produce 'channels' channels. Returns the number of samples stored per channel; + // it may be less than requested at the end of the file. If there are no more + // samples in the file, returns 0. + +#endif + + //////// ERROR CODES + + enum STBVorbisError + { + VORBIS__no_error, + + VORBIS_need_more_data=1, // not a real error + + VORBIS_invalid_api_mixing, // can't mix API modes + VORBIS_outofmem, // not enough memory + VORBIS_feature_not_supported, // uses floor 0 + VORBIS_too_many_channels, // STB_VORBIS_MAX_CHANNELS is too small + VORBIS_file_open_failure, // fopen() failed + VORBIS_seek_without_length, // can't seek in unknown-length file + + VORBIS_unexpected_eof=10, // file is truncated? + VORBIS_seek_invalid, // seek past EOF + + // decoding errors (corrupt/invalid stream) -- you probably + // don't care about the exact details of these + + // vorbis errors: + VORBIS_invalid_setup=20, + VORBIS_invalid_stream, + + // ogg errors: + VORBIS_missing_capture_pattern=30, + VORBIS_invalid_stream_structure_version, + VORBIS_continued_packet_flag_invalid, + VORBIS_incorrect_stream_serial_number, + VORBIS_invalid_first_page, + VORBIS_bad_packet_type, + VORBIS_cant_find_last_page, + VORBIS_seek_failed, + }; + + +#ifdef __cplusplus +} +#endif + +#endif // STB_VORBIS_INCLUDE_STB_VORBIS_H +// +// HEADER ENDS HERE +// +////////////////////////////////////////////////////////////////////////////// diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/src/ofxMaxim.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/src/ofxMaxim.h new file mode 100644 index 0000000..e902f14 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/ofxMaxim/src/ofxMaxim.h @@ -0,0 +1,119 @@ +/* + * maximilian + * platform independent synthesis library using portaudio or rtaudio + * + * Created by Mick Grierson on 29/12/2009. + * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved. + * Thanks to the Goldsmiths Creative Computing Team. + * Special thanks to Arturo Castro for the PortAudio implementation. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _OFMAXIM_H +#define _OFMAXIM_H + +#include "maximilian.h" +#include "maxiFFT.h" +#include "maxiGrains.h" +#include "maxiMFCC.h" +#include "maxiBark.h" + + +typedef maxiMix ofxMaxiMix; +typedef maxiOsc ofxMaxiOsc; +typedef maxiEnvelope ofxMaxiEnvelope; +typedef maxiDelayline ofxMaxiDelayline; +typedef maxiFilter ofxMaxiFilter; +typedef maxiSample ofxMaxiSample; +typedef maxiFFT ofxMaxiFFT; +typedef maxiIFFT ofxMaxiIFFT; +typedef maxiFFTOctaveAnalyzer ofxMaxiFFTOctaveAnalyzer; +typedef maxiSettings ofxMaxiSettings; +typedef maxiMFCC ofxMaxiMFCC; + + +//typedef maxiSignal vector; +// +//class maxiBase { +// virtual maxiSignal play() = {}; +//}; +// +//class ofMaxiSine : public maxiBase { +// maxiOsc osc; +// double freq; +// +// void update(double freq) { +// freq = freq; +// } +// void play() { +// osc.sine(freq); +// } +//} +// +// +//class maxiNoise : public maxiBase { +// maxiBase* update() { +// //do something? +// }; +// +// double play() { +// return rand() / (float)RAND_MAX; +// } +//}; +// +//class maxiAnotherUGen : public maxiBase { +// maxiBase* update(double param1, bool param2); +//}; +// +//class maxiYetAnotherUGen : public maxiBase { +// maxiBase* update(int something, float somethingElse); +//}; +// +//void maxiProcess(maxiSignal &signal, maxiBase *ugen) { +// double val = ugen->play(); +// for(int i=0; i < signal.size(); i++) { +// signal[i] = val; +// } +//} +// +//void maxiBlock(maxiSignal &signal, maxiBase *ugen) { +// for (int i=0; i < 64; i++) { +// maxiProcess(signal, ugen); +// } +//} +// +//typedef maxiUGens vector +// +//maxiNoise ugen1; +//maxiAnotherUGen ugen2; +//maxiUGens ugen1 = createUGens(maxiNoise, 2); +// +//maxiSignal sig(2); +//maxiProcess(sig, ugen1.update()); +//maxiProcess(sig, ugen2.update(8.2, false)); +// +//ugen.update(2,3)->play(); + + +#endif diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/openFrameworks-Info.plist b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/openFrameworks-Info.plist new file mode 100644 index 0000000..8d64d2b --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/openFrameworks-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + cc.openFrameworks.ofapp + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CFBundleIconFile + ${ICON} + + diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/main.cpp b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/main.cpp new file mode 100644 index 0000000..8bce185 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/main.cpp @@ -0,0 +1,14 @@ +#include "ofMain.h" +#include "ofApp.h" + +//======================================================================== +int main( ){ + + ofSetupOpenGL(1024,768, OF_WINDOW); // <-------- setup the GL context + + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + ofRunApp( new ofApp()); + +} diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/ofApp.cpp b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/ofApp.cpp new file mode 100644 index 0000000..3e7b517 --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/ofApp.cpp @@ -0,0 +1,61 @@ +#include "ofApp.h" + +//-------------------------------------------------------------- +void ofApp::setup(){ + +} + +//-------------------------------------------------------------- +void ofApp::update(){ + +} + +//-------------------------------------------------------------- +void ofApp::draw(){ + +} + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} \ No newline at end of file diff --git a/ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/ofApp.h b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/ofApp.h new file mode 100644 index 0000000..6d640be --- /dev/null +++ b/ofxMaxim/openFrameworksExamples/OSX/emptyExample/src/ofApp.h @@ -0,0 +1,23 @@ +#pragma once + +#include "ofMain.h" +#include "ofxMaxim.h" + +class ofApp : public ofBaseApp{ + public: + void setup(); + void update(); + void draw(); + + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + + ofxMaxiSample sample; +}; diff --git a/player.cpp b/player.cpp index 51ae4fb..4813dfc 100644 --- a/player.cpp +++ b/player.cpp @@ -27,8 +27,6 @@ void setup();//use this to do any initialisation if you want. void play(double *output);//run dac! Very very often. Too often in fact. er... - - #ifdef MAXIMILIAN_PORTAUDIO int routing(const void *inputBuffer, void *outputBuffer, -- cgit v1.3 From 0c154ee2ccda9dce065c666afaaaeadd449bef4c Mon Sep 17 00:00:00 2001 From: mick grierson Date: Thu, 1 Oct 2015 09:43:23 +0100 Subject: Making this branch current --- main.cpp | 76 ++++++++++++++++++--- .../UserInterfaceState.xcuserstate | Bin 63022 -> 64358 bytes 2 files changed, 68 insertions(+), 8 deletions(-) (limited to 'maximilianTest.xcodeproj/project.xcworkspace') diff --git a/main.cpp b/main.cpp index ea51186..fefc261 100755 --- a/main.cpp +++ b/main.cpp @@ -1,21 +1,81 @@ #include "maximilian.h" -maxiSample mySample; +//This shows how to use maximilian to build a polyphonic synth. + +//These are the synthesiser bits +maxiOsc VCO1[6],VCO2[6],LFO1[6],LFO2[6]; +maxiFilter VCF[6]; +maxiEnv ADSR[6]; + +//This is a bunch of control signals so that we can hear something + +maxiOsc timer;//this is the metronome +int currentCount,lastCount,voice=0;//these values are used to check if we have a new beat this sample + +//and these are some variables we can use to pass stuff around + +double VCO1out[6],VCO2out[6],LFO1out[6],LFO2out[6],VCFout[6],ADSRout[6],mix,pitch[6]; void setup() {//some inits - mySample.load("/Users/michaelgrierson/Documents/workspace/coursera2/full-stack-mooc-5/code/week2/music_machine_2015/public/bassline32bit.wav"); - cout << mySample.myBitsPerSample; - + for (int i=0;i<6;i++) { + + ADSR[i].setAttack(0); + ADSR[i].setDecay(200); + ADSR[i].setSustain(0.2); + ADSR[i].setRelease(2000); + + } } void play(double *output) { + mix=0;//we're adding up the samples each update and it makes sense to clear them each time first. - output[0]=mySample.play(2); + //so this first bit is just a basic metronome so we can hear what we're doing. + + currentCount=(int)timer.phasor(8);//this sets up a metronome that ticks 8 times a second + + if (lastCount!=currentCount) {//if we have a new timer int this sample, play the sound + + if (voice==6) { + voice=0; + } + + ADSR[voice].trigger=1;//trigger the envelope from the start + pitch[voice]=voice+1; + voice++; + + } + + //and this is where we build the synth + + for (int i=0; i<6; i++) { + + + ADSRout[i]=ADSR[i].adsr(1.,ADSR[i].trigger);//our ADSR env is passed a constant signal of 1 to generate the transient. + + LFO1out[i]=LFO1[i].sinebuf(0.2);//this lfo is a sinewave at 0.2 hz + + VCO1out[i]=VCO1[i].pulse(55*pitch[i],0.6);//here's VCO1. it's a pulse wave at 55 hz, with a pulse width of 0.6 + VCO2out[i]=VCO2[i].pulse((110*pitch[i])+LFO1out[i],0.2);//here's VCO2. it's a pulse wave at 110hz with LFO modulation on the frequency, and width of 0.2 + + + VCFout[i]=VCF[i].lores((VCO1out[i]+VCO2out[i])*0.5, 250+((pitch[i]+LFO1out[i])*1000), 10);//now we stick the VCO's into the VCF, using the ADSR as the filter cutoff + + mix+=VCFout[i]*ADSRout[i]/6;//finally we add the ADSR as an amplitude modulator + + + } + + output[0]=mix*0.5;//left channel + output[1]=mix*0.5;//right channel + + + // This just sends note-off messages. + for (int i=0; i<6; i++) { + ADSR[i].trigger=0; + } - output[1]=output[0]; - } - diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate index c3b8e23..86d07c4 100644 Binary files a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate and b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate differ -- cgit v1.3