diff --git a/bindings/python/lib.cpp b/bindings/python/lib.cpp index 8d86cd566..4e84c059b 100644 --- a/bindings/python/lib.cpp +++ b/bindings/python/lib.cpp @@ -225,6 +225,9 @@ BOOST_PYTHON_MODULE(libcloudphxx) .value("implicit", lgr::as_t::implicit) .value("euler", lgr::as_t::euler) .value("pred_corr", lgr::as_t::pred_corr); + bp::enum_("sgs_adve_t") + .value("ST_periodic", lgr::sgs_adve_t::ST_periodic) + .value("GA17", lgr::sgs_adve_t::GA17); bp::enum_("src_t") .value("off", lgr::src_t::off) .value("simple", lgr::src_t::simple) @@ -253,7 +256,7 @@ BOOST_PYTHON_MODULE(libcloudphxx) .def_readwrite("chem_dsc", &lgr::opts_t::chem_dsc) .def_readwrite("chem_rct", &lgr::opts_t::chem_rct) .def_readwrite("RH_max", &lgr::opts_t::RH_max) - .def_readwrite("turb_adve", &lgr::opts_t::turb_adve) + .def_readwrite("sgs_adve", &lgr::opts_t::sgs_adve) .def_readwrite("turb_cond", &lgr::opts_t::turb_cond) .def_readwrite("turb_coal", &lgr::opts_t::turb_coal) .def_readwrite("dt", &lgr::opts_t::dt) @@ -292,7 +295,6 @@ BOOST_PYTHON_MODULE(libcloudphxx) .def_readwrite("sedi_switch", &lgr::opts_init_t::sedi_switch) .def_readwrite("subs_switch", &lgr::opts_init_t::subs_switch) .def_readwrite("rlx_switch", &lgr::opts_init_t::rlx_switch) - .def_readwrite("turb_adve_switch", &lgr::opts_init_t::turb_adve_switch) .def_readwrite("turb_cond_switch", &lgr::opts_init_t::turb_cond_switch) .def_readwrite("turb_coal_switch", &lgr::opts_init_t::turb_coal_switch) .def_readwrite("exact_sstp_cond", &lgr::opts_init_t::exact_sstp_cond) @@ -302,6 +304,7 @@ BOOST_PYTHON_MODULE(libcloudphxx) .def_readwrite("supstp_src", &lgr::opts_init_t::supstp_src) .def_readwrite("supstp_rlx", &lgr::opts_init_t::supstp_rlx) .def_readwrite("kernel", &lgr::opts_init_t::kernel) + .def_readwrite("sgs_adve", &lgr::opts_init_t::sgs_adve) .def_readwrite("adve_scheme", &lgr::opts_init_t::adve_scheme) .def_readwrite("sd_conc", &lgr::opts_init_t::sd_conc) .def_readwrite("sd_conc_large_tail", &lgr::opts_init_t::sd_conc_large_tail) @@ -321,10 +324,17 @@ BOOST_PYTHON_MODULE(libcloudphxx) .def_readwrite("rng_seed_init", &lgr::opts_init_t::rng_seed_init) .def_readwrite("rng_seed_init_switch", &lgr::opts_init_t::rng_seed_init_switch) .def_readwrite("diag_incloud_time", &lgr::opts_init_t::diag_incloud_time) + .def_readwrite("init_pair_separation", &lgr::opts_init_t::init_pair_separation) .add_property("w_LS", &lgrngn::get_w_LS, &lgrngn::set_w_LS) .add_property("SGS_mix_len", &lgrngn::get_SGS_mix_len, &lgrngn::set_SGS_mix_len) .add_property("kernel_parameters", &lgrngn::get_kp, &lgrngn::set_kp) .def_readwrite("variable_dt_switch", &lgr::opts_init_t::variable_dt_switch) + .def_readwrite("ST_eps", &lgr::opts_init_t::ST_eps) + .def_readwrite("ST_Nmodes", &lgr::opts_init_t::ST_Nmodes) + .def_readwrite("ST_Nwaves_max", &lgr::opts_init_t::ST_Nwaves_max) + .def_readwrite("ST_Lmax", &lgr::opts_init_t::ST_Lmax) + .def_readwrite("ST_Lmin", &lgr::opts_init_t::ST_Lmin) + .def_readwrite("periodic_topbot_walls", &lgr::opts_init_t::periodic_topbot_walls) ; bp::class_/*, boost::noncopyable*/>("particles_proto_t") .add_property("opts_init", &lgrngn::get_oi) @@ -381,6 +391,7 @@ BOOST_PYTHON_MODULE(libcloudphxx) .def("diag_wet_mom", &lgr::particles_proto_t::diag_wet_mom) .def("diag_kappa_mom", &lgr::particles_proto_t::diag_kappa_mom) .def("diag_incloud_time_mom", &lgr::particles_proto_t::diag_incloud_time_mom) + .def("diag_pair_separation_mean", &lgr::particles_proto_t::diag_pair_separation_mean) .def("diag_wet_mass_dens", &lgr::particles_proto_t::diag_wet_mass_dens) .def("diag_chem", &lgr::particles_proto_t::diag_chem) .def("diag_precip_rate", &lgr::particles_proto_t::diag_precip_rate) diff --git a/include/libcloudph++/common/GA17_turbulence.hpp b/include/libcloudph++/common/GA17_turbulence.hpp index ed43f3acc..f7b90dee8 100644 --- a/include/libcloudph++/common/GA17_turbulence.hpp +++ b/include/libcloudph++/common/GA17_turbulence.hpp @@ -80,7 +80,7 @@ namespace libcloudphxx template BOOST_GPU_ENABLED - quantity update_turb_vel( + quantity update_sgs_vel( const quantity &wp, const quantity &tau, const quantity &dt, diff --git a/include/libcloudph++/lgrngn/opts.hpp b/include/libcloudph++/lgrngn/opts.hpp index 8a32a7e25..7af48cad2 100644 --- a/include/libcloudph++/lgrngn/opts.hpp +++ b/include/libcloudph++/lgrngn/opts.hpp @@ -19,7 +19,7 @@ namespace libcloudphxx struct opts_t { // process toggling - bool adve, sedi, subs, cond, coal, src, rlx, rcyc, turb_adve, turb_cond, turb_coal; + bool adve, sedi, subs, cond, coal, src, rlx, rcyc, sgs_adve, turb_cond, turb_coal; // RH limit for drop growth real_t RH_max; @@ -35,7 +35,7 @@ namespace libcloudphxx opts_t() : adve(true), sedi(true), subs(false), cond(true), coal(true), src(false), rlx(false), rcyc(false), chem_dsl(false), chem_dsc(false), chem_rct(false), - turb_adve(false), turb_cond(false), turb_coal(false), + sgs_adve(false), turb_cond(false), turb_coal(false), RH_max(44), // :) (anything greater than 1.1 would be enough dt(-1) // negative means that we do not override dt in this step { diff --git a/include/libcloudph++/lgrngn/opts_init.hpp b/include/libcloudph++/lgrngn/opts_init.hpp index 504e5f8bc..c7518884d 100644 --- a/include/libcloudph++/lgrngn/opts_init.hpp +++ b/include/libcloudph++/lgrngn/opts_init.hpp @@ -12,6 +12,7 @@ #include "terminal_velocity.hpp" #include "advection_scheme.hpp" #include "RH_formula.hpp" +#include "sgs_adve.hpp" #include "ccn_source.hpp" #include "../common/chem.hpp" @@ -93,14 +94,25 @@ namespace libcloudphxx sedi_switch, // if false no sedimentation throughout the whole simulation subs_switch, // if false no subsidence throughout the whole simulation rlx_switch, // if false no relaxation throughout the whole simulation - turb_adve_switch, // if true, turbulent motion of SDs is modeled turb_cond_switch, // if true, turbulent condensation of SDs is modeled turb_coal_switch, // if true, turbulent coalescence kernels can be used exact_sstp_cond; // if true, use per-particle sstp_cond logic, if false, use per-cell + + sgs_adve_t sgs_adve; // model of SGS advection to be used. + // parameters of the synthetic turbulence model (if used) + int ST_Nmodes, // number of Fourier modes + ST_Nwaves_max; // maximum number of wave numbers per mode + real_t ST_eps, // TKE dissipation rate [m^2 / s^3], constant and uniform + ST_Lmax, // maximum wave length of the ST modes [m] + ST_Lmin; // minimum wave length of the ST modes [m] int sstp_chem; real_t chem_rho; + // initial distance between every second SD and the preceeding one [m], + // used in the pair separation test of the SGS advection model + real_t init_pair_separation; + // do we want to track the time SDs spend inside clouds bool diag_incloud_time; @@ -205,13 +217,13 @@ namespace libcloudphxx rlx_switch(false), exact_sstp_cond(false), turb_cond_switch(false), - turb_adve_switch(false), turb_coal_switch(false), RH_max(.95), // value seggested in Lebo and Seinfeld 2011 chem_rho(0), // dry particle density //TODO add checking if the user gave a different value (np w init) (was 1.8e-3) rng_seed(44), rng_seed_init(44), terminal_velocity(vt_t::undefined), + sgs_adve(sgs_adve_t::undefined), kernel(kernel_t::undefined), adve_scheme(as_t::implicit), RH_formula(RH_formula_t::pv_cc), @@ -237,6 +249,12 @@ namespace libcloudphxx open_side_walls(false), periodic_topbot_walls(false), variable_dt_switch(false), + init_pair_separation(-1), + ST_Nmodes(10), + ST_Nwaves_max(10), + ST_eps(-1), + ST_Lmax(100), + ST_Lmin(1e-3), rng_seed_init_switch(false) {} diff --git a/include/libcloudph++/lgrngn/particles.hpp b/include/libcloudph++/lgrngn/particles.hpp index f494b8d9a..279b34587 100644 --- a/include/libcloudph++/lgrngn/particles.hpp +++ b/include/libcloudph++/lgrngn/particles.hpp @@ -105,12 +105,19 @@ namespace libcloudphxx virtual void diag_up_mom(const int&) { assert(false); } virtual void diag_vp_mom(const int&) { assert(false); } virtual void diag_wp_mom(const int&) { assert(false); } + virtual std::pair diag_up_minmax() { assert(false); } + virtual std::pair diag_vp_minmax() { assert(false); } + virtual std::pair diag_wp_minmax() { assert(false); } virtual void diag_incloud_time_mom(const int&) { assert(false); } // requires opts_init.diag_incloud_time==true virtual void diag_max_rw() { assert(false); } virtual void diag_vel_div() { assert(false); } + virtual real_t diag_pair_separation_mean() { assert(false); } + virtual int diag_sstp_coal() { assert(false); } virtual std::map diag_puddle() { assert(false); return std::map(); } virtual real_t *outbuf() { assert(false); return NULL; } + virtual void remove_wet_rng(const real_t&, const real_t&) { assert(false); } + // storing a pointer to opts_init (e.g. for interrogatin about // dimensions in Python bindings) opts_init_t *opts_init; @@ -187,7 +194,11 @@ namespace libcloudphxx void diag_up_mom(const int&); void diag_vp_mom(const int&); void diag_wp_mom(const int&); + std::pair diag_up_minmax(); + std::pair diag_vp_minmax(); + std::pair diag_wp_minmax(); void diag_incloud_time_mom(const int &k); + real_t diag_pair_separation_mean(); void diag_wet_mass_dens(const real_t&, const real_t&); void diag_chem(const enum common::chem::chem_species_t&); @@ -197,9 +208,12 @@ namespace libcloudphxx void diag_precip_rate(); void diag_max_rw(); void diag_vel_div(); + int diag_sstp_coal(); std::map diag_puddle(); real_t *outbuf(); + void remove_wet_rng(const real_t&, const real_t&); + struct impl; std::unique_ptr pimpl; @@ -283,10 +297,12 @@ namespace libcloudphxx void diag_up_mom(const int&); void diag_vp_mom(const int&); void diag_wp_mom(const int&); + std::pair diag_up_minmax(); + std::pair diag_vp_minmax(); + std::pair diag_wp_minmax(); void diag_incloud_time_mom(const int&); + real_t diag_pair_separation_mean(); void diag_wet_mass_dens(const real_t&, const real_t&); - real_t *outbuf(); - void diag_chem(const enum common::chem::chem_species_t&); void diag_rw_ge_rc(); void diag_RH_ge_Sc(); @@ -294,7 +310,11 @@ namespace libcloudphxx void diag_precip_rate(); void diag_max_rw(); void diag_vel_div(); + int diag_sstp_coal(); std::map diag_puddle(); + real_t *outbuf(); + + void remove_wet_rng(const real_t&, const real_t&); struct impl; std::unique_ptr pimpl; diff --git a/include/libcloudph++/lgrngn/sgs_adve.hpp b/include/libcloudph++/lgrngn/sgs_adve.hpp new file mode 100644 index 000000000..c4db3ab1a --- /dev/null +++ b/include/libcloudph++/lgrngn/sgs_adve.hpp @@ -0,0 +1,13 @@ +#pragma once + +namespace libcloudphxx +{ + namespace lgrngn + { +//+ enum class sgs_adve_t { undefined, GA17, ST_periodic }; +// + // GA17 - SGS velocity modeled with a Langevin equation as in Grabowski & Abade 2017. TKE dissipation rate taken from the diss_rate array; characteristic length scale taken from the SGS_mix_len profile. + // ST_periodic - synthetic turbulence: SGS velocity is a sum of Fourier modes, periodic within a box. constant and uniform diss_rate; constant and uniform minimum and maximum wavelengths + }; +}; diff --git a/src/detail/kernel_definitions/hall_davis_no_waals_efficiencies_like_in_EFM.hpp b/src/detail/kernel_definitions/hall_davis_no_waals_efficiencies_like_in_EFM.hpp new file mode 100644 index 000000000..98e34beb0 --- /dev/null +++ b/src/detail/kernel_definitions/hall_davis_no_waals_efficiencies_like_in_EFM.hpp @@ -0,0 +1,110 @@ +#pragma once +namespace libcloudphxx +{ + namespace lgrngn + { + namespace detail + { + template + real_t hall_davis_no_waals_r_max() + { + return 300.e-6; // not used?? + } + + const int hall_davis_no_waals_n_rad = 15; + const int hall_davis_no_waals_n_rat = 21; + + template + void hall_davis_no_waals_efficiencies(std::vector &vec) + { + //NVCC doesn't support extended initializer list. First make an array, then copy it to a vector. + const real_t arr[hall_davis_no_waals_n_rat][hall_davis_no_waals_n_rad] = + { + {0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, + 0, 0, 0.001, 0.084, 0.05, + 0.2543, 0.5, 0.7807, 0.87, 0.97}, + {0, 0, 0, 0, 0, + 0, 0, 0.07, 0.4, 0.43, + 0.58, 0.79, 0.93, 0.96, 1}, + {0, 0, 0, 0, 0, + 0, 0, 0.28, 0.62, 0.64, + 0.7629, 0.91, 0.9687, 0.98, 1}, + {0, 0.01215, 0, 0, 0, + 0, 0, 0.5, 0.7, 0.77, + 0.84, 0.95, 0.95, 1, 1}, + {0.01122, 0.01215, 0.01742, 0.0209, 0.02843, + 0, 0.1357, 0.62, 0.79, 0.84, + 0.8829, 0.95, 1, 1, 1}, + {0.01122, 0.01215, 0.01742, 0.0261, 0.0341, + 0.08008, 0.1807, 0.68, 0.83, 0.87, + 0.9, 1, 1, 1, 1}, + {0.01122, 0.01641, 0.02219, 0.0261, 0.03975, + 0.09509, 0.2707, 0.74, 0.864, 0.89, + 0.9229, 1, 1, 1, 1}, + {0.01122, 0.01641, 0.02219, 0.03131, 0.04541, + 0.1101, 0.3157, 0.78, 0.88, 0.9, + 0.94, 1, 1, 1, 1}, + {0.01503, 0.02067, 0.02696, 0.03651, 0.05107, + 0.1251, 0.4057, 0.8, 0.9, 0.91, + 0.95, 1, 1, 1, 1}, + {0.01503, 0.02067, 0.02696, 0.03822, 0.05673, + 0.143, 0.4507, 0.8, 0.9, 0.91, + 0.95, 1, 1, 1, 1}, + {0.01503, 0.02067, 0.02696, 0.03822, 0.05381, + 0.1336, 0.39, 0.8, 0.9, 0.91, + 0.95, 1, 1, 1, 1}, + {0.02, 0.02264, 0.02696, 0.03644, 0.05089, + 0.1242, 0.3597, 0.78, 0.9, 0.91, + 0.95, 1, 1, 1, 1}, + {0.02, 0.02264, 0.02696, 0.03466, 0.04797, + 0.1148, 0.299, 0.77, 0.888, 0.91, + 0.95, 1, 1, 1, 1}, + {0.02, 0.0246, 0.02696, 0.03288, 0.04504, + 0.09603, 0.2687, 0.76, 0.88, 0.92, + 0.95, 1, 1, 1, 1}, + {0.02497, 0.0246, 0.02696, 0.03288, 0.04212, + 0.08665, 0.2081, 0.77, 0.882, 0.93, + 0.9743, 1, 1, 1, 1}, + {0.02497, 0.0246, 0.02696, 0.0311, 0.0392, + 0.07726, 0.1778, 0.77, 0.89, 0.95, + 1, 1, 1, 1, 1}, + {0.02497, 0.02657, 0.02696, 0.02932, 0.03627, + 0.06788, 0.1171, 0.78, 0.938, 1, + 1.023, 1, 1, 1, 1}, + {0.02497, 0.02657, 0.02696, 0.02843, 0.03335, + 0.0538, 0.08679, 0.79, 1.01, 1.03, + 1.04, 1, 1, 1, 1}, + {0.02696, 0.02696, 0.02696, 0.02843, 0.03335, + 0.0538, 0.08679, 0.95, 1.5, 1.7, + 2.543, 1, 1, 1, 1}, + {0.02696, 0.02696, 0.02696, 0.02843, 0.03335, + 0.0538, 0.08679, 1.4, 2.3, 3, + 4, 1, 1, 1, 1} + }; + + vec = std::vector(&(arr[0][0]), &(arr[hall_davis_no_waals_n_rat][hall_davis_no_waals_n_rad])); + } + + template + void hall_davis_no_waals_radii(std::vector &vec) + { + //NVCC doesn't support extended initializer list. First make an array, then copy it to a vector. + const real_t arr[hall_davis_no_waals_n_rad] = {6.e-6,8.e-6,10.e-6,15.e-6,20.e-6,25.e-6,30.e-6,40.e-6,50.e-6,60.e-6,70.e-6,100.e-6,150.e-6,200.e-6,300.e-6}; + + vec = std::vector(arr, arr + hall_davis_no_waals_n_rad ); + } + + template + void hall_davis_no_waals_ratios(std::vector &vec) + { + //NVCC doesn't support extended initializer list. First make an array, then copy it to a vector. + const real_t arr[hall_davis_no_waals_n_rat] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5, 0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0}; + + vec = std::vector(arr, arr + hall_davis_no_waals_n_rat ); + } + } + } +} diff --git a/src/detail/kernel_definitions/hall_efficiencies.hpp b/src/detail/kernel_definitions/hall_efficiencies.hpp index 1de9b446c..284ca9026 100644 --- a/src/detail/kernel_definitions/hall_efficiencies.hpp +++ b/src/detail/kernel_definitions/hall_efficiencies.hpp @@ -8,2046 +8,60 @@ namespace libcloudphxx template real_t hall_r_max() { - return 1100.; + return 300.e-6; // not used? } + const int hall_n_rad = 11; + const int hall_n_rat = 21; + template void hall_efficiencies(std::vector &vec) { //NVCC doesn't support extended initializer list. First make an array, then copy it to a vector. - const real_t arr[] = { -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0.014, 0.019, 0.027, - -0.033, 0.037, 0.038, 0.036, 0.032, 0.027, 0, 0.0001, 0.009251, 0.018682, 0.025573, 0.033718, 0.039173, 0.042009, 0.040818, 0.037445, 0.032182, 0.027, 0, 0.0001, - -0.00552, 0.018, 0.024533, 0.0336, 0.0408, 0.045267, 0.046133, 0.043, 0.038467, 0.032333, 0.027, 0, 0.0001, 0.002572, 0.017, 0.023223, 0.032592, 0.041238, 0.047392, 0.050531, - -0.049585, 0.044577, 0.039162, 0.032462, 0.027, 0, 0.0001, 0.00178, 0.016, 0.022143, 0.031343, 0.040771, 0.0486, 0.053629, 0.054829, 0.052, 0.045714, 0.039486, 0.032571, 0.027, - -0, 0.0001, 0.001733, 0.015, 0.021167, 0.029833, 0.0395, 0.048833, 0.0555, 0.0595, 0.058333, 0.053667, 0.0465, 0.039667, 0.032667, 0.027, 0, 0.0001, 0.00157, 0.01216, - -0.02, 0.02785, 0.0383, 0.0483, 0.0564, 0.06205, 0.0636, 0.0614, 0.055, 0.04715, 0.0398, 0.03275, 0.027, 0, 0.0001, 0.001311, 0.009814, 0.019, 0.025971, 0.037159, - -0.046688, 0.056476, 0.063535, 0.067865, 0.067465, 0.063824, 0.055853, 0.047594, 0.039894, 0.032824, 0.027, 0, 0.0001, 0.000971, 0.00788, 0.018, 0.024778, 0.035133, 0.045178, 0.056067, - -0.0642, 0.070511, 0.072689, 0.070533, 0.065111, 0.056444, 0.047867, 0.039956, 0.032889, 0.027, 0, 0.0001, 0.000564, 0.006293, 0.017, 0.023447, 0.032689, 0.044068, 0.054174, 0.064153, - -0.071521, 0.076279, 0.076426, 0.073337, 0.066158, 0.056816, 0.047995, 0.039989, 0.032947, 0.027, 0, 0.0001, 0.0001, 0.005, 0.016, 0.022, 0.03, 0.043, 0.052, 0.064, - -0.072, 0.079, 0.082, 0.08, 0.076, 0.067, 0.057, 0.048, 0.04, 0.033, 0.027, 0, 0, 0.000272, 0.005613, 0.016133, 0.025943, 0.039514, 0.058467, 0.078762, - -0.098686, 0.11399, 0.124229, 0.130686, 0.131733, 0.127467, 0.119229, 0.108681, 0.098376, 0.088886, 0.08059, 0.076681, 0.0763, 0, 0, 0.000411, 0.005949, 0.016145, 0.028327, 0.045236, - -0.069055, 0.097455, 0.126982, 0.152691, 0.1676, 0.178145, 0.1828, 0.180982, 0.172873, 0.1616, 0.150145, 0.139527, 0.129564, 0.121709, 0.120873, 0.1256, 0, 0, 0.000521, 0.006045, - -0.016052, 0.029357, 0.047661, 0.0754, 0.1094, 0.148522, 0.183113, 0.206444, 0.221443, 0.230852, 0.233635, 0.229357, 0.216487, 0.203226, 0.191422, 0.180483, 0.170061, 0.163287, 0.165509, 0.1749, - -0, 0, 0.000607, 0.00593, 0.015867, 0.0292, 0.0472, 0.079533, 0.117867, 0.1625, 0.206933, 0.242533, 0.2632, 0.2767, 0.283267, 0.2826, 0.273867, 0.2587, 0.2442, 0.232533, - -0.221267, 0.2104, 0.205267, 0.210533, 0.2242, 0, 0, 0.00067, 0.00563, 0.0156, 0.028, 0.0484, 0.0814, 0.1226, 0.1704, 0.226, 0.2708, 0.2994, 0.3184, 0.3308, - -0.336, 0.3312, 0.3168, 0.3002, 0.2855, 0.2735, 0.2619, 0.2506, 0.2476, 0.2559, 0.2735, 0, 0, 0.000714, 0.005166, 0.015262, 0.027877, 0.048492, 0.080646, 0.124031, - -0.174185, 0.235692, 0.290708, 0.333262, 0.3588, 0.3748, 0.383477, 0.384708, 0.378031, 0.358338, 0.341108, 0.326646, 0.3144, 0.3024, 0.290677, 0.290246, 0.301569, 0.3228, 0, 0, - -0.00074, 0.004557, 0.014979, 0.027674, 0.0476, 0.077563, 0.123415, 0.177267, 0.240074, 0.306504, 0.361022, 0.392748, 0.415156, 0.430578, 0.43643, 0.433096, 0.420267, 0.399044, 0.381489, 0.367656, - -0.355152, 0.342793, 0.330644, 0.33317, 0.347507, 0.3721, 0, 0, 0.000751, 0.003817, 0.014803, 0.0274, 0.045829, 0.0724, 0.122114, 0.1774, 0.239714, 0.315286, 0.377486, 0.424686, - -0.4544, 0.472543, 0.483486, 0.4872, 0.4812, 0.461257, 0.439829, 0.4214, 0.408543, 0.395771, 0.383086, 0.370514, 0.376343, 0.393686, 0.4214, 0, 0, 0.000749, 0.002961, 0.014471, - -0.027062, 0.043269, 0.071614, 0.118683, 0.17489, 0.237855, 0.316414, 0.390359, 0.453255, 0.486407, 0.511752, 0.530221, 0.536634, 0.535393, 0.526234, 0.501131, 0.480131, 0.462424, 0.449321, 0.436272, - -0.423262, 0.410296, 0.419738, 0.440079, 0.4707, 0, 0, 0.000733, 0.002, 0.014, 0.026667, 0.04, 0.07, 0.113333, 0.17, 0.236667, 0.313333, 0.4, 0.466667, 0.516667, - -0.55, 0.57, 0.583333, 0.59, 0.583333, 0.566667, 0.54, 0.52, 0.503333, 0.49, 0.476667, 0.463333, 0.45, 0.463333, 0.486667, 0.52, 0, 0, 0.00269, 0.008245, - -0.0304, 0.055032, 0.080839, 0.113097, 0.151806, 0.205032, 0.264355, 0.32871, 0.406774, 0.473613, 0.531452, 0.560484, 0.58371, 0.601129, 0.60629, 0.606419, 0.599968, 0.57871, 0.556968, 0.540194, - -0.52729, 0.515806, 0.504839, 0.493871, 0.486194, 0.508129, 0.549936, 0.608, 0, 0, 0.00411, 0.013685, 0.0438, 0.0795, 0.117, 0.1545, 0.192, 0.242, 0.295, 0.3525, - -0.42, 0.4865, 0.539, 0.575, 0.6, 0.615, 0.625, 0.6275, 0.623, 0.61375, 0.5925, 0.57575, 0.562, 0.552, 0.5425, 0.53375, 0.525, 0.524, 0.554, 0.61475, - -0.696, 0, 0, 0.005043, 0.018395, 0.054473, 0.100424, 0.148909, 0.194364, 0.235273, 0.280727, 0.328333, 0.381667, 0.439091, 0.501515, 0.550849, 0.593182, 0.614394, 0.631364, 0.644091, - -0.646515, 0.645788, 0.639727, 0.626667, 0.607879, 0.596182, 0.585879, 0.577394, 0.57, 0.563333, 0.556667, 0.563273, 0.600848, 0.68097, 0.784, 0, 0, 0.005532, 0.022438, 0.062659, - -0.118424, 0.176941, 0.232824, 0.276941, 0.321059, 0.365176, 0.413529, 0.463529, 0.518824, 0.568, 0.608, 0.632353, 0.65, 0.660588, 0.667647, 0.666471, 0.662471, 0.656588, 0.641176, 0.626353, - -0.618118, 0.610471, 0.603412, 0.598235, 0.593529, 0.588824, 0.603882, 0.648588, 0.748471, 0.872, 0, 0, 0.005614, 0.025871, 0.068571, 0.133714, 0.201429, 0.27, 0.317143, 0.362857, - -0.404286, 0.447857, 0.493571, 0.541429, 0.59, 0.624286, 0.653571, 0.667857, 0.679286, 0.687857, 0.687857, 0.685, 0.679286, 0.671429, 0.657143, 0.647143, 0.641429, 0.635714, 0.63, 0.627143, - -0.624286, 0.621429, 0.645714, 0.697143, 0.817143, 0.96, 0, 0, 0.005324, 0.028747, 0.0724, 0.1464, 0.222667, 0.300444, 0.356, 0.406, 0.444889, 0.484444, 0.526667, 0.568889, - -0.611111, 0.645333, 0.674222, 0.688889, 0.7, 0.706667, 0.711111, 0.706667, 0.701778, 0.696222, 0.686667, 0.674444, 0.669333, 0.666, 0.661556, 0.657778, 0.656667, 0.655556, 0.654444, 0.688667, - -0.746444, 0.886889, 1.048, 0, 0, 0.004692, 0.031109, 0.074314, 0.156692, 0.240919, 0.327405, 0.393622, 0.446324, 0.486865, 0.523351, 0.562027, 0.600811, 0.637027, 0.670757, 0.694541, - -0.712838, 0.720946, 0.727432, 0.732297, 0.730135, 0.724189, 0.718676, 0.71327, 0.703243, 0.693892, 0.692811, 0.691189, 0.687946, 0.686216, 0.686757, 0.687297, 0.687838, 0.732649, 0.796433, 0.957622, - -1.136, 0, 0, 0.003745, 0.032998, 0.074463, 0.164779, 0.256421, 0.351158, 0.430105, 0.485368, 0.530105, 0.564316, 0.599474, 0.635263, 0.667368, 0.697895, 0.719158, 0.738105, 0.744737, - -0.75, 0.753158, 0.755263, 0.747895, 0.740947, 0.735684, 0.729474, 0.721053, 0.716421, 0.717474, 0.716947, 0.714842, 0.715263, 0.717368, 0.719474, 0.721579, 0.777579, 0.847053, 1.02926, 1.224, - -0, 0, 0.002507, 0.034451, 0.072985, 0.170831, 0.269385, 0.371949, 0.465538, 0.523231, 0.574513, 0.606564, 0.638846, 0.671667, 0.701795, 0.726923, 0.747744, 0.762103, 0.771154, 0.773718, - -0.775769, 0.777308, 0.773205, 0.764487, 0.757923, 0.752795, 0.746667, 0.74, 0.740154, 0.743231, 0.743231, 0.742205, 0.744872, 0.748461, 0.752051, 0.755641, 0.823385, 0.898256, 1.10174, 1.312, - -0, 0, 0.001, 0.0355, 0.07, 0.175, 0.28, 0.39, 0.5, 0.56, 0.62, 0.65, 0.68, 0.71, 0.74, 0.76, 0.78, 0.79, 0.8, 0.8, - -0.8, 0.8, 0.8, 0.79, 0.78, 0.775, 0.77, 0.765, 0.76, 0.765, 0.77, 0.77, 0.77, 0.775, 0.78, 0.785, 0.79, 0.87, 0.95, 1.175, - -1.4, 0, 0, 0, 0.048483, 0.098044, 0.194756, 0.296707, 0.398244, 0.499707, 0.565268, 0.621854, 0.657585, 0.686366, 0.714463, 0.742268, 0.764049, 0.782585, 0.795854, 0.80561, - -0.81, 0.81, 0.81, 0.81, 0.806049, 0.797268, 0.790049, 0.785171, 0.780293, 0.775415, 0.773317, 0.777707, 0.781122, 0.78161, 0.783171, 0.789024, 0.795317, 0.804098, 0.820439, 0.904829, - -0.997317, 1.24366, 1.49, 0, 0, 0, 0.059314, 0.123219, 0.215238, 0.314286, 0.409333, 0.502667, 0.572, 0.625333, 0.66581, 0.693429, 0.720286, 0.746, 0.769143, 0.786286, - -0.801905, 0.811429, 0.82, 0.82, 0.82, 0.82, 0.82, 0.813143, 0.805524, 0.80019, 0.795429, 0.790667, 0.785905, 0.786286, 0.790095, 0.792476, 0.793429, 0.796667, 0.803333, 0.811714, - -0.824095, 0.851714, 0.940286, 1.04667, 1.31333, 1.58, 0, 0, 0, 0.068144, 0.145726, 0.236395, 0.332674, 0.42307, 0.508651, 0.580093, 0.630326, 0.674628, 0.70114, 0.727372, - -0.751093, 0.774814, 0.791023, 0.806837, 0.817442, 0.826744, 0.83, 0.83, 0.83, 0.83, 0.827721, 0.821209, 0.81507, 0.810419, 0.805767, 0.801116, 0.796465, 0.79893, 0.802186, 0.804047, - -0.805442, 0.810465, 0.817907, 0.829116, 0.84493, 0.883767, 0.976326, 1.09791, 1.38395, 1.67, 0, 0, 0, 0.075109, 0.165745, 0.258182, 0.351818, 0.439273, 0.517455, 0.589455, - -0.636727, 0.684, 0.709455, 0.734909, 0.757455, 0.779273, 0.796727, 0.811273, 0.823636, 0.832727, 0.84, 0.84, 0.84, 0.84, 0.84, 0.835636, 0.830182, 0.825273, 0.820727, 0.816182, - -0.811636, 0.808545, 0.811273, 0.814, 0.815818, 0.817636, 0.824545, 0.832727, 0.847454, 0.866545, 0.916546, 1.01291, 1.15091, 1.45545, 1.76, 0, 0, 0, 0.080333, 0.183444, - -0.280556, 0.371667, 0.457778, 0.528889, 0.6, 0.644444, 0.688889, 0.718333, 0.742778, 0.765, 0.785, 0.803333, 0.816667, 0.83, 0.838889, 0.847778, 0.85, 0.85, 0.85, 0.85, - -0.848889, 0.844444, 0.84, 0.835556, 0.831111, 0.826667, 0.822222, 0.821111, 0.823333, 0.825556, 0.827778, 0.83, 0.838889, 0.847778, 0.866667, 0.888889, 0.95, 1.05, 1.20556, 1.52778, - -1.85, 0, 0, 0, 0.08393, 0.198974, 0.303478, 0.392174, 0.478435, 0.542783, 0.60713, 0.653391, 0.69513, 0.727739, 0.751217, 0.773652, 0.791913, 0.810174, 0.822957, 0.83513, - -0.845217, 0.853913, 0.86, 0.86, 0.86, 0.86, 0.86, 0.857565, 0.854087, 0.850261, 0.845913, 0.841565, 0.837217, 0.83287, 0.833391, 0.83513, 0.837304, 0.839913, 0.843913, 0.853478, - -0.863043, 0.886696, 0.911913, 0.984087, 1.08756, 1.26174, 1.60087, 1.94, 0, 0, 0, 0.086004, 0.212472, 0.326915, 0.413298, 0.499681, 0.558979, 0.616851, 0.663489, 0.702638, - -0.737638, 0.760191, 0.782745, 0.799936, 0.816532, 0.830085, 0.841149, 0.851702, 0.860213, 0.868723, 0.87, 0.87, 0.87, 0.87, 0.869617, 0.867064, 0.864511, 0.860596, 0.85634, 0.852085, - -0.84783, 0.844128, 0.845404, 0.846681, 0.849234, 0.852213, 0.858085, 0.868298, 0.879404, 0.907489, 0.935574, 1.01877, 1.12557, 1.31936, 1.67468, 2.03, 0, 0, 0, 0.08665, - -0.224067, 0.350833, 0.435, 0.519167, 0.577333, 0.629, 0.674667, 0.711333, 0.748, 0.769667, 0.791333, 0.809, 0.824, 0.838, 0.848, 0.858, 0.866667, 0.875, 0.88, 0.88, - -0.88, 0.88, 0.88, 0.879, 0.877333, 0.875167, 0.871, 0.866833, 0.862667, 0.8585, 0.856333, 0.857167, 0.858, 0.861333, 0.864667, 0.8725, 0.883333, 0.898167, 0.929, 0.959833, - -1.054, 1.164, 1.37833, 1.74917, 2.12, 0, 0, 0, 0.085955, 0.233873, 0.375204, 0.457245, 0.539286, 0.597714, 0.643429, 0.686857, 0.721143, 0.755428, 0.779612, 0.800429, - -0.819041, 0.83251, 0.84598, 0.855633, 0.864612, 0.873265, 0.881429, 0.889592, 0.89, 0.89, 0.89, 0.89, 0.889959, 0.889143, 0.888326, 0.885551, 0.881469, 0.877388, 0.873306, 0.869224, - -0.868286, 0.868694, 0.869918, 0.873592, 0.877265, 0.887143, 0.898571, 0.917714, 0.951184, 0.984653, 1.08976, 1.20282, 1.43857, 1.82429, 2.21, 0, 0, 0, 0.084, 0.242, - -0.4, 0.48, 0.56, 0.62, 0.66, 0.7, 0.732, 0.764, 0.79, 0.81, 0.83, 0.842, 0.854, 0.864, 0.872, 0.88, 0.888, 0.896, 0.9, 0.9, - -0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.896, 0.892, 0.888, 0.884, 0.88, 0.88, 0.88, 0.882, 0.886, 0.89, 0.902, 0.914, 0.938, 0.974, - -1.01, 1.126, 1.242, 1.5, 1.9, 2.3, 0, 0, 0, 0.078941, 0.233255, 0.387569, 0.473941, 0.552765, 0.618137, 0.658529, 0.698922, 0.731784, 0.762765, 0.790706, - -0.809529, 0.828353, 0.841961, 0.853333, 0.864118, 0.871569, 0.87902, 0.886471, 0.893922, 0.901, 0.901, 0.901, 0.901, 0.901, 0.901, 0.901, 0.901, 0.899588, 0.896059, 0.892529, - -0.889333, 0.886196, 0.884118, 0.88451, 0.884902, 0.888235, 0.892549, 0.89851, 0.911059, 0.923608, 0.949412, 0.982353, 1.02486, 1.15349, 1.28212, 1.56216, 1.96608, 2.37, 0, 0, - -0, 0.074308, 0.225077, 0.375846, 0.468154, 0.545846, 0.616154, 0.656923, 0.697692, 0.732, 0.762, 0.792, 0.809692, 0.827385, 0.842308, 0.853077, 0.863846, 0.871538, 0.878462, 0.885385, - -0.892308, 0.899231, 0.902, 0.902, 0.902, 0.902, 0.902, 0.902, 0.902, 0.902, 0.899538, 0.896462, 0.893538, 0.891231, 0.888923, 0.888462, 0.889231, 0.89, 0.894615, 0.899231, - -0.907231, 0.920308, 0.933385, 0.96, 0.99, 1.04215, 1.18292, 1.32369, 1.62462, 2.03231, 2.44, 0, 0, 0, 0.070075, 0.217434, 0.364792, 0.462623, 0.539226, 0.614057, - -0.655189, 0.696321, 0.732623, 0.761679, 0.790736, 0.810453, 0.827057, 0.843019, 0.853208, 0.863396, 0.871887, 0.878302, 0.884717, 0.891132, 0.897547, 0.903, 0.903, 0.903, 0.903, 0.903, - -0.903, 0.903, 0.903, 0.902472, 0.89983, 0.897189, 0.89517, 0.89366, 0.892151, 0.893019, 0.894151, 0.896226, 0.901132, 0.906038, 0.916151, 0.929736, 0.943321, 0.969811, 0.996981, 1.06174, - -1.21419, 1.36664, 1.68736, 2.09868, 2.51, 0, 0, 0, 0.066222, 0.210296, 0.35437, 0.457333, 0.532889, 0.608444, 0.653333, 0.694815, 0.73363, 0.761778, 0.789926, 0.811778, - -0.827333, 0.842889, 0.853704, 0.863333, 0.872593, 0.878519, 0.884444, 0.89037, 0.896296, 0.902222, 0.904, 0.904, 0.904, 0.904, 0.904, 0.904, 0.904, 0.904, 0.902667, 0.900444, - -0.898222, 0.897333, 0.896593, 0.896296, 0.897778, 0.899259, 0.902593, 0.907778, 0.912963, 0.925259, 0.939333, 0.954444, 0.978889, 1.00333, 1.08348, 1.24718, 1.41089, 1.75037, 2.16518, 2.58, - -0, 0, 0, 0.062727, 0.203636, 0.344545, 0.452273, 0.526818, 0.601364, 0.651364, 0.693182, 0.735, 0.762273, 0.789545, 0.813636, 0.828182, 0.842727, 0.854545, 0.863636, 0.872727, - -0.879091, 0.884545, 0.89, 0.895455, 0.900909, 0.905, 0.905, 0.905, 0.905, 0.905, 0.905, 0.905, 0.905, 0.905, 0.903182, 0.901364, 0.9, 0.9, 0.9, 0.900909, - -0.902727, 0.904545, 0.909091, 0.914545, 0.92, 0.934545, 0.949091, 0.965455, 0.987273, 1.00909, 1.10727, 1.28182, 1.45636, 1.81364, 2.23182, 2.65, 0, 0, 0, 0.059571, - -0.197429, 0.335286, 0.447429, 0.521, 0.594571, 0.649286, 0.691429, 0.733571, 0.763143, 0.789571, 0.816, 0.829571, 0.843143, 0.855714, 0.864286, 0.872857, 0.88, 0.885, 0.89, 0.895, - -0.9, 0.905, 0.906, 0.906, 0.906, 0.906, 0.906, 0.906, 0.906, 0.906, 0.905429, 0.904, 0.902571, 0.902429, 0.903143, 0.903857, 0.905714, 0.907857, 0.91, 0.915714, - -0.921429, 0.929, 0.944, 0.959, 0.975714, 0.995, 1.01429, 1.133, 1.318, 1.503, 1.87714, 2.29857, 2.72, 0, 0, 0, 0.056737, 0.191649, 0.326561, 0.442789, - -0.515421, 0.588053, 0.647105, 0.689561, 0.732018, 0.764368, 0.789982, 0.815596, 0.831474, 0.844105, 0.856737, 0.865263, 0.873333, 0.881228, 0.885789, 0.890351, 0.894912, 0.899474, 0.904035, 0.907, - -0.907, 0.907, 0.907, 0.907, 0.907, 0.907, 0.907, 0.907, 0.906158, 0.905105, 0.904053, 0.905333, 0.906737, 0.908246, 0.910702, 0.913158, 0.916491, 0.922456, 0.928421, 0.938175, - -0.953614, 0.969053, 0.985263, 1.0021, 1.01895, 1.16056, 1.35565, 1.55074, 1.94088, 2.36544, 2.79, 0, 0, 0, 0.054207, 0.186276, 0.318345, 0.438345, 0.510069, 0.581793, - -0.644828, 0.687586, 0.730345, 0.765931, 0.790759, 0.815586, 0.833862, 0.845586, 0.85731, 0.866552, 0.874138, 0.881724, 0.886897, 0.891034, 0.895172, 0.89931, 0.903448, 0.907586, 0.908, 0.908, - -0.908, 0.908, 0.908, 0.908, 0.908, 0.908, 0.907862, 0.907172, 0.906483, 0.906621, 0.90869, 0.910759, 0.913103, 0.915862, 0.918621, 0.923103, 0.92931, 0.935517, 0.947517, 0.963379, - -0.979241, 0.994138, 1.00862, 1.0231, 1.18986, 1.39469, 1.59952, 2.00483, 2.43241, 2.86, 0, 0, 0, 0.051966, 0.181288, 0.31061, 0.434085, 0.504932, 0.57578, 0.642458, - -0.685508, 0.728559, 0.767814, 0.791881, 0.815949, 0.836712, 0.847559, 0.858407, 0.868136, 0.875254, 0.882373, 0.888305, 0.892034, 0.895763, 0.899492, 0.90322, 0.906949, 0.909, 0.909, 0.909, - -0.909, 0.909, 0.909, 0.909, 0.909, 0.909, 0.908797, 0.908458, 0.908119, 0.909763, 0.912475, 0.915186, 0.918136, 0.921186, 0.924237, 0.92983, 0.936271, 0.942712, 0.957017, 0.973288, - -0.989559, 1.00237, 1.01458, 1.02678, 1.22081, 1.43505, 1.64929, 2.06898, 2.49949, 2.93, 0, 0, 0, 0.05, 0.176667, 0.303333, 0.43, 0.5, 0.57, 0.64, - -0.683333, 0.726667, 0.77, 0.793333, 0.816667, 0.84, 0.85, 0.86, 0.87, 0.876667, 0.883333, 0.89, 0.893333, 0.896667, 0.9, 0.903333, 0.906667, 0.91, 0.91, 0.91, - -0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.913333, 0.916667, 0.92, 0.923333, 0.926667, 0.93, 0.936667, 0.943333, 0.95, 0.966667, - -0.983333, 1, 1.01, 1.02, 1.03, 1.25333, 1.47667, 1.7, 2.13333, 2.56667, 3, 0, 0, 0, 0, 0.183361, 0.307951, 0.432541, 0.505787, 0.573328, - -0.640869, 0.686115, 0.727426, 0.768738, 0.794574, 0.816541, 0.838508, 0.851131, 0.860639, 0.870148, 0.87759, 0.884148, 0.890705, 0.895344, 0.898951, 0.902557, 0.905967, 0.909246, 0.912525, 0.914, - -0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.915033, 0.917984, 0.920934, 0.924082, 0.927689, 0.931295, 0.935721, 0.942607, 0.949492, - -0.958082, 0.973492, 0.988902, 1.00343, 1.01293, 1.02244, 1.0549, 1.29392, 1.53293, 1.78197, 2.22131, 2.66066, 3.1, 0, 0, 0, 0, 0.190323, 0.312903, 0.435484, - -0.512129, 0.57729, 0.642452, 0.689548, 0.728903, 0.768258, 0.796387, 0.817032, 0.837677, 0.852516, 0.861548, 0.870581, 0.878581, 0.885032, 0.891484, 0.897161, 0.901032, 0.904903, 0.908645, 0.911871, - -0.915097, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.919806, 0.922387, 0.924968, 0.928323, 0.932194, 0.936065, - -0.941548, 0.948645, 0.955742, 0.965677, 0.979871, 0.994064, 1.00671, 1.01574, 1.02477, 1.08284, 1.33703, 1.59123, 1.86452, 2.30968, 2.75484, 3.2, 0, 0, 0, 0, - -0.19754, 0.318175, 0.438809, 0.519, 0.581857, 0.644714, 0.693603, 0.731063, 0.768524, 0.798746, 0.818111, 0.837476, 0.854143, 0.862714, 0.871286, 0.879635, 0.885984, 0.892333, 0.898683, 0.902921, - -0.907048, 0.911175, 0.91454, 0.917714, 0.920889, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922111, 0.924333, 0.926556, - -0.928778, 0.932714, 0.936841, 0.940968, 0.947476, 0.954778, 0.962079, 0.972809, 0.985825, 0.998841, 1.00986, 1.01843, 1.027, 1.11367, 1.38256, 1.65145, 1.94762, 2.39841, 2.84921, 3.3, - -0, 0, 0, 0, 0.205, 0.32375, 0.4425, 0.526375, 0.587, 0.647625, 0.69825, 0.733875, 0.7695, 0.801625, 0.81975, 0.837875, 0.856, 0.864125, 0.87225, 0.880375, - -0.887, 0.89325, 0.8995, 0.904625, 0.909, 0.913375, 0.91725, 0.920375, 0.9235, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, - -0.926, 0.926, 0.92675, 0.928625, 0.9305, 0.932875, 0.93725, 0.941625, 0.946, 0.9535, 0.961, 0.9685, 0.9795, 0.991375, 1.00325, 1.01287, 1.021, 1.02912, 1.14725, 1.43037, - -1.7135, 2.03125, 2.4875, 2.94375, 3.4, 0, 0, 0, 0, 0.212692, 0.329615, 0.446538, 0.534231, 0.592692, 0.651154, 0.703462, 0.737308, 0.771154, 0.805, 0.821923, - -0.838846, 0.855769, 0.865769, 0.873462, 0.881154, 0.888077, 0.894231, 0.900385, 0.906154, 0.910769, 0.915385, 0.92, 0.923077, 0.926154, 0.929231, 0.93, 0.93, 0.93, 0.93, 0.93, - -0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.931154, 0.932692, 0.934231, 0.937308, 0.941923, 0.946539, 0.951923, 0.959615, 0.967308, 0.975, 0.985769, 0.996538, - -1.00731, 1.01577, 1.02346, 1.03115, 1.18346, 1.48038, 1.77731, 2.11539, 2.57692, 3.03846, 3.5, 0, 0, 0, 0, 0.220606, 0.335758, 0.450909, 0.542545, 0.598909, - -0.655273, 0.709212, 0.741333, 0.773455, 0.805576, 0.824606, 0.840364, 0.856121, 0.867636, 0.874909, 0.882182, 0.889212, 0.895273, 0.901333, 0.907394, 0.912364, 0.917212, 0.922061, 0.925818, 0.928849, - -0.931879, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934121, 0.935333, 0.936545, 0.937758, 0.941879, 0.946727, - -0.951576, 0.957939, 0.965818, 0.973697, 0.981939, 0.991636, 1.00133, 1.01103, 1.01855, 1.02582, 1.03309, 1.22218, 1.53249, 1.84279, 2.2, 2.66667, 3.13333, 3.6, 0, 0, - -0, 0, 0.228731, 0.342164, 0.455597, 0.551298, 0.605627, 0.659955, 0.714284, 0.745925, 0.776373, 0.806821, 0.827776, 0.842403, 0.85703, 0.869716, 0.876582, 0.883448, 0.890313, 0.896373, - -0.902343, 0.908313, 0.913791, 0.918866, 0.92394, 0.928597, 0.931582, 0.934567, 0.937552, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, - -0.938, 0.938, 0.938403, 0.939299, 0.940194, 0.941507, 0.946582, 0.951657, 0.956731, 0.964045, 0.972104, 0.980164, 0.988463, 0.997119, 1.00578, 1.01434, 1.02121, 1.02807, 1.03494, 1.2633, - -1.58658, 1.90987, 2.28507, 2.75672, 3.22836, 3.7, 0, 0, 0, 0, 0.237059, 0.348824, 0.460588, 0.560471, 0.612823, 0.665176, 0.717529, 0.751059, 0.779882, 0.808706, - -0.831412, 0.844941, 0.858471, 0.872, 0.878471, 0.884941, 0.891412, 0.897529, 0.903412, 0.909294, 0.915059, 0.920353, 0.925647, 0.930941, 0.934353, 0.937294, 0.940235, 0.942, 0.942, 0.942, - -0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942471, 0.943059, 0.943647, 0.946118, 0.951412, 0.956706, 0.962, 0.970235, 0.978471, - -0.986706, 0.994588, 1.00224, 1.00988, 1.01729, 1.02376, 1.03024, 1.03671, 1.30671, 1.64259, 1.97847, 2.37059, 2.84706, 3.32353, 3.8, 0, 0, 0, 0, 0.24558, - -0.355725, 0.46587, 0.570043, 0.620478, 0.670913, 0.721348, 0.75671, 0.783956, 0.811203, 0.835493, 0.847956, 0.86042, 0.872884, 0.880565, 0.886652, 0.892739, 0.898739, 0.904536, 0.910333, 0.91613, - -0.921681, 0.927188, 0.932696, 0.937159, 0.940058, 0.942957, 0.945855, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, - -0.946043, 0.946333, 0.946623, 0.946913, 0.950855, 0.956362, 0.96187, 0.968101, 0.976507, 0.984913, 0.993319, 1.00033, 1.007, 1.01367, 1.02013, 1.02622, 1.0323, 1.03839, 1.35231, 1.70042, - -2.04854, 2.45652, 2.93768, 3.41884, 3.9, 0, 0, 0, 0, 0.254286, 0.362857, 0.471429, 0.58, 0.628571, 0.677143, 0.725714, 0.762857, 0.788571, 0.814286, 0.84, - -0.851429, 0.862857, 0.874286, 0.882857, 0.888571, 0.894286, 0.9, 0.905714, 0.911429, 0.917143, 0.922857, 0.928571, 0.934286, 0.94, 0.942857, 0.945714, 0.948571, 0.95, 0.95, 0.95, - -0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.955714, 0.961429, 0.967143, 0.974286, 0.982857, - -0.991429, 1, 1.00571, 1.01143, 1.01714, 1.02286, 1.02857, 1.03429, 1.04, 1.4, 1.76, 2.12, 2.54286, 3.02857, 3.51429, 4, 0, 0, 0, 0, - -0.257789, 0.363986, 0.470183, 0.57638, 0.629676, 0.677094, 0.724512, 0.764042, 0.788925, 0.813807, 0.83869, 0.85238, 0.863272, 0.874164, 0.883812, 0.889728, 0.895643, 0.901559, 0.907146, 0.912592, - -0.918038, 0.923484, 0.92893, 0.934376, 0.939822, 0.943634, 0.946357, 0.94908, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, - -0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.9533, 0.958746, 0.964193, 0.969639, 0.977127, 0.985296, 0.993465, 1.00109, 1.00654, 1.01198, 1.01743, 1.02287, 1.02832, 1.03376, - -1.07298, 1.41608, 1.75917, 2.10227, 2.51127, 2.97418, 3.43709, 3.9, 0, 0, 0, 0, 0.261556, 0.365444, 0.469333, 0.573222, 0.631037, 0.677333, 0.72363, 0.765481, - -0.789556, 0.81363, 0.837704, 0.853556, 0.863926, 0.874296, 0.884667, 0.890778, 0.896889, 0.903, 0.908741, 0.913926, 0.919111, 0.924296, 0.929482, 0.934667, 0.939852, 0.944519, 0.947111, 0.949704, - -0.952296, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.956444, - -0.96163, 0.966815, 0.972, 0.979778, 0.987556, 0.995333, 1.00207, 1.00726, 1.01244, 1.01763, 1.02281, 1.028, 1.03319, 1.10267, 1.42933, 1.756, 2.08267, 2.47778, 2.91852, 3.35926, - -3.8, 0, 0, 0, 0, 0.265575, 0.367219, 0.468863, 0.570507, 0.632644, 0.677849, 0.723055, 0.767164, 0.790452, 0.81374, 0.837027, 0.854945, 0.864808, 0.874671, 0.884534, - -0.891726, 0.898027, 0.904329, 0.910493, 0.915425, 0.920356, 0.925288, 0.930219, 0.935151, 0.940082, 0.945014, 0.947973, 0.950438, 0.952904, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, - -0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.959438, 0.96437, 0.969301, 0.974849, 0.982247, 0.989644, 0.997041, - -1.00296, 1.00789, 1.01282, 1.01775, 1.02269, 1.02762, 1.03255, 1.12921, 1.43989, 1.75058, 2.06126, 2.44247, 2.86164, 3.28082, 3.7, 0, 0, 0, 0, 0.269838, - -0.369297, 0.468757, 0.568216, 0.634486, 0.678631, 0.722775, 0.766919, 0.791604, 0.814126, 0.836649, 0.856541, 0.86591, 0.875279, 0.884649, 0.892577, 0.899063, 0.90555, 0.912036, 0.917081, 0.921766, - -0.92645, 0.931135, 0.93582, 0.940504, 0.945189, 0.948937, 0.951279, 0.953622, 0.955964, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, - -0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.957604, 0.962288, 0.966973, 0.971658, 0.977514, 0.984541, 0.991568, 0.998595, 1.00375, 1.00843, 1.01312, 1.0178, 1.02249, - -1.02717, 1.03186, 1.15272, 1.44786, 1.74299, 2.03813, 2.40541, 2.80361, 3.2018, 3.6, 0, 0, 0, 0, 0.274333, 0.371667, 0.469, 0.566333, 0.636556, 0.679667, - -0.722778, 0.765889, 0.793, 0.814778, 0.836556, 0.858333, 0.867222, 0.876111, 0.885, 0.893333, 0.9, 0.906667, 0.913333, 0.918889, 0.923333, 0.927778, 0.932222, 0.936667, 0.941111, 0.945556, - -0.95, 0.952222, 0.954444, 0.956667, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, - -0.958333, 0.958333, 0.958333, 0.960556, 0.965, 0.969444, 0.973889, 0.98, 0.986667, 0.993333, 1, 1.00444, 1.00889, 1.01333, 1.01778, 1.02222, 1.02667, 1.03111, 1.17333, 1.45333, - -1.73333, 2.01333, 2.36667, 2.74444, 3.12222, 3.5, 0, 0, 0, 0, 0.279053, 0.374316, 0.469579, 0.564842, 0.638842, 0.680947, 0.723053, 0.765158, 0.794632, 0.815684, - -0.836737, 0.857789, 0.868737, 0.877158, 0.885579, 0.894, 0.900842, 0.907684, 0.914526, 0.920842, 0.925053, 0.929263, 0.933474, 0.937684, 0.941895, 0.946105, 0.950316, 0.953263, 0.955368, 0.957474, - -0.959579, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, - -0.963368, 0.967579, 0.971789, 0.976, 0.982316, 0.988632, 0.994947, 1.00084, 1.00505, 1.00926, 1.01347, 1.01768, 1.0219, 1.02611, 1.03032, 1.19116, 1.45642, 1.72169, 1.98695, 2.32632, - -2.68421, 3.04211, 3.4, 0, 0, 0, 0, 0.283987, 0.377234, 0.470481, 0.563727, 0.641338, 0.682463, 0.723589, 0.764714, 0.796489, 0.816836, 0.837182, 0.857528, 0.870446, - -0.878411, 0.886377, 0.894342, 0.901593, 0.908606, 0.915619, 0.922632, 0.926918, 0.9309, 0.934883, 0.938866, 0.942849, 0.946831, 0.950814, 0.954398, 0.95639, 0.958381, 0.960372, 0.961667, 0.961667, - -0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.962065, 0.966048, 0.97003, - -0.974013, 0.978494, 0.984468, 0.990442, 0.996416, 1.00159, 1.00558, 1.00956, 1.01354, 1.01752, 1.02151, 1.02549, 1.02947, 1.2063, 1.45721, 1.70812, 1.95903, 2.28442, 2.62294, 2.96147, - -3.3, 0, 0, 0, 0, 0.289128, 0.38041, 0.471692, 0.562974, 0.644034, 0.684205, 0.724376, 0.764547, 0.798564, 0.818222, 0.83788, 0.857538, 0.872342, 0.879863, 0.887385, - -0.894906, 0.902256, 0.909436, 0.916615, 0.923795, 0.928923, 0.932684, 0.936444, 0.940205, 0.943966, 0.947726, 0.951487, 0.955248, 0.957504, 0.959385, 0.961265, 0.963145, 0.963333, 0.963333, 0.963333, - -0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.964838, 0.968598, 0.972359, 0.97612, - -0.980821, 0.986462, 0.992103, 0.997744, 1.00226, 1.00602, 1.00978, 1.01354, 1.0173, 1.02106, 1.02482, 1.02858, 1.21887, 1.4558, 1.69272, 1.92964, 2.24103, 2.56068, 2.88034, 3.2, - -0, 0, 0, 0, 0.294468, 0.383835, 0.473203, 0.56257, 0.646924, 0.686165, 0.725405, 0.764646, 0.800848, 0.819835, 0.838823, 0.85781, 0.874418, 0.881506, 0.888595, 0.895684, - -0.902835, 0.910177, 0.917519, 0.924861, 0.931063, 0.934608, 0.938152, 0.941696, 0.94524, 0.948785, 0.952329, 0.955873, 0.958709, 0.960481, 0.962253, 0.964025, 0.965, 0.965, 0.965, 0.965, - -0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.967481, 0.971025, 0.97457, 0.978114, - -0.982987, 0.988304, 0.99362, 0.998937, 1.00284, 1.00638, 1.00992, 1.01347, 1.01701, 1.02056, 1.0241, 1.02765, 1.22896, 1.45225, 1.67554, 1.89884, 2.1962, 2.49747, 2.79873, 3.1, - -0, 0, 0, 0, 0.3, 0.3875, 0.475, 0.5625, 0.65, 0.688333, 0.726667, 0.765, 0.803333, 0.821667, 0.84, 0.858333, 0.876667, 0.883333, 0.89, 0.896667, - -0.903333, 0.910833, 0.918333, 0.925833, 0.933333, 0.936667, 0.94, 0.943333, 0.946667, 0.95, 0.953333, 0.956667, 0.96, 0.961667, 0.963333, 0.965, 0.966667, 0.966667, 0.966667, 0.966667, - -0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.97, 0.973333, 0.976667, - -0.98, 0.985, 0.99, 0.995, 1, 1.00333, 1.00667, 1.01, 1.01333, 1.01667, 1.02, 1.02333, 1.02667, 1.23667, 1.44667, 1.65667, 1.86667, 2.15, 2.43333, 2.71667, - -3, 0, 0, 0, 0, 0, 0.391395, 0.477074, 0.562753, 0.648432, 0.690704, 0.728152, 0.765601, 0.803049, 0.823708, 0.841403, 0.859099, 0.876794, 0.885337, 0.891593, - -0.897848, 0.904103, 0.911407, 0.919062, 0.926716, 0.93437, 0.938856, 0.941984, 0.945111, 0.948239, 0.951366, 0.954494, 0.957621, 0.960749, 0.962938, 0.964502, 0.966066, 0.96763, 0.968333, 0.968333, - -0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.969272, 0.972399, - -0.975527, 0.978654, 0.982173, 0.986864, 0.991556, 0.996247, 1.00063, 1.00375, 1.00688, 1.01001, 1.01314, 1.01626, 1.01939, 1.02252, 1.04504, 1.24207, 1.43911, 1.63615, 1.83663, 2.10247, - -2.36831, 2.63416, 2.9, 0, 0, 0, 0, 0, 0.395512, 0.479415, 0.563317, 0.64722, 0.693268, 0.729854, 0.766439, 0.803024, 0.825951, 0.843024, 0.860098, 0.877171, - -0.887512, 0.893366, 0.89922, 0.905073, 0.911902, 0.919707, 0.927512, 0.935317, 0.941171, 0.944098, 0.947024, 0.949951, 0.952878, 0.955805, 0.958732, 0.961659, 0.964293, 0.965756, 0.967219, 0.968683, - -0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, - -0.97, 0.971756, 0.974683, 0.97761, 0.980537, 0.984195, 0.988585, 0.992976, 0.997366, 1.00117, 1.0041, 1.00702, 1.00995, 1.01288, 1.01581, 1.01873, 1.02166, 1.06088, 1.24527, 1.42966, - -1.61405, 1.80488, 2.05366, 2.30244, 2.55122, 2.8, 0, 0, 0, 0, 0, 0.399843, 0.482012, 0.564181, 0.646349, 0.69602, 0.731763, 0.767506, 0.803249, 0.82839, - -0.844855, 0.861321, 0.877787, 0.889851, 0.895313, 0.900775, 0.906237, 0.912321, 0.920273, 0.928225, 0.936177, 0.943606, 0.946337, 0.949068, 0.951799, 0.95453, 0.957261, 0.959992, 0.962723, 0.965454, - -0.967092, 0.968458, 0.969823, 0.971189, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, - -0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.974124, 0.976855, 0.979586, 0.982317, 0.986072, 0.990169, 0.994265, 0.998361, 1.00164, 1.00437, 1.0071, 1.00983, 1.01256, 1.01529, 1.01802, - -1.02076, 1.07428, 1.24633, 1.41838, 1.59043, 1.77149, 2.00361, 2.23574, 2.46787, 2.7, 0, 0, 0, 0, 0, 0.404381, 0.484857, 0.565333, 0.645809, 0.698952, - -0.733873, 0.768794, 0.803714, 0.831016, 0.846889, 0.862762, 0.878635, 0.892349, 0.897429, 0.902508, 0.907587, 0.912667, 0.920762, 0.928857, 0.936952, 0.945048, 0.948698, 0.951238, 0.953778, 0.956317, - -0.958857, 0.961397, 0.963937, 0.966476, 0.968508, 0.969778, 0.971048, 0.972317, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, - -0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973841, 0.976381, 0.978921, 0.98146, 0.984, 0.98781, 0.991619, 0.995429, 0.999238, 1.00203, 1.00457, - -1.00711, 1.00965, 1.01219, 1.01473, 1.01727, 1.01981, 1.08533, 1.24533, 1.40533, 1.56533, 1.73651, 1.95238, 2.16825, 2.38413, 2.6, 0, 0, 0, 0, 0, - -0.409118, 0.487941, 0.566765, 0.645588, 0.702059, 0.736176, 0.770294, 0.804412, 0.833824, 0.849118, 0.864412, 0.879706, 0.895, 0.899706, 0.904412, 0.909118, 0.913823, 0.921176, 0.929412, 0.937647, - -0.945882, 0.951176, 0.953529, 0.955882, 0.958235, 0.960588, 0.962941, 0.965294, 0.967647, 0.97, 0.971177, 0.972353, 0.973529, 0.974706, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, - -0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.976177, 0.978529, 0.980882, 0.983235, 0.985882, - -0.989412, 0.992941, 0.996471, 1, 1.00235, 1.00471, 1.00706, 1.00941, 1.01177, 1.01412, 1.01647, 1.01882, 1.09412, 1.24235, 1.39059, 1.53882, 1.7, 1.9, 2.1, 2.3, - -2.5, 0, 0, 0, 0, 0, 0.414047, 0.491256, 0.568465, 0.645674, 0.705333, 0.738667, 0.772, 0.805333, 0.836806, 0.851535, 0.866264, 0.880992, 0.895721, 0.902139, - -0.906481, 0.910822, 0.915163, 0.921519, 0.929891, 0.938264, 0.946636, 0.953767, 0.955938, 0.958109, 0.960279, 0.96245, 0.96462, 0.966791, 0.968961, 0.971132, 0.972651, 0.973736, 0.974822, 0.975907, - -0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, - -0.976667, 0.976667, 0.978403, 0.980574, 0.982744, 0.984915, 0.987628, 0.990884, 0.99414, 0.997395, 1.00043, 1.0026, 1.00478, 1.00695, 1.00912, 1.01129, 1.01346, 1.01563, 1.0178, 1.10071, - -1.23746, 1.3742, 1.51095, 1.66202, 1.84651, 2.03101, 2.2155, 2.4, 0, 0, 0, 0, 0, 0.419161, 0.494793, 0.570425, 0.646057, 0.70877, 0.741337, 0.773904, - -0.806471, 0.839038, 0.854134, 0.86831, 0.882487, 0.896663, 0.904724, 0.908709, 0.912694, 0.916678, 0.921793, 0.930299, 0.938805, 0.94731, 0.955816, 0.95846, 0.960452, 0.962444, 0.964437, 0.966429, - -0.968421, 0.970414, 0.972406, 0.974199, 0.975195, 0.976192, 0.977188, 0.978184, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, - -0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978533, 0.980525, 0.982517, 0.98451, 0.986502, 0.989241, 0.99223, 0.995218, 0.998207, 1.0008, 1.00279, - -1.00478, 1.00677, 1.00877, 1.01076, 1.01275, 1.01474, 1.01674, 1.1052, 1.23071, 1.35623, 1.48175, 1.6226, 1.79195, 1.9613, 2.13065, 2.3, 0, 0, 0, 0, - -0, 0.424455, 0.498545, 0.572636, 0.646727, 0.712364, 0.744182, 0.776, 0.807818, 0.839636, 0.856909, 0.870545, 0.884182, 0.897818, 0.907455, 0.911091, 0.914727, 0.918364, 0.922, 0.930636, - -0.939273, 0.947909, 0.956545, 0.961091, 0.962909, 0.964727, 0.966545, 0.968364, 0.970182, 0.972, 0.973818, 0.975636, 0.976727, 0.977636, 0.978545, 0.979455, 0.98, 0.98, 0.98, 0.98, - -0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.980727, 0.982545, - -0.984364, 0.986182, 0.988, 0.990727, 0.993455, 0.996182, 0.998909, 1.00109, 1.00291, 1.00473, 1.00654, 1.00836, 1.01018, 1.012, 1.01382, 1.01564, 1.10764, 1.22218, 1.33673, 1.45127, - -1.58182, 1.73636, 1.89091, 2.04545, 2.2, 0, 0, 0, 0, 0, 0.429921, 0.502506, 0.57509, 0.647674, 0.716109, 0.747195, 0.778281, 0.809367, 0.840453, 0.859854, - -0.872963, 0.886071, 0.89918, 0.910326, 0.913622, 0.916918, 0.920213, 0.923509, 0.930906, 0.93967, 0.948434, 0.957199, 0.963828, 0.965476, 0.967124, 0.968772, 0.970419, 0.972067, 0.973715, 0.975363, - -0.977011, 0.97833, 0.979154, 0.979978, 0.980802, 0.981625, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, - -0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.98282, 0.984468, 0.986116, 0.987764, 0.989618, 0.99209, 0.994562, 0.997034, 0.999506, 1.00132, 1.00297, 1.00461, - -1.00626, 1.00791, 1.00956, 1.01121, 1.01285, 1.0145, 1.1081, 1.21193, 1.31575, 1.41957, 1.5397, 1.67978, 1.81985, 1.95993, 2.1, 0, 0, 0, 0, 0, - -0.435556, 0.506667, 0.577778, 0.648889, 0.72, 0.75037, 0.780741, 0.811111, 0.841481, 0.862963, 0.875556, 0.888148, 0.900741, 0.913333, 0.916296, 0.919259, 0.922222, 0.925185, 0.931111, 0.94, - -0.948889, 0.957778, 0.966667, 0.968148, 0.96963, 0.971111, 0.972593, 0.974074, 0.975556, 0.977037, 0.978519, 0.98, 0.980741, 0.981481, 0.982222, 0.982963, 0.983333, 0.983333, 0.983333, 0.983333, - -0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.984815, - -0.986296, 0.987778, 0.989259, 0.991111, 0.993333, 0.995556, 0.997778, 1, 1.00148, 1.00296, 1.00444, 1.00593, 1.00741, 1.00889, 1.01037, 1.01185, 1.01333, 1.10667, 1.2, 1.29333, - -1.38667, 1.4963, 1.62222, 1.74815, 1.87407, 2, 0, 0, 0, 0, 0, 0.441352, 0.511022, 0.580692, 0.650363, 0.720033, 0.753703, 0.783374, 0.813044, 0.842714, - -0.866231, 0.878319, 0.890407, 0.902494, 0.914582, 0.91911, 0.921747, 0.924385, 0.927022, 0.931253, 0.940264, 0.949275, 0.958286, 0.967297, 0.970923, 0.972242, 0.97356, 0.974879, 0.976198, 0.977516, - -0.978835, 0.980154, 0.981472, 0.982396, 0.983055, 0.983714, 0.984374, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, - -0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985396, 0.986714, 0.988033, 0.989352, 0.99067, 0.992483, 0.994462, 0.99644, 0.998418, 1.00026, - -1.00158, 1.0029, 1.00422, 1.00554, 1.00686, 1.00818, 1.0095, 1.01081, 1.02031, 1.10338, 1.18646, 1.26954, 1.35262, 1.45165, 1.56374, 1.67582, 1.78791, 1.9, 0, 0, - -0, 0, 0, 0.447304, 0.515565, 0.583826, 0.652087, 0.720348, 0.757188, 0.786174, 0.815159, 0.844145, 0.869652, 0.881246, 0.892841, 0.904435, 0.916029, 0.922058, 0.924377, 0.926696, - -0.929014, 0.931333, 0.940464, 0.949594, 0.958725, 0.967855, 0.973797, 0.974957, 0.976116, 0.977275, 0.978435, 0.979594, 0.980754, 0.981913, 0.983072, 0.984116, 0.984696, 0.985275, 0.985855, 0.986435, - -0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, - -0.986667, 0.986667, 0.986667, 0.987362, 0.988522, 0.989681, 0.990841, 0.992, 0.993739, 0.995478, 0.997217, 0.998957, 1.00046, 1.00162, 1.00278, 1.00394, 1.0051, 1.00626, 1.00742, 1.00858, - -1.00974, 1.02528, 1.09832, 1.17136, 1.24441, 1.31745, 1.4058, 1.50435, 1.6029, 1.70145, 1.8, 0, 0, 0, 0, 0, 0.453409, 0.52029, 0.587172, 0.654054, - -0.720935, 0.760821, 0.789136, 0.817452, 0.845767, 0.873222, 0.884333, 0.895444, 0.906556, 0.917667, 0.925136, 0.927143, 0.929151, 0.931158, 0.933165, 0.940602, 0.949849, 0.959097, 0.968344, 0.976767, - -0.977771, 0.978774, 0.979778, 0.980781, 0.981785, 0.982789, 0.983792, 0.984796, 0.985799, 0.986401, 0.986903, 0.987405, 0.987907, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, - -0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.989237, 0.99024, 0.991244, - -0.992247, 0.993376, 0.994882, 0.996387, 0.997892, 0.999398, 1.0006, 1.00161, 1.00261, 1.00361, 1.00462, 1.00562, 1.00662, 1.00763, 1.00863, 1.0283, 1.09153, 1.15475, 1.21798, 1.2812, - -1.35878, 1.44409, 1.52939, 1.61469, 1.7, 0, 0, 0, 0, 0, 0.45966, 0.525191, 0.590723, 0.656255, 0.721787, 0.764596, 0.792255, 0.819915, 0.847574, 0.875234, - -0.887574, 0.898213, 0.908851, 0.919489, 0.92834, 0.930043, 0.931745, 0.933447, 0.935149, 0.940681, 0.950043, 0.959404, 0.968766, 0.978128, 0.980681, 0.981532, 0.982383, 0.983234, 0.984085, 0.984936, - -0.985787, 0.986638, 0.987489, 0.98817, 0.988596, 0.989021, 0.989447, 0.989872, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, - -0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99017, 0.991021, 0.991872, 0.992723, 0.993575, 0.994638, 0.995915, 0.997191, 0.998468, - -0.999745, 1.00068, 1.00153, 1.00238, 1.00323, 1.00408, 1.00494, 1.00579, 1.00664, 1.00749, 1.02945, 1.08306, 1.13668, 1.1903, 1.24391, 1.31064, 1.38298, 1.45532, 1.52766, 1.6, - -0, 0, 0, 0, 0, 0.466053, 0.530263, 0.594474, 0.658684, 0.722895, 0.768509, 0.795526, 0.822544, 0.849561, 0.876579, 0.890965, 0.90114, 0.911316, 0.921491, 0.931667, - -0.93307, 0.934474, 0.935877, 0.937281, 0.940702, 0.950175, 0.959649, 0.969123, 0.978597, 0.983684, 0.984386, 0.985088, 0.985789, 0.986491, 0.987193, 0.987895, 0.988596, 0.989298, 0.99, 0.990351, - -0.990702, 0.991053, 0.991404, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, - -0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.992018, 0.992719, 0.993421, 0.994123, 0.994825, 0.995789, 0.996842, 0.997895, 0.998947, 1, 1.0007, 1.0014, 1.0021, - -1.00281, 1.00351, 1.00421, 1.00491, 1.00561, 1.00632, 1.02877, 1.07298, 1.11719, 1.1614, 1.20561, 1.2614, 1.32105, 1.3807, 1.44035, 1.5, 0, 0, 0, 0, - -0, 0.472583, 0.5355, 0.598417, 0.661333, 0.72425, 0.772556, 0.798944, 0.825333, 0.851722, 0.878111, 0.8945, 0.904222, 0.913944, 0.923667, 0.933389, 0.936222, 0.937333, 0.938444, 0.939556, - -0.940667, 0.95025, 0.959833, 0.969417, 0.979, 0.986778, 0.987333, 0.987889, 0.988444, 0.989, 0.989556, 0.990111, 0.990667, 0.991222, 0.991778, 0.992167, 0.992444, 0.992722, 0.993, 0.993278, - -0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, - -0.993333, 0.993333, 0.993333, 0.993333, 0.993778, 0.994333, 0.994889, 0.995444, 0.996, 0.996833, 0.997667, 0.9985, 0.999333, 1.00011, 1.00067, 1.00122, 1.00178, 1.00233, 1.00289, 1.00344, - -1.004, 1.00456, 1.00511, 1.02633, 1.06133, 1.09633, 1.13133, 1.16633, 1.21111, 1.25833, 1.30556, 1.35278, 1.4, 0, 0, 0, 0, 0, 0.479247, 0.540897, - -0.602546, 0.664196, 0.725845, 0.776732, 0.802505, 0.828278, 0.854052, 0.879825, 0.898175, 0.907454, 0.916732, 0.92601, 0.935289, 0.939495, 0.94032, 0.941144, 0.941969, 0.942794, 0.950268, 0.959959, - -0.969649, 0.97934, 0.989031, 0.990371, 0.990784, 0.991196, 0.991608, 0.992021, 0.992433, 0.992845, 0.993258, 0.99367, 0.994041, 0.994247, 0.994454, 0.99466, 0.994866, 0.995, 0.995, 0.995, - -0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, - -0.995, 0.995041, 0.995454, 0.995866, 0.996278, 0.996691, 0.997155, 0.997773, 0.998392, 0.99901, 0.999629, 1.00016, 1.00058, 1.00099, 1.0014, 1.00181, 1.00223, 1.00264, 1.00305, 1.00346, - -1.00388, 1.02219, 1.04816, 1.07414, 1.10012, 1.1261, 1.15979, 1.19484, 1.2299, 1.26495, 1.3, 0, 0, 0, 0, 0, 0.486041, 0.546449, 0.606857, 0.667265, - -0.727673, 0.781034, 0.806204, 0.831374, 0.856544, 0.881714, 0.901986, 0.91083, 0.919673, 0.928517, 0.937361, 0.942884, 0.943429, 0.943973, 0.944517, 0.945061, 0.950231, 0.960027, 0.969823, 0.979619, - -0.989415, 0.993497, 0.993769, 0.994041, 0.994313, 0.994585, 0.994857, 0.995129, 0.995401, 0.995673, 0.995946, 0.996109, 0.996245, 0.996381, 0.996517, 0.996653, 0.996667, 0.996667, 0.996667, 0.996667, - -0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, - -0.996776, 0.997048, 0.99732, 0.997592, 0.997864, 0.998204, 0.998612, 0.99902, 0.999429, 0.999837, 1.00016, 1.00043, 1.00071, 1.00098, 1.00125, 1.00152, 1.0018, 1.00207, 1.00234, 1.00261, - -1.01638, 1.03352, 1.05067, 1.06781, 1.08495, 1.10748, 1.13061, 1.15374, 1.17687, 1.2, 0, 0, 0, 0, 0, 0.49296, 0.552152, 0.611343, 0.670535, 0.729727, - -0.785458, 0.810037, 0.834616, 0.859195, 0.883774, 0.905929, 0.914347, 0.922764, 0.931182, 0.939599, 0.946387, 0.946657, 0.946926, 0.947195, 0.947465, 0.950141, 0.96004, 0.969939, 0.979838, 0.989737, - -0.996707, 0.996842, 0.996976, 0.997111, 0.997246, 0.99738, 0.997515, 0.99765, 0.997785, 0.997919, 0.998027, 0.998094, 0.998162, 0.998229, 0.998296, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, - -0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, - -0.998428, 0.998562, 0.998697, 0.998832, 0.998966, 0.999152, 0.999354, 0.999556, 0.999758, 0.99996, 1.00011, 1.00024, 1.00038, 1.00051, 1.00065, 1.00078, 1.00092, 1.00105, 1.00119, 1.00132, - -1.00897, 1.01745, 1.02594, 1.03442, 1.04291, 1.05421, 1.06566, 1.07711, 1.08855, 1.1, 0, 0, 0, 0, 0, 0.5, 0.558, 0.616, 0.674, 0.732, - -0.79, 0.814, 0.838, 0.862, 0.886, 0.91, 0.918, 0.926, 0.934, 0.942, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.96, 0.97, 0.98, 0.99, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0.578, 0.626, 0.674, - -0.722, 0.77, 0.818, 0.836909, 0.855818, 0.874727, 0.893636, 0.912546, 0.924546, 0.929636, 0.934727, 0.939818, 0.944909, 0.95, 0.951818, 0.953636, 0.955455, 0.957273, 0.959091, 0.963636, - -0.970909, 0.978182, 0.985455, 0.992727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0.608, - -0.647667, 0.687333, 0.727, 0.766667, 0.806333, 0.846, 0.860667, 0.875333, 0.89, 0.904667, 0.919333, 0.934, 0.936667, 0.939333, 0.942, 0.944667, 0.947333, 0.95, 0.953333, 0.956667, - -0.96, 0.963333, 0.966667, 0.97, 0.975, 0.98, 0.985, 0.99, 0.995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - -0, 0, 0, 0.678308, 0.710923, 0.743538, 0.776154, 0.808769, 0.841385, 0.874, 0.885077, 0.896154, 0.907231, 0.918308, 0.929385, 0.940462, 0.946308, 0.946923, 0.947538, 0.948154, - -0.948769, 0.949385, 0.95, 0.954615, 0.959231, 0.963846, 0.968462, 0.973077, 0.977692, 0.981538, 0.984615, 0.987692, 0.990769, 0.993846, 0.996923, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0.716, 0.742571, 0.769143, 0.795714, 0.822286, 0.848857, 0.875429, 0.902, 0.91, 0.918, 0.926, 0.934, 0.942, - -0.95, 0.958, 0.956857, 0.955714, 0.954571, 0.953429, 0.952286, 0.951143, 0.95, 0.955714, 0.961429, 0.967143, 0.972857, 0.978571, 0.984286, 0.99, 0.991429, 0.992857, 0.994286, 0.995714, - -0.997143, 0.998571, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0.780667, 0.802, 0.823333, 0.844667, 0.866, 0.887333, 0.908667, - -0.93, 0.935333, 0.940667, 0.946, 0.951333, 0.956667, 0.962, 0.967333, 0.968667, 0.966, 0.963333, 0.960667, 0.958, 0.955333, 0.952667, 0.95, 0.956667, 0.963333, 0.97, 0.976667, - -0.983333, 0.99, 0.996667, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0.79, - -0.80825, 0.8265, 0.84475, 0.863, 0.88125, 0.8995, 0.91775, 0.936, 0.9405, 0.945, 0.9495, 0.954, 0.9585, 0.963, 0.9675, 0.972, 0.9705, 0.969, 0.9675, 0.966, - -0.9645, 0.963, 0.9615, 0.96, 0.965, 0.97, 0.975, 0.98, 0.985, 0.99, 0.995, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0.817765, 0.833294, 0.848824, 0.864353, 0.879882, 0.895412, 0.910941, 0.926471, 0.942, 0.945765, 0.949529, 0.953294, 0.957059, - -0.960824, 0.964588, 0.968353, 0.972118, 0.973765, 0.973294, 0.972824, 0.972353, 0.971882, 0.971412, 0.970941, 0.970471, 0.97, 0.973529, 0.977059, 0.980588, 0.984118, 0.987647, 0.991176, 0.994706, - -0.998235, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.83, 0.843111, 0.856222, 0.869333, 0.882444, - -0.895556, 0.908667, 0.921778, 0.934889, 0.948, 0.951111, 0.954222, 0.957333, 0.960444, 0.963556, 0.966667, 0.969778, 0.972889, 0.976, 0.976444, 0.976889, 0.977333, 0.977778, 0.978222, 0.978667, - -0.979111, 0.979556, 0.98, 0.982222, 0.984444, 0.986667, 0.988889, 0.991111, 0.993333, 0.995556, 0.997778, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0.855474, 0.866421, 0.877368, 0.888316, 0.899263, 0.910211, 0.921158, 0.932105, 0.943053, 0.954, 0.956526, 0.959053, 0.961579, 0.964105, 0.966632, - -0.969158, 0.971684, 0.974211, 0.976737, 0.978632, 0.979895, 0.981158, 0.982421, 0.983684, 0.984947, 0.986211, 0.987474, 0.988737, 0.99, 0.991053, 0.992105, 0.993158, 0.994211, 0.995263, 0.996316, - -0.997368, 0.998421, 0.999474, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.87, 0.879, 0.888, 0.897, 0.906, - -0.915, 0.924, 0.933, 0.942, 0.951, 0.96, 0.962, 0.964, 0.966, 0.968, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, - -0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0.884, 0.892, 0.9, 0.908, 0.916, 0.924, 0.932, 0.94, 0.948, 0.956, 0.964, 0.965714, 0.967429, - -0.969143, 0.970857, 0.972571, 0.974286, 0.976, 0.977714, 0.979429, 0.981143, 0.982857, 0.984571, 0.986286, 0.988, 0.989714, 0.991429, 0.993143, 0.994857, 0.996571, 0.998286, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.89, - -0.897091, 0.904182, 0.911273, 0.918364, 0.925455, 0.932545, 0.939636, 0.946727, 0.953818, 0.960909, 0.968, 0.969455, 0.970909, 0.972364, 0.973818, 0.975273, 0.976727, 0.978182, 0.979636, 0.981091, - -0.982545, 0.984, 0.985455, 0.986909, 0.988364, 0.989818, 0.991273, 0.992727, 0.994182, 0.995636, 0.997091, 0.998545, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.90313, 0.909391, 0.915652, 0.921913, 0.928174, 0.934435, 0.940696, - -0.946957, 0.953217, 0.959478, 0.965739, 0.972, 0.973217, 0.974435, 0.975652, 0.97687, 0.978087, 0.979304, 0.980522, 0.981739, 0.982957, 0.984174, 0.985391, 0.986609, 0.987826, 0.989043, 0.990261, - -0.991478, 0.992696, 0.993913, 0.99513, 0.996348, 0.997565, 0.998783, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0.91, 0.9155, 0.921, 0.9265, 0.932, 0.9375, 0.943, 0.9485, 0.954, 0.9595, 0.965, 0.9705, 0.976, - -0.977, 0.978, 0.979, 0.98, 0.981, 0.982, 0.983, 0.984, 0.985, 0.986, 0.987, 0.988, 0.989, 0.99, 0.991, 0.992, 0.993, 0.994, 0.995, 0.996, - -0.997, 0.998, 0.999, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0.9224, 0.9272, 0.932, 0.9368, 0.9416, 0.9464, 0.9512, 0.956, 0.9608, 0.9656, 0.9704, 0.9752, 0.98, 0.9808, 0.9816, 0.9824, 0.9832, - -0.984, 0.9848, 0.9856, 0.9864, 0.9872, 0.988, 0.9888, 0.9896, 0.9904, 0.9912, 0.992, 0.9928, 0.9936, 0.9944, 0.9952, 0.996, 0.9968, 0.9976, 0.9984, 0.9992, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.93, - -0.934154, 0.938308, 0.942462, 0.946615, 0.950769, 0.954923, 0.959077, 0.963231, 0.967385, 0.971538, 0.975692, 0.979846, 0.984, 0.984615, 0.985231, 0.985846, 0.986462, 0.987077, 0.987692, 0.988308, - -0.988923, 0.989538, 0.990154, 0.990769, 0.991385, 0.992, 0.992615, 0.993231, 0.993846, 0.994462, 0.995077, 0.995692, 0.996308, 0.996923, 0.997538, 0.998154, 0.998769, 0.999385, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.941778, 0.945333, 0.948889, - -0.952444, 0.956, 0.959556, 0.963111, 0.966667, 0.970222, 0.973778, 0.977333, 0.980889, 0.984444, 0.988, 0.988444, 0.988889, 0.989333, 0.989778, 0.990222, 0.990667, 0.991111, 0.991556, 0.992, - -0.992444, 0.992889, 0.993333, 0.993778, 0.994222, 0.994667, 0.995111, 0.995556, 0.996, 0.996444, 0.996889, 0.997333, 0.997778, 0.998222, 0.998667, 0.999111, 0.999556, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.95, 0.953, 0.956, 0.959, 0.962, - -0.965, 0.968, 0.971, 0.974, 0.977, 0.98, 0.983, 0.986, 0.989, 0.992, 0.992286, 0.992571, 0.992857, 0.993143, 0.993429, 0.993714, 0.994, 0.994286, 0.994571, 0.994857, - -0.995143, 0.995429, 0.995714, 0.996, 0.996286, 0.996571, 0.996857, 0.997143, 0.997429, 0.997714, 0.998, 0.998286, 0.998571, 0.998857, 0.999143, 0.999429, 0.999714, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.961241, 0.963724, 0.966207, 0.96869, 0.971172, - -0.973655, 0.976138, 0.978621, 0.981103, 0.983586, 0.986069, 0.988552, 0.991035, 0.993517, 0.996, 0.996138, 0.996276, 0.996414, 0.996552, 0.99669, 0.996828, 0.996966, 0.997103, 0.997241, 0.997379, - -0.997517, 0.997655, 0.997793, 0.997931, 0.998069, 0.998207, 0.998345, 0.998483, 0.998621, 0.998759, 0.998897, 0.999035, 0.999172, 0.99931, 0.999448, 0.999586, 0.999724, 0.999862, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, - -0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, - -0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, - -0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, - -0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, - -0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, - -0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, - -0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, - -0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, - -0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, - -0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, - -0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, - -0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, - -0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, - -0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, - -0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, - -0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, - -0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, - -0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, - -0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, - -0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, - -0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, - -0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, - -0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, - -0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, - -0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, - -0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, - -0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, - -0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, - -0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, - -0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, - -0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, - -0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, - -0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, - -0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, - -0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, - -0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, - -0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, - -0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, - -0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, - -0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, - -0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, - -0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, - -0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, - -0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, - -0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, - -0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, - -0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, - -0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, - -0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, - -0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, - -0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, - -0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, - -0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1 }; - vec = std::vector(arr, arr + sizeof(arr) / sizeof(arr[0]) ); + const real_t arr[hall_n_rat][hall_n_rad] = + { + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {.0001, .0001, .0001, .001, .005, .05, .2, .5, .77, .87, .97}, + {.0001, .0001, .002, .07, .4, .43, .58, .79, .93, .96, 1.}, + {.0001, .005, .02, .28, .6, .64, .75, .91, .97, .98, 1.}, + {.014, .016, .04, .5, .7, .77, .84, .95, .97, 1., 1.}, + {.017, .022, .085, .62, .78, .84, .88, .95, 1., 1., 1.}, + {.019, .03, .17, .68, .83, .87, .9, 1., 1., 1, 1}, + {.022, .043, .27, .74, .86, .89, .92, 1, 1, 1, 1}, + {.027, .05, .4, .78, .88, .9, .94, 1, 1, 1, 1}, + {.03, .064, .5, .8, .9, .91, .95, 1, 1, 1, 1}, + {.033, .072, .55, .8, .9, .91, .95, 1, 1, 1, 1}, + {.035, .079, .58, .8, .9, .91, .95, 1, 1, 1, 1}, + {.037, .082, .59, .78, .9, .91, .95, 1, 1, 1, 1}, + {.038, .08, .58, .77, .89, .91, .95, 1, 1, 1, 1}, + {.038, .076, .54, .76, .88, .92, .95, 1, 1, 1, 1}, + {.037, .067, .51, .77, .88, .93, .97, 1, 1, 1, 1}, + {.036, .057, .49, .77, .89, .95, 1, 1, 1, 1, 1}, + {.035, .048, .47, .78, .92, 1, 1.02, 1, 1, 1, 1}, + {.032, .04, .45, .79, 1.01, 1.03, 1.04, 1., 1., 1. ,1.}, + {.029, .033, .47, .95, 1.3, 1.7, 2.3, 1., 1., 1, 1}, + {.027, .027, .52, 1.4, 2.3, 3, 4, 1, 1, 1, 1} + }; + + vec = std::vector(&(arr[0][0]), &(arr[hall_n_rat][hall_n_rad])); + } + + template + void hall_radii(std::vector &vec) + { + //NVCC doesn't support extended initializer list. First make an array, then copy it to a vector. + const real_t arr[hall_n_rad] = {10.e-6,20.e-6,30.e-6,40.e-6,50.e-6,60.e-6,70.e-6,100.e-6,150.e-6,200.e-6,300.e-6}; + + vec = std::vector(arr, arr + hall_n_rad ); + } + + template + void hall_ratios(std::vector &vec) + { + //NVCC doesn't support extended initializer list. First make an array, then copy it to a vector. + const real_t arr[hall_n_rat] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5, 0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0}; + + vec = std::vector(arr, arr + hall_n_rat ); } } } diff --git a/src/detail/kernel_definitions/hall_efficiencies_like_in_EFM.hpp b/src/detail/kernel_definitions/hall_efficiencies_like_in_EFM.hpp new file mode 100644 index 000000000..04880bcbf --- /dev/null +++ b/src/detail/kernel_definitions/hall_efficiencies_like_in_EFM.hpp @@ -0,0 +1,110 @@ +#pragma once +namespace libcloudphxx +{ + namespace lgrngn + { + namespace detail + { + template + real_t hall_r_max() + { + return 300.e-6; // not used? + } + + const int hall_n_rad = 15; + const int hall_n_rat = 21; + + template + void hall_efficiencies(std::vector &vec) + { + //NVCC doesn't support extended initializer list. First make an array, then copy it to a vector. + const real_t arr[hall_n_rat][hall_n_rad] = + { + {0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0}, + {0, 0, 0.0001, 0.0001, 0.0001, + 0, 0.000733, 0.001, 0.084, 0.05, + 0.2543, 0.5, 0.7807, 0.87, 0.97}, + {0, 0, 0.0001, 0.001733, 0.0001, + 0.00563, 0.002, 0.07, 0.4, 0.43, + 0.58, 0.79, 0.93, 0.96, 1}, + {0, 0, 0.014, 0.001733, 0.005, + 0.0156, 0.02667, 0.28, 0.62, 0.64, + 0.7629, 0.91, 0.9687, 0.98, 1}, + {0, 0, 0.014, 0.015, 0.016, + 0.028, 0.04, 0.5, 0.7, 0.77, + 0.84, 0.95, 0.95, 1, 1}, + {0, 0, 0.019, 0.02117, 0.022, + 0.0484, 0.1133, 0.62, 0.79, 0.84, + 0.8829, 0.95, 1, 1, 1}, + {0, 0, 0.019, 0.02983, 0.03, + 0.1226, 0.17, 0.68, 0.83, 0.87, + 0.9, 1, 1, 1, 1}, + {0, 0, 0.027, 0.02983, 0.043, + 0.1704, 0.3133, 0.74, 0.864, 0.89, + 0.9229, 1, 1, 1, 1}, + {0, 0, 0.027, 0.0395, 0.052, + 0.226, 0.4, 0.78, 0.88, 0.9, + 0.94, 1, 1, 1, 1}, + {0, 0, 0.033, 0.04883, 0.064, + 0.2708, 0.5167, 0.8, 0.9, 0.91, + 0.95, 1, 1, 1, 1}, + {0, 0, 0.033, 0.0555, 0.072, + 0.3184, 0.55, 0.8, 0.9, 0.91, + 0.95, 1, 1, 1, 1}, + {0, 0, 0.037, 0.0555, 0.079, + 0.3308, 0.5833, 0.8, 0.9, 0.91, + 0.95, 1, 1, 1, 1}, + {0, 0, 0.037, 0.0595, 0.082, + 0.336, 0.59, 0.78, 0.9, 0.91, + 0.95, 1, 1, 1, 1}, + {0, 0, 0.038, 0.05833, 0.08, + 0.3312, 0.5667, 0.77, 0.888, 0.91, + 0.95, 1, 1, 1, 1}, + {0, 0, 0.038, 0.05367, 0.076, + 0.3002, 0.54, 0.76, 0.88, 0.92, + 0.95, 1, 1, 1, 1}, + {0, 0, 0.036, 0.05367, 0.067, + 0.2855, 0.5033, 0.77, 0.882, 0.93, + 0.9743, 1, 1, 1, 1}, + {0, 0, 0.036, 0.0465, 0.057, + 0.2735, 0.49, 0.77, 0.89, 0.95, + 1, 1, 1, 1, 1}, + {0, 0, 0.032, 0.03967, 0.048, + 0.2619, 0.4633, 0.78, 0.938, 1, + 1.023, 1, 1, 1, 1}, + {0, 0, 0.032, 0.03267, 0.04, + 0.2476, 0.45, 0.79, 1.01, 1.03, + 1.04, 1, 1, 1, 1}, + {0, 0, 0.027, 0.03267, 0.033, + 0.2559, 0.4867, 0.95, 1.5, 1.7, + 2.543, 1, 1, 1, 1}, + {0, 0, 0.027, 0.027, 0.027, + 0.2735, 0.52, 1.4, 2.3, 3, + 4, 1, 1, 1, 1} + }; + + vec = std::vector(&(arr[0][0]), &(arr[hall_n_rat][hall_n_rad])); + } + + template + void hall_radii(std::vector &vec) + { + //NVCC doesn't support extended initializer list. First make an array, then copy it to a vector. + const real_t arr[hall_n_rad] = {6.e-6,8.e-6,10.e-6,15.e-6,20.e-6,25.e-6,30.e-6,40.e-6,50.e-6,60.e-6,70.e-6,100.e-6,150.e-6,200.e-6,300.e-6}; + + vec = std::vector(arr, arr + hall_n_rad ); + } + + template + void hall_ratios(std::vector &vec) + { + //NVCC doesn't support extended initializer list. First make an array, then copy it to a vector. + const real_t arr[hall_n_rat] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5, 0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0}; + + vec = std::vector(arr, arr + hall_n_rat ); + } + } + } +} diff --git a/src/detail/kernel_definitions/hall_davis_no_waals_efficiencies.hpp b/src/detail/kernel_definitions_Jon/hall_davis_no_waals_efficiencies.hpp similarity index 100% rename from src/detail/kernel_definitions/hall_davis_no_waals_efficiencies.hpp rename to src/detail/kernel_definitions_Jon/hall_davis_no_waals_efficiencies.hpp diff --git a/src/detail/kernel_definitions_Jon/hall_efficiencies.hpp b/src/detail/kernel_definitions_Jon/hall_efficiencies.hpp new file mode 100644 index 000000000..1de9b446c --- /dev/null +++ b/src/detail/kernel_definitions_Jon/hall_efficiencies.hpp @@ -0,0 +1,2054 @@ +#pragma once +namespace libcloudphxx +{ + namespace lgrngn + { + namespace detail + { + template + real_t hall_r_max() + { + return 1100.; + } + + template + void hall_efficiencies(std::vector &vec) + { + //NVCC doesn't support extended initializer list. First make an array, then copy it to a vector. + const real_t arr[] = { +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001, 0.014, 0.019, 0.027, + +0.033, 0.037, 0.038, 0.036, 0.032, 0.027, 0, 0.0001, 0.009251, 0.018682, 0.025573, 0.033718, 0.039173, 0.042009, 0.040818, 0.037445, 0.032182, 0.027, 0, 0.0001, + +0.00552, 0.018, 0.024533, 0.0336, 0.0408, 0.045267, 0.046133, 0.043, 0.038467, 0.032333, 0.027, 0, 0.0001, 0.002572, 0.017, 0.023223, 0.032592, 0.041238, 0.047392, 0.050531, + +0.049585, 0.044577, 0.039162, 0.032462, 0.027, 0, 0.0001, 0.00178, 0.016, 0.022143, 0.031343, 0.040771, 0.0486, 0.053629, 0.054829, 0.052, 0.045714, 0.039486, 0.032571, 0.027, + +0, 0.0001, 0.001733, 0.015, 0.021167, 0.029833, 0.0395, 0.048833, 0.0555, 0.0595, 0.058333, 0.053667, 0.0465, 0.039667, 0.032667, 0.027, 0, 0.0001, 0.00157, 0.01216, + +0.02, 0.02785, 0.0383, 0.0483, 0.0564, 0.06205, 0.0636, 0.0614, 0.055, 0.04715, 0.0398, 0.03275, 0.027, 0, 0.0001, 0.001311, 0.009814, 0.019, 0.025971, 0.037159, + +0.046688, 0.056476, 0.063535, 0.067865, 0.067465, 0.063824, 0.055853, 0.047594, 0.039894, 0.032824, 0.027, 0, 0.0001, 0.000971, 0.00788, 0.018, 0.024778, 0.035133, 0.045178, 0.056067, + +0.0642, 0.070511, 0.072689, 0.070533, 0.065111, 0.056444, 0.047867, 0.039956, 0.032889, 0.027, 0, 0.0001, 0.000564, 0.006293, 0.017, 0.023447, 0.032689, 0.044068, 0.054174, 0.064153, + +0.071521, 0.076279, 0.076426, 0.073337, 0.066158, 0.056816, 0.047995, 0.039989, 0.032947, 0.027, 0, 0.0001, 0.0001, 0.005, 0.016, 0.022, 0.03, 0.043, 0.052, 0.064, + +0.072, 0.079, 0.082, 0.08, 0.076, 0.067, 0.057, 0.048, 0.04, 0.033, 0.027, 0, 0, 0.000272, 0.005613, 0.016133, 0.025943, 0.039514, 0.058467, 0.078762, + +0.098686, 0.11399, 0.124229, 0.130686, 0.131733, 0.127467, 0.119229, 0.108681, 0.098376, 0.088886, 0.08059, 0.076681, 0.0763, 0, 0, 0.000411, 0.005949, 0.016145, 0.028327, 0.045236, + +0.069055, 0.097455, 0.126982, 0.152691, 0.1676, 0.178145, 0.1828, 0.180982, 0.172873, 0.1616, 0.150145, 0.139527, 0.129564, 0.121709, 0.120873, 0.1256, 0, 0, 0.000521, 0.006045, + +0.016052, 0.029357, 0.047661, 0.0754, 0.1094, 0.148522, 0.183113, 0.206444, 0.221443, 0.230852, 0.233635, 0.229357, 0.216487, 0.203226, 0.191422, 0.180483, 0.170061, 0.163287, 0.165509, 0.1749, + +0, 0, 0.000607, 0.00593, 0.015867, 0.0292, 0.0472, 0.079533, 0.117867, 0.1625, 0.206933, 0.242533, 0.2632, 0.2767, 0.283267, 0.2826, 0.273867, 0.2587, 0.2442, 0.232533, + +0.221267, 0.2104, 0.205267, 0.210533, 0.2242, 0, 0, 0.00067, 0.00563, 0.0156, 0.028, 0.0484, 0.0814, 0.1226, 0.1704, 0.226, 0.2708, 0.2994, 0.3184, 0.3308, + +0.336, 0.3312, 0.3168, 0.3002, 0.2855, 0.2735, 0.2619, 0.2506, 0.2476, 0.2559, 0.2735, 0, 0, 0.000714, 0.005166, 0.015262, 0.027877, 0.048492, 0.080646, 0.124031, + +0.174185, 0.235692, 0.290708, 0.333262, 0.3588, 0.3748, 0.383477, 0.384708, 0.378031, 0.358338, 0.341108, 0.326646, 0.3144, 0.3024, 0.290677, 0.290246, 0.301569, 0.3228, 0, 0, + +0.00074, 0.004557, 0.014979, 0.027674, 0.0476, 0.077563, 0.123415, 0.177267, 0.240074, 0.306504, 0.361022, 0.392748, 0.415156, 0.430578, 0.43643, 0.433096, 0.420267, 0.399044, 0.381489, 0.367656, + +0.355152, 0.342793, 0.330644, 0.33317, 0.347507, 0.3721, 0, 0, 0.000751, 0.003817, 0.014803, 0.0274, 0.045829, 0.0724, 0.122114, 0.1774, 0.239714, 0.315286, 0.377486, 0.424686, + +0.4544, 0.472543, 0.483486, 0.4872, 0.4812, 0.461257, 0.439829, 0.4214, 0.408543, 0.395771, 0.383086, 0.370514, 0.376343, 0.393686, 0.4214, 0, 0, 0.000749, 0.002961, 0.014471, + +0.027062, 0.043269, 0.071614, 0.118683, 0.17489, 0.237855, 0.316414, 0.390359, 0.453255, 0.486407, 0.511752, 0.530221, 0.536634, 0.535393, 0.526234, 0.501131, 0.480131, 0.462424, 0.449321, 0.436272, + +0.423262, 0.410296, 0.419738, 0.440079, 0.4707, 0, 0, 0.000733, 0.002, 0.014, 0.026667, 0.04, 0.07, 0.113333, 0.17, 0.236667, 0.313333, 0.4, 0.466667, 0.516667, + +0.55, 0.57, 0.583333, 0.59, 0.583333, 0.566667, 0.54, 0.52, 0.503333, 0.49, 0.476667, 0.463333, 0.45, 0.463333, 0.486667, 0.52, 0, 0, 0.00269, 0.008245, + +0.0304, 0.055032, 0.080839, 0.113097, 0.151806, 0.205032, 0.264355, 0.32871, 0.406774, 0.473613, 0.531452, 0.560484, 0.58371, 0.601129, 0.60629, 0.606419, 0.599968, 0.57871, 0.556968, 0.540194, + +0.52729, 0.515806, 0.504839, 0.493871, 0.486194, 0.508129, 0.549936, 0.608, 0, 0, 0.00411, 0.013685, 0.0438, 0.0795, 0.117, 0.1545, 0.192, 0.242, 0.295, 0.3525, + +0.42, 0.4865, 0.539, 0.575, 0.6, 0.615, 0.625, 0.6275, 0.623, 0.61375, 0.5925, 0.57575, 0.562, 0.552, 0.5425, 0.53375, 0.525, 0.524, 0.554, 0.61475, + +0.696, 0, 0, 0.005043, 0.018395, 0.054473, 0.100424, 0.148909, 0.194364, 0.235273, 0.280727, 0.328333, 0.381667, 0.439091, 0.501515, 0.550849, 0.593182, 0.614394, 0.631364, 0.644091, + +0.646515, 0.645788, 0.639727, 0.626667, 0.607879, 0.596182, 0.585879, 0.577394, 0.57, 0.563333, 0.556667, 0.563273, 0.600848, 0.68097, 0.784, 0, 0, 0.005532, 0.022438, 0.062659, + +0.118424, 0.176941, 0.232824, 0.276941, 0.321059, 0.365176, 0.413529, 0.463529, 0.518824, 0.568, 0.608, 0.632353, 0.65, 0.660588, 0.667647, 0.666471, 0.662471, 0.656588, 0.641176, 0.626353, + +0.618118, 0.610471, 0.603412, 0.598235, 0.593529, 0.588824, 0.603882, 0.648588, 0.748471, 0.872, 0, 0, 0.005614, 0.025871, 0.068571, 0.133714, 0.201429, 0.27, 0.317143, 0.362857, + +0.404286, 0.447857, 0.493571, 0.541429, 0.59, 0.624286, 0.653571, 0.667857, 0.679286, 0.687857, 0.687857, 0.685, 0.679286, 0.671429, 0.657143, 0.647143, 0.641429, 0.635714, 0.63, 0.627143, + +0.624286, 0.621429, 0.645714, 0.697143, 0.817143, 0.96, 0, 0, 0.005324, 0.028747, 0.0724, 0.1464, 0.222667, 0.300444, 0.356, 0.406, 0.444889, 0.484444, 0.526667, 0.568889, + +0.611111, 0.645333, 0.674222, 0.688889, 0.7, 0.706667, 0.711111, 0.706667, 0.701778, 0.696222, 0.686667, 0.674444, 0.669333, 0.666, 0.661556, 0.657778, 0.656667, 0.655556, 0.654444, 0.688667, + +0.746444, 0.886889, 1.048, 0, 0, 0.004692, 0.031109, 0.074314, 0.156692, 0.240919, 0.327405, 0.393622, 0.446324, 0.486865, 0.523351, 0.562027, 0.600811, 0.637027, 0.670757, 0.694541, + +0.712838, 0.720946, 0.727432, 0.732297, 0.730135, 0.724189, 0.718676, 0.71327, 0.703243, 0.693892, 0.692811, 0.691189, 0.687946, 0.686216, 0.686757, 0.687297, 0.687838, 0.732649, 0.796433, 0.957622, + +1.136, 0, 0, 0.003745, 0.032998, 0.074463, 0.164779, 0.256421, 0.351158, 0.430105, 0.485368, 0.530105, 0.564316, 0.599474, 0.635263, 0.667368, 0.697895, 0.719158, 0.738105, 0.744737, + +0.75, 0.753158, 0.755263, 0.747895, 0.740947, 0.735684, 0.729474, 0.721053, 0.716421, 0.717474, 0.716947, 0.714842, 0.715263, 0.717368, 0.719474, 0.721579, 0.777579, 0.847053, 1.02926, 1.224, + +0, 0, 0.002507, 0.034451, 0.072985, 0.170831, 0.269385, 0.371949, 0.465538, 0.523231, 0.574513, 0.606564, 0.638846, 0.671667, 0.701795, 0.726923, 0.747744, 0.762103, 0.771154, 0.773718, + +0.775769, 0.777308, 0.773205, 0.764487, 0.757923, 0.752795, 0.746667, 0.74, 0.740154, 0.743231, 0.743231, 0.742205, 0.744872, 0.748461, 0.752051, 0.755641, 0.823385, 0.898256, 1.10174, 1.312, + +0, 0, 0.001, 0.0355, 0.07, 0.175, 0.28, 0.39, 0.5, 0.56, 0.62, 0.65, 0.68, 0.71, 0.74, 0.76, 0.78, 0.79, 0.8, 0.8, + +0.8, 0.8, 0.8, 0.79, 0.78, 0.775, 0.77, 0.765, 0.76, 0.765, 0.77, 0.77, 0.77, 0.775, 0.78, 0.785, 0.79, 0.87, 0.95, 1.175, + +1.4, 0, 0, 0, 0.048483, 0.098044, 0.194756, 0.296707, 0.398244, 0.499707, 0.565268, 0.621854, 0.657585, 0.686366, 0.714463, 0.742268, 0.764049, 0.782585, 0.795854, 0.80561, + +0.81, 0.81, 0.81, 0.81, 0.806049, 0.797268, 0.790049, 0.785171, 0.780293, 0.775415, 0.773317, 0.777707, 0.781122, 0.78161, 0.783171, 0.789024, 0.795317, 0.804098, 0.820439, 0.904829, + +0.997317, 1.24366, 1.49, 0, 0, 0, 0.059314, 0.123219, 0.215238, 0.314286, 0.409333, 0.502667, 0.572, 0.625333, 0.66581, 0.693429, 0.720286, 0.746, 0.769143, 0.786286, + +0.801905, 0.811429, 0.82, 0.82, 0.82, 0.82, 0.82, 0.813143, 0.805524, 0.80019, 0.795429, 0.790667, 0.785905, 0.786286, 0.790095, 0.792476, 0.793429, 0.796667, 0.803333, 0.811714, + +0.824095, 0.851714, 0.940286, 1.04667, 1.31333, 1.58, 0, 0, 0, 0.068144, 0.145726, 0.236395, 0.332674, 0.42307, 0.508651, 0.580093, 0.630326, 0.674628, 0.70114, 0.727372, + +0.751093, 0.774814, 0.791023, 0.806837, 0.817442, 0.826744, 0.83, 0.83, 0.83, 0.83, 0.827721, 0.821209, 0.81507, 0.810419, 0.805767, 0.801116, 0.796465, 0.79893, 0.802186, 0.804047, + +0.805442, 0.810465, 0.817907, 0.829116, 0.84493, 0.883767, 0.976326, 1.09791, 1.38395, 1.67, 0, 0, 0, 0.075109, 0.165745, 0.258182, 0.351818, 0.439273, 0.517455, 0.589455, + +0.636727, 0.684, 0.709455, 0.734909, 0.757455, 0.779273, 0.796727, 0.811273, 0.823636, 0.832727, 0.84, 0.84, 0.84, 0.84, 0.84, 0.835636, 0.830182, 0.825273, 0.820727, 0.816182, + +0.811636, 0.808545, 0.811273, 0.814, 0.815818, 0.817636, 0.824545, 0.832727, 0.847454, 0.866545, 0.916546, 1.01291, 1.15091, 1.45545, 1.76, 0, 0, 0, 0.080333, 0.183444, + +0.280556, 0.371667, 0.457778, 0.528889, 0.6, 0.644444, 0.688889, 0.718333, 0.742778, 0.765, 0.785, 0.803333, 0.816667, 0.83, 0.838889, 0.847778, 0.85, 0.85, 0.85, 0.85, + +0.848889, 0.844444, 0.84, 0.835556, 0.831111, 0.826667, 0.822222, 0.821111, 0.823333, 0.825556, 0.827778, 0.83, 0.838889, 0.847778, 0.866667, 0.888889, 0.95, 1.05, 1.20556, 1.52778, + +1.85, 0, 0, 0, 0.08393, 0.198974, 0.303478, 0.392174, 0.478435, 0.542783, 0.60713, 0.653391, 0.69513, 0.727739, 0.751217, 0.773652, 0.791913, 0.810174, 0.822957, 0.83513, + +0.845217, 0.853913, 0.86, 0.86, 0.86, 0.86, 0.86, 0.857565, 0.854087, 0.850261, 0.845913, 0.841565, 0.837217, 0.83287, 0.833391, 0.83513, 0.837304, 0.839913, 0.843913, 0.853478, + +0.863043, 0.886696, 0.911913, 0.984087, 1.08756, 1.26174, 1.60087, 1.94, 0, 0, 0, 0.086004, 0.212472, 0.326915, 0.413298, 0.499681, 0.558979, 0.616851, 0.663489, 0.702638, + +0.737638, 0.760191, 0.782745, 0.799936, 0.816532, 0.830085, 0.841149, 0.851702, 0.860213, 0.868723, 0.87, 0.87, 0.87, 0.87, 0.869617, 0.867064, 0.864511, 0.860596, 0.85634, 0.852085, + +0.84783, 0.844128, 0.845404, 0.846681, 0.849234, 0.852213, 0.858085, 0.868298, 0.879404, 0.907489, 0.935574, 1.01877, 1.12557, 1.31936, 1.67468, 2.03, 0, 0, 0, 0.08665, + +0.224067, 0.350833, 0.435, 0.519167, 0.577333, 0.629, 0.674667, 0.711333, 0.748, 0.769667, 0.791333, 0.809, 0.824, 0.838, 0.848, 0.858, 0.866667, 0.875, 0.88, 0.88, + +0.88, 0.88, 0.88, 0.879, 0.877333, 0.875167, 0.871, 0.866833, 0.862667, 0.8585, 0.856333, 0.857167, 0.858, 0.861333, 0.864667, 0.8725, 0.883333, 0.898167, 0.929, 0.959833, + +1.054, 1.164, 1.37833, 1.74917, 2.12, 0, 0, 0, 0.085955, 0.233873, 0.375204, 0.457245, 0.539286, 0.597714, 0.643429, 0.686857, 0.721143, 0.755428, 0.779612, 0.800429, + +0.819041, 0.83251, 0.84598, 0.855633, 0.864612, 0.873265, 0.881429, 0.889592, 0.89, 0.89, 0.89, 0.89, 0.889959, 0.889143, 0.888326, 0.885551, 0.881469, 0.877388, 0.873306, 0.869224, + +0.868286, 0.868694, 0.869918, 0.873592, 0.877265, 0.887143, 0.898571, 0.917714, 0.951184, 0.984653, 1.08976, 1.20282, 1.43857, 1.82429, 2.21, 0, 0, 0, 0.084, 0.242, + +0.4, 0.48, 0.56, 0.62, 0.66, 0.7, 0.732, 0.764, 0.79, 0.81, 0.83, 0.842, 0.854, 0.864, 0.872, 0.88, 0.888, 0.896, 0.9, 0.9, + +0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.896, 0.892, 0.888, 0.884, 0.88, 0.88, 0.88, 0.882, 0.886, 0.89, 0.902, 0.914, 0.938, 0.974, + +1.01, 1.126, 1.242, 1.5, 1.9, 2.3, 0, 0, 0, 0.078941, 0.233255, 0.387569, 0.473941, 0.552765, 0.618137, 0.658529, 0.698922, 0.731784, 0.762765, 0.790706, + +0.809529, 0.828353, 0.841961, 0.853333, 0.864118, 0.871569, 0.87902, 0.886471, 0.893922, 0.901, 0.901, 0.901, 0.901, 0.901, 0.901, 0.901, 0.901, 0.899588, 0.896059, 0.892529, + +0.889333, 0.886196, 0.884118, 0.88451, 0.884902, 0.888235, 0.892549, 0.89851, 0.911059, 0.923608, 0.949412, 0.982353, 1.02486, 1.15349, 1.28212, 1.56216, 1.96608, 2.37, 0, 0, + +0, 0.074308, 0.225077, 0.375846, 0.468154, 0.545846, 0.616154, 0.656923, 0.697692, 0.732, 0.762, 0.792, 0.809692, 0.827385, 0.842308, 0.853077, 0.863846, 0.871538, 0.878462, 0.885385, + +0.892308, 0.899231, 0.902, 0.902, 0.902, 0.902, 0.902, 0.902, 0.902, 0.902, 0.899538, 0.896462, 0.893538, 0.891231, 0.888923, 0.888462, 0.889231, 0.89, 0.894615, 0.899231, + +0.907231, 0.920308, 0.933385, 0.96, 0.99, 1.04215, 1.18292, 1.32369, 1.62462, 2.03231, 2.44, 0, 0, 0, 0.070075, 0.217434, 0.364792, 0.462623, 0.539226, 0.614057, + +0.655189, 0.696321, 0.732623, 0.761679, 0.790736, 0.810453, 0.827057, 0.843019, 0.853208, 0.863396, 0.871887, 0.878302, 0.884717, 0.891132, 0.897547, 0.903, 0.903, 0.903, 0.903, 0.903, + +0.903, 0.903, 0.903, 0.902472, 0.89983, 0.897189, 0.89517, 0.89366, 0.892151, 0.893019, 0.894151, 0.896226, 0.901132, 0.906038, 0.916151, 0.929736, 0.943321, 0.969811, 0.996981, 1.06174, + +1.21419, 1.36664, 1.68736, 2.09868, 2.51, 0, 0, 0, 0.066222, 0.210296, 0.35437, 0.457333, 0.532889, 0.608444, 0.653333, 0.694815, 0.73363, 0.761778, 0.789926, 0.811778, + +0.827333, 0.842889, 0.853704, 0.863333, 0.872593, 0.878519, 0.884444, 0.89037, 0.896296, 0.902222, 0.904, 0.904, 0.904, 0.904, 0.904, 0.904, 0.904, 0.904, 0.902667, 0.900444, + +0.898222, 0.897333, 0.896593, 0.896296, 0.897778, 0.899259, 0.902593, 0.907778, 0.912963, 0.925259, 0.939333, 0.954444, 0.978889, 1.00333, 1.08348, 1.24718, 1.41089, 1.75037, 2.16518, 2.58, + +0, 0, 0, 0.062727, 0.203636, 0.344545, 0.452273, 0.526818, 0.601364, 0.651364, 0.693182, 0.735, 0.762273, 0.789545, 0.813636, 0.828182, 0.842727, 0.854545, 0.863636, 0.872727, + +0.879091, 0.884545, 0.89, 0.895455, 0.900909, 0.905, 0.905, 0.905, 0.905, 0.905, 0.905, 0.905, 0.905, 0.905, 0.903182, 0.901364, 0.9, 0.9, 0.9, 0.900909, + +0.902727, 0.904545, 0.909091, 0.914545, 0.92, 0.934545, 0.949091, 0.965455, 0.987273, 1.00909, 1.10727, 1.28182, 1.45636, 1.81364, 2.23182, 2.65, 0, 0, 0, 0.059571, + +0.197429, 0.335286, 0.447429, 0.521, 0.594571, 0.649286, 0.691429, 0.733571, 0.763143, 0.789571, 0.816, 0.829571, 0.843143, 0.855714, 0.864286, 0.872857, 0.88, 0.885, 0.89, 0.895, + +0.9, 0.905, 0.906, 0.906, 0.906, 0.906, 0.906, 0.906, 0.906, 0.906, 0.905429, 0.904, 0.902571, 0.902429, 0.903143, 0.903857, 0.905714, 0.907857, 0.91, 0.915714, + +0.921429, 0.929, 0.944, 0.959, 0.975714, 0.995, 1.01429, 1.133, 1.318, 1.503, 1.87714, 2.29857, 2.72, 0, 0, 0, 0.056737, 0.191649, 0.326561, 0.442789, + +0.515421, 0.588053, 0.647105, 0.689561, 0.732018, 0.764368, 0.789982, 0.815596, 0.831474, 0.844105, 0.856737, 0.865263, 0.873333, 0.881228, 0.885789, 0.890351, 0.894912, 0.899474, 0.904035, 0.907, + +0.907, 0.907, 0.907, 0.907, 0.907, 0.907, 0.907, 0.907, 0.906158, 0.905105, 0.904053, 0.905333, 0.906737, 0.908246, 0.910702, 0.913158, 0.916491, 0.922456, 0.928421, 0.938175, + +0.953614, 0.969053, 0.985263, 1.0021, 1.01895, 1.16056, 1.35565, 1.55074, 1.94088, 2.36544, 2.79, 0, 0, 0, 0.054207, 0.186276, 0.318345, 0.438345, 0.510069, 0.581793, + +0.644828, 0.687586, 0.730345, 0.765931, 0.790759, 0.815586, 0.833862, 0.845586, 0.85731, 0.866552, 0.874138, 0.881724, 0.886897, 0.891034, 0.895172, 0.89931, 0.903448, 0.907586, 0.908, 0.908, + +0.908, 0.908, 0.908, 0.908, 0.908, 0.908, 0.907862, 0.907172, 0.906483, 0.906621, 0.90869, 0.910759, 0.913103, 0.915862, 0.918621, 0.923103, 0.92931, 0.935517, 0.947517, 0.963379, + +0.979241, 0.994138, 1.00862, 1.0231, 1.18986, 1.39469, 1.59952, 2.00483, 2.43241, 2.86, 0, 0, 0, 0.051966, 0.181288, 0.31061, 0.434085, 0.504932, 0.57578, 0.642458, + +0.685508, 0.728559, 0.767814, 0.791881, 0.815949, 0.836712, 0.847559, 0.858407, 0.868136, 0.875254, 0.882373, 0.888305, 0.892034, 0.895763, 0.899492, 0.90322, 0.906949, 0.909, 0.909, 0.909, + +0.909, 0.909, 0.909, 0.909, 0.909, 0.909, 0.908797, 0.908458, 0.908119, 0.909763, 0.912475, 0.915186, 0.918136, 0.921186, 0.924237, 0.92983, 0.936271, 0.942712, 0.957017, 0.973288, + +0.989559, 1.00237, 1.01458, 1.02678, 1.22081, 1.43505, 1.64929, 2.06898, 2.49949, 2.93, 0, 0, 0, 0.05, 0.176667, 0.303333, 0.43, 0.5, 0.57, 0.64, + +0.683333, 0.726667, 0.77, 0.793333, 0.816667, 0.84, 0.85, 0.86, 0.87, 0.876667, 0.883333, 0.89, 0.893333, 0.896667, 0.9, 0.903333, 0.906667, 0.91, 0.91, 0.91, + +0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.913333, 0.916667, 0.92, 0.923333, 0.926667, 0.93, 0.936667, 0.943333, 0.95, 0.966667, + +0.983333, 1, 1.01, 1.02, 1.03, 1.25333, 1.47667, 1.7, 2.13333, 2.56667, 3, 0, 0, 0, 0, 0.183361, 0.307951, 0.432541, 0.505787, 0.573328, + +0.640869, 0.686115, 0.727426, 0.768738, 0.794574, 0.816541, 0.838508, 0.851131, 0.860639, 0.870148, 0.87759, 0.884148, 0.890705, 0.895344, 0.898951, 0.902557, 0.905967, 0.909246, 0.912525, 0.914, + +0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.914, 0.915033, 0.917984, 0.920934, 0.924082, 0.927689, 0.931295, 0.935721, 0.942607, 0.949492, + +0.958082, 0.973492, 0.988902, 1.00343, 1.01293, 1.02244, 1.0549, 1.29392, 1.53293, 1.78197, 2.22131, 2.66066, 3.1, 0, 0, 0, 0, 0.190323, 0.312903, 0.435484, + +0.512129, 0.57729, 0.642452, 0.689548, 0.728903, 0.768258, 0.796387, 0.817032, 0.837677, 0.852516, 0.861548, 0.870581, 0.878581, 0.885032, 0.891484, 0.897161, 0.901032, 0.904903, 0.908645, 0.911871, + +0.915097, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.918, 0.919806, 0.922387, 0.924968, 0.928323, 0.932194, 0.936065, + +0.941548, 0.948645, 0.955742, 0.965677, 0.979871, 0.994064, 1.00671, 1.01574, 1.02477, 1.08284, 1.33703, 1.59123, 1.86452, 2.30968, 2.75484, 3.2, 0, 0, 0, 0, + +0.19754, 0.318175, 0.438809, 0.519, 0.581857, 0.644714, 0.693603, 0.731063, 0.768524, 0.798746, 0.818111, 0.837476, 0.854143, 0.862714, 0.871286, 0.879635, 0.885984, 0.892333, 0.898683, 0.902921, + +0.907048, 0.911175, 0.91454, 0.917714, 0.920889, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922, 0.922111, 0.924333, 0.926556, + +0.928778, 0.932714, 0.936841, 0.940968, 0.947476, 0.954778, 0.962079, 0.972809, 0.985825, 0.998841, 1.00986, 1.01843, 1.027, 1.11367, 1.38256, 1.65145, 1.94762, 2.39841, 2.84921, 3.3, + +0, 0, 0, 0, 0.205, 0.32375, 0.4425, 0.526375, 0.587, 0.647625, 0.69825, 0.733875, 0.7695, 0.801625, 0.81975, 0.837875, 0.856, 0.864125, 0.87225, 0.880375, + +0.887, 0.89325, 0.8995, 0.904625, 0.909, 0.913375, 0.91725, 0.920375, 0.9235, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, 0.926, + +0.926, 0.926, 0.92675, 0.928625, 0.9305, 0.932875, 0.93725, 0.941625, 0.946, 0.9535, 0.961, 0.9685, 0.9795, 0.991375, 1.00325, 1.01287, 1.021, 1.02912, 1.14725, 1.43037, + +1.7135, 2.03125, 2.4875, 2.94375, 3.4, 0, 0, 0, 0, 0.212692, 0.329615, 0.446538, 0.534231, 0.592692, 0.651154, 0.703462, 0.737308, 0.771154, 0.805, 0.821923, + +0.838846, 0.855769, 0.865769, 0.873462, 0.881154, 0.888077, 0.894231, 0.900385, 0.906154, 0.910769, 0.915385, 0.92, 0.923077, 0.926154, 0.929231, 0.93, 0.93, 0.93, 0.93, 0.93, + +0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.931154, 0.932692, 0.934231, 0.937308, 0.941923, 0.946539, 0.951923, 0.959615, 0.967308, 0.975, 0.985769, 0.996538, + +1.00731, 1.01577, 1.02346, 1.03115, 1.18346, 1.48038, 1.77731, 2.11539, 2.57692, 3.03846, 3.5, 0, 0, 0, 0, 0.220606, 0.335758, 0.450909, 0.542545, 0.598909, + +0.655273, 0.709212, 0.741333, 0.773455, 0.805576, 0.824606, 0.840364, 0.856121, 0.867636, 0.874909, 0.882182, 0.889212, 0.895273, 0.901333, 0.907394, 0.912364, 0.917212, 0.922061, 0.925818, 0.928849, + +0.931879, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934, 0.934121, 0.935333, 0.936545, 0.937758, 0.941879, 0.946727, + +0.951576, 0.957939, 0.965818, 0.973697, 0.981939, 0.991636, 1.00133, 1.01103, 1.01855, 1.02582, 1.03309, 1.22218, 1.53249, 1.84279, 2.2, 2.66667, 3.13333, 3.6, 0, 0, + +0, 0, 0.228731, 0.342164, 0.455597, 0.551298, 0.605627, 0.659955, 0.714284, 0.745925, 0.776373, 0.806821, 0.827776, 0.842403, 0.85703, 0.869716, 0.876582, 0.883448, 0.890313, 0.896373, + +0.902343, 0.908313, 0.913791, 0.918866, 0.92394, 0.928597, 0.931582, 0.934567, 0.937552, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, + +0.938, 0.938, 0.938403, 0.939299, 0.940194, 0.941507, 0.946582, 0.951657, 0.956731, 0.964045, 0.972104, 0.980164, 0.988463, 0.997119, 1.00578, 1.01434, 1.02121, 1.02807, 1.03494, 1.2633, + +1.58658, 1.90987, 2.28507, 2.75672, 3.22836, 3.7, 0, 0, 0, 0, 0.237059, 0.348824, 0.460588, 0.560471, 0.612823, 0.665176, 0.717529, 0.751059, 0.779882, 0.808706, + +0.831412, 0.844941, 0.858471, 0.872, 0.878471, 0.884941, 0.891412, 0.897529, 0.903412, 0.909294, 0.915059, 0.920353, 0.925647, 0.930941, 0.934353, 0.937294, 0.940235, 0.942, 0.942, 0.942, + +0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942, 0.942471, 0.943059, 0.943647, 0.946118, 0.951412, 0.956706, 0.962, 0.970235, 0.978471, + +0.986706, 0.994588, 1.00224, 1.00988, 1.01729, 1.02376, 1.03024, 1.03671, 1.30671, 1.64259, 1.97847, 2.37059, 2.84706, 3.32353, 3.8, 0, 0, 0, 0, 0.24558, + +0.355725, 0.46587, 0.570043, 0.620478, 0.670913, 0.721348, 0.75671, 0.783956, 0.811203, 0.835493, 0.847956, 0.86042, 0.872884, 0.880565, 0.886652, 0.892739, 0.898739, 0.904536, 0.910333, 0.91613, + +0.921681, 0.927188, 0.932696, 0.937159, 0.940058, 0.942957, 0.945855, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, 0.946, + +0.946043, 0.946333, 0.946623, 0.946913, 0.950855, 0.956362, 0.96187, 0.968101, 0.976507, 0.984913, 0.993319, 1.00033, 1.007, 1.01367, 1.02013, 1.02622, 1.0323, 1.03839, 1.35231, 1.70042, + +2.04854, 2.45652, 2.93768, 3.41884, 3.9, 0, 0, 0, 0, 0.254286, 0.362857, 0.471429, 0.58, 0.628571, 0.677143, 0.725714, 0.762857, 0.788571, 0.814286, 0.84, + +0.851429, 0.862857, 0.874286, 0.882857, 0.888571, 0.894286, 0.9, 0.905714, 0.911429, 0.917143, 0.922857, 0.928571, 0.934286, 0.94, 0.942857, 0.945714, 0.948571, 0.95, 0.95, 0.95, + +0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.955714, 0.961429, 0.967143, 0.974286, 0.982857, + +0.991429, 1, 1.00571, 1.01143, 1.01714, 1.02286, 1.02857, 1.03429, 1.04, 1.4, 1.76, 2.12, 2.54286, 3.02857, 3.51429, 4, 0, 0, 0, 0, + +0.257789, 0.363986, 0.470183, 0.57638, 0.629676, 0.677094, 0.724512, 0.764042, 0.788925, 0.813807, 0.83869, 0.85238, 0.863272, 0.874164, 0.883812, 0.889728, 0.895643, 0.901559, 0.907146, 0.912592, + +0.918038, 0.923484, 0.92893, 0.934376, 0.939822, 0.943634, 0.946357, 0.94908, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, + +0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.951667, 0.9533, 0.958746, 0.964193, 0.969639, 0.977127, 0.985296, 0.993465, 1.00109, 1.00654, 1.01198, 1.01743, 1.02287, 1.02832, 1.03376, + +1.07298, 1.41608, 1.75917, 2.10227, 2.51127, 2.97418, 3.43709, 3.9, 0, 0, 0, 0, 0.261556, 0.365444, 0.469333, 0.573222, 0.631037, 0.677333, 0.72363, 0.765481, + +0.789556, 0.81363, 0.837704, 0.853556, 0.863926, 0.874296, 0.884667, 0.890778, 0.896889, 0.903, 0.908741, 0.913926, 0.919111, 0.924296, 0.929482, 0.934667, 0.939852, 0.944519, 0.947111, 0.949704, + +0.952296, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.953333, 0.956444, + +0.96163, 0.966815, 0.972, 0.979778, 0.987556, 0.995333, 1.00207, 1.00726, 1.01244, 1.01763, 1.02281, 1.028, 1.03319, 1.10267, 1.42933, 1.756, 2.08267, 2.47778, 2.91852, 3.35926, + +3.8, 0, 0, 0, 0, 0.265575, 0.367219, 0.468863, 0.570507, 0.632644, 0.677849, 0.723055, 0.767164, 0.790452, 0.81374, 0.837027, 0.854945, 0.864808, 0.874671, 0.884534, + +0.891726, 0.898027, 0.904329, 0.910493, 0.915425, 0.920356, 0.925288, 0.930219, 0.935151, 0.940082, 0.945014, 0.947973, 0.950438, 0.952904, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, + +0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.955, 0.959438, 0.96437, 0.969301, 0.974849, 0.982247, 0.989644, 0.997041, + +1.00296, 1.00789, 1.01282, 1.01775, 1.02269, 1.02762, 1.03255, 1.12921, 1.43989, 1.75058, 2.06126, 2.44247, 2.86164, 3.28082, 3.7, 0, 0, 0, 0, 0.269838, + +0.369297, 0.468757, 0.568216, 0.634486, 0.678631, 0.722775, 0.766919, 0.791604, 0.814126, 0.836649, 0.856541, 0.86591, 0.875279, 0.884649, 0.892577, 0.899063, 0.90555, 0.912036, 0.917081, 0.921766, + +0.92645, 0.931135, 0.93582, 0.940504, 0.945189, 0.948937, 0.951279, 0.953622, 0.955964, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, + +0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.956667, 0.957604, 0.962288, 0.966973, 0.971658, 0.977514, 0.984541, 0.991568, 0.998595, 1.00375, 1.00843, 1.01312, 1.0178, 1.02249, + +1.02717, 1.03186, 1.15272, 1.44786, 1.74299, 2.03813, 2.40541, 2.80361, 3.2018, 3.6, 0, 0, 0, 0, 0.274333, 0.371667, 0.469, 0.566333, 0.636556, 0.679667, + +0.722778, 0.765889, 0.793, 0.814778, 0.836556, 0.858333, 0.867222, 0.876111, 0.885, 0.893333, 0.9, 0.906667, 0.913333, 0.918889, 0.923333, 0.927778, 0.932222, 0.936667, 0.941111, 0.945556, + +0.95, 0.952222, 0.954444, 0.956667, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, 0.958333, + +0.958333, 0.958333, 0.958333, 0.960556, 0.965, 0.969444, 0.973889, 0.98, 0.986667, 0.993333, 1, 1.00444, 1.00889, 1.01333, 1.01778, 1.02222, 1.02667, 1.03111, 1.17333, 1.45333, + +1.73333, 2.01333, 2.36667, 2.74444, 3.12222, 3.5, 0, 0, 0, 0, 0.279053, 0.374316, 0.469579, 0.564842, 0.638842, 0.680947, 0.723053, 0.765158, 0.794632, 0.815684, + +0.836737, 0.857789, 0.868737, 0.877158, 0.885579, 0.894, 0.900842, 0.907684, 0.914526, 0.920842, 0.925053, 0.929263, 0.933474, 0.937684, 0.941895, 0.946105, 0.950316, 0.953263, 0.955368, 0.957474, + +0.959579, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, + +0.963368, 0.967579, 0.971789, 0.976, 0.982316, 0.988632, 0.994947, 1.00084, 1.00505, 1.00926, 1.01347, 1.01768, 1.0219, 1.02611, 1.03032, 1.19116, 1.45642, 1.72169, 1.98695, 2.32632, + +2.68421, 3.04211, 3.4, 0, 0, 0, 0, 0.283987, 0.377234, 0.470481, 0.563727, 0.641338, 0.682463, 0.723589, 0.764714, 0.796489, 0.816836, 0.837182, 0.857528, 0.870446, + +0.878411, 0.886377, 0.894342, 0.901593, 0.908606, 0.915619, 0.922632, 0.926918, 0.9309, 0.934883, 0.938866, 0.942849, 0.946831, 0.950814, 0.954398, 0.95639, 0.958381, 0.960372, 0.961667, 0.961667, + +0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.961667, 0.962065, 0.966048, 0.97003, + +0.974013, 0.978494, 0.984468, 0.990442, 0.996416, 1.00159, 1.00558, 1.00956, 1.01354, 1.01752, 1.02151, 1.02549, 1.02947, 1.2063, 1.45721, 1.70812, 1.95903, 2.28442, 2.62294, 2.96147, + +3.3, 0, 0, 0, 0, 0.289128, 0.38041, 0.471692, 0.562974, 0.644034, 0.684205, 0.724376, 0.764547, 0.798564, 0.818222, 0.83788, 0.857538, 0.872342, 0.879863, 0.887385, + +0.894906, 0.902256, 0.909436, 0.916615, 0.923795, 0.928923, 0.932684, 0.936444, 0.940205, 0.943966, 0.947726, 0.951487, 0.955248, 0.957504, 0.959385, 0.961265, 0.963145, 0.963333, 0.963333, 0.963333, + +0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.963333, 0.964838, 0.968598, 0.972359, 0.97612, + +0.980821, 0.986462, 0.992103, 0.997744, 1.00226, 1.00602, 1.00978, 1.01354, 1.0173, 1.02106, 1.02482, 1.02858, 1.21887, 1.4558, 1.69272, 1.92964, 2.24103, 2.56068, 2.88034, 3.2, + +0, 0, 0, 0, 0.294468, 0.383835, 0.473203, 0.56257, 0.646924, 0.686165, 0.725405, 0.764646, 0.800848, 0.819835, 0.838823, 0.85781, 0.874418, 0.881506, 0.888595, 0.895684, + +0.902835, 0.910177, 0.917519, 0.924861, 0.931063, 0.934608, 0.938152, 0.941696, 0.94524, 0.948785, 0.952329, 0.955873, 0.958709, 0.960481, 0.962253, 0.964025, 0.965, 0.965, 0.965, 0.965, + +0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.965, 0.967481, 0.971025, 0.97457, 0.978114, + +0.982987, 0.988304, 0.99362, 0.998937, 1.00284, 1.00638, 1.00992, 1.01347, 1.01701, 1.02056, 1.0241, 1.02765, 1.22896, 1.45225, 1.67554, 1.89884, 2.1962, 2.49747, 2.79873, 3.1, + +0, 0, 0, 0, 0.3, 0.3875, 0.475, 0.5625, 0.65, 0.688333, 0.726667, 0.765, 0.803333, 0.821667, 0.84, 0.858333, 0.876667, 0.883333, 0.89, 0.896667, + +0.903333, 0.910833, 0.918333, 0.925833, 0.933333, 0.936667, 0.94, 0.943333, 0.946667, 0.95, 0.953333, 0.956667, 0.96, 0.961667, 0.963333, 0.965, 0.966667, 0.966667, 0.966667, 0.966667, + +0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.966667, 0.97, 0.973333, 0.976667, + +0.98, 0.985, 0.99, 0.995, 1, 1.00333, 1.00667, 1.01, 1.01333, 1.01667, 1.02, 1.02333, 1.02667, 1.23667, 1.44667, 1.65667, 1.86667, 2.15, 2.43333, 2.71667, + +3, 0, 0, 0, 0, 0, 0.391395, 0.477074, 0.562753, 0.648432, 0.690704, 0.728152, 0.765601, 0.803049, 0.823708, 0.841403, 0.859099, 0.876794, 0.885337, 0.891593, + +0.897848, 0.904103, 0.911407, 0.919062, 0.926716, 0.93437, 0.938856, 0.941984, 0.945111, 0.948239, 0.951366, 0.954494, 0.957621, 0.960749, 0.962938, 0.964502, 0.966066, 0.96763, 0.968333, 0.968333, + +0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.968333, 0.969272, 0.972399, + +0.975527, 0.978654, 0.982173, 0.986864, 0.991556, 0.996247, 1.00063, 1.00375, 1.00688, 1.01001, 1.01314, 1.01626, 1.01939, 1.02252, 1.04504, 1.24207, 1.43911, 1.63615, 1.83663, 2.10247, + +2.36831, 2.63416, 2.9, 0, 0, 0, 0, 0, 0.395512, 0.479415, 0.563317, 0.64722, 0.693268, 0.729854, 0.766439, 0.803024, 0.825951, 0.843024, 0.860098, 0.877171, + +0.887512, 0.893366, 0.89922, 0.905073, 0.911902, 0.919707, 0.927512, 0.935317, 0.941171, 0.944098, 0.947024, 0.949951, 0.952878, 0.955805, 0.958732, 0.961659, 0.964293, 0.965756, 0.967219, 0.968683, + +0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, + +0.97, 0.971756, 0.974683, 0.97761, 0.980537, 0.984195, 0.988585, 0.992976, 0.997366, 1.00117, 1.0041, 1.00702, 1.00995, 1.01288, 1.01581, 1.01873, 1.02166, 1.06088, 1.24527, 1.42966, + +1.61405, 1.80488, 2.05366, 2.30244, 2.55122, 2.8, 0, 0, 0, 0, 0, 0.399843, 0.482012, 0.564181, 0.646349, 0.69602, 0.731763, 0.767506, 0.803249, 0.82839, + +0.844855, 0.861321, 0.877787, 0.889851, 0.895313, 0.900775, 0.906237, 0.912321, 0.920273, 0.928225, 0.936177, 0.943606, 0.946337, 0.949068, 0.951799, 0.95453, 0.957261, 0.959992, 0.962723, 0.965454, + +0.967092, 0.968458, 0.969823, 0.971189, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.971667, + +0.971667, 0.971667, 0.971667, 0.971667, 0.971667, 0.974124, 0.976855, 0.979586, 0.982317, 0.986072, 0.990169, 0.994265, 0.998361, 1.00164, 1.00437, 1.0071, 1.00983, 1.01256, 1.01529, 1.01802, + +1.02076, 1.07428, 1.24633, 1.41838, 1.59043, 1.77149, 2.00361, 2.23574, 2.46787, 2.7, 0, 0, 0, 0, 0, 0.404381, 0.484857, 0.565333, 0.645809, 0.698952, + +0.733873, 0.768794, 0.803714, 0.831016, 0.846889, 0.862762, 0.878635, 0.892349, 0.897429, 0.902508, 0.907587, 0.912667, 0.920762, 0.928857, 0.936952, 0.945048, 0.948698, 0.951238, 0.953778, 0.956317, + +0.958857, 0.961397, 0.963937, 0.966476, 0.968508, 0.969778, 0.971048, 0.972317, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, + +0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973333, 0.973841, 0.976381, 0.978921, 0.98146, 0.984, 0.98781, 0.991619, 0.995429, 0.999238, 1.00203, 1.00457, + +1.00711, 1.00965, 1.01219, 1.01473, 1.01727, 1.01981, 1.08533, 1.24533, 1.40533, 1.56533, 1.73651, 1.95238, 2.16825, 2.38413, 2.6, 0, 0, 0, 0, 0, + +0.409118, 0.487941, 0.566765, 0.645588, 0.702059, 0.736176, 0.770294, 0.804412, 0.833824, 0.849118, 0.864412, 0.879706, 0.895, 0.899706, 0.904412, 0.909118, 0.913823, 0.921176, 0.929412, 0.937647, + +0.945882, 0.951176, 0.953529, 0.955882, 0.958235, 0.960588, 0.962941, 0.965294, 0.967647, 0.97, 0.971177, 0.972353, 0.973529, 0.974706, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, + +0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.975, 0.976177, 0.978529, 0.980882, 0.983235, 0.985882, + +0.989412, 0.992941, 0.996471, 1, 1.00235, 1.00471, 1.00706, 1.00941, 1.01177, 1.01412, 1.01647, 1.01882, 1.09412, 1.24235, 1.39059, 1.53882, 1.7, 1.9, 2.1, 2.3, + +2.5, 0, 0, 0, 0, 0, 0.414047, 0.491256, 0.568465, 0.645674, 0.705333, 0.738667, 0.772, 0.805333, 0.836806, 0.851535, 0.866264, 0.880992, 0.895721, 0.902139, + +0.906481, 0.910822, 0.915163, 0.921519, 0.929891, 0.938264, 0.946636, 0.953767, 0.955938, 0.958109, 0.960279, 0.96245, 0.96462, 0.966791, 0.968961, 0.971132, 0.972651, 0.973736, 0.974822, 0.975907, + +0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, 0.976667, + +0.976667, 0.976667, 0.978403, 0.980574, 0.982744, 0.984915, 0.987628, 0.990884, 0.99414, 0.997395, 1.00043, 1.0026, 1.00478, 1.00695, 1.00912, 1.01129, 1.01346, 1.01563, 1.0178, 1.10071, + +1.23746, 1.3742, 1.51095, 1.66202, 1.84651, 2.03101, 2.2155, 2.4, 0, 0, 0, 0, 0, 0.419161, 0.494793, 0.570425, 0.646057, 0.70877, 0.741337, 0.773904, + +0.806471, 0.839038, 0.854134, 0.86831, 0.882487, 0.896663, 0.904724, 0.908709, 0.912694, 0.916678, 0.921793, 0.930299, 0.938805, 0.94731, 0.955816, 0.95846, 0.960452, 0.962444, 0.964437, 0.966429, + +0.968421, 0.970414, 0.972406, 0.974199, 0.975195, 0.976192, 0.977188, 0.978184, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, + +0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978333, 0.978533, 0.980525, 0.982517, 0.98451, 0.986502, 0.989241, 0.99223, 0.995218, 0.998207, 1.0008, 1.00279, + +1.00478, 1.00677, 1.00877, 1.01076, 1.01275, 1.01474, 1.01674, 1.1052, 1.23071, 1.35623, 1.48175, 1.6226, 1.79195, 1.9613, 2.13065, 2.3, 0, 0, 0, 0, + +0, 0.424455, 0.498545, 0.572636, 0.646727, 0.712364, 0.744182, 0.776, 0.807818, 0.839636, 0.856909, 0.870545, 0.884182, 0.897818, 0.907455, 0.911091, 0.914727, 0.918364, 0.922, 0.930636, + +0.939273, 0.947909, 0.956545, 0.961091, 0.962909, 0.964727, 0.966545, 0.968364, 0.970182, 0.972, 0.973818, 0.975636, 0.976727, 0.977636, 0.978545, 0.979455, 0.98, 0.98, 0.98, 0.98, + +0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.980727, 0.982545, + +0.984364, 0.986182, 0.988, 0.990727, 0.993455, 0.996182, 0.998909, 1.00109, 1.00291, 1.00473, 1.00654, 1.00836, 1.01018, 1.012, 1.01382, 1.01564, 1.10764, 1.22218, 1.33673, 1.45127, + +1.58182, 1.73636, 1.89091, 2.04545, 2.2, 0, 0, 0, 0, 0, 0.429921, 0.502506, 0.57509, 0.647674, 0.716109, 0.747195, 0.778281, 0.809367, 0.840453, 0.859854, + +0.872963, 0.886071, 0.89918, 0.910326, 0.913622, 0.916918, 0.920213, 0.923509, 0.930906, 0.93967, 0.948434, 0.957199, 0.963828, 0.965476, 0.967124, 0.968772, 0.970419, 0.972067, 0.973715, 0.975363, + +0.977011, 0.97833, 0.979154, 0.979978, 0.980802, 0.981625, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, + +0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.981667, 0.98282, 0.984468, 0.986116, 0.987764, 0.989618, 0.99209, 0.994562, 0.997034, 0.999506, 1.00132, 1.00297, 1.00461, + +1.00626, 1.00791, 1.00956, 1.01121, 1.01285, 1.0145, 1.1081, 1.21193, 1.31575, 1.41957, 1.5397, 1.67978, 1.81985, 1.95993, 2.1, 0, 0, 0, 0, 0, + +0.435556, 0.506667, 0.577778, 0.648889, 0.72, 0.75037, 0.780741, 0.811111, 0.841481, 0.862963, 0.875556, 0.888148, 0.900741, 0.913333, 0.916296, 0.919259, 0.922222, 0.925185, 0.931111, 0.94, + +0.948889, 0.957778, 0.966667, 0.968148, 0.96963, 0.971111, 0.972593, 0.974074, 0.975556, 0.977037, 0.978519, 0.98, 0.980741, 0.981481, 0.982222, 0.982963, 0.983333, 0.983333, 0.983333, 0.983333, + +0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.983333, 0.984815, + +0.986296, 0.987778, 0.989259, 0.991111, 0.993333, 0.995556, 0.997778, 1, 1.00148, 1.00296, 1.00444, 1.00593, 1.00741, 1.00889, 1.01037, 1.01185, 1.01333, 1.10667, 1.2, 1.29333, + +1.38667, 1.4963, 1.62222, 1.74815, 1.87407, 2, 0, 0, 0, 0, 0, 0.441352, 0.511022, 0.580692, 0.650363, 0.720033, 0.753703, 0.783374, 0.813044, 0.842714, + +0.866231, 0.878319, 0.890407, 0.902494, 0.914582, 0.91911, 0.921747, 0.924385, 0.927022, 0.931253, 0.940264, 0.949275, 0.958286, 0.967297, 0.970923, 0.972242, 0.97356, 0.974879, 0.976198, 0.977516, + +0.978835, 0.980154, 0.981472, 0.982396, 0.983055, 0.983714, 0.984374, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, + +0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985, 0.985396, 0.986714, 0.988033, 0.989352, 0.99067, 0.992483, 0.994462, 0.99644, 0.998418, 1.00026, + +1.00158, 1.0029, 1.00422, 1.00554, 1.00686, 1.00818, 1.0095, 1.01081, 1.02031, 1.10338, 1.18646, 1.26954, 1.35262, 1.45165, 1.56374, 1.67582, 1.78791, 1.9, 0, 0, + +0, 0, 0, 0.447304, 0.515565, 0.583826, 0.652087, 0.720348, 0.757188, 0.786174, 0.815159, 0.844145, 0.869652, 0.881246, 0.892841, 0.904435, 0.916029, 0.922058, 0.924377, 0.926696, + +0.929014, 0.931333, 0.940464, 0.949594, 0.958725, 0.967855, 0.973797, 0.974957, 0.976116, 0.977275, 0.978435, 0.979594, 0.980754, 0.981913, 0.983072, 0.984116, 0.984696, 0.985275, 0.985855, 0.986435, + +0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, 0.986667, + +0.986667, 0.986667, 0.986667, 0.987362, 0.988522, 0.989681, 0.990841, 0.992, 0.993739, 0.995478, 0.997217, 0.998957, 1.00046, 1.00162, 1.00278, 1.00394, 1.0051, 1.00626, 1.00742, 1.00858, + +1.00974, 1.02528, 1.09832, 1.17136, 1.24441, 1.31745, 1.4058, 1.50435, 1.6029, 1.70145, 1.8, 0, 0, 0, 0, 0, 0.453409, 0.52029, 0.587172, 0.654054, + +0.720935, 0.760821, 0.789136, 0.817452, 0.845767, 0.873222, 0.884333, 0.895444, 0.906556, 0.917667, 0.925136, 0.927143, 0.929151, 0.931158, 0.933165, 0.940602, 0.949849, 0.959097, 0.968344, 0.976767, + +0.977771, 0.978774, 0.979778, 0.980781, 0.981785, 0.982789, 0.983792, 0.984796, 0.985799, 0.986401, 0.986903, 0.987405, 0.987907, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, + +0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.988333, 0.989237, 0.99024, 0.991244, + +0.992247, 0.993376, 0.994882, 0.996387, 0.997892, 0.999398, 1.0006, 1.00161, 1.00261, 1.00361, 1.00462, 1.00562, 1.00662, 1.00763, 1.00863, 1.0283, 1.09153, 1.15475, 1.21798, 1.2812, + +1.35878, 1.44409, 1.52939, 1.61469, 1.7, 0, 0, 0, 0, 0, 0.45966, 0.525191, 0.590723, 0.656255, 0.721787, 0.764596, 0.792255, 0.819915, 0.847574, 0.875234, + +0.887574, 0.898213, 0.908851, 0.919489, 0.92834, 0.930043, 0.931745, 0.933447, 0.935149, 0.940681, 0.950043, 0.959404, 0.968766, 0.978128, 0.980681, 0.981532, 0.982383, 0.983234, 0.984085, 0.984936, + +0.985787, 0.986638, 0.987489, 0.98817, 0.988596, 0.989021, 0.989447, 0.989872, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, + +0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99017, 0.991021, 0.991872, 0.992723, 0.993575, 0.994638, 0.995915, 0.997191, 0.998468, + +0.999745, 1.00068, 1.00153, 1.00238, 1.00323, 1.00408, 1.00494, 1.00579, 1.00664, 1.00749, 1.02945, 1.08306, 1.13668, 1.1903, 1.24391, 1.31064, 1.38298, 1.45532, 1.52766, 1.6, + +0, 0, 0, 0, 0, 0.466053, 0.530263, 0.594474, 0.658684, 0.722895, 0.768509, 0.795526, 0.822544, 0.849561, 0.876579, 0.890965, 0.90114, 0.911316, 0.921491, 0.931667, + +0.93307, 0.934474, 0.935877, 0.937281, 0.940702, 0.950175, 0.959649, 0.969123, 0.978597, 0.983684, 0.984386, 0.985088, 0.985789, 0.986491, 0.987193, 0.987895, 0.988596, 0.989298, 0.99, 0.990351, + +0.990702, 0.991053, 0.991404, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, + +0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.991667, 0.992018, 0.992719, 0.993421, 0.994123, 0.994825, 0.995789, 0.996842, 0.997895, 0.998947, 1, 1.0007, 1.0014, 1.0021, + +1.00281, 1.00351, 1.00421, 1.00491, 1.00561, 1.00632, 1.02877, 1.07298, 1.11719, 1.1614, 1.20561, 1.2614, 1.32105, 1.3807, 1.44035, 1.5, 0, 0, 0, 0, + +0, 0.472583, 0.5355, 0.598417, 0.661333, 0.72425, 0.772556, 0.798944, 0.825333, 0.851722, 0.878111, 0.8945, 0.904222, 0.913944, 0.923667, 0.933389, 0.936222, 0.937333, 0.938444, 0.939556, + +0.940667, 0.95025, 0.959833, 0.969417, 0.979, 0.986778, 0.987333, 0.987889, 0.988444, 0.989, 0.989556, 0.990111, 0.990667, 0.991222, 0.991778, 0.992167, 0.992444, 0.992722, 0.993, 0.993278, + +0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, 0.993333, + +0.993333, 0.993333, 0.993333, 0.993333, 0.993778, 0.994333, 0.994889, 0.995444, 0.996, 0.996833, 0.997667, 0.9985, 0.999333, 1.00011, 1.00067, 1.00122, 1.00178, 1.00233, 1.00289, 1.00344, + +1.004, 1.00456, 1.00511, 1.02633, 1.06133, 1.09633, 1.13133, 1.16633, 1.21111, 1.25833, 1.30556, 1.35278, 1.4, 0, 0, 0, 0, 0, 0.479247, 0.540897, + +0.602546, 0.664196, 0.725845, 0.776732, 0.802505, 0.828278, 0.854052, 0.879825, 0.898175, 0.907454, 0.916732, 0.92601, 0.935289, 0.939495, 0.94032, 0.941144, 0.941969, 0.942794, 0.950268, 0.959959, + +0.969649, 0.97934, 0.989031, 0.990371, 0.990784, 0.991196, 0.991608, 0.992021, 0.992433, 0.992845, 0.993258, 0.99367, 0.994041, 0.994247, 0.994454, 0.99466, 0.994866, 0.995, 0.995, 0.995, + +0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, 0.995, + +0.995, 0.995041, 0.995454, 0.995866, 0.996278, 0.996691, 0.997155, 0.997773, 0.998392, 0.99901, 0.999629, 1.00016, 1.00058, 1.00099, 1.0014, 1.00181, 1.00223, 1.00264, 1.00305, 1.00346, + +1.00388, 1.02219, 1.04816, 1.07414, 1.10012, 1.1261, 1.15979, 1.19484, 1.2299, 1.26495, 1.3, 0, 0, 0, 0, 0, 0.486041, 0.546449, 0.606857, 0.667265, + +0.727673, 0.781034, 0.806204, 0.831374, 0.856544, 0.881714, 0.901986, 0.91083, 0.919673, 0.928517, 0.937361, 0.942884, 0.943429, 0.943973, 0.944517, 0.945061, 0.950231, 0.960027, 0.969823, 0.979619, + +0.989415, 0.993497, 0.993769, 0.994041, 0.994313, 0.994585, 0.994857, 0.995129, 0.995401, 0.995673, 0.995946, 0.996109, 0.996245, 0.996381, 0.996517, 0.996653, 0.996667, 0.996667, 0.996667, 0.996667, + +0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, 0.996667, + +0.996776, 0.997048, 0.99732, 0.997592, 0.997864, 0.998204, 0.998612, 0.99902, 0.999429, 0.999837, 1.00016, 1.00043, 1.00071, 1.00098, 1.00125, 1.00152, 1.0018, 1.00207, 1.00234, 1.00261, + +1.01638, 1.03352, 1.05067, 1.06781, 1.08495, 1.10748, 1.13061, 1.15374, 1.17687, 1.2, 0, 0, 0, 0, 0, 0.49296, 0.552152, 0.611343, 0.670535, 0.729727, + +0.785458, 0.810037, 0.834616, 0.859195, 0.883774, 0.905929, 0.914347, 0.922764, 0.931182, 0.939599, 0.946387, 0.946657, 0.946926, 0.947195, 0.947465, 0.950141, 0.96004, 0.969939, 0.979838, 0.989737, + +0.996707, 0.996842, 0.996976, 0.997111, 0.997246, 0.99738, 0.997515, 0.99765, 0.997785, 0.997919, 0.998027, 0.998094, 0.998162, 0.998229, 0.998296, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, + +0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, 0.998333, + +0.998428, 0.998562, 0.998697, 0.998832, 0.998966, 0.999152, 0.999354, 0.999556, 0.999758, 0.99996, 1.00011, 1.00024, 1.00038, 1.00051, 1.00065, 1.00078, 1.00092, 1.00105, 1.00119, 1.00132, + +1.00897, 1.01745, 1.02594, 1.03442, 1.04291, 1.05421, 1.06566, 1.07711, 1.08855, 1.1, 0, 0, 0, 0, 0, 0.5, 0.558, 0.616, 0.674, 0.732, + +0.79, 0.814, 0.838, 0.862, 0.886, 0.91, 0.918, 0.926, 0.934, 0.942, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.96, 0.97, 0.98, 0.99, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0.578, 0.626, 0.674, + +0.722, 0.77, 0.818, 0.836909, 0.855818, 0.874727, 0.893636, 0.912546, 0.924546, 0.929636, 0.934727, 0.939818, 0.944909, 0.95, 0.951818, 0.953636, 0.955455, 0.957273, 0.959091, 0.963636, + +0.970909, 0.978182, 0.985455, 0.992727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0.608, + +0.647667, 0.687333, 0.727, 0.766667, 0.806333, 0.846, 0.860667, 0.875333, 0.89, 0.904667, 0.919333, 0.934, 0.936667, 0.939333, 0.942, 0.944667, 0.947333, 0.95, 0.953333, 0.956667, + +0.96, 0.963333, 0.966667, 0.97, 0.975, 0.98, 0.985, 0.99, 0.995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + +0, 0, 0, 0.678308, 0.710923, 0.743538, 0.776154, 0.808769, 0.841385, 0.874, 0.885077, 0.896154, 0.907231, 0.918308, 0.929385, 0.940462, 0.946308, 0.946923, 0.947538, 0.948154, + +0.948769, 0.949385, 0.95, 0.954615, 0.959231, 0.963846, 0.968462, 0.973077, 0.977692, 0.981538, 0.984615, 0.987692, 0.990769, 0.993846, 0.996923, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0.716, 0.742571, 0.769143, 0.795714, 0.822286, 0.848857, 0.875429, 0.902, 0.91, 0.918, 0.926, 0.934, 0.942, + +0.95, 0.958, 0.956857, 0.955714, 0.954571, 0.953429, 0.952286, 0.951143, 0.95, 0.955714, 0.961429, 0.967143, 0.972857, 0.978571, 0.984286, 0.99, 0.991429, 0.992857, 0.994286, 0.995714, + +0.997143, 0.998571, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0.780667, 0.802, 0.823333, 0.844667, 0.866, 0.887333, 0.908667, + +0.93, 0.935333, 0.940667, 0.946, 0.951333, 0.956667, 0.962, 0.967333, 0.968667, 0.966, 0.963333, 0.960667, 0.958, 0.955333, 0.952667, 0.95, 0.956667, 0.963333, 0.97, 0.976667, + +0.983333, 0.99, 0.996667, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0.79, + +0.80825, 0.8265, 0.84475, 0.863, 0.88125, 0.8995, 0.91775, 0.936, 0.9405, 0.945, 0.9495, 0.954, 0.9585, 0.963, 0.9675, 0.972, 0.9705, 0.969, 0.9675, 0.966, + +0.9645, 0.963, 0.9615, 0.96, 0.965, 0.97, 0.975, 0.98, 0.985, 0.99, 0.995, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0.817765, 0.833294, 0.848824, 0.864353, 0.879882, 0.895412, 0.910941, 0.926471, 0.942, 0.945765, 0.949529, 0.953294, 0.957059, + +0.960824, 0.964588, 0.968353, 0.972118, 0.973765, 0.973294, 0.972824, 0.972353, 0.971882, 0.971412, 0.970941, 0.970471, 0.97, 0.973529, 0.977059, 0.980588, 0.984118, 0.987647, 0.991176, 0.994706, + +0.998235, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.83, 0.843111, 0.856222, 0.869333, 0.882444, + +0.895556, 0.908667, 0.921778, 0.934889, 0.948, 0.951111, 0.954222, 0.957333, 0.960444, 0.963556, 0.966667, 0.969778, 0.972889, 0.976, 0.976444, 0.976889, 0.977333, 0.977778, 0.978222, 0.978667, + +0.979111, 0.979556, 0.98, 0.982222, 0.984444, 0.986667, 0.988889, 0.991111, 0.993333, 0.995556, 0.997778, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0.855474, 0.866421, 0.877368, 0.888316, 0.899263, 0.910211, 0.921158, 0.932105, 0.943053, 0.954, 0.956526, 0.959053, 0.961579, 0.964105, 0.966632, + +0.969158, 0.971684, 0.974211, 0.976737, 0.978632, 0.979895, 0.981158, 0.982421, 0.983684, 0.984947, 0.986211, 0.987474, 0.988737, 0.99, 0.991053, 0.992105, 0.993158, 0.994211, 0.995263, 0.996316, + +0.997368, 0.998421, 0.999474, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.87, 0.879, 0.888, 0.897, 0.906, + +0.915, 0.924, 0.933, 0.942, 0.951, 0.96, 0.962, 0.964, 0.966, 0.968, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, + +0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0.884, 0.892, 0.9, 0.908, 0.916, 0.924, 0.932, 0.94, 0.948, 0.956, 0.964, 0.965714, 0.967429, + +0.969143, 0.970857, 0.972571, 0.974286, 0.976, 0.977714, 0.979429, 0.981143, 0.982857, 0.984571, 0.986286, 0.988, 0.989714, 0.991429, 0.993143, 0.994857, 0.996571, 0.998286, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.89, + +0.897091, 0.904182, 0.911273, 0.918364, 0.925455, 0.932545, 0.939636, 0.946727, 0.953818, 0.960909, 0.968, 0.969455, 0.970909, 0.972364, 0.973818, 0.975273, 0.976727, 0.978182, 0.979636, 0.981091, + +0.982545, 0.984, 0.985455, 0.986909, 0.988364, 0.989818, 0.991273, 0.992727, 0.994182, 0.995636, 0.997091, 0.998545, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.90313, 0.909391, 0.915652, 0.921913, 0.928174, 0.934435, 0.940696, + +0.946957, 0.953217, 0.959478, 0.965739, 0.972, 0.973217, 0.974435, 0.975652, 0.97687, 0.978087, 0.979304, 0.980522, 0.981739, 0.982957, 0.984174, 0.985391, 0.986609, 0.987826, 0.989043, 0.990261, + +0.991478, 0.992696, 0.993913, 0.99513, 0.996348, 0.997565, 0.998783, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0.91, 0.9155, 0.921, 0.9265, 0.932, 0.9375, 0.943, 0.9485, 0.954, 0.9595, 0.965, 0.9705, 0.976, + +0.977, 0.978, 0.979, 0.98, 0.981, 0.982, 0.983, 0.984, 0.985, 0.986, 0.987, 0.988, 0.989, 0.99, 0.991, 0.992, 0.993, 0.994, 0.995, 0.996, + +0.997, 0.998, 0.999, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0.9224, 0.9272, 0.932, 0.9368, 0.9416, 0.9464, 0.9512, 0.956, 0.9608, 0.9656, 0.9704, 0.9752, 0.98, 0.9808, 0.9816, 0.9824, 0.9832, + +0.984, 0.9848, 0.9856, 0.9864, 0.9872, 0.988, 0.9888, 0.9896, 0.9904, 0.9912, 0.992, 0.9928, 0.9936, 0.9944, 0.9952, 0.996, 0.9968, 0.9976, 0.9984, 0.9992, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.93, + +0.934154, 0.938308, 0.942462, 0.946615, 0.950769, 0.954923, 0.959077, 0.963231, 0.967385, 0.971538, 0.975692, 0.979846, 0.984, 0.984615, 0.985231, 0.985846, 0.986462, 0.987077, 0.987692, 0.988308, + +0.988923, 0.989538, 0.990154, 0.990769, 0.991385, 0.992, 0.992615, 0.993231, 0.993846, 0.994462, 0.995077, 0.995692, 0.996308, 0.996923, 0.997538, 0.998154, 0.998769, 0.999385, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.941778, 0.945333, 0.948889, + +0.952444, 0.956, 0.959556, 0.963111, 0.966667, 0.970222, 0.973778, 0.977333, 0.980889, 0.984444, 0.988, 0.988444, 0.988889, 0.989333, 0.989778, 0.990222, 0.990667, 0.991111, 0.991556, 0.992, + +0.992444, 0.992889, 0.993333, 0.993778, 0.994222, 0.994667, 0.995111, 0.995556, 0.996, 0.996444, 0.996889, 0.997333, 0.997778, 0.998222, 0.998667, 0.999111, 0.999556, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.95, 0.953, 0.956, 0.959, 0.962, + +0.965, 0.968, 0.971, 0.974, 0.977, 0.98, 0.983, 0.986, 0.989, 0.992, 0.992286, 0.992571, 0.992857, 0.993143, 0.993429, 0.993714, 0.994, 0.994286, 0.994571, 0.994857, + +0.995143, 0.995429, 0.995714, 0.996, 0.996286, 0.996571, 0.996857, 0.997143, 0.997429, 0.997714, 0.998, 0.998286, 0.998571, 0.998857, 0.999143, 0.999429, 0.999714, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.961241, 0.963724, 0.966207, 0.96869, 0.971172, + +0.973655, 0.976138, 0.978621, 0.981103, 0.983586, 0.986069, 0.988552, 0.991035, 0.993517, 0.996, 0.996138, 0.996276, 0.996414, 0.996552, 0.99669, 0.996828, 0.996966, 0.997103, 0.997241, 0.997379, + +0.997517, 0.997655, 0.997793, 0.997931, 0.998069, 0.998207, 0.998345, 0.998483, 0.998621, 0.998759, 0.998897, 0.999035, 0.999172, 0.99931, 0.999448, 0.999586, 0.999724, 0.999862, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, + +0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, + +0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, + +0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, + +0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, + +0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, + +0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, + +0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, + +0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, + +0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, + +0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, + +0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, + +0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, + +0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, + +0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, + +0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, + +0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, + +0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, + +0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, + +0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, + +0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, + +0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, + +0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, + +0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, + +0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, + +0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, + +0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, + +0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, + +0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, + +0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, + +0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, + +0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, + +0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, + +0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, + +0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, + +0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, + +0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, + +0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, + +0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, + +0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, + +0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, + +0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, + +0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, + +0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, + +0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, + +0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, + +0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, + +0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, + +0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, + +0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +0, 0.97, 0.972, 0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, + +0.974, 0.976, 0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, + +0.978, 0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, + +0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.97, 0.972, 0.974, 0.976, 0.978, + +0.98, 0.982, 0.984, 0.986, 0.988, 0.99, 0.992, 0.994, 0.996, 0.998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +1 }; + vec = std::vector(arr, arr + sizeof(arr) / sizeof(arr[0]) ); + } + } + } +} diff --git a/src/detail/kernel_definitions/hall_pinsky_1000mb_grav_efficiencies.hpp b/src/detail/kernel_definitions_Jon/hall_pinsky_1000mb_grav_efficiencies.hpp similarity index 100% rename from src/detail/kernel_definitions/hall_pinsky_1000mb_grav_efficiencies.hpp rename to src/detail/kernel_definitions_Jon/hall_pinsky_1000mb_grav_efficiencies.hpp diff --git a/src/detail/kernel_definitions/hall_pinsky_cumulonimbus_efficiencies.hpp b/src/detail/kernel_definitions_Jon/hall_pinsky_cumulonimbus_efficiencies.hpp similarity index 100% rename from src/detail/kernel_definitions/hall_pinsky_cumulonimbus_efficiencies.hpp rename to src/detail/kernel_definitions_Jon/hall_pinsky_cumulonimbus_efficiencies.hpp diff --git a/src/detail/kernel_definitions/hall_pinsky_stratocumulus_efficiencies.hpp b/src/detail/kernel_definitions_Jon/hall_pinsky_stratocumulus_efficiencies.hpp similarity index 100% rename from src/detail/kernel_definitions/hall_pinsky_stratocumulus_efficiencies.hpp rename to src/detail/kernel_definitions_Jon/hall_pinsky_stratocumulus_efficiencies.hpp diff --git a/src/detail/kernel_definitions/vohl_davis_no_waals_efficiencies.hpp b/src/detail/kernel_definitions_Jon/vohl_davis_no_waals_efficiencies.hpp similarity index 100% rename from src/detail/kernel_definitions/vohl_davis_no_waals_efficiencies.hpp rename to src/detail/kernel_definitions_Jon/vohl_davis_no_waals_efficiencies.hpp diff --git a/src/detail/kernel_interpolation.hpp b/src/detail/kernel_interpolation.hpp index 21cb4b01f..dbbccb936 100644 --- a/src/detail/kernel_interpolation.hpp +++ b/src/detail/kernel_interpolation.hpp @@ -4,16 +4,17 @@ namespace libcloudphxx { namespace lgrngn { + // a version for Jon's efficiency tables template BOOST_GPU_ENABLED - real_t kernel_geometric::interpolated_efficiency(real_t r1, real_t r2) const //radii in meters + real_t kernel_with_efficiencies::interpolated_efficiency(real_t r1, real_t r2) const //radii in meters { r1*=1e6; r2*=1e6; // to work on micrometers - if(r1 >= kernel_base::r_max) - r1 = kernel_base::r_max - 1e-6; - if(r2 >= kernel_base::r_max) - r2 = kernel_base::r_max - 1e-6; + if(r1 >= r_max) + r1 = r_max - 1e-6; + if(r2 >= r_max) + r2 = r_max - 1e-6; n_t dx, dy, // distance between efficiencies in the matrix x[4]; // positions in the (R,r) space of the defined efficiencies. x1, x2, y1, y2 @@ -44,10 +45,10 @@ namespace libcloudphxx thrust_size_t iv[4]; // kernel_parameters vector indices of the four neighbouring efficiencies - iv[0] = detail::kernel_vector_index(detail::kernel_index(x[0]), detail::kernel_index(x[2]), kernel_base::n_user_params); - iv[1] = detail::kernel_vector_index(detail::kernel_index(x[1]), detail::kernel_index(x[2]), kernel_base::n_user_params); - iv[2] = detail::kernel_vector_index(detail::kernel_index(x[0]), detail::kernel_index(x[3]), kernel_base::n_user_params); - iv[3] = detail::kernel_vector_index(detail::kernel_index(x[1]), detail::kernel_index(x[3]), kernel_base::n_user_params); + iv[0] = detail::kernel_vector_index(detail::kernel_index(x[0]), detail::kernel_index(x[2])); + iv[1] = detail::kernel_vector_index(detail::kernel_index(x[1]), detail::kernel_index(x[2])); + iv[2] = detail::kernel_vector_index(detail::kernel_index(x[0]), detail::kernel_index(x[3])); + iv[3] = detail::kernel_vector_index(detail::kernel_index(x[1]), detail::kernel_index(x[3])); real_t w[4]; // weighting factors w[0] = r1 - x[0]; @@ -57,11 +58,55 @@ namespace libcloudphxx return ( - kernel_base::k_params[iv[0]] * w[1] * w[3] + - kernel_base::k_params[iv[1]] * w[0] * w[3] + - kernel_base::k_params[iv[2]] * w[1] * w[2] + - kernel_base::k_params[iv[3]] * w[0] * w[2] + k_coll_eff[iv[0]] * w[1] * w[3] + + k_coll_eff[iv[1]] * w[0] * w[3] + + k_coll_eff[iv[2]] * w[1] * w[2] + + k_coll_eff[iv[3]] * w[0] * w[2] ) / dx / dy; } + + // a version for efficiency tables with defined radius and ratio values + template + BOOST_GPU_ENABLED + real_t kernel_with_efficiencies::interpolated_efficiency_radrat(real_t r1, real_t r2) const //radii in meters + { +#if !defined(__NVCC__) + using std::max; + using std::min; +#endif + const real_t radius = max(r1,r2); + const real_t ratio = min(r1,r2) / radius; + real_t efficiency; + + // find indexes of first not less value of radius and ratio + int rad_pos = n_rad, rat_pos; + for(int i = 0; i < n_rad; ++i) if(k_coll_eff_rad[i] > radius) {rad_pos = i; break;} // within [0, n_rad] + for(int i = 1; i < n_rat; ++i) if(k_coll_eff_rat[i] >= ratio) {rat_pos = i; break;} // within [1, n_rat), since k_coll_eff_rat should encompass the whole [0,1] range + + if(rad_pos < n_rad) + { + if(rad_pos >= 1) + { + real_t p = (radius - k_coll_eff_rad[rad_pos-1]) / (k_coll_eff_rad[rad_pos] - k_coll_eff_rad[rad_pos - 1]); + real_t q = (ratio - k_coll_eff_rat[rat_pos-1]) / (k_coll_eff_rat[rat_pos] - k_coll_eff_rat[rat_pos - 1]); + efficiency = (1-p)*(1-q)*k_coll_eff[(rat_pos-1)*n_rad + rad_pos-1] + + p*(1-q)* k_coll_eff[(rat_pos-1)*n_rad + rad_pos ] + + q*(1-p)* k_coll_eff[rat_pos*n_rad + rad_pos-1] + + p*q* k_coll_eff[rat_pos*n_rad + rad_pos ]; + } + else + { + real_t q = (ratio - k_coll_eff_rat[rat_pos-1]) / (k_coll_eff_rat[rat_pos] - k_coll_eff_rat[rat_pos - 1]); + efficiency = (1-q)*k_coll_eff[(rat_pos-1) * n_rad] + q*k_coll_eff[rat_pos*n_rad]; + } + } + else + { + real_t q = (ratio - k_coll_eff_rat[rat_pos-1]) / (k_coll_eff_rat[rat_pos] - k_coll_eff_rat[rat_pos - 1]); + efficiency = (1-q)*k_coll_eff[rat_pos*n_rad-1] + q*k_coll_eff[(rat_pos+1)*n_rad-1]; + efficiency = efficiency > 1.? 1. : efficiency; + } + return efficiency; + } } } diff --git a/src/detail/kernel_utils.hpp b/src/detail/kernel_utils.hpp index 91555b622..7b0cd8e5f 100644 --- a/src/detail/kernel_utils.hpp +++ b/src/detail/kernel_utils.hpp @@ -20,12 +20,12 @@ namespace libcloudphxx //return index of kernel_params corresponding to two given indices from Jon's files template BOOST_GPU_ENABLED - thrust_size_t kernel_vector_index(const int &i, const int &j, const n_t &n_user_params = 0) + thrust_size_t kernel_vector_index(const int &i, const int &j) { if(i>=j) - return 0.5*i*(i+1) + j + n_user_params; + return 0.5*i*(i+1) + j; else - return 0.5*j*(j+1) + i + n_user_params; + return 0.5*j*(j+1) + i; } } } diff --git a/src/detail/kernels.hpp b/src/detail/kernels.hpp index 4994c746c..c0942b1c0 100644 --- a/src/detail/kernels.hpp +++ b/src/detail/kernels.hpp @@ -15,23 +15,65 @@ namespace libcloudphxx { // pointer to kernel parameters device vector thrust_device::pointer k_params; + + //ctor + BOOST_GPU_ENABLED + kernel_base(thrust_device::pointer k_params = thrust_device::pointer()) : + k_params(k_params) {} + + BOOST_GPU_ENABLED + virtual real_t calc(const tpl_calc_wrap &) const {return 0;} + }; + + + // helper for kernels with efficiencies + template + struct kernel_with_efficiencies + { + // pointer to kernel collision efficiencies device vector + thrust_device::pointer k_coll_eff; + + // pointer to kernel collision efficiencies radii device vector + thrust_device::pointer k_coll_eff_rad; + // number of radii for which efficiencies are defined + int n_rad; - // number of user-defined parameters - n_t n_user_params; + // pointer to kernel collision efficiencies radii ratio device vector + thrust_device::pointer k_coll_eff_rat; + // number of ratios for which efficiencies are defined + int n_rat; // largest radius for which efficiency is defined, 0 - n/a real_t r_max; - + //ctor BOOST_GPU_ENABLED - kernel_base(thrust_device::pointer k_params, n_t n_user_params = 0, real_t r_max = 0.) : - k_params(k_params), n_user_params(n_user_params), r_max(r_max) {} + kernel_with_efficiencies( + thrust_device::pointer k_coll_eff, + real_t r_max, + thrust_device::pointer k_coll_eff_rad = thrust_device::pointer(), + int n_rad = 0, + thrust_device::pointer k_coll_eff_rat = thrust_device::pointer(), + int n_rat = 0 + ) : + k_coll_eff(k_coll_eff), r_max(r_max), k_coll_eff_rad(k_coll_eff_rad), n_rad(n_rad), k_coll_eff_rat(k_coll_eff_rat), n_rat(n_rat) + { + // ratio has to be defined for the whole range [0,1] + if(n_rat > 0) + { + assert(k_coll_eff_rat[0] == 0.); + assert(k_coll_eff_rat[n_rat-1] == 1.); + } + } // thrust requires that a default ctor exists - kernel_base() = default; + kernel_with_efficiencies() = default; + //bilinear interpolation of collision efficiencies BOOST_GPU_ENABLED - virtual real_t calc(const tpl_calc_wrap &) const {return 0;} + real_t interpolated_efficiency(real_t, real_t) const; + BOOST_GPU_ENABLED + real_t interpolated_efficiency_radrat(real_t, real_t) const; }; @@ -41,7 +83,7 @@ namespace libcloudphxx { //ctor BOOST_GPU_ENABLED - kernel_golovin(thrust_device::pointer k_params) : kernel_base(k_params, 1) {} + kernel_golovin(thrust_device::pointer k_params) : kernel_base(k_params) {} // thrust requires that a default ctor exists kernel_golovin() = default; @@ -83,14 +125,9 @@ namespace libcloudphxx template struct kernel_geometric : kernel_base { - //ctor (default one) - BOOST_GPU_ENABLED - kernel_geometric(thrust_device::pointer k_params = thrust_device::pointer(), n_t n_user_params = 0, real_t r_max = 0.) : - kernel_base(k_params, n_user_params, r_max) {} - - //bilinear interpolation of collision efficiencies, required by dervied classes + //ctor BOOST_GPU_ENABLED - real_t interpolated_efficiency(real_t, real_t) const; + kernel_geometric(thrust_device::pointer k_params = thrust_device::pointer()) : kernel_base(k_params) {} BOOST_GPU_ENABLED virtual real_t calc(const tpl_calc_wrap &tpl_wrap) const @@ -129,7 +166,7 @@ namespace libcloudphxx { //ctor BOOST_GPU_ENABLED - kernel_geometric_with_multiplier(thrust_device::pointer k_params) : kernel_geometric(k_params, 1) {} + kernel_geometric_with_multiplier(thrust_device::pointer k_params) : kernel_geometric(k_params) {} // thrust requires that a default ctor exists kernel_geometric_with_multiplier() = default; @@ -176,11 +213,18 @@ namespace libcloudphxx }; template - struct kernel_geometric_with_efficiencies : kernel_geometric + struct kernel_geometric_with_efficiencies : kernel_geometric, kernel_with_efficiencies { //ctor BOOST_GPU_ENABLED - kernel_geometric_with_efficiencies(thrust_device::pointer k_params, real_t r_max) : kernel_geometric(k_params, 0, r_max) {} + kernel_geometric_with_efficiencies( + thrust_device::pointer k_coll_eff, + real_t r_max, + thrust_device::pointer k_coll_eff_rad = thrust_device::pointer(), + int n_rad = 0, + thrust_device::pointer k_coll_eff_rat = thrust_device::pointer(), + int n_rat = 0 + ) : kernel_with_efficiencies(k_coll_eff, r_max, k_coll_eff_rad, n_rad, k_coll_eff_rat, n_rat) {} // thrust requires that a default ctor exists kernel_geometric_with_efficiencies() = default; @@ -194,7 +238,7 @@ namespace libcloudphxx using std::sqrt; #endif - return kernel_geometric::interpolated_efficiency( + return kernel_with_efficiencies::interpolated_efficiency_radrat( sqrt( thrust::get(tpl_wrap.get_rw())), sqrt( thrust::get(tpl_wrap.get_rw())) ) * kernel_geometric::calc(tpl_wrap); @@ -207,13 +251,17 @@ namespace libcloudphxx // TODO: get these values from flow characteristic (simulation-time during hskpng) // cf. Benmoshe et al, JGR 2012 template - struct kernel_onishi : kernel_geometric + struct kernel_onishi : kernel_geometric, kernel_with_efficiencies { detail::wang_collision_enhancement_t wang_collision_enhancement; //ctor BOOST_GPU_ENABLED - kernel_onishi(thrust_device::pointer k_params, real_t r_max) : kernel_geometric(k_params, 1, r_max) {} + kernel_onishi( + thrust_device::pointer k_params, + thrust_device::pointer k_coll_eff, + real_t r_max + ) : kernel_geometric(k_params), kernel_with_efficiencies(k_coll_eff, r_max) {} // thrust requires that a default ctor exists kernel_onishi() = default; @@ -238,7 +286,7 @@ namespace libcloudphxx real_t geometric = kernel_geometric::calc(tpl_wrap); real_t res = - kernel_geometric::interpolated_efficiency(rwa, rwb) * // stagnant air collision efficiency + kernel_with_efficiencies::interpolated_efficiency(rwa, rwb) * // stagnant air collision efficiency wang_collision_enhancement(rwa, rwb, kernel_base::k_params[0]) * // Wang turbulent collision efficiency enhancement, k_params[0] - epsilon sqrt( geometric * geometric + // geometric kernel diff --git a/src/detail/synth_turb_periodic_box.hpp b/src/detail/synth_turb_periodic_box.hpp new file mode 100644 index 000000000..32bc17c50 --- /dev/null +++ b/src/detail/synth_turb_periodic_box.hpp @@ -0,0 +1,373 @@ +#pragma once +#include +#include "urand.hpp" +#include "thrust.hpp" +#include "../../include/libcloudph++/lgrngn/backend.hpp" + +namespace libcloudphxx +{ + namespace synth_turb_periodic_box + { + // TODO: a co z vectors.size==0? + inline int mode_degeneracy_generator(const int &n, std::vector> &vectors) // returns degeneracy, fills vectors with half of the degeneracy (opposite vectors are not added) + { + int degeneracy = 0; + vectors.clear(); + const double max = sqrt(n); + for(int nx=-max; nx<=max; ++nx) + for(int ny=-max; ny<=max; ++ny) + for(int nz=-max; nz<=max; ++nz) + { + if(nx*nx + ny*ny + nz*nz == n) + { + // std::cout << "(" << nx << "," << ny << "," << nz << ")" << std::endl; + ++degeneracy; + if(std::find(vectors.begin(), vectors.end(), std::array{-nx,-ny,-nz}) == vectors.end()) // add only if the opposite vector has not been added yet + vectors.push_back({nx,ny,nz}); + } + } + // std::cout << "degeneracy: " << degeneracy << std::endl; + return degeneracy; + } + + template + class mode + { + private: + real_t std_dev, // sqrt(variance) + wn; // frequency + + unsigned int Nwaves; // actual number of wave vectors in thath mode + // wavevectors in the form k = (nx,ny,nz) * 2 PI / L, where n is integer to get periodic flow + + // pointers to arrays of size [3][Nwaves] stored in device memory + thrust_device::pointer enm, knm, Anm, Bnm; + + public: + BOOST_GPU_ENABLED + void update_time(const real_t &dt, const real_t &rand_normal) + { + const real_t relax = exp(-wn * dt); + const real_t *p_rand_normal(&rand_normal); // we rely on iterators passing pointers do data, without copies! + + for(int m=0; m enm, + const thrust_device::pointer Anm, + const thrust_device::pointer Bnm, + const thrust_device::pointer knm + ): + Nwaves(Nwaves), + std_dev(std_dev), + wn(wn), + enm(enm), + Anm(Anm), + Bnm(Bnm), + knm(knm) + {} + }; + + template + struct mode_update_time + { + const real_t dt; + + mode_update_time(const real_t &dt): dt(dt) {} + + template + BOOST_GPU_ENABLED + void operator()(const tpl_t &tpl) + { + thrust::get<0>(tpl).update_time(dt, thrust::get<1>(tpl)); + } + }; + + template + struct mode_add_vel + { + thrust_device::pointer> modep; + + mode_add_vel(thrust_device::pointer> modep): modep(modep) {} + + template + BOOST_GPU_ENABLED + void operator()(const tpl_t &tpl_pos_vel) //const mode *mp, thrust_device::pointer rand_normal) + { + thrust::raw_pointer_cast(modep)->add_vel(thrust::get<0>(tpl_pos_vel), thrust::get<1>(tpl_pos_vel), thrust::get<2>(tpl_pos_vel), thrust::get<3>(tpl_pos_vel), thrust::get<4>(tpl_pos_vel), thrust::get<5>(tpl_pos_vel)); + } + }; + + template + class synth_turb + { + private: + const int Nmodes, Nwaves_max; + thrust_device::vector> modes; + thrust_device::vector &tmp_device_real_part; + lgrngn::detail::rng rng; // separate rng, because we want the same sequence of random numbers on all distmem GPUS/nodes + + std::vector> enm, // unit vectors along wavevectors + Anm, Bnm, // coefficients of the Fourier transform + knm; + + public: + + void update_time(const real_t &dt) + { + // get random normally distributed vars + auto &rand_nrml(tmp_device_real_part); + auto total_number_of_modes = modes.size(); + assert(total_number_of_modes * Nwaves_max * 6 <= rand_nrml.size()); + rng.generate_normal_n(rand_nrml, total_number_of_modes * Nwaves_max * 6); // each mode needs nwaves*6 random numbers; TODO: use actual nwaves not Nwaves_max + + namespace arg = thrust::placeholders; + + auto zip_mode_rand = + thrust::make_zip_iterator(thrust::make_tuple( + modes.begin(), + thrust::make_permutation_iterator( + rand_nrml.begin(), + thrust::make_transform_iterator( + thrust::make_counting_iterator(0), + arg::_1 * Nwaves_max * 6 + ) + ) + )); + + thrust::for_each( + zip_mode_rand, + zip_mode_rand + modes.size(), + mode_update_time(dt) + ); + + for(int i=0; i + void calc_vel(const tpl_t &zip_pos_vel, const thrust_size_t n_part) + { + for(int i=0; i(modes.data() + i) + ); + } + } + + synth_turb( + const real_t &eps, // TKE dissipation rate [m2/s3], for now it has to be a constant value + const int &_Nmodes, + const int &_Nwaves_max, + const real_t &Lmax, // maximum length scale [m] + const real_t &Lmin, // Kolmogorov length scale [m] + const int &seed, // rng seed + thrust_device::vector &_tmp_device_real_part // temp space for real_t on the device + ): + Nmodes(_Nmodes), + Nwaves_max(_Nwaves_max), + rng(seed), + tmp_device_real_part(_tmp_device_real_part) + { + if(Nwaves_max % 2 != 0) throw std::runtime_error("Nwaves_max needs to be even, because we need to include opposites of all wavevectors."); + + Anm.resize(Nmodes); + Bnm.resize(Nmodes); + knm.resize(Nmodes); + enm.resize(Nmodes); + + const real_t lambda = 1; // unsteadiness parameter, within [0,1]; see Sidin et al. 2009 + + std::vector k(Nmodes), // norms of wave vectors + dk(Nmodes), // differences between norms of subsequent wave vectors + E(Nmodes), // kinetic energy in a mode + std_dev(Nmodes), // sqrt(variances) + wn(Nmodes); // frequencies + + std::vector nn(Nmodes), // nn = nx^2 + ny^2 + nz^2 + Nwaves(Nmodes); // actual number of wave vectors in thath mode + + + // --- linear distribution of nn (nn = 1, 2, 3, 4, ..., Nmodes) --- + /* + { + for(int n=0; n Lmax / Lmin) + throw std::runtime_error("too many modes: Nmodes is greater than Lmax / Lmin"); + + nn[0]=1; + + real_t alpha = pow(Lmax / Lmin, 1. / (Nmodes - 1)); + while(1) + { + for(int n=1; n Lmax / Lmin) break; + } + if(nn[Nmodes-1] <= Lmax / Lmin && nn[Nmodes-1]!=0) + break; + else + alpha /= 1.001; + } + assert(nn[Nmodes-1] > 0); + } + + for(int n=0; n> vectors; + for(int n=0; n Nwaves_max) // random shuffle, because not all possible degeneracies will be used + { + std::default_random_engine local_rand_eng(std::random_device{}()); + std::shuffle(std::begin(vectors), std::end(vectors), local_rand_eng); + Nwaves[n] = Nwaves_max; + } + // if(Nwaves_max != 6) throw std::runtime_error("nwaves max needs to be 6 for this test"); + // vectors = {{1,0,0},{0,1,0},{0,0,1}}; + + for(int m=0; m G_d(0, std_dev[n]); + +//std::cerr << "ST ctor mode " << n << std::endl; +//std::cerr << "ST ctor nn " << nn[n] << std::endl; +//std::cerr << "ST ctor Nwaves " << Nwaves[n] << std::endl; + + for(int m=0; m( + std_dev[n], + wn[n], + Nwaves[n], + enm[n].data(), + Anm[n].data(), + Bnm[n].data(), + knm[n].data() + )); + } + } + }; + + // TODO: 2D, 1D + }; +}; + + + diff --git a/src/impl/particles_impl.ipp b/src/impl/particles_impl.ipp index b07d3332c..afe470bbb 100644 --- a/src/impl/particles_impl.ipp +++ b/src/impl/particles_impl.ipp @@ -64,11 +64,17 @@ namespace libcloudphxx thrust_device::vector > k_geometric_with_multiplier; thrust_device::vector > k_onishi; - // device container for kernel parameters, could come from opts_init or a file depending on the kernel - thrust_device::vector kernel_parameters; + // synthetic turbulence - TODO (only when used) + synth_turb_periodic_box::synth_turb ST; - //number of kernel parameters defined by user in opts_init - const n_t n_user_params; + // device container for kernel parameters, comes from opts_init + thrust_device::vector kernel_parameters; + // device container for kernel collision efficiencies + thrust_device::vector kernel_coll_eff; + // device container for kernel collision efficiencies radii matrix + thrust_device::vector kernel_coll_eff_rad; + // device container for kernel collision efficiencies ratio matrix + thrust_device::vector kernel_coll_eff_rat; // particle attributes thrust_device::vector @@ -307,7 +313,6 @@ namespace libcloudphxx n_part(0), sorted(false), u01(tmp_device_real_part), - n_user_params(_opts_init.kernel_parameters.size()), un(tmp_device_n_part), rng(_opts_init.rng_seed), src_stp_ctr(0), @@ -338,7 +343,8 @@ namespace libcloudphxx adve_scheme(_opts_init.adve_scheme), allow_sstp_cond(_opts_init.sstp_cond > 1 || _opts_init.variable_dt_switch), allow_sstp_chem(_opts_init.sstp_chem > 1 || _opts_init.variable_dt_switch), - pure_const_multi (((_opts_init.sd_conc) == 0) && (_opts_init.sd_const_multi > 0 || _opts_init.dry_sizes.size() > 0)) // coal prob can be greater than one only in sd_conc simulations + pure_const_multi ((_opts_init.sd_conc == 0) && (_opts_init.sd_const_multi > 0 || _opts_init.dry_sizes.size() > 0)), // coal prob can be greater than one only in sd_conc simulations + ST(_opts_init.ST_eps, _opts_init.ST_Nmodes, _opts_init.ST_Nwaves_max, _opts_init.ST_Lmax, _opts_init.ST_Lmin, _opts_init.rng_seed, tmp_device_real_part) { // set 0 dev_count to mark that its not a multi_CUDA spawn @@ -402,7 +408,7 @@ namespace libcloudphxx // sstp_tmp_p needs to be added if a constant pressure profile is used, but this is only known after init - see particles_init } - if(opts_init.turb_adve_switch) + if(opts_init.sgs_adve != sgs_adve_t::undefined) { if(opts_init.nx != 0) distmem_real_vctrs.insert(&up); if(opts_init.ny != 0) distmem_real_vctrs.insert(&vp); @@ -496,11 +502,18 @@ namespace libcloudphxx void hskpng_vterm_all(); void hskpng_vterm_invalid(); void hskpng_tke(); - void hskpng_turb_vel(const real_t &dt, const bool only_vertical = false); + void hskpng_sgs_vel(const real_t &dt, const bool only_vertical = false); + void hskpng_sgs_vel_GA17(const real_t &dt, const bool only_vertical = false); + void hskpng_sgs_vel_ST_periodic(const real_t &dt, const bool only_vertical = false); void hskpng_turb_dot_ss(); void hskpng_remove_n0(); void hskpng_resize_npart(); + void remove_rng( + const real_t &min, const real_t &max, + const typename thrust_device::vector::iterator &vec_bgn + ); + void moms_all(); void moms_cmp( @@ -549,7 +562,7 @@ namespace libcloudphxx void adjust_timesteps(const real_t &dt); void adve(); - void turb_adve(const real_t &dt); + void sgs_adve(const real_t &dt); template void adve_calc(bool, thrust_size_t = 0); void sedi(const real_t &dt); diff --git a/src/impl/particles_impl_hskpng_resize.ipp b/src/impl/particles_impl_hskpng_resize.ipp index d9f494bb7..eb931c8ff 100644 --- a/src/impl/particles_impl_hskpng_resize.ipp +++ b/src/impl/particles_impl_hskpng_resize.ipp @@ -35,7 +35,7 @@ namespace libcloudphxx if (opts_init.ny != 0) y.resize(n_part); if (opts_init.nz != 0) z.resize(n_part); - if(opts_init.turb_adve_switch) + if(opts_init.sgs_adve != sgs_adve_t::undefined) { if (opts_init.nx != 0) up.resize(n_part, 0); if (opts_init.ny != 0) vp.resize(n_part, 0); diff --git a/src/impl/particles_impl_hskpng_sgs_vel.ipp b/src/impl/particles_impl_hskpng_sgs_vel.ipp new file mode 100644 index 000000000..9f4148c64 --- /dev/null +++ b/src/impl/particles_impl_hskpng_sgs_vel.ipp @@ -0,0 +1,29 @@ +// vim:filetype=cpp +/** @file + * @copyright University of Warsaw + * @section LICENSE + * GPLv3+ (see the COPYING file or http://www.gnu.org/licenses/) + */ + +namespace libcloudphxx +{ + namespace lgrngn + { + // calc the SGS turbulent velocity component + template + void particles_t::impl::hskpng_sgs_vel(const real_t &dt, const bool only_vertical) + { + switch(opts_init.sgs_adve) + { + case sgs_adve_t::GA17: + hskpng_sgs_vel_GA17(dt, only_vertical); + break; + case sgs_adve_t::ST_periodic: + hskpng_sgs_vel_ST_periodic(dt, only_vertical); + break; + default: + throw std::runtime_error("Unreckognized value of opts_init.sgs_adve."); + } + } + }; +}; diff --git a/src/impl/particles_impl_hskpng_turb_vel.ipp b/src/impl/particles_impl_hskpng_sgs_vel_GA17.ipp similarity index 86% rename from src/impl/particles_impl_hskpng_turb_vel.ipp rename to src/impl/particles_impl_hskpng_sgs_vel_GA17.ipp index e20221a9e..5e624157d 100644 --- a/src/impl/particles_impl_hskpng_turb_vel.ipp +++ b/src/impl/particles_impl_hskpng_sgs_vel_GA17.ipp @@ -14,7 +14,7 @@ namespace libcloudphxx namespace detail { template - struct common__turbulence__tau + struct common__GA17__turbulence__tau { BOOST_GPU_ENABLED real_t operator()(const real_t &tke, const real_t &lambda) @@ -27,17 +27,17 @@ namespace libcloudphxx }; template - struct common__turbulence__update_turb_vel + struct common__GA17__turbulence__update_sgs_vel { const quantity dt; - common__turbulence__update_turb_vel(const real_t &dt): + common__GA17__turbulence__update_sgs_vel(const real_t &dt): dt(dt * si::seconds){} template BOOST_GPU_ENABLED real_t operator()(tpl_t tpl) { - return common::GA17_turbulence::update_turb_vel( + return common::GA17_turbulence::update_sgs_vel( thrust::get<0>(tpl) * si::metres / si::seconds, thrust::get<1>(tpl) * si::seconds, dt, @@ -49,7 +49,7 @@ namespace libcloudphxx }; // calc the SGS turbulent velocity component template - void particles_t::impl::hskpng_turb_vel(const real_t &dt, const bool only_vertical) + void particles_t::impl::hskpng_sgs_vel_GA17(const real_t &dt, const bool only_vertical) { namespace arg = thrust::placeholders; @@ -64,7 +64,7 @@ namespace libcloudphxx ) ), tau.begin(), - detail::common__turbulence__tau() + detail::common__GA17__turbulence__tau() ); thrust_device::vector &r_normal(tmp_device_real_part); @@ -86,7 +86,7 @@ namespace libcloudphxx r_normal.begin() )) + n_part, vel_turbs_vctrs_a[i]->begin(), - detail::common__turbulence__update_turb_vel(dt) + detail::common__GA17__turbulence__update_sgs_vel(dt) ); } } diff --git a/src/impl/particles_impl_hskpng_sgs_vel_ST_periodic.ipp b/src/impl/particles_impl_hskpng_sgs_vel_ST_periodic.ipp new file mode 100644 index 000000000..223b72869 --- /dev/null +++ b/src/impl/particles_impl_hskpng_sgs_vel_ST_periodic.ipp @@ -0,0 +1,46 @@ +// vim:filetype=cpp +/** @file + * @copyright University of Warsaw + * @section LICENSE + * GPLv3+ (see the COPYING file or http://www.gnu.org/licenses/) + */ + +namespace libcloudphxx +{ + namespace lgrngn + { + // calc the SGS turbulent velocity component + template + void particles_t::impl::hskpng_sgs_vel_ST_periodic(const real_t &dt, const bool only_vertical) + { + if(only_vertical) throw std::runtime_error("ST_periodic only_vertical doesn't work yet."); + + namespace arg = thrust::placeholders; + + // progress time in the model + ST.update_time(dt); + +// zero-out SGS velocities + thrust::fill(up.begin(), up.end(), real_t(0)); + thrust::fill(vp.begin(), vp.end(), real_t(0)); + thrust::fill(wp.begin(), wp.end(), real_t(0)); + + // calc new SGS velocities + auto zip_pos_vel = + thrust::make_zip_iterator(thrust::make_tuple( + thrust::make_transform_iterator( + x.begin(), + arg::_1 + n_x_bfr * opts_init.dx + ), // position x taking into account multi_CUDA + y.begin(), + z.begin(), + up.begin(), + vp.begin(), + wp.begin() + )); + // TODO: take into account x0,y0,z0? + + ST.calc_vel(zip_pos_vel, n_part); + }; + }; +}; diff --git a/src/impl/particles_impl_init_kernel.ipp b/src/impl/particles_impl_init_kernel.ipp index 03c84c404..41b0878cc 100644 --- a/src/impl/particles_impl_init_kernel.ipp +++ b/src/impl/particles_impl_init_kernel.ipp @@ -12,12 +12,12 @@ namespace libcloudphxx { case(kernel_t::golovin): // init device kernel parameters vector - if(n_user_params != 1) + if(opts_init.kernel_parameters.size() != 1) { throw std::runtime_error("libcloudph++: Golovin kernel accepts exactly one parameter."); } // init device kernel parameters vector - kernel_parameters.resize(n_user_params); + kernel_parameters.resize(opts_init.kernel_parameters.size()); thrust::copy(opts_init.kernel_parameters.begin(), opts_init.kernel_parameters.end(), kernel_parameters.begin()); // init kernel @@ -27,11 +27,11 @@ namespace libcloudphxx case(kernel_t::geometric): // init kernel parameters vector - if(n_user_params > 1) + if(opts_init.kernel_parameters.size() > 1) { throw std::runtime_error("libcloudph++: Geometric kernel accepts up to one parameter."); } - else if(n_user_params == 1) + else if(opts_init.kernel_parameters.size() == 1) { kernel_parameters.resize(1); thrust::copy(opts_init.kernel_parameters.begin(), opts_init.kernel_parameters.end(), kernel_parameters.begin()); @@ -50,7 +50,7 @@ namespace libcloudphxx case(kernel_t::Long): // init kernel parameters vector - if(n_user_params > 0) + if(opts_init.kernel_parameters.size() > 0) { throw std::runtime_error("libcloudph++: Long kernel doesn't take parameters."); } @@ -61,128 +61,164 @@ namespace libcloudphxx //Hall kernel case(kernel_t::hall): - if(n_user_params != 0) + if(opts_init.kernel_parameters.size() != 0) { throw std::runtime_error("libcloudph++: Hall kernel doesn't accept parameters."); } //read in kernel efficiencies to a temporary container detail::hall_efficiencies (tmp_kernel_eff); - //reserve device memory for kernel parameters vector - kernel_parameters.resize(opts_init.kernel_parameters.size() + tmp_kernel_eff.size()); + //reserve device memory for kernel efficiencies + kernel_coll_eff.resize(tmp_kernel_eff.size()); + + //copy efficiencies to device vector + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff.begin()); - //append efficiencies to device vector - thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_parameters.begin()+n_user_params); + // same for collision efficiency radii definitions + detail::hall_radii (tmp_kernel_eff); + kernel_coll_eff_rad.resize(tmp_kernel_eff.size()); + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff_rad.begin()); + // and for collision efficiency ratios definitions + detail::hall_ratios (tmp_kernel_eff); + kernel_coll_eff_rat.resize(tmp_kernel_eff.size()); + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff_rat.begin()); // init kernel - k_geometric_with_efficiencies.resize(1, kernel_geometric_with_efficiencies (kernel_parameters.data(), detail::hall_r_max())); + k_geometric_with_efficiencies.resize(1, + kernel_geometric_with_efficiencies ( + kernel_coll_eff.data(), + detail::hall_r_max(), + kernel_coll_eff_rad.data(), + detail::hall_n_rad, + kernel_coll_eff_rat.data(), + detail::hall_n_rat + ) + ); p_kernel = (&(k_geometric_with_efficiencies[0])).get(); break; //Hall kernel with Davis and Jones (no van der Waals) efficiencies for small molecules (like Shima et al. 2009) case(kernel_t::hall_davis_no_waals): - if(n_user_params != 0) + if(opts_init.kernel_parameters.size() != 0) { throw std::runtime_error("libcloudph++: Hall + Davis kernel doesn't accept parameters."); } //read in kernel efficiencies to a temporary container detail::hall_davis_no_waals_efficiencies (tmp_kernel_eff); - //reserve device memory for kernel parameters vector - kernel_parameters.resize(opts_init.kernel_parameters.size() + tmp_kernel_eff.size()); + //reserve device memory for kernel efficiencies + kernel_coll_eff.resize(tmp_kernel_eff.size()); + + //copy efficiencies to device vector + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff.begin()); - //append efficiencies to device vector - thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_parameters.begin()+n_user_params); + // same for collision efficiency radii definitions + detail::hall_davis_no_waals_radii (tmp_kernel_eff); + kernel_coll_eff_rad.resize(tmp_kernel_eff.size()); + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff_rad.begin()); + // and for collision efficiency ratios definitions + detail::hall_davis_no_waals_ratios (tmp_kernel_eff); + kernel_coll_eff_rat.resize(tmp_kernel_eff.size()); + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff_rat.begin()); // init kernel - k_geometric_with_efficiencies.resize(1, kernel_geometric_with_efficiencies (kernel_parameters.data(), detail::hall_davis_no_waals_r_max())); + k_geometric_with_efficiencies.resize(1, + kernel_geometric_with_efficiencies ( + kernel_coll_eff.data(), + detail::hall_davis_no_waals_r_max(), + kernel_coll_eff_rad.data(), + detail::hall_davis_no_waals_n_rad, + kernel_coll_eff_rat.data(), + detail::hall_davis_no_waals_n_rat + ) + ); p_kernel = (&(k_geometric_with_efficiencies[0])).get(); break; //Vohl kernel with Davis and Jones (no van der Waals) efficiencies for small molecules case(kernel_t::vohl_davis_no_waals): - if(n_user_params != 0) + if(opts_init.kernel_parameters.size() != 0) { throw std::runtime_error("libcloudph++: Vohl + Davis kernel doesn't accept parameters."); } //read in kernel efficiencies to a temporary container detail::vohl_davis_no_waals_efficiencies (tmp_kernel_eff); - //reserve device memory for kernel parameters vector - kernel_parameters.resize(opts_init.kernel_parameters.size() + tmp_kernel_eff.size()); + //reserve device memory for kernel efficiencies + kernel_coll_eff.resize(tmp_kernel_eff.size()); - //append efficiencies to device vector - thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_parameters.begin()+n_user_params); + //copy efficiencies to device vector + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff.begin()); // init kernel - k_geometric_with_efficiencies.resize(1, kernel_geometric_with_efficiencies (kernel_parameters.data(), detail::vohl_davis_no_waals_r_max())); + k_geometric_with_efficiencies.resize(1, kernel_geometric_with_efficiencies (kernel_coll_eff.data(), detail::vohl_davis_no_waals_r_max())); p_kernel = (&(k_geometric_with_efficiencies[0])).get(); break; //Hall efficiencies plus turbulent efficiencies from Pinsky (2008) for stratocumuli (r<=21 um) case(kernel_t::hall_pinsky_stratocumulus): - if(n_user_params != 0) + if(opts_init.kernel_parameters.size() != 0) { throw std::runtime_error("libcloudph++: Hall + Pinsky (stratocumulus) kernel doesn't accept parameters."); } //read in kernel efficiencies to a temporary container detail::hall_pinsky_stratocumulus_efficiencies (tmp_kernel_eff); - //reserve device memory for kernel parameters vector - kernel_parameters.resize(opts_init.kernel_parameters.size() + tmp_kernel_eff.size()); + //reserve device memory for kernel efficiencies + kernel_coll_eff.resize(tmp_kernel_eff.size()); - //append efficiencies to device vector - thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_parameters.begin()+n_user_params); + //copy efficiencies to device vector + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff.begin()); // init kernel - k_geometric_with_efficiencies.resize(1, kernel_geometric_with_efficiencies (kernel_parameters.data(), detail::hall_pinsky_stratocumulus_r_max())); + k_geometric_with_efficiencies.resize(1, kernel_geometric_with_efficiencies (kernel_coll_eff.data(), detail::hall_pinsky_stratocumulus_r_max())); p_kernel = (&(k_geometric_with_efficiencies[0])).get(); break; //Hall kernel with Pinsky gravitational (stagnant) efficiencies for small molecules at p=1000mb case(kernel_t::hall_pinsky_1000mb_grav): - if(n_user_params != 0) + if(opts_init.kernel_parameters.size() != 0) { throw std::runtime_error("libcloudph++: Hall + Pinsky (gravitational 1000mb) kernel doesn't accept parameters."); } //read in kernel efficiencies to a temporary container detail::hall_pinsky_1000mb_grav_efficiencies (tmp_kernel_eff); - //reserve device memory for kernel parameters vector - kernel_parameters.resize(opts_init.kernel_parameters.size() + tmp_kernel_eff.size()); + //reserve device memory for kernel efficiencies + kernel_coll_eff.resize(tmp_kernel_eff.size()); - //append efficiencies to device vector - thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_parameters.begin()+n_user_params); + //copy efficiencies to device vector + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff.begin()); // init kernel - k_geometric_with_efficiencies.resize(1, kernel_geometric_with_efficiencies (kernel_parameters.data(), detail::hall_pinsky_1000mb_grav_r_max())); + k_geometric_with_efficiencies.resize(1, kernel_geometric_with_efficiencies (kernel_coll_eff.data(), detail::hall_pinsky_1000mb_grav_r_max())); p_kernel = (&(k_geometric_with_efficiencies[0])).get(); break; //Hall efficiencies plus turbulent efficiencies from Pinsky (2008) for cumulonimbus (r<=21 um) case(kernel_t::hall_pinsky_cumulonimbus): - if(n_user_params != 0) + if(opts_init.kernel_parameters.size() != 0) { throw std::runtime_error("libcloudph++: Hall + Pinsky (cumulonimbus) kernel doesn't accept parameters."); } //read in kernel efficiencies to a temporary container detail::hall_pinsky_cumulonimbus_efficiencies (tmp_kernel_eff); - //reserve device memory for kernel parameters vector - kernel_parameters.resize(opts_init.kernel_parameters.size() + tmp_kernel_eff.size()); + //reserve device memory for kernel efficiencies + kernel_coll_eff.resize(tmp_kernel_eff.size()); - //append efficiencies to device vector - thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_parameters.begin()+n_user_params); + //copy efficiencies to device vector + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff.begin()); // init kernel - k_geometric_with_efficiencies.resize(1, kernel_geometric_with_efficiencies (kernel_parameters.data(), detail::hall_pinsky_cumulonimbus_r_max())); + k_geometric_with_efficiencies.resize(1, kernel_geometric_with_efficiencies (kernel_coll_eff.data(), detail::hall_pinsky_cumulonimbus_r_max())); p_kernel = (&(k_geometric_with_efficiencies[0])).get(); break; //Onishi turbulent kernel (Onishi 2015 JAS) with Hall, Davis and Jones (no van der Waals) efficiencies case(kernel_t::onishi_hall_davis_no_waals): - if(n_user_params != 1) + if(opts_init.kernel_parameters.size() != 2) { throw std::runtime_error("libcloudph++: Please supply one kernel parameter: Taylor microscale Reynolds number."); } @@ -191,23 +227,26 @@ namespace libcloudphxx //read in kernel efficiencies to a temporary container detail::hall_davis_no_waals_efficiencies (tmp_kernel_eff); + //reserve device memory for kernel efficiencies + kernel_coll_eff.resize(tmp_kernel_eff.size()); + + //copy efficiencies to device vector + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff.begin()); + //reserve device memory for kernel parameters vector kernel_parameters.resize(opts_init.kernel_parameters.size() + tmp_kernel_eff.size()); //copy user-defined parameters to device memory thrust::copy(opts_init.kernel_parameters.begin(), opts_init.kernel_parameters.end(), kernel_parameters.begin()); - //append efficiencies to device vector - thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_parameters.begin()+n_user_params); - // init kernel - k_onishi.resize(1, kernel_onishi (kernel_parameters.data(), detail::hall_davis_no_waals_r_max())); + k_onishi.resize(1, kernel_onishi (kernel_parameters.data(), kernel_coll_eff.data(), detail::hall_davis_no_waals_r_max())); p_kernel = (&(k_onishi[0])).get(); break; //Onishi turbulent kernel (Onishi 2015 JAS) with Hall efficiencies case(kernel_t::onishi_hall): - if(n_user_params != 1) + if(opts_init.kernel_parameters.size() != 2) { throw std::runtime_error("libcloudph++: Please supply one kernel parameter: Taylor microscale Reynolds number."); } @@ -216,17 +255,20 @@ namespace libcloudphxx //read in kernel efficiencies to a temporary container detail::hall_efficiencies (tmp_kernel_eff); + //reserve device memory for kernel efficiencies + kernel_coll_eff.resize(tmp_kernel_eff.size()); + + //copy efficiencies to device vector + thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_coll_eff.begin()); + //reserve device memory for kernel parameters vector - kernel_parameters.resize(opts_init.kernel_parameters.size() + tmp_kernel_eff.size()); + kernel_parameters.resize(opts_init.kernel_parameters.size()); //copy user-defined parameters to device memory thrust::copy(opts_init.kernel_parameters.begin(), opts_init.kernel_parameters.end(), kernel_parameters.begin()); - //append efficiencies to device vector - thrust::copy(tmp_kernel_eff.begin(), tmp_kernel_eff.end(), kernel_parameters.begin()+n_user_params); - // init kernel - k_onishi.resize(1, kernel_onishi (kernel_parameters.data(), detail::hall_r_max())); + k_onishi.resize(1, kernel_onishi (kernel_parameters.data(), kernel_coll_eff.data(), detail::hall_r_max())); p_kernel = (&(k_onishi[0])).get(); break; diff --git a/src/impl/particles_impl_init_sanity_check.ipp b/src/impl/particles_impl_init_sanity_check.ipp index 6f5877712..defd8f80d 100644 --- a/src/impl/particles_impl_init_sanity_check.ipp +++ b/src/impl/particles_impl_init_sanity_check.ipp @@ -84,6 +84,12 @@ namespace libcloudphxx if(opts_init.sd_const_multi > 0 && opts_init.src_type!=src_t::off) throw std::runtime_error("libcloudph++: aerosol source and constant multiplicity option are not compatible"); // NOTE: why not? + if(opts_init.init_pair_separation >= 0 && (opts_init.sd_conc == 0 || opts_init.sd_conc % 2 == 1)) + throw std::runtime_error("init_pair_separation only works with positive, even sd_conc"); + + if(opts_init.init_pair_separation >= 0 && opts_init.ny==0) + throw std::runtime_error("init_pair_separation only works in 3D"); + if (n_dims > 0) { if (!(opts_init.x0 >= 0 && opts_init.x0 < m1(opts_init.nx) * opts_init.dx)) @@ -115,16 +121,24 @@ namespace libcloudphxx throw std::runtime_error("libcloudph++: opts_init.sedi_switch can be True only if n_dims > 1"); if (opts_init.subs_switch && opts_init.nz == 0) throw std::runtime_error("libcloudph++: opts_init.subs_switch can be True only if n_dims > 1"); - if (opts_init.turb_adve_switch && opts_init.nz == 0) - throw std::runtime_error("libcloudph++: opts_init.turb_adve_switch can be True only if n_dims > 1"); + if (opts_init.sgs_adve != sgs_adve_t::undefined && opts_init.nz == 0) + throw std::runtime_error("libcloudph++: opts_init.sgs_adve can be defined only if n_dims > 1"); if (opts_init.turb_cond_switch && opts_init.nz == 0) throw std::runtime_error("libcloudph++: opts_init.turb_cond_switch can be True only if n_dims > 1"); if (opts_init.subs_switch && opts_init.nz != w_LS.size()) throw std::runtime_error("libcloudph++: opts_init.subs_switch == True, but subsidence velocity profile size != nz"); - if ((opts_init.turb_adve_switch || opts_init.turb_cond_switch) && opts_init.nz != SGS_mix_len.size()) - throw std::runtime_error("libcloudph++: at least one of opts_init.turb_adve_switch, opts_init.turb_cond_switch is true, but SGS mixing length profile size != nz"); + if (opts_init.sgs_adve == sgs_adve_t::GA17 && opts_init.nz != SGS_mix_len.size()) + throw std::runtime_error("libcloudph++: opts_init.sgs_adve is set to GA17, but SGS mixing length profile size != nz"); if(opts_init.SGS_mix_len.size() > 0 && *std::min(opts_init.SGS_mix_len.begin(), opts_init.SGS_mix_len.end()) <= 0) throw std::runtime_error("libcloudph++: SGS_mix_len <= 0"); + if (opts_init.sgs_adve == sgs_adve_t::ST_periodic && opts_init.ny == 0) + throw std::runtime_error("libcloudph++: opts_init.sgs_adve==ST_periodic works only in 3 dims"); + if (opts_init.sgs_adve == sgs_adve_t::ST_periodic && opts_init.ST_eps <= 0) + throw std::runtime_error("libcloudph++: opts_init.sgs_adve==ST_periodic but opts_init.ST_eps <= 0"); +#if defined(USE_MPI) + if (opts_init.sgs_adve == sgs_adve_t::ST_periodic) + throw std::runtime_error("libcloudph++: opts_init.sgs_adve==ST_periodic does not work with MPI"); +#endif #if defined(USE_MPI) if(opts_init.rlx_switch) std::cerr << "libcloudph++ WARNING: relaxation is not fully supported in MPI runs. Mean calculation and addition of SD will be done locally on each node." << std::endl; @@ -144,4 +158,3 @@ namespace libcloudphxx } }; }; - diff --git a/src/impl/particles_impl_init_sync.ipp b/src/impl/particles_impl_init_sync.ipp index 616792eab..ae5d67ecc 100644 --- a/src/impl/particles_impl_init_sync.ipp +++ b/src/impl/particles_impl_init_sync.ipp @@ -20,7 +20,7 @@ namespace libcloudphxx if(opts_init.chem_switch) for (int i = 0; i < chem_gas_n; ++i) ambient_chem[(chem_species_t)i].resize(n_cell); - if(opts_init.turb_cond_switch || opts_init.turb_adve_switch || opts_init.turb_coal_switch) + if(opts_init.turb_cond_switch || opts_init.sgs_adve!=sgs_adve_t::undefined || opts_init.turb_coal_switch) diss_rate.resize(n_cell); // memory allocation for vector fields (Arakawa-C grid) diff --git a/src/impl/particles_impl_init_xyz.ipp b/src/impl/particles_impl_init_xyz.ipp index 23978d31e..700fc9b7d 100644 --- a/src/impl/particles_impl_init_xyz.ipp +++ b/src/impl/particles_impl_init_xyz.ipp @@ -33,6 +33,62 @@ namespace libcloudphxx return u01 * min(p1, (ii+1) * dp) + (1. - u01) * max(p0, ii * dp); } }; + + // returns cos(2*PI*arg) + template + struct cos2Pi : thrust::unary_function + { + BOOST_GPU_ENABLED + real_t operator()(const real_t &arg) + { +#if !defined(__NVCC__) + using std::cos; +#endif + + return cos(2*arg* +#if !defined(__NVCC__) + pi() +#else + CUDART_PI +#endif + ); + } + }; + + // returns sin(2*PI*arg) + template + struct sin2Pi : thrust::unary_function + { + BOOST_GPU_ENABLED + real_t operator()(const real_t &arg) + { +#if !defined(__NVCC__) + using std::sin; +#endif + + return sin(2*arg* +#if !defined(__NVCC__) + pi() +#else + CUDART_PI +#endif + ); + } + }; + + // returns arg_1 * sqrt(1 - arg_2^2) + template + struct mul_by_sqrt_1_min_square + { + BOOST_GPU_ENABLED + real_t operator()(const real_t &arg1, const real_t &arg2) + { +#if !defined(__NVCC__) + using std::sqrt; +#endif + return arg1 * sqrt(real_t(1) - arg2 * arg2); + } + }; }; // reused in source @@ -68,6 +124,82 @@ namespace libcloudphxx ); } } + + // handle the initial pair separation option + // position of every second droplet seprated randomly by init_pair_separation distance [m] from the previous one + // works only in 3D + // NOTE: the second droplet of a pair can end up in a different cell! + if(opts_init.init_pair_separation >= 0) + { + // random unit vector (e0,e1,e2) + // h [-1:1] + // th [0:2*Pi] + // e0 = sqrt(1. - h*h) * cos(th); + // e1 = sqrt(1. - h*h) * sin(th); + // e2 = h; + + thrust_device::vector e0(tmp_device_real_part1); + thrust_device::vector e1(n_part_to_init); // TODO: use tmp_device_real_part2 (first ensure it is resized if init_pair_separation==True) + thrust_device::vector e2(tmp_device_real_part); // aka u01 + + // fill u01 with random numbers [0,1] (angle th) + rand_u01(n_part_to_init); + + namespace arg = thrust::placeholders; + + thrust::transform( + u01.begin(), + u01.begin() + n_part_to_init, + e0.begin(), + detail::cos2Pi() + ); + + thrust::transform( + u01.begin(), + u01.begin() + n_part_to_init, + e1.begin(), + detail::sin2Pi() + ); + + // fill e2 with random numbers [-1,1] + rand_u01(n_part_to_init); + thrust::transform( + u01.begin(), + u01.begin() + n_part_to_init, + e2.begin(), + real_t(2) * arg::_1 - real_t(1) + ); + + // multiply e0 and e1 by sqrt(1 - e2*e2) + thrust_device::vector *e[3] = {&e0, &e1, &e2}; + for(int i=0; i<2; ++i) + { + thrust::transform( + e[i]->begin(), + e[i]->begin() + n_part_to_init, + e2.begin(), + e[i]->begin(), // in place + detail::mul_by_sqrt_1_min_square() + ); + } + + // set position of every second to pos_first + e * pair_separation + for(int i=0; i<3; ++i) + { + thrust::transform_if( + v[i]->begin(), // arg 1 - position + v[i]->begin() + n_part_to_init - 1, + e[i]->begin(), // arg 2 - unit vector + thrust::make_counting_iterator(0), // stencil + v[i]->begin() + 1, // output + arg::_1 + arg::_2 * opts_init.init_pair_separation, // operation + arg::_1 % thrust_size_t(2) == thrust_size_t(0) // predicate + ); + } + + // handle potential out-of-bounds droplets + bcnd(); + } } }; }; diff --git a/src/impl/particles_impl_remove.ipp b/src/impl/particles_impl_remove.ipp new file mode 100644 index 000000000..0f9c414a7 --- /dev/null +++ b/src/impl/particles_impl_remove.ipp @@ -0,0 +1,31 @@ +// vim:filetype=cpp +/** @file + * @copyright University of Warsaw + * @section LICENSE + * GPLv3+ (see the COPYING file or http://www.gnu.org/licenses/) + */ + +#include + +namespace libcloudphxx +{ + namespace lgrngn + { + template + void particles_t::impl::remove_rng( + const real_t &min, const real_t &max, + const typename thrust_device::vector::iterator &vec_bgn + ) + { + namespace arg = thrust::placeholders; + + // zero-out multiplicities to mark for removal + thrust::transform_if( + vec_bgn, vec_bgn + n_part, // input + n.begin(), // output + detail::flag(), // operation (zero-out) + arg::_1 > min && arg::_1 <= max // condition + ); + } + }; +}; diff --git a/src/impl/particles_impl_reserve_hskpng_npart.ipp b/src/impl/particles_impl_reserve_hskpng_npart.ipp index 063969e7f..a251602a0 100644 --- a/src/impl/particles_impl_reserve_hskpng_npart.ipp +++ b/src/impl/particles_impl_reserve_hskpng_npart.ipp @@ -22,7 +22,7 @@ namespace libcloudphxx if (opts_init.ny != 0) y.reserve(opts_init.n_sd_max); if (opts_init.nz != 0) z.reserve(opts_init.n_sd_max); - if(opts_init.turb_adve_switch) + if(opts_init.sgs_adve != sgs_adve_t::undefined) { if (opts_init.nx != 0) up.reserve(opts_init.n_sd_max); if (opts_init.ny != 0) vp.reserve(opts_init.n_sd_max); diff --git a/src/impl/particles_impl_turb_adve.ipp b/src/impl/particles_impl_sgs_adve.ipp similarity index 93% rename from src/impl/particles_impl_turb_adve.ipp rename to src/impl/particles_impl_sgs_adve.ipp index d95030d43..f922e2dd7 100644 --- a/src/impl/particles_impl_turb_adve.ipp +++ b/src/impl/particles_impl_sgs_adve.ipp @@ -11,7 +11,7 @@ namespace libcloudphxx { // calc the SGS turbulent velocity component template - void particles_t::impl::turb_adve(const real_t &dt) + void particles_t::impl::sgs_adve(const real_t &dt) { thrust_device::vector * vel_pos_a[] = {&x, &z, &y}; std::vector*> vel_pos(&vel_pos_a[0], &vel_pos_a[0]+n_dims); diff --git a/src/impl_multi_gpu/particles_multi_gpu_impl_step_async_and_copy.ipp b/src/impl_multi_gpu/particles_multi_gpu_impl_step_async_and_copy.ipp index 1998f3677..c222360c1 100644 --- a/src/impl_multi_gpu/particles_multi_gpu_impl_step_async_and_copy.ipp +++ b/src/impl_multi_gpu/particles_multi_gpu_impl_step_async_and_copy.ipp @@ -39,7 +39,7 @@ namespace libcloudphxx particles[dev_id]->step_async(opts); // --- copy advected SDs to other devices on the same node --- - if((opts.adve || opts.turb_adve) && glob_opts_init.dev_count>1) + if((opts.adve || opts.sgs_adve) && glob_opts_init.dev_count>1) { namespace arg = thrust::placeholders; typedef unsigned long long n_t; // TODO: same typedef is in impl struct !! particles::impl::n_t ? diff --git a/src/particles.tpp b/src/particles.tpp index 477f7a295..5ad827428 100644 --- a/src/particles.tpp +++ b/src/particles.tpp @@ -26,16 +26,17 @@ #include "detail/tpl_calc_wrapper.hpp" #include "detail/kernels.hpp" #include "detail/kernel_interpolation.hpp" +#include "detail/synth_turb_periodic_box.hpp" #include "detail/functors_host.hpp" #include "detail/ran_with_mpi.hpp" //kernel definitions -#include "detail/kernel_definitions/hall_efficiencies.hpp" -#include "detail/kernel_definitions/hall_davis_no_waals_efficiencies.hpp" -#include "detail/kernel_definitions/vohl_davis_no_waals_efficiencies.hpp" -#include "detail/kernel_definitions/hall_pinsky_stratocumulus_efficiencies.hpp" -#include "detail/kernel_definitions/hall_pinsky_cumulonimbus_efficiencies.hpp" -#include "detail/kernel_definitions/hall_pinsky_1000mb_grav_efficiencies.hpp" +#include "detail/kernel_definitions/hall_efficiencies_like_in_EFM.hpp" +#include "detail/kernel_definitions/hall_davis_no_waals_efficiencies_like_in_EFM.hpp" +#include "detail/kernel_definitions_Jon/vohl_davis_no_waals_efficiencies.hpp" +#include "detail/kernel_definitions_Jon/hall_pinsky_stratocumulus_efficiencies.hpp" +#include "detail/kernel_definitions_Jon/hall_pinsky_cumulonimbus_efficiencies.hpp" +#include "detail/kernel_definitions_Jon/hall_pinsky_1000mb_grav_efficiencies.hpp" #if defined(USE_MPI) #include @@ -49,6 +50,7 @@ #include "particles_init.ipp" #include "particles_step.ipp" #include "particles_diag.ipp" +#include "particles_remove.ipp" // details #include "impl/particles_impl.ipp" @@ -85,7 +87,9 @@ #include "impl/particles_impl_hskpng_Tpr.ipp" #include "impl/particles_impl_hskpng_mfp.ipp" #include "impl/particles_impl_hskpng_vterm.ipp" -#include "impl/particles_impl_hskpng_turb_vel.ipp" +#include "impl/particles_impl_hskpng_sgs_vel.ipp" +#include "impl/particles_impl_hskpng_sgs_vel_GA17.ipp" +#include "impl/particles_impl_hskpng_sgs_vel_ST_periodic.ipp" #include "impl/particles_impl_hskpng_turb_ss.ipp" #include "impl/particles_impl_hskpng_tke.ipp" #include "impl/particles_impl_hskpng_sort.ipp" @@ -99,7 +103,7 @@ #include "impl/particles_impl_sync.ipp" #include "impl/particles_impl_bcnd.ipp" // bcnd has to be b4 adve for periodic struct; move it to separate file in detail... #include "impl/particles_impl_adve.ipp" -#include "impl/particles_impl_turb_adve.ipp" +#include "impl/particles_impl_sgs_adve.ipp" #include "impl/particles_impl_cond_common.ipp" #include "impl/particles_impl_cond.ipp" #include "impl/particles_impl_cond_sstp.ipp" @@ -124,6 +128,7 @@ #include "impl/particles_impl_rlx.ipp" #include "impl/particles_impl_rlx_dry_distros.ipp" #include "impl/particles_impl_update_incloud_time.ipp" +#include "impl/particles_impl_remove.ipp" #include "impl/particles_impl_adjust_timesteps.ipp" // MPI copy diff --git a/src/particles_diag.ipp b/src/particles_diag.ipp index e900e8be1..264ba3a10 100644 --- a/src/particles_diag.ipp +++ b/src/particles_diag.ipp @@ -37,6 +37,38 @@ namespace libcloudphxx } }; + template + struct periodic_1d_dist_squared : public thrust::binary_function + { + const real_t L; + periodic_1d_dist_squared(const real_t &L) : L(L) {} + + BOOST_GPU_ENABLED + real_t operator()(const real_t &x1, const real_t &x2) + { +#if !defined(__NVCC__) + using std::abs; +#endif + real_t dx = abs(x2-x1); + if(dx > L / 2.) dx = L - dx; + return dx*dx; + } + }; + + + template + struct sqrt_fctr : public thrust::unary_function + { + BOOST_GPU_ENABLED + real_t operator()(const real_t &a) + { +#if !defined(__NVCC__) + using std::sqrt; +#endif + return sqrt(a); + } + }; + template struct rw3_cr { @@ -339,6 +371,30 @@ namespace libcloudphxx pimpl->moms_calc(pimpl->wp.begin(), n); } + // get min and max sgs vel along x + template + std::pair particles_t::diag_up_minmax() + { + auto it_pair = thrust::minmax_element(pimpl->up.begin(),pimpl->up.end()); + return std::pair{*(it_pair.first), *(it_pair.second)}; + } + + // get min and max sgs vel along y + template + std::pair particles_t::diag_vp_minmax() + { + auto it_pair = thrust::minmax_element(pimpl->vp.begin(),pimpl->vp.end()); + return std::pair{*(it_pair.first), *(it_pair.second)}; + } + + // get min and max sgs vel along z + template + std::pair particles_t::diag_wp_minmax() + { + auto it_pair = thrust::minmax_element(pimpl->wp.begin(),pimpl->wp.end()); + return std::pair{*(it_pair.first), *(it_pair.second)}; + } + // compute n-th moment of incloud_time for selected particles template void particles_t::diag_incloud_time_mom(const int &n) @@ -415,6 +471,13 @@ namespace libcloudphxx thrust::sequence(pimpl->count_ijk.begin(), pimpl->count_ijk.end()); } + // to get current value of sstp_coal, as it can change in const_multi runs + template + int particles_t::diag_sstp_coal() + { + return pimpl->opts_init.sstp_coal; + } + // compute 1st (non-specific) moment of rw^3 * vt of all SDs // TODO: replace it with simple diag vt? template @@ -493,5 +556,60 @@ namespace libcloudphxx { return pimpl->output_puddle; } + + // compute pair separation distance of all pairs, averaged over the whole domain + // NOTE: this function overwrites n_filtered! + template + real_t particles_t::diag_pair_separation_mean() + { + namespace arg = thrust::placeholders; + + assert(pimpl->opts_init.periodic_topbot_walls); // all walls periodic assumed + + thrust::fill(pimpl->tmp_device_real_part.begin(), pimpl->tmp_device_real_part.end(), real_t(0)); + thrust::fill(pimpl->tmp_device_real_part1.begin(), pimpl->tmp_device_real_part1.end(), real_t(0)); + + thrust_device::vector + *v[3] = { &pimpl->x, &pimpl->z, &pimpl->y }; + + real_t dx[3] = {pimpl->opts_init.dx, pimpl->opts_init.dz, pimpl->opts_init.dy}; + + for(int i=0; in_dims; ++i) + { + thrust::transform_if( + v[i]->begin(), // arg1 + v[i]->begin() + pimpl->n_part - 1, + v[i]->begin() + 1, // arg2 + thrust::make_counting_iterator(0), // stencil + pimpl->tmp_device_real_part1.begin(), // output + detail::periodic_1d_dist_squared(dx[i]), // operation + arg::_1 % thrust_size_t(2) == thrust_size_t(0) // predicate + ); + + thrust::transform( + pimpl->tmp_device_real_part1.begin(), + pimpl->tmp_device_real_part1.end(), + pimpl->tmp_device_real_part.begin(), + pimpl->tmp_device_real_part.begin(), + thrust::plus() + ); + } + + thrust::transform( + pimpl->tmp_device_real_part.begin(), + pimpl->tmp_device_real_part.end(), + pimpl->tmp_device_real_part.begin(), + detail::sqrt_fctr() + ); + + real_t res = thrust::reduce( + pimpl->tmp_device_real_part.begin(), + pimpl->tmp_device_real_part.end() + ); + + diag_all(); // this function overwrote n_filtered, we reset n_filtered to all here + + return res / (pimpl->n_part / real_t(2.)); + } }; }; diff --git a/src/particles_multi_gpu.tpp b/src/particles_multi_gpu.tpp index 06e51e625..ec6288ca9 100644 --- a/src/particles_multi_gpu.tpp +++ b/src/particles_multi_gpu.tpp @@ -12,4 +12,5 @@ #include "particles_multi_gpu_ctor.ipp" #include "particles_multi_gpu_diag.ipp" #include "particles_multi_gpu_step.ipp" +#include "particles_multi_gpu_remove.ipp" diff --git a/src/particles_multi_gpu_diag.ipp b/src/particles_multi_gpu_diag.ipp index b3dad92cc..570992475 100644 --- a/src/particles_multi_gpu_diag.ipp +++ b/src/particles_multi_gpu_diag.ipp @@ -49,6 +49,12 @@ namespace libcloudphxx pimpl->mcuda_run(&particles_t::diag_vel_div); } + template + int particles_t::diag_sstp_coal() + { + throw std::runtime_error("diag_sstp_coal is not implemented yet for the multi_CUDA backend"); + } + template void particles_t::diag_sd_conc() { @@ -250,5 +256,32 @@ namespace libcloudphxx } return res; } + + template + real_t particles_t::diag_pair_separation_mean() + { + assert(false); // not implemented + } + + template + std::pair particles_t::diag_up_minmax() + { + assert(false); // not implemented + return std::pair{0,0}; + } + + template + std::pair particles_t::diag_vp_minmax() + { + assert(false); // not implemented + return std::pair{0,0}; + } + + template + std::pair particles_t::diag_wp_minmax() + { + assert(false); // not implemented + return std::pair{0,0}; + } }; }; diff --git a/src/particles_multi_gpu_remove.ipp b/src/particles_multi_gpu_remove.ipp new file mode 100644 index 000000000..0a595bb3b --- /dev/null +++ b/src/particles_multi_gpu_remove.ipp @@ -0,0 +1,20 @@ +// vim:filetype=cpp +/** @file + * @copyright University of Warsaw + * @section LICENSE + * GPLv3+ (see the COPYING file or http://www.gnu.org/licenses/) + */ + +namespace libcloudphxx +{ + namespace lgrngn + { + template + void particles_t::remove_wet_rng( + const real_t &r_mi, const real_t &r_mx + ) + { + pimpl->mcuda_run(&particles_t::remove_wet_rng, r_mi, r_mx); + } + }; +}; diff --git a/src/particles_remove.ipp b/src/particles_remove.ipp new file mode 100644 index 000000000..6f29cc441 --- /dev/null +++ b/src/particles_remove.ipp @@ -0,0 +1,22 @@ +// vim:filetype=cpp +/** @file + * @copyright University of Warsaw + * @section LICENSE + * GPLv3+ (see the COPYING file or http://www.gnu.org/licenses/) + */ + +namespace libcloudphxx +{ + namespace lgrngn + { + // removes particles with (r_w >= r_min && r_w < r_max) + template + void particles_t::remove_wet_rng(const real_t &r_min, const real_t &r_max) + { +#if !defined(__NVCC__) + using std::pow; +#endif + pimpl->remove_rng(pow(r_min, 2), pow(r_max, 2), pimpl->rw2.begin()); + } + }; +}; diff --git a/src/particles_step.ipp b/src/particles_step.ipp index 9daec79f1..d91e55817 100644 --- a/src/particles_step.ipp +++ b/src/particles_step.ipp @@ -46,8 +46,8 @@ namespace libcloudphxx if (pimpl->should_now_run_async) throw std::runtime_error("libcloudph++: please call step_async() before calling step_sync() again"); - if (th.is_null() || rv.is_null()) - throw std::runtime_error("libcloudph++: passing th and rv is mandatory"); +// if (th.is_null() || rv.is_null()) +// throw std::runtime_error("libcloudph++: passing th and rv is mandatory"); // - code duplicated from init() ! if (!courant_x.is_null() || !courant_y.is_null() || !courant_z.is_null()) @@ -71,11 +71,11 @@ namespace libcloudphxx if (!pimpl->opts_init.chem_switch && ambient_chem.size() != 0) throw std::runtime_error("libcloudph++: chemistry was switched off and ambient_chem is not empty"); - if ( (pimpl->opts_init.turb_adve_switch || pimpl->opts_init.turb_cond_switch || pimpl->opts_init.turb_coal_switch) && diss_rate.is_null()) - throw std::runtime_error("libcloudph++: turbulent advection, coalescence and condesation are not switched off and diss_rate is empty"); + if ( (pimpl->opts_init.sgs_adve==sgs_adve_t::GA17 || pimpl->opts_init.turb_cond_switch || pimpl->opts_init.turb_coal_switch) && diss_rate.is_null()) + throw std::runtime_error("libcloudph++: sgs advection model is GA17 or turbulent coalescence and condesation are not switched off and diss_rate is empty"); - if ( !(pimpl->opts_init.turb_adve_switch || pimpl->opts_init.turb_cond_switch || pimpl->opts_init.turb_coal_switch) && !diss_rate.is_null()) - throw std::runtime_error("libcloudph++: turbulent advection, coalescence and condesation are switched off and diss_rate is not empty"); + if ( !(pimpl->opts_init.sgs_adve==sgs_adve_t::GA17 || pimpl->opts_init.turb_cond_switch || pimpl->opts_init.turb_coal_switch) && !diss_rate.is_null()) + throw std::runtime_error("libcloudph++: sgs advection model is not GA17 and turbulent coalescence and condesation are switched off and diss_rate is not empty"); // if (pimpl->l2e[&pimpl->courant_x].size() == 0) // TODO: y, z,... @@ -116,13 +116,13 @@ namespace libcloudphxx nancheck(pimpl->courant_z, " courant_z after sync-in"); nancheck(pimpl->diss_rate, " diss_rate after sync-in"); nancheck(pimpl->rhod, " rhod after sync-in"); - if(pimpl->opts_init.turb_adve_switch || pimpl->opts_init.turb_cond_switch || pimpl->opts_init.turb_coal_switch) + if(pimpl->opts_init.sgs_adve==sgs_adve_t::GA17 || pimpl->opts_init.turb_cond_switch || pimpl->opts_init.turb_coal_switch) {nancheck(pimpl->diss_rate, " diss_rate after sync-in");} assert(*thrust::min_element(pimpl->rv.begin(), pimpl->rv.end()) >= 0); assert(*thrust::min_element(pimpl->th.begin(), pimpl->th.end()) >= 0); assert(*thrust::min_element(pimpl->rhod.begin(), pimpl->rhod.end()) >= 0); - if(pimpl->opts_init.turb_adve_switch || pimpl->opts_init.turb_cond_switch || pimpl->opts_init.turb_coal_switch) + if(pimpl->opts_init.sgs_adve==sgs_adve_t::GA17 || pimpl->opts_init.turb_cond_switch || pimpl->opts_init.turb_coal_switch) {assert(*thrust::min_element(pimpl->diss_rate.begin(), pimpl->diss_rate.end()) >= 0);} // check if courants are greater than 2 since it would break the predictor-corrector (halo of size 2 in the x direction) @@ -305,11 +305,11 @@ namespace libcloudphxx if((opts.chem_dsl || opts.chem_dsc || opts.chem_rct) && !pimpl->opts_init.chem_switch) throw std::runtime_error("libcloudph++: all chemistry was switched off in opts_init"); - if(opts.turb_adve && !pimpl->opts_init.turb_adve_switch) - throw std::runtime_error("libcloudph++: turb_adve_switch=False, but turb_adve==True"); + if(opts.sgs_adve && pimpl->opts_init.sgs_adve==sgs_adve_t::undefined) + throw std::runtime_error("libcloudph++: sgs_adve==True, but opts_init.sgs_adve was not defined"); - if(opts.turb_adve && pimpl->n_dims==0) - throw std::runtime_error("libcloudph++: turbulent advection does not work in 0D"); + if(opts.sgs_adve && pimpl->n_dims==0) + throw std::runtime_error("libcloudph++: SGS advection does not work in 0D"); // dt defined in opts_init can be overriden by dt in opts pimpl->adjust_timesteps(opts.dt); @@ -350,20 +350,20 @@ namespace libcloudphxx } } - if (opts.turb_adve || opts.turb_cond) + if ((opts.sgs_adve || opts.turb_cond) && pimpl->opts_init.sgs_adve == sgs_adve_t::GA17) // GA17 takes TKE input { // calc tke (diss_rate now holds TKE, not dissipation rate! Hence this must be done after coal, which requires diss rate) pimpl->hskpng_tke(); } - if (opts.turb_adve) + if (opts.sgs_adve) { - // calc turbulent perturbation of velocity - pimpl->hskpng_turb_vel(pimpl->dt); + // calc sgs velocity + pimpl->hskpng_sgs_vel(pimpl->dt); } else if (opts.turb_cond) { - // calc turbulent perturbation only of vertical velocity - pimpl->hskpng_turb_vel(pimpl->dt, true); + // calc sgs vertical velocity + pimpl->hskpng_sgs_vel(pimpl->dt, true); } if(opts.turb_cond) @@ -377,8 +377,8 @@ namespace libcloudphxx // revert to the desired adve scheme (in case we used eulerian this timestep for halo reasons) pimpl->adve_scheme = pimpl->opts_init.adve_scheme; - // apply turbulent perturbation of velocity, TODO: add it to advection velocity (turb_vel_calc would need to be called couple times in the pred-corr advection + diss_rate would need a halo) - if (opts.turb_adve) pimpl->turb_adve(pimpl->dt); + // apply turbulent perturbation of velocity, TODO: add it to advection velocity (sgs_vel_calc would need to be called couple times in the pred-corr advection + diss_rate would need a halo) + if (opts.sgs_adve) pimpl->sgs_adve(pimpl->dt); // sedimentation/subsidence has to be done after advection, so that negative z doesnt crash hskpng_ijk in adve if (opts.sedi) @@ -434,7 +434,7 @@ namespace libcloudphxx pimpl->bcnd(); // copy advected SDs using asynchronous MPI; - if (opts.adve || opts.turb_adve) + if (opts.adve || opts.sgs_adve) pimpl->mpi_exchange(); // stuff has to be done after distmem copy diff --git a/tests/python/unit/CMakeLists.txt b/tests/python/unit/CMakeLists.txt index 872f6b52c..1babbec18 100644 --- a/tests/python/unit/CMakeLists.txt +++ b/tests/python/unit/CMakeLists.txt @@ -1,6 +1,5 @@ # non-pytest tests -foreach(test api_blk_1m api_blk_2m api_lgrngn api_common segfault_20150216 col_kernels terminal_velocities uniform_init source sstp_cond multiple_kappas adve_scheme lgrngn_subsidence sat_adj_blk_1m diag_incloud_time relax) - +foreach(test api_blk_1m api_blk_2m api_lgrngn api_common segfault_20150216 col_kernels terminal_velocities uniform_init source sstp_cond multiple_kappas adve_scheme lgrngn_subsidence sat_adj_blk_1m diag_incloud_time relax sgs_adve_pair_separation) #TODO: indicate that tests depend on the lib add_test( NAME ${test} diff --git a/tests/python/unit/api_lgrngn.py b/tests/python/unit/api_lgrngn.py index ce5c912a8..350b2effd 100644 --- a/tests/python/unit/api_lgrngn.py +++ b/tests/python/unit/api_lgrngn.py @@ -4,7 +4,6 @@ #except: # pass sys.path.insert(0, "../../bindings/python/") -sys.path.insert(0, "../../../build/bindings/python/") from libcloudphxx import lgrngn diff --git a/tests/python/unit/sgs_adve_pair_separation.py b/tests/python/unit/sgs_adve_pair_separation.py new file mode 100644 index 000000000..87b289ba8 --- /dev/null +++ b/tests/python/unit/sgs_adve_pair_separation.py @@ -0,0 +1,109 @@ +import sys +sys.path.insert(0, "../../bindings/python/") +#sys.path.insert(0, "/mnt/local/pdziekan/usr/local/lib/python3/dist-packages/") + +from libcloudphxx import lgrngn + +import numpy as np +from math import exp, log, sqrt, pi +from time import time +import matplotlib.pyplot as plt + +simtime = 100 +dt = 0.1 +sd_conc = 3000 +eps=1e-3 +Lmax=1 +Nmodes=50 +Nwaves_max=100 + +sgs_adve = lgrngn.sgs_adve_t.ST_periodic +#sgs_adve = lgrngn.sgs_adve_t.GA17 + +def lognormal(lnr): + mean_r = .04e-6 / 2 + stdev = 1.4 + n_tot = 60e6 + return n_tot * exp( + -pow((lnr - log(mean_r)), 2) / 2 / pow(log(stdev),2) + ) / log(stdev) / sqrt(2*pi); + +Opts_init = lgrngn.opts_init_t() +kappa = .61 +Opts_init.dry_distros = {kappa:lognormal} +Opts_init.coal_switch = False +Opts_init.sedi_switch = False +Opts_init.init_pair_separation=1e-3 #[m] + +Opts_init.dt = dt + +Opts_init.nz = 1 +Opts_init.nx = 1 +Opts_init.ny = 1 +Opts_init.dz = 1e3 +Opts_init.dx = 1e3 +Opts_init.dy = 1e3 +Opts_init.x0 = 0; +Opts_init.y0 = 0; +Opts_init.z0 = 0; +Opts_init.z1 = Opts_init.nz * Opts_init.dz +Opts_init.x1 = Opts_init.nx * Opts_init.dx +Opts_init.y1 = Opts_init.ny * Opts_init.dy +Opts_init.periodic_topbot_walls = 1 + +Opts_init.rng_seed = int(time()) +Opts_init.sd_conc = sd_conc +Opts_init.n_sd_max = Opts_init.sd_conc * (Opts_init.nx * Opts_init.nz * Opts_init.ny) + +Backend = lgrngn.backend_t.CUDA +#Backend = lgrngn.backend_t.OpenMP + +Opts_init.sgs_adve = sgs_adve + +if sgs_adve == lgrngn.sgs_adve_t.ST_periodic: + Opts_init.ST_eps = eps # [m2/s3] + Opts_init.ST_Lmax = Lmax # [m] + Opts_init.ST_Lmin = 1e-3 # [m] + Opts_init.ST_Nmodes = Nmodes + Opts_init.ST_Nwaves_max = Nwaves_max +else: + Opts_init.SGS_mix_len = Lmax * np.ones(Opts_init.nz) + diss_rate = eps * np.ones((Opts_init.nx, Opts_init.ny, Opts_init.nz)) + +Opts = lgrngn.opts_t() +Opts.adve = False +Opts.sgs_adve = True +Opts.sedi = False +Opts.cond = False +Opts.coal = False +Opts.chem = False +Opts.rcyc = False + +Rhod = 1. * np.ones((Opts_init.nx, Opts_init.ny, Opts_init.nz)) +Th = 300. * np.ones((Opts_init.nx, Opts_init.ny, Opts_init.nz)) +Rv = 0.01 * np.ones((Opts_init.nx, Opts_init.ny, Opts_init.nz)) + + +prtcls = lgrngn.factory(Backend, Opts_init) +prtcls.init(Th, Rv, Rhod) + +nstep = int(simtime / dt) + 1 +out_time = np.zeros(nstep) +out_sep = np.zeros(nstep) + +out_time[0] = 0 +out_sep[0] = prtcls.diag_pair_separation_mean() + +for it in range(1, nstep): + if Opts_init.sgs_adve == lgrngn.sgs_adve_t.GA17: + prtcls.step_sync(Opts, Th, Rv, Rhod, diss_rate=diss_rate) + else: + prtcls.step_sync(Opts, Th, Rv, Rhod) + prtcls.step_async(Opts) + out_sep[it] = prtcls.diag_pair_separation_mean() + out_time[it] = it * dt + +print(out_time, out_sep) +plt.plot(out_time, out_sep) +plt.savefig("/mnt/local/pdziekan/pair_separation.png") +