diff --git a/src/8VERT.cpp b/src/8VERT.cpp index c463ccf..b176fa9 100644 --- a/src/8VERT.cpp +++ b/src/8VERT.cpp @@ -72,12 +72,12 @@ _8VERTWidget::_8VERTWidget() { addOutput(createOutput(Vec(86.393, 281.059), module, 6)); addOutput(createOutput(Vec(86.393, 319.504), module, 7)); - addChild(createValueLight>(Vec(107.702, 50.414), &module->lights[0].value)); - addChild(createValueLight>(Vec(107.702, 88.859), &module->lights[1].value)); - addChild(createValueLight>(Vec(107.702, 127.304), &module->lights[2].value)); - addChild(createValueLight>(Vec(107.702, 165.745), &module->lights[3].value)); - addChild(createValueLight>(Vec(107.702, 204.19), &module->lights[4].value)); - addChild(createValueLight>(Vec(107.702, 242.635), &module->lights[5].value)); - addChild(createValueLight>(Vec(107.702, 281.076), &module->lights[6].value)); - addChild(createValueLight>(Vec(107.702, 319.521), &module->lights[7].value)); + addChild(createLight>(Vec(107.702, 50.414), module, 0)); + addChild(createLight>(Vec(107.702, 88.859), module, 1)); + addChild(createLight>(Vec(107.702, 127.304), module, 2)); + addChild(createLight>(Vec(107.702, 165.745), module, 3)); + addChild(createLight>(Vec(107.702, 204.19), module, 4)); + addChild(createLight>(Vec(107.702, 242.635), module, 5)); + addChild(createLight>(Vec(107.702, 281.076), module, 6)); + addChild(createLight>(Vec(107.702, 319.521), module, 7)); } diff --git a/src/ADSR.cpp b/src/ADSR.cpp index 12205ff..0289ab0 100644 --- a/src/ADSR.cpp +++ b/src/ADSR.cpp @@ -23,13 +23,19 @@ struct ADSR : Module { ENVELOPE_OUTPUT, NUM_OUTPUTS }; + enum LightIds { + ATTACK_LIGHT, + DECAY_LIGHT, + SUSTAIN_LIGHT, + RELEASE_LIGHT, + NUM_LIGHTS + }; bool decaying = false; float env = 0.0; SchmittTrigger trigger; - float lights[4] = {}; - ADSR() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) { + ADSR() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { trigger.setThresholds(0.0, 1.0); } void step() override; @@ -43,10 +49,10 @@ void ADSR::step() { float release = clampf(params[RELEASE_PARAM].value + inputs[RELEASE_PARAM].value / 10.0, 0.0, 1.0); // Lights - lights[0] = 2.0*attack - 1.0; - lights[1] = 2.0*decay - 1.0; - lights[2] = 2.0*sustain - 1.0; - lights[3] = 2.0*release - 1.0; + lights[ATTACK_LIGHT].value = 2.0*attack - 1.0; + lights[DECAY_LIGHT].value = 2.0*decay - 1.0; + lights[SUSTAIN_LIGHT].value = 2.0*sustain - 1.0; + lights[RELEASE_LIGHT].value = 2.0*release - 1.0; // Gate and trigger bool gated = inputs[GATE_INPUT].value >= 1.0; @@ -126,8 +132,8 @@ ADSRWidget::ADSRWidget() { addInput(createInput(Vec(48, 320), module, ADSR::TRIG_INPUT)); addOutput(createOutput(Vec(87, 320), module, ADSR::ENVELOPE_OUTPUT)); - addChild(createValueLight>(Vec(94, 41), &module->lights[0])); - addChild(createValueLight>(Vec(94, 108), &module->lights[1])); - addChild(createValueLight>(Vec(94, 175), &module->lights[2])); - addChild(createValueLight>(Vec(94, 241), &module->lights[3])); + addChild(createLight>(Vec(94, 41), module, ADSR::ATTACK_LIGHT)); + addChild(createLight>(Vec(94, 108), module, ADSR::DECAY_LIGHT)); + addChild(createLight>(Vec(94, 175), module, ADSR::SUSTAIN_LIGHT)); + addChild(createLight>(Vec(94, 241), module, ADSR::RELEASE_LIGHT)); } diff --git a/src/LFO.cpp b/src/LFO.cpp index c3f2248..5d89076 100644 --- a/src/LFO.cpp +++ b/src/LFO.cpp @@ -90,11 +90,14 @@ struct LFO : Module { SQR_OUTPUT, NUM_OUTPUTS }; + enum LightIds { + PHASE_LIGHT, + NUM_LIGHTS + }; LFOGenerator generator; - float lights[1] = {}; - LFO() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} + LFO() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; }; @@ -112,7 +115,7 @@ void LFO::step() { outputs[SAW_OUTPUT].value = 5.0 * generator.saw(); outputs[SQR_OUTPUT].value = 5.0 * generator.sqr(); - lights[0] = generator.light(); + lights[PHASE_LIGHT].value = generator.light(); } @@ -152,7 +155,7 @@ LFOWidget::LFOWidget() { addOutput(createOutput(Vec(80, 320), module, LFO::SAW_OUTPUT)); addOutput(createOutput(Vec(114, 320), module, LFO::SQR_OUTPUT)); - addChild(createValueLight>(Vec(99, 42), &module->lights[0])); + addChild(createLight>(Vec(99, 42), module, LFO::PHASE_LIGHT)); } @@ -176,11 +179,14 @@ struct LFO2 : Module { INTERP_OUTPUT, NUM_OUTPUTS }; + enum LightIds { + PHASE_LIGHT, + NUM_LIGHTS + }; LFOGenerator generator; - float lights[1] = {}; - LFO2() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} + LFO2() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; }; @@ -203,7 +209,7 @@ void LFO2::step() { interp = crossf(generator.saw(), generator.sqr(), wave - 2.0); outputs[INTERP_OUTPUT].value = 5.0 * interp; - lights[0] = generator.light(); + lights[PHASE_LIGHT].value = generator.light(); } @@ -237,5 +243,5 @@ LFO2Widget::LFO2Widget() { addOutput(createOutput(Vec(54, 319), module, LFO2::INTERP_OUTPUT)); - addChild(createValueLight>(Vec(68, 41), &module->lights[0])); + addChild(createLight>(Vec(68, 41), module, LFO2::PHASE_LIGHT)); } diff --git a/src/SEQ3.cpp b/src/SEQ3.cpp index 033ad80..fec7db2 100644 --- a/src/SEQ3.cpp +++ b/src/SEQ3.cpp @@ -29,6 +29,14 @@ struct SEQ3 : Module { GATE_OUTPUT, NUM_OUTPUTS = GATE_OUTPUT + 8 }; + enum LightIds { + RUNNING_LIGHT, + RESET_LIGHT, + GATES_LIGHT, + ROW_LIGHTS, + GATE_LIGHTS = ROW_LIGHTS + 3, + NUM_LIGHTS = GATE_LIGHTS + 8 + }; bool running = true; SchmittTrigger clockTrigger; // for external clock @@ -39,6 +47,7 @@ struct SEQ3 : Module { float phase = 0.0; int index = 0; bool gateState[8] = {}; + float resetLight = 0.0; float stepLights[8] = {}; enum GateMode { @@ -49,14 +58,7 @@ struct SEQ3 : Module { GateMode gateMode = TRIGGER; PulseGenerator gatePulse; - // Lights - float runningLight = 0.0; - float resetLight = 0.0; - float gatesLight = 0.0; - float rowLights[3] = {}; - float gateLights[8] = {}; - - SEQ3() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} + SEQ3() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; json_t *toJson() override { @@ -122,7 +124,7 @@ void SEQ3::step() { if (runningTrigger.process(params[RUN_PARAM].value)) { running = !running; } - runningLight = running ? 1.0 : 0.0; + lights[RUNNING_LIGHT].value = running ? 1.0 : 0.0; bool nextStep = false; @@ -181,7 +183,7 @@ void SEQ3::step() { outputs[GATE_OUTPUT + i].value = gateOn ? 10.0 : 0.0; stepLights[i] -= stepLights[i] / lightLambda / engineGetSampleRate(); - gateLights[i] = gateState[i] ? 1.0 - stepLights[i] : stepLights[i]; + lights[GATE_LIGHTS + i].value = gateState[i] ? 1.0 - stepLights[i] : stepLights[i]; } // Rows @@ -199,10 +201,11 @@ void SEQ3::step() { outputs[ROW2_OUTPUT].value = row2; outputs[ROW3_OUTPUT].value = row3; outputs[GATES_OUTPUT].value = gatesOn ? 10.0 : 0.0; - gatesLight = gatesOn ? 1.0 : 0.0; - rowLights[0] = row1; - rowLights[1] = row2; - rowLights[2] = row3; + lights[RESET_LIGHT].value = resetLight; + lights[GATES_LIGHT].value = gatesOn ? 1.0 : 0.0; + lights[ROW_LIGHTS].value = row1; + lights[ROW_LIGHTS + 1].value = row2; + lights[ROW_LIGHTS + 2].value = row3; } @@ -225,14 +228,14 @@ SEQ3Widget::SEQ3Widget() { addParam(createParam(Vec(18, 56), module, SEQ3::CLOCK_PARAM, -2.0, 6.0, 2.0)); addParam(createParam(Vec(60, 61-1), module, SEQ3::RUN_PARAM, 0.0, 1.0, 0.0)); - addChild(createValueLight>(Vec(65, 65), &module->runningLight)); + addChild(createLight>(Vec(65, 65), module, SEQ3::RUNNING_LIGHT)); addParam(createParam(Vec(99, 61-1), module, SEQ3::RESET_PARAM, 0.0, 1.0, 0.0)); - addChild(createValueLight>(Vec(104, 65), &module->resetLight)); + addChild(createLight>(Vec(104, 65), module, SEQ3::RESET_LIGHT)); addParam(createParam(Vec(132, 56), module, SEQ3::STEPS_PARAM, 1.0, 8.0, 8.0)); - addChild(createValueLight>(Vec(180, 65), &module->gatesLight)); - addChild(createValueLight>(Vec(219, 65), &module->rowLights[0])); - addChild(createValueLight>(Vec(257, 65), &module->rowLights[1])); - addChild(createValueLight>(Vec(296, 65), &module->rowLights[2])); + addChild(createLight>(Vec(180, 65), module, SEQ3::GATES_LIGHT)); + addChild(createLight>(Vec(219, 65), module, SEQ3::ROW_LIGHTS)); + addChild(createLight>(Vec(257, 65), module, SEQ3::ROW_LIGHTS + 1)); + addChild(createLight>(Vec(296, 65), module, SEQ3::ROW_LIGHTS + 2)); static const float portX[8] = {20, 58, 96, 135, 173, 212, 250, 289}; addInput(createInput(Vec(portX[0]-1, 98), module, SEQ3::CLOCK_INPUT)); @@ -249,7 +252,7 @@ SEQ3Widget::SEQ3Widget() { addParam(createParam(Vec(portX[i]-2, 198), module, SEQ3::ROW2_PARAM + i, 0.0, 6.0, 0.0)); addParam(createParam(Vec(portX[i]-2, 240), module, SEQ3::ROW3_PARAM + i, 0.0, 6.0, 0.0)); addParam(createParam(Vec(portX[i]+2, 278-1), module, SEQ3::GATE_PARAM + i, 0.0, 1.0, 0.0)); - addChild(createValueLight>(Vec(portX[i]+7, 282), &module->gateLights[i])); + addChild(createLight>(Vec(portX[i]+7, 282), module, SEQ3::GATE_LIGHTS + i)); addOutput(createOutput(Vec(portX[i]-1, 307), module, SEQ3::GATE_OUTPUT + i)); } } diff --git a/src/Scope.cpp b/src/Scope.cpp index f21c470..0c80769 100644 --- a/src/Scope.cpp +++ b/src/Scope.cpp @@ -26,6 +26,13 @@ struct Scope : Module { enum OutputIds { NUM_OUTPUTS }; + enum LightIds { + LISSAJOUS_LIGHT, + NOT_LISSAJOUS_LIGHT, // FIXME: what should this be called? + EXTERNAL_LIGHT, + INTERNAL_LIGHT, + NUM_LIGHTS + }; float bufferX[BUFFER_SIZE] = {}; float bufferY[BUFFER_SIZE] = {}; @@ -36,10 +43,9 @@ struct Scope : Module { SchmittTrigger extTrigger; bool lissajous = false; bool external = false; - float lights[4] = {}; SchmittTrigger resetTrigger; - Scope() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} + Scope() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; json_t *toJson() override { @@ -71,14 +77,14 @@ void Scope::step() { if (sumTrigger.process(params[LISSAJOUS_PARAM].value)) { lissajous = !lissajous; } - lights[0] = lissajous ? 0.0 : 1.0; - lights[1] = lissajous ? 1.0 : 0.0; + lights[LISSAJOUS_LIGHT].value = lissajous ? 0.0 : 1.0; + lights[NOT_LISSAJOUS_LIGHT].value = lissajous ? 1.0 : 0.0; if (extTrigger.process(params[EXTERNAL_PARAM].value)) { external = !external; } - lights[2] = external ? 0.0 : 1.0; - lights[3] = external ? 1.0 : 0.0; + lights[EXTERNAL_LIGHT].value = external ? 0.0 : 1.0; + lights[INTERNAL_LIGHT].value = external ? 1.0 : 0.0; // Compute time float deltaTime = powf(2.0, params[TIME_PARAM].value); @@ -332,8 +338,8 @@ ScopeWidget::ScopeWidget() { addInput(createInput(Vec(63, 319), module, Scope::Y_INPUT)); addInput(createInput(Vec(154, 319), module, Scope::TRIG_INPUT)); - addChild(createValueLight>(Vec(104, 251), &module->lights[0])); - addChild(createValueLight>(Vec(104, 296), &module->lights[1])); - addChild(createValueLight>(Vec(150, 251), &module->lights[2])); - addChild(createValueLight>(Vec(150, 296), &module->lights[3])); + addChild(createLight>(Vec(104, 251), module, Scope::LISSAJOUS_LIGHT)); + addChild(createLight>(Vec(104, 296), module, Scope::NOT_LISSAJOUS_LIGHT)); + addChild(createLight>(Vec(150, 251), module, Scope::EXTERNAL_LIGHT)); + addChild(createLight>(Vec(150, 296), module, Scope::INTERNAL_LIGHT)); } diff --git a/src/VCO.cpp b/src/VCO.cpp index d255c35..6273913 100644 --- a/src/VCO.cpp +++ b/src/VCO.cpp @@ -185,13 +185,16 @@ struct VCO : Module { TRI_OUTPUT, SAW_OUTPUT, SQR_OUTPUT, - PITCH_LIGHT, NUM_OUTPUTS }; + enum LightIds { + PITCH_LIGHT, + NUM_LIGHTS + }; VoltageControlledOscillator<16, 16> oscillator; - VCO() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} + VCO() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; }; @@ -221,7 +224,7 @@ void VCO::step() { if (outputs[SQR_OUTPUT].active) outputs[SQR_OUTPUT].value = 5.0 * oscillator.sqr(); - outputs[PITCH_LIGHT].value = oscillator.light(); + lights[PITCH_LIGHT].value = oscillator.light(); } @@ -261,7 +264,7 @@ VCOWidget::VCOWidget() { addOutput(createOutput(Vec(80, 320), module, VCO::SAW_OUTPUT)); addOutput(createOutput(Vec(114, 320), module, VCO::SQR_OUTPUT)); - addChild(createValueLight>(Vec(99, 42), &module->outputs[VCO::PITCH_LIGHT].value)); + addChild(createLight>(Vec(99, 42), module, VCO::PITCH_LIGHT)); } @@ -282,13 +285,16 @@ struct VCO2 : Module { }; enum OutputIds { OUT_OUTPUT, - PITCH_LIGHT, NUM_OUTPUTS }; + enum LightIds { + PITCH_LIGHT, + NUM_LIGHTS + }; VoltageControlledOscillator<8, 8> oscillator; - VCO2() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} + VCO2() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; }; @@ -314,7 +320,7 @@ void VCO2::step() { out = crossf(oscillator.saw(), oscillator.sqr(), wave - 2.0); outputs[OUT_OUTPUT].value = 5.0 * out; - outputs[PITCH_LIGHT].value = oscillator.light(); + lights[PITCH_LIGHT].value = oscillator.light(); } @@ -348,7 +354,7 @@ VCO2Widget::VCO2Widget() { addOutput(createOutput(Vec(54, 320), module, VCO2::OUT_OUTPUT)); - addChild(createValueLight>(Vec(68, 41), &module->outputs[VCO2::PITCH_LIGHT].value)); + addChild(createLight>(Vec(68, 41), module, VCO2::PITCH_LIGHT)); } @@ -358,4 +364,4 @@ float sawTable[2048] = { float triTable[2048] = { 0.00205034, 0.00360933, 0.00578754, 0.00835358, 0.0110761, 0.0137236, 0.0160981, 0.0183687, 0.020617, 0.0228593, 0.0251122, 0.027392, 0.0297206, 0.0321003, 0.034499, 0.0368839, 0.0392222, 0.0414812, 0.0436497, 0.0457532, 0.0478204, 0.0498797, 0.0519597, 0.0540801, 0.0562156, 0.0583599, 0.0605111, 0.0626673, 0.0648265, 0.0669885, 0.069155, 0.0713261, 0.0735021, 0.0756831, 0.0778692, 0.0800601, 0.0822559, 0.0844568, 0.086663, 0.0888749, 0.091096, 0.0933308, 0.095572, 0.097812, 0.100043, 0.102257, 0.104463, 0.106663, 0.108853, 0.111028, 0.113181, 0.115309, 0.11741, 0.11949, 0.121555, 0.123613, 0.125667, 0.127712, 0.129738, 0.131757, 0.133783, 0.135828, 0.137904, 0.140002, 0.142116, 0.144248, 0.146397, 0.148564, 0.150756, 0.152981, 0.155227, 0.157478, 0.159719, 0.161935, 0.164142, 0.166348, 0.16854, 0.170706, 0.172831, 0.174903, 0.176915, 0.178884, 0.180829, 0.18277, 0.184725, 0.186695, 0.188658, 0.190622, 0.192593, 0.194577, 0.196582, 0.198611, 0.200659, 0.202715, 0.204773, 0.206824, 0.208863, 0.210895, 0.212924, 0.214952, 0.216985, 0.219024, 0.221064, 0.223103, 0.225147, 0.227201, 0.229273, 0.231368, 0.23349, 0.235633, 0.237784, 0.239934, 0.242072, 0.244201, 0.246336, 0.248466, 0.250583, 0.252677, 0.254738, 0.256759, 0.258749, 0.260722, 0.26269, 0.264667, 0.26666, 0.268659, 0.27066, 0.272662, 0.274664, 0.276664, 0.278666, 0.280672, 0.282676, 0.284675, 0.286663, 0.288636, 0.290596, 0.292546, 0.294487, 0.296422, 0.298354, 0.300276, 0.30218, 0.304077, 0.305982, 0.307905, 0.309861, 0.311873, 0.313923, 0.315983, 0.318021, 0.320007, 0.321913, 0.323747, 0.325536, 0.327304, 0.329078, 0.330883, 0.33272, 0.334568, 0.336425, 0.338291, 0.340166, 0.342047, 0.34393, 0.345818, 0.347717, 0.349633, 0.351571, 0.353541, 0.355551, 0.357581, 0.359612, 0.361626, 0.363604, 0.365556, 0.367494, 0.369414, 0.371311, 0.373181, 0.375019, 0.376812, 0.378576, 0.380325, 0.382078, 0.38385, 0.385646, 0.387452, 0.389264, 0.391078, 0.39289, 0.394698, 0.396507, 0.398318, 0.400125, 0.401927, 0.403717, 0.405494, 0.407256, 0.40901, 0.41076, 0.41251, 0.414267, 0.416024, 0.41778, 0.419538, 0.421301, 0.423072, 0.424857, 0.426659, 0.428472, 0.430287, 0.432097, 0.433893, 0.435678, 0.437459, 0.439233, 0.440997, 0.442746, 0.444477, 0.446184, 0.44787, 0.449548, 0.451226, 0.452915, 0.454622, 0.456343, 0.45807, 0.459797, 0.461518, 0.463227, 0.464921, 0.466606, 0.468285, 0.469962, 0.47164, 0.473324, 0.475015, 0.476707, 0.478398, 0.480083, 0.481759, 0.483424, 0.485082, 0.486734, 0.488379, 0.490016, 0.491647, 0.493268, 0.49488, 0.496487, 0.49809, 0.499692, 0.501294, 0.502892, 0.504487, 0.506082, 0.507679, 0.509283, 0.510886, 0.512485, 0.514089, 0.515705, 0.51734, 0.519007, 0.520729, 0.522484, 0.524239, 0.52596, 0.527614, 0.529175, 0.530657, 0.532094, 0.533515, 0.534954, 0.53644, 0.537952, 0.539475, 0.541016, 0.542579, 0.544171, 0.545804, 0.547497, 0.549225, 0.550958, 0.552666, 0.554319, 0.555907, 0.557451, 0.558968, 0.560474, 0.561985, 0.563516, 0.565063, 0.566615, 0.568164, 0.569701, 0.571217, 0.572711, 0.574192, 0.575659, 0.577106, 0.578532, 0.579932, 0.581296, 0.582629, 0.583943, 0.585252, 0.586569, 0.5879, 0.589228, 0.590557, 0.591892, 0.593238, 0.594602, 0.595985, 0.597385, 0.598797, 0.600218, 0.601643, 0.603069, 0.604501, 0.605938, 0.60738, 0.608827, 0.610277, 0.61173, 0.613187, 0.614649, 0.616114, 0.617584, 0.619058, 0.620545, 0.622044, 0.623545, 0.625037, 0.62651, 0.627958, 0.629403, 0.630838, 0.632249, 0.633624, 0.634949, 0.636201, 0.63738, 0.63852, 0.639657, 0.640828, 0.642065, 0.643361, 0.644693, 0.646047, 0.647405, 0.648753, 0.650083, 0.651415, 0.652746, 0.654072, 0.655389, 0.656694, 0.65799, 0.659279, 0.660559, 0.661826, 0.663078, 0.664312, 0.665526, 0.666724, 0.667911, 0.66909, 0.670267, 0.671435, 0.672582, 0.673724, 0.674874, 0.676046, 0.677253, 0.678497, 0.679767, 0.681053, 0.682348, 0.683643, 0.684935, 0.686242, 0.687554, 0.688863, 0.690158, 0.691429, 0.692672, 0.693896, 0.695105, 0.696306, 0.697506, 0.698708, 0.699909, 0.701106, 0.7023, 0.703489, 0.704673, 0.705857, 0.707048, 0.708236, 0.709408, 0.710553, 0.711661, 0.712721, 0.713743, 0.714746, 0.715747, 0.716765, 0.71781, 0.718864, 0.719926, 0.720996, 0.722076, 0.723167, 0.724272, 0.725391, 0.726519, 0.727651, 0.728784, 0.729915, 0.731064, 0.732222, 0.733373, 0.734501, 0.73559, 0.736625, 0.737607, 0.738559, 0.739503, 0.740458, 0.741448, 0.742462, 0.74349, 0.744529, 0.745577, 0.746634, 0.747701, 0.748797, 0.749906, 0.751012, 0.752098, 0.753145, 0.754144, 0.755107, 0.756048, 0.756979, 0.757913, 0.758861, 0.759812, 0.760762, 0.761714, 0.76267, 0.763634, 0.76461, 0.765599, 0.766594, 0.76759, 0.768579, 0.769555, 0.770513, 0.77146, 0.772402, 0.773347, 0.774301, 0.775274, 0.776266, 0.777269, 0.778272, 0.779266, 0.780239, 0.781189, 0.782124, 0.783047, 0.783961, 0.784869, 0.785775, 0.786678, 0.787576, 0.788467, 0.78935, 0.790223, 0.791082, 0.791926, 0.79276, 0.793589, 0.794419, 0.795256, 0.796098, 0.79694, 0.797783, 0.79863, 0.799482, 0.80034, 0.801205, 0.802075, 0.802947, 0.80382, 0.804691, 0.805566, 0.806452, 0.807338, 0.808211, 0.80906, 0.809874, 0.810645, 0.811386, 0.81211, 0.812829, 0.813558, 0.814304, 0.815056, 0.815811, 0.816566, 0.81732, 0.818071, 0.818818, 0.819561, 0.820303, 0.821046, 0.821791, 0.82254, 0.823293, 0.824047, 0.824803, 0.825561, 0.82632, 0.827082, 0.827848, 0.828615, 0.829381, 0.830142, 0.830896, 0.83163, 0.832351, 0.833072, 0.833807, 0.83457, 0.835373, 0.83622, 0.837092, 0.837972, 0.838841, 0.839683, 0.840509, 0.841335, 0.842146, 0.842929, 0.84367, 0.844352, 0.844957, 0.845509, 0.846038, 0.846575, 0.847151, 0.847775, 0.848416, 0.849075, 0.849755, 0.850456, 0.851183, 0.85195, 0.852752, 0.85357, 0.854387, 0.855184, 0.855947, 0.856677, 0.857391, 0.858105, 0.858834, 0.859596, 0.860406, 0.861255, 0.862121, 0.86298, 0.863811, 0.864592, 0.86533, 0.86604, 0.866731, 0.867413, 0.868096, 0.868783, 0.869464, 0.87014, 0.870811, 0.871481, 0.872149, 0.872817, 0.873483, 0.874146, 0.874806, 0.875459, 0.876105, 0.876739, 0.877367, 0.877993, 0.878622, 0.879259, 0.879906, 0.880561, 0.88122, 0.881879, 0.882535, 0.883182, 0.883819, 0.884449, 0.885079, 0.885715, 0.886363, 0.887038, 0.887757, 0.888489, 0.889203, 0.889868, 0.890451, 0.890953, 0.891393, 0.891786, 0.892143, 0.892477, 0.8928, 0.89311, 0.893397, 0.893649, 0.893858, 0.894011, 0.894122, 0.894207, 0.894245, 0.894213, 0.894089, 0.893852, 0.893506, 0.893064, 0.892538, 0.891937, 0.891272, 0.890547, 0.889748, 0.888879, 0.887944, 0.886946, 0.885891, 0.884773, 0.883588, 0.882343, 0.881043, 0.879694, 0.878299, 0.876848, 0.875342, 0.87379, 0.872197, 0.87057, 0.868908, 0.867204, 0.86546, 0.863682, 0.861874, 0.860039, 0.858177, 0.856286, 0.854363, 0.852406, 0.850414, 0.848385, 0.846323, 0.844227, 0.842095, 0.839925, 0.837715, 0.835457, 0.83315, 0.830807, 0.82844, 0.826061, 0.82368, 0.821277, 0.818856, 0.816424, 0.81399, 0.811562, 0.80915, 0.806747, 0.804345, 0.801937, 0.799514, 0.797067, 0.7946, 0.792119, 0.789623, 0.787112, 0.784586, 0.782038, 0.779443, 0.776826, 0.774214, 0.771636, 0.76912, 0.766686, 0.764314, 0.761978, 0.759652, 0.757309, 0.754927, 0.752535, 0.750137, 0.747724, 0.745288, 0.742821, 0.740305, 0.737727, 0.73512, 0.732517, 0.72995, 0.727452, 0.725032, 0.722667, 0.72033, 0.717997, 0.715644, 0.713254, 0.710851, 0.708438, 0.706014, 0.703575, 0.701121, 0.698641, 0.696136, 0.693616, 0.691095, 0.688585, 0.686098, 0.683641, 0.6812, 0.678761, 0.676308, 0.673827, 0.671306, 0.668755, 0.666184, 0.663599, 0.661012, 0.65843, 0.655845, 0.653253, 0.65066, 0.64807, 0.645488, 0.64292, 0.640369, 0.637827, 0.635287, 0.632742, 0.630183, 0.6276, 0.624998, 0.622388, 0.619784, 0.617199, 0.614645, 0.612122, 0.60962, 0.607132, 0.60465, 0.602168, 0.599682, 0.597203, 0.594727, 0.592252, 0.589774, 0.58729, 0.584793, 0.582286, 0.579778, 0.577277, 0.57479, 0.572324, 0.569874, 0.567436, 0.56501, 0.562592, 0.560181, 0.557782, 0.555401, 0.553029, 0.550655, 0.548272, 0.545869, 0.543444, 0.541004, 0.538559, 0.536116, 0.533683, 0.531266, 0.52886, 0.52646, 0.524064, 0.521671, 0.519279, 0.516893, 0.514518, 0.512143, 0.50976, 0.507362, 0.504938, 0.502484, 0.50001, 0.497529, 0.495055, 0.4926, 0.490175, 0.487775, 0.485386, 0.482995, 0.480589, 0.478154, 0.475672, 0.473159, 0.47064, 0.468141, 0.46569, 0.463311, 0.460999, 0.458729, 0.456477, 0.454215, 0.451918, 0.449584, 0.44723, 0.444865, 0.442494, 0.440126, 0.437766, 0.43542, 0.433079, 0.430733, 0.428371, 0.425982, 0.423555, 0.421087, 0.418597, 0.416105, 0.413627, 0.411182, 0.408763, 0.406361, 0.403972, 0.401595, 0.399227, 0.396868, 0.394526, 0.392195, 0.389871, 0.387547, 0.385218, 0.382886, 0.380556, 0.378225, 0.375891, 0.373548, 0.371195, 0.368828, 0.366452, 0.364071, 0.361691, 0.359317, 0.356948, 0.354579, 0.352212, 0.349851, 0.347498, 0.345159, 0.342839, 0.340534, 0.338236, 0.335938, 0.333632, 0.331313, 0.328992, 0.326667, 0.324335, 0.321992, 0.319635, 0.317258, 0.314862, 0.312455, 0.310044, 0.307636, 0.305238, 0.30284, 0.300442, 0.298047, 0.29566, 0.293284, 0.290916, 0.288546, 0.286183, 0.283838, 0.281522, 0.279246, 0.277034, 0.274878, 0.272745, 0.270602, 0.268418, 0.266164, 0.263851, 0.261499, 0.259129, 0.256758, 0.254405, 0.25208, 0.249766, 0.247457, 0.245146, 0.242826, 0.240491, 0.238132, 0.235759, 0.233382, 0.231014, 0.228664, 0.22634, 0.224037, 0.221748, 0.219468, 0.217193, 0.214919, 0.212651, 0.210391, 0.208136, 0.205878, 0.203614, 0.201338, 0.19905, 0.196756, 0.194458, 0.192161, 0.189868, 0.187578, 0.185288, 0.182999, 0.180713, 0.178434, 0.176164, 0.173903, 0.171648, 0.1694, 0.167155, 0.164912, 0.162674, 0.16045, 0.158231, 0.156008, 0.153768, 0.151502, 0.149211, 0.146903, 0.144578, 0.142234, 0.139871, 0.137483, 0.135038, 0.132556, 0.130074, 0.127626, 0.125247, 0.12297, 0.120783, 0.118646, 0.116519, 0.114362, 0.112133, 0.109827, 0.107474, 0.105099, 0.102728, 0.100388, 0.0980987, 0.0958451, 0.0936141, 0.0913946, 0.0891749, 0.0869439, 0.084699, 0.0824483, 0.0801958, 0.0779458, 0.0757025, 0.073469, 0.0712418, 0.06902, 0.066804, 0.0645945, 0.0623925, 0.0602031, 0.0580333, 0.0558718, 0.0537071, 0.0515269, 0.0493195, 0.0470875, 0.0448382, 0.0425741, 0.0402977, 0.0380118, 0.0357137, 0.0333861, 0.0310419, 0.028698, 0.0263721, 0.0240815, 0.0218298, 0.019603, 0.0173978, 0.015211, 0.013039, 0.0108804, 0.00875302, 0.00665008, 0.00455578, 0.00245417, 0.000329488, -0.00183022, -0.00401578, -0.00621704, -0.00842485, -0.0106295, -0.0128215, -0.0149995, -0.0171705, -0.019339, -0.0215093, -0.0236866, -0.0258755, -0.0280772, -0.0302866, -0.0324974, -0.0347034, -0.0368983, -0.0390758, -0.0412378, -0.0433932, -0.0455518, -0.0477225, -0.0499145, -0.0521294, -0.0543603, -0.056599, -0.0588375, -0.0610684, -0.0632876, -0.0655037, -0.0677167, -0.0699247, -0.0721264, -0.0743201, -0.0765108, -0.0786993, -0.0808802, -0.0830487, -0.0851995, -0.0873284, -0.089439, -0.0915334, -0.0936121, -0.0956753, -0.0977242, -0.0997517, -0.101752, -0.103736, -0.105717, -0.107708, -0.10972, -0.111741, -0.113769, -0.115806, -0.117857, -0.119925, -0.122017, -0.124138, -0.126278, -0.128425, -0.130568, -0.132695, -0.134806, -0.136907, -0.139004, -0.141099, -0.143195, -0.145297, -0.147412, -0.149533, -0.151649, -0.15375, -0.155824, -0.157859, -0.159851, -0.161824, -0.163796, -0.16579, -0.167825, -0.169907, -0.172019, -0.174147, -0.176275, -0.178386, -0.18047, -0.182542, -0.184604, -0.186657, -0.188702, -0.19074, -0.192767, -0.19478, -0.196787, -0.198791, -0.200797, -0.202811, -0.204826, -0.206843, -0.208861, -0.210884, -0.212911, -0.214946, -0.216992, -0.219043, -0.221093, -0.223135, -0.225165, -0.227174, -0.229169, -0.231159, -0.233156, -0.235167, -0.237203, -0.239262, -0.241337, -0.243416, -0.245491, -0.247553, -0.249605, -0.251657, -0.253703, -0.255735, -0.257747, -0.25973, -0.261673, -0.263588, -0.265491, -0.267398, -0.269325, -0.271286, -0.27327, -0.275268, -0.277268, -0.279258, -0.281228, -0.283188, -0.285145, -0.28709, -0.289016, -0.290914, -0.292773, -0.294573, -0.296337, -0.298095, -0.299876, -0.301711, -0.303622, -0.305594, -0.307596, -0.309599, -0.311574, -0.313491, -0.315348, -0.31717, -0.318975, -0.320785, -0.322621, -0.324499, -0.326405, -0.328328, -0.330257, -0.332182, -0.334093, -0.33599, -0.337882, -0.339769, -0.341653, -0.343533, -0.345412, -0.347287, -0.34916, -0.351029, -0.352894, -0.354757, -0.356615, -0.358471, -0.360323, -0.362171, -0.364016, -0.365857, -0.367695, -0.36953, -0.371361, -0.373187, -0.375008, -0.376822, -0.378625, -0.380423, -0.382218, -0.384017, -0.385823, -0.387639, -0.389461, -0.391286, -0.393111, -0.39493, -0.396744, -0.398568, -0.400394, -0.402209, -0.404001, -0.405756, -0.407455, -0.409092, -0.410699, -0.412308, -0.41395, -0.415656, -0.417438, -0.419271, -0.421126, -0.422972, -0.424782, -0.426532, -0.428234, -0.429909, -0.431572, -0.433239, -0.434928, -0.436646, -0.438382, -0.440124, -0.44186, -0.443579, -0.445267, -0.446914, -0.448535, -0.450152, -0.451785, -0.453454, -0.455174, -0.456935, -0.458721, -0.460517, -0.462308, -0.464079, -0.465839, -0.467598, -0.46935, -0.471092, -0.472818, -0.474526, -0.476213, -0.477884, -0.479547, -0.481207, -0.482871, -0.484546, -0.486228, -0.487908, -0.489577, -0.491226, -0.492845, -0.49444, -0.496014, -0.497571, -0.499113, -0.500644, -0.502158, -0.503643, -0.505112, -0.506581, -0.508065, -0.509579, -0.511122, -0.512685, -0.514262, -0.515847, -0.517436, -0.519026, -0.520626, -0.522233, -0.523842, -0.525448, -0.527046, -0.528634, -0.530216, -0.531793, -0.533369, -0.534945, -0.536525, -0.538114, -0.539707, -0.541298, -0.542879, -0.544443, -0.545986, -0.54751, -0.549021, -0.550522, -0.552019, -0.553515, -0.555017, -0.556521, -0.558019, -0.559502, -0.56096, -0.562383, -0.563768, -0.565125, -0.566468, -0.567813, -0.569172, -0.57054, -0.571898, -0.573261, -0.574643, -0.576059, -0.577525, -0.579052, -0.580624, -0.582221, -0.583824, -0.585413, -0.586978, -0.588546, -0.590111, -0.591667, -0.593204, -0.594717, -0.596205, -0.597674, -0.599125, -0.600559, -0.601977, -0.60338, -0.604764, -0.606132, -0.607485, -0.608824, -0.610153, -0.611468, -0.612764, -0.614047, -0.615324, -0.616602, -0.617887, -0.619173, -0.620458, -0.621743, -0.623032, -0.624325, -0.625623, -0.626915, -0.628209, -0.629514, -0.630837, -0.632189, -0.633581, -0.635008, -0.636455, -0.637902, -0.639332, -0.640731, -0.642122, -0.643505, -0.644871, -0.646211, -0.647516, -0.648774, -0.649981, -0.651157, -0.652322, -0.653495, -0.654696, -0.655923, -0.657163, -0.658409, -0.659653, -0.660887, -0.662105, -0.66331, -0.664506, -0.6657, -0.666896, -0.668101, -0.669321, -0.670557, -0.671796, -0.673025, -0.674233, -0.675407, -0.676535, -0.677633, -0.678721, -0.679822, -0.680957, -0.682138, -0.683351, -0.684586, -0.685833, -0.687084, -0.688329, -0.689583, -0.69085, -0.692118, -0.69337, -0.694595, -0.69578, -0.696928, -0.698049, -0.699154, -0.700253, -0.701358, -0.702475, -0.703598, -0.704718, -0.705824, -0.70691, -0.707963, -0.708967, -0.709937, -0.710897, -0.711871, -0.712884, -0.713953, -0.715065, -0.716205, -0.717357, -0.718507, -0.719638, -0.720763, -0.721891, -0.723013, -0.724122, -0.725208, -0.726265, -0.72729, -0.728292, -0.72928, -0.730265, -0.731255, -0.732248, -0.73323, -0.734211, -0.7352, -0.736205, -0.737238, -0.738311, -0.739412, -0.740521, -0.741619, -0.742686, -0.743708, -0.744696, -0.745661, -0.746613, -0.747561, -0.748516, -0.749476, -0.750434, -0.75139, -0.752341, -0.753286, -0.754223, -0.75515, -0.756071, -0.756987, -0.757902, -0.758819, -0.759739, -0.760661, -0.761581, -0.762501, -0.763418, -0.764331, -0.765241, -0.76615, -0.767056, -0.767958, -0.768856, -0.769747, -0.770623, -0.771492, -0.772365, -0.773251, -0.77416, -0.775104, -0.776077, -0.777062, -0.778043, -0.779001, -0.779922, -0.780812, -0.781681, -0.782536, -0.783385, -0.784234, -0.785089, -0.785946, -0.7868, -0.787644, -0.788474, -0.789283, -0.790058, -0.790807, -0.791546, -0.792295, -0.793069, -0.793885, -0.79474, -0.795619, -0.796505, -0.797383, -0.798236, -0.799069, -0.799894, -0.800708, -0.801505, -0.802282, -0.803032, -0.80375, -0.804442, -0.80512, -0.805793, -0.806474, -0.807167, -0.807859, -0.808552, -0.809247, -0.809944, -0.810644, -0.811352, -0.812064, -0.812778, -0.813491, -0.814198, -0.814899, -0.815595, -0.816289, -0.816978, -0.817663, -0.818343, -0.819017, -0.819684, -0.820347, -0.821007, -0.821667, -0.822327, -0.822983, -0.823637, -0.824291, -0.824947, -0.82561, -0.826279, -0.826953, -0.827631, -0.828313, -0.829, -0.82969, -0.830403, -0.831135, -0.831867, -0.832579, -0.833252, -0.833867, -0.834421, -0.834934, -0.835429, -0.835926, -0.836447, -0.836999, -0.837564, -0.838138, -0.838714, -0.839288, -0.839852, -0.840397, -0.840932, -0.841471, -0.842025, -0.842609, -0.843234, -0.843893, -0.844576, -0.845274, -0.845979, -0.846681, -0.847395, -0.848127, -0.848861, -0.849583, -0.850275, -0.850926, -0.851554, -0.85216, -0.852739, -0.853287, -0.853801, -0.85427, -0.854693, -0.855083, -0.855456, -0.855826, -0.856207, -0.85659, -0.856966, -0.857339, -0.857712, -0.858088, -0.858469, -0.858855, -0.859243, -0.85963, -0.860011, -0.860383, -0.86074, -0.861083, -0.861421, -0.861764, -0.862121, -0.862499, -0.862889, -0.863289, -0.863701, -0.86413, -0.864576, -0.865053, -0.865568, -0.866101, -0.866632, -0.867139, -0.867603, -0.86803, -0.868434, -0.868816, -0.86918, -0.869529, -0.869881, -0.870272, -0.870662, -0.871001, -0.871238, -0.871324, -0.87118, -0.870828, -0.870378, -0.869937, -0.869614, -0.869502, -0.869488, -0.869554, -0.869727, -0.870037, -0.870513, -0.871247, -0.872318, -0.873557, -0.874789, -0.875836, -0.876525, -0.876945, -0.877194, -0.877256, -0.877115, -0.876754, -0.87615, -0.875272, -0.874164, -0.872877, -0.871464, -0.869974, -0.868396, -0.866678, -0.864844, -0.862921, -0.860934, -0.858903, -0.856797, -0.854614, -0.852368, -0.850075, -0.84775, -0.845392, -0.842974, -0.840512, -0.838024, -0.83553, -0.833047, -0.830567, -0.828078, -0.825584, -0.823086, -0.820586, -0.818085, -0.815569, -0.813046, -0.810528, -0.808027, -0.805556, -0.803131, -0.800752, -0.798393, -0.796028, -0.79363, -0.791176, -0.788669, -0.786125, -0.783558, -0.780983, -0.778414, -0.775859, -0.773306, -0.770751, -0.768194, -0.765633, -0.763064, -0.76048, -0.757883, -0.755282, -0.752691, -0.750121, -0.747581, -0.745068, -0.742576, -0.740095, -0.737621, -0.735144, -0.732669, -0.730205, -0.727744, -0.725278, -0.722802, -0.720306, -0.717784, -0.715244, -0.712698, -0.710156, -0.707631, -0.70513, -0.702646, -0.700175, -0.697711, -0.695248, -0.692784, -0.69032, -0.687859, -0.6854, -0.682941, -0.680482, -0.67802, -0.675555, -0.673088, -0.670622, -0.668159, -0.665703, -0.663256, -0.660822, -0.658392, -0.655958, -0.653513, -0.651048, -0.64856, -0.646055, -0.643541, -0.641026, -0.63852, -0.636029, -0.633553, -0.631083, -0.628611, -0.626129, -0.62363, -0.62111, -0.618576, -0.616031, -0.613479, -0.610924, -0.608366, -0.605796, -0.603217, -0.600638, -0.598067, -0.59551, -0.592974, -0.590451, -0.58794, -0.585435, -0.582935, -0.580436, -0.577928, -0.575415, -0.572911, -0.570425, -0.567972, -0.565563, -0.563209, -0.560889, -0.55858, -0.55626, -0.553906, -0.551515, -0.549106, -0.546682, -0.544246, -0.541801, -0.53935, -0.536897, -0.534438, -0.531967, -0.529476, -0.526961, -0.524413, -0.521828, -0.519219, -0.516602, -0.513988, -0.511392, -0.508796, -0.506192, -0.503597, -0.501024, -0.498489, -0.496007, -0.493576, -0.491182, -0.488812, -0.486449, -0.484079, -0.481706, -0.479345, -0.476989, -0.474628, -0.472254, -0.46986, -0.467445, -0.465015, -0.462576, -0.460135, -0.457698, -0.455269, -0.452846, -0.450424, -0.448, -0.445567, -0.443123, -0.440673, -0.438221, -0.435759, -0.433282, -0.430783, -0.428251, -0.425661, -0.423039, -0.420415, -0.417822, -0.415292, -0.412848, -0.410474, -0.40814, -0.405816, -0.40347, -0.401075, -0.39863, -0.396155, -0.393671, -0.391196, -0.388748, -0.386341, -0.38396, -0.381597, -0.379251, -0.376914, -0.374584, -0.372274, -0.369988, -0.367709, -0.365422, -0.36311, -0.360759, -0.358377, -0.355973, -0.353552, -0.35112, -0.348683, -0.346232, -0.343757, -0.341272, -0.338791, -0.33633, -0.333904, -0.331509, -0.329135, -0.326778, -0.324435, -0.322102, -0.319783, -0.317494, -0.315222, -0.312948, -0.310658, -0.308332, -0.305972, -0.303591, -0.301191, -0.298771, -0.296331, -0.293869, -0.291362, -0.288824, -0.286279, -0.28375, -0.281261, -0.278825, -0.276424, -0.274049, -0.27169, -0.269337, -0.266981, -0.264622, -0.262268, -0.259921, -0.257585, -0.255261, -0.252955, -0.250671, -0.248402, -0.246138, -0.243872, -0.241594, -0.239308, -0.237026, -0.234738, -0.232437, -0.230116, -0.227767, -0.225386, -0.222981, -0.220562, -0.218139, -0.215721, -0.213308, -0.210888, -0.208467, -0.206051, -0.203648, -0.201264, -0.198897, -0.196543, -0.194201, -0.191873, -0.18956, -0.187264, -0.184994, -0.182742, -0.180497, -0.178248, -0.175985, -0.173709, -0.17143, -0.169145, -0.16685, -0.164542, -0.162215, -0.159862, -0.15749, -0.15511, -0.152733, -0.150369, -0.148029, -0.145705, -0.143391, -0.141079, -0.138761, -0.136432, -0.134085, -0.131728, -0.129367, -0.127009, -0.124661, -0.122327, -0.119997, -0.117672, -0.115358, -0.113058, -0.110777, -0.108528, -0.106311, -0.10411, -0.101907, -0.0996853, -0.097427, -0.0951316, -0.0928122, -0.0904801, -0.0881476, -0.0858269, -0.0835248, -0.0812303, -0.0789414, -0.0766578, -0.074378, -0.0721014, -0.0698264, -0.0675536, -0.0652851, -0.0630235, -0.0607712, -0.0585312, -0.0563106, -0.0541026, -0.0518976, -0.0496861, -0.0474588, -0.0452096, -0.0429452, -0.040671, -0.0383926, -0.0361152, -0.0338438, -0.0315732, -0.0293009, -0.0270301, -0.024764, -0.0225054, -0.0202499, -0.0179787, -0.0157089, -0.0134595, -0.011251, -0.00910325 -}; \ No newline at end of file +};