diff --git a/components/cpp/prophet-wasmstan/.gitignore b/components/cpp/prophet-wasmstan/.gitignore index 9aa99d9..b693ade 100644 --- a/components/cpp/prophet-wasmstan/.gitignore +++ b/components/cpp/prophet-wasmstan/.gitignore @@ -1,3 +1,4 @@ *-core.wasm *-component.wasm *_component_type.o +prophet-wasmstan.wasm diff --git a/crates/augurs-prophet/.gitignore b/crates/augurs-prophet/.gitignore index b21fda1..a9ce1bf 100644 --- a/crates/augurs-prophet/.gitignore +++ b/crates/augurs-prophet/.gitignore @@ -1 +1,2 @@ /prophet_stan_model +prophet-wasmstan.wasm diff --git a/crates/augurs-prophet/Cargo.toml b/crates/augurs-prophet/Cargo.toml index 8ab72fe..d1d90de 100644 --- a/crates/augurs-prophet/Cargo.toml +++ b/crates/augurs-prophet/Cargo.toml @@ -22,6 +22,11 @@ tempfile = { version = "3.13.0", optional = true } thiserror.workspace = true tracing.workspace = true ureq = { version = "2.10.1", optional = true } +wasmtime = { version = "26", features = [ + "runtime", + "component-model", +], optional = true } +wasmtime-wasi = { version = "26", optional = true } zip = { version = "2.2.0", optional = true } [dev-dependencies] @@ -45,25 +50,46 @@ download = ["dep:ureq", "dep:zip"] # end users, or you may end up with a broken build where the # Prophet model isn't available to be compiled into the binary. internal-ignore-cmdstan-failure = [] +# Ignore wasmstan compilation in the build script. +# This should only be used for developing the library, not by +# end users, or you may end up with a broken build where the +# Prophet model isn't available to be compiled into the binary. +internal-ignore-wasmstan-failure = [] serde = ["dep:serde"] +compile-wasmstan = ["wasmstan"] +wasmstan = ["dep:serde_json", "dep:wasmtime", "dep:wasmtime-wasi", "serde"] [lib] bench = false [[bench]] -name = "prophet-linear" +name = "prophet-cmdstan-linear" harness = false required-features = ["cmdstan", "compile-cmdstan"] [[bench]] -name = "prophet-logistic" +name = "prophet-cmdstan-logistic" harness = false required-features = ["cmdstan", "compile-cmdstan"] +[[bench]] +name = "prophet-wasmstan-linear" +harness = false +required-features = ["wasmstan"] + +[[bench]] +name = "prophet-wasmstan-logistic" +harness = false +required-features = ["wasmstan"] + [[bin]] name = "download-stan-model" path = "src/bin/main.rs" required-features = ["download"] +[[test]] +name = "wasmstan" +required-features = ["wasmstan"] + [lints] workspace = true diff --git a/crates/augurs-prophet/benches/prophet-linear.rs b/crates/augurs-prophet/benches/prophet-cmdstan-linear.rs similarity index 100% rename from crates/augurs-prophet/benches/prophet-linear.rs rename to crates/augurs-prophet/benches/prophet-cmdstan-linear.rs diff --git a/crates/augurs-prophet/benches/prophet-logistic.rs b/crates/augurs-prophet/benches/prophet-cmdstan-logistic.rs similarity index 100% rename from crates/augurs-prophet/benches/prophet-logistic.rs rename to crates/augurs-prophet/benches/prophet-cmdstan-logistic.rs diff --git a/crates/augurs-prophet/benches/prophet-wasmstan-linear.rs b/crates/augurs-prophet/benches/prophet-wasmstan-linear.rs new file mode 100644 index 0000000..7343e22 --- /dev/null +++ b/crates/augurs-prophet/benches/prophet-wasmstan-linear.rs @@ -0,0 +1,2117 @@ +#![allow(missing_docs)] + +use augurs_prophet::{ + optimizer::OptimizeOpts, wasmstan::WasmstanOptimizer, PredictionData, Prophet, ProphetOptions, + SeasonalityOption, TimestampSeconds, TrainingData, +}; +use augurs_testing::assert_all_close; +use criterion::{criterion_group, criterion_main, BatchSize, Criterion}; + +fn fit(c: &mut Criterion) { + tracing_subscriber::fmt::init(); + let opts = ProphetOptions { + yearly_seasonality: SeasonalityOption::Manual(false), + interval_width: 0.8.try_into().unwrap(), + uncertainty_samples: 500, + ..Default::default() + }; + let model = Prophet::new(opts, WasmstanOptimizer::new().unwrap()); + let training_data = TrainingData::new(TRAINING_DS.to_vec(), TRAINING_Y.to_vec()).unwrap(); + c.bench_function("fit", |b| { + b.iter_batched( + || (model.clone(), training_data.clone()), + |(mut model, training_data)| { + model.fit( + training_data, + OptimizeOpts { + seed: Some(100), + ..Default::default() + }, + ) + }, + BatchSize::SmallInput, + ); + }); +} + +fn predict(c: &mut Criterion) { + let opts = ProphetOptions { + yearly_seasonality: SeasonalityOption::Manual(false), + interval_width: 0.8.try_into().unwrap(), + uncertainty_samples: 500, + ..Default::default() + }; + let mut model = Prophet::new(opts, WasmstanOptimizer::new().unwrap()); + let training_data = TrainingData::new(TRAINING_DS.to_vec(), TRAINING_Y.to_vec()).unwrap(); + model + .fit( + training_data, + OptimizeOpts { + seed: Some(100), + ..Default::default() + }, + ) + .unwrap(); + + let prediction_data = PredictionData::new(PREDICTION_DS.to_vec()); + c.bench_function("predict", |b| { + b.iter_batched( + || prediction_data.clone(), + |pd| { + model.predict(Some(pd)).unwrap(); + }, + BatchSize::SmallInput, + ); + }); + let predictions = model.predict(Some(prediction_data)).unwrap(); + assert_all_close(&predictions.yhat.point, EXPECTED); +} + +static TRAINING_DS: &[TimestampSeconds] = &[ + 1727168400, 1727169600, 1727170800, 1727172000, 1727173200, 1727174400, 1727175600, 1727176800, + 1727178000, 1727179200, 1727180400, 1727181600, 1727182800, 1727184000, 1727185200, 1727186400, + 1727187600, 1727188800, 1727190000, 1727191200, 1727192400, 1727193600, 1727194800, 1727196000, + 1727197200, 1727198400, 1727199600, 1727200800, 1727202000, 1727203200, 1727204400, 1727205600, + 1727206800, 1727208000, 1727209200, 1727210400, 1727211600, 1727212800, 1727214000, 1727215200, + 1727216400, 1727217600, 1727218800, 1727220000, 1727221200, 1727222400, 1727223600, 1727224800, + 1727226000, 1727227200, 1727228400, 1727229600, 1727230800, 1727232000, 1727233200, 1727234400, + 1727235600, 1727236800, 1727238000, 1727239200, 1727240400, 1727241600, 1727242800, 1727244000, + 1727245200, 1727246400, 1727247600, 1727248800, 1727250000, 1727251200, 1727252400, 1727253600, + 1727254800, 1727256000, 1727257200, 1727258400, 1727259600, 1727260800, 1727262000, 1727263200, + 1727264400, 1727265600, 1727266800, 1727268000, 1727269200, 1727270400, 1727271600, 1727272800, + 1727274000, 1727275200, 1727276400, 1727277600, 1727278800, 1727280000, 1727281200, 1727282400, + 1727283600, 1727284800, 1727286000, 1727287200, 1727288400, 1727289600, 1727290800, 1727292000, + 1727293200, 1727294400, 1727295600, 1727296800, 1727298000, 1727299200, 1727300400, 1727301600, + 1727302800, 1727304000, 1727305200, 1727306400, 1727307600, 1727308800, 1727310000, 1727311200, + 1727312400, 1727313600, 1727314800, 1727316000, 1727317200, 1727318400, 1727319600, 1727320800, + 1727322000, 1727323200, 1727324400, 1727325600, 1727326800, 1727328000, 1727329200, 1727330400, + 1727331600, 1727332800, 1727334000, 1727335200, 1727336400, 1727337600, 1727338800, 1727340000, + 1727341200, 1727342400, 1727343600, 1727344800, 1727346000, 1727347200, 1727348400, 1727349600, + 1727350800, 1727352000, 1727353200, 1727354400, 1727355600, 1727356800, 1727358000, 1727359200, + 1727360400, 1727361600, 1727362800, 1727364000, 1727365200, 1727366400, 1727367600, 1727368800, + 1727370000, 1727371200, 1727372400, 1727373600, 1727374800, 1727376000, 1727377200, 1727378400, + 1727379600, 1727380800, 1727382000, 1727383200, 1727384400, 1727385600, 1727386800, 1727388000, + 1727389200, 1727390400, 1727391600, 1727392800, 1727394000, 1727395200, 1727396400, 1727397600, + 1727398800, 1727400000, 1727401200, 1727402400, 1727403600, 1727404800, 1727406000, 1727407200, + 1727408400, 1727409600, 1727410800, 1727412000, 1727413200, 1727414400, 1727415600, 1727416800, + 1727418000, 1727419200, 1727420400, 1727421600, 1727422800, 1727424000, 1727425200, 1727426400, + 1727427600, 1727428800, 1727430000, 1727431200, 1727432400, 1727433600, 1727434800, 1727436000, + 1727437200, 1727438400, 1727439600, 1727440800, 1727442000, 1727443200, 1727444400, 1727445600, + 1727446800, 1727448000, 1727449200, 1727450400, 1727451600, 1727452800, 1727454000, 1727455200, + 1727456400, 1727457600, 1727458800, 1727460000, 1727461200, 1727462400, 1727463600, 1727464800, + 1727466000, 1727467200, 1727468400, 1727469600, 1727470800, 1727472000, 1727473200, 1727474400, + 1727475600, 1727476800, 1727478000, 1727479200, 1727480400, 1727481600, 1727482800, 1727484000, + 1727485200, 1727486400, 1727487600, 1727488800, 1727490000, 1727491200, 1727492400, 1727493600, + 1727494800, 1727496000, 1727497200, 1727498400, 1727499600, 1727500800, 1727502000, 1727503200, + 1727504400, 1727505600, 1727506800, 1727508000, 1727509200, 1727510400, 1727511600, 1727512800, + 1727514000, 1727515200, 1727516400, 1727517600, 1727518800, 1727520000, 1727521200, 1727522400, + 1727523600, 1727524800, 1727526000, 1727527200, 1727528400, 1727529600, 1727530800, 1727532000, + 1727533200, 1727534400, 1727535600, 1727536800, 1727538000, 1727539200, 1727540400, 1727541600, + 1727542800, 1727544000, 1727545200, 1727546400, 1727547600, 1727548800, 1727550000, 1727551200, + 1727552400, 1727553600, 1727554800, 1727556000, 1727557200, 1727558400, 1727559600, 1727560800, + 1727562000, 1727563200, 1727564400, 1727565600, 1727566800, 1727568000, 1727569200, 1727570400, + 1727571600, 1727572800, 1727574000, 1727575200, 1727576400, 1727577600, 1727578800, 1727580000, + 1727581200, 1727582400, 1727583600, 1727584800, 1727586000, 1727587200, 1727588400, 1727589600, + 1727590800, 1727592000, 1727593200, 1727594400, 1727595600, 1727596800, 1727598000, 1727599200, + 1727600400, 1727601600, 1727602800, 1727604000, 1727605200, 1727606400, 1727607600, 1727608800, + 1727610000, 1727611200, 1727612400, 1727613600, 1727614800, 1727616000, 1727617200, 1727618400, + 1727619600, 1727620800, 1727622000, 1727623200, 1727624400, 1727625600, 1727626800, 1727628000, + 1727629200, 1727630400, 1727631600, 1727632800, 1727634000, 1727635200, 1727636400, 1727637600, + 1727638800, 1727640000, 1727641200, 1727642400, 1727643600, 1727644800, 1727646000, 1727647200, + 1727648400, 1727649600, 1727650800, 1727652000, 1727653200, 1727654400, 1727655600, 1727656800, + 1727658000, 1727659200, 1727660400, 1727661600, 1727662800, 1727664000, 1727665200, 1727666400, + 1727667600, 1727668800, 1727670000, 1727671200, 1727672400, 1727673600, 1727674800, 1727676000, + 1727677200, 1727678400, 1727679600, 1727680800, 1727682000, 1727683200, 1727684400, 1727685600, + 1727686800, 1727688000, 1727689200, 1727690400, 1727691600, 1727692800, 1727694000, 1727695200, + 1727696400, 1727697600, 1727698800, 1727700000, 1727701200, 1727702400, 1727703600, 1727704800, + 1727706000, 1727707200, 1727708400, 1727709600, 1727710800, 1727712000, 1727713200, 1727714400, + 1727715600, 1727716800, 1727718000, 1727719200, 1727720400, 1727721600, 1727722800, 1727724000, + 1727725200, 1727726400, 1727727600, 1727728800, 1727730000, 1727731200, 1727732400, 1727733600, + 1727734800, 1727736000, 1727737200, 1727738400, 1727739600, 1727740800, 1727742000, 1727743200, + 1727744400, 1727745600, 1727746800, 1727748000, 1727749200, 1727750400, 1727751600, 1727752800, + 1727754000, 1727755200, 1727756400, 1727757600, 1727758800, 1727760000, 1727761200, 1727762400, + 1727763600, 1727764800, 1727766000, 1727767200, 1727768400, 1727769600, 1727770800, 1727772000, + 1727773200, 1727774400, 1727775600, 1727776800, 1727778000, 1727779200, 1727780400, 1727781600, + 1727782800, 1727784000, 1727785200, 1727786400, 1727787600, 1727788800, 1727790000, 1727791200, + 1727792400, 1727793600, 1727794800, 1727796000, 1727797200, 1727798400, 1727799600, 1727800800, + 1727802000, 1727803200, 1727804400, 1727805600, 1727806800, 1727808000, 1727809200, 1727810400, + 1727811600, 1727812800, 1727814000, 1727815200, 1727816400, 1727817600, 1727818800, 1727820000, + 1727821200, 1727822400, 1727823600, 1727824800, 1727826000, 1727827200, 1727828400, 1727829600, + 1727830800, 1727832000, 1727833200, 1727834400, 1727835600, 1727836800, 1727838000, 1727839200, + 1727840400, 1727841600, 1727842800, 1727844000, 1727845200, 1727846400, 1727847600, 1727848800, + 1727850000, 1727851200, 1727852400, 1727853600, 1727854800, 1727856000, 1727857200, 1727858400, + 1727859600, 1727860800, 1727862000, 1727863200, 1727864400, 1727865600, 1727866800, 1727868000, + 1727869200, 1727870400, 1727871600, 1727872800, 1727874000, 1727875200, 1727876400, 1727877600, + 1727878800, 1727880000, 1727881200, 1727882400, 1727883600, 1727884800, 1727886000, 1727887200, + 1727888400, 1727889600, 1727890800, 1727892000, 1727893200, 1727894400, 1727895600, 1727896800, + 1727898000, 1727899200, 1727900400, 1727901600, 1727902800, 1727904000, 1727905200, 1727906400, + 1727907600, 1727908800, 1727910000, 1727911200, 1727912400, 1727913600, 1727914800, 1727916000, + 1727917200, 1727918400, 1727919600, 1727920800, 1727922000, 1727923200, 1727924400, 1727925600, + 1727926800, 1727928000, 1727929200, 1727930400, 1727931600, 1727932800, 1727934000, 1727935200, + 1727936400, 1727937600, 1727938800, 1727940000, 1727941200, 1727942400, 1727943600, 1727944800, + 1727946000, 1727947200, 1727948400, 1727949600, 1727950800, 1727952000, 1727953200, 1727954400, + 1727955600, 1727956800, 1727958000, 1727959200, 1727960400, 1727961600, 1727962800, 1727964000, + 1727965200, 1727966400, 1727967600, 1727968800, 1727970000, 1727971200, 1727972400, 1727973600, + 1727974800, 1727976000, 1727977200, 1727978400, 1727979600, 1727980800, 1727982000, 1727983200, + 1727984400, 1727985600, 1727986800, 1727988000, 1727989200, 1727990400, 1727991600, 1727992800, + 1727994000, 1727995200, 1727996400, 1727997600, 1727998800, 1728000000, 1728001200, 1728002400, + 1728003600, 1728004800, 1728006000, 1728007200, 1728008400, 1728009600, 1728010800, 1728012000, + 1728013200, 1728014400, 1728015600, 1728016800, 1728018000, 1728019200, 1728020400, 1728021600, + 1728022800, 1728024000, 1728025200, 1728026400, 1728027600, 1728028800, 1728030000, 1728031200, + 1728032400, 1728033600, 1728034800, 1728036000, 1728037200, 1728038400, 1728039600, 1728040800, + 1728042000, 1728043200, 1728044400, 1728045600, 1728046800, 1728048000, 1728049200, 1728050400, + 1728051600, 1728052800, 1728054000, 1728055200, 1728056400, 1728057600, 1728058800, 1728060000, + 1728061200, 1728062400, 1728063600, 1728064800, 1728066000, 1728067200, 1728068400, 1728069600, + 1728070800, 1728072000, 1728073200, 1728074400, 1728075600, 1728076800, 1728078000, 1728079200, + 1728080400, 1728081600, 1728082800, 1728084000, 1728085200, 1728086400, 1728087600, 1728088800, + 1728090000, 1728091200, 1728092400, 1728093600, 1728094800, 1728096000, 1728097200, 1728098400, + 1728099600, 1728100800, 1728102000, 1728103200, 1728104400, 1728105600, 1728106800, 1728108000, + 1728109200, 1728110400, 1728111600, 1728112800, 1728114000, 1728115200, 1728116400, 1728117600, + 1728118800, 1728120000, 1728121200, 1728122400, 1728123600, 1728124800, 1728126000, 1728127200, + 1728128400, 1728129600, 1728130800, 1728132000, 1728133200, 1728134400, 1728135600, 1728136800, + 1728138000, 1728139200, 1728140400, 1728141600, 1728142800, 1728144000, 1728145200, 1728146400, + 1728147600, 1728148800, 1728150000, 1728151200, 1728152400, 1728153600, 1728154800, 1728156000, + 1728157200, 1728158400, 1728159600, 1728160800, 1728162000, 1728163200, 1728164400, 1728165600, + 1728166800, 1728168000, 1728169200, 1728170400, 1728171600, 1728172800, 1728174000, 1728175200, + 1728176400, 1728177600, 1728178800, 1728180000, 1728181200, 1728182400, 1728183600, 1728184800, + 1728186000, 1728187200, 1728188400, 1728189600, 1728190800, 1728192000, 1728193200, 1728194400, + 1728195600, 1728196800, 1728198000, 1728199200, 1728200400, 1728201600, 1728202800, 1728204000, + 1728205200, 1728206400, 1728207600, 1728208800, 1728210000, 1728211200, 1728212400, 1728213600, + 1728214800, 1728216000, 1728217200, 1728218400, 1728219600, 1728220800, 1728222000, 1728223200, + 1728224400, 1728225600, 1728226800, 1728228000, 1728229200, 1728230400, 1728231600, 1728232800, + 1728234000, 1728235200, 1728236400, 1728237600, 1728238800, 1728240000, 1728241200, 1728242400, + 1728243600, 1728244800, 1728246000, 1728247200, 1728248400, 1728249600, 1728250800, 1728252000, + 1728253200, 1728254400, 1728255600, 1728256800, 1728258000, 1728259200, 1728260400, 1728261600, + 1728262800, 1728264000, 1728265200, 1728266400, 1728267600, 1728268800, 1728270000, 1728271200, + 1728272400, 1728273600, 1728274800, 1728276000, 1728277200, 1728278400, 1728279600, 1728280800, + 1728282000, 1728283200, 1728284400, 1728285600, 1728286800, 1728288000, 1728289200, 1728290400, + 1728291600, 1728292800, 1728294000, 1728295200, 1728296400, 1728297600, 1728298800, 1728300000, + 1728301200, 1728302400, 1728303600, 1728304800, 1728306000, 1728307200, 1728308400, 1728309600, + 1728310800, 1728312000, 1728313200, 1728314400, 1728315600, 1728316800, 1728318000, 1728319200, + 1728320400, 1728321600, 1728322800, 1728324000, 1728325200, 1728326400, 1728327600, 1728328800, + 1728330000, 1728331200, 1728332400, 1728333600, 1728334800, 1728336000, 1728337200, 1728338400, + 1728339600, 1728340800, 1728342000, 1728343200, 1728344400, 1728345600, 1728346800, 1728348000, + 1728349200, 1728350400, 1728351600, 1728352800, 1728354000, 1728355200, 1728356400, 1728357600, + 1728358800, 1728360000, 1728361200, 1728362400, 1728363600, 1728364800, 1728366000, 1728367200, + 1728368400, 1728369600, 1728370800, 1728372000, 1728373200, 1728374400, 1728375600, 1728376800, + 1728378000, 1728379200, 1728380400, 1728381600, 1728382800, 1728384000, 1728385200, 1728386400, + 1728387600, 1728388800, 1728390000, 1728391200, 1728392400, 1728393600, 1728394800, 1728396000, + 1728397200, 1728398400, 1728399600, 1728400800, 1728402000, 1728403200, 1728404400, 1728405600, + 1728406800, 1728408000, 1728409200, 1728410400, 1728411600, 1728412800, 1728414000, 1728415200, + 1728416400, 1728417600, 1728418800, 1728420000, 1728421200, 1728422400, 1728423600, 1728424800, + 1728426000, 1728427200, 1728428400, 1728429600, 1728430800, 1728432000, 1728433200, 1728434400, + 1728435600, 1728436800, 1728438000, 1728439200, 1728440400, 1728441600, 1728442800, 1728444000, + 1728445200, 1728446400, 1728447600, 1728448800, 1728450000, 1728451200, 1728452400, 1728453600, + 1728454800, 1728456000, 1728457200, 1728458400, 1728459600, 1728460800, 1728462000, 1728463200, + 1728464400, 1728465600, 1728466800, 1728468000, 1728469200, 1728470400, 1728471600, 1728472800, + 1728474000, 1728475200, 1728476400, 1728477600, 1728478800, 1728480000, 1728481200, 1728482400, + 1728483600, 1728484800, 1728486000, 1728487200, 1728488400, 1728489600, 1728490800, 1728492000, + 1728493200, 1728494400, 1728495600, 1728496800, 1728498000, 1728499200, 1728500400, 1728501600, + 1728502800, 1728504000, 1728505200, 1728506400, 1728507600, 1728508800, 1728510000, 1728511200, + 1728512400, 1728513600, 1728514800, 1728516000, 1728517200, 1728518400, 1728519600, 1728520800, + 1728522000, 1728523200, 1728524400, 1728525600, 1728526800, 1728528000, 1728529200, 1728530400, + 1728531600, 1728532800, 1728534000, 1728535200, 1728536400, 1728537600, 1728538800, 1728540000, + 1728541200, 1728542400, 1728543600, 1728544800, 1728546000, 1728547200, 1728548400, 1728549600, + 1728550800, 1728552000, 1728553200, 1728554400, 1728555600, 1728556800, 1728558000, 1728559200, + 1728560400, 1728561600, 1728562800, 1728564000, 1728565200, 1728566400, 1728567600, 1728568800, + 1728570000, 1728571200, 1728572400, 1728573600, 1728574800, 1728576000, 1728577200, 1728578400, + 1728579600, 1728580800, 1728582000, 1728583200, 1728584400, 1728585600, 1728586800, 1728588000, + 1728589200, 1728590400, 1728591600, 1728592800, 1728594000, 1728595200, 1728596400, 1728597600, + 1728598800, 1728600000, 1728601200, 1728602400, 1728603600, 1728604800, 1728606000, 1728607200, + 1728608400, 1728609600, 1728610800, 1728612000, 1728613200, 1728614400, 1728615600, 1728616800, + 1728618000, 1728619200, 1728620400, 1728621600, 1728622800, 1728624000, 1728625200, 1728626400, + 1728627600, 1728628800, 1728630000, 1728631200, 1728632400, 1728633600, 1728634800, 1728636000, + 1728637200, 1728638400, 1728639600, 1728640800, 1728642000, 1728643200, 1728644400, 1728645600, + 1728646800, 1728648000, 1728649200, 1728650400, 1728651600, 1728652800, 1728654000, 1728655200, + 1728656400, 1728657600, 1728658800, 1728660000, 1728661200, 1728662400, 1728663600, 1728664800, + 1728666000, 1728667200, 1728668400, 1728669600, 1728670800, 1728672000, 1728673200, 1728674400, + 1728675600, 1728676800, 1728678000, 1728679200, 1728680400, 1728681600, 1728682800, 1728684000, + 1728685200, 1728686400, 1728687600, 1728688800, 1728690000, 1728691200, 1728692400, 1728693600, + 1728694800, 1728696000, 1728697200, 1728698400, 1728699600, 1728700800, 1728702000, 1728703200, + 1728704400, 1728705600, 1728706800, 1728708000, 1728709200, 1728710400, 1728711600, 1728712800, + 1728714000, 1728715200, 1728716400, 1728717600, 1728718800, 1728720000, 1728721200, 1728722400, + 1728723600, 1728724800, 1728726000, 1728727200, 1728728400, 1728729600, 1728730800, 1728732000, + 1728733200, 1728734400, 1728735600, 1728736800, 1728738000, 1728739200, 1728740400, 1728741600, + 1728742800, 1728744000, 1728745200, 1728746400, 1728747600, 1728748800, 1728750000, 1728751200, + 1728752400, 1728753600, 1728754800, 1728756000, 1728757200, 1728758400, 1728759600, 1728760800, + 1728762000, 1728763200, 1728764400, 1728765600, 1728766800, 1728768000, 1728769200, 1728770400, + 1728771600, 1728772800, 1728774000, 1728775200, 1728776400, 1728777600, 1728778800, 1728780000, + 1728781200, 1728782400, 1728783600, 1728784800, 1728786000, 1728787200, 1728788400, 1728789600, + 1728790800, 1728792000, 1728793200, 1728794400, 1728795600, 1728796800, 1728798000, 1728799200, + 1728800400, 1728801600, 1728802800, 1728804000, 1728805200, 1728806400, 1728807600, 1728808800, + 1728810000, 1728811200, 1728812400, 1728813600, 1728814800, 1728816000, 1728817200, 1728818400, + 1728819600, 1728820800, 1728822000, 1728823200, 1728824400, 1728825600, 1728826800, 1728828000, + 1728829200, 1728830400, 1728831600, 1728832800, 1728834000, 1728835200, 1728836400, 1728837600, + 1728838800, 1728840000, 1728841200, 1728842400, 1728843600, 1728844800, 1728846000, 1728847200, + 1728848400, 1728849600, 1728850800, 1728852000, 1728853200, 1728854400, 1728855600, 1728856800, + 1728858000, 1728859200, 1728860400, 1728861600, 1728862800, 1728864000, 1728865200, 1728866400, + 1728867600, 1728868800, 1728870000, 1728871200, 1728872400, 1728873600, 1728874800, 1728876000, + 1728877200, 1728878400, 1728879600, 1728880800, 1728882000, 1728883200, 1728884400, 1728885600, + 1728886800, 1728888000, 1728889200, 1728890400, 1728891600, 1728892800, 1728894000, 1728895200, + 1728896400, 1728897600, 1728898800, 1728900000, 1728901200, 1728902400, 1728903600, 1728904800, + 1728906000, 1728907200, 1728908400, 1728909600, 1728910800, 1728912000, 1728913200, 1728914400, + 1728915600, 1728916800, 1728918000, 1728919200, 1728920400, 1728921600, 1728922800, 1728924000, + 1728925200, 1728926400, 1728927600, 1728928800, 1728930000, 1728931200, 1728932400, 1728933600, + 1728934800, 1728936000, 1728937200, 1728938400, 1728939600, 1728940800, 1728942000, 1728943200, + 1728944400, 1728945600, 1728946800, 1728948000, 1728949200, 1728950400, 1728951600, 1728952800, + 1728954000, 1728955200, 1728956400, 1728957600, 1728958800, 1728960000, 1728961200, 1728962400, + 1728963600, 1728964800, 1728966000, 1728967200, 1728968400, 1728969600, 1728970800, 1728972000, + 1728973200, 1728974400, 1728975600, 1728976800, 1728978000, 1728979200, 1728980400, 1728981600, + 1728982800, 1728984000, 1728985200, 1728986400, 1728987600, 1728988800, 1728990000, 1728991200, + 1728992400, 1728993600, 1728994800, 1728996000, 1728997200, 1728998400, 1728999600, 1729000800, + 1729002000, 1729003200, 1729004400, 1729005600, 1729006800, 1729008000, 1729009200, 1729010400, + 1729011600, 1729012800, 1729014000, 1729015200, 1729016400, 1729017600, 1729018800, 1729020000, + 1729021200, 1729022400, 1729023600, 1729024800, 1729026000, 1729027200, 1729028400, 1729029600, + 1729030800, 1729032000, 1729033200, 1729034400, 1729035600, 1729036800, 1729038000, 1729039200, + 1729040400, 1729041600, 1729042800, 1729044000, 1729045200, 1729046400, 1729047600, 1729048800, + 1729050000, 1729051200, 1729052400, 1729053600, 1729054800, 1729056000, 1729057200, 1729058400, + 1729059600, 1729060800, 1729062000, 1729063200, 1729064400, 1729065600, 1729066800, 1729068000, + 1729069200, 1729070400, 1729071600, 1729072800, 1729074000, 1729075200, 1729076400, 1729077600, + 1729078800, 1729080000, 1729081200, 1729082400, 1729083600, 1729084800, 1729086000, 1729087200, + 1729088400, 1729089600, 1729090800, 1729092000, 1729093200, 1729094400, 1729095600, 1729096800, + 1729098000, 1729099200, 1729100400, 1729101600, 1729102800, 1729104000, 1729105200, 1729106400, + 1729107600, 1729108800, 1729110000, 1729111200, 1729112400, 1729113600, 1729114800, 1729116000, + 1729117200, 1729118400, 1729119600, 1729120800, 1729122000, 1729123200, 1729124400, 1729125600, + 1729126800, 1729128000, 1729129200, 1729130400, 1729131600, 1729132800, 1729134000, 1729135200, + 1729136400, 1729137600, 1729138800, 1729140000, 1729141200, 1729142400, 1729143600, 1729144800, + 1729146000, 1729147200, 1729148400, 1729149600, 1729150800, 1729152000, 1729153200, 1729154400, + 1729155600, 1729156800, 1729158000, 1729159200, 1729160400, 1729161600, 1729162800, 1729164000, + 1729165200, 1729166400, 1729167600, 1729168800, 1729170000, 1729171200, 1729172400, 1729173600, + 1729174800, 1729176000, 1729177200, 1729178400, 1729179600, 1729182000, 1729183200, 1729184400, + 1729185600, 1729186800, 1729188000, 1729189200, 1729190400, 1729191600, 1729192800, 1729194000, + 1729195200, 1729196400, 1729197600, 1729198800, 1729200000, 1729201200, 1729202400, 1729203600, + 1729204800, 1729206000, 1729207200, 1729208400, 1729209600, 1729210800, 1729212000, 1729213200, + 1729214400, 1729215600, 1729216800, 1729218000, 1729219200, 1729220400, 1729221600, 1729222800, + 1729224000, 1729225200, 1729226400, 1729227600, 1729228800, 1729230000, 1729231200, 1729232400, + 1729233600, 1729234800, 1729236000, 1729237200, 1729238400, 1729239600, 1729240800, 1729242000, + 1729243200, 1729244400, 1729245600, 1729246800, 1729248000, 1729249200, 1729250400, 1729251600, + 1729252800, 1729254000, 1729255200, 1729256400, 1729257600, 1729258800, 1729260000, 1729261200, + 1729262400, 1729264800, 1729266000, 1729267200, 1729268400, 1729269600, 1729270800, 1729272000, + 1729273200, 1729274400, 1729275600, 1729276800, 1729278000, 1729279200, 1729280400, 1729281600, + 1729282800, 1729284000, 1729285200, 1729286400, 1729287600, 1729288800, 1729290000, 1729291200, + 1729292400, 1729293600, 1729294800, 1729296000, 1729297200, 1729298400, 1729299600, 1729300800, + 1729302000, 1729303200, 1729304400, 1729305600, 1729306800, 1729308000, 1729309200, 1729310400, + 1729311600, 1729312800, 1729314000, 1729315200, 1729316400, 1729317600, 1729318800, 1729320000, + 1729321200, 1729322400, 1729323600, 1729324800, 1729326000, 1729327200, 1729328400, 1729329600, + 1729330800, 1729332000, 1729333200, 1729334400, 1729335600, 1729336800, 1729338000, 1729339200, + 1729340400, 1729341600, 1729342800, 1729344000, 1729345200, 1729346400, 1729347600, 1729348800, + 1729350000, 1729351200, 1729352400, 1729353600, 1729354800, 1729356000, 1729357200, 1729358400, + 1729359600, 1729360800, 1729362000, 1729363200, 1729364400, 1729365600, 1729366800, 1729368000, + 1729369200, 1729370400, 1729371600, 1729372800, 1729374000, 1729375200, 1729376400, 1729377600, + 1729378800, 1729380000, 1729381200, 1729382400, 1729383600, 1729384800, 1729386000, 1729387200, + 1729388400, 1729389600, 1729390800, 1729392000, 1729393200, 1729394400, 1729395600, 1729396800, + 1729398000, 1729399200, 1729400400, 1729401600, 1729402800, 1729404000, 1729405200, 1729406400, + 1729407600, 1729408800, 1729410000, 1729411200, 1729412400, 1729413600, 1729414800, 1729416000, + 1729417200, 1729418400, 1729419600, 1729420800, 1729422000, 1729423200, 1729424400, 1729425600, + 1729426800, 1729428000, 1729429200, 1729430400, 1729431600, 1729432800, 1729434000, 1729435200, + 1729436400, 1729437600, 1729438800, 1729440000, 1729441200, 1729442400, 1729443600, 1729444800, + 1729446000, 1729447200, 1729448400, 1729449600, 1729450800, 1729452000, 1729453200, 1729454400, + 1729455600, 1729456800, 1729458000, 1729459200, 1729460400, 1729461600, 1729462800, 1729464000, + 1729465200, 1729466400, 1729467600, 1729468800, 1729470000, 1729471200, 1729472400, 1729473600, + 1729474800, 1729476000, 1729477200, 1729478400, 1729479600, 1729480800, 1729482000, 1729483200, + 1729484400, 1729485600, 1729486800, 1729488000, 1729489200, 1729490400, 1729491600, 1729492800, + 1729494000, 1729495200, 1729496400, 1729497600, 1729498800, 1729500000, 1729501200, 1729502400, + 1729503600, 1729504800, 1729506000, 1729507200, 1729508400, 1729509600, 1729510800, 1729512000, + 1729513200, 1729514400, 1729515600, 1729516800, 1729518000, 1729519200, 1729520400, 1729521600, + 1729522800, 1729524000, 1729525200, 1729526400, 1729527600, 1729528800, 1729530000, 1729531200, + 1729532400, 1729533600, 1729534800, 1729536000, 1729537200, 1729538400, 1729539600, 1729540800, + 1729542000, 1729543200, 1729544400, 1729545600, 1729546800, 1729548000, 1729549200, 1729550400, + 1729551600, 1729552800, 1729554000, 1729555200, 1729556400, 1729557600, 1729558800, 1729560000, + 1729561200, 1729562400, 1729563600, 1729564800, 1729566000, 1729567200, 1729568400, 1729569600, + 1729570800, 1729572000, 1729573200, 1729574400, 1729575600, 1729576800, 1729578000, 1729579200, + 1729580400, 1729581600, 1729582800, 1729584000, 1729585200, 1729586400, 1729587600, 1729588800, + 1729590000, 1729591200, 1729592400, 1729593600, 1729594800, 1729596000, 1729597200, 1729598400, + 1729599600, 1729600800, 1729602000, 1729603200, 1729604400, 1729605600, 1729606800, 1729608000, + 1729609200, 1729610400, 1729611600, 1729612800, 1729614000, 1729615200, 1729616400, 1729617600, + 1729618800, 1729620000, 1729621200, 1729622400, 1729623600, 1729624800, 1729626000, 1729627200, + 1729628400, 1729629600, 1729630800, 1729632000, 1729633200, 1729634400, 1729635600, 1729636800, + 1729638000, 1729639200, 1729640400, 1729641600, 1729642800, 1729644000, 1729645200, 1729646400, + 1729647600, 1729648800, 1729650000, 1729651200, 1729652400, 1729653600, 1729654800, 1729656000, + 1729657200, 1729658400, 1729659600, 1729660800, 1729662000, 1729663200, 1729664400, 1729665600, + 1729666800, 1729668000, 1729669200, 1729670400, 1729671600, 1729672800, 1729674000, 1729675200, + 1729676400, 1729677600, 1729678800, 1729680000, 1729681200, 1729682400, 1729683600, 1729684800, + 1729686000, 1729687200, 1729688400, 1729689600, 1729690800, 1729692000, 1729693200, 1729695600, + 1729696800, 1729698000, 1729699200, 1729700400, 1729701600, 1729702800, 1729704000, 1729705200, + 1729706400, 1729707600, 1729708800, 1729710000, 1729711200, 1729712400, 1729713600, 1729714800, + 1729716000, 1729717200, 1729718400, 1729719600, 1729720800, 1729722000, 1729723200, 1729724400, + 1729725600, 1729726800, 1729728000, 1729729200, 1729730400, 1729731600, 1729732800, 1729734000, + 1729735200, 1729736400, 1729737600, 1729738800, 1729740000, 1729741200, 1729742400, 1729743600, + 1729744800, 1729746000, 1729747200, 1729748400, 1729749600, 1729750800, 1729752000, 1729753200, + 1729754400, 1729755600, 1729756800, 1729758000, 1729759200, 1729760400, +]; + +static TRAINING_Y: &[f64] = &[ + 0.3, 0.27, 0.03, 0.94, 0.78, 0.69, 0.25, 0.7, 0.55, 0.18, 0.24, 0.97, 0.55, 0.69, 0.1, 0.34, + 0.25, 1.47, 1.25, 0.51, 1.08, 0.34, 0.53, 0.13, 0.55, 0.99, 0.6, 0.13, 0.03, 0.54, 0.74, 0.15, + 0.34, 1.19, 0.44, 0.55, 0.88, 1.16, 0.16, 0.58, 0.12, 0.94, 0.04, 0.91, 0.07, 0.09, 0.49, 0.35, + 0.66, 0.02, 0.54, 0.74, 0.22, 0.3, 0.14, 0.65, 0.42, 0.21, 0.35, 0.78, 0.06, 0.1, 0.48, 0.44, + 0.33, 0.38, 0.26, 0.7, 0.17, 0.48, 0.09, 0.1, 0.54, 0.32, 0.44, 0.0, 0.9, 1.15, 0.52, 0.08, + 0.29, 0.42, 0.18, 0.15, 1.08, 0.97, 0.11, 0.18, 0.12, 0.65, 1.21, 1.06, 0.06, 0.83, 0.29, 0.26, + 0.27, 0.42, 0.48, 0.62, 0.13, 0.03, 1.02, 0.5, 0.07, 0.29, 0.84, 0.52, 0.27, 0.64, 1.08, 0.29, + 0.23, 0.15, 0.22, 0.89, 0.87, 0.92, 0.08, 0.73, 0.22, 0.45, 0.36, 0.46, 0.49, 0.17, 0.51, 0.05, + 0.48, 0.58, 0.09, 0.29, 0.91, 0.13, 0.09, 0.43, 1.61, 0.55, 0.88, 0.3, 0.72, 0.09, 0.84, 0.1, + 0.14, 0.71, 0.21, 0.46, 0.06, 0.47, 0.99, 0.3, 0.23, 0.38, 0.47, 0.39, 0.16, 0.96, 1.1, 0.76, + 0.18, 0.1, 1.26, 0.57, 0.97, 0.05, 0.7, 0.18, 0.04, 0.09, 0.2, 0.27, 0.46, 0.23, 0.02, 0.52, + 0.52, 0.25, 0.15, 0.53, 0.51, 0.41, 0.35, 1.02, 0.61, 0.19, 0.54, 0.09, 0.91, 0.69, 1.6, 0.01, + 1.02, 0.4, 0.4, 0.3, 0.37, 0.81, 0.67, 0.26, 0.11, 0.59, 0.76, 0.11, 0.29, 0.77, 0.08, 0.2, + 0.48, 1.19, 0.36, 0.48, 0.23, 0.95, 0.13, 0.89, 0.02, 0.23, 0.45, 0.49, 0.73, 0.24, 0.9, 0.84, + 0.29, 0.06, 0.33, 0.43, 0.26, 0.44, 0.63, 0.95, 0.04, 0.14, 0.05, 1.18, 0.5, 0.39, 0.35, 0.73, + 0.58, 0.27, 0.11, 0.24, 0.1, 0.71, 0.35, 0.11, 0.75, 0.93, 0.42, 0.19, 0.29, 0.44, 0.12, 0.46, + 1.68, 1.22, 0.11, 0.05, 0.12, 0.62, 0.84, 0.36, 0.06, 1.22, 0.67, 0.32, 0.36, 0.54, 0.42, 0.77, + 0.19, 0.4, 0.97, 0.42, 0.04, 0.27, 0.57, 0.38, 0.36, 0.56, 0.97, 0.67, 0.31, 0.11, 0.31, 0.45, + 0.71, 0.43, 0.09, 0.44, 0.53, 0.32, 0.36, 0.97, 0.64, 0.24, 0.43, 0.39, 0.41, 0.45, 0.09, 0.38, + 1.1, 0.01, 0.21, 0.69, 1.6, 0.36, 0.15, 0.35, 0.67, 0.1, 0.54, 0.19, 0.21, 0.34, 0.52, 0.56, + 0.03, 0.38, 0.95, 0.34, 0.24, 0.24, 0.69, 0.16, 0.27, 0.84, 0.89, 0.02, 0.14, 0.22, 0.99, 0.59, + 0.15, 0.06, 0.87, 0.3, 0.17, 0.12, 0.38, 0.6, 0.6, 0.22, 0.25, 0.51, 0.58, 0.0, 0.27, 0.49, + 0.28, 0.66, 0.38, 1.05, 0.52, 0.12, 0.1, 0.34, 0.99, 0.71, 0.35, 0.05, 0.81, 0.46, 0.7, 0.53, + 0.72, 0.79, 0.3, 0.5, 0.09, 0.87, 0.45, 0.1, 0.35, 0.86, 0.06, 0.2, 0.55, 1.25, 0.24, 0.31, + 0.33, 0.64, 0.25, 0.83, 0.03, 0.28, 0.58, 0.48, 0.59, 0.18, 0.95, 0.87, 0.69, 0.16, 0.17, 0.43, + 0.39, 0.16, 0.69, 0.8, 0.11, 0.33, 0.14, 0.97, 0.52, 0.07, 0.29, 0.61, 0.11, 0.31, 0.12, 0.4, + 0.24, 0.69, 0.59, 0.09, 0.44, 0.45, 0.46, 0.44, 0.37, 0.75, 0.18, 0.43, 1.05, 0.76, 0.13, 0.02, + 0.24, 0.94, 1.38, 0.63, 0.05, 0.93, 0.83, 0.38, 0.4, 0.58, 0.62, 0.67, 0.29, 0.12, 0.49, 0.62, + 0.09, 0.27, 1.24, 0.23, 0.49, 0.59, 1.19, 0.22, 0.25, 0.19, 0.47, 0.78, 0.53, 0.08, 0.12, 0.51, + 1.1, 0.67, 0.84, 0.98, 0.74, 0.22, 0.37, 0.14, 0.39, 0.37, 0.04, 0.74, 0.82, 0.06, 0.27, 0.3, + 1.23, 0.29, 0.33, 0.38, 0.66, 0.2, 0.27, 0.1, 0.16, 0.47, 0.86, 0.4, 0.05, 0.91, 0.95, 0.46, + 0.43, 0.58, 0.49, 0.13, 0.28, 1.04, 0.76, 0.23, 0.29, 0.32, 0.98, 1.29, 0.3, 0.27, 0.88, 0.48, + 0.37, 0.25, 0.38, 0.56, 0.63, 0.16, 0.1, 0.66, 0.69, 0.01, 0.35, 0.73, 0.28, 0.44, 0.81, 1.25, + 0.32, 0.2, 0.29, 0.32, 0.97, 1.06, 0.49, 0.07, 0.98, 0.57, 0.46, 0.31, 0.65, 0.62, 0.14, 0.21, + 0.06, 0.69, 0.49, 0.09, 0.25, 0.8, 0.06, 0.25, 0.46, 1.2, 0.41, 0.6, 0.46, 0.78, 0.14, 0.62, + 0.02, 0.16, 0.31, 1.04, 0.54, 0.1, 0.55, 1.01, 0.25, 0.22, 0.27, 0.52, 0.5, 0.06, 1.52, 0.9, + 0.17, 0.49, 0.13, 1.33, 0.9, 0.31, 0.63, 2.5, 0.15, 0.16, 0.18, 0.52, 0.39, 0.97, 0.55, 0.07, + 0.69, 0.77, 0.15, 0.7, 1.19, 0.29, 0.43, 0.6, 1.17, 0.63, 0.37, 0.29, 0.24, 0.83, 1.43, 0.99, + 0.05, 0.9, 0.52, 0.57, 0.3, 0.71, 0.14, 0.64, 0.29, 0.21, 0.55, 0.57, 0.04, 0.46, 0.65, 0.11, + 0.18, 0.33, 1.12, 0.32, 0.43, 0.5, 0.39, 0.07, 0.66, 0.32, 0.17, 0.45, 0.42, 0.59, 0.27, 0.81, + 0.7, 0.08, 0.26, 0.24, 0.61, 0.37, 0.97, 0.8, 1.05, 0.13, 0.48, 0.2, 1.37, 0.81, 0.18, 0.46, + 0.7, 0.1, 0.53, 0.1, 0.56, 0.32, 0.48, 0.43, 0.04, 0.74, 0.64, 0.49, 0.43, 0.49, 0.76, 0.51, + 0.18, 0.69, 0.78, 0.2, 0.86, 0.18, 0.63, 1.32, 0.87, 0.17, 1.0, 0.4, 0.67, 0.06, 0.28, 0.56, + 0.76, 0.06, 0.13, 0.56, 0.49, 0.0, 0.32, 0.64, 0.33, 0.45, 0.43, 0.93, 0.26, 0.22, 0.6, 0.92, + 0.42, 0.61, 0.08, 0.17, 0.51, 0.34, 0.68, 0.4, 0.73, 0.78, 0.25, 0.69, 0.18, 0.74, 0.89, 0.11, + 0.59, 1.01, 0.02, 0.43, 0.15, 0.6, 0.42, 0.08, 0.41, 0.77, 0.43, 0.32, 0.15, 0.24, 0.41, 0.34, + 0.41, 0.0, 0.34, 0.86, 0.53, 0.17, 0.29, 0.74, 0.3, 0.16, 0.98, 0.97, 0.35, 0.5, 0.26, 0.52, + 1.61, 0.28, 0.27, 0.61, 0.24, 0.12, 0.11, 0.29, 0.23, 0.53, 0.13, 0.1, 0.66, 0.59, 0.09, 0.35, + 0.59, 0.41, 0.6, 0.43, 1.04, 0.72, 0.16, 0.67, 0.24, 0.31, 0.88, 0.32, 0.02, 0.78, 0.6, 0.68, + 0.2, 0.79, 0.08, 0.29, 0.6, 0.07, 0.55, 0.72, 0.06, 0.49, 1.19, 0.23, 0.5, 0.15, 0.79, 0.22, + 0.89, 0.33, 0.42, 0.12, 0.34, 0.07, 0.18, 0.27, 0.09, 0.73, 0.03, 0.9, 0.98, 0.17, 0.16, 0.14, + 0.58, 0.48, 0.27, 0.56, 1.22, 0.08, 0.48, 0.06, 0.26, 0.72, 0.07, 0.35, 0.74, 0.12, 0.17, 0.12, + 0.28, 0.1, 0.34, 0.31, 0.01, 0.45, 0.54, 0.65, 0.22, 0.4, 0.53, 1.22, 0.27, 0.81, 0.66, 0.13, + 0.67, 0.09, 0.17, 1.11, 0.4, 0.03, 0.82, 0.44, 0.44, 0.27, 0.53, 0.25, 0.5, 0.28, 0.1, 0.66, + 0.78, 0.08, 0.35, 0.22, 0.2, 0.63, 0.62, 1.07, 0.37, 0.3, 0.31, 0.42, 0.4, 0.46, 0.1, 0.08, + 0.55, 0.59, 1.01, 0.27, 1.4, 0.69, 0.23, 0.64, 0.12, 0.47, 0.48, 0.01, 0.99, 0.86, 0.11, 0.41, + 0.14, 0.27, 0.44, 0.09, 0.16, 0.57, 0.11, 0.19, 0.13, 0.13, 0.47, 0.28, 0.3, 0.03, 0.51, 0.85, + 0.45, 0.63, 0.32, 0.5, 0.28, 0.21, 0.51, 0.61, 0.15, 0.59, 0.11, 0.36, 1.08, 0.48, 0.3, 0.78, + 0.25, 0.18, 0.42, 0.44, 0.24, 0.78, 0.17, 0.21, 0.58, 0.53, 0.0, 0.41, 0.74, 0.56, 0.54, 0.36, + 0.89, 0.53, 0.24, 0.39, 0.19, 0.27, 0.88, 0.42, 0.03, 0.66, 0.29, 0.74, 0.97, 0.61, 0.61, 0.19, + 0.64, 0.2, 0.45, 0.57, 0.02, 0.55, 0.81, 0.24, 0.36, 0.16, 0.42, 0.33, 0.52, 0.62, 0.62, 0.09, + 0.39, 0.2, 0.16, 0.25, 0.11, 0.51, 0.04, 0.88, 0.79, 0.18, 0.08, 0.21, 0.45, 0.67, 0.2, 0.45, + 1.0, 0.06, 0.52, 0.22, 0.35, 0.69, 0.21, 0.34, 0.35, 0.2, 0.11, 0.16, 0.21, 0.25, 0.45, 0.11, + 0.02, 0.51, 0.96, 0.0, 0.59, 0.2, 0.46, 0.79, 0.11, 0.98, 0.94, 0.24, 1.02, 0.63, 0.23, 1.11, + 0.44, 0.01, 0.92, 0.62, 0.89, 0.41, 0.25, 0.33, 0.52, 0.57, 0.05, 0.7, 0.24, 0.12, 0.64, 0.46, + 0.03, 0.74, 0.5, 0.93, 0.39, 0.49, 0.16, 0.46, 0.04, 0.42, 0.03, 0.1, 0.4, 0.92, 0.65, 0.16, + 0.3, 0.73, 0.07, 0.42, 0.16, 0.33, 0.4, 0.02, 0.84, 1.34, 0.12, 0.68, 0.08, 0.13, 0.84, 0.12, + 0.19, 0.86, 0.13, 0.27, 0.14, 0.16, 0.21, 0.32, 0.95, 0.01, 0.53, 0.76, 0.47, 0.35, 0.36, 0.65, + 0.81, 0.13, 1.04, 0.71, 0.13, 0.36, 0.17, 0.2, 0.95, 0.38, 0.15, 0.81, 0.64, 0.33, 0.19, 0.63, + 0.48, 0.68, 0.18, 0.36, 0.4, 0.52, 0.0, 0.65, 0.75, 0.21, 1.0, 0.38, 0.86, 0.31, 0.22, 0.56, + 0.43, 0.27, 0.46, 0.33, 0.04, 0.39, 0.31, 0.66, 0.38, 0.51, 0.71, 0.1, 0.51, 0.18, 0.63, 0.17, + 0.02, 0.87, 1.17, 0.01, 0.49, 0.0, 0.63, 0.72, 0.17, 0.35, 0.55, 0.1, 0.43, 0.1, 0.72, 0.41, + 0.26, 0.41, 0.07, 0.43, 0.67, 0.21, 0.49, 0.48, 0.47, 0.38, 0.06, 0.82, 0.95, 0.12, 0.77, 0.37, + 0.46, 1.12, 0.33, 0.13, 0.82, 0.32, 0.4, 0.14, 0.26, 0.86, 0.98, 0.33, 0.1, 0.58, 0.74, 0.16, + 0.45, 0.67, 0.29, 0.94, 0.31, 0.98, 0.61, 0.27, 1.18, 0.35, 0.29, 0.67, 0.35, 0.02, 0.89, 0.58, + 0.56, 0.24, 0.35, 0.63, 0.43, 0.46, 0.23, 0.56, 0.38, 0.13, 0.4, 1.14, 0.12, 1.04, 0.16, 0.74, + 0.51, 0.37, 0.19, 0.41, 0.58, 0.59, 0.12, 0.08, 0.52, 0.2, 0.66, 0.03, 0.61, 0.84, 0.18, 0.83, + 0.3, 0.61, 0.82, 0.1, 0.8, 1.01, 0.1, 0.95, 0.15, 0.42, 1.51, 0.13, 0.79, 0.78, 0.15, 0.52, + 0.11, 0.18, 0.27, 0.33, 0.52, 0.07, 0.56, 0.53, 0.26, 0.32, 0.68, 0.46, 0.76, 0.18, 1.09, 0.58, + 0.07, 1.06, 0.12, 0.21, 1.03, 0.44, 0.01, 0.6, 0.49, 0.32, 0.43, 0.52, 0.46, 0.47, 0.44, 0.21, + 0.61, 0.58, 0.04, 0.5, 0.93, 0.23, 1.04, 0.5, 0.9, 0.48, 1.06, 0.14, 0.38, 0.09, 0.5, 0.01, + 0.28, 0.5, 0.48, 0.68, 0.47, 0.56, 0.72, 0.12, 0.46, 0.18, 0.5, 0.35, 0.19, 0.92, 0.92, 0.02, + 0.73, 0.03, 0.22, 0.86, 0.37, 1.14, 0.78, 0.13, 0.6, 0.07, 0.53, 0.35, 0.29, 0.69, 0.04, 0.47, + 0.94, 0.49, 0.56, 0.42, 0.42, 0.43, 0.1, 0.8, 0.8, 0.04, 0.74, 0.22, 0.06, 1.04, 0.38, 0.08, + 1.1, 0.28, 0.45, 0.27, 0.44, 0.43, 0.56, 0.2, 0.02, 0.69, 0.74, 0.06, 0.37, 0.92, 0.57, 0.51, + 0.61, 0.9, 0.61, 0.06, 0.93, 0.46, 0.38, 0.52, 0.42, 0.14, 0.99, 0.44, 0.63, 0.88, 0.66, 0.6, + 0.08, 0.5, 0.15, 0.71, 0.32, 0.06, 0.53, 1.13, 0.01, 0.58, 0.25, 1.06, 0.68, 0.41, 0.15, 0.77, + 0.04, 0.45, 0.02, 0.23, 0.76, 0.15, 0.49, 0.05, 0.74, 0.97, 0.33, 0.31, 0.31, 0.41, 0.62, 0.05, + 0.52, 1.02, 0.06, 1.3, 0.12, 0.44, 1.42, 0.25, 0.02, 0.97, 0.23, 0.26, 0.1, 0.16, 0.27, 0.3, + 0.52, 0.1, 0.7, 0.62, 0.43, 0.62, 0.91, 0.47, 0.61, 0.19, 0.99, 0.41, 0.11, 0.87, 0.29, 0.17, + 1.16, 1.25, 0.01, 1.01, 0.59, 0.33, 0.26, 0.49, 0.75, 0.66, 0.33, 0.2, 0.59, 0.25, 0.01, 0.47, + 0.61, 0.46, 0.9, 0.38, 0.78, 0.32, 0.44, 0.2, 0.51, 0.08, 0.38, 0.06, 0.06, 0.59, 0.46, 0.66, + 0.3, 0.34, 0.83, 0.67, 0.26, 0.26, 0.63, 0.41, 0.07, 0.59, 1.25, 0.01, 1.34, 0.03, 0.24, 0.49, + 0.18, 0.43, 0.7, 0.24, 0.22, 0.05, 0.31, 0.63, 0.38, 0.54, 0.18, 0.49, 0.74, 0.56, 0.41, 0.5, + 0.65, 0.72, 0.19, 1.1, 0.57, 0.08, 0.52, 0.66, 0.25, 1.44, 0.36, 0.1, 1.07, 0.6, 0.3, 0.27, + 0.3, 0.68, 0.86, 0.18, 0.02, 0.51, 0.56, 0.35, 1.07, 0.77, 0.28, 0.56, 0.48, 0.84, 0.29, 0.16, + 0.65, 0.22, 0.44, 0.72, 0.42, 0.13, 0.79, 0.84, 0.87, 0.46, 0.65, 0.72, 0.11, 0.37, 0.13, 0.41, + 0.24, 0.02, 1.39, 1.02, 0.07, 0.34, 0.07, 0.64, 0.47, 0.43, 0.31, 0.53, 0.1, 0.39, 0.17, 0.12, + 0.66, 0.1, 0.46, 0.01, 0.35, 1.1, 0.31, 0.21, 0.15, 0.44, 0.2, 0.07, 0.88, 0.85, 0.18, 0.88, + 0.12, 0.44, 1.11, 0.55, 0.57, 0.99, 0.38, 0.25, 0.12, 0.23, 0.57, 0.52, 0.28, 0.34, 0.55, 0.42, + 0.09, 0.73, 0.96, 0.44, 0.69, 0.13, 0.97, 0.51, 0.26, 0.75, 0.09, 0.22, 0.77, 0.48, 0.05, 1.34, + 0.43, 0.84, 0.41, 0.23, 0.66, 0.15, 0.37, 0.14, 1.19, 0.57, 0.05, 0.47, 0.63, 0.09, 0.64, 0.04, + 0.67, 0.4, 0.5, 0.32, 0.44, 0.02, 0.45, 0.02, 0.16, 0.71, 0.15, 0.67, 0.09, 0.41, 0.8, 0.39, + 0.19, 1.63, 0.37, 0.88, 0.05, 0.56, 1.24, 0.04, 0.69, 0.08, 0.19, 0.92, 0.08, 0.23, 0.68, 0.35, + 0.19, 0.06, 0.22, 0.71, 0.34, 0.38, 0.06, 0.64, 0.36, 0.33, 0.64, 0.55, 0.62, 0.21, 0.82, 0.78, + 0.1, 0.77, 0.09, 0.05, 0.97, 0.58, 0.02, 1.0, 0.87, 0.46, 0.23, 0.51, 0.59, 1.16, 0.23, 0.14, + 0.42, 0.55, 0.08, 0.71, 0.58, 0.17, 0.72, 0.47, 0.82, 0.27, 0.07, 0.32, 0.53, 0.06, 0.58, 0.43, + 0.04, 0.9, 0.28, 0.78, 0.42, 0.43, 0.71, 0.17, 0.71, 0.15, 0.71, 0.29, 0.05, 0.52, 1.29, 0.08, + 0.8, 3.21, 0.54, 0.39, 0.36, 0.24, 0.61, 0.26, 0.48, 0.06, 0.39, 0.29, 0.47, 0.51, 0.0, 0.73, + 0.51, 0.13, 0.49, 0.47, 0.5, 0.1, 0.35, 1.2, 0.04, 0.84, 0.4, 0.27, 1.03, 0.57, 0.03, 0.59, + 0.2, 0.27, 0.74, 0.46, 0.23, 0.36, 0.4, 0.02, 0.59, 0.32, 0.01, 0.41, 0.76, 0.25, 0.69, 0.12, + 1.01, 0.16, 0.06, 0.29, 0.36, 0.24, 0.67, 0.81, 0.34, 0.65, 0.23, 0.73, 0.22, 0.61, 0.45, 0.27, + 0.24, 0.2, 0.41, 0.26, 0.08, 0.06, 0.57, 0.02, 0.77, 0.09, 0.78, 0.6, 0.13, 0.21, 0.55, 0.06, + 0.41, 0.04, 0.33, 0.4, 0.16, 0.7, 0.02, 0.82, 0.63, 0.16, 0.19, 0.38, 0.57, 0.62, 0.05, 0.29, + 0.97, 0.05, 1.06, 0.07, 0.44, 0.76, 0.53, 0.02, 0.99, 0.2, 0.46, 0.17, 0.46, 0.28, 0.33, 0.62, + 0.06, 0.52, 0.54, 0.22, 0.24, 0.77, 0.38, 1.08, 0.23, 0.74, 0.38, 0.02, 0.82, 0.24, 0.38, 1.07, + 1.04, 0.11, 0.88, 1.27, 0.43, 0.45, 0.65, 0.47, 0.67, 0.29, 0.05, 0.7, 0.43, 0.06, 0.14, 0.99, + 0.14, 0.87, 0.32, 0.79, 0.24, 0.2, 0.2, 0.59, 0.21, 0.63, 0.27, 0.17, 0.41, 0.51, 0.94, 0.32, + 0.54, 0.66, 0.48, 0.13, 0.18, 0.39, 0.39, 0.33, 0.26, 0.87, 0.26, 0.71, 0.12, 0.28, 1.1, 0.4, + 0.48, 0.52, 0.2, 0.34, 0.06, 0.26, 0.26, 0.7, 0.49, 0.02, 0.41, 0.54, 0.32, 0.18, 0.45, 0.38, + 0.63, 0.07, 0.51, 0.83, 0.02, 0.68, 0.14, 0.26, 1.28, 0.74, 0.1, 0.87, 0.3, 0.42, 0.31, 0.75, + 0.45, 0.69, 0.19, 0.12, 0.61, 0.36, 0.04, 0.41, 0.79, 0.29, 1.11, 0.25, 0.94, 0.48, 0.23, 0.5, + 0.4, 0.31, 0.82, 0.86, 0.29, 0.51, 0.51, 0.74, 0.72, 0.43, 0.69, 0.07, 0.44, 0.35, 0.56, 0.3, + 0.06, 0.41, 0.78, 0.06, 0.79, 0.17, 1.41, 0.54, 0.38, 0.38, 0.59, 0.06, 0.33, 0.12, 0.31, 0.38, + 0.26, 0.36, 0.04, 0.08, 0.47, 0.25, 0.48, 0.24, 0.51, 0.23, 0.23, 0.39, 1.01, 0.02, 0.79, 0.07, + 0.56, 1.23, 0.58, 0.12, 0.84, 0.23, 0.14, 0.25, 0.12, 0.51, 0.91, 0.29, 0.12, 0.44, 0.42, 0.04, + 0.4, 0.9, 0.5, 1.08, 0.2, 1.01, 0.5, 0.08, 0.67, 0.47, 0.32, 1.1, 0.43, 0.25, 0.96, 0.57, 0.64, + 0.22, 0.08, 0.54, 0.44, 0.52, 0.19, 0.54, 0.29, 0.05, 0.22, 1.01, 0.25, 1.12, 0.21, 0.64, 0.36, + 0.12, 0.28, 0.59, 0.14, 0.49, 0.16, 0.35, 0.4, 0.2, 1.0, 0.04, 0.27, 0.52, 0.31, 0.13, 0.27, + 0.46, 0.4, 0.25, 0.36, 0.91, 0.01, 0.95, 0.39, 0.2, 0.79, 0.3, 0.31, 0.56, 0.23, 0.22, 0.08, + 0.48, 0.39, 0.64, 0.56, 0.04, 0.63, 0.91, 0.67, 0.2, 0.7, 0.61, 0.78, 0.26, 0.85, 0.68, 0.09, + 0.69, 0.39, 0.26, 1.57, 0.68, 0.12, 0.53, 0.2, 0.73, 0.2, 0.68, 0.73, 0.23, 0.06, 0.64, 0.49, + 0.36, 0.33, 0.74, 0.07, 1.06, 0.17, 0.85, 0.49, 0.07, 0.33, 0.5, 0.17, 0.81, 0.05, 0.1, 0.37, + 0.21, 0.77, 0.87, 0.09, 0.26, 0.12, 0.26, 0.11, 0.53, 0.35, 0.06, 0.88, 1.16, 0.04, 0.74, 0.35, + 0.12, 0.43, 0.11, 0.34, 0.65, 0.08, 0.24, 0.33, 0.78, 0.21, 0.5, 0.57, 0.13, +]; + +static PREDICTION_DS: &[TimestampSeconds] = &[ + 1729156767, 1729157367, 1729157967, 1729158567, 1729159167, 1729159767, 1729160367, 1729160967, + 1729161567, 1729162167, 1729162767, 1729163367, 1729163967, 1729164567, 1729165167, 1729165767, + 1729166367, 1729166967, 1729167567, 1729168167, 1729168767, 1729169367, 1729169967, 1729170567, + 1729171167, 1729171767, 1729172367, 1729172967, 1729173567, 1729174167, 1729174767, 1729175367, + 1729175967, 1729176567, 1729177167, 1729177767, 1729178367, 1729178967, 1729179567, 1729180167, + 1729180767, 1729181367, 1729181967, 1729182567, 1729183167, 1729183767, 1729184367, 1729184967, + 1729185567, 1729186167, 1729186767, 1729187367, 1729187967, 1729188567, 1729189167, 1729189767, + 1729190367, 1729190967, 1729191567, 1729192167, 1729192767, 1729193367, 1729193967, 1729194567, + 1729195167, 1729195767, 1729196367, 1729196967, 1729197567, 1729198167, 1729198767, 1729199367, + 1729199967, 1729200567, 1729201167, 1729201767, 1729202367, 1729202967, 1729203567, 1729204167, + 1729204767, 1729205367, 1729205967, 1729206567, 1729207167, 1729207767, 1729208367, 1729208967, + 1729209567, 1729210167, 1729210767, 1729211367, 1729211967, 1729212567, 1729213167, 1729213767, + 1729214367, 1729214967, 1729215567, 1729216167, 1729216767, 1729217367, 1729217967, 1729218567, + 1729219167, 1729219767, 1729220367, 1729220967, 1729221567, 1729222167, 1729222767, 1729223367, + 1729223967, 1729224567, 1729225167, 1729225767, 1729226367, 1729226967, 1729227567, 1729228167, + 1729228767, 1729229367, 1729229967, 1729230567, 1729231167, 1729231767, 1729232367, 1729232967, + 1729233567, 1729234167, 1729234767, 1729235367, 1729235967, 1729236567, 1729237167, 1729237767, + 1729238367, 1729238967, 1729239567, 1729240167, 1729240767, 1729241367, 1729241967, 1729242567, + 1729243167, 1729243767, 1729244367, 1729244967, 1729245567, 1729246167, 1729246767, 1729247367, + 1729247967, 1729248567, 1729249167, 1729249767, 1729250367, 1729250967, 1729251567, 1729252167, + 1729252767, 1729253367, 1729253967, 1729254567, 1729255167, 1729255767, 1729256367, 1729256967, + 1729257567, 1729258167, 1729258767, 1729259367, 1729259967, 1729260567, 1729261167, 1729261767, + 1729262367, 1729262967, 1729263567, 1729264167, 1729264767, 1729265367, 1729265967, 1729266567, + 1729267167, 1729267767, 1729268367, 1729268967, 1729269567, 1729270167, 1729270767, 1729271367, + 1729271967, 1729272567, 1729273167, 1729273767, 1729274367, 1729274967, 1729275567, 1729276167, + 1729276767, 1729277367, 1729277967, 1729278567, 1729279167, 1729279767, 1729280367, 1729280967, + 1729281567, 1729282167, 1729282767, 1729283367, 1729283967, 1729284567, 1729285167, 1729285767, + 1729286367, 1729286967, 1729287567, 1729288167, 1729288767, 1729289367, 1729289967, 1729290567, + 1729291167, 1729291767, 1729292367, 1729292967, 1729293567, 1729294167, 1729294767, 1729295367, + 1729295967, 1729296567, 1729297167, 1729297767, 1729298367, 1729298967, 1729299567, 1729300167, + 1729300767, 1729301367, 1729301967, 1729302567, 1729303167, 1729303767, 1729304367, 1729304967, + 1729305567, 1729306167, 1729306767, 1729307367, 1729307967, 1729308567, 1729309167, 1729309767, + 1729310367, 1729310967, 1729311567, 1729312167, 1729312767, 1729313367, 1729313967, 1729314567, + 1729315167, 1729315767, 1729316367, 1729316967, 1729317567, 1729318167, 1729318767, 1729319367, + 1729319967, 1729320567, 1729321167, 1729321767, 1729322367, 1729322967, 1729323567, 1729324167, + 1729324767, 1729325367, 1729325967, 1729326567, 1729327167, 1729327767, 1729328367, 1729328967, + 1729329567, 1729330167, 1729330767, 1729331367, 1729331967, 1729332567, 1729333167, 1729333767, + 1729334367, 1729334967, 1729335567, 1729336167, 1729336767, 1729337367, 1729337967, 1729338567, + 1729339167, 1729339767, 1729340367, 1729340967, 1729341567, 1729342167, 1729342767, 1729343367, + 1729343967, 1729344567, 1729345167, 1729345767, 1729346367, 1729346967, 1729347567, 1729348167, + 1729348767, 1729349367, 1729349967, 1729350567, 1729351167, 1729351767, 1729352367, 1729352967, + 1729353567, 1729354167, 1729354767, 1729355367, 1729355967, 1729356567, 1729357167, 1729357767, + 1729358367, 1729358967, 1729359567, 1729360167, 1729360767, 1729361367, 1729361967, 1729362567, + 1729363167, 1729363767, 1729364367, 1729364967, 1729365567, 1729366167, 1729366767, 1729367367, + 1729367967, 1729368567, 1729369167, 1729369767, 1729370367, 1729370967, 1729371567, 1729372167, + 1729372767, 1729373367, 1729373967, 1729374567, 1729375167, 1729375767, 1729376367, 1729376967, + 1729377567, 1729378167, 1729378767, 1729379367, 1729379967, 1729380567, 1729381167, 1729381767, + 1729382367, 1729382967, 1729383567, 1729384167, 1729384767, 1729385367, 1729385967, 1729386567, + 1729387167, 1729387767, 1729388367, 1729388967, 1729389567, 1729390167, 1729390767, 1729391367, + 1729391967, 1729392567, 1729393167, 1729393767, 1729394367, 1729394967, 1729395567, 1729396167, + 1729396767, 1729397367, 1729397967, 1729398567, 1729399167, 1729399767, 1729400367, 1729400967, + 1729401567, 1729402167, 1729402767, 1729403367, 1729403967, 1729404567, 1729405167, 1729405767, + 1729406367, 1729406967, 1729407567, 1729408167, 1729408767, 1729409367, 1729409967, 1729410567, + 1729411167, 1729411767, 1729412367, 1729412967, 1729413567, 1729414167, 1729414767, 1729415367, + 1729415967, 1729416567, 1729417167, 1729417767, 1729418367, 1729418967, 1729419567, 1729420167, + 1729420767, 1729421367, 1729421967, 1729422567, 1729423167, 1729423767, 1729424367, 1729424967, + 1729425567, 1729426167, 1729426767, 1729427367, 1729427967, 1729428567, 1729429167, 1729429767, + 1729430367, 1729430967, 1729431567, 1729432167, 1729432767, 1729433367, 1729433967, 1729434567, + 1729435167, 1729435767, 1729436367, 1729436967, 1729437567, 1729438167, 1729438767, 1729439367, + 1729439967, 1729440567, 1729441167, 1729441767, 1729442367, 1729442967, 1729443567, 1729444167, + 1729444767, 1729445367, 1729445967, 1729446567, 1729447167, 1729447767, 1729448367, 1729448967, + 1729449567, 1729450167, 1729450767, 1729451367, 1729451967, 1729452567, 1729453167, 1729453767, + 1729454367, 1729454967, 1729455567, 1729456167, 1729456767, 1729457367, 1729457967, 1729458567, + 1729459167, 1729459767, 1729460367, 1729460967, 1729461567, 1729462167, 1729462767, 1729463367, + 1729463967, 1729464567, 1729465167, 1729465767, 1729466367, 1729466967, 1729467567, 1729468167, + 1729468767, 1729469367, 1729469967, 1729470567, 1729471167, 1729471767, 1729472367, 1729472967, + 1729473567, 1729474167, 1729474767, 1729475367, 1729475967, 1729476567, 1729477167, 1729477767, + 1729478367, 1729478967, 1729479567, 1729480167, 1729480767, 1729481367, 1729481967, 1729482567, + 1729483167, 1729483767, 1729484367, 1729484967, 1729485567, 1729486167, 1729486767, 1729487367, + 1729487967, 1729488567, 1729489167, 1729489767, 1729490367, 1729490967, 1729491567, 1729492167, + 1729492767, 1729493367, 1729493967, 1729494567, 1729495167, 1729495767, 1729496367, 1729496967, + 1729497567, 1729498167, 1729498767, 1729499367, 1729499967, 1729500567, 1729501167, 1729501767, + 1729502367, 1729502967, 1729503567, 1729504167, 1729504767, 1729505367, 1729505967, 1729506567, + 1729507167, 1729507767, 1729508367, 1729508967, 1729509567, 1729510167, 1729510767, 1729511367, + 1729511967, 1729512567, 1729513167, 1729513767, 1729514367, 1729514967, 1729515567, 1729516167, + 1729516767, 1729517367, 1729517967, 1729518567, 1729519167, 1729519767, 1729520367, 1729520967, + 1729521567, 1729522167, 1729522767, 1729523367, 1729523967, 1729524567, 1729525167, 1729525767, + 1729526367, 1729526967, 1729527567, 1729528167, 1729528767, 1729529367, 1729529967, 1729530567, + 1729531167, 1729531767, 1729532367, 1729532967, 1729533567, 1729534167, 1729534767, 1729535367, + 1729535967, 1729536567, 1729537167, 1729537767, 1729538367, 1729538967, 1729539567, 1729540167, + 1729540767, 1729541367, 1729541967, 1729542567, 1729543167, 1729543767, 1729544367, 1729544967, + 1729545567, 1729546167, 1729546767, 1729547367, 1729547967, 1729548567, 1729549167, 1729549767, + 1729550367, 1729550967, 1729551567, 1729552167, 1729552767, 1729553367, 1729553967, 1729554567, + 1729555167, 1729555767, 1729556367, 1729556967, 1729557567, 1729558167, 1729558767, 1729559367, + 1729559967, 1729560567, 1729561167, 1729561767, 1729562367, 1729562967, 1729563567, 1729564167, + 1729564767, 1729565367, 1729565967, 1729566567, 1729567167, 1729567767, 1729568367, 1729568967, + 1729569567, 1729570167, 1729570767, 1729571367, 1729571967, 1729572567, 1729573167, 1729573767, + 1729574367, 1729574967, 1729575567, 1729576167, 1729576767, 1729577367, 1729577967, 1729578567, + 1729579167, 1729579767, 1729580367, 1729580967, 1729581567, 1729582167, 1729582767, 1729583367, + 1729583967, 1729584567, 1729585167, 1729585767, 1729586367, 1729586967, 1729587567, 1729588167, + 1729588767, 1729589367, 1729589967, 1729590567, 1729591167, 1729591767, 1729592367, 1729592967, + 1729593567, 1729594167, 1729594767, 1729595367, 1729595967, 1729596567, 1729597167, 1729597767, + 1729598367, 1729598967, 1729599567, 1729600167, 1729600767, 1729601367, 1729601967, 1729602567, + 1729603167, 1729603767, 1729604367, 1729604967, 1729605567, 1729606167, 1729606767, 1729607367, + 1729607967, 1729608567, 1729609167, 1729609767, 1729610367, 1729610967, 1729611567, 1729612167, + 1729612767, 1729613367, 1729613967, 1729614567, 1729615167, 1729615767, 1729616367, 1729616967, + 1729617567, 1729618167, 1729618767, 1729619367, 1729619967, 1729620567, 1729621167, 1729621767, + 1729622367, 1729622967, 1729623567, 1729624167, 1729624767, 1729625367, 1729625967, 1729626567, + 1729627167, 1729627767, 1729628367, 1729628967, 1729629567, 1729630167, 1729630767, 1729631367, + 1729631967, 1729632567, 1729633167, 1729633767, 1729634367, 1729634967, 1729635567, 1729636167, + 1729636767, 1729637367, 1729637967, 1729638567, 1729639167, 1729639767, 1729640367, 1729640967, + 1729641567, 1729642167, 1729642767, 1729643367, 1729643967, 1729644567, 1729645167, 1729645767, + 1729646367, 1729646967, 1729647567, 1729648167, 1729648767, 1729649367, 1729649967, 1729650567, + 1729651167, 1729651767, 1729652367, 1729652967, 1729653567, 1729654167, 1729654767, 1729655367, + 1729655967, 1729656567, 1729657167, 1729657767, 1729658367, 1729658967, 1729659567, 1729660167, + 1729660767, 1729661367, 1729661967, 1729662567, 1729663167, 1729663767, 1729664367, 1729664967, + 1729665567, 1729666167, 1729666767, 1729667367, 1729667967, 1729668567, 1729669167, 1729669767, + 1729670367, 1729670967, 1729671567, 1729672167, 1729672767, 1729673367, 1729673967, 1729674567, + 1729675167, 1729675767, 1729676367, 1729676967, 1729677567, 1729678167, 1729678767, 1729679367, + 1729679967, 1729680567, 1729681167, 1729681767, 1729682367, 1729682967, 1729683567, 1729684167, + 1729684767, 1729685367, 1729685967, 1729686567, 1729687167, 1729687767, 1729688367, 1729688967, + 1729689567, 1729690167, 1729690767, 1729691367, 1729691967, 1729692567, 1729693167, 1729693767, + 1729694367, 1729694967, 1729695567, 1729696167, 1729696767, 1729697367, 1729697967, 1729698567, + 1729699167, 1729699767, 1729700367, 1729700967, 1729701567, 1729702167, 1729702767, 1729703367, + 1729703967, 1729704567, 1729705167, 1729705767, 1729706367, 1729706967, 1729707567, 1729708167, + 1729708767, 1729709367, 1729709967, 1729710567, 1729711167, 1729711767, 1729712367, 1729712967, + 1729713567, 1729714167, 1729714767, 1729715367, 1729715967, 1729716567, 1729717167, 1729717767, + 1729718367, 1729718967, 1729719567, 1729720167, 1729720767, 1729721367, 1729721967, 1729722567, + 1729723167, 1729723767, 1729724367, 1729724967, 1729725567, 1729726167, 1729726767, 1729727367, + 1729727967, 1729728567, 1729729167, 1729729767, 1729730367, 1729730967, 1729731567, 1729732167, + 1729732767, 1729733367, 1729733967, 1729734567, 1729735167, 1729735767, 1729736367, 1729736967, + 1729737567, 1729738167, 1729738767, 1729739367, 1729739967, 1729740567, 1729741167, 1729741767, + 1729742367, 1729742967, 1729743567, 1729744167, 1729744767, 1729745367, 1729745967, 1729746567, + 1729747167, 1729747767, 1729748367, 1729748967, 1729749567, 1729750167, 1729750767, 1729751367, + 1729751967, 1729752567, 1729753167, 1729753767, 1729754367, 1729754967, 1729755567, 1729756167, + 1729756767, 1729757367, 1729757967, 1729758567, 1729759167, 1729759767, 1729760367, 1729760967, + 1729761567, 1729762167, 1729762767, 1729763367, 1729763967, 1729764567, 1729765167, 1729765767, + 1729766367, 1729766967, 1729767567, 1729768167, 1729768767, 1729769367, 1729769967, 1729770567, + 1729771167, 1729771767, 1729772367, 1729772967, 1729773567, 1729774167, 1729774767, 1729775367, + 1729775967, 1729776567, 1729777167, 1729777767, 1729778367, 1729778967, 1729779567, 1729780167, + 1729780767, 1729781367, 1729781967, 1729782567, 1729783167, 1729783767, 1729784367, 1729784967, + 1729785567, 1729786167, 1729786767, 1729787367, 1729787967, 1729788567, 1729789167, 1729789767, + 1729790367, 1729790967, 1729791567, 1729792167, 1729792767, 1729793367, 1729793967, 1729794567, + 1729795167, 1729795767, 1729796367, 1729796967, 1729797567, 1729798167, 1729798767, 1729799367, + 1729799967, 1729800567, 1729801167, 1729801767, 1729802367, 1729802967, 1729803567, 1729804167, + 1729804767, 1729805367, 1729805967, 1729806567, 1729807167, 1729807767, 1729808367, 1729808967, + 1729809567, 1729810167, 1729810767, 1729811367, 1729811967, 1729812567, 1729813167, 1729813767, + 1729814367, 1729814967, 1729815567, 1729816167, 1729816767, 1729817367, 1729817967, 1729818567, + 1729819167, 1729819767, 1729820367, 1729820967, 1729821567, 1729822167, 1729822767, 1729823367, + 1729823967, 1729824567, 1729825167, 1729825767, 1729826367, 1729826967, 1729827567, 1729828167, + 1729828767, 1729829367, 1729829967, 1729830567, 1729831167, 1729831767, 1729832367, 1729832967, + 1729833567, 1729834167, 1729834767, 1729835367, 1729835967, 1729836567, 1729837167, 1729837767, + 1729838367, 1729838967, 1729839567, 1729840167, 1729840767, 1729841367, 1729841967, 1729842567, + 1729843167, 1729843767, 1729844367, 1729844967, 1729845567, 1729846167, 1729846767, 1729847367, + 1729847967, 1729848567, 1729849167, 1729849767, 1729850367, 1729850967, 1729851567, 1729852167, + 1729852767, 1729853367, 1729853967, 1729854567, 1729855167, 1729855767, 1729856367, 1729856967, + 1729857567, 1729858167, 1729858767, 1729859367, 1729859967, 1729860567, 1729861167, 1729861767, + 1729862367, 1729862967, 1729863567, 1729864167, 1729864767, 1729865367, 1729865967, 1729866567, + 1729867167, 1729867767, 1729868367, 1729868967, 1729869567, 1729870167, 1729870767, 1729871367, + 1729871967, 1729872567, 1729873167, 1729873767, 1729874367, 1729874967, 1729875567, 1729876167, + 1729876767, 1729877367, 1729877967, 1729878567, 1729879167, 1729879767, 1729880367, 1729880967, + 1729881567, 1729882167, 1729882767, 1729883367, 1729883967, 1729884567, 1729885167, 1729885767, + 1729886367, 1729886967, 1729887567, 1729888167, 1729888767, 1729889367, 1729889967, 1729890567, + 1729891167, 1729891767, 1729892367, 1729892967, 1729893567, 1729894167, 1729894767, 1729895367, + 1729895967, 1729896567, 1729897167, 1729897767, 1729898367, 1729898967, 1729899567, 1729900167, + 1729900767, 1729901367, 1729901967, 1729902567, 1729903167, 1729903767, 1729904367, 1729904967, + 1729905567, 1729906167, 1729906767, 1729907367, 1729907967, 1729908567, 1729909167, 1729909767, + 1729910367, 1729910967, 1729911567, 1729912167, 1729912767, 1729913367, 1729913967, 1729914567, + 1729915167, 1729915767, 1729916367, 1729916967, 1729917567, 1729918167, 1729918767, 1729919367, + 1729919967, 1729920567, 1729921167, 1729921767, 1729922367, 1729922967, 1729923567, 1729924167, + 1729924767, 1729925367, 1729925967, 1729926567, 1729927167, 1729927767, 1729928367, 1729928967, + 1729929567, 1729930167, 1729930767, 1729931367, 1729931967, 1729932567, 1729933167, 1729933767, + 1729934367, 1729934967, 1729935567, 1729936167, 1729936767, 1729937367, 1729937967, 1729938567, + 1729939167, 1729939767, 1729940367, 1729940967, 1729941567, 1729942167, 1729942767, 1729943367, + 1729943967, 1729944567, 1729945167, 1729945767, 1729946367, 1729946967, 1729947567, 1729948167, + 1729948767, 1729949367, 1729949967, 1729950567, 1729951167, 1729951767, 1729952367, 1729952967, + 1729953567, 1729954167, 1729954767, 1729955367, 1729955967, 1729956567, 1729957167, 1729957767, + 1729958367, 1729958967, 1729959567, 1729960167, 1729960767, 1729961367, 1729961967, 1729962567, + 1729963167, 1729963767, 1729964367, 1729964967, 1729965567, 1729966167, 1729966767, 1729967367, + 1729967967, 1729968567, 1729969167, 1729969767, 1729970367, 1729970967, 1729971567, 1729972167, + 1729972767, 1729973367, 1729973967, 1729974567, 1729975167, 1729975767, 1729976367, 1729976967, + 1729977567, 1729978167, 1729978767, 1729979367, 1729979967, 1729980567, 1729981167, 1729981767, + 1729982367, 1729982967, 1729983567, 1729984167, 1729984767, 1729985367, 1729985967, 1729986567, + 1729987167, 1729987767, 1729988367, 1729988967, 1729989567, 1729990167, 1729990767, 1729991367, + 1729991967, 1729992567, 1729993167, 1729993767, 1729994367, 1729994967, 1729995567, 1729996167, + 1729996767, 1729997367, 1729997967, 1729998567, 1729999167, 1729999767, 1730000367, 1730000967, + 1730001567, 1730002167, 1730002767, 1730003367, 1730003967, 1730004567, 1730005167, 1730005767, + 1730006367, 1730006967, 1730007567, 1730008167, 1730008767, 1730009367, 1730009967, 1730010567, + 1730011167, 1730011767, 1730012367, 1730012967, 1730013567, 1730014167, 1730014767, 1730015367, + 1730015967, 1730016567, 1730017167, 1730017767, 1730018367, 1730018967, 1730019567, 1730020167, + 1730020767, 1730021367, 1730021967, 1730022567, 1730023167, 1730023767, 1730024367, 1730024367, +]; + +static EXPECTED: &[f64] = &[ + 0.48566585406661034, + 0.4869289919734001, + 0.4877674840390682, + 0.48818453401327133, + 0.4881950505077839, + 0.48782483115792274, + 0.4871099852025509, + 0.4860953241586685, + 0.4848331846296787, + 0.4833817593753338, + 0.4818028584122658, + 0.48016058653593063, + 0.47851877100765705, + 0.4769394136965275, + 0.4754804726690054, + 0.4741945303976536, + 0.4731266666203737, + 0.47231375426054, + 0.4717830251902342, + 0.47155135683715343, + 0.47162521071732044, + 0.47200000286102295, + 0.47266104258596897, + 0.47358357161283493, + 0.4747340139001608, + 0.47607117146253586, + 0.47754736989736557, + 0.47911044023931026, + 0.4807051792740822, + 0.48227544873952866, + 0.48376576602458954, + 0.4851234555244446, + 0.48630012199282646, + 0.48725324496626854, + 0.4879477545619011, + 0.48835688829421997, + 0.488463394343853, + 0.488259669393301, + 0.48774827271699905, + 0.4869418404996395, + 0.48586221039295197, + 0.48454030603170395, + 0.4830145165324211, + 0.481329757720232, + 0.4795356746762991, + 0.47768524661660194, + 0.47583273239433765, + 0.4740318339318037, + 0.4723340142518282, + 0.47078644298017025, + 0.46943066641688347, + 0.46830072067677975, + 0.4674222096800804, + 0.46681104227900505, + 0.46647292748093605, + 0.46640303172171116, + 0.46658569388091564, + 0.46699508279561996, + 0.467595599591732, + 0.4683431014418602, + 0.469185933470726, + 0.4700667839497328, + 0.4709241967648268, + 0.47169447876513004, + 0.4723140522837639, + 0.472720954567194, + 0.4728575311601162, + 0.47267183288931847, + 0.47211974300444126, + 0.4711665976792574, + 0.46978825330734253, + 0.4679724723100662, + 0.4657193757593632, + 0.46304203290492296, + 0.4599661733955145, + 0.4565301528200507, + 0.4527837517671287, + 0.44878739801060874, + 0.444610589183867, + 0.44033004995435476, + 0.43602808844298124, + 0.4317900352180004, + 0.4277023281902075, + 0.42384994216263294, + 0.4203142262995243, + 0.4171707406640053, + 0.4144868776202202, + 0.4123203307390213, + 0.4107171632349491, + 0.4097108952701092, + 0.40932099148631096, + 0.409552875906229, + 0.41039736568927765, + 0.4118308871984482, + 0.4138164073228836, + 0.41630400344729424, + 0.41923257149755955, + 0.4225312229245901, + 0.4261213969439268, + 0.4299190156161785, + 0.43383653555065393, + 0.43778563663363457, + 0.441679360345006, + 0.4454346795100719, + 0.4489744657767005, + 0.452229889575392, + 0.45514179300516844, + 0.45766250882297754, + 0.4597570616751909, + 0.46140354685485363, + 0.46259419061243534, + 0.46333478949964046, + 0.46364472806453705, + 0.4635558994486928, + 0.4631119277328253, + 0.4623664356768131, + 0.46138134226202965, + 0.46022508200258017, + 0.4589701984077692, + 0.457691497169435, + 0.456463192589581, + 0.4553572842851281, + 0.45444097789004445, + 0.4537747115828097, + 0.4534106692299247, + 0.4533908343873918, + 0.4537461451254785, + 0.4544953494332731, + 0.45564468763768673, + 0.45718780625611544, + 0.4591057412326336, + 0.4613678874447942, + 0.4639326725155115, + 0.46674924716353416, + 0.4697584956884384, + 0.4728954825550318, + 0.4760908745229244, + 0.4792733434587717, + 0.4823717325925827, + 0.48531673848629, + 0.4880435988306999, + 0.49049340188503265, + 0.49261509254574776, + 0.49436695873737335, + 0.49571747705340385, + 0.4966465048491955, + 0.49714548513293266, + 0.4972178116440773, + 0.49687833711504936, + 0.4961531274020672, + 0.49507826194167137, + 0.4936986342072487, + 0.4920668303966522, + 0.49024083837866783, + 0.4882828891277313, + 0.4862569496035576, + 0.48422709479928017, + 0.4822553023695946, + 0.4803997315466404, + 0.47871300019323826, + 0.47724038548767567, + 0.4760188087821007, + 0.4750755149871111, + 0.47442773915827274, + 0.47408171743154526, + 0.4740332793444395, + 0.4742677006870508, + 0.4747603312134743, + 0.4754778351634741, + 0.47637894935905933, + 0.4774162694811821, + 0.4785376228392124, + 0.47968799248337746, + 0.48081138730049133, + 0.481852438300848, + 0.4827585779130459, + 0.4834814667701721, + 0.48397883772850037, + 0.4842155873775482, + 0.484165258705616, + 0.4838106110692024, + 0.4831441715359688, + 0.4821687787771225, + 0.48089689016342163, + 0.4793508108705282, + 0.477561354637146, + 0.47556718438863754, + 0.47341321036219597, + 0.4711493756622076, + 0.4688287079334259, + 0.46650554053485394, + 0.4642338268458843, + 0.462065014988184, + 0.46004661079496145, + 0.45822009164839983, + 0.4566197441890836, + 0.4552712766453624, + 0.4541907040402293, + 0.4533839854411781, + 0.45284624258056283, + 0.45256209652870893, + 0.45250573428347707, + 0.4526417450979352, + 0.4529261542484164, + 0.4533074335195124, + 0.4537283810786903, + 0.45412757946178317, + 0.45444170851260424, + 0.4546069912612438, + 0.45456192269921303, + 0.4542487468570471, + 0.4536157283000648, + 0.452618972864002, + 0.4512237636372447, + 0.4494062371086329, + 0.4471541615203023, + 0.4444679068401456, + 0.44136051554232836, + 0.43785802368074656, + 0.4339987887069583, + 0.4298327509313822, + 0.4254204835742712, + 0.4208314884454012, + 0.4161428213119507, + 0.41143669933080673, + 0.40679866075515747, + 0.40231532230973244, + 0.39807164669036865, + 0.3941492587327957, + 0.39062364771962166, + 0.38756246119737625, + 0.3850233629345894, + 0.3830527067184448, + 0.38168396055698395, + 0.380936823785305, + 0.3808167651295662, + 0.38131462037563324, + 0.3824071064591408, + 0.38405710458755493, + 0.3862149007618427, + 0.38881945982575417, + 0.3917999565601349, + 0.39507804811000824, + 0.3985695615410805, + 0.40218720585107803, + 0.4058426208794117, + 0.4094490520656109, + 0.4129234217107296, + 0.4161888509988785, + 0.419176472350955, + 0.42182721570134163, + 0.4240936357527971, + 0.4259405340999365, + 0.42734640650451183, + 0.4283033162355423, + 0.42881721444427967, + 0.4289075843989849, + 0.4286063853651285, + 0.42795727401971817, + 0.4270138759166002, + 0.42583828791975975, + 0.42449885234236717, + 0.42306840419769287, + 0.4216214753687382, + 0.42023262567818165, + 0.4189737867563963, + 0.4179121218621731, + 0.4171083178371191, + 0.41661439277231693, + 0.41647252067923546, + 0.41671355068683624, + 0.4173563290387392, + 0.4184072185307741, + 0.4198597129434347, + 0.42169502936303616, + 0.4238824360072613, + 0.4263806212693453, + 0.4291384294629097, + 0.43209705874323845, + 0.43519144505262375, + 0.4383522653952241, + 0.4415083513595164, + 0.44458825211040676, + 0.4475230085590738, + 0.45024761906825006, + 0.4527032570913434, + 0.45483896415680647, + 0.4566128412261605, + 0.45799350924789906, + 0.4589606998488307, + 0.45950596034526825, + 0.4596325270831585, + 0.4593554474413395, + 0.45870058331638575, + 0.45770402904599905, + 0.4564107805490494, + 0.45487314835190773, + 0.45314939972013235, + 0.4513015004340559, + 0.44939352420624346, + 0.44748940347017196, + 0.4456511327298358, + 0.44393692212179303, + 0.44239917676895857, + 0.4410832724533975, + 0.4400259396061301, + 0.439254617318511, + 0.4387861546128988, + 0.4386270409449935, + 0.43877293076366186, + 0.43920894991606474, + 0.4399106064811349, + 0.4408442913554609, + 0.4419688256457448, + 0.44323662482202053, + 0.4445955096744001, + 0.44599047861993313, + 0.44736529395868274, + 0.4486646712757647, + 0.4498358345590532, + 0.450830495916307, + 0.45160615537315607, + 0.4521278450265527, + 0.4523688433691859, + 0.45231182454153895, + 0.45194944087415934, + 0.4512841096147895, + 0.4503285337705165, + 0.44910468463785946, + 0.44764343480346724, + 0.4459832051070407, + 0.4441689820960164, + 0.44225052651017904, + 0.4402807089500129, + 0.43831387627869844, + 0.43640373554080725, + 0.43460183404386044, + 0.4329553674906492, + 0.4315058272331953, + 0.43028739280998707, + 0.4293255377560854, + 0.42863638140261173, + 0.4282255582511425, + 0.42808822914958, + 0.42820877954363823, + 0.4285613428801298, + 0.4291104804724455, + 0.42981192097067833, + 0.43061416782438755, + 0.43145974911749363, + 0.4322873679921031, + 0.4330332512035966, + 0.4336338313296437, + 0.4340272396802902, + 0.43415568582713604, + 0.43396740034222603, + 0.4334181835874915, + 0.4324733428657055, + 0.43110876716673374, + 0.42931222170591354, + 0.42708379216492176, + 0.42443657852709293, + 0.42139639519155025, + 0.4180014096200466, + 0.4143015518784523, + 0.41035712510347366, + 0.4062376990914345, + 0.40201999247074127, + 0.3977861851453781, + 0.3936217986047268, + 0.3896130211651325, + 0.38584501668810844, + 0.3823990449309349, + 0.37935060262680054, + 0.376767061650753, + 0.3747061863541603, + 0.3732139393687248, + 0.37232378125190735, + 0.3720553368330002, + 0.3724137917160988, + 0.3733900710940361, + 0.3749605119228363, + 0.3770880699157715, + 0.37972278892993927, + 0.3828034773468971, + 0.38625937327742577, + 0.3900117687880993, + 0.3939765393733978, + 0.3980661369860172, + 0.402192197740078, + 0.4062676951289177, + 0.410209596157074, + 0.41394082456827164, + 0.41739229299128056, + 0.4205050449818373, + 0.4232311900705099, + 0.42553573846817017, + 0.42739682644605637, + 0.42880649119615555, + 0.42977068573236465, + 0.4303085058927536, + 0.43045203760266304, + 0.43024467676877975, + 0.42974005080759525, + 0.42899999767541885, + 0.42809299007058144, + 0.4270914252847433, + 0.426070025190711, + 0.4251031279563904, + 0.42426246777176857, + 0.42361531034111977, + 0.4232220370322466, + 0.42313471250236034, + 0.4233952909708023, + 0.4240345899015665, + 0.4250714424997568, + 0.42651194147765636, + 0.4283496364951134, + 0.430565532296896, + 0.4331289604306221, + 0.43599828239530325, + 0.4391225236468017, + 0.442442680709064, + 0.4458935134462081, + 0.4494058610871434, + 0.45290814572945237, + 0.456329170614481, + 0.45959965977817774, + 0.46265468932688236, + 0.4654352702200413, + 0.467890378087759, + 0.4699781332165003, + 0.4716669712215662, + 0.4729366786777973, + 0.47377859614789486, + 0.4741961099207401, + 0.4742039926350117, + 0.47382817789912224, + 0.4731047060340643, + 0.4720784015953541, + 0.47080172970891, + 0.46933270804584026, + 0.4677334036678076, + 0.4660677295178175, + 0.4643996339291334, + 0.46279116719961166, + 0.46130031906068325, + 0.45997961331158876, + 0.45887424051761627, + 0.45802114252001047, + 0.4574474021792412, + 0.45717013999819756, + 0.4571957029402256, + 0.45751963555812836, + 0.4581272527575493, + 0.4589938363060355, + 0.4600859126076102, + 0.4613621709868312, + 0.4627751335501671, + 0.4642725270241499, + 0.46579934284090996, + 0.4672994241118431, + 0.4687173720449209, + 0.4700005315244198, + 0.4711004588752985, + 0.4719748757779598, + 0.472588611766696, + 0.47291504219174385, + 0.47293697111308575, + 0.4726467728614807, + 0.472047196701169, + 0.47115073539316654, + 0.4699795227497816, + 0.4685643073171377, + 0.4669437129050493, + 0.46516266092658043, + 0.4632708840072155, + 0.46132139675319195, + 0.4593684347346425, + 0.4574659438803792, + 0.4556653033941984, + 0.45401386450976133, + 0.4525531576946378, + 0.451317282859236, + 0.4503319738432765, + 0.44961318001151085, + 0.4491667391266674, + 0.4489877375308424, + 0.44906073645688593, + 0.4493598276749253, + 0.44984963117167354, + 0.4504860215820372, + 0.45121741155162454, + 0.4519866299815476, + 0.45273211039602757, + 0.45339047629386187, + 0.45389798376709223, + 0.45419292338192463, + 0.45421766210347414, + 0.45392031967639923, + 0.453256921377033, + 0.45219272654503584, + 0.4507038197480142, + 0.4487778879702091, + 0.4464152832515538, + 0.4436290869489312, + 0.44044513860717416, + 0.4369018077850342, + 0.43304895889014006, + 0.4289471786469221, + 0.4246659278869629, + 0.4202820956707001, + 0.41587806679308414, + 0.41153915598988533, + 0.4073519743978977, + 0.40340153872966766, + 0.3997693359851837, + 0.3965308181941509, + 0.39375369995832443, + 0.3914954997599125, + 0.38980257883667946, + 0.38870837539434433, + 0.3882325142621994, + 0.3883805349469185, + 0.38914313167333603, + 0.390497051179409, + 0.39240512996912, + 0.39481760188937187, + 0.39767346158623695, + 0.4009018614888191, + 0.40442436933517456, + 0.408156830817461, + 0.41201192140579224, + 0.41590123623609543, + 0.4197380617260933, + 0.4234392922371626, + 0.42692795023322105, + 0.4301352743059397, + 0.4330020807683468, + 0.4354809122160077, + 0.4375366484746337, + 0.43914768332615495, + 0.44030609680339694, + 0.4410178321413696, + 0.44130236050114036, + 0.4411916360259056, + 0.4407293079420924, + 0.43996896408498287, + 0.4389727865345776, + 0.4378090240061283, + 0.43655048310756683, + 0.43527186568826437, + 0.4340475294739008, + 0.4329495206475258, + 0.43204500433057547, + 0.43139461148530245, + 0.4310503927990794, + 0.43105446361005306, + 0.43143783416599035, + 0.4322192622348666, + 0.43340509105473757, + 0.4349888525903225, + 0.436951769515872, + 0.4392631221562624, + 0.44188155187293887, + 0.4447560926200822, + 0.44782774802297354, + 0.4510316136293113, + 0.4542982950806618, + 0.4575566379353404, + 0.46073530055582523, + 0.46376524679362774, + 0.4665814973413944, + 0.4691253323107958, + 0.47134572453796864, + 0.4732008259743452, + 0.47465928085148335, + 0.4757008086889982, + 0.47631704434752464, + 0.47651124745607376, + 0.47629839926958084, + 0.4757045079022646, + 0.47476557455956936, + 0.47352671064436436, + 0.47204025462269783, + 0.4703644458204508, + 0.4685613065958023, + 0.4666948802769184, + 0.4648292791098356, + 0.4630264434963465, + 0.4613445792347193, + 0.4598361300304532, + 0.4585465909913182, + 0.4575126366689801, + 0.45676174107939005, + 0.45631087850779295, + 0.45616645459085703, + 0.45632424764335155, + 0.4567694216966629, + 0.45747746154665947, + 0.45841482374817133, + 0.4595403717830777, + 0.4608065253123641, + 0.4621612373739481, + 0.4635494500398636, + 0.46491500176489353, + 0.46620264649391174, + 0.46735961735248566, + 0.4683377258479595, + 0.46909451857209206, + 0.4695949424058199, + 0.46981253288686275, + 0.4697298239916563, + 0.4693395420908928, + 0.46864423528313637, + 0.46765656024217606, + 0.46639852970838547, + 0.4649010933935642, + 0.46320280246436596, + 0.4613485373556614, + 0.45938816480338573, + 0.4573745662346482, + 0.4553621970117092, + 0.4534048056229949, + 0.45155389327555895, + 0.4498568228445947, + 0.44835500698536634, + 0.44708275818265975, + 0.4460656016599387, + 0.4453196337817644, + 0.44485056959092617, + 0.4446536109317094, + 0.44471316022099927, + 0.4450034822220914, + 0.4454890946508385, + 0.4461257698130794, + 0.44686214497778565, + 0.4476407039910555, + 0.4484001910313964, + 0.44907697080634534, + 0.44960736529901624, + 0.4499297612346709, + 0.44998623337596655, + 0.4497251119464636, + 0.4491022424772382, + 0.4480829741805792, + 0.4466432082699612, + 0.4447708396182861, + 0.4424659109208733, + 0.4397415886633098, + 0.43662373162806034, + 0.4331505196169019, + 0.4293719809502363, + 0.42534845136106014, + 0.4211494941264391, + 0.4168518893420696, + 0.4125378578901291, + 0.4082929268479347, + 0.4042034223675728, + 0.40035445243120193, + 0.3968273289501667, + 0.3936976045370102, + 0.3910326845943928, + 0.38889030367136, + 0.38731664046645164, + 0.386344987899065, + 0.38599513471126556, + 0.38627223670482635, + 0.3871672488749027, + 0.3886566124856472, + 0.3907031789422035, + 0.3932572044432163, + 0.396257434040308, + 0.39963310211896896, + 0.4033055789768696, + 0.4071907550096512, + 0.4112010821700096, + 0.4152482636272907, + 0.4192453809082508, + 0.4231092818081379, + 0.42676297202706337, + 0.4301374005153775, + 0.43317359685897827, + 0.43582379166036844, + 0.4380529234185815, + 0.4398391875438392, + 0.4411746375262737, + 0.44206522265449166, + 0.4425301495939493, + 0.4426014351192862, + 0.4423224925994873, + 0.44174706120975316, + 0.44093690859153867, + 0.4399604918435216, + 0.438890409655869, + 0.4378011878579855, + 0.43676730059087276, + 0.43586049787700176, + 0.4351479997858405, + 0.43469023145735264, + 0.4345392705872655, + 0.43473705276846886, + 0.43531449884176254, + 0.4362903628498316, + 0.43767077615484595, + 0.43944930052384734, + 0.44160691811703146, + 0.44411302771186456, + 0.44692599889822304, + 0.44999477500095963, + 0.4532604767009616, + 0.4566577821969986, + 0.46011753287166357, + 0.4635682459920645, + 0.4669386353343725, + 0.4701594337821007, + 0.47316574305295944, + 0.4758986681699753, + 0.4783070310950279, + 0.48034902289509773, + 0.48199303820729256, + 0.483218926936388, + 0.4840180277824402, + 0.4843936264514923, + 0.48436062410473824, + 0.4839448221027851, + 0.4831823520362377, + 0.48211802542209625, + 0.4808042496442795, + 0.47929906100034714, + 0.4776644594967365, + 0.47596449963748455, + 0.47426304034888744, + 0.4726220816373825, + 0.47109960950911045, + 0.4697482269257307, + 0.46861302480101585, + 0.4677309300750494, + 0.4671291094273329, + 0.466824546456337, + 0.46682366728782654, + 0.4671220052987337, + 0.46770479902625084, + 0.4685473460704088, + 0.46961615793406963, + 0.4708698783069849, + 0.47226104885339737, + 0.47373746521770954, + 0.47524395026266575, + 0.47672439739108086, + 0.47812335193157196, + 0.47938820347189903, + 0.4804705008864403, + 0.481327872723341, + 0.4819251634180546, + 0.48223573341965675, + 0.48224233090877533, + 0.4819374047219753, + 0.48132359609007835, + 0.48041336983442307, + 0.4792289324104786, + 0.4778009243309498, + 0.4761679731309414, + 0.4743749778717756, + 0.4724716227501631, + 0.4705109875649214, + 0.46854719892144203, + 0.4666342046111822, + 0.46482336334884167, + 0.4631619770079851, + 0.4616916049271822, + 0.46044632978737354, + 0.45945179741829634, + 0.4587239669635892, + 0.4582686508074403, + 0.4580808822065592, + 0.45814522728323936, + 0.4584358436986804, + 0.4589171474799514, + 0.4595451382920146, + 0.4602681137621403, + 0.4610288795083761, + 0.4617659356445074, + 0.4624157305806875, + 0.4629147034138441, + 0.4632009416818619, + 0.46321685053408146, + 0.4629105255007744, + 0.4622379634529352, + 0.46116437017917633, + 0.4596658395603299, + 0.4577301237732172, + 0.4553573979064822, + 0.45256078243255615, + 0.4493660619482398, + 0.44581164384726435, + 0.44194736634381115, + 0.4378337380476296, + 0.43354022316634655, + 0.429143687710166, + 0.42472646571695805, + 0.4203739408403635, + 0.4161726087331772, + 0.4122074954211712, + 0.4085600674152374, + 0.40530575811862946, + 0.40251222252845764, + 0.4002370573580265, + 0.39852647855877876, + 0.39741402491927147, + 0.39691921696066856, + 0.39704756438732147, + 0.3977898471057415, + 0.3991226926445961, + 0.4010089188814163, + 0.4033988304436207, + 0.4062313213944435, + 0.40943555533885956, + 0.41293308325111866, + 0.41663970053195953, + 0.42046812921762466, + 0.4243299514055252, + 0.42813834734261036, + 0.4318103129044175, + 0.43526877369731665, + 0.43844495015218854, + 0.44127973378635943, + 0.44372557059978135, + 0.4457473545335233, + 0.44732340914197266, + 0.4484459515661001, + 0.44912082608789206, + 0.44936746498569846, + 0.4492178112268448, + 0.4487155945971608, + 0.4479143063072115, + 0.44687609071843326, + 0.4456693675601855, + 0.4443667281011585, + 0.44304298912175, + 0.4417725009843707, + 0.44062724616378546, + 0.4396744132973254, + 0.43897457234561443, + 0.43857991928234696, + 0.43853247724473476, + 0.438863224349916, + 0.4395909486338496, + 0.44072198984213173, + 0.4422498500207439, + 0.4441558140970301, + 0.4464091630652547, + 0.4489684496074915, + 0.4517828291282058, + 0.4547932194545865, + 0.4579347185790539, + 0.46113802678883076, + 0.4643319044262171, + 0.46744501404464245, + 0.47040835581719875, + 0.47315705195069313, + 0.475632231682539, + 0.4777829386293888, + 0.4795673042535782, + 0.48095404356718063, + 0.4819228835403919, + 0.4824654087424278, + 0.4825849160552025, + 0.4822963774204254, + 0.48162586241960526, + 0.48060939460992813, + 0.47929203137755394, + 0.47772616147994995, + 0.4759700298309326, + 0.47408564761281013, + 0.4721371717751026, + 0.4701886307448149, + 0.4683019816875458, + 0.46653554402291775, + 0.4649416822940111, + 0.4635659158229828, + 0.46244502253830433, + 0.4616063516587019, + 0.46106707118451595, + 0.4608335215598345, + 0.4609014708548784, + 0.4612561333924532, + 0.46187301725149155, + 0.46271857246756554, + 0.4637517109513283, + 0.4649249706417322, + 0.46618617326021194, + 0.4674803540110588, + 0.468751335516572, + 0.46994396299123764, + 0.4710054937750101, + 0.47188764810562134, + 0.4725482016801834, + 0.4729519560933113, + 0.47307249903678894, + 0.4728924836963415, + 0.4724045731127262, + 0.4716113768517971, + 0.4705255776643753, + 0.46916921995580196, + 0.4675732795149088, + 0.4657763373106718, + 0.4638232756406069, + 0.4617640804499388, + 0.45965157449245453, + 0.4575402718037367, + 0.4554839516058564, + 0.4535341216251254, + 0.45173822902143, + 0.4501377223059535, + 0.4487668848596513, + 0.4476513038389385, + 0.44680710905231535, + 0.4462400167249143, + 0.4459453201852739, + 0.4459074556361884, + 0.44610066059976816, + 0.44648951618000865, + 0.44702982739545405, + 0.4476702339015901, + 0.4483533427119255, + 0.4490178423002362, + 0.44960015872493386, + 0.4500366491265595, + 0.4502657041884959, + 0.4502295167185366, + 0.449876366648823, + 0.4491621288470924, + 0.448052276391536, + 0.44652265473268926, + 0.4445611606352031, + 0.44216804986353964, + 0.4393563116900623, + 0.4361519571393728, + 0.43259319942444563, + 0.4287300379946828, + 0.42462287470698357, + 0.42034123837947845, + 0.41596209816634655, + 0.411567609757185, + 0.4072433076798916, + 0.40307557582855225, + 0.399149551987648, + 0.3955465517938137, + 0.3923421837389469, + 0.38960398361086845, + 0.38738952577114105, + 0.38574517145752907, + 0.3847041465342045, + 0.3842862881720066, + 0.38449684903025627, + 0.38532667234539986, + 0.3867524042725563, + 0.3887368366122246, + 0.391230221837759, + 0.3941713571548462, + 0.3974895067512989, + 0.4011060371994972, + 0.40493692085146904, + 0.4088946357369423, + 0.41289085149765015, + 0.4168386999517679, + 0.4206550233066082, + 0.4242629110813141, + 0.42759333178400993, + 0.4305872796103358, + 0.4331970326602459, + 0.43538755364716053, + 0.4371370240114629, + 0.4384376099333167, + 0.4392951864283532, + 0.43972898041829467, + 0.4397711134515703, + 0.4394649276509881, + 0.43886417942121625, + 0.438030737452209, + 0.43703295895829797, + 0.4359435420483351, + 0.43483702931553125, + 0.43378784600645304, + 0.43286778312176466, + 0.43214407470077276, + 0.43167712446302176, + 0.43151905108243227, + 0.4317118898034096, + 0.43228641618043184, + 0.43326145596802235, + 0.43464311584830284, + 0.4364250237122178, + 0.43858816754072905, + 0.4411018294049427, + 0.44392459344817325, + 0.44700522627681494, + 0.4502848805859685, + 0.453698324970901, + 0.4571763128042221, + 0.46064736135303974, + 0.46404021233320236, + 0.4672856852412224, + 0.47031873278319836, + 0.47308051586151123, + 0.4755198210477829, + 0.47759491950273514, + 0.47927412018179893, + 0.4805372580885887, + 0.4813757501542568, + 0.48179277032613754, + 0.4818032868206501, + 0.48143309727311134, + 0.4807182513177395, + 0.4797035902738571, + 0.4784415103495121, + 0.4769899956882, + 0.4754111245274544, + 0.47376885265111923, + 0.47212700732052326, + 0.4705476798117161, + 0.469088738784194, + 0.4678027667105198, + 0.4667349327355623, + 0.4659219905734062, + 0.4653912913054228, + 0.46515962295234203, + 0.46523344703018665, + 0.46560826897621155, + 0.46626930870115757, + 0.46719180792570114, + 0.46834233961999416, + 0.46967943757772446, + 0.47115563601255417, + 0.47271870635449886, + 0.4743134155869484, + 0.47588368505239487, + 0.47737403213977814, + 0.47873175144195557, + 0.47990838810801506, + 0.48086148127913475, + 0.4815559908747673, + 0.48196515440940857, + 0.4820716604590416, + 0.4818679355084896, + 0.48135659843683243, + 0.4805500768125057, + 0.47947047650814056, + 0.47814857214689255, + 0.4766227528452873, + 0.4749380238354206, + 0.4731439407914877, + 0.47129354253411293, + 0.46944099850952625, + 0.4676400702446699, + 0.4659422505646944, + 0.46439470909535885, + 0.46303893253207207, + 0.46190898679196835, + 0.461030475795269, + 0.46041927859187126, + 0.46008122339844704, + 0.46001129783689976, + 0.46019395999610424, + 0.46060334891080856, + 0.46120383590459824, + 0.4619513377547264, + 0.4627941995859146, + 0.46367507986724377, + 0.4645324628800154, + 0.46530274488031864, + 0.4659222885966301, + 0.4663292206823826, + 0.4664657972753048, + 0.4662800692021847, + 0.46572806872427464, + 0.464774863794446, + 0.4633965492248535, + 0.4615807384252548, + 0.4593276120722294, + 0.4566502692177892, + 0.4535744395107031, + 0.4501384189352393, + 0.4463920178823173, + 0.4423956939281197, + 0.4382188254967332, + 0.43393831606954336, + 0.42963635455816984, + 0.425398301333189, + 0.4213105943053961, + 0.41745817847549915, + 0.4139225222170353, + 0.4107790067791939, + 0.4080951139330864, + 0.4059285968542099, + 0.4043254293501377, + 0.4033191315829754, + 0.40292925760149956, + 0.40316117182374, + 0.40400560200214386, + 0.4054391533136368, + 0.4074246734380722, + 0.40991226956248283, + 0.41284083761274815, + 0.4161394592374563, + 0.4197296928614378, + 0.4235272817313671, + 0.42744480166584253, + 0.43139390274882317, + 0.4352875966578722, + 0.4390429158229381, + 0.4425827318918891, + 0.4458381556905806, + 0.44875005912035704, + 0.45127077493816614, + 0.45336529798805714, + 0.45501181297004223, + 0.45620245672762394, + 0.4569430258125067, + 0.45725299417972565, + 0.4571641655638814, + 0.45672022365033627, + 0.4559747017920017, + 0.45498957857489586, + 0.4538333183154464, + 0.4525784645229578, + 0.45129973348230124, + 0.4500714587047696, + 0.4489655802026391, + 0.44804921420291066, + 0.4473829776979983, + 0.4470189353451133, + 0.4469991005025804, + 0.4473544112406671, + 0.4481035857461393, + 0.4492529835551977, + 0.45079607237130404, + 0.4527140371501446, + 0.4549761535599828, + 0.4575409386307001, + 0.4603574834764004, + 0.463366761803627, + 0.4665037486702204, + 0.46969911083579063, + 0.4728816691786051, + 0.4759799689054489, + 0.4789250046014786, + 0.4816518649458885, + 0.48410163819789886, + 0.48622341826558113, + 0.48797522485256195, + 0.48932577297091484, + 0.4902547709643841, + 0.4907537214457989, + 0.4908260479569435, + 0.49048660323023796, + 0.48976142331957817, + 0.48868652805685997, + 0.48730695992708206, + 0.48567506670951843, + 0.48384910449385643, + 0.4818911552429199, + 0.4798652157187462, + 0.47783536091446877, + 0.4758635386824608, + 0.4740080274641514, + 0.47232126630842686, + 0.4708486218005419, + 0.4696270748972893, + 0.4686837811022997, + 0.46803597547113895, + 0.46768998354673386, + 0.4676415752619505, + 0.46787593699991703, + 0.4683685973286629, + 0.4690861012786627, + 0.46998721547424793, + 0.4710245355963707, + 0.47214585915207863, + 0.47329628840088844, + 0.47441965341567993, + 0.475460734218359, + 0.4763668440282345, + 0.47708970308303833, + 0.4775870740413666, + 0.4778238534927368, + 0.477773554623127, + 0.477418877184391, + 0.47675249725580215, + 0.4757770150899887, + 0.47450515627861023, + 0.4729590769857168, + 0.4711695909500122, + 0.46917545050382614, + 0.46702147647738457, + 0.4647576715797186, + 0.4624369740486145, + 0.4601138364523649, + 0.45784206315875053, + 0.4556732811033726, + 0.45365487691015005, + 0.45182835776358843, + 0.45022804010659456, + 0.4488795129582286, + 0.4477989999577403, + 0.4469922515563667, + 0.44645450869575143, + 0.44617036264389753, + 0.4461139705963433, + 0.4462500410154462, + 0.446534420363605, + 0.4469157294370234, + 0.4473366471938789, + 0.44773584557697177, + 0.44804994482547045, + 0.4482152573764324, + 0.4481701888144016, + 0.4478569831699133, + 0.4472240540198982, + 0.4462272389791906, + 0.4448320297524333, + 0.4430145032238215, + 0.4407623978331685, + 0.4380761431530118, + 0.43496878165751696, + 0.43146631959825754, + 0.4276070548221469, + 0.42344104684889317, + 0.4190287198871374, + 0.4144397545605898, + 0.4097510874271393, + 0.40504496544599533, + 0.40040698647499084, + 0.39592355862259865, + 0.39167994260787964, + 0.3877575248479843, + 0.38423188403248787, + 0.38117072731256485, + 0.378631629049778, + 0.3766610026359558, + 0.37529222667217255, + 0.374545119702816, + 0.3744250014424324, + 0.3749229460954666, + 0.3760153725743294, + 0.37766537070274353, + 0.3798231966793537, + 0.3824276961386204, + 0.38540828227996826, + 0.38868631422519684, + 0.39217785745859146, + 0.39579547196626663, + 0.3994508571922779, + 0.4030572883784771, + 0.4065316878259182, + 0.40979714691638947, + 0.4127847384661436, + 0.415435541421175, + 0.41770187206566334, + 0.4195488002151251, + 0.42095467261970043, + 0.4219115525484085, + 0.42242554016411304, + 0.4225158505141735, + 0.4222146812826395, + 0.42156554013490677, + 0.42062211222946644, + 0.41944655403494835, + 0.41810711845755577, + 0.4166766405105591, + 0.4152297414839268, + 0.41384092159569263, + 0.4125820230692625, + 0.4115203879773617, + 0.4107165839523077, + 0.41022265888750553, + 0.41008078679442406, + 0.41032178699970245, + 0.4109646249562502, + 0.4120154846459627, + 0.4134680088609457, + 0.41530329547822475, + 0.4174907021224499, + 0.4199888575822115, + 0.4227466955780983, + 0.42570535466074944, + 0.42879971116781235, + 0.43196059111505747, + 0.4351165876723826, + 0.43819651822559536, + 0.4411312746742624, + 0.44385585538111627, + 0.4463115828111768, + 0.44844723027199507, + 0.4502211371436715, + 0.45160177536308765, + 0.4525689957663417, + 0.45311419665813446, + 0.4532407931983471, + 0.4529637135565281, + 0.45230884943157434, + 0.45131232496351004, + 0.4500190168619156, + 0.4484814442694187, + 0.44675766583532095, + 0.4449097665492445, + 0.44300179032143205, + 0.4410976397830382, + 0.4392594286473468, + 0.43754518823698163, + 0.43600747268646955, + 0.4346915385685861, + 0.4336342057213187, + 0.4328628536313772, + 0.4323944207280874, + 0.4322353368625045, + 0.4323811670765281, + 0.4328172756358981, + 0.4335188725963235, + 0.4344525574706495, + 0.4355770917609334, + 0.43684486113488674, + 0.4382038055919111, + 0.4395987447351217, + 0.44097358987619373, + 0.4422729373909533, + 0.4434440708719194, + 0.4444387322291732, + 0.44521442148834467, + 0.4457361111417413, + 0.4459771094843745, + 0.44592015026137233, + 0.44555767718702555, + 0.4448923757299781, + 0.4439367998857051, + 0.4427129209507257, + 0.44125170091865584, + 0.4395914712222293, + 0.4377772780135274, + 0.43585879262536764, + 0.43388894526287913, + 0.43192211259156466, + 0.43001200165599585, + 0.42821010015904903, + 0.4265636336058378, + 0.4251141231507063, + 0.4238956291228533, + 0.4229338336735964, + 0.42224464751780033, + 0.4218338243663311, + 0.4216964952647686, + 0.42181701585650444, + 0.4221696387976408, + 0.4227187465876341, + 0.4234202168881893, + 0.42422243393957615, + 0.42506801523268223, + 0.4258956043049693, + 0.4266415173187852, + 0.4272420974448323, + 0.42763547599315643, + 0.4277640115469694, + 0.4275756664574146, + 0.4270264795050025, + 0.4260816089808941, + 0.42471700347959995, + 0.42292045801877975, + 0.42069205828011036, + 0.4180448744446039, + 0.41500466130673885, + 0.4116097055375576, + 0.4079097881913185, + 0.40396539121866226, + 0.3998459652066231, + 0.39562825858592987, + 0.3913945108652115, + 0.387230034917593, + 0.3832213170826435, + 0.37945328280329704, + 0.3760072812438011, + 0.37295886874198914, + 0.3703753277659416, + 0.3683144226670265, + 0.3668222054839134, + 0.36593207716941833, + 0.3656635731458664, + 0.3660220578312874, + 0.3669983074069023, + 0.3685687780380249, + 0.3706963360309601, + 0.3733310252428055, + 0.3764118030667305, + 0.37986763939261436, + 0.3836200647056103, + 0.3875848054885864, + 0.39167437329888344, + 0.3958004340529442, + 0.3998759612441063, + 0.40381789207458496, + 0.40754909068346024, + 0.41100061871111393, + 0.4141132812947035, + 0.4168394561856985, + 0.41914400458335876, + 0.4210050627589226, + 0.4224148169159889, + 0.42337892204523087, + 0.4239168018102646, + 0.42406030371785164, + 0.42385297268629074, + 0.42334831692278385, + 0.42260826379060745, + 0.42170122638344765, + 0.4206996913999319, + 0.419678321108222, + 0.4187113642692566, + 0.41787079349160194, + 0.41722357645630836, + 0.4168303031474352, + 0.41674297861754894, + 0.4170035272836685, + 0.4176428858190775, + 0.4186797086149454, + 0.42012023739516735, + 0.42195790261030197, + 0.4241737686097622, + 0.4267371967434883, + 0.42960654851049185, + 0.4327308195643127, + 0.4360509468242526, + 0.43950183916604146, + 0.44301409740000963, + 0.44651641184464097, + 0.44993743672966957, + 0.45320789609104395, + 0.45626295544207096, + 0.4590435363352299, + 0.46149867400527, + 0.4635863993316889, + 0.4652752075344324, + 0.46654491499066353, + 0.46738686226308346, + 0.4678043760359287, + 0.46781225875020027, + 0.4674364738166332, + 0.4667129423469305, + 0.4667129423469305, +]; + +criterion_group!(benches, fit, predict); +criterion_main!(benches); diff --git a/crates/augurs-prophet/benches/prophet-wasmstan-logistic.rs b/crates/augurs-prophet/benches/prophet-wasmstan-logistic.rs new file mode 100644 index 0000000..ff98822 --- /dev/null +++ b/crates/augurs-prophet/benches/prophet-wasmstan-logistic.rs @@ -0,0 +1,2118 @@ +#![allow(missing_docs)] + +use augurs_prophet::{ + optimizer::OptimizeOpts, wasmstan::WasmstanOptimizer, GrowthType, PredictionData, Prophet, + ProphetOptions, SeasonalityOption, TimestampSeconds, TrainingData, +}; +use augurs_testing::assert_all_close; +use criterion::{criterion_group, criterion_main, BatchSize, Criterion}; + +fn fit(c: &mut Criterion) { + tracing_subscriber::fmt::init(); + let opts = ProphetOptions { + growth: GrowthType::Logistic, + yearly_seasonality: SeasonalityOption::Manual(false), + interval_width: 0.8.try_into().unwrap(), + uncertainty_samples: 500, + ..Default::default() + }; + let model = Prophet::new(opts, WasmstanOptimizer::new().unwrap()); + let training_data = TrainingData::new(TRAINING_DS.to_vec(), TRAINING_Y.to_vec()).unwrap(); + c.bench_function("fit", |b| { + b.iter_batched( + || (model.clone(), training_data.clone()), + |(mut model, training_data)| { + model.fit( + training_data, + OptimizeOpts { + seed: Some(100), + ..Default::default() + }, + ) + }, + BatchSize::SmallInput, + ); + }); +} + +fn predict(c: &mut Criterion) { + let opts = ProphetOptions { + yearly_seasonality: SeasonalityOption::Manual(false), + interval_width: 0.8.try_into().unwrap(), + uncertainty_samples: 500, + ..Default::default() + }; + let mut model = Prophet::new(opts, WasmstanOptimizer::new().unwrap()); + let training_data = TrainingData::new(TRAINING_DS.to_vec(), TRAINING_Y.to_vec()).unwrap(); + model + .fit( + training_data, + OptimizeOpts { + seed: Some(100), + ..Default::default() + }, + ) + .unwrap(); + + let prediction_data = PredictionData::new(PREDICTION_DS.to_vec()); + c.bench_function("predict", |b| { + b.iter_batched( + || prediction_data.clone(), + |pd| { + model.predict(Some(pd)).unwrap(); + }, + BatchSize::SmallInput, + ); + }); + let predictions = model.predict(Some(prediction_data)).unwrap(); + assert_all_close(&predictions.yhat.point, EXPECTED); +} + +static TRAINING_DS: &[TimestampSeconds] = &[ + 1727168400, 1727169600, 1727170800, 1727172000, 1727173200, 1727174400, 1727175600, 1727176800, + 1727178000, 1727179200, 1727180400, 1727181600, 1727182800, 1727184000, 1727185200, 1727186400, + 1727187600, 1727188800, 1727190000, 1727191200, 1727192400, 1727193600, 1727194800, 1727196000, + 1727197200, 1727198400, 1727199600, 1727200800, 1727202000, 1727203200, 1727204400, 1727205600, + 1727206800, 1727208000, 1727209200, 1727210400, 1727211600, 1727212800, 1727214000, 1727215200, + 1727216400, 1727217600, 1727218800, 1727220000, 1727221200, 1727222400, 1727223600, 1727224800, + 1727226000, 1727227200, 1727228400, 1727229600, 1727230800, 1727232000, 1727233200, 1727234400, + 1727235600, 1727236800, 1727238000, 1727239200, 1727240400, 1727241600, 1727242800, 1727244000, + 1727245200, 1727246400, 1727247600, 1727248800, 1727250000, 1727251200, 1727252400, 1727253600, + 1727254800, 1727256000, 1727257200, 1727258400, 1727259600, 1727260800, 1727262000, 1727263200, + 1727264400, 1727265600, 1727266800, 1727268000, 1727269200, 1727270400, 1727271600, 1727272800, + 1727274000, 1727275200, 1727276400, 1727277600, 1727278800, 1727280000, 1727281200, 1727282400, + 1727283600, 1727284800, 1727286000, 1727287200, 1727288400, 1727289600, 1727290800, 1727292000, + 1727293200, 1727294400, 1727295600, 1727296800, 1727298000, 1727299200, 1727300400, 1727301600, + 1727302800, 1727304000, 1727305200, 1727306400, 1727307600, 1727308800, 1727310000, 1727311200, + 1727312400, 1727313600, 1727314800, 1727316000, 1727317200, 1727318400, 1727319600, 1727320800, + 1727322000, 1727323200, 1727324400, 1727325600, 1727326800, 1727328000, 1727329200, 1727330400, + 1727331600, 1727332800, 1727334000, 1727335200, 1727336400, 1727337600, 1727338800, 1727340000, + 1727341200, 1727342400, 1727343600, 1727344800, 1727346000, 1727347200, 1727348400, 1727349600, + 1727350800, 1727352000, 1727353200, 1727354400, 1727355600, 1727356800, 1727358000, 1727359200, + 1727360400, 1727361600, 1727362800, 1727364000, 1727365200, 1727366400, 1727367600, 1727368800, + 1727370000, 1727371200, 1727372400, 1727373600, 1727374800, 1727376000, 1727377200, 1727378400, + 1727379600, 1727380800, 1727382000, 1727383200, 1727384400, 1727385600, 1727386800, 1727388000, + 1727389200, 1727390400, 1727391600, 1727392800, 1727394000, 1727395200, 1727396400, 1727397600, + 1727398800, 1727400000, 1727401200, 1727402400, 1727403600, 1727404800, 1727406000, 1727407200, + 1727408400, 1727409600, 1727410800, 1727412000, 1727413200, 1727414400, 1727415600, 1727416800, + 1727418000, 1727419200, 1727420400, 1727421600, 1727422800, 1727424000, 1727425200, 1727426400, + 1727427600, 1727428800, 1727430000, 1727431200, 1727432400, 1727433600, 1727434800, 1727436000, + 1727437200, 1727438400, 1727439600, 1727440800, 1727442000, 1727443200, 1727444400, 1727445600, + 1727446800, 1727448000, 1727449200, 1727450400, 1727451600, 1727452800, 1727454000, 1727455200, + 1727456400, 1727457600, 1727458800, 1727460000, 1727461200, 1727462400, 1727463600, 1727464800, + 1727466000, 1727467200, 1727468400, 1727469600, 1727470800, 1727472000, 1727473200, 1727474400, + 1727475600, 1727476800, 1727478000, 1727479200, 1727480400, 1727481600, 1727482800, 1727484000, + 1727485200, 1727486400, 1727487600, 1727488800, 1727490000, 1727491200, 1727492400, 1727493600, + 1727494800, 1727496000, 1727497200, 1727498400, 1727499600, 1727500800, 1727502000, 1727503200, + 1727504400, 1727505600, 1727506800, 1727508000, 1727509200, 1727510400, 1727511600, 1727512800, + 1727514000, 1727515200, 1727516400, 1727517600, 1727518800, 1727520000, 1727521200, 1727522400, + 1727523600, 1727524800, 1727526000, 1727527200, 1727528400, 1727529600, 1727530800, 1727532000, + 1727533200, 1727534400, 1727535600, 1727536800, 1727538000, 1727539200, 1727540400, 1727541600, + 1727542800, 1727544000, 1727545200, 1727546400, 1727547600, 1727548800, 1727550000, 1727551200, + 1727552400, 1727553600, 1727554800, 1727556000, 1727557200, 1727558400, 1727559600, 1727560800, + 1727562000, 1727563200, 1727564400, 1727565600, 1727566800, 1727568000, 1727569200, 1727570400, + 1727571600, 1727572800, 1727574000, 1727575200, 1727576400, 1727577600, 1727578800, 1727580000, + 1727581200, 1727582400, 1727583600, 1727584800, 1727586000, 1727587200, 1727588400, 1727589600, + 1727590800, 1727592000, 1727593200, 1727594400, 1727595600, 1727596800, 1727598000, 1727599200, + 1727600400, 1727601600, 1727602800, 1727604000, 1727605200, 1727606400, 1727607600, 1727608800, + 1727610000, 1727611200, 1727612400, 1727613600, 1727614800, 1727616000, 1727617200, 1727618400, + 1727619600, 1727620800, 1727622000, 1727623200, 1727624400, 1727625600, 1727626800, 1727628000, + 1727629200, 1727630400, 1727631600, 1727632800, 1727634000, 1727635200, 1727636400, 1727637600, + 1727638800, 1727640000, 1727641200, 1727642400, 1727643600, 1727644800, 1727646000, 1727647200, + 1727648400, 1727649600, 1727650800, 1727652000, 1727653200, 1727654400, 1727655600, 1727656800, + 1727658000, 1727659200, 1727660400, 1727661600, 1727662800, 1727664000, 1727665200, 1727666400, + 1727667600, 1727668800, 1727670000, 1727671200, 1727672400, 1727673600, 1727674800, 1727676000, + 1727677200, 1727678400, 1727679600, 1727680800, 1727682000, 1727683200, 1727684400, 1727685600, + 1727686800, 1727688000, 1727689200, 1727690400, 1727691600, 1727692800, 1727694000, 1727695200, + 1727696400, 1727697600, 1727698800, 1727700000, 1727701200, 1727702400, 1727703600, 1727704800, + 1727706000, 1727707200, 1727708400, 1727709600, 1727710800, 1727712000, 1727713200, 1727714400, + 1727715600, 1727716800, 1727718000, 1727719200, 1727720400, 1727721600, 1727722800, 1727724000, + 1727725200, 1727726400, 1727727600, 1727728800, 1727730000, 1727731200, 1727732400, 1727733600, + 1727734800, 1727736000, 1727737200, 1727738400, 1727739600, 1727740800, 1727742000, 1727743200, + 1727744400, 1727745600, 1727746800, 1727748000, 1727749200, 1727750400, 1727751600, 1727752800, + 1727754000, 1727755200, 1727756400, 1727757600, 1727758800, 1727760000, 1727761200, 1727762400, + 1727763600, 1727764800, 1727766000, 1727767200, 1727768400, 1727769600, 1727770800, 1727772000, + 1727773200, 1727774400, 1727775600, 1727776800, 1727778000, 1727779200, 1727780400, 1727781600, + 1727782800, 1727784000, 1727785200, 1727786400, 1727787600, 1727788800, 1727790000, 1727791200, + 1727792400, 1727793600, 1727794800, 1727796000, 1727797200, 1727798400, 1727799600, 1727800800, + 1727802000, 1727803200, 1727804400, 1727805600, 1727806800, 1727808000, 1727809200, 1727810400, + 1727811600, 1727812800, 1727814000, 1727815200, 1727816400, 1727817600, 1727818800, 1727820000, + 1727821200, 1727822400, 1727823600, 1727824800, 1727826000, 1727827200, 1727828400, 1727829600, + 1727830800, 1727832000, 1727833200, 1727834400, 1727835600, 1727836800, 1727838000, 1727839200, + 1727840400, 1727841600, 1727842800, 1727844000, 1727845200, 1727846400, 1727847600, 1727848800, + 1727850000, 1727851200, 1727852400, 1727853600, 1727854800, 1727856000, 1727857200, 1727858400, + 1727859600, 1727860800, 1727862000, 1727863200, 1727864400, 1727865600, 1727866800, 1727868000, + 1727869200, 1727870400, 1727871600, 1727872800, 1727874000, 1727875200, 1727876400, 1727877600, + 1727878800, 1727880000, 1727881200, 1727882400, 1727883600, 1727884800, 1727886000, 1727887200, + 1727888400, 1727889600, 1727890800, 1727892000, 1727893200, 1727894400, 1727895600, 1727896800, + 1727898000, 1727899200, 1727900400, 1727901600, 1727902800, 1727904000, 1727905200, 1727906400, + 1727907600, 1727908800, 1727910000, 1727911200, 1727912400, 1727913600, 1727914800, 1727916000, + 1727917200, 1727918400, 1727919600, 1727920800, 1727922000, 1727923200, 1727924400, 1727925600, + 1727926800, 1727928000, 1727929200, 1727930400, 1727931600, 1727932800, 1727934000, 1727935200, + 1727936400, 1727937600, 1727938800, 1727940000, 1727941200, 1727942400, 1727943600, 1727944800, + 1727946000, 1727947200, 1727948400, 1727949600, 1727950800, 1727952000, 1727953200, 1727954400, + 1727955600, 1727956800, 1727958000, 1727959200, 1727960400, 1727961600, 1727962800, 1727964000, + 1727965200, 1727966400, 1727967600, 1727968800, 1727970000, 1727971200, 1727972400, 1727973600, + 1727974800, 1727976000, 1727977200, 1727978400, 1727979600, 1727980800, 1727982000, 1727983200, + 1727984400, 1727985600, 1727986800, 1727988000, 1727989200, 1727990400, 1727991600, 1727992800, + 1727994000, 1727995200, 1727996400, 1727997600, 1727998800, 1728000000, 1728001200, 1728002400, + 1728003600, 1728004800, 1728006000, 1728007200, 1728008400, 1728009600, 1728010800, 1728012000, + 1728013200, 1728014400, 1728015600, 1728016800, 1728018000, 1728019200, 1728020400, 1728021600, + 1728022800, 1728024000, 1728025200, 1728026400, 1728027600, 1728028800, 1728030000, 1728031200, + 1728032400, 1728033600, 1728034800, 1728036000, 1728037200, 1728038400, 1728039600, 1728040800, + 1728042000, 1728043200, 1728044400, 1728045600, 1728046800, 1728048000, 1728049200, 1728050400, + 1728051600, 1728052800, 1728054000, 1728055200, 1728056400, 1728057600, 1728058800, 1728060000, + 1728061200, 1728062400, 1728063600, 1728064800, 1728066000, 1728067200, 1728068400, 1728069600, + 1728070800, 1728072000, 1728073200, 1728074400, 1728075600, 1728076800, 1728078000, 1728079200, + 1728080400, 1728081600, 1728082800, 1728084000, 1728085200, 1728086400, 1728087600, 1728088800, + 1728090000, 1728091200, 1728092400, 1728093600, 1728094800, 1728096000, 1728097200, 1728098400, + 1728099600, 1728100800, 1728102000, 1728103200, 1728104400, 1728105600, 1728106800, 1728108000, + 1728109200, 1728110400, 1728111600, 1728112800, 1728114000, 1728115200, 1728116400, 1728117600, + 1728118800, 1728120000, 1728121200, 1728122400, 1728123600, 1728124800, 1728126000, 1728127200, + 1728128400, 1728129600, 1728130800, 1728132000, 1728133200, 1728134400, 1728135600, 1728136800, + 1728138000, 1728139200, 1728140400, 1728141600, 1728142800, 1728144000, 1728145200, 1728146400, + 1728147600, 1728148800, 1728150000, 1728151200, 1728152400, 1728153600, 1728154800, 1728156000, + 1728157200, 1728158400, 1728159600, 1728160800, 1728162000, 1728163200, 1728164400, 1728165600, + 1728166800, 1728168000, 1728169200, 1728170400, 1728171600, 1728172800, 1728174000, 1728175200, + 1728176400, 1728177600, 1728178800, 1728180000, 1728181200, 1728182400, 1728183600, 1728184800, + 1728186000, 1728187200, 1728188400, 1728189600, 1728190800, 1728192000, 1728193200, 1728194400, + 1728195600, 1728196800, 1728198000, 1728199200, 1728200400, 1728201600, 1728202800, 1728204000, + 1728205200, 1728206400, 1728207600, 1728208800, 1728210000, 1728211200, 1728212400, 1728213600, + 1728214800, 1728216000, 1728217200, 1728218400, 1728219600, 1728220800, 1728222000, 1728223200, + 1728224400, 1728225600, 1728226800, 1728228000, 1728229200, 1728230400, 1728231600, 1728232800, + 1728234000, 1728235200, 1728236400, 1728237600, 1728238800, 1728240000, 1728241200, 1728242400, + 1728243600, 1728244800, 1728246000, 1728247200, 1728248400, 1728249600, 1728250800, 1728252000, + 1728253200, 1728254400, 1728255600, 1728256800, 1728258000, 1728259200, 1728260400, 1728261600, + 1728262800, 1728264000, 1728265200, 1728266400, 1728267600, 1728268800, 1728270000, 1728271200, + 1728272400, 1728273600, 1728274800, 1728276000, 1728277200, 1728278400, 1728279600, 1728280800, + 1728282000, 1728283200, 1728284400, 1728285600, 1728286800, 1728288000, 1728289200, 1728290400, + 1728291600, 1728292800, 1728294000, 1728295200, 1728296400, 1728297600, 1728298800, 1728300000, + 1728301200, 1728302400, 1728303600, 1728304800, 1728306000, 1728307200, 1728308400, 1728309600, + 1728310800, 1728312000, 1728313200, 1728314400, 1728315600, 1728316800, 1728318000, 1728319200, + 1728320400, 1728321600, 1728322800, 1728324000, 1728325200, 1728326400, 1728327600, 1728328800, + 1728330000, 1728331200, 1728332400, 1728333600, 1728334800, 1728336000, 1728337200, 1728338400, + 1728339600, 1728340800, 1728342000, 1728343200, 1728344400, 1728345600, 1728346800, 1728348000, + 1728349200, 1728350400, 1728351600, 1728352800, 1728354000, 1728355200, 1728356400, 1728357600, + 1728358800, 1728360000, 1728361200, 1728362400, 1728363600, 1728364800, 1728366000, 1728367200, + 1728368400, 1728369600, 1728370800, 1728372000, 1728373200, 1728374400, 1728375600, 1728376800, + 1728378000, 1728379200, 1728380400, 1728381600, 1728382800, 1728384000, 1728385200, 1728386400, + 1728387600, 1728388800, 1728390000, 1728391200, 1728392400, 1728393600, 1728394800, 1728396000, + 1728397200, 1728398400, 1728399600, 1728400800, 1728402000, 1728403200, 1728404400, 1728405600, + 1728406800, 1728408000, 1728409200, 1728410400, 1728411600, 1728412800, 1728414000, 1728415200, + 1728416400, 1728417600, 1728418800, 1728420000, 1728421200, 1728422400, 1728423600, 1728424800, + 1728426000, 1728427200, 1728428400, 1728429600, 1728430800, 1728432000, 1728433200, 1728434400, + 1728435600, 1728436800, 1728438000, 1728439200, 1728440400, 1728441600, 1728442800, 1728444000, + 1728445200, 1728446400, 1728447600, 1728448800, 1728450000, 1728451200, 1728452400, 1728453600, + 1728454800, 1728456000, 1728457200, 1728458400, 1728459600, 1728460800, 1728462000, 1728463200, + 1728464400, 1728465600, 1728466800, 1728468000, 1728469200, 1728470400, 1728471600, 1728472800, + 1728474000, 1728475200, 1728476400, 1728477600, 1728478800, 1728480000, 1728481200, 1728482400, + 1728483600, 1728484800, 1728486000, 1728487200, 1728488400, 1728489600, 1728490800, 1728492000, + 1728493200, 1728494400, 1728495600, 1728496800, 1728498000, 1728499200, 1728500400, 1728501600, + 1728502800, 1728504000, 1728505200, 1728506400, 1728507600, 1728508800, 1728510000, 1728511200, + 1728512400, 1728513600, 1728514800, 1728516000, 1728517200, 1728518400, 1728519600, 1728520800, + 1728522000, 1728523200, 1728524400, 1728525600, 1728526800, 1728528000, 1728529200, 1728530400, + 1728531600, 1728532800, 1728534000, 1728535200, 1728536400, 1728537600, 1728538800, 1728540000, + 1728541200, 1728542400, 1728543600, 1728544800, 1728546000, 1728547200, 1728548400, 1728549600, + 1728550800, 1728552000, 1728553200, 1728554400, 1728555600, 1728556800, 1728558000, 1728559200, + 1728560400, 1728561600, 1728562800, 1728564000, 1728565200, 1728566400, 1728567600, 1728568800, + 1728570000, 1728571200, 1728572400, 1728573600, 1728574800, 1728576000, 1728577200, 1728578400, + 1728579600, 1728580800, 1728582000, 1728583200, 1728584400, 1728585600, 1728586800, 1728588000, + 1728589200, 1728590400, 1728591600, 1728592800, 1728594000, 1728595200, 1728596400, 1728597600, + 1728598800, 1728600000, 1728601200, 1728602400, 1728603600, 1728604800, 1728606000, 1728607200, + 1728608400, 1728609600, 1728610800, 1728612000, 1728613200, 1728614400, 1728615600, 1728616800, + 1728618000, 1728619200, 1728620400, 1728621600, 1728622800, 1728624000, 1728625200, 1728626400, + 1728627600, 1728628800, 1728630000, 1728631200, 1728632400, 1728633600, 1728634800, 1728636000, + 1728637200, 1728638400, 1728639600, 1728640800, 1728642000, 1728643200, 1728644400, 1728645600, + 1728646800, 1728648000, 1728649200, 1728650400, 1728651600, 1728652800, 1728654000, 1728655200, + 1728656400, 1728657600, 1728658800, 1728660000, 1728661200, 1728662400, 1728663600, 1728664800, + 1728666000, 1728667200, 1728668400, 1728669600, 1728670800, 1728672000, 1728673200, 1728674400, + 1728675600, 1728676800, 1728678000, 1728679200, 1728680400, 1728681600, 1728682800, 1728684000, + 1728685200, 1728686400, 1728687600, 1728688800, 1728690000, 1728691200, 1728692400, 1728693600, + 1728694800, 1728696000, 1728697200, 1728698400, 1728699600, 1728700800, 1728702000, 1728703200, + 1728704400, 1728705600, 1728706800, 1728708000, 1728709200, 1728710400, 1728711600, 1728712800, + 1728714000, 1728715200, 1728716400, 1728717600, 1728718800, 1728720000, 1728721200, 1728722400, + 1728723600, 1728724800, 1728726000, 1728727200, 1728728400, 1728729600, 1728730800, 1728732000, + 1728733200, 1728734400, 1728735600, 1728736800, 1728738000, 1728739200, 1728740400, 1728741600, + 1728742800, 1728744000, 1728745200, 1728746400, 1728747600, 1728748800, 1728750000, 1728751200, + 1728752400, 1728753600, 1728754800, 1728756000, 1728757200, 1728758400, 1728759600, 1728760800, + 1728762000, 1728763200, 1728764400, 1728765600, 1728766800, 1728768000, 1728769200, 1728770400, + 1728771600, 1728772800, 1728774000, 1728775200, 1728776400, 1728777600, 1728778800, 1728780000, + 1728781200, 1728782400, 1728783600, 1728784800, 1728786000, 1728787200, 1728788400, 1728789600, + 1728790800, 1728792000, 1728793200, 1728794400, 1728795600, 1728796800, 1728798000, 1728799200, + 1728800400, 1728801600, 1728802800, 1728804000, 1728805200, 1728806400, 1728807600, 1728808800, + 1728810000, 1728811200, 1728812400, 1728813600, 1728814800, 1728816000, 1728817200, 1728818400, + 1728819600, 1728820800, 1728822000, 1728823200, 1728824400, 1728825600, 1728826800, 1728828000, + 1728829200, 1728830400, 1728831600, 1728832800, 1728834000, 1728835200, 1728836400, 1728837600, + 1728838800, 1728840000, 1728841200, 1728842400, 1728843600, 1728844800, 1728846000, 1728847200, + 1728848400, 1728849600, 1728850800, 1728852000, 1728853200, 1728854400, 1728855600, 1728856800, + 1728858000, 1728859200, 1728860400, 1728861600, 1728862800, 1728864000, 1728865200, 1728866400, + 1728867600, 1728868800, 1728870000, 1728871200, 1728872400, 1728873600, 1728874800, 1728876000, + 1728877200, 1728878400, 1728879600, 1728880800, 1728882000, 1728883200, 1728884400, 1728885600, + 1728886800, 1728888000, 1728889200, 1728890400, 1728891600, 1728892800, 1728894000, 1728895200, + 1728896400, 1728897600, 1728898800, 1728900000, 1728901200, 1728902400, 1728903600, 1728904800, + 1728906000, 1728907200, 1728908400, 1728909600, 1728910800, 1728912000, 1728913200, 1728914400, + 1728915600, 1728916800, 1728918000, 1728919200, 1728920400, 1728921600, 1728922800, 1728924000, + 1728925200, 1728926400, 1728927600, 1728928800, 1728930000, 1728931200, 1728932400, 1728933600, + 1728934800, 1728936000, 1728937200, 1728938400, 1728939600, 1728940800, 1728942000, 1728943200, + 1728944400, 1728945600, 1728946800, 1728948000, 1728949200, 1728950400, 1728951600, 1728952800, + 1728954000, 1728955200, 1728956400, 1728957600, 1728958800, 1728960000, 1728961200, 1728962400, + 1728963600, 1728964800, 1728966000, 1728967200, 1728968400, 1728969600, 1728970800, 1728972000, + 1728973200, 1728974400, 1728975600, 1728976800, 1728978000, 1728979200, 1728980400, 1728981600, + 1728982800, 1728984000, 1728985200, 1728986400, 1728987600, 1728988800, 1728990000, 1728991200, + 1728992400, 1728993600, 1728994800, 1728996000, 1728997200, 1728998400, 1728999600, 1729000800, + 1729002000, 1729003200, 1729004400, 1729005600, 1729006800, 1729008000, 1729009200, 1729010400, + 1729011600, 1729012800, 1729014000, 1729015200, 1729016400, 1729017600, 1729018800, 1729020000, + 1729021200, 1729022400, 1729023600, 1729024800, 1729026000, 1729027200, 1729028400, 1729029600, + 1729030800, 1729032000, 1729033200, 1729034400, 1729035600, 1729036800, 1729038000, 1729039200, + 1729040400, 1729041600, 1729042800, 1729044000, 1729045200, 1729046400, 1729047600, 1729048800, + 1729050000, 1729051200, 1729052400, 1729053600, 1729054800, 1729056000, 1729057200, 1729058400, + 1729059600, 1729060800, 1729062000, 1729063200, 1729064400, 1729065600, 1729066800, 1729068000, + 1729069200, 1729070400, 1729071600, 1729072800, 1729074000, 1729075200, 1729076400, 1729077600, + 1729078800, 1729080000, 1729081200, 1729082400, 1729083600, 1729084800, 1729086000, 1729087200, + 1729088400, 1729089600, 1729090800, 1729092000, 1729093200, 1729094400, 1729095600, 1729096800, + 1729098000, 1729099200, 1729100400, 1729101600, 1729102800, 1729104000, 1729105200, 1729106400, + 1729107600, 1729108800, 1729110000, 1729111200, 1729112400, 1729113600, 1729114800, 1729116000, + 1729117200, 1729118400, 1729119600, 1729120800, 1729122000, 1729123200, 1729124400, 1729125600, + 1729126800, 1729128000, 1729129200, 1729130400, 1729131600, 1729132800, 1729134000, 1729135200, + 1729136400, 1729137600, 1729138800, 1729140000, 1729141200, 1729142400, 1729143600, 1729144800, + 1729146000, 1729147200, 1729148400, 1729149600, 1729150800, 1729152000, 1729153200, 1729154400, + 1729155600, 1729156800, 1729158000, 1729159200, 1729160400, 1729161600, 1729162800, 1729164000, + 1729165200, 1729166400, 1729167600, 1729168800, 1729170000, 1729171200, 1729172400, 1729173600, + 1729174800, 1729176000, 1729177200, 1729178400, 1729179600, 1729182000, 1729183200, 1729184400, + 1729185600, 1729186800, 1729188000, 1729189200, 1729190400, 1729191600, 1729192800, 1729194000, + 1729195200, 1729196400, 1729197600, 1729198800, 1729200000, 1729201200, 1729202400, 1729203600, + 1729204800, 1729206000, 1729207200, 1729208400, 1729209600, 1729210800, 1729212000, 1729213200, + 1729214400, 1729215600, 1729216800, 1729218000, 1729219200, 1729220400, 1729221600, 1729222800, + 1729224000, 1729225200, 1729226400, 1729227600, 1729228800, 1729230000, 1729231200, 1729232400, + 1729233600, 1729234800, 1729236000, 1729237200, 1729238400, 1729239600, 1729240800, 1729242000, + 1729243200, 1729244400, 1729245600, 1729246800, 1729248000, 1729249200, 1729250400, 1729251600, + 1729252800, 1729254000, 1729255200, 1729256400, 1729257600, 1729258800, 1729260000, 1729261200, + 1729262400, 1729264800, 1729266000, 1729267200, 1729268400, 1729269600, 1729270800, 1729272000, + 1729273200, 1729274400, 1729275600, 1729276800, 1729278000, 1729279200, 1729280400, 1729281600, + 1729282800, 1729284000, 1729285200, 1729286400, 1729287600, 1729288800, 1729290000, 1729291200, + 1729292400, 1729293600, 1729294800, 1729296000, 1729297200, 1729298400, 1729299600, 1729300800, + 1729302000, 1729303200, 1729304400, 1729305600, 1729306800, 1729308000, 1729309200, 1729310400, + 1729311600, 1729312800, 1729314000, 1729315200, 1729316400, 1729317600, 1729318800, 1729320000, + 1729321200, 1729322400, 1729323600, 1729324800, 1729326000, 1729327200, 1729328400, 1729329600, + 1729330800, 1729332000, 1729333200, 1729334400, 1729335600, 1729336800, 1729338000, 1729339200, + 1729340400, 1729341600, 1729342800, 1729344000, 1729345200, 1729346400, 1729347600, 1729348800, + 1729350000, 1729351200, 1729352400, 1729353600, 1729354800, 1729356000, 1729357200, 1729358400, + 1729359600, 1729360800, 1729362000, 1729363200, 1729364400, 1729365600, 1729366800, 1729368000, + 1729369200, 1729370400, 1729371600, 1729372800, 1729374000, 1729375200, 1729376400, 1729377600, + 1729378800, 1729380000, 1729381200, 1729382400, 1729383600, 1729384800, 1729386000, 1729387200, + 1729388400, 1729389600, 1729390800, 1729392000, 1729393200, 1729394400, 1729395600, 1729396800, + 1729398000, 1729399200, 1729400400, 1729401600, 1729402800, 1729404000, 1729405200, 1729406400, + 1729407600, 1729408800, 1729410000, 1729411200, 1729412400, 1729413600, 1729414800, 1729416000, + 1729417200, 1729418400, 1729419600, 1729420800, 1729422000, 1729423200, 1729424400, 1729425600, + 1729426800, 1729428000, 1729429200, 1729430400, 1729431600, 1729432800, 1729434000, 1729435200, + 1729436400, 1729437600, 1729438800, 1729440000, 1729441200, 1729442400, 1729443600, 1729444800, + 1729446000, 1729447200, 1729448400, 1729449600, 1729450800, 1729452000, 1729453200, 1729454400, + 1729455600, 1729456800, 1729458000, 1729459200, 1729460400, 1729461600, 1729462800, 1729464000, + 1729465200, 1729466400, 1729467600, 1729468800, 1729470000, 1729471200, 1729472400, 1729473600, + 1729474800, 1729476000, 1729477200, 1729478400, 1729479600, 1729480800, 1729482000, 1729483200, + 1729484400, 1729485600, 1729486800, 1729488000, 1729489200, 1729490400, 1729491600, 1729492800, + 1729494000, 1729495200, 1729496400, 1729497600, 1729498800, 1729500000, 1729501200, 1729502400, + 1729503600, 1729504800, 1729506000, 1729507200, 1729508400, 1729509600, 1729510800, 1729512000, + 1729513200, 1729514400, 1729515600, 1729516800, 1729518000, 1729519200, 1729520400, 1729521600, + 1729522800, 1729524000, 1729525200, 1729526400, 1729527600, 1729528800, 1729530000, 1729531200, + 1729532400, 1729533600, 1729534800, 1729536000, 1729537200, 1729538400, 1729539600, 1729540800, + 1729542000, 1729543200, 1729544400, 1729545600, 1729546800, 1729548000, 1729549200, 1729550400, + 1729551600, 1729552800, 1729554000, 1729555200, 1729556400, 1729557600, 1729558800, 1729560000, + 1729561200, 1729562400, 1729563600, 1729564800, 1729566000, 1729567200, 1729568400, 1729569600, + 1729570800, 1729572000, 1729573200, 1729574400, 1729575600, 1729576800, 1729578000, 1729579200, + 1729580400, 1729581600, 1729582800, 1729584000, 1729585200, 1729586400, 1729587600, 1729588800, + 1729590000, 1729591200, 1729592400, 1729593600, 1729594800, 1729596000, 1729597200, 1729598400, + 1729599600, 1729600800, 1729602000, 1729603200, 1729604400, 1729605600, 1729606800, 1729608000, + 1729609200, 1729610400, 1729611600, 1729612800, 1729614000, 1729615200, 1729616400, 1729617600, + 1729618800, 1729620000, 1729621200, 1729622400, 1729623600, 1729624800, 1729626000, 1729627200, + 1729628400, 1729629600, 1729630800, 1729632000, 1729633200, 1729634400, 1729635600, 1729636800, + 1729638000, 1729639200, 1729640400, 1729641600, 1729642800, 1729644000, 1729645200, 1729646400, + 1729647600, 1729648800, 1729650000, 1729651200, 1729652400, 1729653600, 1729654800, 1729656000, + 1729657200, 1729658400, 1729659600, 1729660800, 1729662000, 1729663200, 1729664400, 1729665600, + 1729666800, 1729668000, 1729669200, 1729670400, 1729671600, 1729672800, 1729674000, 1729675200, + 1729676400, 1729677600, 1729678800, 1729680000, 1729681200, 1729682400, 1729683600, 1729684800, + 1729686000, 1729687200, 1729688400, 1729689600, 1729690800, 1729692000, 1729693200, 1729695600, + 1729696800, 1729698000, 1729699200, 1729700400, 1729701600, 1729702800, 1729704000, 1729705200, + 1729706400, 1729707600, 1729708800, 1729710000, 1729711200, 1729712400, 1729713600, 1729714800, + 1729716000, 1729717200, 1729718400, 1729719600, 1729720800, 1729722000, 1729723200, 1729724400, + 1729725600, 1729726800, 1729728000, 1729729200, 1729730400, 1729731600, 1729732800, 1729734000, + 1729735200, 1729736400, 1729737600, 1729738800, 1729740000, 1729741200, 1729742400, 1729743600, + 1729744800, 1729746000, 1729747200, 1729748400, 1729749600, 1729750800, 1729752000, 1729753200, + 1729754400, 1729755600, 1729756800, 1729758000, 1729759200, 1729760400, +]; + +static TRAINING_Y: &[f64] = &[ + 0.3, 0.27, 0.03, 0.94, 0.78, 0.69, 0.25, 0.7, 0.55, 0.18, 0.24, 0.97, 0.55, 0.69, 0.1, 0.34, + 0.25, 1.47, 1.25, 0.51, 1.08, 0.34, 0.53, 0.13, 0.55, 0.99, 0.6, 0.13, 0.03, 0.54, 0.74, 0.15, + 0.34, 1.19, 0.44, 0.55, 0.88, 1.16, 0.16, 0.58, 0.12, 0.94, 0.04, 0.91, 0.07, 0.09, 0.49, 0.35, + 0.66, 0.02, 0.54, 0.74, 0.22, 0.3, 0.14, 0.65, 0.42, 0.21, 0.35, 0.78, 0.06, 0.1, 0.48, 0.44, + 0.33, 0.38, 0.26, 0.7, 0.17, 0.48, 0.09, 0.1, 0.54, 0.32, 0.44, 0.0, 0.9, 1.15, 0.52, 0.08, + 0.29, 0.42, 0.18, 0.15, 1.08, 0.97, 0.11, 0.18, 0.12, 0.65, 1.21, 1.06, 0.06, 0.83, 0.29, 0.26, + 0.27, 0.42, 0.48, 0.62, 0.13, 0.03, 1.02, 0.5, 0.07, 0.29, 0.84, 0.52, 0.27, 0.64, 1.08, 0.29, + 0.23, 0.15, 0.22, 0.89, 0.87, 0.92, 0.08, 0.73, 0.22, 0.45, 0.36, 0.46, 0.49, 0.17, 0.51, 0.05, + 0.48, 0.58, 0.09, 0.29, 0.91, 0.13, 0.09, 0.43, 1.61, 0.55, 0.88, 0.3, 0.72, 0.09, 0.84, 0.1, + 0.14, 0.71, 0.21, 0.46, 0.06, 0.47, 0.99, 0.3, 0.23, 0.38, 0.47, 0.39, 0.16, 0.96, 1.1, 0.76, + 0.18, 0.1, 1.26, 0.57, 0.97, 0.05, 0.7, 0.18, 0.04, 0.09, 0.2, 0.27, 0.46, 0.23, 0.02, 0.52, + 0.52, 0.25, 0.15, 0.53, 0.51, 0.41, 0.35, 1.02, 0.61, 0.19, 0.54, 0.09, 0.91, 0.69, 1.6, 0.01, + 1.02, 0.4, 0.4, 0.3, 0.37, 0.81, 0.67, 0.26, 0.11, 0.59, 0.76, 0.11, 0.29, 0.77, 0.08, 0.2, + 0.48, 1.19, 0.36, 0.48, 0.23, 0.95, 0.13, 0.89, 0.02, 0.23, 0.45, 0.49, 0.73, 0.24, 0.9, 0.84, + 0.29, 0.06, 0.33, 0.43, 0.26, 0.44, 0.63, 0.95, 0.04, 0.14, 0.05, 1.18, 0.5, 0.39, 0.35, 0.73, + 0.58, 0.27, 0.11, 0.24, 0.1, 0.71, 0.35, 0.11, 0.75, 0.93, 0.42, 0.19, 0.29, 0.44, 0.12, 0.46, + 1.68, 1.22, 0.11, 0.05, 0.12, 0.62, 0.84, 0.36, 0.06, 1.22, 0.67, 0.32, 0.36, 0.54, 0.42, 0.77, + 0.19, 0.4, 0.97, 0.42, 0.04, 0.27, 0.57, 0.38, 0.36, 0.56, 0.97, 0.67, 0.31, 0.11, 0.31, 0.45, + 0.71, 0.43, 0.09, 0.44, 0.53, 0.32, 0.36, 0.97, 0.64, 0.24, 0.43, 0.39, 0.41, 0.45, 0.09, 0.38, + 1.1, 0.01, 0.21, 0.69, 1.6, 0.36, 0.15, 0.35, 0.67, 0.1, 0.54, 0.19, 0.21, 0.34, 0.52, 0.56, + 0.03, 0.38, 0.95, 0.34, 0.24, 0.24, 0.69, 0.16, 0.27, 0.84, 0.89, 0.02, 0.14, 0.22, 0.99, 0.59, + 0.15, 0.06, 0.87, 0.3, 0.17, 0.12, 0.38, 0.6, 0.6, 0.22, 0.25, 0.51, 0.58, 0.0, 0.27, 0.49, + 0.28, 0.66, 0.38, 1.05, 0.52, 0.12, 0.1, 0.34, 0.99, 0.71, 0.35, 0.05, 0.81, 0.46, 0.7, 0.53, + 0.72, 0.79, 0.3, 0.5, 0.09, 0.87, 0.45, 0.1, 0.35, 0.86, 0.06, 0.2, 0.55, 1.25, 0.24, 0.31, + 0.33, 0.64, 0.25, 0.83, 0.03, 0.28, 0.58, 0.48, 0.59, 0.18, 0.95, 0.87, 0.69, 0.16, 0.17, 0.43, + 0.39, 0.16, 0.69, 0.8, 0.11, 0.33, 0.14, 0.97, 0.52, 0.07, 0.29, 0.61, 0.11, 0.31, 0.12, 0.4, + 0.24, 0.69, 0.59, 0.09, 0.44, 0.45, 0.46, 0.44, 0.37, 0.75, 0.18, 0.43, 1.05, 0.76, 0.13, 0.02, + 0.24, 0.94, 1.38, 0.63, 0.05, 0.93, 0.83, 0.38, 0.4, 0.58, 0.62, 0.67, 0.29, 0.12, 0.49, 0.62, + 0.09, 0.27, 1.24, 0.23, 0.49, 0.59, 1.19, 0.22, 0.25, 0.19, 0.47, 0.78, 0.53, 0.08, 0.12, 0.51, + 1.1, 0.67, 0.84, 0.98, 0.74, 0.22, 0.37, 0.14, 0.39, 0.37, 0.04, 0.74, 0.82, 0.06, 0.27, 0.3, + 1.23, 0.29, 0.33, 0.38, 0.66, 0.2, 0.27, 0.1, 0.16, 0.47, 0.86, 0.4, 0.05, 0.91, 0.95, 0.46, + 0.43, 0.58, 0.49, 0.13, 0.28, 1.04, 0.76, 0.23, 0.29, 0.32, 0.98, 1.29, 0.3, 0.27, 0.88, 0.48, + 0.37, 0.25, 0.38, 0.56, 0.63, 0.16, 0.1, 0.66, 0.69, 0.01, 0.35, 0.73, 0.28, 0.44, 0.81, 1.25, + 0.32, 0.2, 0.29, 0.32, 0.97, 1.06, 0.49, 0.07, 0.98, 0.57, 0.46, 0.31, 0.65, 0.62, 0.14, 0.21, + 0.06, 0.69, 0.49, 0.09, 0.25, 0.8, 0.06, 0.25, 0.46, 1.2, 0.41, 0.6, 0.46, 0.78, 0.14, 0.62, + 0.02, 0.16, 0.31, 1.04, 0.54, 0.1, 0.55, 1.01, 0.25, 0.22, 0.27, 0.52, 0.5, 0.06, 1.52, 0.9, + 0.17, 0.49, 0.13, 1.33, 0.9, 0.31, 0.63, 2.5, 0.15, 0.16, 0.18, 0.52, 0.39, 0.97, 0.55, 0.07, + 0.69, 0.77, 0.15, 0.7, 1.19, 0.29, 0.43, 0.6, 1.17, 0.63, 0.37, 0.29, 0.24, 0.83, 1.43, 0.99, + 0.05, 0.9, 0.52, 0.57, 0.3, 0.71, 0.14, 0.64, 0.29, 0.21, 0.55, 0.57, 0.04, 0.46, 0.65, 0.11, + 0.18, 0.33, 1.12, 0.32, 0.43, 0.5, 0.39, 0.07, 0.66, 0.32, 0.17, 0.45, 0.42, 0.59, 0.27, 0.81, + 0.7, 0.08, 0.26, 0.24, 0.61, 0.37, 0.97, 0.8, 1.05, 0.13, 0.48, 0.2, 1.37, 0.81, 0.18, 0.46, + 0.7, 0.1, 0.53, 0.1, 0.56, 0.32, 0.48, 0.43, 0.04, 0.74, 0.64, 0.49, 0.43, 0.49, 0.76, 0.51, + 0.18, 0.69, 0.78, 0.2, 0.86, 0.18, 0.63, 1.32, 0.87, 0.17, 1.0, 0.4, 0.67, 0.06, 0.28, 0.56, + 0.76, 0.06, 0.13, 0.56, 0.49, 0.0, 0.32, 0.64, 0.33, 0.45, 0.43, 0.93, 0.26, 0.22, 0.6, 0.92, + 0.42, 0.61, 0.08, 0.17, 0.51, 0.34, 0.68, 0.4, 0.73, 0.78, 0.25, 0.69, 0.18, 0.74, 0.89, 0.11, + 0.59, 1.01, 0.02, 0.43, 0.15, 0.6, 0.42, 0.08, 0.41, 0.77, 0.43, 0.32, 0.15, 0.24, 0.41, 0.34, + 0.41, 0.0, 0.34, 0.86, 0.53, 0.17, 0.29, 0.74, 0.3, 0.16, 0.98, 0.97, 0.35, 0.5, 0.26, 0.52, + 1.61, 0.28, 0.27, 0.61, 0.24, 0.12, 0.11, 0.29, 0.23, 0.53, 0.13, 0.1, 0.66, 0.59, 0.09, 0.35, + 0.59, 0.41, 0.6, 0.43, 1.04, 0.72, 0.16, 0.67, 0.24, 0.31, 0.88, 0.32, 0.02, 0.78, 0.6, 0.68, + 0.2, 0.79, 0.08, 0.29, 0.6, 0.07, 0.55, 0.72, 0.06, 0.49, 1.19, 0.23, 0.5, 0.15, 0.79, 0.22, + 0.89, 0.33, 0.42, 0.12, 0.34, 0.07, 0.18, 0.27, 0.09, 0.73, 0.03, 0.9, 0.98, 0.17, 0.16, 0.14, + 0.58, 0.48, 0.27, 0.56, 1.22, 0.08, 0.48, 0.06, 0.26, 0.72, 0.07, 0.35, 0.74, 0.12, 0.17, 0.12, + 0.28, 0.1, 0.34, 0.31, 0.01, 0.45, 0.54, 0.65, 0.22, 0.4, 0.53, 1.22, 0.27, 0.81, 0.66, 0.13, + 0.67, 0.09, 0.17, 1.11, 0.4, 0.03, 0.82, 0.44, 0.44, 0.27, 0.53, 0.25, 0.5, 0.28, 0.1, 0.66, + 0.78, 0.08, 0.35, 0.22, 0.2, 0.63, 0.62, 1.07, 0.37, 0.3, 0.31, 0.42, 0.4, 0.46, 0.1, 0.08, + 0.55, 0.59, 1.01, 0.27, 1.4, 0.69, 0.23, 0.64, 0.12, 0.47, 0.48, 0.01, 0.99, 0.86, 0.11, 0.41, + 0.14, 0.27, 0.44, 0.09, 0.16, 0.57, 0.11, 0.19, 0.13, 0.13, 0.47, 0.28, 0.3, 0.03, 0.51, 0.85, + 0.45, 0.63, 0.32, 0.5, 0.28, 0.21, 0.51, 0.61, 0.15, 0.59, 0.11, 0.36, 1.08, 0.48, 0.3, 0.78, + 0.25, 0.18, 0.42, 0.44, 0.24, 0.78, 0.17, 0.21, 0.58, 0.53, 0.0, 0.41, 0.74, 0.56, 0.54, 0.36, + 0.89, 0.53, 0.24, 0.39, 0.19, 0.27, 0.88, 0.42, 0.03, 0.66, 0.29, 0.74, 0.97, 0.61, 0.61, 0.19, + 0.64, 0.2, 0.45, 0.57, 0.02, 0.55, 0.81, 0.24, 0.36, 0.16, 0.42, 0.33, 0.52, 0.62, 0.62, 0.09, + 0.39, 0.2, 0.16, 0.25, 0.11, 0.51, 0.04, 0.88, 0.79, 0.18, 0.08, 0.21, 0.45, 0.67, 0.2, 0.45, + 1.0, 0.06, 0.52, 0.22, 0.35, 0.69, 0.21, 0.34, 0.35, 0.2, 0.11, 0.16, 0.21, 0.25, 0.45, 0.11, + 0.02, 0.51, 0.96, 0.0, 0.59, 0.2, 0.46, 0.79, 0.11, 0.98, 0.94, 0.24, 1.02, 0.63, 0.23, 1.11, + 0.44, 0.01, 0.92, 0.62, 0.89, 0.41, 0.25, 0.33, 0.52, 0.57, 0.05, 0.7, 0.24, 0.12, 0.64, 0.46, + 0.03, 0.74, 0.5, 0.93, 0.39, 0.49, 0.16, 0.46, 0.04, 0.42, 0.03, 0.1, 0.4, 0.92, 0.65, 0.16, + 0.3, 0.73, 0.07, 0.42, 0.16, 0.33, 0.4, 0.02, 0.84, 1.34, 0.12, 0.68, 0.08, 0.13, 0.84, 0.12, + 0.19, 0.86, 0.13, 0.27, 0.14, 0.16, 0.21, 0.32, 0.95, 0.01, 0.53, 0.76, 0.47, 0.35, 0.36, 0.65, + 0.81, 0.13, 1.04, 0.71, 0.13, 0.36, 0.17, 0.2, 0.95, 0.38, 0.15, 0.81, 0.64, 0.33, 0.19, 0.63, + 0.48, 0.68, 0.18, 0.36, 0.4, 0.52, 0.0, 0.65, 0.75, 0.21, 1.0, 0.38, 0.86, 0.31, 0.22, 0.56, + 0.43, 0.27, 0.46, 0.33, 0.04, 0.39, 0.31, 0.66, 0.38, 0.51, 0.71, 0.1, 0.51, 0.18, 0.63, 0.17, + 0.02, 0.87, 1.17, 0.01, 0.49, 0.0, 0.63, 0.72, 0.17, 0.35, 0.55, 0.1, 0.43, 0.1, 0.72, 0.41, + 0.26, 0.41, 0.07, 0.43, 0.67, 0.21, 0.49, 0.48, 0.47, 0.38, 0.06, 0.82, 0.95, 0.12, 0.77, 0.37, + 0.46, 1.12, 0.33, 0.13, 0.82, 0.32, 0.4, 0.14, 0.26, 0.86, 0.98, 0.33, 0.1, 0.58, 0.74, 0.16, + 0.45, 0.67, 0.29, 0.94, 0.31, 0.98, 0.61, 0.27, 1.18, 0.35, 0.29, 0.67, 0.35, 0.02, 0.89, 0.58, + 0.56, 0.24, 0.35, 0.63, 0.43, 0.46, 0.23, 0.56, 0.38, 0.13, 0.4, 1.14, 0.12, 1.04, 0.16, 0.74, + 0.51, 0.37, 0.19, 0.41, 0.58, 0.59, 0.12, 0.08, 0.52, 0.2, 0.66, 0.03, 0.61, 0.84, 0.18, 0.83, + 0.3, 0.61, 0.82, 0.1, 0.8, 1.01, 0.1, 0.95, 0.15, 0.42, 1.51, 0.13, 0.79, 0.78, 0.15, 0.52, + 0.11, 0.18, 0.27, 0.33, 0.52, 0.07, 0.56, 0.53, 0.26, 0.32, 0.68, 0.46, 0.76, 0.18, 1.09, 0.58, + 0.07, 1.06, 0.12, 0.21, 1.03, 0.44, 0.01, 0.6, 0.49, 0.32, 0.43, 0.52, 0.46, 0.47, 0.44, 0.21, + 0.61, 0.58, 0.04, 0.5, 0.93, 0.23, 1.04, 0.5, 0.9, 0.48, 1.06, 0.14, 0.38, 0.09, 0.5, 0.01, + 0.28, 0.5, 0.48, 0.68, 0.47, 0.56, 0.72, 0.12, 0.46, 0.18, 0.5, 0.35, 0.19, 0.92, 0.92, 0.02, + 0.73, 0.03, 0.22, 0.86, 0.37, 1.14, 0.78, 0.13, 0.6, 0.07, 0.53, 0.35, 0.29, 0.69, 0.04, 0.47, + 0.94, 0.49, 0.56, 0.42, 0.42, 0.43, 0.1, 0.8, 0.8, 0.04, 0.74, 0.22, 0.06, 1.04, 0.38, 0.08, + 1.1, 0.28, 0.45, 0.27, 0.44, 0.43, 0.56, 0.2, 0.02, 0.69, 0.74, 0.06, 0.37, 0.92, 0.57, 0.51, + 0.61, 0.9, 0.61, 0.06, 0.93, 0.46, 0.38, 0.52, 0.42, 0.14, 0.99, 0.44, 0.63, 0.88, 0.66, 0.6, + 0.08, 0.5, 0.15, 0.71, 0.32, 0.06, 0.53, 1.13, 0.01, 0.58, 0.25, 1.06, 0.68, 0.41, 0.15, 0.77, + 0.04, 0.45, 0.02, 0.23, 0.76, 0.15, 0.49, 0.05, 0.74, 0.97, 0.33, 0.31, 0.31, 0.41, 0.62, 0.05, + 0.52, 1.02, 0.06, 1.3, 0.12, 0.44, 1.42, 0.25, 0.02, 0.97, 0.23, 0.26, 0.1, 0.16, 0.27, 0.3, + 0.52, 0.1, 0.7, 0.62, 0.43, 0.62, 0.91, 0.47, 0.61, 0.19, 0.99, 0.41, 0.11, 0.87, 0.29, 0.17, + 1.16, 1.25, 0.01, 1.01, 0.59, 0.33, 0.26, 0.49, 0.75, 0.66, 0.33, 0.2, 0.59, 0.25, 0.01, 0.47, + 0.61, 0.46, 0.9, 0.38, 0.78, 0.32, 0.44, 0.2, 0.51, 0.08, 0.38, 0.06, 0.06, 0.59, 0.46, 0.66, + 0.3, 0.34, 0.83, 0.67, 0.26, 0.26, 0.63, 0.41, 0.07, 0.59, 1.25, 0.01, 1.34, 0.03, 0.24, 0.49, + 0.18, 0.43, 0.7, 0.24, 0.22, 0.05, 0.31, 0.63, 0.38, 0.54, 0.18, 0.49, 0.74, 0.56, 0.41, 0.5, + 0.65, 0.72, 0.19, 1.1, 0.57, 0.08, 0.52, 0.66, 0.25, 1.44, 0.36, 0.1, 1.07, 0.6, 0.3, 0.27, + 0.3, 0.68, 0.86, 0.18, 0.02, 0.51, 0.56, 0.35, 1.07, 0.77, 0.28, 0.56, 0.48, 0.84, 0.29, 0.16, + 0.65, 0.22, 0.44, 0.72, 0.42, 0.13, 0.79, 0.84, 0.87, 0.46, 0.65, 0.72, 0.11, 0.37, 0.13, 0.41, + 0.24, 0.02, 1.39, 1.02, 0.07, 0.34, 0.07, 0.64, 0.47, 0.43, 0.31, 0.53, 0.1, 0.39, 0.17, 0.12, + 0.66, 0.1, 0.46, 0.01, 0.35, 1.1, 0.31, 0.21, 0.15, 0.44, 0.2, 0.07, 0.88, 0.85, 0.18, 0.88, + 0.12, 0.44, 1.11, 0.55, 0.57, 0.99, 0.38, 0.25, 0.12, 0.23, 0.57, 0.52, 0.28, 0.34, 0.55, 0.42, + 0.09, 0.73, 0.96, 0.44, 0.69, 0.13, 0.97, 0.51, 0.26, 0.75, 0.09, 0.22, 0.77, 0.48, 0.05, 1.34, + 0.43, 0.84, 0.41, 0.23, 0.66, 0.15, 0.37, 0.14, 1.19, 0.57, 0.05, 0.47, 0.63, 0.09, 0.64, 0.04, + 0.67, 0.4, 0.5, 0.32, 0.44, 0.02, 0.45, 0.02, 0.16, 0.71, 0.15, 0.67, 0.09, 0.41, 0.8, 0.39, + 0.19, 1.63, 0.37, 0.88, 0.05, 0.56, 1.24, 0.04, 0.69, 0.08, 0.19, 0.92, 0.08, 0.23, 0.68, 0.35, + 0.19, 0.06, 0.22, 0.71, 0.34, 0.38, 0.06, 0.64, 0.36, 0.33, 0.64, 0.55, 0.62, 0.21, 0.82, 0.78, + 0.1, 0.77, 0.09, 0.05, 0.97, 0.58, 0.02, 1.0, 0.87, 0.46, 0.23, 0.51, 0.59, 1.16, 0.23, 0.14, + 0.42, 0.55, 0.08, 0.71, 0.58, 0.17, 0.72, 0.47, 0.82, 0.27, 0.07, 0.32, 0.53, 0.06, 0.58, 0.43, + 0.04, 0.9, 0.28, 0.78, 0.42, 0.43, 0.71, 0.17, 0.71, 0.15, 0.71, 0.29, 0.05, 0.52, 1.29, 0.08, + 0.8, 3.21, 0.54, 0.39, 0.36, 0.24, 0.61, 0.26, 0.48, 0.06, 0.39, 0.29, 0.47, 0.51, 0.0, 0.73, + 0.51, 0.13, 0.49, 0.47, 0.5, 0.1, 0.35, 1.2, 0.04, 0.84, 0.4, 0.27, 1.03, 0.57, 0.03, 0.59, + 0.2, 0.27, 0.74, 0.46, 0.23, 0.36, 0.4, 0.02, 0.59, 0.32, 0.01, 0.41, 0.76, 0.25, 0.69, 0.12, + 1.01, 0.16, 0.06, 0.29, 0.36, 0.24, 0.67, 0.81, 0.34, 0.65, 0.23, 0.73, 0.22, 0.61, 0.45, 0.27, + 0.24, 0.2, 0.41, 0.26, 0.08, 0.06, 0.57, 0.02, 0.77, 0.09, 0.78, 0.6, 0.13, 0.21, 0.55, 0.06, + 0.41, 0.04, 0.33, 0.4, 0.16, 0.7, 0.02, 0.82, 0.63, 0.16, 0.19, 0.38, 0.57, 0.62, 0.05, 0.29, + 0.97, 0.05, 1.06, 0.07, 0.44, 0.76, 0.53, 0.02, 0.99, 0.2, 0.46, 0.17, 0.46, 0.28, 0.33, 0.62, + 0.06, 0.52, 0.54, 0.22, 0.24, 0.77, 0.38, 1.08, 0.23, 0.74, 0.38, 0.02, 0.82, 0.24, 0.38, 1.07, + 1.04, 0.11, 0.88, 1.27, 0.43, 0.45, 0.65, 0.47, 0.67, 0.29, 0.05, 0.7, 0.43, 0.06, 0.14, 0.99, + 0.14, 0.87, 0.32, 0.79, 0.24, 0.2, 0.2, 0.59, 0.21, 0.63, 0.27, 0.17, 0.41, 0.51, 0.94, 0.32, + 0.54, 0.66, 0.48, 0.13, 0.18, 0.39, 0.39, 0.33, 0.26, 0.87, 0.26, 0.71, 0.12, 0.28, 1.1, 0.4, + 0.48, 0.52, 0.2, 0.34, 0.06, 0.26, 0.26, 0.7, 0.49, 0.02, 0.41, 0.54, 0.32, 0.18, 0.45, 0.38, + 0.63, 0.07, 0.51, 0.83, 0.02, 0.68, 0.14, 0.26, 1.28, 0.74, 0.1, 0.87, 0.3, 0.42, 0.31, 0.75, + 0.45, 0.69, 0.19, 0.12, 0.61, 0.36, 0.04, 0.41, 0.79, 0.29, 1.11, 0.25, 0.94, 0.48, 0.23, 0.5, + 0.4, 0.31, 0.82, 0.86, 0.29, 0.51, 0.51, 0.74, 0.72, 0.43, 0.69, 0.07, 0.44, 0.35, 0.56, 0.3, + 0.06, 0.41, 0.78, 0.06, 0.79, 0.17, 1.41, 0.54, 0.38, 0.38, 0.59, 0.06, 0.33, 0.12, 0.31, 0.38, + 0.26, 0.36, 0.04, 0.08, 0.47, 0.25, 0.48, 0.24, 0.51, 0.23, 0.23, 0.39, 1.01, 0.02, 0.79, 0.07, + 0.56, 1.23, 0.58, 0.12, 0.84, 0.23, 0.14, 0.25, 0.12, 0.51, 0.91, 0.29, 0.12, 0.44, 0.42, 0.04, + 0.4, 0.9, 0.5, 1.08, 0.2, 1.01, 0.5, 0.08, 0.67, 0.47, 0.32, 1.1, 0.43, 0.25, 0.96, 0.57, 0.64, + 0.22, 0.08, 0.54, 0.44, 0.52, 0.19, 0.54, 0.29, 0.05, 0.22, 1.01, 0.25, 1.12, 0.21, 0.64, 0.36, + 0.12, 0.28, 0.59, 0.14, 0.49, 0.16, 0.35, 0.4, 0.2, 1.0, 0.04, 0.27, 0.52, 0.31, 0.13, 0.27, + 0.46, 0.4, 0.25, 0.36, 0.91, 0.01, 0.95, 0.39, 0.2, 0.79, 0.3, 0.31, 0.56, 0.23, 0.22, 0.08, + 0.48, 0.39, 0.64, 0.56, 0.04, 0.63, 0.91, 0.67, 0.2, 0.7, 0.61, 0.78, 0.26, 0.85, 0.68, 0.09, + 0.69, 0.39, 0.26, 1.57, 0.68, 0.12, 0.53, 0.2, 0.73, 0.2, 0.68, 0.73, 0.23, 0.06, 0.64, 0.49, + 0.36, 0.33, 0.74, 0.07, 1.06, 0.17, 0.85, 0.49, 0.07, 0.33, 0.5, 0.17, 0.81, 0.05, 0.1, 0.37, + 0.21, 0.77, 0.87, 0.09, 0.26, 0.12, 0.26, 0.11, 0.53, 0.35, 0.06, 0.88, 1.16, 0.04, 0.74, 0.35, + 0.12, 0.43, 0.11, 0.34, 0.65, 0.08, 0.24, 0.33, 0.78, 0.21, 0.5, 0.57, 0.13, +]; + +static PREDICTION_DS: &[TimestampSeconds] = &[ + 1729156767, 1729157367, 1729157967, 1729158567, 1729159167, 1729159767, 1729160367, 1729160967, + 1729161567, 1729162167, 1729162767, 1729163367, 1729163967, 1729164567, 1729165167, 1729165767, + 1729166367, 1729166967, 1729167567, 1729168167, 1729168767, 1729169367, 1729169967, 1729170567, + 1729171167, 1729171767, 1729172367, 1729172967, 1729173567, 1729174167, 1729174767, 1729175367, + 1729175967, 1729176567, 1729177167, 1729177767, 1729178367, 1729178967, 1729179567, 1729180167, + 1729180767, 1729181367, 1729181967, 1729182567, 1729183167, 1729183767, 1729184367, 1729184967, + 1729185567, 1729186167, 1729186767, 1729187367, 1729187967, 1729188567, 1729189167, 1729189767, + 1729190367, 1729190967, 1729191567, 1729192167, 1729192767, 1729193367, 1729193967, 1729194567, + 1729195167, 1729195767, 1729196367, 1729196967, 1729197567, 1729198167, 1729198767, 1729199367, + 1729199967, 1729200567, 1729201167, 1729201767, 1729202367, 1729202967, 1729203567, 1729204167, + 1729204767, 1729205367, 1729205967, 1729206567, 1729207167, 1729207767, 1729208367, 1729208967, + 1729209567, 1729210167, 1729210767, 1729211367, 1729211967, 1729212567, 1729213167, 1729213767, + 1729214367, 1729214967, 1729215567, 1729216167, 1729216767, 1729217367, 1729217967, 1729218567, + 1729219167, 1729219767, 1729220367, 1729220967, 1729221567, 1729222167, 1729222767, 1729223367, + 1729223967, 1729224567, 1729225167, 1729225767, 1729226367, 1729226967, 1729227567, 1729228167, + 1729228767, 1729229367, 1729229967, 1729230567, 1729231167, 1729231767, 1729232367, 1729232967, + 1729233567, 1729234167, 1729234767, 1729235367, 1729235967, 1729236567, 1729237167, 1729237767, + 1729238367, 1729238967, 1729239567, 1729240167, 1729240767, 1729241367, 1729241967, 1729242567, + 1729243167, 1729243767, 1729244367, 1729244967, 1729245567, 1729246167, 1729246767, 1729247367, + 1729247967, 1729248567, 1729249167, 1729249767, 1729250367, 1729250967, 1729251567, 1729252167, + 1729252767, 1729253367, 1729253967, 1729254567, 1729255167, 1729255767, 1729256367, 1729256967, + 1729257567, 1729258167, 1729258767, 1729259367, 1729259967, 1729260567, 1729261167, 1729261767, + 1729262367, 1729262967, 1729263567, 1729264167, 1729264767, 1729265367, 1729265967, 1729266567, + 1729267167, 1729267767, 1729268367, 1729268967, 1729269567, 1729270167, 1729270767, 1729271367, + 1729271967, 1729272567, 1729273167, 1729273767, 1729274367, 1729274967, 1729275567, 1729276167, + 1729276767, 1729277367, 1729277967, 1729278567, 1729279167, 1729279767, 1729280367, 1729280967, + 1729281567, 1729282167, 1729282767, 1729283367, 1729283967, 1729284567, 1729285167, 1729285767, + 1729286367, 1729286967, 1729287567, 1729288167, 1729288767, 1729289367, 1729289967, 1729290567, + 1729291167, 1729291767, 1729292367, 1729292967, 1729293567, 1729294167, 1729294767, 1729295367, + 1729295967, 1729296567, 1729297167, 1729297767, 1729298367, 1729298967, 1729299567, 1729300167, + 1729300767, 1729301367, 1729301967, 1729302567, 1729303167, 1729303767, 1729304367, 1729304967, + 1729305567, 1729306167, 1729306767, 1729307367, 1729307967, 1729308567, 1729309167, 1729309767, + 1729310367, 1729310967, 1729311567, 1729312167, 1729312767, 1729313367, 1729313967, 1729314567, + 1729315167, 1729315767, 1729316367, 1729316967, 1729317567, 1729318167, 1729318767, 1729319367, + 1729319967, 1729320567, 1729321167, 1729321767, 1729322367, 1729322967, 1729323567, 1729324167, + 1729324767, 1729325367, 1729325967, 1729326567, 1729327167, 1729327767, 1729328367, 1729328967, + 1729329567, 1729330167, 1729330767, 1729331367, 1729331967, 1729332567, 1729333167, 1729333767, + 1729334367, 1729334967, 1729335567, 1729336167, 1729336767, 1729337367, 1729337967, 1729338567, + 1729339167, 1729339767, 1729340367, 1729340967, 1729341567, 1729342167, 1729342767, 1729343367, + 1729343967, 1729344567, 1729345167, 1729345767, 1729346367, 1729346967, 1729347567, 1729348167, + 1729348767, 1729349367, 1729349967, 1729350567, 1729351167, 1729351767, 1729352367, 1729352967, + 1729353567, 1729354167, 1729354767, 1729355367, 1729355967, 1729356567, 1729357167, 1729357767, + 1729358367, 1729358967, 1729359567, 1729360167, 1729360767, 1729361367, 1729361967, 1729362567, + 1729363167, 1729363767, 1729364367, 1729364967, 1729365567, 1729366167, 1729366767, 1729367367, + 1729367967, 1729368567, 1729369167, 1729369767, 1729370367, 1729370967, 1729371567, 1729372167, + 1729372767, 1729373367, 1729373967, 1729374567, 1729375167, 1729375767, 1729376367, 1729376967, + 1729377567, 1729378167, 1729378767, 1729379367, 1729379967, 1729380567, 1729381167, 1729381767, + 1729382367, 1729382967, 1729383567, 1729384167, 1729384767, 1729385367, 1729385967, 1729386567, + 1729387167, 1729387767, 1729388367, 1729388967, 1729389567, 1729390167, 1729390767, 1729391367, + 1729391967, 1729392567, 1729393167, 1729393767, 1729394367, 1729394967, 1729395567, 1729396167, + 1729396767, 1729397367, 1729397967, 1729398567, 1729399167, 1729399767, 1729400367, 1729400967, + 1729401567, 1729402167, 1729402767, 1729403367, 1729403967, 1729404567, 1729405167, 1729405767, + 1729406367, 1729406967, 1729407567, 1729408167, 1729408767, 1729409367, 1729409967, 1729410567, + 1729411167, 1729411767, 1729412367, 1729412967, 1729413567, 1729414167, 1729414767, 1729415367, + 1729415967, 1729416567, 1729417167, 1729417767, 1729418367, 1729418967, 1729419567, 1729420167, + 1729420767, 1729421367, 1729421967, 1729422567, 1729423167, 1729423767, 1729424367, 1729424967, + 1729425567, 1729426167, 1729426767, 1729427367, 1729427967, 1729428567, 1729429167, 1729429767, + 1729430367, 1729430967, 1729431567, 1729432167, 1729432767, 1729433367, 1729433967, 1729434567, + 1729435167, 1729435767, 1729436367, 1729436967, 1729437567, 1729438167, 1729438767, 1729439367, + 1729439967, 1729440567, 1729441167, 1729441767, 1729442367, 1729442967, 1729443567, 1729444167, + 1729444767, 1729445367, 1729445967, 1729446567, 1729447167, 1729447767, 1729448367, 1729448967, + 1729449567, 1729450167, 1729450767, 1729451367, 1729451967, 1729452567, 1729453167, 1729453767, + 1729454367, 1729454967, 1729455567, 1729456167, 1729456767, 1729457367, 1729457967, 1729458567, + 1729459167, 1729459767, 1729460367, 1729460967, 1729461567, 1729462167, 1729462767, 1729463367, + 1729463967, 1729464567, 1729465167, 1729465767, 1729466367, 1729466967, 1729467567, 1729468167, + 1729468767, 1729469367, 1729469967, 1729470567, 1729471167, 1729471767, 1729472367, 1729472967, + 1729473567, 1729474167, 1729474767, 1729475367, 1729475967, 1729476567, 1729477167, 1729477767, + 1729478367, 1729478967, 1729479567, 1729480167, 1729480767, 1729481367, 1729481967, 1729482567, + 1729483167, 1729483767, 1729484367, 1729484967, 1729485567, 1729486167, 1729486767, 1729487367, + 1729487967, 1729488567, 1729489167, 1729489767, 1729490367, 1729490967, 1729491567, 1729492167, + 1729492767, 1729493367, 1729493967, 1729494567, 1729495167, 1729495767, 1729496367, 1729496967, + 1729497567, 1729498167, 1729498767, 1729499367, 1729499967, 1729500567, 1729501167, 1729501767, + 1729502367, 1729502967, 1729503567, 1729504167, 1729504767, 1729505367, 1729505967, 1729506567, + 1729507167, 1729507767, 1729508367, 1729508967, 1729509567, 1729510167, 1729510767, 1729511367, + 1729511967, 1729512567, 1729513167, 1729513767, 1729514367, 1729514967, 1729515567, 1729516167, + 1729516767, 1729517367, 1729517967, 1729518567, 1729519167, 1729519767, 1729520367, 1729520967, + 1729521567, 1729522167, 1729522767, 1729523367, 1729523967, 1729524567, 1729525167, 1729525767, + 1729526367, 1729526967, 1729527567, 1729528167, 1729528767, 1729529367, 1729529967, 1729530567, + 1729531167, 1729531767, 1729532367, 1729532967, 1729533567, 1729534167, 1729534767, 1729535367, + 1729535967, 1729536567, 1729537167, 1729537767, 1729538367, 1729538967, 1729539567, 1729540167, + 1729540767, 1729541367, 1729541967, 1729542567, 1729543167, 1729543767, 1729544367, 1729544967, + 1729545567, 1729546167, 1729546767, 1729547367, 1729547967, 1729548567, 1729549167, 1729549767, + 1729550367, 1729550967, 1729551567, 1729552167, 1729552767, 1729553367, 1729553967, 1729554567, + 1729555167, 1729555767, 1729556367, 1729556967, 1729557567, 1729558167, 1729558767, 1729559367, + 1729559967, 1729560567, 1729561167, 1729561767, 1729562367, 1729562967, 1729563567, 1729564167, + 1729564767, 1729565367, 1729565967, 1729566567, 1729567167, 1729567767, 1729568367, 1729568967, + 1729569567, 1729570167, 1729570767, 1729571367, 1729571967, 1729572567, 1729573167, 1729573767, + 1729574367, 1729574967, 1729575567, 1729576167, 1729576767, 1729577367, 1729577967, 1729578567, + 1729579167, 1729579767, 1729580367, 1729580967, 1729581567, 1729582167, 1729582767, 1729583367, + 1729583967, 1729584567, 1729585167, 1729585767, 1729586367, 1729586967, 1729587567, 1729588167, + 1729588767, 1729589367, 1729589967, 1729590567, 1729591167, 1729591767, 1729592367, 1729592967, + 1729593567, 1729594167, 1729594767, 1729595367, 1729595967, 1729596567, 1729597167, 1729597767, + 1729598367, 1729598967, 1729599567, 1729600167, 1729600767, 1729601367, 1729601967, 1729602567, + 1729603167, 1729603767, 1729604367, 1729604967, 1729605567, 1729606167, 1729606767, 1729607367, + 1729607967, 1729608567, 1729609167, 1729609767, 1729610367, 1729610967, 1729611567, 1729612167, + 1729612767, 1729613367, 1729613967, 1729614567, 1729615167, 1729615767, 1729616367, 1729616967, + 1729617567, 1729618167, 1729618767, 1729619367, 1729619967, 1729620567, 1729621167, 1729621767, + 1729622367, 1729622967, 1729623567, 1729624167, 1729624767, 1729625367, 1729625967, 1729626567, + 1729627167, 1729627767, 1729628367, 1729628967, 1729629567, 1729630167, 1729630767, 1729631367, + 1729631967, 1729632567, 1729633167, 1729633767, 1729634367, 1729634967, 1729635567, 1729636167, + 1729636767, 1729637367, 1729637967, 1729638567, 1729639167, 1729639767, 1729640367, 1729640967, + 1729641567, 1729642167, 1729642767, 1729643367, 1729643967, 1729644567, 1729645167, 1729645767, + 1729646367, 1729646967, 1729647567, 1729648167, 1729648767, 1729649367, 1729649967, 1729650567, + 1729651167, 1729651767, 1729652367, 1729652967, 1729653567, 1729654167, 1729654767, 1729655367, + 1729655967, 1729656567, 1729657167, 1729657767, 1729658367, 1729658967, 1729659567, 1729660167, + 1729660767, 1729661367, 1729661967, 1729662567, 1729663167, 1729663767, 1729664367, 1729664967, + 1729665567, 1729666167, 1729666767, 1729667367, 1729667967, 1729668567, 1729669167, 1729669767, + 1729670367, 1729670967, 1729671567, 1729672167, 1729672767, 1729673367, 1729673967, 1729674567, + 1729675167, 1729675767, 1729676367, 1729676967, 1729677567, 1729678167, 1729678767, 1729679367, + 1729679967, 1729680567, 1729681167, 1729681767, 1729682367, 1729682967, 1729683567, 1729684167, + 1729684767, 1729685367, 1729685967, 1729686567, 1729687167, 1729687767, 1729688367, 1729688967, + 1729689567, 1729690167, 1729690767, 1729691367, 1729691967, 1729692567, 1729693167, 1729693767, + 1729694367, 1729694967, 1729695567, 1729696167, 1729696767, 1729697367, 1729697967, 1729698567, + 1729699167, 1729699767, 1729700367, 1729700967, 1729701567, 1729702167, 1729702767, 1729703367, + 1729703967, 1729704567, 1729705167, 1729705767, 1729706367, 1729706967, 1729707567, 1729708167, + 1729708767, 1729709367, 1729709967, 1729710567, 1729711167, 1729711767, 1729712367, 1729712967, + 1729713567, 1729714167, 1729714767, 1729715367, 1729715967, 1729716567, 1729717167, 1729717767, + 1729718367, 1729718967, 1729719567, 1729720167, 1729720767, 1729721367, 1729721967, 1729722567, + 1729723167, 1729723767, 1729724367, 1729724967, 1729725567, 1729726167, 1729726767, 1729727367, + 1729727967, 1729728567, 1729729167, 1729729767, 1729730367, 1729730967, 1729731567, 1729732167, + 1729732767, 1729733367, 1729733967, 1729734567, 1729735167, 1729735767, 1729736367, 1729736967, + 1729737567, 1729738167, 1729738767, 1729739367, 1729739967, 1729740567, 1729741167, 1729741767, + 1729742367, 1729742967, 1729743567, 1729744167, 1729744767, 1729745367, 1729745967, 1729746567, + 1729747167, 1729747767, 1729748367, 1729748967, 1729749567, 1729750167, 1729750767, 1729751367, + 1729751967, 1729752567, 1729753167, 1729753767, 1729754367, 1729754967, 1729755567, 1729756167, + 1729756767, 1729757367, 1729757967, 1729758567, 1729759167, 1729759767, 1729760367, 1729760967, + 1729761567, 1729762167, 1729762767, 1729763367, 1729763967, 1729764567, 1729765167, 1729765767, + 1729766367, 1729766967, 1729767567, 1729768167, 1729768767, 1729769367, 1729769967, 1729770567, + 1729771167, 1729771767, 1729772367, 1729772967, 1729773567, 1729774167, 1729774767, 1729775367, + 1729775967, 1729776567, 1729777167, 1729777767, 1729778367, 1729778967, 1729779567, 1729780167, + 1729780767, 1729781367, 1729781967, 1729782567, 1729783167, 1729783767, 1729784367, 1729784967, + 1729785567, 1729786167, 1729786767, 1729787367, 1729787967, 1729788567, 1729789167, 1729789767, + 1729790367, 1729790967, 1729791567, 1729792167, 1729792767, 1729793367, 1729793967, 1729794567, + 1729795167, 1729795767, 1729796367, 1729796967, 1729797567, 1729798167, 1729798767, 1729799367, + 1729799967, 1729800567, 1729801167, 1729801767, 1729802367, 1729802967, 1729803567, 1729804167, + 1729804767, 1729805367, 1729805967, 1729806567, 1729807167, 1729807767, 1729808367, 1729808967, + 1729809567, 1729810167, 1729810767, 1729811367, 1729811967, 1729812567, 1729813167, 1729813767, + 1729814367, 1729814967, 1729815567, 1729816167, 1729816767, 1729817367, 1729817967, 1729818567, + 1729819167, 1729819767, 1729820367, 1729820967, 1729821567, 1729822167, 1729822767, 1729823367, + 1729823967, 1729824567, 1729825167, 1729825767, 1729826367, 1729826967, 1729827567, 1729828167, + 1729828767, 1729829367, 1729829967, 1729830567, 1729831167, 1729831767, 1729832367, 1729832967, + 1729833567, 1729834167, 1729834767, 1729835367, 1729835967, 1729836567, 1729837167, 1729837767, + 1729838367, 1729838967, 1729839567, 1729840167, 1729840767, 1729841367, 1729841967, 1729842567, + 1729843167, 1729843767, 1729844367, 1729844967, 1729845567, 1729846167, 1729846767, 1729847367, + 1729847967, 1729848567, 1729849167, 1729849767, 1729850367, 1729850967, 1729851567, 1729852167, + 1729852767, 1729853367, 1729853967, 1729854567, 1729855167, 1729855767, 1729856367, 1729856967, + 1729857567, 1729858167, 1729858767, 1729859367, 1729859967, 1729860567, 1729861167, 1729861767, + 1729862367, 1729862967, 1729863567, 1729864167, 1729864767, 1729865367, 1729865967, 1729866567, + 1729867167, 1729867767, 1729868367, 1729868967, 1729869567, 1729870167, 1729870767, 1729871367, + 1729871967, 1729872567, 1729873167, 1729873767, 1729874367, 1729874967, 1729875567, 1729876167, + 1729876767, 1729877367, 1729877967, 1729878567, 1729879167, 1729879767, 1729880367, 1729880967, + 1729881567, 1729882167, 1729882767, 1729883367, 1729883967, 1729884567, 1729885167, 1729885767, + 1729886367, 1729886967, 1729887567, 1729888167, 1729888767, 1729889367, 1729889967, 1729890567, + 1729891167, 1729891767, 1729892367, 1729892967, 1729893567, 1729894167, 1729894767, 1729895367, + 1729895967, 1729896567, 1729897167, 1729897767, 1729898367, 1729898967, 1729899567, 1729900167, + 1729900767, 1729901367, 1729901967, 1729902567, 1729903167, 1729903767, 1729904367, 1729904967, + 1729905567, 1729906167, 1729906767, 1729907367, 1729907967, 1729908567, 1729909167, 1729909767, + 1729910367, 1729910967, 1729911567, 1729912167, 1729912767, 1729913367, 1729913967, 1729914567, + 1729915167, 1729915767, 1729916367, 1729916967, 1729917567, 1729918167, 1729918767, 1729919367, + 1729919967, 1729920567, 1729921167, 1729921767, 1729922367, 1729922967, 1729923567, 1729924167, + 1729924767, 1729925367, 1729925967, 1729926567, 1729927167, 1729927767, 1729928367, 1729928967, + 1729929567, 1729930167, 1729930767, 1729931367, 1729931967, 1729932567, 1729933167, 1729933767, + 1729934367, 1729934967, 1729935567, 1729936167, 1729936767, 1729937367, 1729937967, 1729938567, + 1729939167, 1729939767, 1729940367, 1729940967, 1729941567, 1729942167, 1729942767, 1729943367, + 1729943967, 1729944567, 1729945167, 1729945767, 1729946367, 1729946967, 1729947567, 1729948167, + 1729948767, 1729949367, 1729949967, 1729950567, 1729951167, 1729951767, 1729952367, 1729952967, + 1729953567, 1729954167, 1729954767, 1729955367, 1729955967, 1729956567, 1729957167, 1729957767, + 1729958367, 1729958967, 1729959567, 1729960167, 1729960767, 1729961367, 1729961967, 1729962567, + 1729963167, 1729963767, 1729964367, 1729964967, 1729965567, 1729966167, 1729966767, 1729967367, + 1729967967, 1729968567, 1729969167, 1729969767, 1729970367, 1729970967, 1729971567, 1729972167, + 1729972767, 1729973367, 1729973967, 1729974567, 1729975167, 1729975767, 1729976367, 1729976967, + 1729977567, 1729978167, 1729978767, 1729979367, 1729979967, 1729980567, 1729981167, 1729981767, + 1729982367, 1729982967, 1729983567, 1729984167, 1729984767, 1729985367, 1729985967, 1729986567, + 1729987167, 1729987767, 1729988367, 1729988967, 1729989567, 1729990167, 1729990767, 1729991367, + 1729991967, 1729992567, 1729993167, 1729993767, 1729994367, 1729994967, 1729995567, 1729996167, + 1729996767, 1729997367, 1729997967, 1729998567, 1729999167, 1729999767, 1730000367, 1730000967, + 1730001567, 1730002167, 1730002767, 1730003367, 1730003967, 1730004567, 1730005167, 1730005767, + 1730006367, 1730006967, 1730007567, 1730008167, 1730008767, 1730009367, 1730009967, 1730010567, + 1730011167, 1730011767, 1730012367, 1730012967, 1730013567, 1730014167, 1730014767, 1730015367, + 1730015967, 1730016567, 1730017167, 1730017767, 1730018367, 1730018967, 1730019567, 1730020167, + 1730020767, 1730021367, 1730021967, 1730022567, 1730023167, 1730023767, 1730024367, 1730024367, +]; + +static EXPECTED: &[f64] = &[ + 0.48566585406661034, + 0.4869289919734001, + 0.4877674840390682, + 0.48818453401327133, + 0.4881950505077839, + 0.48782483115792274, + 0.4871099852025509, + 0.4860953241586685, + 0.4848331846296787, + 0.4833817593753338, + 0.4818028584122658, + 0.48016058653593063, + 0.47851877100765705, + 0.4769394136965275, + 0.4754804726690054, + 0.4741945303976536, + 0.4731266666203737, + 0.47231375426054, + 0.4717830251902342, + 0.47155135683715343, + 0.47162521071732044, + 0.47200000286102295, + 0.47266104258596897, + 0.47358357161283493, + 0.4747340139001608, + 0.47607117146253586, + 0.47754736989736557, + 0.47911044023931026, + 0.4807051792740822, + 0.48227544873952866, + 0.48376576602458954, + 0.4851234555244446, + 0.48630012199282646, + 0.48725324496626854, + 0.4879477545619011, + 0.48835688829421997, + 0.488463394343853, + 0.488259669393301, + 0.48774827271699905, + 0.4869418404996395, + 0.48586221039295197, + 0.48454030603170395, + 0.4830145165324211, + 0.481329757720232, + 0.4795356746762991, + 0.47768524661660194, + 0.47583273239433765, + 0.4740318339318037, + 0.4723340142518282, + 0.47078644298017025, + 0.46943066641688347, + 0.46830072067677975, + 0.4674222096800804, + 0.46681104227900505, + 0.46647292748093605, + 0.46640303172171116, + 0.46658569388091564, + 0.46699508279561996, + 0.467595599591732, + 0.4683431014418602, + 0.469185933470726, + 0.4700667839497328, + 0.4709241967648268, + 0.47169447876513004, + 0.4723140522837639, + 0.472720954567194, + 0.4728575311601162, + 0.47267183288931847, + 0.47211974300444126, + 0.4711665976792574, + 0.46978825330734253, + 0.4679724723100662, + 0.4657193757593632, + 0.46304203290492296, + 0.4599661733955145, + 0.4565301528200507, + 0.4527837517671287, + 0.44878739801060874, + 0.444610589183867, + 0.44033004995435476, + 0.43602808844298124, + 0.4317900352180004, + 0.4277023281902075, + 0.42384994216263294, + 0.4203142262995243, + 0.4171707406640053, + 0.4144868776202202, + 0.4123203307390213, + 0.4107171632349491, + 0.4097108952701092, + 0.40932099148631096, + 0.409552875906229, + 0.41039736568927765, + 0.4118308871984482, + 0.4138164073228836, + 0.41630400344729424, + 0.41923257149755955, + 0.4225312229245901, + 0.4261213969439268, + 0.4299190156161785, + 0.43383653555065393, + 0.43778563663363457, + 0.441679360345006, + 0.4454346795100719, + 0.4489744657767005, + 0.452229889575392, + 0.45514179300516844, + 0.45766250882297754, + 0.4597570616751909, + 0.46140354685485363, + 0.46259419061243534, + 0.46333478949964046, + 0.46364472806453705, + 0.4635558994486928, + 0.4631119277328253, + 0.4623664356768131, + 0.46138134226202965, + 0.46022508200258017, + 0.4589701984077692, + 0.457691497169435, + 0.456463192589581, + 0.4553572842851281, + 0.45444097789004445, + 0.4537747115828097, + 0.4534106692299247, + 0.4533908343873918, + 0.4537461451254785, + 0.4544953494332731, + 0.45564468763768673, + 0.45718780625611544, + 0.4591057412326336, + 0.4613678874447942, + 0.4639326725155115, + 0.46674924716353416, + 0.4697584956884384, + 0.4728954825550318, + 0.4760908745229244, + 0.4792733434587717, + 0.4823717325925827, + 0.48531673848629, + 0.4880435988306999, + 0.49049340188503265, + 0.49261509254574776, + 0.49436695873737335, + 0.49571747705340385, + 0.4966465048491955, + 0.49714548513293266, + 0.4972178116440773, + 0.49687833711504936, + 0.4961531274020672, + 0.49507826194167137, + 0.4936986342072487, + 0.4920668303966522, + 0.49024083837866783, + 0.4882828891277313, + 0.4862569496035576, + 0.48422709479928017, + 0.4822553023695946, + 0.4803997315466404, + 0.47871300019323826, + 0.47724038548767567, + 0.4760188087821007, + 0.4750755149871111, + 0.47442773915827274, + 0.47408171743154526, + 0.4740332793444395, + 0.4742677006870508, + 0.4747603312134743, + 0.4754778351634741, + 0.47637894935905933, + 0.4774162694811821, + 0.4785376228392124, + 0.47968799248337746, + 0.48081138730049133, + 0.481852438300848, + 0.4827585779130459, + 0.4834814667701721, + 0.48397883772850037, + 0.4842155873775482, + 0.484165258705616, + 0.4838106110692024, + 0.4831441715359688, + 0.4821687787771225, + 0.48089689016342163, + 0.4793508108705282, + 0.477561354637146, + 0.47556718438863754, + 0.47341321036219597, + 0.4711493756622076, + 0.4688287079334259, + 0.46650554053485394, + 0.4642338268458843, + 0.462065014988184, + 0.46004661079496145, + 0.45822009164839983, + 0.4566197441890836, + 0.4552712766453624, + 0.4541907040402293, + 0.4533839854411781, + 0.45284624258056283, + 0.45256209652870893, + 0.45250573428347707, + 0.4526417450979352, + 0.4529261542484164, + 0.4533074335195124, + 0.4537283810786903, + 0.45412757946178317, + 0.45444170851260424, + 0.4546069912612438, + 0.45456192269921303, + 0.4542487468570471, + 0.4536157283000648, + 0.452618972864002, + 0.4512237636372447, + 0.4494062371086329, + 0.4471541615203023, + 0.4444679068401456, + 0.44136051554232836, + 0.43785802368074656, + 0.4339987887069583, + 0.4298327509313822, + 0.4254204835742712, + 0.4208314884454012, + 0.4161428213119507, + 0.41143669933080673, + 0.40679866075515747, + 0.40231532230973244, + 0.39807164669036865, + 0.3941492587327957, + 0.39062364771962166, + 0.38756246119737625, + 0.3850233629345894, + 0.3830527067184448, + 0.38168396055698395, + 0.380936823785305, + 0.3808167651295662, + 0.38131462037563324, + 0.3824071064591408, + 0.38405710458755493, + 0.3862149007618427, + 0.38881945982575417, + 0.3917999565601349, + 0.39507804811000824, + 0.3985695615410805, + 0.40218720585107803, + 0.4058426208794117, + 0.4094490520656109, + 0.4129234217107296, + 0.4161888509988785, + 0.419176472350955, + 0.42182721570134163, + 0.4240936357527971, + 0.4259405340999365, + 0.42734640650451183, + 0.4283033162355423, + 0.42881721444427967, + 0.4289075843989849, + 0.4286063853651285, + 0.42795727401971817, + 0.4270138759166002, + 0.42583828791975975, + 0.42449885234236717, + 0.42306840419769287, + 0.4216214753687382, + 0.42023262567818165, + 0.4189737867563963, + 0.4179121218621731, + 0.4171083178371191, + 0.41661439277231693, + 0.41647252067923546, + 0.41671355068683624, + 0.4173563290387392, + 0.4184072185307741, + 0.4198597129434347, + 0.42169502936303616, + 0.4238824360072613, + 0.4263806212693453, + 0.4291384294629097, + 0.43209705874323845, + 0.43519144505262375, + 0.4383522653952241, + 0.4415083513595164, + 0.44458825211040676, + 0.4475230085590738, + 0.45024761906825006, + 0.4527032570913434, + 0.45483896415680647, + 0.4566128412261605, + 0.45799350924789906, + 0.4589606998488307, + 0.45950596034526825, + 0.4596325270831585, + 0.4593554474413395, + 0.45870058331638575, + 0.45770402904599905, + 0.4564107805490494, + 0.45487314835190773, + 0.45314939972013235, + 0.4513015004340559, + 0.44939352420624346, + 0.44748940347017196, + 0.4456511327298358, + 0.44393692212179303, + 0.44239917676895857, + 0.4410832724533975, + 0.4400259396061301, + 0.439254617318511, + 0.4387861546128988, + 0.4386270409449935, + 0.43877293076366186, + 0.43920894991606474, + 0.4399106064811349, + 0.4408442913554609, + 0.4419688256457448, + 0.44323662482202053, + 0.4445955096744001, + 0.44599047861993313, + 0.44736529395868274, + 0.4486646712757647, + 0.4498358345590532, + 0.450830495916307, + 0.45160615537315607, + 0.4521278450265527, + 0.4523688433691859, + 0.45231182454153895, + 0.45194944087415934, + 0.4512841096147895, + 0.4503285337705165, + 0.44910468463785946, + 0.44764343480346724, + 0.4459832051070407, + 0.4441689820960164, + 0.44225052651017904, + 0.4402807089500129, + 0.43831387627869844, + 0.43640373554080725, + 0.43460183404386044, + 0.4329553674906492, + 0.4315058272331953, + 0.43028739280998707, + 0.4293255377560854, + 0.42863638140261173, + 0.4282255582511425, + 0.42808822914958, + 0.42820877954363823, + 0.4285613428801298, + 0.4291104804724455, + 0.42981192097067833, + 0.43061416782438755, + 0.43145974911749363, + 0.4322873679921031, + 0.4330332512035966, + 0.4336338313296437, + 0.4340272396802902, + 0.43415568582713604, + 0.43396740034222603, + 0.4334181835874915, + 0.4324733428657055, + 0.43110876716673374, + 0.42931222170591354, + 0.42708379216492176, + 0.42443657852709293, + 0.42139639519155025, + 0.4180014096200466, + 0.4143015518784523, + 0.41035712510347366, + 0.4062376990914345, + 0.40201999247074127, + 0.3977861851453781, + 0.3936217986047268, + 0.3896130211651325, + 0.38584501668810844, + 0.3823990449309349, + 0.37935060262680054, + 0.376767061650753, + 0.3747061863541603, + 0.3732139393687248, + 0.37232378125190735, + 0.3720553368330002, + 0.3724137917160988, + 0.3733900710940361, + 0.3749605119228363, + 0.3770880699157715, + 0.37972278892993927, + 0.3828034773468971, + 0.38625937327742577, + 0.3900117687880993, + 0.3939765393733978, + 0.3980661369860172, + 0.402192197740078, + 0.4062676951289177, + 0.410209596157074, + 0.41394082456827164, + 0.41739229299128056, + 0.4205050449818373, + 0.4232311900705099, + 0.42553573846817017, + 0.42739682644605637, + 0.42880649119615555, + 0.42977068573236465, + 0.4303085058927536, + 0.43045203760266304, + 0.43024467676877975, + 0.42974005080759525, + 0.42899999767541885, + 0.42809299007058144, + 0.4270914252847433, + 0.426070025190711, + 0.4251031279563904, + 0.42426246777176857, + 0.42361531034111977, + 0.4232220370322466, + 0.42313471250236034, + 0.4233952909708023, + 0.4240345899015665, + 0.4250714424997568, + 0.42651194147765636, + 0.4283496364951134, + 0.430565532296896, + 0.4331289604306221, + 0.43599828239530325, + 0.4391225236468017, + 0.442442680709064, + 0.4458935134462081, + 0.4494058610871434, + 0.45290814572945237, + 0.456329170614481, + 0.45959965977817774, + 0.46265468932688236, + 0.4654352702200413, + 0.467890378087759, + 0.4699781332165003, + 0.4716669712215662, + 0.4729366786777973, + 0.47377859614789486, + 0.4741961099207401, + 0.4742039926350117, + 0.47382817789912224, + 0.4731047060340643, + 0.4720784015953541, + 0.47080172970891, + 0.46933270804584026, + 0.4677334036678076, + 0.4660677295178175, + 0.4643996339291334, + 0.46279116719961166, + 0.46130031906068325, + 0.45997961331158876, + 0.45887424051761627, + 0.45802114252001047, + 0.4574474021792412, + 0.45717013999819756, + 0.4571957029402256, + 0.45751963555812836, + 0.4581272527575493, + 0.4589938363060355, + 0.4600859126076102, + 0.4613621709868312, + 0.4627751335501671, + 0.4642725270241499, + 0.46579934284090996, + 0.4672994241118431, + 0.4687173720449209, + 0.4700005315244198, + 0.4711004588752985, + 0.4719748757779598, + 0.472588611766696, + 0.47291504219174385, + 0.47293697111308575, + 0.4726467728614807, + 0.472047196701169, + 0.47115073539316654, + 0.4699795227497816, + 0.4685643073171377, + 0.4669437129050493, + 0.46516266092658043, + 0.4632708840072155, + 0.46132139675319195, + 0.4593684347346425, + 0.4574659438803792, + 0.4556653033941984, + 0.45401386450976133, + 0.4525531576946378, + 0.451317282859236, + 0.4503319738432765, + 0.44961318001151085, + 0.4491667391266674, + 0.4489877375308424, + 0.44906073645688593, + 0.4493598276749253, + 0.44984963117167354, + 0.4504860215820372, + 0.45121741155162454, + 0.4519866299815476, + 0.45273211039602757, + 0.45339047629386187, + 0.45389798376709223, + 0.45419292338192463, + 0.45421766210347414, + 0.45392031967639923, + 0.453256921377033, + 0.45219272654503584, + 0.4507038197480142, + 0.4487778879702091, + 0.4464152832515538, + 0.4436290869489312, + 0.44044513860717416, + 0.4369018077850342, + 0.43304895889014006, + 0.4289471786469221, + 0.4246659278869629, + 0.4202820956707001, + 0.41587806679308414, + 0.41153915598988533, + 0.4073519743978977, + 0.40340153872966766, + 0.3997693359851837, + 0.3965308181941509, + 0.39375369995832443, + 0.3914954997599125, + 0.38980257883667946, + 0.38870837539434433, + 0.3882325142621994, + 0.3883805349469185, + 0.38914313167333603, + 0.390497051179409, + 0.39240512996912, + 0.39481760188937187, + 0.39767346158623695, + 0.4009018614888191, + 0.40442436933517456, + 0.408156830817461, + 0.41201192140579224, + 0.41590123623609543, + 0.4197380617260933, + 0.4234392922371626, + 0.42692795023322105, + 0.4301352743059397, + 0.4330020807683468, + 0.4354809122160077, + 0.4375366484746337, + 0.43914768332615495, + 0.44030609680339694, + 0.4410178321413696, + 0.44130236050114036, + 0.4411916360259056, + 0.4407293079420924, + 0.43996896408498287, + 0.4389727865345776, + 0.4378090240061283, + 0.43655048310756683, + 0.43527186568826437, + 0.4340475294739008, + 0.4329495206475258, + 0.43204500433057547, + 0.43139461148530245, + 0.4310503927990794, + 0.43105446361005306, + 0.43143783416599035, + 0.4322192622348666, + 0.43340509105473757, + 0.4349888525903225, + 0.436951769515872, + 0.4392631221562624, + 0.44188155187293887, + 0.4447560926200822, + 0.44782774802297354, + 0.4510316136293113, + 0.4542982950806618, + 0.4575566379353404, + 0.46073530055582523, + 0.46376524679362774, + 0.4665814973413944, + 0.4691253323107958, + 0.47134572453796864, + 0.4732008259743452, + 0.47465928085148335, + 0.4757008086889982, + 0.47631704434752464, + 0.47651124745607376, + 0.47629839926958084, + 0.4757045079022646, + 0.47476557455956936, + 0.47352671064436436, + 0.47204025462269783, + 0.4703644458204508, + 0.4685613065958023, + 0.4666948802769184, + 0.4648292791098356, + 0.4630264434963465, + 0.4613445792347193, + 0.4598361300304532, + 0.4585465909913182, + 0.4575126366689801, + 0.45676174107939005, + 0.45631087850779295, + 0.45616645459085703, + 0.45632424764335155, + 0.4567694216966629, + 0.45747746154665947, + 0.45841482374817133, + 0.4595403717830777, + 0.4608065253123641, + 0.4621612373739481, + 0.4635494500398636, + 0.46491500176489353, + 0.46620264649391174, + 0.46735961735248566, + 0.4683377258479595, + 0.46909451857209206, + 0.4695949424058199, + 0.46981253288686275, + 0.4697298239916563, + 0.4693395420908928, + 0.46864423528313637, + 0.46765656024217606, + 0.46639852970838547, + 0.4649010933935642, + 0.46320280246436596, + 0.4613485373556614, + 0.45938816480338573, + 0.4573745662346482, + 0.4553621970117092, + 0.4534048056229949, + 0.45155389327555895, + 0.4498568228445947, + 0.44835500698536634, + 0.44708275818265975, + 0.4460656016599387, + 0.4453196337817644, + 0.44485056959092617, + 0.4446536109317094, + 0.44471316022099927, + 0.4450034822220914, + 0.4454890946508385, + 0.4461257698130794, + 0.44686214497778565, + 0.4476407039910555, + 0.4484001910313964, + 0.44907697080634534, + 0.44960736529901624, + 0.4499297612346709, + 0.44998623337596655, + 0.4497251119464636, + 0.4491022424772382, + 0.4480829741805792, + 0.4466432082699612, + 0.4447708396182861, + 0.4424659109208733, + 0.4397415886633098, + 0.43662373162806034, + 0.4331505196169019, + 0.4293719809502363, + 0.42534845136106014, + 0.4211494941264391, + 0.4168518893420696, + 0.4125378578901291, + 0.4082929268479347, + 0.4042034223675728, + 0.40035445243120193, + 0.3968273289501667, + 0.3936976045370102, + 0.3910326845943928, + 0.38889030367136, + 0.38731664046645164, + 0.386344987899065, + 0.38599513471126556, + 0.38627223670482635, + 0.3871672488749027, + 0.3886566124856472, + 0.3907031789422035, + 0.3932572044432163, + 0.396257434040308, + 0.39963310211896896, + 0.4033055789768696, + 0.4071907550096512, + 0.4112010821700096, + 0.4152482636272907, + 0.4192453809082508, + 0.4231092818081379, + 0.42676297202706337, + 0.4301374005153775, + 0.43317359685897827, + 0.43582379166036844, + 0.4380529234185815, + 0.4398391875438392, + 0.4411746375262737, + 0.44206522265449166, + 0.4425301495939493, + 0.4426014351192862, + 0.4423224925994873, + 0.44174706120975316, + 0.44093690859153867, + 0.4399604918435216, + 0.438890409655869, + 0.4378011878579855, + 0.43676730059087276, + 0.43586049787700176, + 0.4351479997858405, + 0.43469023145735264, + 0.4345392705872655, + 0.43473705276846886, + 0.43531449884176254, + 0.4362903628498316, + 0.43767077615484595, + 0.43944930052384734, + 0.44160691811703146, + 0.44411302771186456, + 0.44692599889822304, + 0.44999477500095963, + 0.4532604767009616, + 0.4566577821969986, + 0.46011753287166357, + 0.4635682459920645, + 0.4669386353343725, + 0.4701594337821007, + 0.47316574305295944, + 0.4758986681699753, + 0.4783070310950279, + 0.48034902289509773, + 0.48199303820729256, + 0.483218926936388, + 0.4840180277824402, + 0.4843936264514923, + 0.48436062410473824, + 0.4839448221027851, + 0.4831823520362377, + 0.48211802542209625, + 0.4808042496442795, + 0.47929906100034714, + 0.4776644594967365, + 0.47596449963748455, + 0.47426304034888744, + 0.4726220816373825, + 0.47109960950911045, + 0.4697482269257307, + 0.46861302480101585, + 0.4677309300750494, + 0.4671291094273329, + 0.466824546456337, + 0.46682366728782654, + 0.4671220052987337, + 0.46770479902625084, + 0.4685473460704088, + 0.46961615793406963, + 0.4708698783069849, + 0.47226104885339737, + 0.47373746521770954, + 0.47524395026266575, + 0.47672439739108086, + 0.47812335193157196, + 0.47938820347189903, + 0.4804705008864403, + 0.481327872723341, + 0.4819251634180546, + 0.48223573341965675, + 0.48224233090877533, + 0.4819374047219753, + 0.48132359609007835, + 0.48041336983442307, + 0.4792289324104786, + 0.4778009243309498, + 0.4761679731309414, + 0.4743749778717756, + 0.4724716227501631, + 0.4705109875649214, + 0.46854719892144203, + 0.4666342046111822, + 0.46482336334884167, + 0.4631619770079851, + 0.4616916049271822, + 0.46044632978737354, + 0.45945179741829634, + 0.4587239669635892, + 0.4582686508074403, + 0.4580808822065592, + 0.45814522728323936, + 0.4584358436986804, + 0.4589171474799514, + 0.4595451382920146, + 0.4602681137621403, + 0.4610288795083761, + 0.4617659356445074, + 0.4624157305806875, + 0.4629147034138441, + 0.4632009416818619, + 0.46321685053408146, + 0.4629105255007744, + 0.4622379634529352, + 0.46116437017917633, + 0.4596658395603299, + 0.4577301237732172, + 0.4553573979064822, + 0.45256078243255615, + 0.4493660619482398, + 0.44581164384726435, + 0.44194736634381115, + 0.4378337380476296, + 0.43354022316634655, + 0.429143687710166, + 0.42472646571695805, + 0.4203739408403635, + 0.4161726087331772, + 0.4122074954211712, + 0.4085600674152374, + 0.40530575811862946, + 0.40251222252845764, + 0.4002370573580265, + 0.39852647855877876, + 0.39741402491927147, + 0.39691921696066856, + 0.39704756438732147, + 0.3977898471057415, + 0.3991226926445961, + 0.4010089188814163, + 0.4033988304436207, + 0.4062313213944435, + 0.40943555533885956, + 0.41293308325111866, + 0.41663970053195953, + 0.42046812921762466, + 0.4243299514055252, + 0.42813834734261036, + 0.4318103129044175, + 0.43526877369731665, + 0.43844495015218854, + 0.44127973378635943, + 0.44372557059978135, + 0.4457473545335233, + 0.44732340914197266, + 0.4484459515661001, + 0.44912082608789206, + 0.44936746498569846, + 0.4492178112268448, + 0.4487155945971608, + 0.4479143063072115, + 0.44687609071843326, + 0.4456693675601855, + 0.4443667281011585, + 0.44304298912175, + 0.4417725009843707, + 0.44062724616378546, + 0.4396744132973254, + 0.43897457234561443, + 0.43857991928234696, + 0.43853247724473476, + 0.438863224349916, + 0.4395909486338496, + 0.44072198984213173, + 0.4422498500207439, + 0.4441558140970301, + 0.4464091630652547, + 0.4489684496074915, + 0.4517828291282058, + 0.4547932194545865, + 0.4579347185790539, + 0.46113802678883076, + 0.4643319044262171, + 0.46744501404464245, + 0.47040835581719875, + 0.47315705195069313, + 0.475632231682539, + 0.4777829386293888, + 0.4795673042535782, + 0.48095404356718063, + 0.4819228835403919, + 0.4824654087424278, + 0.4825849160552025, + 0.4822963774204254, + 0.48162586241960526, + 0.48060939460992813, + 0.47929203137755394, + 0.47772616147994995, + 0.4759700298309326, + 0.47408564761281013, + 0.4721371717751026, + 0.4701886307448149, + 0.4683019816875458, + 0.46653554402291775, + 0.4649416822940111, + 0.4635659158229828, + 0.46244502253830433, + 0.4616063516587019, + 0.46106707118451595, + 0.4608335215598345, + 0.4609014708548784, + 0.4612561333924532, + 0.46187301725149155, + 0.46271857246756554, + 0.4637517109513283, + 0.4649249706417322, + 0.46618617326021194, + 0.4674803540110588, + 0.468751335516572, + 0.46994396299123764, + 0.4710054937750101, + 0.47188764810562134, + 0.4725482016801834, + 0.4729519560933113, + 0.47307249903678894, + 0.4728924836963415, + 0.4724045731127262, + 0.4716113768517971, + 0.4705255776643753, + 0.46916921995580196, + 0.4675732795149088, + 0.4657763373106718, + 0.4638232756406069, + 0.4617640804499388, + 0.45965157449245453, + 0.4575402718037367, + 0.4554839516058564, + 0.4535341216251254, + 0.45173822902143, + 0.4501377223059535, + 0.4487668848596513, + 0.4476513038389385, + 0.44680710905231535, + 0.4462400167249143, + 0.4459453201852739, + 0.4459074556361884, + 0.44610066059976816, + 0.44648951618000865, + 0.44702982739545405, + 0.4476702339015901, + 0.4483533427119255, + 0.4490178423002362, + 0.44960015872493386, + 0.4500366491265595, + 0.4502657041884959, + 0.4502295167185366, + 0.449876366648823, + 0.4491621288470924, + 0.448052276391536, + 0.44652265473268926, + 0.4445611606352031, + 0.44216804986353964, + 0.4393563116900623, + 0.4361519571393728, + 0.43259319942444563, + 0.4287300379946828, + 0.42462287470698357, + 0.42034123837947845, + 0.41596209816634655, + 0.411567609757185, + 0.4072433076798916, + 0.40307557582855225, + 0.399149551987648, + 0.3955465517938137, + 0.3923421837389469, + 0.38960398361086845, + 0.38738952577114105, + 0.38574517145752907, + 0.3847041465342045, + 0.3842862881720066, + 0.38449684903025627, + 0.38532667234539986, + 0.3867524042725563, + 0.3887368366122246, + 0.391230221837759, + 0.3941713571548462, + 0.3974895067512989, + 0.4011060371994972, + 0.40493692085146904, + 0.4088946357369423, + 0.41289085149765015, + 0.4168386999517679, + 0.4206550233066082, + 0.4242629110813141, + 0.42759333178400993, + 0.4305872796103358, + 0.4331970326602459, + 0.43538755364716053, + 0.4371370240114629, + 0.4384376099333167, + 0.4392951864283532, + 0.43972898041829467, + 0.4397711134515703, + 0.4394649276509881, + 0.43886417942121625, + 0.438030737452209, + 0.43703295895829797, + 0.4359435420483351, + 0.43483702931553125, + 0.43378784600645304, + 0.43286778312176466, + 0.43214407470077276, + 0.43167712446302176, + 0.43151905108243227, + 0.4317118898034096, + 0.43228641618043184, + 0.43326145596802235, + 0.43464311584830284, + 0.4364250237122178, + 0.43858816754072905, + 0.4411018294049427, + 0.44392459344817325, + 0.44700522627681494, + 0.4502848805859685, + 0.453698324970901, + 0.4571763128042221, + 0.46064736135303974, + 0.46404021233320236, + 0.4672856852412224, + 0.47031873278319836, + 0.47308051586151123, + 0.4755198210477829, + 0.47759491950273514, + 0.47927412018179893, + 0.4805372580885887, + 0.4813757501542568, + 0.48179277032613754, + 0.4818032868206501, + 0.48143309727311134, + 0.4807182513177395, + 0.4797035902738571, + 0.4784415103495121, + 0.4769899956882, + 0.4754111245274544, + 0.47376885265111923, + 0.47212700732052326, + 0.4705476798117161, + 0.469088738784194, + 0.4678027667105198, + 0.4667349327355623, + 0.4659219905734062, + 0.4653912913054228, + 0.46515962295234203, + 0.46523344703018665, + 0.46560826897621155, + 0.46626930870115757, + 0.46719180792570114, + 0.46834233961999416, + 0.46967943757772446, + 0.47115563601255417, + 0.47271870635449886, + 0.4743134155869484, + 0.47588368505239487, + 0.47737403213977814, + 0.47873175144195557, + 0.47990838810801506, + 0.48086148127913475, + 0.4815559908747673, + 0.48196515440940857, + 0.4820716604590416, + 0.4818679355084896, + 0.48135659843683243, + 0.4805500768125057, + 0.47947047650814056, + 0.47814857214689255, + 0.4766227528452873, + 0.4749380238354206, + 0.4731439407914877, + 0.47129354253411293, + 0.46944099850952625, + 0.4676400702446699, + 0.4659422505646944, + 0.46439470909535885, + 0.46303893253207207, + 0.46190898679196835, + 0.461030475795269, + 0.46041927859187126, + 0.46008122339844704, + 0.46001129783689976, + 0.46019395999610424, + 0.46060334891080856, + 0.46120383590459824, + 0.4619513377547264, + 0.4627941995859146, + 0.46367507986724377, + 0.4645324628800154, + 0.46530274488031864, + 0.4659222885966301, + 0.4663292206823826, + 0.4664657972753048, + 0.4662800692021847, + 0.46572806872427464, + 0.464774863794446, + 0.4633965492248535, + 0.4615807384252548, + 0.4593276120722294, + 0.4566502692177892, + 0.4535744395107031, + 0.4501384189352393, + 0.4463920178823173, + 0.4423956939281197, + 0.4382188254967332, + 0.43393831606954336, + 0.42963635455816984, + 0.425398301333189, + 0.4213105943053961, + 0.41745817847549915, + 0.4139225222170353, + 0.4107790067791939, + 0.4080951139330864, + 0.4059285968542099, + 0.4043254293501377, + 0.4033191315829754, + 0.40292925760149956, + 0.40316117182374, + 0.40400560200214386, + 0.4054391533136368, + 0.4074246734380722, + 0.40991226956248283, + 0.41284083761274815, + 0.4161394592374563, + 0.4197296928614378, + 0.4235272817313671, + 0.42744480166584253, + 0.43139390274882317, + 0.4352875966578722, + 0.4390429158229381, + 0.4425827318918891, + 0.4458381556905806, + 0.44875005912035704, + 0.45127077493816614, + 0.45336529798805714, + 0.45501181297004223, + 0.45620245672762394, + 0.4569430258125067, + 0.45725299417972565, + 0.4571641655638814, + 0.45672022365033627, + 0.4559747017920017, + 0.45498957857489586, + 0.4538333183154464, + 0.4525784645229578, + 0.45129973348230124, + 0.4500714587047696, + 0.4489655802026391, + 0.44804921420291066, + 0.4473829776979983, + 0.4470189353451133, + 0.4469991005025804, + 0.4473544112406671, + 0.4481035857461393, + 0.4492529835551977, + 0.45079607237130404, + 0.4527140371501446, + 0.4549761535599828, + 0.4575409386307001, + 0.4603574834764004, + 0.463366761803627, + 0.4665037486702204, + 0.46969911083579063, + 0.4728816691786051, + 0.4759799689054489, + 0.4789250046014786, + 0.4816518649458885, + 0.48410163819789886, + 0.48622341826558113, + 0.48797522485256195, + 0.48932577297091484, + 0.4902547709643841, + 0.4907537214457989, + 0.4908260479569435, + 0.49048660323023796, + 0.48976142331957817, + 0.48868652805685997, + 0.48730695992708206, + 0.48567506670951843, + 0.48384910449385643, + 0.4818911552429199, + 0.4798652157187462, + 0.47783536091446877, + 0.4758635386824608, + 0.4740080274641514, + 0.47232126630842686, + 0.4708486218005419, + 0.4696270748972893, + 0.4686837811022997, + 0.46803597547113895, + 0.46768998354673386, + 0.4676415752619505, + 0.46787593699991703, + 0.4683685973286629, + 0.4690861012786627, + 0.46998721547424793, + 0.4710245355963707, + 0.47214585915207863, + 0.47329628840088844, + 0.47441965341567993, + 0.475460734218359, + 0.4763668440282345, + 0.47708970308303833, + 0.4775870740413666, + 0.4778238534927368, + 0.477773554623127, + 0.477418877184391, + 0.47675249725580215, + 0.4757770150899887, + 0.47450515627861023, + 0.4729590769857168, + 0.4711695909500122, + 0.46917545050382614, + 0.46702147647738457, + 0.4647576715797186, + 0.4624369740486145, + 0.4601138364523649, + 0.45784206315875053, + 0.4556732811033726, + 0.45365487691015005, + 0.45182835776358843, + 0.45022804010659456, + 0.4488795129582286, + 0.4477989999577403, + 0.4469922515563667, + 0.44645450869575143, + 0.44617036264389753, + 0.4461139705963433, + 0.4462500410154462, + 0.446534420363605, + 0.4469157294370234, + 0.4473366471938789, + 0.44773584557697177, + 0.44804994482547045, + 0.4482152573764324, + 0.4481701888144016, + 0.4478569831699133, + 0.4472240540198982, + 0.4462272389791906, + 0.4448320297524333, + 0.4430145032238215, + 0.4407623978331685, + 0.4380761431530118, + 0.43496878165751696, + 0.43146631959825754, + 0.4276070548221469, + 0.42344104684889317, + 0.4190287198871374, + 0.4144397545605898, + 0.4097510874271393, + 0.40504496544599533, + 0.40040698647499084, + 0.39592355862259865, + 0.39167994260787964, + 0.3877575248479843, + 0.38423188403248787, + 0.38117072731256485, + 0.378631629049778, + 0.3766610026359558, + 0.37529222667217255, + 0.374545119702816, + 0.3744250014424324, + 0.3749229460954666, + 0.3760153725743294, + 0.37766537070274353, + 0.3798231966793537, + 0.3824276961386204, + 0.38540828227996826, + 0.38868631422519684, + 0.39217785745859146, + 0.39579547196626663, + 0.3994508571922779, + 0.4030572883784771, + 0.4065316878259182, + 0.40979714691638947, + 0.4127847384661436, + 0.415435541421175, + 0.41770187206566334, + 0.4195488002151251, + 0.42095467261970043, + 0.4219115525484085, + 0.42242554016411304, + 0.4225158505141735, + 0.4222146812826395, + 0.42156554013490677, + 0.42062211222946644, + 0.41944655403494835, + 0.41810711845755577, + 0.4166766405105591, + 0.4152297414839268, + 0.41384092159569263, + 0.4125820230692625, + 0.4115203879773617, + 0.4107165839523077, + 0.41022265888750553, + 0.41008078679442406, + 0.41032178699970245, + 0.4109646249562502, + 0.4120154846459627, + 0.4134680088609457, + 0.41530329547822475, + 0.4174907021224499, + 0.4199888575822115, + 0.4227466955780983, + 0.42570535466074944, + 0.42879971116781235, + 0.43196059111505747, + 0.4351165876723826, + 0.43819651822559536, + 0.4411312746742624, + 0.44385585538111627, + 0.4463115828111768, + 0.44844723027199507, + 0.4502211371436715, + 0.45160177536308765, + 0.4525689957663417, + 0.45311419665813446, + 0.4532407931983471, + 0.4529637135565281, + 0.45230884943157434, + 0.45131232496351004, + 0.4500190168619156, + 0.4484814442694187, + 0.44675766583532095, + 0.4449097665492445, + 0.44300179032143205, + 0.4410976397830382, + 0.4392594286473468, + 0.43754518823698163, + 0.43600747268646955, + 0.4346915385685861, + 0.4336342057213187, + 0.4328628536313772, + 0.4323944207280874, + 0.4322353368625045, + 0.4323811670765281, + 0.4328172756358981, + 0.4335188725963235, + 0.4344525574706495, + 0.4355770917609334, + 0.43684486113488674, + 0.4382038055919111, + 0.4395987447351217, + 0.44097358987619373, + 0.4422729373909533, + 0.4434440708719194, + 0.4444387322291732, + 0.44521442148834467, + 0.4457361111417413, + 0.4459771094843745, + 0.44592015026137233, + 0.44555767718702555, + 0.4448923757299781, + 0.4439367998857051, + 0.4427129209507257, + 0.44125170091865584, + 0.4395914712222293, + 0.4377772780135274, + 0.43585879262536764, + 0.43388894526287913, + 0.43192211259156466, + 0.43001200165599585, + 0.42821010015904903, + 0.4265636336058378, + 0.4251141231507063, + 0.4238956291228533, + 0.4229338336735964, + 0.42224464751780033, + 0.4218338243663311, + 0.4216964952647686, + 0.42181701585650444, + 0.4221696387976408, + 0.4227187465876341, + 0.4234202168881893, + 0.42422243393957615, + 0.42506801523268223, + 0.4258956043049693, + 0.4266415173187852, + 0.4272420974448323, + 0.42763547599315643, + 0.4277640115469694, + 0.4275756664574146, + 0.4270264795050025, + 0.4260816089808941, + 0.42471700347959995, + 0.42292045801877975, + 0.42069205828011036, + 0.4180448744446039, + 0.41500466130673885, + 0.4116097055375576, + 0.4079097881913185, + 0.40396539121866226, + 0.3998459652066231, + 0.39562825858592987, + 0.3913945108652115, + 0.387230034917593, + 0.3832213170826435, + 0.37945328280329704, + 0.3760072812438011, + 0.37295886874198914, + 0.3703753277659416, + 0.3683144226670265, + 0.3668222054839134, + 0.36593207716941833, + 0.3656635731458664, + 0.3660220578312874, + 0.3669983074069023, + 0.3685687780380249, + 0.3706963360309601, + 0.3733310252428055, + 0.3764118030667305, + 0.37986763939261436, + 0.3836200647056103, + 0.3875848054885864, + 0.39167437329888344, + 0.3958004340529442, + 0.3998759612441063, + 0.40381789207458496, + 0.40754909068346024, + 0.41100061871111393, + 0.4141132812947035, + 0.4168394561856985, + 0.41914400458335876, + 0.4210050627589226, + 0.4224148169159889, + 0.42337892204523087, + 0.4239168018102646, + 0.42406030371785164, + 0.42385297268629074, + 0.42334831692278385, + 0.42260826379060745, + 0.42170122638344765, + 0.4206996913999319, + 0.419678321108222, + 0.4187113642692566, + 0.41787079349160194, + 0.41722357645630836, + 0.4168303031474352, + 0.41674297861754894, + 0.4170035272836685, + 0.4176428858190775, + 0.4186797086149454, + 0.42012023739516735, + 0.42195790261030197, + 0.4241737686097622, + 0.4267371967434883, + 0.42960654851049185, + 0.4327308195643127, + 0.4360509468242526, + 0.43950183916604146, + 0.44301409740000963, + 0.44651641184464097, + 0.44993743672966957, + 0.45320789609104395, + 0.45626295544207096, + 0.4590435363352299, + 0.46149867400527, + 0.4635863993316889, + 0.4652752075344324, + 0.46654491499066353, + 0.46738686226308346, + 0.4678043760359287, + 0.46781225875020027, + 0.4674364738166332, + 0.4667129423469305, + 0.4667129423469305, +]; + +criterion_group!(benches, fit, predict); +criterion_main!(benches); diff --git a/crates/augurs-prophet/build.rs b/crates/augurs-prophet/build.rs index f04edbe..0a774c8 100644 --- a/crates/augurs-prophet/build.rs +++ b/crates/augurs-prophet/build.rs @@ -7,7 +7,7 @@ /// - The `STAN_PATH` environment variable to be set to the /// path to the Stan installation. #[cfg(all(feature = "cmdstan", feature = "compile-cmdstan"))] -fn compile_model() -> Result<(), Box> { +fn compile_cmdstan_model() -> Result<(), Box> { use std::{fs, path::PathBuf, process::Command}; use tempfile::TempDir; @@ -65,25 +65,21 @@ fn compile_model() -> Result<(), Box> { Ok(()) } -fn fallback() -> Result<(), Box> { +fn create_empty_files(names: &[&str]) -> Result<(), Box> { let out_dir = std::path::PathBuf::from(std::env::var("OUT_DIR")?); std::fs::create_dir_all(&out_dir)?; - let prophet_path = out_dir.join("prophet"); - let libtbb_path = out_dir.join("libtbb.so.12"); - std::fs::File::create(&prophet_path)?; - std::fs::File::create(&libtbb_path)?; - eprintln!( - "Created empty files for prophet ({}) and libtbb ({})", - prophet_path.display(), - libtbb_path.display() - ); + for name in names { + let path = out_dir.join(name); + std::fs::File::create(&path)?; + eprintln!("Created empty file for {}", path.display()); + } Ok(()) } -fn main() -> Result<(), Box> { +fn handle_cmdstan() -> Result<(), Box> { let _result = Ok::<(), &'static str>(()); #[cfg(all(feature = "cmdstan", feature = "compile-cmdstan"))] - let _result = compile_model(); + let _result = compile_cmdstan_model(); // This is a complete hack but lets us get away with still using // the `--all-features` flag of Cargo without everything failing // if there isn't a Stan installation. @@ -94,12 +90,12 @@ fn main() -> Result<(), Box> { // feature. #[cfg(feature = "internal-ignore-cmdstan-failure")] if _result.is_err() { - fallback()?; + create_empty_files(&["prophet", "libtbb.so.12"])?; } // Do the same thing in docs.rs builds. #[cfg(not(feature = "internal-ignore-cmdstan-failure"))] if std::env::var("DOCS_RS").is_ok() { - fallback()?; + create_empty_files(&["prophet", "libtbb.so.12"])?; } // If we're not in a docs.rs build and we don't have the 'ignore' @@ -110,3 +106,8 @@ fn main() -> Result<(), Box> { } Ok(()) } + +fn main() -> Result<(), Box> { + handle_cmdstan()?; + Ok(()) +} diff --git a/crates/augurs-prophet/prophet-wasmstan.wit b/crates/augurs-prophet/prophet-wasmstan.wit new file mode 120000 index 0000000..f7045bb --- /dev/null +++ b/crates/augurs-prophet/prophet-wasmstan.wit @@ -0,0 +1 @@ +../../components/cpp/prophet-wasmstan/wit/prophet-wasmstan.wit \ No newline at end of file diff --git a/crates/augurs-prophet/src/cmdstan.rs b/crates/augurs-prophet/src/cmdstan.rs index 8895b6c..269051a 100644 --- a/crates/augurs-prophet/src/cmdstan.rs +++ b/crates/augurs-prophet/src/cmdstan.rs @@ -370,7 +370,7 @@ struct OptimizeCommand<'a> { refresh: usize, } -impl<'a> OptimizeCommand<'a> { +impl OptimizeCommand<'_> { fn run(&self) -> Result { // Set up temp dir and files. let tempdir = tempfile::tempdir()?; diff --git a/crates/augurs-prophet/src/lib.rs b/crates/augurs-prophet/src/lib.rs index ae7648c..374d633 100644 --- a/crates/augurs-prophet/src/lib.rs +++ b/crates/augurs-prophet/src/lib.rs @@ -13,6 +13,8 @@ mod util; #[cfg(feature = "cmdstan")] pub mod cmdstan; +#[cfg(feature = "wasmstan")] +pub mod wasmstan; /// A timestamp represented as seconds since the epoch. pub type TimestampSeconds = i64; diff --git a/crates/augurs-prophet/src/wasmstan.rs b/crates/augurs-prophet/src/wasmstan.rs new file mode 100644 index 0000000..207fa74 --- /dev/null +++ b/crates/augurs-prophet/src/wasmstan.rs @@ -0,0 +1,222 @@ +//! Use `wasmtime` to run the Prophet model inside a WebAssembly component. + +use std::fmt; + +use wasmtime::{ + component::{Component, Linker}, + Engine, Store, +}; +use wasmtime_wasi::{ResourceTable, WasiCtx, WasiView}; + +use crate::{ + optimizer::{self, Data, InitialParams, OptimizeOpts, OptimizedParams}, + Optimizer, +}; + +/// An error that can occur when using the `WasmStanOptimizer`. +#[derive(Debug, thiserror::Error)] +pub enum Error { + /// An error occurred while compiling the WebAssembly component. + #[error("Error compiling component: {0}")] + Compilation(wasmtime::Error), + /// An error occurred while instantiating the WebAssembly component. + #[error("Error instantiating component: {0}")] + Instantiation(wasmtime::Error), + /// An error occurred in wasmtime while running the WebAssembly component. + #[error("Error running component: {0}")] + Runtime(wasmtime::Error), + /// An error occurred in Stan while running the optimization. + #[error("Error running optimization: {0}")] + Optimize(String), + /// An invalid parameter value was received from the optimizer. + #[error("Invalid value ({value}) for parameter {param} received from optimizer")] + InvalidParam { + /// The parameter name. + param: String, + /// The value received from the optimizer. + value: f64, + }, +} + +#[allow(missing_docs)] +mod gen { + use wasmtime::component::bindgen; + + bindgen!({ + world: "prophet-wasmstan", + path: "prophet-wasmstan.wit", + // Uncomment this to include the pregenerated file in the `target` directory + // somewhere (search for `prophet-wasmstan0.rs`). + // include_generated_code_from_file: true, + }); +} + +use gen::*; + +struct WasiState { + ctx: WasiCtx, + table: ResourceTable, +} + +impl Default for WasiState { + fn default() -> Self { + Self { + ctx: WasiCtx::builder().build(), + table: Default::default(), + } + } +} + +impl WasiView for WasiState { + fn ctx(&mut self) -> &mut WasiCtx { + &mut self.ctx + } + fn table(&mut self) -> &mut ResourceTable { + &mut self.table + } +} + +/// An `Optimizer` which runs the Prophet model inside a WebAssembly +/// component. +#[derive(Clone)] +pub struct WasmstanOptimizer { + engine: Engine, + instance_pre: ProphetWasmstanPre, +} + +impl fmt::Debug for WasmstanOptimizer { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("WasmStanOptimizer").finish() + } +} + +impl WasmstanOptimizer { + /// Create a new `WasmStanOptimizer`. + pub fn new() -> Result { + // Create an engine in which to compile and run everything. + let engine = Engine::default(); + + // Create a component from the compiled and embedded WASM binary. + let component = Component::from_binary( + &engine, + include_bytes!(concat!( + std::env!("CARGO_MANIFEST_DIR"), + "/prophet-wasmstan.wasm" + )), + ) + .map_err(Error::Compilation)?; + + // Create a linker, which will add WASI imports to the component. + let mut linker = Linker::new(&engine); + wasmtime_wasi::add_to_linker_sync(&mut linker).map_err(Error::Instantiation)?; + + // Create a pre-instantiated component. + // This does as much work as possible here, so that `optimize` can + // be called multiple times with the minimum amount of overhead. + let instance_pre = linker + .instantiate_pre(&component) + .and_then(ProphetWasmstanPre::new) + .map_err(Error::Instantiation)?; + Ok(Self { + engine, + instance_pre, + }) + } + + /// Optimize the model using the given parameters. + fn wasm_optimize( + &self, + init: &augurs::prophet_wasmstan::types::Inits, + data: &String, + opts: augurs::prophet_wasmstan::types::OptimizeOpts, + ) -> Result { + let mut store = Store::new(&self.engine, WasiState::default()); + let instance = self + .instance_pre + .instantiate(&mut store) + .map_err(Error::Instantiation)?; + instance + .augurs_prophet_wasmstan_optimizer() + .call_optimize(&mut store, init, data, opts) + .map_err(Error::Runtime)? + .map_err(Error::Optimize) + .and_then(|op| op.params.try_into()) + } +} + +impl TryFrom for OptimizedParams { + type Error = Error; + fn try_from( + value: augurs::prophet_wasmstan::types::OptimizedParams, + ) -> Result { + Ok(Self { + k: value.k, + m: value.m, + sigma_obs: value + .sigma_obs + .try_into() + .map_err(|_| Error::InvalidParam { + param: "sigma_obs".to_string(), + value: value.sigma_obs, + })?, + delta: value.delta, + beta: value.beta, + trend: value.trend, + }) + } +} + +impl Optimizer for WasmstanOptimizer { + fn optimize( + &self, + init: &InitialParams, + data: &Data, + opts: &OptimizeOpts, + ) -> Result { + let data = serde_json::to_string(&data).map_err(optimizer::Error::custom)?; + self.wasm_optimize(&init.into(), &data, opts.into()) + .map_err(optimizer::Error::custom) + } +} + +impl From<&InitialParams> for augurs::prophet_wasmstan::types::Inits { + fn from(init: &InitialParams) -> Self { + Self { + k: init.k, + m: init.m, + sigma_obs: init.sigma_obs.into(), + delta: init.delta.clone(), + beta: init.beta.clone(), + } + } +} + +impl From<&OptimizeOpts> for augurs::prophet_wasmstan::types::OptimizeOpts { + fn from(opts: &OptimizeOpts) -> Self { + Self { + algorithm: opts.algorithm.map(Into::into), + seed: opts.seed, + chain: opts.chain, + init_alpha: opts.init_alpha, + tol_obj: opts.tol_obj, + tol_rel_obj: opts.tol_rel_obj, + tol_grad: opts.tol_grad, + tol_rel_grad: opts.tol_rel_grad, + tol_param: opts.tol_param, + history_size: opts.history_size, + iter: opts.iter, + jacobian: opts.jacobian, + refresh: opts.refresh, + } + } +} + +impl From for augurs::prophet_wasmstan::types::Algorithm { + fn from(algo: optimizer::Algorithm) -> Self { + match algo { + optimizer::Algorithm::Bfgs => Self::Bfgs, + optimizer::Algorithm::Lbfgs => Self::Lbfgs, + optimizer::Algorithm::Newton => Self::Newton, + } + } +} diff --git a/crates/augurs-prophet/tests/wasmstan.rs b/crates/augurs-prophet/tests/wasmstan.rs new file mode 100644 index 0000000..9831ae8 --- /dev/null +++ b/crates/augurs-prophet/tests/wasmstan.rs @@ -0,0 +1,2078 @@ +#![allow(missing_docs)] +use augurs_prophet::{ + optimizer::OptimizeOpts, wasmstan::WasmstanOptimizer, PredictionData, TimestampSeconds, + TrainingData, +}; +use augurs_testing::assert_all_close; + +use augurs_prophet::{Prophet, ProphetOptions}; + +#[test] +fn wasmstan() { + tracing_subscriber::fmt::init(); + let opts = ProphetOptions::default(); + let opt = WasmstanOptimizer::new().unwrap(); + let mut prophet = Prophet::new(opts, opt); + let training_data = TrainingData::new(TRAINING_DS.to_vec(), TRAINING_Y.to_vec()).unwrap(); + tracing::info!("fitting"); + prophet + .fit( + training_data, + OptimizeOpts { + seed: Some(100), + ..Default::default() + }, + ) + .unwrap(); + let prediction_data = PredictionData::new(PREDICTION_DS.to_vec()); + tracing::info!("predicting"); + let predictions = prophet.predict(Some(prediction_data)).unwrap(); + tracing::info!("done"); + assert_all_close(&predictions.yhat.point, EXPECTED); +} + +static TRAINING_DS: &[TimestampSeconds] = &[ + 1727168400, 1727169600, 1727170800, 1727172000, 1727173200, 1727174400, 1727175600, 1727176800, + 1727178000, 1727179200, 1727180400, 1727181600, 1727182800, 1727184000, 1727185200, 1727186400, + 1727187600, 1727188800, 1727190000, 1727191200, 1727192400, 1727193600, 1727194800, 1727196000, + 1727197200, 1727198400, 1727199600, 1727200800, 1727202000, 1727203200, 1727204400, 1727205600, + 1727206800, 1727208000, 1727209200, 1727210400, 1727211600, 1727212800, 1727214000, 1727215200, + 1727216400, 1727217600, 1727218800, 1727220000, 1727221200, 1727222400, 1727223600, 1727224800, + 1727226000, 1727227200, 1727228400, 1727229600, 1727230800, 1727232000, 1727233200, 1727234400, + 1727235600, 1727236800, 1727238000, 1727239200, 1727240400, 1727241600, 1727242800, 1727244000, + 1727245200, 1727246400, 1727247600, 1727248800, 1727250000, 1727251200, 1727252400, 1727253600, + 1727254800, 1727256000, 1727257200, 1727258400, 1727259600, 1727260800, 1727262000, 1727263200, + 1727264400, 1727265600, 1727266800, 1727268000, 1727269200, 1727270400, 1727271600, 1727272800, + 1727274000, 1727275200, 1727276400, 1727277600, 1727278800, 1727280000, 1727281200, 1727282400, + 1727283600, 1727284800, 1727286000, 1727287200, 1727288400, 1727289600, 1727290800, 1727292000, + 1727293200, 1727294400, 1727295600, 1727296800, 1727298000, 1727299200, 1727300400, 1727301600, + 1727302800, 1727304000, 1727305200, 1727306400, 1727307600, 1727308800, 1727310000, 1727311200, + 1727312400, 1727313600, 1727314800, 1727316000, 1727317200, 1727318400, 1727319600, 1727320800, + 1727322000, 1727323200, 1727324400, 1727325600, 1727326800, 1727328000, 1727329200, 1727330400, + 1727331600, 1727332800, 1727334000, 1727335200, 1727336400, 1727337600, 1727338800, 1727340000, + 1727341200, 1727342400, 1727343600, 1727344800, 1727346000, 1727347200, 1727348400, 1727349600, + 1727350800, 1727352000, 1727353200, 1727354400, 1727355600, 1727356800, 1727358000, 1727359200, + 1727360400, 1727361600, 1727362800, 1727364000, 1727365200, 1727366400, 1727367600, 1727368800, + 1727370000, 1727371200, 1727372400, 1727373600, 1727374800, 1727376000, 1727377200, 1727378400, + 1727379600, 1727380800, 1727382000, 1727383200, 1727384400, 1727385600, 1727386800, 1727388000, + 1727389200, 1727390400, 1727391600, 1727392800, 1727394000, 1727395200, 1727396400, 1727397600, + 1727398800, 1727400000, 1727401200, 1727402400, 1727403600, 1727404800, 1727406000, 1727407200, + 1727408400, 1727409600, 1727410800, 1727412000, 1727413200, 1727414400, 1727415600, 1727416800, + 1727418000, 1727419200, 1727420400, 1727421600, 1727422800, 1727424000, 1727425200, 1727426400, + 1727427600, 1727428800, 1727430000, 1727431200, 1727432400, 1727433600, 1727434800, 1727436000, + 1727437200, 1727438400, 1727439600, 1727440800, 1727442000, 1727443200, 1727444400, 1727445600, + 1727446800, 1727448000, 1727449200, 1727450400, 1727451600, 1727452800, 1727454000, 1727455200, + 1727456400, 1727457600, 1727458800, 1727460000, 1727461200, 1727462400, 1727463600, 1727464800, + 1727466000, 1727467200, 1727468400, 1727469600, 1727470800, 1727472000, 1727473200, 1727474400, + 1727475600, 1727476800, 1727478000, 1727479200, 1727480400, 1727481600, 1727482800, 1727484000, + 1727485200, 1727486400, 1727487600, 1727488800, 1727490000, 1727491200, 1727492400, 1727493600, + 1727494800, 1727496000, 1727497200, 1727498400, 1727499600, 1727500800, 1727502000, 1727503200, + 1727504400, 1727505600, 1727506800, 1727508000, 1727509200, 1727510400, 1727511600, 1727512800, + 1727514000, 1727515200, 1727516400, 1727517600, 1727518800, 1727520000, 1727521200, 1727522400, + 1727523600, 1727524800, 1727526000, 1727527200, 1727528400, 1727529600, 1727530800, 1727532000, + 1727533200, 1727534400, 1727535600, 1727536800, 1727538000, 1727539200, 1727540400, 1727541600, + 1727542800, 1727544000, 1727545200, 1727546400, 1727547600, 1727548800, 1727550000, 1727551200, + 1727552400, 1727553600, 1727554800, 1727556000, 1727557200, 1727558400, 1727559600, 1727560800, + 1727562000, 1727563200, 1727564400, 1727565600, 1727566800, 1727568000, 1727569200, 1727570400, + 1727571600, 1727572800, 1727574000, 1727575200, 1727576400, 1727577600, 1727578800, 1727580000, + 1727581200, 1727582400, 1727583600, 1727584800, 1727586000, 1727587200, 1727588400, 1727589600, + 1727590800, 1727592000, 1727593200, 1727594400, 1727595600, 1727596800, 1727598000, 1727599200, + 1727600400, 1727601600, 1727602800, 1727604000, 1727605200, 1727606400, 1727607600, 1727608800, + 1727610000, 1727611200, 1727612400, 1727613600, 1727614800, 1727616000, 1727617200, 1727618400, + 1727619600, 1727620800, 1727622000, 1727623200, 1727624400, 1727625600, 1727626800, 1727628000, + 1727629200, 1727630400, 1727631600, 1727632800, 1727634000, 1727635200, 1727636400, 1727637600, + 1727638800, 1727640000, 1727641200, 1727642400, 1727643600, 1727644800, 1727646000, 1727647200, + 1727648400, 1727649600, 1727650800, 1727652000, 1727653200, 1727654400, 1727655600, 1727656800, + 1727658000, 1727659200, 1727660400, 1727661600, 1727662800, 1727664000, 1727665200, 1727666400, + 1727667600, 1727668800, 1727670000, 1727671200, 1727672400, 1727673600, 1727674800, 1727676000, + 1727677200, 1727678400, 1727679600, 1727680800, 1727682000, 1727683200, 1727684400, 1727685600, + 1727686800, 1727688000, 1727689200, 1727690400, 1727691600, 1727692800, 1727694000, 1727695200, + 1727696400, 1727697600, 1727698800, 1727700000, 1727701200, 1727702400, 1727703600, 1727704800, + 1727706000, 1727707200, 1727708400, 1727709600, 1727710800, 1727712000, 1727713200, 1727714400, + 1727715600, 1727716800, 1727718000, 1727719200, 1727720400, 1727721600, 1727722800, 1727724000, + 1727725200, 1727726400, 1727727600, 1727728800, 1727730000, 1727731200, 1727732400, 1727733600, + 1727734800, 1727736000, 1727737200, 1727738400, 1727739600, 1727740800, 1727742000, 1727743200, + 1727744400, 1727745600, 1727746800, 1727748000, 1727749200, 1727750400, 1727751600, 1727752800, + 1727754000, 1727755200, 1727756400, 1727757600, 1727758800, 1727760000, 1727761200, 1727762400, + 1727763600, 1727764800, 1727766000, 1727767200, 1727768400, 1727769600, 1727770800, 1727772000, + 1727773200, 1727774400, 1727775600, 1727776800, 1727778000, 1727779200, 1727780400, 1727781600, + 1727782800, 1727784000, 1727785200, 1727786400, 1727787600, 1727788800, 1727790000, 1727791200, + 1727792400, 1727793600, 1727794800, 1727796000, 1727797200, 1727798400, 1727799600, 1727800800, + 1727802000, 1727803200, 1727804400, 1727805600, 1727806800, 1727808000, 1727809200, 1727810400, + 1727811600, 1727812800, 1727814000, 1727815200, 1727816400, 1727817600, 1727818800, 1727820000, + 1727821200, 1727822400, 1727823600, 1727824800, 1727826000, 1727827200, 1727828400, 1727829600, + 1727830800, 1727832000, 1727833200, 1727834400, 1727835600, 1727836800, 1727838000, 1727839200, + 1727840400, 1727841600, 1727842800, 1727844000, 1727845200, 1727846400, 1727847600, 1727848800, + 1727850000, 1727851200, 1727852400, 1727853600, 1727854800, 1727856000, 1727857200, 1727858400, + 1727859600, 1727860800, 1727862000, 1727863200, 1727864400, 1727865600, 1727866800, 1727868000, + 1727869200, 1727870400, 1727871600, 1727872800, 1727874000, 1727875200, 1727876400, 1727877600, + 1727878800, 1727880000, 1727881200, 1727882400, 1727883600, 1727884800, 1727886000, 1727887200, + 1727888400, 1727889600, 1727890800, 1727892000, 1727893200, 1727894400, 1727895600, 1727896800, + 1727898000, 1727899200, 1727900400, 1727901600, 1727902800, 1727904000, 1727905200, 1727906400, + 1727907600, 1727908800, 1727910000, 1727911200, 1727912400, 1727913600, 1727914800, 1727916000, + 1727917200, 1727918400, 1727919600, 1727920800, 1727922000, 1727923200, 1727924400, 1727925600, + 1727926800, 1727928000, 1727929200, 1727930400, 1727931600, 1727932800, 1727934000, 1727935200, + 1727936400, 1727937600, 1727938800, 1727940000, 1727941200, 1727942400, 1727943600, 1727944800, + 1727946000, 1727947200, 1727948400, 1727949600, 1727950800, 1727952000, 1727953200, 1727954400, + 1727955600, 1727956800, 1727958000, 1727959200, 1727960400, 1727961600, 1727962800, 1727964000, + 1727965200, 1727966400, 1727967600, 1727968800, 1727970000, 1727971200, 1727972400, 1727973600, + 1727974800, 1727976000, 1727977200, 1727978400, 1727979600, 1727980800, 1727982000, 1727983200, + 1727984400, 1727985600, 1727986800, 1727988000, 1727989200, 1727990400, 1727991600, 1727992800, + 1727994000, 1727995200, 1727996400, 1727997600, 1727998800, 1728000000, 1728001200, 1728002400, + 1728003600, 1728004800, 1728006000, 1728007200, 1728008400, 1728009600, 1728010800, 1728012000, + 1728013200, 1728014400, 1728015600, 1728016800, 1728018000, 1728019200, 1728020400, 1728021600, + 1728022800, 1728024000, 1728025200, 1728026400, 1728027600, 1728028800, 1728030000, 1728031200, + 1728032400, 1728033600, 1728034800, 1728036000, 1728037200, 1728038400, 1728039600, 1728040800, + 1728042000, 1728043200, 1728044400, 1728045600, 1728046800, 1728048000, 1728049200, 1728050400, + 1728051600, 1728052800, 1728054000, 1728055200, 1728056400, 1728057600, 1728058800, 1728060000, + 1728061200, 1728062400, 1728063600, 1728064800, 1728066000, 1728067200, 1728068400, 1728069600, + 1728070800, 1728072000, 1728073200, 1728074400, 1728075600, 1728076800, 1728078000, 1728079200, + 1728080400, 1728081600, 1728082800, 1728084000, 1728085200, 1728086400, 1728087600, 1728088800, + 1728090000, 1728091200, 1728092400, 1728093600, 1728094800, 1728096000, 1728097200, 1728098400, + 1728099600, 1728100800, 1728102000, 1728103200, 1728104400, 1728105600, 1728106800, 1728108000, + 1728109200, 1728110400, 1728111600, 1728112800, 1728114000, 1728115200, 1728116400, 1728117600, + 1728118800, 1728120000, 1728121200, 1728122400, 1728123600, 1728124800, 1728126000, 1728127200, + 1728128400, 1728129600, 1728130800, 1728132000, 1728133200, 1728134400, 1728135600, 1728136800, + 1728138000, 1728139200, 1728140400, 1728141600, 1728142800, 1728144000, 1728145200, 1728146400, + 1728147600, 1728148800, 1728150000, 1728151200, 1728152400, 1728153600, 1728154800, 1728156000, + 1728157200, 1728158400, 1728159600, 1728160800, 1728162000, 1728163200, 1728164400, 1728165600, + 1728166800, 1728168000, 1728169200, 1728170400, 1728171600, 1728172800, 1728174000, 1728175200, + 1728176400, 1728177600, 1728178800, 1728180000, 1728181200, 1728182400, 1728183600, 1728184800, + 1728186000, 1728187200, 1728188400, 1728189600, 1728190800, 1728192000, 1728193200, 1728194400, + 1728195600, 1728196800, 1728198000, 1728199200, 1728200400, 1728201600, 1728202800, 1728204000, + 1728205200, 1728206400, 1728207600, 1728208800, 1728210000, 1728211200, 1728212400, 1728213600, + 1728214800, 1728216000, 1728217200, 1728218400, 1728219600, 1728220800, 1728222000, 1728223200, + 1728224400, 1728225600, 1728226800, 1728228000, 1728229200, 1728230400, 1728231600, 1728232800, + 1728234000, 1728235200, 1728236400, 1728237600, 1728238800, 1728240000, 1728241200, 1728242400, + 1728243600, 1728244800, 1728246000, 1728247200, 1728248400, 1728249600, 1728250800, 1728252000, + 1728253200, 1728254400, 1728255600, 1728256800, 1728258000, 1728259200, 1728260400, 1728261600, + 1728262800, 1728264000, 1728265200, 1728266400, 1728267600, 1728268800, 1728270000, 1728271200, + 1728272400, 1728273600, 1728274800, 1728276000, 1728277200, 1728278400, 1728279600, 1728280800, + 1728282000, 1728283200, 1728284400, 1728285600, 1728286800, 1728288000, 1728289200, 1728290400, + 1728291600, 1728292800, 1728294000, 1728295200, 1728296400, 1728297600, 1728298800, 1728300000, + 1728301200, 1728302400, 1728303600, 1728304800, 1728306000, 1728307200, 1728308400, 1728309600, + 1728310800, 1728312000, 1728313200, 1728314400, 1728315600, 1728316800, 1728318000, 1728319200, + 1728320400, 1728321600, 1728322800, 1728324000, 1728325200, 1728326400, 1728327600, 1728328800, + 1728330000, 1728331200, 1728332400, 1728333600, 1728334800, 1728336000, 1728337200, 1728338400, + 1728339600, 1728340800, 1728342000, 1728343200, 1728344400, 1728345600, 1728346800, 1728348000, + 1728349200, 1728350400, 1728351600, 1728352800, 1728354000, 1728355200, 1728356400, 1728357600, + 1728358800, 1728360000, 1728361200, 1728362400, 1728363600, 1728364800, 1728366000, 1728367200, + 1728368400, 1728369600, 1728370800, 1728372000, 1728373200, 1728374400, 1728375600, 1728376800, + 1728378000, 1728379200, 1728380400, 1728381600, 1728382800, 1728384000, 1728385200, 1728386400, + 1728387600, 1728388800, 1728390000, 1728391200, 1728392400, 1728393600, 1728394800, 1728396000, + 1728397200, 1728398400, 1728399600, 1728400800, 1728402000, 1728403200, 1728404400, 1728405600, + 1728406800, 1728408000, 1728409200, 1728410400, 1728411600, 1728412800, 1728414000, 1728415200, + 1728416400, 1728417600, 1728418800, 1728420000, 1728421200, 1728422400, 1728423600, 1728424800, + 1728426000, 1728427200, 1728428400, 1728429600, 1728430800, 1728432000, 1728433200, 1728434400, + 1728435600, 1728436800, 1728438000, 1728439200, 1728440400, 1728441600, 1728442800, 1728444000, + 1728445200, 1728446400, 1728447600, 1728448800, 1728450000, 1728451200, 1728452400, 1728453600, + 1728454800, 1728456000, 1728457200, 1728458400, 1728459600, 1728460800, 1728462000, 1728463200, + 1728464400, 1728465600, 1728466800, 1728468000, 1728469200, 1728470400, 1728471600, 1728472800, + 1728474000, 1728475200, 1728476400, 1728477600, 1728478800, 1728480000, 1728481200, 1728482400, + 1728483600, 1728484800, 1728486000, 1728487200, 1728488400, 1728489600, 1728490800, 1728492000, + 1728493200, 1728494400, 1728495600, 1728496800, 1728498000, 1728499200, 1728500400, 1728501600, + 1728502800, 1728504000, 1728505200, 1728506400, 1728507600, 1728508800, 1728510000, 1728511200, + 1728512400, 1728513600, 1728514800, 1728516000, 1728517200, 1728518400, 1728519600, 1728520800, + 1728522000, 1728523200, 1728524400, 1728525600, 1728526800, 1728528000, 1728529200, 1728530400, + 1728531600, 1728532800, 1728534000, 1728535200, 1728536400, 1728537600, 1728538800, 1728540000, + 1728541200, 1728542400, 1728543600, 1728544800, 1728546000, 1728547200, 1728548400, 1728549600, + 1728550800, 1728552000, 1728553200, 1728554400, 1728555600, 1728556800, 1728558000, 1728559200, + 1728560400, 1728561600, 1728562800, 1728564000, 1728565200, 1728566400, 1728567600, 1728568800, + 1728570000, 1728571200, 1728572400, 1728573600, 1728574800, 1728576000, 1728577200, 1728578400, + 1728579600, 1728580800, 1728582000, 1728583200, 1728584400, 1728585600, 1728586800, 1728588000, + 1728589200, 1728590400, 1728591600, 1728592800, 1728594000, 1728595200, 1728596400, 1728597600, + 1728598800, 1728600000, 1728601200, 1728602400, 1728603600, 1728604800, 1728606000, 1728607200, + 1728608400, 1728609600, 1728610800, 1728612000, 1728613200, 1728614400, 1728615600, 1728616800, + 1728618000, 1728619200, 1728620400, 1728621600, 1728622800, 1728624000, 1728625200, 1728626400, + 1728627600, 1728628800, 1728630000, 1728631200, 1728632400, 1728633600, 1728634800, 1728636000, + 1728637200, 1728638400, 1728639600, 1728640800, 1728642000, 1728643200, 1728644400, 1728645600, + 1728646800, 1728648000, 1728649200, 1728650400, 1728651600, 1728652800, 1728654000, 1728655200, + 1728656400, 1728657600, 1728658800, 1728660000, 1728661200, 1728662400, 1728663600, 1728664800, + 1728666000, 1728667200, 1728668400, 1728669600, 1728670800, 1728672000, 1728673200, 1728674400, + 1728675600, 1728676800, 1728678000, 1728679200, 1728680400, 1728681600, 1728682800, 1728684000, + 1728685200, 1728686400, 1728687600, 1728688800, 1728690000, 1728691200, 1728692400, 1728693600, + 1728694800, 1728696000, 1728697200, 1728698400, 1728699600, 1728700800, 1728702000, 1728703200, + 1728704400, 1728705600, 1728706800, 1728708000, 1728709200, 1728710400, 1728711600, 1728712800, + 1728714000, 1728715200, 1728716400, 1728717600, 1728718800, 1728720000, 1728721200, 1728722400, + 1728723600, 1728724800, 1728726000, 1728727200, 1728728400, 1728729600, 1728730800, 1728732000, + 1728733200, 1728734400, 1728735600, 1728736800, 1728738000, 1728739200, 1728740400, 1728741600, + 1728742800, 1728744000, 1728745200, 1728746400, 1728747600, 1728748800, 1728750000, 1728751200, + 1728752400, 1728753600, 1728754800, 1728756000, 1728757200, 1728758400, 1728759600, 1728760800, + 1728762000, 1728763200, 1728764400, 1728765600, 1728766800, 1728768000, 1728769200, 1728770400, + 1728771600, 1728772800, 1728774000, 1728775200, 1728776400, 1728777600, 1728778800, 1728780000, + 1728781200, 1728782400, 1728783600, 1728784800, 1728786000, 1728787200, 1728788400, 1728789600, + 1728790800, 1728792000, 1728793200, 1728794400, 1728795600, 1728796800, 1728798000, 1728799200, + 1728800400, 1728801600, 1728802800, 1728804000, 1728805200, 1728806400, 1728807600, 1728808800, + 1728810000, 1728811200, 1728812400, 1728813600, 1728814800, 1728816000, 1728817200, 1728818400, + 1728819600, 1728820800, 1728822000, 1728823200, 1728824400, 1728825600, 1728826800, 1728828000, + 1728829200, 1728830400, 1728831600, 1728832800, 1728834000, 1728835200, 1728836400, 1728837600, + 1728838800, 1728840000, 1728841200, 1728842400, 1728843600, 1728844800, 1728846000, 1728847200, + 1728848400, 1728849600, 1728850800, 1728852000, 1728853200, 1728854400, 1728855600, 1728856800, + 1728858000, 1728859200, 1728860400, 1728861600, 1728862800, 1728864000, 1728865200, 1728866400, + 1728867600, 1728868800, 1728870000, 1728871200, 1728872400, 1728873600, 1728874800, 1728876000, + 1728877200, 1728878400, 1728879600, 1728880800, 1728882000, 1728883200, 1728884400, 1728885600, + 1728886800, 1728888000, 1728889200, 1728890400, 1728891600, 1728892800, 1728894000, 1728895200, + 1728896400, 1728897600, 1728898800, 1728900000, 1728901200, 1728902400, 1728903600, 1728904800, + 1728906000, 1728907200, 1728908400, 1728909600, 1728910800, 1728912000, 1728913200, 1728914400, + 1728915600, 1728916800, 1728918000, 1728919200, 1728920400, 1728921600, 1728922800, 1728924000, + 1728925200, 1728926400, 1728927600, 1728928800, 1728930000, 1728931200, 1728932400, 1728933600, + 1728934800, 1728936000, 1728937200, 1728938400, 1728939600, 1728940800, 1728942000, 1728943200, + 1728944400, 1728945600, 1728946800, 1728948000, 1728949200, 1728950400, 1728951600, 1728952800, + 1728954000, 1728955200, 1728956400, 1728957600, 1728958800, 1728960000, 1728961200, 1728962400, + 1728963600, 1728964800, 1728966000, 1728967200, 1728968400, 1728969600, 1728970800, 1728972000, + 1728973200, 1728974400, 1728975600, 1728976800, 1728978000, 1728979200, 1728980400, 1728981600, + 1728982800, 1728984000, 1728985200, 1728986400, 1728987600, 1728988800, 1728990000, 1728991200, + 1728992400, 1728993600, 1728994800, 1728996000, 1728997200, 1728998400, 1728999600, 1729000800, + 1729002000, 1729003200, 1729004400, 1729005600, 1729006800, 1729008000, 1729009200, 1729010400, + 1729011600, 1729012800, 1729014000, 1729015200, 1729016400, 1729017600, 1729018800, 1729020000, + 1729021200, 1729022400, 1729023600, 1729024800, 1729026000, 1729027200, 1729028400, 1729029600, + 1729030800, 1729032000, 1729033200, 1729034400, 1729035600, 1729036800, 1729038000, 1729039200, + 1729040400, 1729041600, 1729042800, 1729044000, 1729045200, 1729046400, 1729047600, 1729048800, + 1729050000, 1729051200, 1729052400, 1729053600, 1729054800, 1729056000, 1729057200, 1729058400, + 1729059600, 1729060800, 1729062000, 1729063200, 1729064400, 1729065600, 1729066800, 1729068000, + 1729069200, 1729070400, 1729071600, 1729072800, 1729074000, 1729075200, 1729076400, 1729077600, + 1729078800, 1729080000, 1729081200, 1729082400, 1729083600, 1729084800, 1729086000, 1729087200, + 1729088400, 1729089600, 1729090800, 1729092000, 1729093200, 1729094400, 1729095600, 1729096800, + 1729098000, 1729099200, 1729100400, 1729101600, 1729102800, 1729104000, 1729105200, 1729106400, + 1729107600, 1729108800, 1729110000, 1729111200, 1729112400, 1729113600, 1729114800, 1729116000, + 1729117200, 1729118400, 1729119600, 1729120800, 1729122000, 1729123200, 1729124400, 1729125600, + 1729126800, 1729128000, 1729129200, 1729130400, 1729131600, 1729132800, 1729134000, 1729135200, + 1729136400, 1729137600, 1729138800, 1729140000, 1729141200, 1729142400, 1729143600, 1729144800, + 1729146000, 1729147200, 1729148400, 1729149600, 1729150800, 1729152000, 1729153200, 1729154400, + 1729155600, 1729156800, 1729158000, 1729159200, 1729160400, 1729161600, 1729162800, 1729164000, + 1729165200, 1729166400, 1729167600, 1729168800, 1729170000, 1729171200, 1729172400, 1729173600, + 1729174800, 1729176000, 1729177200, 1729178400, 1729179600, 1729182000, 1729183200, 1729184400, + 1729185600, 1729186800, 1729188000, 1729189200, 1729190400, 1729191600, 1729192800, 1729194000, + 1729195200, 1729196400, 1729197600, 1729198800, 1729200000, 1729201200, 1729202400, 1729203600, + 1729204800, 1729206000, 1729207200, 1729208400, 1729209600, 1729210800, 1729212000, 1729213200, + 1729214400, 1729215600, 1729216800, 1729218000, 1729219200, 1729220400, 1729221600, 1729222800, + 1729224000, 1729225200, 1729226400, 1729227600, 1729228800, 1729230000, 1729231200, 1729232400, + 1729233600, 1729234800, 1729236000, 1729237200, 1729238400, 1729239600, 1729240800, 1729242000, + 1729243200, 1729244400, 1729245600, 1729246800, 1729248000, 1729249200, 1729250400, 1729251600, + 1729252800, 1729254000, 1729255200, 1729256400, 1729257600, 1729258800, 1729260000, 1729261200, + 1729262400, 1729264800, 1729266000, 1729267200, 1729268400, 1729269600, 1729270800, 1729272000, + 1729273200, 1729274400, 1729275600, 1729276800, 1729278000, 1729279200, 1729280400, 1729281600, + 1729282800, 1729284000, 1729285200, 1729286400, 1729287600, 1729288800, 1729290000, 1729291200, + 1729292400, 1729293600, 1729294800, 1729296000, 1729297200, 1729298400, 1729299600, 1729300800, + 1729302000, 1729303200, 1729304400, 1729305600, 1729306800, 1729308000, 1729309200, 1729310400, + 1729311600, 1729312800, 1729314000, 1729315200, 1729316400, 1729317600, 1729318800, 1729320000, + 1729321200, 1729322400, 1729323600, 1729324800, 1729326000, 1729327200, 1729328400, 1729329600, + 1729330800, 1729332000, 1729333200, 1729334400, 1729335600, 1729336800, 1729338000, 1729339200, + 1729340400, 1729341600, 1729342800, 1729344000, 1729345200, 1729346400, 1729347600, 1729348800, + 1729350000, 1729351200, 1729352400, 1729353600, 1729354800, 1729356000, 1729357200, 1729358400, + 1729359600, 1729360800, 1729362000, 1729363200, 1729364400, 1729365600, 1729366800, 1729368000, + 1729369200, 1729370400, 1729371600, 1729372800, 1729374000, 1729375200, 1729376400, 1729377600, + 1729378800, 1729380000, 1729381200, 1729382400, 1729383600, 1729384800, 1729386000, 1729387200, + 1729388400, 1729389600, 1729390800, 1729392000, 1729393200, 1729394400, 1729395600, 1729396800, + 1729398000, 1729399200, 1729400400, 1729401600, 1729402800, 1729404000, 1729405200, 1729406400, + 1729407600, 1729408800, 1729410000, 1729411200, 1729412400, 1729413600, 1729414800, 1729416000, + 1729417200, 1729418400, 1729419600, 1729420800, 1729422000, 1729423200, 1729424400, 1729425600, + 1729426800, 1729428000, 1729429200, 1729430400, 1729431600, 1729432800, 1729434000, 1729435200, + 1729436400, 1729437600, 1729438800, 1729440000, 1729441200, 1729442400, 1729443600, 1729444800, + 1729446000, 1729447200, 1729448400, 1729449600, 1729450800, 1729452000, 1729453200, 1729454400, + 1729455600, 1729456800, 1729458000, 1729459200, 1729460400, 1729461600, 1729462800, 1729464000, + 1729465200, 1729466400, 1729467600, 1729468800, 1729470000, 1729471200, 1729472400, 1729473600, + 1729474800, 1729476000, 1729477200, 1729478400, 1729479600, 1729480800, 1729482000, 1729483200, + 1729484400, 1729485600, 1729486800, 1729488000, 1729489200, 1729490400, 1729491600, 1729492800, + 1729494000, 1729495200, 1729496400, 1729497600, 1729498800, 1729500000, 1729501200, 1729502400, + 1729503600, 1729504800, 1729506000, 1729507200, 1729508400, 1729509600, 1729510800, 1729512000, + 1729513200, 1729514400, 1729515600, 1729516800, 1729518000, 1729519200, 1729520400, 1729521600, + 1729522800, 1729524000, 1729525200, 1729526400, 1729527600, 1729528800, 1729530000, 1729531200, + 1729532400, 1729533600, 1729534800, 1729536000, 1729537200, 1729538400, 1729539600, 1729540800, + 1729542000, 1729543200, 1729544400, 1729545600, 1729546800, 1729548000, 1729549200, 1729550400, + 1729551600, 1729552800, 1729554000, 1729555200, 1729556400, 1729557600, 1729558800, 1729560000, + 1729561200, 1729562400, 1729563600, 1729564800, 1729566000, 1729567200, 1729568400, 1729569600, + 1729570800, 1729572000, 1729573200, 1729574400, 1729575600, 1729576800, 1729578000, 1729579200, + 1729580400, 1729581600, 1729582800, 1729584000, 1729585200, 1729586400, 1729587600, 1729588800, + 1729590000, 1729591200, 1729592400, 1729593600, 1729594800, 1729596000, 1729597200, 1729598400, + 1729599600, 1729600800, 1729602000, 1729603200, 1729604400, 1729605600, 1729606800, 1729608000, + 1729609200, 1729610400, 1729611600, 1729612800, 1729614000, 1729615200, 1729616400, 1729617600, + 1729618800, 1729620000, 1729621200, 1729622400, 1729623600, 1729624800, 1729626000, 1729627200, + 1729628400, 1729629600, 1729630800, 1729632000, 1729633200, 1729634400, 1729635600, 1729636800, + 1729638000, 1729639200, 1729640400, 1729641600, 1729642800, 1729644000, 1729645200, 1729646400, + 1729647600, 1729648800, 1729650000, 1729651200, 1729652400, 1729653600, 1729654800, 1729656000, + 1729657200, 1729658400, 1729659600, 1729660800, 1729662000, 1729663200, 1729664400, 1729665600, + 1729666800, 1729668000, 1729669200, 1729670400, 1729671600, 1729672800, 1729674000, 1729675200, + 1729676400, 1729677600, 1729678800, 1729680000, 1729681200, 1729682400, 1729683600, 1729684800, + 1729686000, 1729687200, 1729688400, 1729689600, 1729690800, 1729692000, 1729693200, 1729695600, + 1729696800, 1729698000, 1729699200, 1729700400, 1729701600, 1729702800, 1729704000, 1729705200, + 1729706400, 1729707600, 1729708800, 1729710000, 1729711200, 1729712400, 1729713600, 1729714800, + 1729716000, 1729717200, 1729718400, 1729719600, 1729720800, 1729722000, 1729723200, 1729724400, + 1729725600, 1729726800, 1729728000, 1729729200, 1729730400, 1729731600, 1729732800, 1729734000, + 1729735200, 1729736400, 1729737600, 1729738800, 1729740000, 1729741200, 1729742400, 1729743600, + 1729744800, 1729746000, 1729747200, 1729748400, 1729749600, 1729750800, 1729752000, 1729753200, + 1729754400, 1729755600, 1729756800, 1729758000, 1729759200, 1729760400, +]; + +static TRAINING_Y: &[f64] = &[ + 0.3, 0.27, 0.03, 0.94, 0.78, 0.69, 0.25, 0.7, 0.55, 0.18, 0.24, 0.97, 0.55, 0.69, 0.1, 0.34, + 0.25, 1.47, 1.25, 0.51, 1.08, 0.34, 0.53, 0.13, 0.55, 0.99, 0.6, 0.13, 0.03, 0.54, 0.74, 0.15, + 0.34, 1.19, 0.44, 0.55, 0.88, 1.16, 0.16, 0.58, 0.12, 0.94, 0.04, 0.91, 0.07, 0.09, 0.49, 0.35, + 0.66, 0.02, 0.54, 0.74, 0.22, 0.3, 0.14, 0.65, 0.42, 0.21, 0.35, 0.78, 0.06, 0.1, 0.48, 0.44, + 0.33, 0.38, 0.26, 0.7, 0.17, 0.48, 0.09, 0.1, 0.54, 0.32, 0.44, 0.0, 0.9, 1.15, 0.52, 0.08, + 0.29, 0.42, 0.18, 0.15, 1.08, 0.97, 0.11, 0.18, 0.12, 0.65, 1.21, 1.06, 0.06, 0.83, 0.29, 0.26, + 0.27, 0.42, 0.48, 0.62, 0.13, 0.03, 1.02, 0.5, 0.07, 0.29, 0.84, 0.52, 0.27, 0.64, 1.08, 0.29, + 0.23, 0.15, 0.22, 0.89, 0.87, 0.92, 0.08, 0.73, 0.22, 0.45, 0.36, 0.46, 0.49, 0.17, 0.51, 0.05, + 0.48, 0.58, 0.09, 0.29, 0.91, 0.13, 0.09, 0.43, 1.61, 0.55, 0.88, 0.3, 0.72, 0.09, 0.84, 0.1, + 0.14, 0.71, 0.21, 0.46, 0.06, 0.47, 0.99, 0.3, 0.23, 0.38, 0.47, 0.39, 0.16, 0.96, 1.1, 0.76, + 0.18, 0.1, 1.26, 0.57, 0.97, 0.05, 0.7, 0.18, 0.04, 0.09, 0.2, 0.27, 0.46, 0.23, 0.02, 0.52, + 0.52, 0.25, 0.15, 0.53, 0.51, 0.41, 0.35, 1.02, 0.61, 0.19, 0.54, 0.09, 0.91, 0.69, 1.6, 0.01, + 1.02, 0.4, 0.4, 0.3, 0.37, 0.81, 0.67, 0.26, 0.11, 0.59, 0.76, 0.11, 0.29, 0.77, 0.08, 0.2, + 0.48, 1.19, 0.36, 0.48, 0.23, 0.95, 0.13, 0.89, 0.02, 0.23, 0.45, 0.49, 0.73, 0.24, 0.9, 0.84, + 0.29, 0.06, 0.33, 0.43, 0.26, 0.44, 0.63, 0.95, 0.04, 0.14, 0.05, 1.18, 0.5, 0.39, 0.35, 0.73, + 0.58, 0.27, 0.11, 0.24, 0.1, 0.71, 0.35, 0.11, 0.75, 0.93, 0.42, 0.19, 0.29, 0.44, 0.12, 0.46, + 1.68, 1.22, 0.11, 0.05, 0.12, 0.62, 0.84, 0.36, 0.06, 1.22, 0.67, 0.32, 0.36, 0.54, 0.42, 0.77, + 0.19, 0.4, 0.97, 0.42, 0.04, 0.27, 0.57, 0.38, 0.36, 0.56, 0.97, 0.67, 0.31, 0.11, 0.31, 0.45, + 0.71, 0.43, 0.09, 0.44, 0.53, 0.32, 0.36, 0.97, 0.64, 0.24, 0.43, 0.39, 0.41, 0.45, 0.09, 0.38, + 1.1, 0.01, 0.21, 0.69, 1.6, 0.36, 0.15, 0.35, 0.67, 0.1, 0.54, 0.19, 0.21, 0.34, 0.52, 0.56, + 0.03, 0.38, 0.95, 0.34, 0.24, 0.24, 0.69, 0.16, 0.27, 0.84, 0.89, 0.02, 0.14, 0.22, 0.99, 0.59, + 0.15, 0.06, 0.87, 0.3, 0.17, 0.12, 0.38, 0.6, 0.6, 0.22, 0.25, 0.51, 0.58, 0.0, 0.27, 0.49, + 0.28, 0.66, 0.38, 1.05, 0.52, 0.12, 0.1, 0.34, 0.99, 0.71, 0.35, 0.05, 0.81, 0.46, 0.7, 0.53, + 0.72, 0.79, 0.3, 0.5, 0.09, 0.87, 0.45, 0.1, 0.35, 0.86, 0.06, 0.2, 0.55, 1.25, 0.24, 0.31, + 0.33, 0.64, 0.25, 0.83, 0.03, 0.28, 0.58, 0.48, 0.59, 0.18, 0.95, 0.87, 0.69, 0.16, 0.17, 0.43, + 0.39, 0.16, 0.69, 0.8, 0.11, 0.33, 0.14, 0.97, 0.52, 0.07, 0.29, 0.61, 0.11, 0.31, 0.12, 0.4, + 0.24, 0.69, 0.59, 0.09, 0.44, 0.45, 0.46, 0.44, 0.37, 0.75, 0.18, 0.43, 1.05, 0.76, 0.13, 0.02, + 0.24, 0.94, 1.38, 0.63, 0.05, 0.93, 0.83, 0.38, 0.4, 0.58, 0.62, 0.67, 0.29, 0.12, 0.49, 0.62, + 0.09, 0.27, 1.24, 0.23, 0.49, 0.59, 1.19, 0.22, 0.25, 0.19, 0.47, 0.78, 0.53, 0.08, 0.12, 0.51, + 1.1, 0.67, 0.84, 0.98, 0.74, 0.22, 0.37, 0.14, 0.39, 0.37, 0.04, 0.74, 0.82, 0.06, 0.27, 0.3, + 1.23, 0.29, 0.33, 0.38, 0.66, 0.2, 0.27, 0.1, 0.16, 0.47, 0.86, 0.4, 0.05, 0.91, 0.95, 0.46, + 0.43, 0.58, 0.49, 0.13, 0.28, 1.04, 0.76, 0.23, 0.29, 0.32, 0.98, 1.29, 0.3, 0.27, 0.88, 0.48, + 0.37, 0.25, 0.38, 0.56, 0.63, 0.16, 0.1, 0.66, 0.69, 0.01, 0.35, 0.73, 0.28, 0.44, 0.81, 1.25, + 0.32, 0.2, 0.29, 0.32, 0.97, 1.06, 0.49, 0.07, 0.98, 0.57, 0.46, 0.31, 0.65, 0.62, 0.14, 0.21, + 0.06, 0.69, 0.49, 0.09, 0.25, 0.8, 0.06, 0.25, 0.46, 1.2, 0.41, 0.6, 0.46, 0.78, 0.14, 0.62, + 0.02, 0.16, 0.31, 1.04, 0.54, 0.1, 0.55, 1.01, 0.25, 0.22, 0.27, 0.52, 0.5, 0.06, 1.52, 0.9, + 0.17, 0.49, 0.13, 1.33, 0.9, 0.31, 0.63, 2.5, 0.15, 0.16, 0.18, 0.52, 0.39, 0.97, 0.55, 0.07, + 0.69, 0.77, 0.15, 0.7, 1.19, 0.29, 0.43, 0.6, 1.17, 0.63, 0.37, 0.29, 0.24, 0.83, 1.43, 0.99, + 0.05, 0.9, 0.52, 0.57, 0.3, 0.71, 0.14, 0.64, 0.29, 0.21, 0.55, 0.57, 0.04, 0.46, 0.65, 0.11, + 0.18, 0.33, 1.12, 0.32, 0.43, 0.5, 0.39, 0.07, 0.66, 0.32, 0.17, 0.45, 0.42, 0.59, 0.27, 0.81, + 0.7, 0.08, 0.26, 0.24, 0.61, 0.37, 0.97, 0.8, 1.05, 0.13, 0.48, 0.2, 1.37, 0.81, 0.18, 0.46, + 0.7, 0.1, 0.53, 0.1, 0.56, 0.32, 0.48, 0.43, 0.04, 0.74, 0.64, 0.49, 0.43, 0.49, 0.76, 0.51, + 0.18, 0.69, 0.78, 0.2, 0.86, 0.18, 0.63, 1.32, 0.87, 0.17, 1.0, 0.4, 0.67, 0.06, 0.28, 0.56, + 0.76, 0.06, 0.13, 0.56, 0.49, 0.0, 0.32, 0.64, 0.33, 0.45, 0.43, 0.93, 0.26, 0.22, 0.6, 0.92, + 0.42, 0.61, 0.08, 0.17, 0.51, 0.34, 0.68, 0.4, 0.73, 0.78, 0.25, 0.69, 0.18, 0.74, 0.89, 0.11, + 0.59, 1.01, 0.02, 0.43, 0.15, 0.6, 0.42, 0.08, 0.41, 0.77, 0.43, 0.32, 0.15, 0.24, 0.41, 0.34, + 0.41, 0.0, 0.34, 0.86, 0.53, 0.17, 0.29, 0.74, 0.3, 0.16, 0.98, 0.97, 0.35, 0.5, 0.26, 0.52, + 1.61, 0.28, 0.27, 0.61, 0.24, 0.12, 0.11, 0.29, 0.23, 0.53, 0.13, 0.1, 0.66, 0.59, 0.09, 0.35, + 0.59, 0.41, 0.6, 0.43, 1.04, 0.72, 0.16, 0.67, 0.24, 0.31, 0.88, 0.32, 0.02, 0.78, 0.6, 0.68, + 0.2, 0.79, 0.08, 0.29, 0.6, 0.07, 0.55, 0.72, 0.06, 0.49, 1.19, 0.23, 0.5, 0.15, 0.79, 0.22, + 0.89, 0.33, 0.42, 0.12, 0.34, 0.07, 0.18, 0.27, 0.09, 0.73, 0.03, 0.9, 0.98, 0.17, 0.16, 0.14, + 0.58, 0.48, 0.27, 0.56, 1.22, 0.08, 0.48, 0.06, 0.26, 0.72, 0.07, 0.35, 0.74, 0.12, 0.17, 0.12, + 0.28, 0.1, 0.34, 0.31, 0.01, 0.45, 0.54, 0.65, 0.22, 0.4, 0.53, 1.22, 0.27, 0.81, 0.66, 0.13, + 0.67, 0.09, 0.17, 1.11, 0.4, 0.03, 0.82, 0.44, 0.44, 0.27, 0.53, 0.25, 0.5, 0.28, 0.1, 0.66, + 0.78, 0.08, 0.35, 0.22, 0.2, 0.63, 0.62, 1.07, 0.37, 0.3, 0.31, 0.42, 0.4, 0.46, 0.1, 0.08, + 0.55, 0.59, 1.01, 0.27, 1.4, 0.69, 0.23, 0.64, 0.12, 0.47, 0.48, 0.01, 0.99, 0.86, 0.11, 0.41, + 0.14, 0.27, 0.44, 0.09, 0.16, 0.57, 0.11, 0.19, 0.13, 0.13, 0.47, 0.28, 0.3, 0.03, 0.51, 0.85, + 0.45, 0.63, 0.32, 0.5, 0.28, 0.21, 0.51, 0.61, 0.15, 0.59, 0.11, 0.36, 1.08, 0.48, 0.3, 0.78, + 0.25, 0.18, 0.42, 0.44, 0.24, 0.78, 0.17, 0.21, 0.58, 0.53, 0.0, 0.41, 0.74, 0.56, 0.54, 0.36, + 0.89, 0.53, 0.24, 0.39, 0.19, 0.27, 0.88, 0.42, 0.03, 0.66, 0.29, 0.74, 0.97, 0.61, 0.61, 0.19, + 0.64, 0.2, 0.45, 0.57, 0.02, 0.55, 0.81, 0.24, 0.36, 0.16, 0.42, 0.33, 0.52, 0.62, 0.62, 0.09, + 0.39, 0.2, 0.16, 0.25, 0.11, 0.51, 0.04, 0.88, 0.79, 0.18, 0.08, 0.21, 0.45, 0.67, 0.2, 0.45, + 1.0, 0.06, 0.52, 0.22, 0.35, 0.69, 0.21, 0.34, 0.35, 0.2, 0.11, 0.16, 0.21, 0.25, 0.45, 0.11, + 0.02, 0.51, 0.96, 0.0, 0.59, 0.2, 0.46, 0.79, 0.11, 0.98, 0.94, 0.24, 1.02, 0.63, 0.23, 1.11, + 0.44, 0.01, 0.92, 0.62, 0.89, 0.41, 0.25, 0.33, 0.52, 0.57, 0.05, 0.7, 0.24, 0.12, 0.64, 0.46, + 0.03, 0.74, 0.5, 0.93, 0.39, 0.49, 0.16, 0.46, 0.04, 0.42, 0.03, 0.1, 0.4, 0.92, 0.65, 0.16, + 0.3, 0.73, 0.07, 0.42, 0.16, 0.33, 0.4, 0.02, 0.84, 1.34, 0.12, 0.68, 0.08, 0.13, 0.84, 0.12, + 0.19, 0.86, 0.13, 0.27, 0.14, 0.16, 0.21, 0.32, 0.95, 0.01, 0.53, 0.76, 0.47, 0.35, 0.36, 0.65, + 0.81, 0.13, 1.04, 0.71, 0.13, 0.36, 0.17, 0.2, 0.95, 0.38, 0.15, 0.81, 0.64, 0.33, 0.19, 0.63, + 0.48, 0.68, 0.18, 0.36, 0.4, 0.52, 0.0, 0.65, 0.75, 0.21, 1.0, 0.38, 0.86, 0.31, 0.22, 0.56, + 0.43, 0.27, 0.46, 0.33, 0.04, 0.39, 0.31, 0.66, 0.38, 0.51, 0.71, 0.1, 0.51, 0.18, 0.63, 0.17, + 0.02, 0.87, 1.17, 0.01, 0.49, 0.0, 0.63, 0.72, 0.17, 0.35, 0.55, 0.1, 0.43, 0.1, 0.72, 0.41, + 0.26, 0.41, 0.07, 0.43, 0.67, 0.21, 0.49, 0.48, 0.47, 0.38, 0.06, 0.82, 0.95, 0.12, 0.77, 0.37, + 0.46, 1.12, 0.33, 0.13, 0.82, 0.32, 0.4, 0.14, 0.26, 0.86, 0.98, 0.33, 0.1, 0.58, 0.74, 0.16, + 0.45, 0.67, 0.29, 0.94, 0.31, 0.98, 0.61, 0.27, 1.18, 0.35, 0.29, 0.67, 0.35, 0.02, 0.89, 0.58, + 0.56, 0.24, 0.35, 0.63, 0.43, 0.46, 0.23, 0.56, 0.38, 0.13, 0.4, 1.14, 0.12, 1.04, 0.16, 0.74, + 0.51, 0.37, 0.19, 0.41, 0.58, 0.59, 0.12, 0.08, 0.52, 0.2, 0.66, 0.03, 0.61, 0.84, 0.18, 0.83, + 0.3, 0.61, 0.82, 0.1, 0.8, 1.01, 0.1, 0.95, 0.15, 0.42, 1.51, 0.13, 0.79, 0.78, 0.15, 0.52, + 0.11, 0.18, 0.27, 0.33, 0.52, 0.07, 0.56, 0.53, 0.26, 0.32, 0.68, 0.46, 0.76, 0.18, 1.09, 0.58, + 0.07, 1.06, 0.12, 0.21, 1.03, 0.44, 0.01, 0.6, 0.49, 0.32, 0.43, 0.52, 0.46, 0.47, 0.44, 0.21, + 0.61, 0.58, 0.04, 0.5, 0.93, 0.23, 1.04, 0.5, 0.9, 0.48, 1.06, 0.14, 0.38, 0.09, 0.5, 0.01, + 0.28, 0.5, 0.48, 0.68, 0.47, 0.56, 0.72, 0.12, 0.46, 0.18, 0.5, 0.35, 0.19, 0.92, 0.92, 0.02, + 0.73, 0.03, 0.22, 0.86, 0.37, 1.14, 0.78, 0.13, 0.6, 0.07, 0.53, 0.35, 0.29, 0.69, 0.04, 0.47, + 0.94, 0.49, 0.56, 0.42, 0.42, 0.43, 0.1, 0.8, 0.8, 0.04, 0.74, 0.22, 0.06, 1.04, 0.38, 0.08, + 1.1, 0.28, 0.45, 0.27, 0.44, 0.43, 0.56, 0.2, 0.02, 0.69, 0.74, 0.06, 0.37, 0.92, 0.57, 0.51, + 0.61, 0.9, 0.61, 0.06, 0.93, 0.46, 0.38, 0.52, 0.42, 0.14, 0.99, 0.44, 0.63, 0.88, 0.66, 0.6, + 0.08, 0.5, 0.15, 0.71, 0.32, 0.06, 0.53, 1.13, 0.01, 0.58, 0.25, 1.06, 0.68, 0.41, 0.15, 0.77, + 0.04, 0.45, 0.02, 0.23, 0.76, 0.15, 0.49, 0.05, 0.74, 0.97, 0.33, 0.31, 0.31, 0.41, 0.62, 0.05, + 0.52, 1.02, 0.06, 1.3, 0.12, 0.44, 1.42, 0.25, 0.02, 0.97, 0.23, 0.26, 0.1, 0.16, 0.27, 0.3, + 0.52, 0.1, 0.7, 0.62, 0.43, 0.62, 0.91, 0.47, 0.61, 0.19, 0.99, 0.41, 0.11, 0.87, 0.29, 0.17, + 1.16, 1.25, 0.01, 1.01, 0.59, 0.33, 0.26, 0.49, 0.75, 0.66, 0.33, 0.2, 0.59, 0.25, 0.01, 0.47, + 0.61, 0.46, 0.9, 0.38, 0.78, 0.32, 0.44, 0.2, 0.51, 0.08, 0.38, 0.06, 0.06, 0.59, 0.46, 0.66, + 0.3, 0.34, 0.83, 0.67, 0.26, 0.26, 0.63, 0.41, 0.07, 0.59, 1.25, 0.01, 1.34, 0.03, 0.24, 0.49, + 0.18, 0.43, 0.7, 0.24, 0.22, 0.05, 0.31, 0.63, 0.38, 0.54, 0.18, 0.49, 0.74, 0.56, 0.41, 0.5, + 0.65, 0.72, 0.19, 1.1, 0.57, 0.08, 0.52, 0.66, 0.25, 1.44, 0.36, 0.1, 1.07, 0.6, 0.3, 0.27, + 0.3, 0.68, 0.86, 0.18, 0.02, 0.51, 0.56, 0.35, 1.07, 0.77, 0.28, 0.56, 0.48, 0.84, 0.29, 0.16, + 0.65, 0.22, 0.44, 0.72, 0.42, 0.13, 0.79, 0.84, 0.87, 0.46, 0.65, 0.72, 0.11, 0.37, 0.13, 0.41, + 0.24, 0.02, 1.39, 1.02, 0.07, 0.34, 0.07, 0.64, 0.47, 0.43, 0.31, 0.53, 0.1, 0.39, 0.17, 0.12, + 0.66, 0.1, 0.46, 0.01, 0.35, 1.1, 0.31, 0.21, 0.15, 0.44, 0.2, 0.07, 0.88, 0.85, 0.18, 0.88, + 0.12, 0.44, 1.11, 0.55, 0.57, 0.99, 0.38, 0.25, 0.12, 0.23, 0.57, 0.52, 0.28, 0.34, 0.55, 0.42, + 0.09, 0.73, 0.96, 0.44, 0.69, 0.13, 0.97, 0.51, 0.26, 0.75, 0.09, 0.22, 0.77, 0.48, 0.05, 1.34, + 0.43, 0.84, 0.41, 0.23, 0.66, 0.15, 0.37, 0.14, 1.19, 0.57, 0.05, 0.47, 0.63, 0.09, 0.64, 0.04, + 0.67, 0.4, 0.5, 0.32, 0.44, 0.02, 0.45, 0.02, 0.16, 0.71, 0.15, 0.67, 0.09, 0.41, 0.8, 0.39, + 0.19, 1.63, 0.37, 0.88, 0.05, 0.56, 1.24, 0.04, 0.69, 0.08, 0.19, 0.92, 0.08, 0.23, 0.68, 0.35, + 0.19, 0.06, 0.22, 0.71, 0.34, 0.38, 0.06, 0.64, 0.36, 0.33, 0.64, 0.55, 0.62, 0.21, 0.82, 0.78, + 0.1, 0.77, 0.09, 0.05, 0.97, 0.58, 0.02, 1.0, 0.87, 0.46, 0.23, 0.51, 0.59, 1.16, 0.23, 0.14, + 0.42, 0.55, 0.08, 0.71, 0.58, 0.17, 0.72, 0.47, 0.82, 0.27, 0.07, 0.32, 0.53, 0.06, 0.58, 0.43, + 0.04, 0.9, 0.28, 0.78, 0.42, 0.43, 0.71, 0.17, 0.71, 0.15, 0.71, 0.29, 0.05, 0.52, 1.29, 0.08, + 0.8, 3.21, 0.54, 0.39, 0.36, 0.24, 0.61, 0.26, 0.48, 0.06, 0.39, 0.29, 0.47, 0.51, 0.0, 0.73, + 0.51, 0.13, 0.49, 0.47, 0.5, 0.1, 0.35, 1.2, 0.04, 0.84, 0.4, 0.27, 1.03, 0.57, 0.03, 0.59, + 0.2, 0.27, 0.74, 0.46, 0.23, 0.36, 0.4, 0.02, 0.59, 0.32, 0.01, 0.41, 0.76, 0.25, 0.69, 0.12, + 1.01, 0.16, 0.06, 0.29, 0.36, 0.24, 0.67, 0.81, 0.34, 0.65, 0.23, 0.73, 0.22, 0.61, 0.45, 0.27, + 0.24, 0.2, 0.41, 0.26, 0.08, 0.06, 0.57, 0.02, 0.77, 0.09, 0.78, 0.6, 0.13, 0.21, 0.55, 0.06, + 0.41, 0.04, 0.33, 0.4, 0.16, 0.7, 0.02, 0.82, 0.63, 0.16, 0.19, 0.38, 0.57, 0.62, 0.05, 0.29, + 0.97, 0.05, 1.06, 0.07, 0.44, 0.76, 0.53, 0.02, 0.99, 0.2, 0.46, 0.17, 0.46, 0.28, 0.33, 0.62, + 0.06, 0.52, 0.54, 0.22, 0.24, 0.77, 0.38, 1.08, 0.23, 0.74, 0.38, 0.02, 0.82, 0.24, 0.38, 1.07, + 1.04, 0.11, 0.88, 1.27, 0.43, 0.45, 0.65, 0.47, 0.67, 0.29, 0.05, 0.7, 0.43, 0.06, 0.14, 0.99, + 0.14, 0.87, 0.32, 0.79, 0.24, 0.2, 0.2, 0.59, 0.21, 0.63, 0.27, 0.17, 0.41, 0.51, 0.94, 0.32, + 0.54, 0.66, 0.48, 0.13, 0.18, 0.39, 0.39, 0.33, 0.26, 0.87, 0.26, 0.71, 0.12, 0.28, 1.1, 0.4, + 0.48, 0.52, 0.2, 0.34, 0.06, 0.26, 0.26, 0.7, 0.49, 0.02, 0.41, 0.54, 0.32, 0.18, 0.45, 0.38, + 0.63, 0.07, 0.51, 0.83, 0.02, 0.68, 0.14, 0.26, 1.28, 0.74, 0.1, 0.87, 0.3, 0.42, 0.31, 0.75, + 0.45, 0.69, 0.19, 0.12, 0.61, 0.36, 0.04, 0.41, 0.79, 0.29, 1.11, 0.25, 0.94, 0.48, 0.23, 0.5, + 0.4, 0.31, 0.82, 0.86, 0.29, 0.51, 0.51, 0.74, 0.72, 0.43, 0.69, 0.07, 0.44, 0.35, 0.56, 0.3, + 0.06, 0.41, 0.78, 0.06, 0.79, 0.17, 1.41, 0.54, 0.38, 0.38, 0.59, 0.06, 0.33, 0.12, 0.31, 0.38, + 0.26, 0.36, 0.04, 0.08, 0.47, 0.25, 0.48, 0.24, 0.51, 0.23, 0.23, 0.39, 1.01, 0.02, 0.79, 0.07, + 0.56, 1.23, 0.58, 0.12, 0.84, 0.23, 0.14, 0.25, 0.12, 0.51, 0.91, 0.29, 0.12, 0.44, 0.42, 0.04, + 0.4, 0.9, 0.5, 1.08, 0.2, 1.01, 0.5, 0.08, 0.67, 0.47, 0.32, 1.1, 0.43, 0.25, 0.96, 0.57, 0.64, + 0.22, 0.08, 0.54, 0.44, 0.52, 0.19, 0.54, 0.29, 0.05, 0.22, 1.01, 0.25, 1.12, 0.21, 0.64, 0.36, + 0.12, 0.28, 0.59, 0.14, 0.49, 0.16, 0.35, 0.4, 0.2, 1.0, 0.04, 0.27, 0.52, 0.31, 0.13, 0.27, + 0.46, 0.4, 0.25, 0.36, 0.91, 0.01, 0.95, 0.39, 0.2, 0.79, 0.3, 0.31, 0.56, 0.23, 0.22, 0.08, + 0.48, 0.39, 0.64, 0.56, 0.04, 0.63, 0.91, 0.67, 0.2, 0.7, 0.61, 0.78, 0.26, 0.85, 0.68, 0.09, + 0.69, 0.39, 0.26, 1.57, 0.68, 0.12, 0.53, 0.2, 0.73, 0.2, 0.68, 0.73, 0.23, 0.06, 0.64, 0.49, + 0.36, 0.33, 0.74, 0.07, 1.06, 0.17, 0.85, 0.49, 0.07, 0.33, 0.5, 0.17, 0.81, 0.05, 0.1, 0.37, + 0.21, 0.77, 0.87, 0.09, 0.26, 0.12, 0.26, 0.11, 0.53, 0.35, 0.06, 0.88, 1.16, 0.04, 0.74, 0.35, + 0.12, 0.43, 0.11, 0.34, 0.65, 0.08, 0.24, 0.33, 0.78, 0.21, 0.5, 0.57, 0.13, +]; + +static PREDICTION_DS: &[TimestampSeconds] = &[ + 1729156767, 1729157367, 1729157967, 1729158567, 1729159167, 1729159767, 1729160367, 1729160967, + 1729161567, 1729162167, 1729162767, 1729163367, 1729163967, 1729164567, 1729165167, 1729165767, + 1729166367, 1729166967, 1729167567, 1729168167, 1729168767, 1729169367, 1729169967, 1729170567, + 1729171167, 1729171767, 1729172367, 1729172967, 1729173567, 1729174167, 1729174767, 1729175367, + 1729175967, 1729176567, 1729177167, 1729177767, 1729178367, 1729178967, 1729179567, 1729180167, + 1729180767, 1729181367, 1729181967, 1729182567, 1729183167, 1729183767, 1729184367, 1729184967, + 1729185567, 1729186167, 1729186767, 1729187367, 1729187967, 1729188567, 1729189167, 1729189767, + 1729190367, 1729190967, 1729191567, 1729192167, 1729192767, 1729193367, 1729193967, 1729194567, + 1729195167, 1729195767, 1729196367, 1729196967, 1729197567, 1729198167, 1729198767, 1729199367, + 1729199967, 1729200567, 1729201167, 1729201767, 1729202367, 1729202967, 1729203567, 1729204167, + 1729204767, 1729205367, 1729205967, 1729206567, 1729207167, 1729207767, 1729208367, 1729208967, + 1729209567, 1729210167, 1729210767, 1729211367, 1729211967, 1729212567, 1729213167, 1729213767, + 1729214367, 1729214967, 1729215567, 1729216167, 1729216767, 1729217367, 1729217967, 1729218567, + 1729219167, 1729219767, 1729220367, 1729220967, 1729221567, 1729222167, 1729222767, 1729223367, + 1729223967, 1729224567, 1729225167, 1729225767, 1729226367, 1729226967, 1729227567, 1729228167, + 1729228767, 1729229367, 1729229967, 1729230567, 1729231167, 1729231767, 1729232367, 1729232967, + 1729233567, 1729234167, 1729234767, 1729235367, 1729235967, 1729236567, 1729237167, 1729237767, + 1729238367, 1729238967, 1729239567, 1729240167, 1729240767, 1729241367, 1729241967, 1729242567, + 1729243167, 1729243767, 1729244367, 1729244967, 1729245567, 1729246167, 1729246767, 1729247367, + 1729247967, 1729248567, 1729249167, 1729249767, 1729250367, 1729250967, 1729251567, 1729252167, + 1729252767, 1729253367, 1729253967, 1729254567, 1729255167, 1729255767, 1729256367, 1729256967, + 1729257567, 1729258167, 1729258767, 1729259367, 1729259967, 1729260567, 1729261167, 1729261767, + 1729262367, 1729262967, 1729263567, 1729264167, 1729264767, 1729265367, 1729265967, 1729266567, + 1729267167, 1729267767, 1729268367, 1729268967, 1729269567, 1729270167, 1729270767, 1729271367, + 1729271967, 1729272567, 1729273167, 1729273767, 1729274367, 1729274967, 1729275567, 1729276167, + 1729276767, 1729277367, 1729277967, 1729278567, 1729279167, 1729279767, 1729280367, 1729280967, + 1729281567, 1729282167, 1729282767, 1729283367, 1729283967, 1729284567, 1729285167, 1729285767, + 1729286367, 1729286967, 1729287567, 1729288167, 1729288767, 1729289367, 1729289967, 1729290567, + 1729291167, 1729291767, 1729292367, 1729292967, 1729293567, 1729294167, 1729294767, 1729295367, + 1729295967, 1729296567, 1729297167, 1729297767, 1729298367, 1729298967, 1729299567, 1729300167, + 1729300767, 1729301367, 1729301967, 1729302567, 1729303167, 1729303767, 1729304367, 1729304967, + 1729305567, 1729306167, 1729306767, 1729307367, 1729307967, 1729308567, 1729309167, 1729309767, + 1729310367, 1729310967, 1729311567, 1729312167, 1729312767, 1729313367, 1729313967, 1729314567, + 1729315167, 1729315767, 1729316367, 1729316967, 1729317567, 1729318167, 1729318767, 1729319367, + 1729319967, 1729320567, 1729321167, 1729321767, 1729322367, 1729322967, 1729323567, 1729324167, + 1729324767, 1729325367, 1729325967, 1729326567, 1729327167, 1729327767, 1729328367, 1729328967, + 1729329567, 1729330167, 1729330767, 1729331367, 1729331967, 1729332567, 1729333167, 1729333767, + 1729334367, 1729334967, 1729335567, 1729336167, 1729336767, 1729337367, 1729337967, 1729338567, + 1729339167, 1729339767, 1729340367, 1729340967, 1729341567, 1729342167, 1729342767, 1729343367, + 1729343967, 1729344567, 1729345167, 1729345767, 1729346367, 1729346967, 1729347567, 1729348167, + 1729348767, 1729349367, 1729349967, 1729350567, 1729351167, 1729351767, 1729352367, 1729352967, + 1729353567, 1729354167, 1729354767, 1729355367, 1729355967, 1729356567, 1729357167, 1729357767, + 1729358367, 1729358967, 1729359567, 1729360167, 1729360767, 1729361367, 1729361967, 1729362567, + 1729363167, 1729363767, 1729364367, 1729364967, 1729365567, 1729366167, 1729366767, 1729367367, + 1729367967, 1729368567, 1729369167, 1729369767, 1729370367, 1729370967, 1729371567, 1729372167, + 1729372767, 1729373367, 1729373967, 1729374567, 1729375167, 1729375767, 1729376367, 1729376967, + 1729377567, 1729378167, 1729378767, 1729379367, 1729379967, 1729380567, 1729381167, 1729381767, + 1729382367, 1729382967, 1729383567, 1729384167, 1729384767, 1729385367, 1729385967, 1729386567, + 1729387167, 1729387767, 1729388367, 1729388967, 1729389567, 1729390167, 1729390767, 1729391367, + 1729391967, 1729392567, 1729393167, 1729393767, 1729394367, 1729394967, 1729395567, 1729396167, + 1729396767, 1729397367, 1729397967, 1729398567, 1729399167, 1729399767, 1729400367, 1729400967, + 1729401567, 1729402167, 1729402767, 1729403367, 1729403967, 1729404567, 1729405167, 1729405767, + 1729406367, 1729406967, 1729407567, 1729408167, 1729408767, 1729409367, 1729409967, 1729410567, + 1729411167, 1729411767, 1729412367, 1729412967, 1729413567, 1729414167, 1729414767, 1729415367, + 1729415967, 1729416567, 1729417167, 1729417767, 1729418367, 1729418967, 1729419567, 1729420167, + 1729420767, 1729421367, 1729421967, 1729422567, 1729423167, 1729423767, 1729424367, 1729424967, + 1729425567, 1729426167, 1729426767, 1729427367, 1729427967, 1729428567, 1729429167, 1729429767, + 1729430367, 1729430967, 1729431567, 1729432167, 1729432767, 1729433367, 1729433967, 1729434567, + 1729435167, 1729435767, 1729436367, 1729436967, 1729437567, 1729438167, 1729438767, 1729439367, + 1729439967, 1729440567, 1729441167, 1729441767, 1729442367, 1729442967, 1729443567, 1729444167, + 1729444767, 1729445367, 1729445967, 1729446567, 1729447167, 1729447767, 1729448367, 1729448967, + 1729449567, 1729450167, 1729450767, 1729451367, 1729451967, 1729452567, 1729453167, 1729453767, + 1729454367, 1729454967, 1729455567, 1729456167, 1729456767, 1729457367, 1729457967, 1729458567, + 1729459167, 1729459767, 1729460367, 1729460967, 1729461567, 1729462167, 1729462767, 1729463367, + 1729463967, 1729464567, 1729465167, 1729465767, 1729466367, 1729466967, 1729467567, 1729468167, + 1729468767, 1729469367, 1729469967, 1729470567, 1729471167, 1729471767, 1729472367, 1729472967, + 1729473567, 1729474167, 1729474767, 1729475367, 1729475967, 1729476567, 1729477167, 1729477767, + 1729478367, 1729478967, 1729479567, 1729480167, 1729480767, 1729481367, 1729481967, 1729482567, + 1729483167, 1729483767, 1729484367, 1729484967, 1729485567, 1729486167, 1729486767, 1729487367, + 1729487967, 1729488567, 1729489167, 1729489767, 1729490367, 1729490967, 1729491567, 1729492167, + 1729492767, 1729493367, 1729493967, 1729494567, 1729495167, 1729495767, 1729496367, 1729496967, + 1729497567, 1729498167, 1729498767, 1729499367, 1729499967, 1729500567, 1729501167, 1729501767, + 1729502367, 1729502967, 1729503567, 1729504167, 1729504767, 1729505367, 1729505967, 1729506567, + 1729507167, 1729507767, 1729508367, 1729508967, 1729509567, 1729510167, 1729510767, 1729511367, + 1729511967, 1729512567, 1729513167, 1729513767, 1729514367, 1729514967, 1729515567, 1729516167, + 1729516767, 1729517367, 1729517967, 1729518567, 1729519167, 1729519767, 1729520367, 1729520967, + 1729521567, 1729522167, 1729522767, 1729523367, 1729523967, 1729524567, 1729525167, 1729525767, + 1729526367, 1729526967, 1729527567, 1729528167, 1729528767, 1729529367, 1729529967, 1729530567, + 1729531167, 1729531767, 1729532367, 1729532967, 1729533567, 1729534167, 1729534767, 1729535367, + 1729535967, 1729536567, 1729537167, 1729537767, 1729538367, 1729538967, 1729539567, 1729540167, + 1729540767, 1729541367, 1729541967, 1729542567, 1729543167, 1729543767, 1729544367, 1729544967, + 1729545567, 1729546167, 1729546767, 1729547367, 1729547967, 1729548567, 1729549167, 1729549767, + 1729550367, 1729550967, 1729551567, 1729552167, 1729552767, 1729553367, 1729553967, 1729554567, + 1729555167, 1729555767, 1729556367, 1729556967, 1729557567, 1729558167, 1729558767, 1729559367, + 1729559967, 1729560567, 1729561167, 1729561767, 1729562367, 1729562967, 1729563567, 1729564167, + 1729564767, 1729565367, 1729565967, 1729566567, 1729567167, 1729567767, 1729568367, 1729568967, + 1729569567, 1729570167, 1729570767, 1729571367, 1729571967, 1729572567, 1729573167, 1729573767, + 1729574367, 1729574967, 1729575567, 1729576167, 1729576767, 1729577367, 1729577967, 1729578567, + 1729579167, 1729579767, 1729580367, 1729580967, 1729581567, 1729582167, 1729582767, 1729583367, + 1729583967, 1729584567, 1729585167, 1729585767, 1729586367, 1729586967, 1729587567, 1729588167, + 1729588767, 1729589367, 1729589967, 1729590567, 1729591167, 1729591767, 1729592367, 1729592967, + 1729593567, 1729594167, 1729594767, 1729595367, 1729595967, 1729596567, 1729597167, 1729597767, + 1729598367, 1729598967, 1729599567, 1729600167, 1729600767, 1729601367, 1729601967, 1729602567, + 1729603167, 1729603767, 1729604367, 1729604967, 1729605567, 1729606167, 1729606767, 1729607367, + 1729607967, 1729608567, 1729609167, 1729609767, 1729610367, 1729610967, 1729611567, 1729612167, + 1729612767, 1729613367, 1729613967, 1729614567, 1729615167, 1729615767, 1729616367, 1729616967, + 1729617567, 1729618167, 1729618767, 1729619367, 1729619967, 1729620567, 1729621167, 1729621767, + 1729622367, 1729622967, 1729623567, 1729624167, 1729624767, 1729625367, 1729625967, 1729626567, + 1729627167, 1729627767, 1729628367, 1729628967, 1729629567, 1729630167, 1729630767, 1729631367, + 1729631967, 1729632567, 1729633167, 1729633767, 1729634367, 1729634967, 1729635567, 1729636167, + 1729636767, 1729637367, 1729637967, 1729638567, 1729639167, 1729639767, 1729640367, 1729640967, + 1729641567, 1729642167, 1729642767, 1729643367, 1729643967, 1729644567, 1729645167, 1729645767, + 1729646367, 1729646967, 1729647567, 1729648167, 1729648767, 1729649367, 1729649967, 1729650567, + 1729651167, 1729651767, 1729652367, 1729652967, 1729653567, 1729654167, 1729654767, 1729655367, + 1729655967, 1729656567, 1729657167, 1729657767, 1729658367, 1729658967, 1729659567, 1729660167, + 1729660767, 1729661367, 1729661967, 1729662567, 1729663167, 1729663767, 1729664367, 1729664967, + 1729665567, 1729666167, 1729666767, 1729667367, 1729667967, 1729668567, 1729669167, 1729669767, + 1729670367, 1729670967, 1729671567, 1729672167, 1729672767, 1729673367, 1729673967, 1729674567, + 1729675167, 1729675767, 1729676367, 1729676967, 1729677567, 1729678167, 1729678767, 1729679367, + 1729679967, 1729680567, 1729681167, 1729681767, 1729682367, 1729682967, 1729683567, 1729684167, + 1729684767, 1729685367, 1729685967, 1729686567, 1729687167, 1729687767, 1729688367, 1729688967, + 1729689567, 1729690167, 1729690767, 1729691367, 1729691967, 1729692567, 1729693167, 1729693767, + 1729694367, 1729694967, 1729695567, 1729696167, 1729696767, 1729697367, 1729697967, 1729698567, + 1729699167, 1729699767, 1729700367, 1729700967, 1729701567, 1729702167, 1729702767, 1729703367, + 1729703967, 1729704567, 1729705167, 1729705767, 1729706367, 1729706967, 1729707567, 1729708167, + 1729708767, 1729709367, 1729709967, 1729710567, 1729711167, 1729711767, 1729712367, 1729712967, + 1729713567, 1729714167, 1729714767, 1729715367, 1729715967, 1729716567, 1729717167, 1729717767, + 1729718367, 1729718967, 1729719567, 1729720167, 1729720767, 1729721367, 1729721967, 1729722567, + 1729723167, 1729723767, 1729724367, 1729724967, 1729725567, 1729726167, 1729726767, 1729727367, + 1729727967, 1729728567, 1729729167, 1729729767, 1729730367, 1729730967, 1729731567, 1729732167, + 1729732767, 1729733367, 1729733967, 1729734567, 1729735167, 1729735767, 1729736367, 1729736967, + 1729737567, 1729738167, 1729738767, 1729739367, 1729739967, 1729740567, 1729741167, 1729741767, + 1729742367, 1729742967, 1729743567, 1729744167, 1729744767, 1729745367, 1729745967, 1729746567, + 1729747167, 1729747767, 1729748367, 1729748967, 1729749567, 1729750167, 1729750767, 1729751367, + 1729751967, 1729752567, 1729753167, 1729753767, 1729754367, 1729754967, 1729755567, 1729756167, + 1729756767, 1729757367, 1729757967, 1729758567, 1729759167, 1729759767, 1729760367, 1729760967, + 1729761567, 1729762167, 1729762767, 1729763367, 1729763967, 1729764567, 1729765167, 1729765767, + 1729766367, 1729766967, 1729767567, 1729768167, 1729768767, 1729769367, 1729769967, 1729770567, + 1729771167, 1729771767, 1729772367, 1729772967, 1729773567, 1729774167, 1729774767, 1729775367, + 1729775967, 1729776567, 1729777167, 1729777767, 1729778367, 1729778967, 1729779567, 1729780167, + 1729780767, 1729781367, 1729781967, 1729782567, 1729783167, 1729783767, 1729784367, 1729784967, + 1729785567, 1729786167, 1729786767, 1729787367, 1729787967, 1729788567, 1729789167, 1729789767, + 1729790367, 1729790967, 1729791567, 1729792167, 1729792767, 1729793367, 1729793967, 1729794567, + 1729795167, 1729795767, 1729796367, 1729796967, 1729797567, 1729798167, 1729798767, 1729799367, + 1729799967, 1729800567, 1729801167, 1729801767, 1729802367, 1729802967, 1729803567, 1729804167, + 1729804767, 1729805367, 1729805967, 1729806567, 1729807167, 1729807767, 1729808367, 1729808967, + 1729809567, 1729810167, 1729810767, 1729811367, 1729811967, 1729812567, 1729813167, 1729813767, + 1729814367, 1729814967, 1729815567, 1729816167, 1729816767, 1729817367, 1729817967, 1729818567, + 1729819167, 1729819767, 1729820367, 1729820967, 1729821567, 1729822167, 1729822767, 1729823367, + 1729823967, 1729824567, 1729825167, 1729825767, 1729826367, 1729826967, 1729827567, 1729828167, + 1729828767, 1729829367, 1729829967, 1729830567, 1729831167, 1729831767, 1729832367, 1729832967, + 1729833567, 1729834167, 1729834767, 1729835367, 1729835967, 1729836567, 1729837167, 1729837767, + 1729838367, 1729838967, 1729839567, 1729840167, 1729840767, 1729841367, 1729841967, 1729842567, + 1729843167, 1729843767, 1729844367, 1729844967, 1729845567, 1729846167, 1729846767, 1729847367, + 1729847967, 1729848567, 1729849167, 1729849767, 1729850367, 1729850967, 1729851567, 1729852167, + 1729852767, 1729853367, 1729853967, 1729854567, 1729855167, 1729855767, 1729856367, 1729856967, + 1729857567, 1729858167, 1729858767, 1729859367, 1729859967, 1729860567, 1729861167, 1729861767, + 1729862367, 1729862967, 1729863567, 1729864167, 1729864767, 1729865367, 1729865967, 1729866567, + 1729867167, 1729867767, 1729868367, 1729868967, 1729869567, 1729870167, 1729870767, 1729871367, + 1729871967, 1729872567, 1729873167, 1729873767, 1729874367, 1729874967, 1729875567, 1729876167, + 1729876767, 1729877367, 1729877967, 1729878567, 1729879167, 1729879767, 1729880367, 1729880967, + 1729881567, 1729882167, 1729882767, 1729883367, 1729883967, 1729884567, 1729885167, 1729885767, + 1729886367, 1729886967, 1729887567, 1729888167, 1729888767, 1729889367, 1729889967, 1729890567, + 1729891167, 1729891767, 1729892367, 1729892967, 1729893567, 1729894167, 1729894767, 1729895367, + 1729895967, 1729896567, 1729897167, 1729897767, 1729898367, 1729898967, 1729899567, 1729900167, + 1729900767, 1729901367, 1729901967, 1729902567, 1729903167, 1729903767, 1729904367, 1729904967, + 1729905567, 1729906167, 1729906767, 1729907367, 1729907967, 1729908567, 1729909167, 1729909767, + 1729910367, 1729910967, 1729911567, 1729912167, 1729912767, 1729913367, 1729913967, 1729914567, + 1729915167, 1729915767, 1729916367, 1729916967, 1729917567, 1729918167, 1729918767, 1729919367, + 1729919967, 1729920567, 1729921167, 1729921767, 1729922367, 1729922967, 1729923567, 1729924167, + 1729924767, 1729925367, 1729925967, 1729926567, 1729927167, 1729927767, 1729928367, 1729928967, + 1729929567, 1729930167, 1729930767, 1729931367, 1729931967, 1729932567, 1729933167, 1729933767, + 1729934367, 1729934967, 1729935567, 1729936167, 1729936767, 1729937367, 1729937967, 1729938567, + 1729939167, 1729939767, 1729940367, 1729940967, 1729941567, 1729942167, 1729942767, 1729943367, + 1729943967, 1729944567, 1729945167, 1729945767, 1729946367, 1729946967, 1729947567, 1729948167, + 1729948767, 1729949367, 1729949967, 1729950567, 1729951167, 1729951767, 1729952367, 1729952967, + 1729953567, 1729954167, 1729954767, 1729955367, 1729955967, 1729956567, 1729957167, 1729957767, + 1729958367, 1729958967, 1729959567, 1729960167, 1729960767, 1729961367, 1729961967, 1729962567, + 1729963167, 1729963767, 1729964367, 1729964967, 1729965567, 1729966167, 1729966767, 1729967367, + 1729967967, 1729968567, 1729969167, 1729969767, 1729970367, 1729970967, 1729971567, 1729972167, + 1729972767, 1729973367, 1729973967, 1729974567, 1729975167, 1729975767, 1729976367, 1729976967, + 1729977567, 1729978167, 1729978767, 1729979367, 1729979967, 1729980567, 1729981167, 1729981767, + 1729982367, 1729982967, 1729983567, 1729984167, 1729984767, 1729985367, 1729985967, 1729986567, + 1729987167, 1729987767, 1729988367, 1729988967, 1729989567, 1729990167, 1729990767, 1729991367, + 1729991967, 1729992567, 1729993167, 1729993767, 1729994367, 1729994967, 1729995567, 1729996167, + 1729996767, 1729997367, 1729997967, 1729998567, 1729999167, 1729999767, 1730000367, 1730000967, + 1730001567, 1730002167, 1730002767, 1730003367, 1730003967, 1730004567, 1730005167, 1730005767, + 1730006367, 1730006967, 1730007567, 1730008167, 1730008767, 1730009367, 1730009967, 1730010567, + 1730011167, 1730011767, 1730012367, 1730012967, 1730013567, 1730014167, 1730014767, 1730015367, + 1730015967, 1730016567, 1730017167, 1730017767, 1730018367, 1730018967, 1730019567, 1730020167, + 1730020767, 1730021367, 1730021967, 1730022567, 1730023167, 1730023767, 1730024367, 1730024367, +]; + +static EXPECTED: &[f64] = &[ + 0.48566585406661034, + 0.4869289919734001, + 0.4877674840390682, + 0.48818453401327133, + 0.4881950505077839, + 0.48782483115792274, + 0.4871099852025509, + 0.4860953241586685, + 0.4848331846296787, + 0.4833817593753338, + 0.4818028584122658, + 0.48016058653593063, + 0.47851877100765705, + 0.4769394136965275, + 0.4754804726690054, + 0.4741945303976536, + 0.4731266666203737, + 0.47231375426054, + 0.4717830251902342, + 0.47155135683715343, + 0.47162521071732044, + 0.47200000286102295, + 0.47266104258596897, + 0.47358357161283493, + 0.4747340139001608, + 0.47607117146253586, + 0.47754736989736557, + 0.47911044023931026, + 0.4807051792740822, + 0.48227544873952866, + 0.48376576602458954, + 0.4851234555244446, + 0.48630012199282646, + 0.48725324496626854, + 0.4879477545619011, + 0.48835688829421997, + 0.488463394343853, + 0.488259669393301, + 0.48774827271699905, + 0.4869418404996395, + 0.48586221039295197, + 0.48454030603170395, + 0.4830145165324211, + 0.481329757720232, + 0.4795356746762991, + 0.47768524661660194, + 0.47583273239433765, + 0.4740318339318037, + 0.4723340142518282, + 0.47078644298017025, + 0.46943066641688347, + 0.46830072067677975, + 0.4674222096800804, + 0.46681104227900505, + 0.46647292748093605, + 0.46640303172171116, + 0.46658569388091564, + 0.46699508279561996, + 0.467595599591732, + 0.4683431014418602, + 0.469185933470726, + 0.4700667839497328, + 0.4709241967648268, + 0.47169447876513004, + 0.4723140522837639, + 0.472720954567194, + 0.4728575311601162, + 0.47267183288931847, + 0.47211974300444126, + 0.4711665976792574, + 0.46978825330734253, + 0.4679724723100662, + 0.4657193757593632, + 0.46304203290492296, + 0.4599661733955145, + 0.4565301528200507, + 0.4527837517671287, + 0.44878739801060874, + 0.444610589183867, + 0.44033004995435476, + 0.43602808844298124, + 0.4317900352180004, + 0.4277023281902075, + 0.42384994216263294, + 0.4203142262995243, + 0.4171707406640053, + 0.4144868776202202, + 0.4123203307390213, + 0.4107171632349491, + 0.4097108952701092, + 0.40932099148631096, + 0.409552875906229, + 0.41039736568927765, + 0.4118308871984482, + 0.4138164073228836, + 0.41630400344729424, + 0.41923257149755955, + 0.4225312229245901, + 0.4261213969439268, + 0.4299190156161785, + 0.43383653555065393, + 0.43778563663363457, + 0.441679360345006, + 0.4454346795100719, + 0.4489744657767005, + 0.452229889575392, + 0.45514179300516844, + 0.45766250882297754, + 0.4597570616751909, + 0.46140354685485363, + 0.46259419061243534, + 0.46333478949964046, + 0.46364472806453705, + 0.4635558994486928, + 0.4631119277328253, + 0.4623664356768131, + 0.46138134226202965, + 0.46022508200258017, + 0.4589701984077692, + 0.457691497169435, + 0.456463192589581, + 0.4553572842851281, + 0.45444097789004445, + 0.4537747115828097, + 0.4534106692299247, + 0.4533908343873918, + 0.4537461451254785, + 0.4544953494332731, + 0.45564468763768673, + 0.45718780625611544, + 0.4591057412326336, + 0.4613678874447942, + 0.4639326725155115, + 0.46674924716353416, + 0.4697584956884384, + 0.4728954825550318, + 0.4760908745229244, + 0.4792733434587717, + 0.4823717325925827, + 0.48531673848629, + 0.4880435988306999, + 0.49049340188503265, + 0.49261509254574776, + 0.49436695873737335, + 0.49571747705340385, + 0.4966465048491955, + 0.49714548513293266, + 0.4972178116440773, + 0.49687833711504936, + 0.4961531274020672, + 0.49507826194167137, + 0.4936986342072487, + 0.4920668303966522, + 0.49024083837866783, + 0.4882828891277313, + 0.4862569496035576, + 0.48422709479928017, + 0.4822553023695946, + 0.4803997315466404, + 0.47871300019323826, + 0.47724038548767567, + 0.4760188087821007, + 0.4750755149871111, + 0.47442773915827274, + 0.47408171743154526, + 0.4740332793444395, + 0.4742677006870508, + 0.4747603312134743, + 0.4754778351634741, + 0.47637894935905933, + 0.4774162694811821, + 0.4785376228392124, + 0.47968799248337746, + 0.48081138730049133, + 0.481852438300848, + 0.4827585779130459, + 0.4834814667701721, + 0.48397883772850037, + 0.4842155873775482, + 0.484165258705616, + 0.4838106110692024, + 0.4831441715359688, + 0.4821687787771225, + 0.48089689016342163, + 0.4793508108705282, + 0.477561354637146, + 0.47556718438863754, + 0.47341321036219597, + 0.4711493756622076, + 0.4688287079334259, + 0.46650554053485394, + 0.4642338268458843, + 0.462065014988184, + 0.46004661079496145, + 0.45822009164839983, + 0.4566197441890836, + 0.4552712766453624, + 0.4541907040402293, + 0.4533839854411781, + 0.45284624258056283, + 0.45256209652870893, + 0.45250573428347707, + 0.4526417450979352, + 0.4529261542484164, + 0.4533074335195124, + 0.4537283810786903, + 0.45412757946178317, + 0.45444170851260424, + 0.4546069912612438, + 0.45456192269921303, + 0.4542487468570471, + 0.4536157283000648, + 0.452618972864002, + 0.4512237636372447, + 0.4494062371086329, + 0.4471541615203023, + 0.4444679068401456, + 0.44136051554232836, + 0.43785802368074656, + 0.4339987887069583, + 0.4298327509313822, + 0.4254204835742712, + 0.4208314884454012, + 0.4161428213119507, + 0.41143669933080673, + 0.40679866075515747, + 0.40231532230973244, + 0.39807164669036865, + 0.3941492587327957, + 0.39062364771962166, + 0.38756246119737625, + 0.3850233629345894, + 0.3830527067184448, + 0.38168396055698395, + 0.380936823785305, + 0.3808167651295662, + 0.38131462037563324, + 0.3824071064591408, + 0.38405710458755493, + 0.3862149007618427, + 0.38881945982575417, + 0.3917999565601349, + 0.39507804811000824, + 0.3985695615410805, + 0.40218720585107803, + 0.4058426208794117, + 0.4094490520656109, + 0.4129234217107296, + 0.4161888509988785, + 0.419176472350955, + 0.42182721570134163, + 0.4240936357527971, + 0.4259405340999365, + 0.42734640650451183, + 0.4283033162355423, + 0.42881721444427967, + 0.4289075843989849, + 0.4286063853651285, + 0.42795727401971817, + 0.4270138759166002, + 0.42583828791975975, + 0.42449885234236717, + 0.42306840419769287, + 0.4216214753687382, + 0.42023262567818165, + 0.4189737867563963, + 0.4179121218621731, + 0.4171083178371191, + 0.41661439277231693, + 0.41647252067923546, + 0.41671355068683624, + 0.4173563290387392, + 0.4184072185307741, + 0.4198597129434347, + 0.42169502936303616, + 0.4238824360072613, + 0.4263806212693453, + 0.4291384294629097, + 0.43209705874323845, + 0.43519144505262375, + 0.4383522653952241, + 0.4415083513595164, + 0.44458825211040676, + 0.4475230085590738, + 0.45024761906825006, + 0.4527032570913434, + 0.45483896415680647, + 0.4566128412261605, + 0.45799350924789906, + 0.4589606998488307, + 0.45950596034526825, + 0.4596325270831585, + 0.4593554474413395, + 0.45870058331638575, + 0.45770402904599905, + 0.4564107805490494, + 0.45487314835190773, + 0.45314939972013235, + 0.4513015004340559, + 0.44939352420624346, + 0.44748940347017196, + 0.4456511327298358, + 0.44393692212179303, + 0.44239917676895857, + 0.4410832724533975, + 0.4400259396061301, + 0.439254617318511, + 0.4387861546128988, + 0.4386270409449935, + 0.43877293076366186, + 0.43920894991606474, + 0.4399106064811349, + 0.4408442913554609, + 0.4419688256457448, + 0.44323662482202053, + 0.4445955096744001, + 0.44599047861993313, + 0.44736529395868274, + 0.4486646712757647, + 0.4498358345590532, + 0.450830495916307, + 0.45160615537315607, + 0.4521278450265527, + 0.4523688433691859, + 0.45231182454153895, + 0.45194944087415934, + 0.4512841096147895, + 0.4503285337705165, + 0.44910468463785946, + 0.44764343480346724, + 0.4459832051070407, + 0.4441689820960164, + 0.44225052651017904, + 0.4402807089500129, + 0.43831387627869844, + 0.43640373554080725, + 0.43460183404386044, + 0.4329553674906492, + 0.4315058272331953, + 0.43028739280998707, + 0.4293255377560854, + 0.42863638140261173, + 0.4282255582511425, + 0.42808822914958, + 0.42820877954363823, + 0.4285613428801298, + 0.4291104804724455, + 0.42981192097067833, + 0.43061416782438755, + 0.43145974911749363, + 0.4322873679921031, + 0.4330332512035966, + 0.4336338313296437, + 0.4340272396802902, + 0.43415568582713604, + 0.43396740034222603, + 0.4334181835874915, + 0.4324733428657055, + 0.43110876716673374, + 0.42931222170591354, + 0.42708379216492176, + 0.42443657852709293, + 0.42139639519155025, + 0.4180014096200466, + 0.4143015518784523, + 0.41035712510347366, + 0.4062376990914345, + 0.40201999247074127, + 0.3977861851453781, + 0.3936217986047268, + 0.3896130211651325, + 0.38584501668810844, + 0.3823990449309349, + 0.37935060262680054, + 0.376767061650753, + 0.3747061863541603, + 0.3732139393687248, + 0.37232378125190735, + 0.3720553368330002, + 0.3724137917160988, + 0.3733900710940361, + 0.3749605119228363, + 0.3770880699157715, + 0.37972278892993927, + 0.3828034773468971, + 0.38625937327742577, + 0.3900117687880993, + 0.3939765393733978, + 0.3980661369860172, + 0.402192197740078, + 0.4062676951289177, + 0.410209596157074, + 0.41394082456827164, + 0.41739229299128056, + 0.4205050449818373, + 0.4232311900705099, + 0.42553573846817017, + 0.42739682644605637, + 0.42880649119615555, + 0.42977068573236465, + 0.4303085058927536, + 0.43045203760266304, + 0.43024467676877975, + 0.42974005080759525, + 0.42899999767541885, + 0.42809299007058144, + 0.4270914252847433, + 0.426070025190711, + 0.4251031279563904, + 0.42426246777176857, + 0.42361531034111977, + 0.4232220370322466, + 0.42313471250236034, + 0.4233952909708023, + 0.4240345899015665, + 0.4250714424997568, + 0.42651194147765636, + 0.4283496364951134, + 0.430565532296896, + 0.4331289604306221, + 0.43599828239530325, + 0.4391225236468017, + 0.442442680709064, + 0.4458935134462081, + 0.4494058610871434, + 0.45290814572945237, + 0.456329170614481, + 0.45959965977817774, + 0.46265468932688236, + 0.4654352702200413, + 0.467890378087759, + 0.4699781332165003, + 0.4716669712215662, + 0.4729366786777973, + 0.47377859614789486, + 0.4741961099207401, + 0.4742039926350117, + 0.47382817789912224, + 0.4731047060340643, + 0.4720784015953541, + 0.47080172970891, + 0.46933270804584026, + 0.4677334036678076, + 0.4660677295178175, + 0.4643996339291334, + 0.46279116719961166, + 0.46130031906068325, + 0.45997961331158876, + 0.45887424051761627, + 0.45802114252001047, + 0.4574474021792412, + 0.45717013999819756, + 0.4571957029402256, + 0.45751963555812836, + 0.4581272527575493, + 0.4589938363060355, + 0.4600859126076102, + 0.4613621709868312, + 0.4627751335501671, + 0.4642725270241499, + 0.46579934284090996, + 0.4672994241118431, + 0.4687173720449209, + 0.4700005315244198, + 0.4711004588752985, + 0.4719748757779598, + 0.472588611766696, + 0.47291504219174385, + 0.47293697111308575, + 0.4726467728614807, + 0.472047196701169, + 0.47115073539316654, + 0.4699795227497816, + 0.4685643073171377, + 0.4669437129050493, + 0.46516266092658043, + 0.4632708840072155, + 0.46132139675319195, + 0.4593684347346425, + 0.4574659438803792, + 0.4556653033941984, + 0.45401386450976133, + 0.4525531576946378, + 0.451317282859236, + 0.4503319738432765, + 0.44961318001151085, + 0.4491667391266674, + 0.4489877375308424, + 0.44906073645688593, + 0.4493598276749253, + 0.44984963117167354, + 0.4504860215820372, + 0.45121741155162454, + 0.4519866299815476, + 0.45273211039602757, + 0.45339047629386187, + 0.45389798376709223, + 0.45419292338192463, + 0.45421766210347414, + 0.45392031967639923, + 0.453256921377033, + 0.45219272654503584, + 0.4507038197480142, + 0.4487778879702091, + 0.4464152832515538, + 0.4436290869489312, + 0.44044513860717416, + 0.4369018077850342, + 0.43304895889014006, + 0.4289471786469221, + 0.4246659278869629, + 0.4202820956707001, + 0.41587806679308414, + 0.41153915598988533, + 0.4073519743978977, + 0.40340153872966766, + 0.3997693359851837, + 0.3965308181941509, + 0.39375369995832443, + 0.3914954997599125, + 0.38980257883667946, + 0.38870837539434433, + 0.3882325142621994, + 0.3883805349469185, + 0.38914313167333603, + 0.390497051179409, + 0.39240512996912, + 0.39481760188937187, + 0.39767346158623695, + 0.4009018614888191, + 0.40442436933517456, + 0.408156830817461, + 0.41201192140579224, + 0.41590123623609543, + 0.4197380617260933, + 0.4234392922371626, + 0.42692795023322105, + 0.4301352743059397, + 0.4330020807683468, + 0.4354809122160077, + 0.4375366484746337, + 0.43914768332615495, + 0.44030609680339694, + 0.4410178321413696, + 0.44130236050114036, + 0.4411916360259056, + 0.4407293079420924, + 0.43996896408498287, + 0.4389727865345776, + 0.4378090240061283, + 0.43655048310756683, + 0.43527186568826437, + 0.4340475294739008, + 0.4329495206475258, + 0.43204500433057547, + 0.43139461148530245, + 0.4310503927990794, + 0.43105446361005306, + 0.43143783416599035, + 0.4322192622348666, + 0.43340509105473757, + 0.4349888525903225, + 0.436951769515872, + 0.4392631221562624, + 0.44188155187293887, + 0.4447560926200822, + 0.44782774802297354, + 0.4510316136293113, + 0.4542982950806618, + 0.4575566379353404, + 0.46073530055582523, + 0.46376524679362774, + 0.4665814973413944, + 0.4691253323107958, + 0.47134572453796864, + 0.4732008259743452, + 0.47465928085148335, + 0.4757008086889982, + 0.47631704434752464, + 0.47651124745607376, + 0.47629839926958084, + 0.4757045079022646, + 0.47476557455956936, + 0.47352671064436436, + 0.47204025462269783, + 0.4703644458204508, + 0.4685613065958023, + 0.4666948802769184, + 0.4648292791098356, + 0.4630264434963465, + 0.4613445792347193, + 0.4598361300304532, + 0.4585465909913182, + 0.4575126366689801, + 0.45676174107939005, + 0.45631087850779295, + 0.45616645459085703, + 0.45632424764335155, + 0.4567694216966629, + 0.45747746154665947, + 0.45841482374817133, + 0.4595403717830777, + 0.4608065253123641, + 0.4621612373739481, + 0.4635494500398636, + 0.46491500176489353, + 0.46620264649391174, + 0.46735961735248566, + 0.4683377258479595, + 0.46909451857209206, + 0.4695949424058199, + 0.46981253288686275, + 0.4697298239916563, + 0.4693395420908928, + 0.46864423528313637, + 0.46765656024217606, + 0.46639852970838547, + 0.4649010933935642, + 0.46320280246436596, + 0.4613485373556614, + 0.45938816480338573, + 0.4573745662346482, + 0.4553621970117092, + 0.4534048056229949, + 0.45155389327555895, + 0.4498568228445947, + 0.44835500698536634, + 0.44708275818265975, + 0.4460656016599387, + 0.4453196337817644, + 0.44485056959092617, + 0.4446536109317094, + 0.44471316022099927, + 0.4450034822220914, + 0.4454890946508385, + 0.4461257698130794, + 0.44686214497778565, + 0.4476407039910555, + 0.4484001910313964, + 0.44907697080634534, + 0.44960736529901624, + 0.4499297612346709, + 0.44998623337596655, + 0.4497251119464636, + 0.4491022424772382, + 0.4480829741805792, + 0.4466432082699612, + 0.4447708396182861, + 0.4424659109208733, + 0.4397415886633098, + 0.43662373162806034, + 0.4331505196169019, + 0.4293719809502363, + 0.42534845136106014, + 0.4211494941264391, + 0.4168518893420696, + 0.4125378578901291, + 0.4082929268479347, + 0.4042034223675728, + 0.40035445243120193, + 0.3968273289501667, + 0.3936976045370102, + 0.3910326845943928, + 0.38889030367136, + 0.38731664046645164, + 0.386344987899065, + 0.38599513471126556, + 0.38627223670482635, + 0.3871672488749027, + 0.3886566124856472, + 0.3907031789422035, + 0.3932572044432163, + 0.396257434040308, + 0.39963310211896896, + 0.4033055789768696, + 0.4071907550096512, + 0.4112010821700096, + 0.4152482636272907, + 0.4192453809082508, + 0.4231092818081379, + 0.42676297202706337, + 0.4301374005153775, + 0.43317359685897827, + 0.43582379166036844, + 0.4380529234185815, + 0.4398391875438392, + 0.4411746375262737, + 0.44206522265449166, + 0.4425301495939493, + 0.4426014351192862, + 0.4423224925994873, + 0.44174706120975316, + 0.44093690859153867, + 0.4399604918435216, + 0.438890409655869, + 0.4378011878579855, + 0.43676730059087276, + 0.43586049787700176, + 0.4351479997858405, + 0.43469023145735264, + 0.4345392705872655, + 0.43473705276846886, + 0.43531449884176254, + 0.4362903628498316, + 0.43767077615484595, + 0.43944930052384734, + 0.44160691811703146, + 0.44411302771186456, + 0.44692599889822304, + 0.44999477500095963, + 0.4532604767009616, + 0.4566577821969986, + 0.46011753287166357, + 0.4635682459920645, + 0.4669386353343725, + 0.4701594337821007, + 0.47316574305295944, + 0.4758986681699753, + 0.4783070310950279, + 0.48034902289509773, + 0.48199303820729256, + 0.483218926936388, + 0.4840180277824402, + 0.4843936264514923, + 0.48436062410473824, + 0.4839448221027851, + 0.4831823520362377, + 0.48211802542209625, + 0.4808042496442795, + 0.47929906100034714, + 0.4776644594967365, + 0.47596449963748455, + 0.47426304034888744, + 0.4726220816373825, + 0.47109960950911045, + 0.4697482269257307, + 0.46861302480101585, + 0.4677309300750494, + 0.4671291094273329, + 0.466824546456337, + 0.46682366728782654, + 0.4671220052987337, + 0.46770479902625084, + 0.4685473460704088, + 0.46961615793406963, + 0.4708698783069849, + 0.47226104885339737, + 0.47373746521770954, + 0.47524395026266575, + 0.47672439739108086, + 0.47812335193157196, + 0.47938820347189903, + 0.4804705008864403, + 0.481327872723341, + 0.4819251634180546, + 0.48223573341965675, + 0.48224233090877533, + 0.4819374047219753, + 0.48132359609007835, + 0.48041336983442307, + 0.4792289324104786, + 0.4778009243309498, + 0.4761679731309414, + 0.4743749778717756, + 0.4724716227501631, + 0.4705109875649214, + 0.46854719892144203, + 0.4666342046111822, + 0.46482336334884167, + 0.4631619770079851, + 0.4616916049271822, + 0.46044632978737354, + 0.45945179741829634, + 0.4587239669635892, + 0.4582686508074403, + 0.4580808822065592, + 0.45814522728323936, + 0.4584358436986804, + 0.4589171474799514, + 0.4595451382920146, + 0.4602681137621403, + 0.4610288795083761, + 0.4617659356445074, + 0.4624157305806875, + 0.4629147034138441, + 0.4632009416818619, + 0.46321685053408146, + 0.4629105255007744, + 0.4622379634529352, + 0.46116437017917633, + 0.4596658395603299, + 0.4577301237732172, + 0.4553573979064822, + 0.45256078243255615, + 0.4493660619482398, + 0.44581164384726435, + 0.44194736634381115, + 0.4378337380476296, + 0.43354022316634655, + 0.429143687710166, + 0.42472646571695805, + 0.4203739408403635, + 0.4161726087331772, + 0.4122074954211712, + 0.4085600674152374, + 0.40530575811862946, + 0.40251222252845764, + 0.4002370573580265, + 0.39852647855877876, + 0.39741402491927147, + 0.39691921696066856, + 0.39704756438732147, + 0.3977898471057415, + 0.3991226926445961, + 0.4010089188814163, + 0.4033988304436207, + 0.4062313213944435, + 0.40943555533885956, + 0.41293308325111866, + 0.41663970053195953, + 0.42046812921762466, + 0.4243299514055252, + 0.42813834734261036, + 0.4318103129044175, + 0.43526877369731665, + 0.43844495015218854, + 0.44127973378635943, + 0.44372557059978135, + 0.4457473545335233, + 0.44732340914197266, + 0.4484459515661001, + 0.44912082608789206, + 0.44936746498569846, + 0.4492178112268448, + 0.4487155945971608, + 0.4479143063072115, + 0.44687609071843326, + 0.4456693675601855, + 0.4443667281011585, + 0.44304298912175, + 0.4417725009843707, + 0.44062724616378546, + 0.4396744132973254, + 0.43897457234561443, + 0.43857991928234696, + 0.43853247724473476, + 0.438863224349916, + 0.4395909486338496, + 0.44072198984213173, + 0.4422498500207439, + 0.4441558140970301, + 0.4464091630652547, + 0.4489684496074915, + 0.4517828291282058, + 0.4547932194545865, + 0.4579347185790539, + 0.46113802678883076, + 0.4643319044262171, + 0.46744501404464245, + 0.47040835581719875, + 0.47315705195069313, + 0.475632231682539, + 0.4777829386293888, + 0.4795673042535782, + 0.48095404356718063, + 0.4819228835403919, + 0.4824654087424278, + 0.4825849160552025, + 0.4822963774204254, + 0.48162586241960526, + 0.48060939460992813, + 0.47929203137755394, + 0.47772616147994995, + 0.4759700298309326, + 0.47408564761281013, + 0.4721371717751026, + 0.4701886307448149, + 0.4683019816875458, + 0.46653554402291775, + 0.4649416822940111, + 0.4635659158229828, + 0.46244502253830433, + 0.4616063516587019, + 0.46106707118451595, + 0.4608335215598345, + 0.4609014708548784, + 0.4612561333924532, + 0.46187301725149155, + 0.46271857246756554, + 0.4637517109513283, + 0.4649249706417322, + 0.46618617326021194, + 0.4674803540110588, + 0.468751335516572, + 0.46994396299123764, + 0.4710054937750101, + 0.47188764810562134, + 0.4725482016801834, + 0.4729519560933113, + 0.47307249903678894, + 0.4728924836963415, + 0.4724045731127262, + 0.4716113768517971, + 0.4705255776643753, + 0.46916921995580196, + 0.4675732795149088, + 0.4657763373106718, + 0.4638232756406069, + 0.4617640804499388, + 0.45965157449245453, + 0.4575402718037367, + 0.4554839516058564, + 0.4535341216251254, + 0.45173822902143, + 0.4501377223059535, + 0.4487668848596513, + 0.4476513038389385, + 0.44680710905231535, + 0.4462400167249143, + 0.4459453201852739, + 0.4459074556361884, + 0.44610066059976816, + 0.44648951618000865, + 0.44702982739545405, + 0.4476702339015901, + 0.4483533427119255, + 0.4490178423002362, + 0.44960015872493386, + 0.4500366491265595, + 0.4502657041884959, + 0.4502295167185366, + 0.449876366648823, + 0.4491621288470924, + 0.448052276391536, + 0.44652265473268926, + 0.4445611606352031, + 0.44216804986353964, + 0.4393563116900623, + 0.4361519571393728, + 0.43259319942444563, + 0.4287300379946828, + 0.42462287470698357, + 0.42034123837947845, + 0.41596209816634655, + 0.411567609757185, + 0.4072433076798916, + 0.40307557582855225, + 0.399149551987648, + 0.3955465517938137, + 0.3923421837389469, + 0.38960398361086845, + 0.38738952577114105, + 0.38574517145752907, + 0.3847041465342045, + 0.3842862881720066, + 0.38449684903025627, + 0.38532667234539986, + 0.3867524042725563, + 0.3887368366122246, + 0.391230221837759, + 0.3941713571548462, + 0.3974895067512989, + 0.4011060371994972, + 0.40493692085146904, + 0.4088946357369423, + 0.41289085149765015, + 0.4168386999517679, + 0.4206550233066082, + 0.4242629110813141, + 0.42759333178400993, + 0.4305872796103358, + 0.4331970326602459, + 0.43538755364716053, + 0.4371370240114629, + 0.4384376099333167, + 0.4392951864283532, + 0.43972898041829467, + 0.4397711134515703, + 0.4394649276509881, + 0.43886417942121625, + 0.438030737452209, + 0.43703295895829797, + 0.4359435420483351, + 0.43483702931553125, + 0.43378784600645304, + 0.43286778312176466, + 0.43214407470077276, + 0.43167712446302176, + 0.43151905108243227, + 0.4317118898034096, + 0.43228641618043184, + 0.43326145596802235, + 0.43464311584830284, + 0.4364250237122178, + 0.43858816754072905, + 0.4411018294049427, + 0.44392459344817325, + 0.44700522627681494, + 0.4502848805859685, + 0.453698324970901, + 0.4571763128042221, + 0.46064736135303974, + 0.46404021233320236, + 0.4672856852412224, + 0.47031873278319836, + 0.47308051586151123, + 0.4755198210477829, + 0.47759491950273514, + 0.47927412018179893, + 0.4805372580885887, + 0.4813757501542568, + 0.48179277032613754, + 0.4818032868206501, + 0.48143309727311134, + 0.4807182513177395, + 0.4797035902738571, + 0.4784415103495121, + 0.4769899956882, + 0.4754111245274544, + 0.47376885265111923, + 0.47212700732052326, + 0.4705476798117161, + 0.469088738784194, + 0.4678027667105198, + 0.4667349327355623, + 0.4659219905734062, + 0.4653912913054228, + 0.46515962295234203, + 0.46523344703018665, + 0.46560826897621155, + 0.46626930870115757, + 0.46719180792570114, + 0.46834233961999416, + 0.46967943757772446, + 0.47115563601255417, + 0.47271870635449886, + 0.4743134155869484, + 0.47588368505239487, + 0.47737403213977814, + 0.47873175144195557, + 0.47990838810801506, + 0.48086148127913475, + 0.4815559908747673, + 0.48196515440940857, + 0.4820716604590416, + 0.4818679355084896, + 0.48135659843683243, + 0.4805500768125057, + 0.47947047650814056, + 0.47814857214689255, + 0.4766227528452873, + 0.4749380238354206, + 0.4731439407914877, + 0.47129354253411293, + 0.46944099850952625, + 0.4676400702446699, + 0.4659422505646944, + 0.46439470909535885, + 0.46303893253207207, + 0.46190898679196835, + 0.461030475795269, + 0.46041927859187126, + 0.46008122339844704, + 0.46001129783689976, + 0.46019395999610424, + 0.46060334891080856, + 0.46120383590459824, + 0.4619513377547264, + 0.4627941995859146, + 0.46367507986724377, + 0.4645324628800154, + 0.46530274488031864, + 0.4659222885966301, + 0.4663292206823826, + 0.4664657972753048, + 0.4662800692021847, + 0.46572806872427464, + 0.464774863794446, + 0.4633965492248535, + 0.4615807384252548, + 0.4593276120722294, + 0.4566502692177892, + 0.4535744395107031, + 0.4501384189352393, + 0.4463920178823173, + 0.4423956939281197, + 0.4382188254967332, + 0.43393831606954336, + 0.42963635455816984, + 0.425398301333189, + 0.4213105943053961, + 0.41745817847549915, + 0.4139225222170353, + 0.4107790067791939, + 0.4080951139330864, + 0.4059285968542099, + 0.4043254293501377, + 0.4033191315829754, + 0.40292925760149956, + 0.40316117182374, + 0.40400560200214386, + 0.4054391533136368, + 0.4074246734380722, + 0.40991226956248283, + 0.41284083761274815, + 0.4161394592374563, + 0.4197296928614378, + 0.4235272817313671, + 0.42744480166584253, + 0.43139390274882317, + 0.4352875966578722, + 0.4390429158229381, + 0.4425827318918891, + 0.4458381556905806, + 0.44875005912035704, + 0.45127077493816614, + 0.45336529798805714, + 0.45501181297004223, + 0.45620245672762394, + 0.4569430258125067, + 0.45725299417972565, + 0.4571641655638814, + 0.45672022365033627, + 0.4559747017920017, + 0.45498957857489586, + 0.4538333183154464, + 0.4525784645229578, + 0.45129973348230124, + 0.4500714587047696, + 0.4489655802026391, + 0.44804921420291066, + 0.4473829776979983, + 0.4470189353451133, + 0.4469991005025804, + 0.4473544112406671, + 0.4481035857461393, + 0.4492529835551977, + 0.45079607237130404, + 0.4527140371501446, + 0.4549761535599828, + 0.4575409386307001, + 0.4603574834764004, + 0.463366761803627, + 0.4665037486702204, + 0.46969911083579063, + 0.4728816691786051, + 0.4759799689054489, + 0.4789250046014786, + 0.4816518649458885, + 0.48410163819789886, + 0.48622341826558113, + 0.48797522485256195, + 0.48932577297091484, + 0.4902547709643841, + 0.4907537214457989, + 0.4908260479569435, + 0.49048660323023796, + 0.48976142331957817, + 0.48868652805685997, + 0.48730695992708206, + 0.48567506670951843, + 0.48384910449385643, + 0.4818911552429199, + 0.4798652157187462, + 0.47783536091446877, + 0.4758635386824608, + 0.4740080274641514, + 0.47232126630842686, + 0.4708486218005419, + 0.4696270748972893, + 0.4686837811022997, + 0.46803597547113895, + 0.46768998354673386, + 0.4676415752619505, + 0.46787593699991703, + 0.4683685973286629, + 0.4690861012786627, + 0.46998721547424793, + 0.4710245355963707, + 0.47214585915207863, + 0.47329628840088844, + 0.47441965341567993, + 0.475460734218359, + 0.4763668440282345, + 0.47708970308303833, + 0.4775870740413666, + 0.4778238534927368, + 0.477773554623127, + 0.477418877184391, + 0.47675249725580215, + 0.4757770150899887, + 0.47450515627861023, + 0.4729590769857168, + 0.4711695909500122, + 0.46917545050382614, + 0.46702147647738457, + 0.4647576715797186, + 0.4624369740486145, + 0.4601138364523649, + 0.45784206315875053, + 0.4556732811033726, + 0.45365487691015005, + 0.45182835776358843, + 0.45022804010659456, + 0.4488795129582286, + 0.4477989999577403, + 0.4469922515563667, + 0.44645450869575143, + 0.44617036264389753, + 0.4461139705963433, + 0.4462500410154462, + 0.446534420363605, + 0.4469157294370234, + 0.4473366471938789, + 0.44773584557697177, + 0.44804994482547045, + 0.4482152573764324, + 0.4481701888144016, + 0.4478569831699133, + 0.4472240540198982, + 0.4462272389791906, + 0.4448320297524333, + 0.4430145032238215, + 0.4407623978331685, + 0.4380761431530118, + 0.43496878165751696, + 0.43146631959825754, + 0.4276070548221469, + 0.42344104684889317, + 0.4190287198871374, + 0.4144397545605898, + 0.4097510874271393, + 0.40504496544599533, + 0.40040698647499084, + 0.39592355862259865, + 0.39167994260787964, + 0.3877575248479843, + 0.38423188403248787, + 0.38117072731256485, + 0.378631629049778, + 0.3766610026359558, + 0.37529222667217255, + 0.374545119702816, + 0.3744250014424324, + 0.3749229460954666, + 0.3760153725743294, + 0.37766537070274353, + 0.3798231966793537, + 0.3824276961386204, + 0.38540828227996826, + 0.38868631422519684, + 0.39217785745859146, + 0.39579547196626663, + 0.3994508571922779, + 0.4030572883784771, + 0.4065316878259182, + 0.40979714691638947, + 0.4127847384661436, + 0.415435541421175, + 0.41770187206566334, + 0.4195488002151251, + 0.42095467261970043, + 0.4219115525484085, + 0.42242554016411304, + 0.4225158505141735, + 0.4222146812826395, + 0.42156554013490677, + 0.42062211222946644, + 0.41944655403494835, + 0.41810711845755577, + 0.4166766405105591, + 0.4152297414839268, + 0.41384092159569263, + 0.4125820230692625, + 0.4115203879773617, + 0.4107165839523077, + 0.41022265888750553, + 0.41008078679442406, + 0.41032178699970245, + 0.4109646249562502, + 0.4120154846459627, + 0.4134680088609457, + 0.41530329547822475, + 0.4174907021224499, + 0.4199888575822115, + 0.4227466955780983, + 0.42570535466074944, + 0.42879971116781235, + 0.43196059111505747, + 0.4351165876723826, + 0.43819651822559536, + 0.4411312746742624, + 0.44385585538111627, + 0.4463115828111768, + 0.44844723027199507, + 0.4502211371436715, + 0.45160177536308765, + 0.4525689957663417, + 0.45311419665813446, + 0.4532407931983471, + 0.4529637135565281, + 0.45230884943157434, + 0.45131232496351004, + 0.4500190168619156, + 0.4484814442694187, + 0.44675766583532095, + 0.4449097665492445, + 0.44300179032143205, + 0.4410976397830382, + 0.4392594286473468, + 0.43754518823698163, + 0.43600747268646955, + 0.4346915385685861, + 0.4336342057213187, + 0.4328628536313772, + 0.4323944207280874, + 0.4322353368625045, + 0.4323811670765281, + 0.4328172756358981, + 0.4335188725963235, + 0.4344525574706495, + 0.4355770917609334, + 0.43684486113488674, + 0.4382038055919111, + 0.4395987447351217, + 0.44097358987619373, + 0.4422729373909533, + 0.4434440708719194, + 0.4444387322291732, + 0.44521442148834467, + 0.4457361111417413, + 0.4459771094843745, + 0.44592015026137233, + 0.44555767718702555, + 0.4448923757299781, + 0.4439367998857051, + 0.4427129209507257, + 0.44125170091865584, + 0.4395914712222293, + 0.4377772780135274, + 0.43585879262536764, + 0.43388894526287913, + 0.43192211259156466, + 0.43001200165599585, + 0.42821010015904903, + 0.4265636336058378, + 0.4251141231507063, + 0.4238956291228533, + 0.4229338336735964, + 0.42224464751780033, + 0.4218338243663311, + 0.4216964952647686, + 0.42181701585650444, + 0.4221696387976408, + 0.4227187465876341, + 0.4234202168881893, + 0.42422243393957615, + 0.42506801523268223, + 0.4258956043049693, + 0.4266415173187852, + 0.4272420974448323, + 0.42763547599315643, + 0.4277640115469694, + 0.4275756664574146, + 0.4270264795050025, + 0.4260816089808941, + 0.42471700347959995, + 0.42292045801877975, + 0.42069205828011036, + 0.4180448744446039, + 0.41500466130673885, + 0.4116097055375576, + 0.4079097881913185, + 0.40396539121866226, + 0.3998459652066231, + 0.39562825858592987, + 0.3913945108652115, + 0.387230034917593, + 0.3832213170826435, + 0.37945328280329704, + 0.3760072812438011, + 0.37295886874198914, + 0.3703753277659416, + 0.3683144226670265, + 0.3668222054839134, + 0.36593207716941833, + 0.3656635731458664, + 0.3660220578312874, + 0.3669983074069023, + 0.3685687780380249, + 0.3706963360309601, + 0.3733310252428055, + 0.3764118030667305, + 0.37986763939261436, + 0.3836200647056103, + 0.3875848054885864, + 0.39167437329888344, + 0.3958004340529442, + 0.3998759612441063, + 0.40381789207458496, + 0.40754909068346024, + 0.41100061871111393, + 0.4141132812947035, + 0.4168394561856985, + 0.41914400458335876, + 0.4210050627589226, + 0.4224148169159889, + 0.42337892204523087, + 0.4239168018102646, + 0.42406030371785164, + 0.42385297268629074, + 0.42334831692278385, + 0.42260826379060745, + 0.42170122638344765, + 0.4206996913999319, + 0.419678321108222, + 0.4187113642692566, + 0.41787079349160194, + 0.41722357645630836, + 0.4168303031474352, + 0.41674297861754894, + 0.4170035272836685, + 0.4176428858190775, + 0.4186797086149454, + 0.42012023739516735, + 0.42195790261030197, + 0.4241737686097622, + 0.4267371967434883, + 0.42960654851049185, + 0.4327308195643127, + 0.4360509468242526, + 0.43950183916604146, + 0.44301409740000963, + 0.44651641184464097, + 0.44993743672966957, + 0.45320789609104395, + 0.45626295544207096, + 0.4590435363352299, + 0.46149867400527, + 0.4635863993316889, + 0.4652752075344324, + 0.46654491499066353, + 0.46738686226308346, + 0.4678043760359287, + 0.46781225875020027, + 0.4674364738166332, + 0.4667129423469305, + 0.4667129423469305, +]; diff --git a/justfile b/justfile index afb6411..e8272ef 100644 --- a/justfile +++ b/justfile @@ -35,7 +35,7 @@ test-all: --workspace \ --exclude augurs-js \ --exclude pyaugurs \ - -E 'not (binary(/iai/) | binary(/prophet/))' + -E 'not (binary(/iai/) | binary(/prophet-cmdstan/))' doctest: # Ignore augurs-js and pyaugurs since they either won't compile with all features enabled @@ -51,3 +51,7 @@ watch: # Download the Prophet Stan model. download-prophet-stan-model: cargo run --features download --bin download-stan-model + +build-component: + just components/build + cp components/cpp/prophet-wasmstan/prophet-wasmstan.wasm crates/augurs-prophet/prophet-wasmstan.wasm