From 7e683d93c8ee7c544d55f4ae2c2f458000a68a30 Mon Sep 17 00:00:00 2001 From: "yu.dongliang" <18588496441@163.com> Date: Sun, 4 May 2025 11:40:41 +0800 Subject: [PATCH] 1, don't analysize the tree layer struct of electronic graph before 'node analysis', 2, add D-flip-flop & NOT gate with delay to support 'C-style for loop' in electronic graph. --- Makefile | 2 + cpk/Makefile | 13 +- cpk/for_test.c | 103 + cpk/ttl_adc.c | 65 + cpk/ttl_adc.cpk | Bin 0 -> 1099 bytes cpk/ttl_adc_test.c | 45 + cpk/ttl_ck_test.c | 56 + cpk/ttl_d_flip_flop.c | 79 + cpk/ttl_dff.cpk | Bin 0 -> 1432 bytes cpk/ttl_dff_test.c | 63 + cpk/ttl_not_delay.c | 63 + cpk/ttl_not_delay.cpk | Bin 0 -> 854 bytes main.c | 14 +- scf_eda_pack.c | 210 +- scf_eda_pack.h | 90 +- ses_core.h | 83 +- ses_layout.c | 15 + ses_layout_function.c | 83 +- ses_node_analysis.c | 541 ++- ses_step_ac_input.c | 53 + ses_step_battery.c | 75 +- ses_step_dc_diode.c | 26 +- ses_step_dc_input.c | 9 +- ses_step_dc_npn.c | 19 +- ses_step_dc_pnp.c | 19 +- ses_step_draw.c | 260 +- ses_step_topo.c | 140 +- ses_step_va.c | 8 +- ses_step_va_nodes.c | 59 +- ses_steps.c | 2 + ses_utils.c | 41 +- test/Makefile | 5 +- test/draw_timing.c | 74 + test/two_battery.c | 87 + test/v.txt | 7900 +++++++++++++++++++++++++++++++++-------- 35 files changed, 8184 insertions(+), 2118 deletions(-) create mode 100644 cpk/for_test.c create mode 100644 cpk/ttl_adc.c create mode 100644 cpk/ttl_adc.cpk create mode 100644 cpk/ttl_adc_test.c create mode 100644 cpk/ttl_ck_test.c create mode 100644 cpk/ttl_d_flip_flop.c create mode 100644 cpk/ttl_dff.cpk create mode 100644 cpk/ttl_dff_test.c create mode 100644 cpk/ttl_not_delay.c create mode 100644 cpk/ttl_not_delay.cpk create mode 100644 ses_step_ac_input.c create mode 100644 test/draw_timing.c create mode 100644 test/two_battery.c diff --git a/Makefile b/Makefile index 4dddb79..0f2861d 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,8 @@ CFILES += ses_node_analysis.c CFILES += ses_steps.c CFILES += ses_step_battery.c CFILES += ses_step_dc_input.c +CFILES += ses_step_ac_input.c + CFILES += ses_step_dc_diode.c CFILES += ses_step_dc_npn.c CFILES += ses_step_dc_pnp.c diff --git a/cpk/Makefile b/cpk/Makefile index fc7f78e..8bf7737 100644 --- a/cpk/Makefile +++ b/cpk/Makefile @@ -5,9 +5,12 @@ #CFILES += ttl_or.c #CFILES += ttl_nor.c #CFILES += ttl_not.c +#CFILES += ttl_not_delay.c #CFILES += ttl_xor.c #CFILES += ttl_add.c +#CFILES += ttl_adc.c #CFILES += ttl_if.c +#CFILES += ttl_d_flip_flop.c #CFILES += ttl_mla.c #CFILES += ttl_mla_test.c #CFILES += ttl_if_test.c @@ -19,16 +22,18 @@ #CFILES += ttl_nor_test.c #CFILES += ttl_xor_test.c #CFILES += ttl_add_test.c +#CFILES += ttl_adc_test.c +#CFILES += ttl_ck_test.c #CFILES += add.c #CFILES += jk_gate.c #CFILES += jk_gate2.c -#CFILES += ttl_nand_delay.c -#CFILES += ttl_nand_gate.c -#CFILES += ttl_nand_gate2.c #CFILES += rs_gate.c -CFILES += d_gate.c +#CFILES += ttl_dff_test.c +CFILES += for_test.c #CFILES += add_gate.c #CFILES += adc_gate.c +#CFILES += op_amp_741.c +#CFILES += op_amp_test.c CFILES += ../scf_eda_pack.c CFILES += ../pack/scf_pack.c diff --git a/cpk/for_test.c b/cpk/for_test.c new file mode 100644 index 0000000..cb0350b --- /dev/null +++ b/cpk/for_test.c @@ -0,0 +1,103 @@ +#include +#include +#include +#include"ses_core.h" + +int main(int argc, char* argv[]) +{ + ScfEcomponent* B; + ScfEcomponent* R; + ScfEcomponent* C; + ScfEcomponent* T; + ScfEcomponent* IF; + + ScfEcomponent* IF2; + ScfEcomponent* NOT; + + ScfEcomponent* DFF; + ScfEcomponent* AND; + ScfEcomponent* CLK; + + ScfEfunction* f; + ScfEboard* b; + + b = scf_eboard__alloc(); + f = scf_efunction__alloc("for_test"); + + EDA_INST_ADD_COMPONENT(f, B, SCF_EDA_Battery); + EDA_INST_ADD_COMPONENT(f, R, SCF_EDA_Resistor); + EDA_INST_ADD_COMPONENT(f, C, SCF_EDA_Capacitor); + EDA_INST_ADD_COMPONENT(f, T, SCF_EDA_NPN); + EDA_INST_ADD_COMPONENT(f, IF, SCF_EDA_IF); + + EDA_INST_ADD_COMPONENT(f, DFF, SCF_EDA_DFF); + EDA_INST_ADD_COMPONENT(f, AND, SCF_EDA_AND); + EDA_INST_ADD_COMPONENT(f, CLK, SCF_EDA_NOT); + + EDA_INST_ADD_COMPONENT(f, IF2, SCF_EDA_IF); + EDA_INST_ADD_COMPONENT(f, NOT, SCF_EDA_NOT); + + B->pins[SCF_EDA_Battery_NEG]->flags = SCF_EDA_PIN_NEG; + B->pins[SCF_EDA_Battery_POS]->flags = SCF_EDA_PIN_POS; + + EDA_PIN_ADD_PIN(R, 1, B, SCF_EDA_Battery_POS); + EDA_PIN_ADD_PIN(IF, SCF_EDA_IF_POS, B, SCF_EDA_Battery_POS); + EDA_PIN_ADD_PIN(DFF, SCF_EDA_DFF_POS, B, SCF_EDA_Battery_POS); + EDA_PIN_ADD_PIN(AND, SCF_EDA_AND_POS, B, SCF_EDA_Battery_POS); + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NOT_POS, B, SCF_EDA_Battery_POS); + + EDA_PIN_ADD_PIN(IF2, SCF_EDA_IF_POS, B, SCF_EDA_Battery_POS); + EDA_PIN_ADD_PIN(NOT, SCF_EDA_NOT_POS, B, SCF_EDA_Battery_POS); + + EDA_PIN_ADD_PIN(C, 0, B, SCF_EDA_Battery_NEG); + EDA_PIN_ADD_PIN(T, SCF_EDA_NPN_E, B, SCF_EDA_Battery_NEG); + EDA_PIN_ADD_PIN(IF, SCF_EDA_IF_NEG, B, SCF_EDA_Battery_NEG); + EDA_PIN_ADD_PIN(DFF, SCF_EDA_DFF_NEG, B, SCF_EDA_Battery_NEG); + EDA_PIN_ADD_PIN(AND, SCF_EDA_AND_NEG, B, SCF_EDA_Battery_NEG); + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NOT_NEG, B, SCF_EDA_Battery_NEG); + + EDA_PIN_ADD_PIN(IF2, SCF_EDA_IF_NEG, B, SCF_EDA_Battery_NEG); + EDA_PIN_ADD_PIN(NOT, SCF_EDA_NOT_NEG, B, SCF_EDA_Battery_NEG); + + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NOT_IN, AND, SCF_EDA_AND_IN0); + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NOT_OUT, AND, SCF_EDA_AND_IN1); + EDA_PIN_ADD_PIN(AND, SCF_EDA_AND_OUT, DFF, SCF_EDA_DFF_CK); + + EDA_PIN_ADD_PIN(R, 0, C, 1); + EDA_PIN_ADD_PIN(C, 1, T, SCF_EDA_NPN_B); + EDA_PIN_ADD_PIN(IF, SCF_EDA_IF_COND, T, SCF_EDA_NPN_C); + EDA_PIN_ADD_PIN(IF, SCF_EDA_IF_OUT, DFF, SCF_EDA_DFF_IN); + EDA_PIN_ADD_PIN(IF, SCF_EDA_IF_FALSE, IF2, SCF_EDA_IF_OUT); + + EDA_PIN_ADD_PIN(DFF, SCF_EDA_DFF_OUT, IF2, SCF_EDA_IF_COND); + EDA_PIN_ADD_PIN(DFF, SCF_EDA_DFF_OUT, IF2, SCF_EDA_IF_TRUE); + EDA_PIN_ADD_PIN(DFF, SCF_EDA_DFF_OUT, NOT, SCF_EDA_NOT_IN); + EDA_PIN_ADD_PIN(NOT, SCF_EDA_NOT_OUT, IF2, SCF_EDA_IF_FALSE); + + + IF->pins [SCF_EDA_IF_TRUE]->flags = SCF_EDA_PIN_IN | SCF_EDA_PIN_IN0; + CLK->pins[SCF_EDA_NOT_IN ]->flags = SCF_EDA_PIN_IN; + DFF->pins[SCF_EDA_DFF_OUT]->flags = SCF_EDA_PIN_OUT; + + R->r = 1600; + C->uf = 4e-4; + + CLK->model = SCF_EDA_TTL_DELAY; + + scf_eboard__add_function(b, f); + + long len = 0; + uint8_t* buf = NULL; + + ScfEboard_pack(b, &buf, &len); + ScfEboard_free(b); + b = NULL; + + FILE* fp = fopen("./for_test.cpk", "wb"); + if (!fp) + return -EINVAL; + + fwrite(buf, len, 1, fp); + fclose(fp); + return 0; +} diff --git a/cpk/ttl_adc.c b/cpk/ttl_adc.c new file mode 100644 index 0000000..d8415ed --- /dev/null +++ b/cpk/ttl_adc.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include"ses_core.h" + +int main(int argc, char* argv[]) +{ + ScfEcomponent* ADD0; + ScfEcomponent* ADD1; + ScfEcomponent* OR; + + ScfEfunction* f = scf_efunction__alloc("ttl_adc"); + + EDA_INST_ADD_COMPONENT(f, ADD0, SCF_EDA_ADD); + EDA_INST_ADD_COMPONENT(f, ADD1, SCF_EDA_ADD); + EDA_INST_ADD_COMPONENT(f, OR, SCF_EDA_OR); + + EDA_PIN_ADD_PIN(ADD0, SCF_EDA_ADD_POS, ADD1, SCF_EDA_ADD_POS); + EDA_PIN_ADD_PIN(ADD0, SCF_EDA_ADD_POS, OR, SCF_EDA_OR_POS); + EDA_PIN_ADD_PIN(ADD0, SCF_EDA_ADD_NEG, ADD1, SCF_EDA_ADD_NEG); + EDA_PIN_ADD_PIN(ADD0, SCF_EDA_ADD_NEG, OR, SCF_EDA_OR_NEG); + + EDA_PIN_ADD_PIN(ADD0, SCF_EDA_ADD_OUT, ADD1, SCF_EDA_ADD_IN0); + EDA_PIN_ADD_PIN(ADD0, SCF_EDA_ADD_CF, OR, SCF_EDA_OR_IN0); + EDA_PIN_ADD_PIN(ADD1, SCF_EDA_ADD_CF, OR, SCF_EDA_OR_IN1); + + ADD0->pins[SCF_EDA_ADD_POS]->flags = SCF_EDA_PIN_POS; + ADD0->pins[SCF_EDA_ADD_NEG]->flags = SCF_EDA_PIN_NEG; + + ADD0->pins[SCF_EDA_ADD_IN0]->flags = SCF_EDA_PIN_IN; + ADD0->pins[SCF_EDA_ADD_IN1]->flags = SCF_EDA_PIN_IN | SCF_EDA_PIN_IN0; + ADD1->pins[SCF_EDA_ADD_IN1]->flags = SCF_EDA_PIN_IN; + ADD1->pins[SCF_EDA_ADD_OUT]->flags = SCF_EDA_PIN_OUT; + OR ->pins[SCF_EDA_ADD_OUT]->flags = SCF_EDA_PIN_CF; + + ADD0->pins[SCF_EDA_ADD_POS]->ic_lid = SCF_EDA_ADC_POS; + ADD0->pins[SCF_EDA_ADD_NEG]->ic_lid = SCF_EDA_ADC_NEG; + + ADD0->pins[SCF_EDA_ADD_IN0]->ic_lid = SCF_EDA_ADC_CI; + ADD0->pins[SCF_EDA_ADD_IN1]->ic_lid = SCF_EDA_ADC_IN0; + ADD1->pins[SCF_EDA_ADD_IN1]->ic_lid = SCF_EDA_ADC_IN1; + ADD1->pins[SCF_EDA_ADD_OUT]->ic_lid = SCF_EDA_ADC_OUT; + OR ->pins[SCF_EDA_OR_OUT ]->ic_lid = SCF_EDA_ADC_CF; + + int ret = ses_layout_function(f, 100); + if (ret < 0) + return ret; + + ses_draw(f, "ttl_adc.png", f->x, f->y, f->w, f->h, 0, -1); + + long len = 0; + uint8_t* buf = NULL; + + ScfEfunction_pack(f, &buf, &len); + ScfEfunction_free(f); + f = NULL; + + FILE* fp = fopen("./ttl_adc.cpk", "wb"); + if (!fp) + return -EINVAL; + + fwrite(buf, len, 1, fp); + fclose(fp); + return 0; +} diff --git a/cpk/ttl_adc.cpk b/cpk/ttl_adc.cpk new file mode 100644 index 0000000000000000000000000000000000000000..5a9309fe2daa98ca9d45d07a5f42bcc4e1f5dd43 GIT binary patch literal 1099 zcmZuwv5FKy5Ut*+ppZryonQurWr7I|4DK$H4VptR84L`KJVY}M3=S?bGgVem(M&Kh z(ho553(SoK149ENgTYr-(|fzCy)ZL7{rc5=Rd4#!(}yQ_@86?H*Qg<)J~0XI=WD8N zy}9t<>}1vEpA}IcV&asTh4HY#P1V;I4m)ZMB_v99PBvA)UMphxI6rZsNO5%$rQ;Th z7h8TG5AhPk5)B}dL7(RZMNgF|Uk>^6f&zAG>PSSo9h3`Neq6PNDaV;s?edTQWAzLR zrg5A9(_7`gen=b3@G6AMHtOKzj4F;9QYr09O>2{S!=&o*$Y^oGudJ!^a`{8Zw-;`j zYk{Y_KnR#;#`7)Y-@z?&56iLNku+C33(&r2THSmx`Emeec>c%s`qjQ|8{wYq4XW5i z+oASfSPyM zWlO4_(7a*=#*{U$&Dyt*TI{NN-4tY0#!DDXWa^j(q}n1n=TtFKD9ZQ)7&N3{G@^4( z6_bR4QJ$K)XC6?}M_LA}s9HG5h~Y1O+6AncV40Rq-%)|MNy~&6vQUbdY?Tn08 +#include +#include +#include"ses_core.h" + +int main(int argc, char* argv[]) +{ + ScfEcomponent* B; + ScfEcomponent* ADC; + + ScfEboard* b = scf_eboard__alloc(); + ScfEfunction* f = scf_efunction__alloc("adc_test"); + + EDA_INST_ADD_COMPONENT(f, B, SCF_EDA_Battery); + EDA_INST_ADD_COMPONENT(f, ADC, SCF_EDA_ADC); + + B->pins[SCF_EDA_Battery_POS]->flags = SCF_EDA_PIN_POS; + B->pins[SCF_EDA_Battery_NEG]->flags = SCF_EDA_PIN_NEG; + + EDA_PIN_ADD_PIN(B, SCF_EDA_Battery_POS, ADC, SCF_EDA_ADC_POS); + EDA_PIN_ADD_PIN(B, SCF_EDA_Battery_NEG, ADC, SCF_EDA_ADC_NEG); + + ADC->pins[SCF_EDA_ADC_CI ]->flags = SCF_EDA_PIN_IN; + ADC->pins[SCF_EDA_ADC_IN0]->flags = SCF_EDA_PIN_IN | SCF_EDA_PIN_IN0; + ADC->pins[SCF_EDA_ADC_IN1]->flags = SCF_EDA_PIN_IN; + ADC->pins[SCF_EDA_ADC_OUT]->flags = SCF_EDA_PIN_OUT; + ADC->pins[SCF_EDA_ADC_CF]->flags = SCF_EDA_PIN_CF; + + scf_eboard__add_function(b, f); + + long len = 0; + uint8_t* buf = NULL; + + ScfEboard_pack(b, &buf, &len); + ScfEboard_free(b); + b = NULL; + + FILE* fp = fopen("./adc_test.cpk", "wb"); + if (!fp) + return -EINVAL; + + fwrite(buf, len, 1, fp); + fclose(fp); + return 0; +} diff --git a/cpk/ttl_ck_test.c b/cpk/ttl_ck_test.c new file mode 100644 index 0000000..28dba2f --- /dev/null +++ b/cpk/ttl_ck_test.c @@ -0,0 +1,56 @@ +#include +#include +#include +#include"ses_core.h" + +int main(int argc, char* argv[]) +{ + ScfEcomponent* B; + + ScfEcomponent* AND; + ScfEcomponent* CLK; + + ScfEfunction* f; + ScfEboard* b; + + b = scf_eboard__alloc(); + f = scf_efunction__alloc("ck_test"); + + EDA_INST_ADD_COMPONENT(f, B, SCF_EDA_Battery); + EDA_INST_ADD_COMPONENT(f, AND, SCF_EDA_AND); + EDA_INST_ADD_COMPONENT(f, CLK, SCF_EDA_NOT); + + B->pins[SCF_EDA_Battery_NEG]->flags = SCF_EDA_PIN_NEG; + B->pins[SCF_EDA_Battery_POS]->flags = SCF_EDA_PIN_POS; + + EDA_PIN_ADD_PIN(AND, SCF_EDA_AND_POS, B, SCF_EDA_Battery_POS); + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NOT_POS, B, SCF_EDA_Battery_POS); + + EDA_PIN_ADD_PIN(AND, SCF_EDA_AND_NEG, B, SCF_EDA_Battery_NEG); + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NOT_NEG, B, SCF_EDA_Battery_NEG); + + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NOT_IN, AND, SCF_EDA_AND_IN0); + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NOT_OUT, AND, SCF_EDA_AND_IN1); + + CLK->pins[SCF_EDA_NOT_IN ]->flags = SCF_EDA_PIN_IN | SCF_EDA_PIN_IN0; + AND->pins[SCF_EDA_AND_OUT]->flags = SCF_EDA_PIN_OUT; + + CLK->model = SCF_EDA_TTL_DELAY; + + scf_eboard__add_function(b, f); + + long len = 0; + uint8_t* buf = NULL; + + ScfEboard_pack(b, &buf, &len); + ScfEboard_free(b); + b = NULL; + + FILE* fp = fopen("./ck_test.cpk", "wb"); + if (!fp) + return -EINVAL; + + fwrite(buf, len, 1, fp); + fclose(fp); + return 0; +} diff --git a/cpk/ttl_d_flip_flop.c b/cpk/ttl_d_flip_flop.c new file mode 100644 index 0000000..9cefcf1 --- /dev/null +++ b/cpk/ttl_d_flip_flop.c @@ -0,0 +1,79 @@ +#include +#include +#include +#include"ses_core.h" + +int main(int argc, char* argv[]) +{ + ScfEcomponent* NAND0; + ScfEcomponent* NAND1; + ScfEcomponent* NAND2; + ScfEcomponent* NAND3; + ScfEcomponent* NAND4; + + ScfEfunction* f = scf_efunction__alloc("ttl_dff.cpk"); + + EDA_INST_ADD_COMPONENT(f, NAND0, SCF_EDA_NAND); + EDA_INST_ADD_COMPONENT(f, NAND1, SCF_EDA_NAND); + EDA_INST_ADD_COMPONENT(f, NAND2, SCF_EDA_NAND); + EDA_INST_ADD_COMPONENT(f, NAND3, SCF_EDA_NAND); + EDA_INST_ADD_COMPONENT(f, NAND4, SCF_EDA_NAND); + + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_POS, NAND1, SCF_EDA_NAND_POS); + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_POS, NAND2, SCF_EDA_NAND_POS); + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_POS, NAND3, SCF_EDA_NAND_POS); + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_POS, NAND4, SCF_EDA_NAND_POS); + + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_NEG, NAND1, SCF_EDA_NAND_NEG); + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_NEG, NAND2, SCF_EDA_NAND_NEG); + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_NEG, NAND3, SCF_EDA_NAND_NEG); + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_NEG, NAND4, SCF_EDA_NAND_NEG); + + EDA_PIN_ADD_PIN(NAND2, SCF_EDA_NAND_OUT, NAND3, SCF_EDA_NAND_IN1); + EDA_PIN_ADD_PIN(NAND3, SCF_EDA_NAND_OUT, NAND2, SCF_EDA_NAND_IN1); + + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_OUT, NAND2, SCF_EDA_NAND_IN0); + EDA_PIN_ADD_PIN(NAND1, SCF_EDA_NAND_OUT, NAND3, SCF_EDA_NAND_IN0); + + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_IN1, NAND1, SCF_EDA_NAND_IN1); + + EDA_PIN_ADD_PIN(NAND4, SCF_EDA_NAND_IN0, NAND4, SCF_EDA_NAND_IN1); + EDA_PIN_ADD_PIN(NAND4, SCF_EDA_NAND_IN0, NAND0, SCF_EDA_NAND_IN0); + EDA_PIN_ADD_PIN(NAND4, SCF_EDA_NAND_OUT, NAND1, SCF_EDA_NAND_IN0); + + NAND0->pins[SCF_EDA_NAND_POS]->flags = SCF_EDA_PIN_POS; + NAND0->pins[SCF_EDA_NAND_NEG]->flags = SCF_EDA_PIN_NEG; + + NAND0->pins[SCF_EDA_NAND_POS]->ic_lid = SCF_EDA_DFF_POS; + NAND0->pins[SCF_EDA_NAND_NEG]->ic_lid = SCF_EDA_DFF_NEG; + + NAND4->pins[SCF_EDA_NAND_IN0]->flags = SCF_EDA_PIN_IN | SCF_EDA_PIN_IN0; + NAND0->pins[SCF_EDA_NAND_IN1]->flags = SCF_EDA_PIN_IN; + NAND2->pins[SCF_EDA_NAND_OUT]->flags = SCF_EDA_PIN_OUT; + NAND3->pins[SCF_EDA_NAND_OUT]->flags = SCF_EDA_PIN_CF; + + NAND4->pins[SCF_EDA_NAND_IN0]->ic_lid = SCF_EDA_DFF_IN; + NAND0->pins[SCF_EDA_NAND_IN1]->ic_lid = SCF_EDA_DFF_CK; + NAND2->pins[SCF_EDA_NAND_OUT]->ic_lid = SCF_EDA_DFF_OUT; + + int ret = ses_layout_function(f, 100); + if (ret < 0) + return ret; + + ses_draw(f, "ttl_dff.png", f->x, f->y, f->w, f->h, 0, -1); + + long len = 0; + uint8_t* buf = NULL; + + ScfEfunction_pack(f, &buf, &len); + ScfEfunction_free(f); + f = NULL; + + FILE* fp = fopen("./ttl_dff.cpk", "wb"); + if (!fp) + return -EINVAL; + + fwrite(buf, len, 1, fp); + fclose(fp); + return 0; +} diff --git a/cpk/ttl_dff.cpk b/cpk/ttl_dff.cpk new file mode 100644 index 0000000000000000000000000000000000000000..7bbdaafaf20129cc46d635392ad7607e52ea215b GIT binary patch literal 1432 zcmZvcy>8S{5QWF~0Jj)LQ@F4tYvlq(TOgFAG+;%PR8gu_n*x*uiY@X8RH>*^^9U&@ zsqzGQ0&2<>L7;#v&WwG%Ypt)eo2>Wj%=zZ$9$a32I{$ES@$&upBjr@%MO4>JfrJ$Q zZ%&u3pT2(cZPlKo?dOarA!1^!nF9+er^`-K54fMU z-&0o!iABSoD55d#Rr>A_Pw{(&&k#aAi8Ur{N=i0Kkk$;}`V%%jxC|D3qv^7{XJ(`+ zM=;O?!rQiJ{nwD1G7@nPBF(onKeBs^vv@?xo`(f-z_T5vPqw%oak!u$p_qtbvi2dF z;4s1EKB9xdXn?Xy^UsXFJ){vQ%;4NbRpdduKsv4J$!~AtDnV7vpM(ltwVHUn`QxJ7 z1Swsm)@c#lnjkdWLz$}=Q=~w6xOg-qF(mYU2kD^eYd;dn3{ezCAVFPO=jw_Mp{@=D zmjP{@0a{#}Q~N@tItI`jbyFJj_P}|E`gub!bF0A)jy|zDv0B7U(jA^*m>`Ng8k#-0 zRk3A?r^{|K-=bAAZjsLHTAvb&5LGt1fy2!FnlB9S6v`f6`P@CHrLBH{LoC0-2>a&5 zivbT3USfNOi(&btmmHN)7>fxo?ido4qS-^+(aqeh65`e|FyU^~lxUE!pgyD+c>;lFN9}EJxFj2uBa1rq=we`Y*#r8C7 He`fyybrY@j literal 0 HcmV?d00001 diff --git a/cpk/ttl_dff_test.c b/cpk/ttl_dff_test.c new file mode 100644 index 0000000..186c9cb --- /dev/null +++ b/cpk/ttl_dff_test.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include"ses_core.h" + +int main(int argc, char* argv[]) +{ + ScfEcomponent* B; + + ScfEcomponent* DFF; + ScfEcomponent* AND; + ScfEcomponent* CLK; + + ScfEfunction* f; + ScfEboard* b; + + b = scf_eboard__alloc(); + f = scf_efunction__alloc("dff_test"); + + EDA_INST_ADD_COMPONENT(f, B, SCF_EDA_Battery); + EDA_INST_ADD_COMPONENT(f, DFF, SCF_EDA_DFF); + EDA_INST_ADD_COMPONENT(f, AND, SCF_EDA_AND); + EDA_INST_ADD_COMPONENT(f, CLK, SCF_EDA_NAND); + + B->pins[SCF_EDA_Battery_NEG]->flags = SCF_EDA_PIN_NEG; + B->pins[SCF_EDA_Battery_POS]->flags = SCF_EDA_PIN_POS; + + EDA_PIN_ADD_PIN(DFF, SCF_EDA_DFF_POS, B, SCF_EDA_Battery_POS); + EDA_PIN_ADD_PIN(AND, SCF_EDA_AND_POS, B, SCF_EDA_Battery_POS); + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NAND_POS, B, SCF_EDA_Battery_POS); + + EDA_PIN_ADD_PIN(DFF, SCF_EDA_DFF_NEG, B, SCF_EDA_Battery_NEG); + EDA_PIN_ADD_PIN(AND, SCF_EDA_AND_NEG, B, SCF_EDA_Battery_NEG); + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NAND_NEG, B, SCF_EDA_Battery_NEG); + + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NAND_IN0, CLK, SCF_EDA_NAND_IN1); + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NAND_IN0, AND, SCF_EDA_AND_IN0); + EDA_PIN_ADD_PIN(CLK, SCF_EDA_NAND_OUT, AND, SCF_EDA_AND_IN1); + EDA_PIN_ADD_PIN(AND, SCF_EDA_AND_OUT, DFF, SCF_EDA_DFF_CK); + + DFF->pins[SCF_EDA_DFF_IN ]->flags = SCF_EDA_PIN_IN | SCF_EDA_PIN_IN0; + CLK->pins[SCF_EDA_NAND_IN0]->flags = SCF_EDA_PIN_IN; + DFF->pins[SCF_EDA_DFF_OUT ]->flags = SCF_EDA_PIN_OUT; + + CLK->model = SCF_EDA_TTL_DELAY; + + scf_eboard__add_function(b, f); + + long len = 0; + uint8_t* buf = NULL; + + ScfEboard_pack(b, &buf, &len); + ScfEboard_free(b); + b = NULL; + + FILE* fp = fopen("./dff_test.cpk", "wb"); + if (!fp) + return -EINVAL; + + fwrite(buf, len, 1, fp); + fclose(fp); + return 0; +} diff --git a/cpk/ttl_not_delay.c b/cpk/ttl_not_delay.c new file mode 100644 index 0000000..ff685ce --- /dev/null +++ b/cpk/ttl_not_delay.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include"ses_core.h" + +int main(int argc, char* argv[]) +{ + ScfEcomponent* NAND0; + ScfEcomponent* NAND1; + ScfEcomponent* NAND2; + + ScfEfunction* f = scf_efunction__alloc("ttl_not_delay.cpk"); + + EDA_INST_ADD_COMPONENT(f, NAND0, SCF_EDA_NAND); + EDA_INST_ADD_COMPONENT(f, NAND1, SCF_EDA_NAND); + EDA_INST_ADD_COMPONENT(f, NAND2, SCF_EDA_NAND); + + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_POS, NAND1, SCF_EDA_NAND_POS); + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_POS, NAND2, SCF_EDA_NAND_POS); + + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_NEG, NAND1, SCF_EDA_NAND_NEG); + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_NEG, NAND2, SCF_EDA_NAND_NEG); + + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_IN0, NAND0, SCF_EDA_NAND_IN1); + EDA_PIN_ADD_PIN(NAND1, SCF_EDA_NAND_IN0, NAND1, SCF_EDA_NAND_IN1); + EDA_PIN_ADD_PIN(NAND2, SCF_EDA_NAND_IN0, NAND2, SCF_EDA_NAND_IN1); + + EDA_PIN_ADD_PIN(NAND0, SCF_EDA_NAND_OUT, NAND1, SCF_EDA_NAND_IN0); + EDA_PIN_ADD_PIN(NAND1, SCF_EDA_NAND_OUT, NAND2, SCF_EDA_NAND_IN0); + + NAND0->pins[SCF_EDA_NAND_POS]->flags = SCF_EDA_PIN_POS; + NAND0->pins[SCF_EDA_NAND_NEG]->flags = SCF_EDA_PIN_NEG; + + NAND0->pins[SCF_EDA_NAND_POS]->ic_lid = SCF_EDA_NOT_POS; + NAND0->pins[SCF_EDA_NAND_NEG]->ic_lid = SCF_EDA_NOT_NEG; + + NAND0->pins[SCF_EDA_NAND_IN0]->flags = SCF_EDA_PIN_IN | SCF_EDA_PIN_IN0; + NAND2->pins[SCF_EDA_NAND_OUT]->flags = SCF_EDA_PIN_OUT; + + NAND0->pins[SCF_EDA_NAND_IN0]->ic_lid = SCF_EDA_NOT_IN; + NAND2->pins[SCF_EDA_NAND_OUT]->ic_lid = SCF_EDA_NOT_OUT; + + int ret = ses_layout_function(f, 100); + if (ret < 0) + return ret; + + ses_draw(f, "ttl_not_delay.png", f->x, f->y, f->w, f->h, 0, -1); + + long len = 0; + uint8_t* buf = NULL; + + ScfEfunction_pack(f, &buf, &len); + ScfEfunction_free(f); + f = NULL; + + FILE* fp = fopen("./ttl_not_delay.cpk", "wb"); + if (!fp) + return -EINVAL; + + fwrite(buf, len, 1, fp); + fclose(fp); + return 0; +} diff --git a/cpk/ttl_not_delay.cpk b/cpk/ttl_not_delay.cpk new file mode 100644 index 0000000000000000000000000000000000000000..ec34e092baebc59abd8c02106ef1e6970726956c GIT binary patch literal 854 zcmZuvyH3ME5L_o)Y;lUNaB*&|d;mg_(uE5uN=hms9;t{(iZqlUhyUA>LGa6ssA6`#y$xxqSBI;Wv!Mi@2?(}0` ztgf;oKkpDlL`-ZgvoJm?9AFOtHb^{5NV1-g!TTS`zAGqQX8~jo#3fpGd&++4a*MGb zCMRZ0Q_P!ZE4 za`dFd@{35Bcul~y=q{c;s;E$?gI(h)&!!tHffnwa9Vyqsi*n@DP(togcjir2D#4G4 z9X122xkU&M5=2#j29+5ZoArJG`)LA;1Te-Z #include"ses_core.h" -char* component_types[SCF_EDA_Components_NB] = -{ - "None", - "Battery", - "Resistor", - "Capacitor", - "Inductor", - "Diode", - "NPN", - "PNP", -}; - static void print_board(ScfEboard* b) { ScfEcomponent* c; @@ -304,7 +292,7 @@ int main(int argc, char* argv[]) f = b->functions[i]; printf("f: %s\n", f->name); - ses_steps_analyse(f, 100LL, 25); + ses_steps_analyse(f, 100LL, 1); } ScfEboard_free(b); diff --git a/scf_eda_pack.c b/scf_eda_pack.c index a798e62..3529462 100644 --- a/scf_eda_pack.c +++ b/scf_eda_pack.c @@ -28,6 +28,13 @@ static int component_pins[SCF_EDA_Components_NB] = SCF_EDA_IF_NB, SCF_EDA_MLA_NB, + SCF_EDA_ADC_NB, + + SCF_EDA_DFF_NB, + + SCF_EDA_Signal_NB, + + SCF_EDA_OP_AMP_NB, }; static int __diode_path_off(ScfEpin* p0, ScfEpin* p1, int flags) @@ -266,6 +273,70 @@ static int __ttl_mla_shared(ScfEpin* p, int flags) return 1; } +static int __ttl_adc_path_off(ScfEpin* p0, ScfEpin* p1, int flags) +{ + if (SCF_EDA_ADC_NEG == p0->id) + return 1; + if (flags && (SCF_EDA_ADC_CI <= p0->id && p0->id <= SCF_EDA_ADC_IN1)) + return 1; + + if (SCF_EDA_ADC_POS == p0->id) { + if (p1 && (SCF_EDA_ADC_CI <= p1->id && p1->id <= SCF_EDA_ADC_IN1)) + return 1; + } else { + if (p1) { + if (!flags + && (SCF_EDA_ADC_CI <= p0->id && p0->id <= SCF_EDA_ADC_IN1) + && (SCF_EDA_ADC_OUT == p1->id && p1->id <= SCF_EDA_ADC_CF)) + return 0; + + if (SCF_EDA_ADC_NEG != p1->id) + return 1; + } + } + return 0; +} + +static int __ttl_adc_shared(ScfEpin* p, int flags) +{ + if (!flags) { + if (SCF_EDA_ADC_OUT == p->id && p->id <= SCF_EDA_ADC_CF) + return 0; + } + return 1; +} + +static int __741_op_amp_path_off(ScfEpin* p0, ScfEpin* p1, int flags) +{ + if (SCF_EDA_OP_AMP_NEG == p0->id) + return 1; + + if (SCF_EDA_OP_AMP_POS == p0->id) { + if (p1 && (SCF_EDA_OP_AMP_IN == p1->id || SCF_EDA_OP_AMP_INVERT == p1->id)) + return 1; + } else { + if (p1) { + if (!flags + && (SCF_EDA_OP_AMP_IN == p0->id || SCF_EDA_OP_AMP_INVERT == p0->id) + && SCF_EDA_OP_AMP_OUT == p1->id) + return 0; + + if (SCF_EDA_OP_AMP_NEG != p1->id) + return 1; + } + } + return 0; +} + +static int __741_op_amp_shared(ScfEpin* p, int flags) +{ + if (!flags) { + if (SCF_EDA_OP_AMP_OUT == p->id) + return 0; + } + return 1; +} + static ScfEops __diode_ops = { __diode_path_off, @@ -331,10 +402,23 @@ static ScfEops __ttl_mla_ops = __ttl_mla_shared, }; +static ScfEops __ttl_adc_ops = +{ + __ttl_adc_path_off, + __ttl_adc_shared, +}; + +static ScfEops __741_op_amp_ops = +{ + __741_op_amp_path_off, + __741_op_amp_shared, +}; + static ScfEdata component_datas[] = { {SCF_EDA_None, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL}, {SCF_EDA_Battery, 0, 0, 0, 0, 1e-9, 1e9, 0, 0, NULL, NULL, NULL}, + {SCF_EDA_Signal, 0, 0, 0, 0, 1e-9, 1e9, 0, 0, NULL, NULL, NULL}, {SCF_EDA_Resistor, 0, 0, 0, 0, 1e4, 0, 0, 0, NULL, NULL, NULL}, {SCF_EDA_Capacitor, 0, 0, 0, 0, 10, 0.1, 0, 0, NULL, NULL, NULL}, @@ -350,12 +434,19 @@ static ScfEdata component_datas[] = {SCF_EDA_OR, 0, 0, 0, 0, 0, 0, 0, 0, &__ttl_gate_ops, "./cpk/ttl_or.cpk", NULL}, {SCF_EDA_NOR, 0, 0, 0, 0, 0, 0, 0, 0, &__ttl_gate_ops, "./cpk/ttl_nor.cpk", NULL}, {SCF_EDA_XOR, 0, 0, 0, 0, 0, 0, 0, 0, &__ttl_gate_ops, "./cpk/ttl_xor.cpk", NULL}, + {SCF_EDA_DFF, 0, 0, 0, 0, 0, 0, 0, 0, &__ttl_gate_ops, "./cpk/ttl_dff.cpk", NULL}, + {SCF_EDA_ADD, 0, 0, 0, 0, 0, 0, 0, 0, &__ttl_add_ops, "./cpk/ttl_add.cpk", NULL}, + {SCF_EDA_ADC, 0, 0, 0, 0, 0, 0, 0, 0, &__ttl_adc_ops, "./cpk/ttl_adc.cpk", NULL}, {SCF_EDA_NAND4, 0, 0, 0, 0, 0, 0, 0, 0, &__ttl_nand4_ops, "./cpk/ttl_nand4.cpk", NULL}, {SCF_EDA_AND2_OR, 0, 0, 0, 0, 0, 0, 0, 0, &__ttl_and2_or_ops, "./cpk/ttl_and2_or.cpk", NULL}, {SCF_EDA_IF, 0, 0, 0, 0, 0, 0, 0, 0, &__ttl_if_ops, "./cpk/ttl_if.cpk", NULL}, {SCF_EDA_MLA, 0, 0, 0, 0, 0, 0, 0, 0, &__ttl_mla_ops, "./cpk/ttl_mla.cpk", NULL}, + + {SCF_EDA_NOT, SCF_EDA_TTL_DELAY, 0, 0, 0, 0, 0, 0, 0, &__ttl_not_ops, "./cpk/ttl_not_delay.cpk", NULL}, + + {SCF_EDA_OP_AMP, 0, 0, 0, 0, 0, 0, 0, 0, &__741_op_amp_ops, "./cpk/op_amp_741.cpk", NULL}, }; static ScfEdata pin_datas[] = @@ -447,8 +538,10 @@ int scf_econn__del_cid(ScfEconn* ec, uint64_t cid) ec->n_cids--; p = realloc(ec->cids, sizeof(uint64_t) * ec->n_cids); - if (p) - ec->cids = p; + if (!p && ec->n_cids) + return -ENOMEM; + + ec->cids = p; return 0; } } @@ -511,8 +604,10 @@ int scf_eline__del_line(ScfEline* el, ScfLine* l) el->n_lines--; p = realloc(el->lines, sizeof(ScfLine*) * el->n_lines); - if (p) - el->lines = p; + if (!p && el->n_lines > 0) + return -ENOMEM; + + el->lines = p; return 0; } } @@ -560,8 +655,10 @@ int scf_eline__del_pin(ScfEline* el, uint64_t cid, uint64_t pid) el->n_pins -= 2; p = realloc(el->pins, sizeof(uint64_t) * el->n_pins); - if (p) - el->pins = p; + if (!p && el->n_pins > 0) + return -EINVAL; + + el->pins = p; return 0; } } @@ -608,8 +705,10 @@ int scf_eline__del_conn(ScfEline* el, ScfEconn* ec) el->n_conns--; p = realloc(el->conns, sizeof(ScfEconn*) * el->n_conns); - if (p) - el->conns = p; + if (!p && el->n_conns > 0) + return -EINVAL; + + el->conns = p; return 0; } } @@ -664,8 +763,10 @@ int scf_epin__del_component(ScfEpin* pin, uint64_t cid, uint64_t pid) pin->n_tos -= 2; p = realloc(pin->tos, sizeof(uint64_t) * pin->n_tos); - if (p) - pin->tos = p; + if (!p && pin->n_tos > 0) + return -ENOMEM; + + pin->tos = p; return 0; } } @@ -778,8 +879,10 @@ int scf_ecomponent__del_pin(ScfEcomponent* c, ScfEpin* pin) c->n_pins--; p = realloc(c->pins, sizeof(ScfEpin*) * c->n_pins); - if (p) - c->pins = p; + if (!p && c->n_pins > 0) + return -ENOMEM; + + c->pins = p; return 0; } } @@ -818,18 +921,75 @@ int scf_efunction__add_component(ScfEfunction* f, ScfEcomponent* c) return 0; } +static int __efunction__del_component(ScfEfunction* f, ScfEcomponent* c) +{ + ScfEcomponent* c2; + ScfEline* el; + ScfEpin* p; + + long i; + long j; + long k; + + for (i = 0; i < f->n_elines; i++) { + el = f->elines[i]; + + for (j = 0; j + 1 < el->n_pins; ) { + + if (el->pins[j] == c->id) + assert(0 == scf_eline__del_pin(el, c->id, el->pins[j + 1])); + else { + if (el->pins[j] > c->id) + el->pins[j]--; + + j += 2; + } + } + } + + for (i = 0; i < f->n_components; i++) { + c2 = f->components[i]; + + if (c2 == c) + continue; + + if (c2->id > c->id) + c2->id--; + + for (j = 0; j < c2->n_pins; j++) { + p = c2->pins[j]; + + for (k = 0; k + 1 < p->n_tos; ) { + + if (p->tos[k] == c->id) + assert(0 == scf_epin__del_component(p, c->id, p->tos[k + 1])); + else { + if (p->tos[k] > c->id) + p->tos[k]--; + + k += 2; + } + } + + if (p->cid > c->id) + p->cid--; + } + } +} + int scf_efunction__del_component(ScfEfunction* f, ScfEcomponent* c) { if (!f || !c) return -EINVAL; - size_t i; - size_t j; - void* p; + void* p; + long i; + long j; for (i = 0; i < f->n_components; i++) { if (f->components[i] == c) { + __efunction__del_component(f, c); for (j = i + 1; j < f->n_components; j++) f->components[j - 1] = f->components[j]; @@ -837,8 +997,10 @@ int scf_efunction__del_component(ScfEfunction* f, ScfEcomponent* c) f->n_components--; p = realloc(f->components, sizeof(ScfEcomponent*) * f->n_components); - if (p) - f->components = p; + if (!p && f->n_components > 0) + return -EINVAL; + + f->components = p; return 0; } } @@ -879,8 +1041,10 @@ int scf_efunction__del_eline(ScfEfunction* f, ScfEline* el) f->n_elines--; p = realloc(f->elines, sizeof(ScfEline*) * f->n_elines); - if (p) - f->elines = p; + if (!p && f->n_elines > 0) + return -ENOMEM; + + f->elines = p; return 0; } } @@ -928,8 +1092,10 @@ int scf_eboard__del_function(ScfEboard* b, ScfEfunction* f) b->n_functions--; p = realloc(b->functions, sizeof(ScfEfunction*) * b->n_functions); - if (p) - b->functions = p; + if (!p && b->n_functions > 0) + return -ENOMEM; + + b->functions = p; return 0; } } @@ -980,7 +1146,7 @@ int scf_pins_same_line(ScfEfunction* f) qsort(p->tos, p->n_tos / 2, sizeof(uint64_t) * 2, epin_cmp); - for (k = 0; k < p->n_tos; k += 2) { + for (k = 0; k + 1 < p->n_tos; k += 2) { if (p->tos[k] == c->id) scf_logw("c%ldp%ld connect to its own pin %ld\n", c->id, p->id, p->tos[k + 1]); } diff --git a/scf_eda_pack.h b/scf_eda_pack.h index 6c76b8e..f4d1581 100644 --- a/scf_eda_pack.h +++ b/scf_eda_pack.h @@ -30,6 +30,14 @@ enum { SCF_EDA_IF, SCF_EDA_MLA, + SCF_EDA_ADC, + + SCF_EDA_DFF, // D flip flop + + SCF_EDA_Signal, + + SCF_EDA_OP_AMP, + SCF_EDA_Components_NB, }; @@ -41,9 +49,12 @@ enum { #define SCF_EDA_PIN_CF 16 #define SCF_EDA_PIN_BORDER 32 #define SCF_EDA_PIN_SHIFT 64 -#define SCF_EDA_PIN_IN0 128 -#define SCF_EDA_PIN_DIV0 256 -#define SCF_EDA_PIN_KEY 512 +#define SCF_EDA_PIN_IN0 128 +#define SCF_EDA_PIN_DIV0 256 +#define SCF_EDA_PIN_KEY 512 +#define SCF_EDA_PIN_DELAY 1024 +#define SCF_EDA_PIN_CK 2048 +#define SCF_EDA_PIN_GND 4096 #define SCF_EDA_V_INIT -10001001.0 #define SCF_EDA_V_MIN -10000000.0 @@ -64,6 +75,14 @@ enum { SCF_EDA_Battery_NB, }; +#define SCF_EDA_Signal_SIN 0 +#define SCF_EDA_Signal_DC 1 +enum { + SCF_EDA_Signal_NEG, + SCF_EDA_Signal_POS, + SCF_EDA_Signal_NB, +}; + enum { SCF_EDA_Diode_NEG, SCF_EDA_Diode_POS, @@ -91,6 +110,7 @@ enum { SCF_EDA_PNP_NB = SCF_EDA_NPN_NB, }; +#define SCF_EDA_TTL_DELAY 1 enum { SCF_EDA_NOT_NEG, SCF_EDA_NOT_POS, @@ -156,6 +176,28 @@ enum { SCF_EDA_XOR_NB, }; +enum { + SCF_EDA_OP_AMP_NEG = SCF_EDA_NAND_NEG, + SCF_EDA_OP_AMP_POS = SCF_EDA_NAND_POS, + + SCF_EDA_OP_AMP_IN = SCF_EDA_NAND_IN0, + SCF_EDA_OP_AMP_INVERT = SCF_EDA_NAND_IN1, + SCF_EDA_OP_AMP_OUT = SCF_EDA_NAND_OUT, + + SCF_EDA_OP_AMP_NB, +}; + +enum { + SCF_EDA_DFF_NEG = SCF_EDA_NAND_NEG, + SCF_EDA_DFF_POS = SCF_EDA_NAND_POS, + + SCF_EDA_DFF_IN = SCF_EDA_NAND_IN0, + SCF_EDA_DFF_CK = SCF_EDA_NAND_IN1, + SCF_EDA_DFF_OUT = SCF_EDA_NAND_OUT, + + SCF_EDA_DFF_NB, +}; + enum { SCF_EDA_ADD_NEG = SCF_EDA_NAND_NEG, SCF_EDA_ADD_POS = SCF_EDA_NAND_POS, @@ -168,6 +210,19 @@ enum { SCF_EDA_ADD_NB, }; +enum { + SCF_EDA_ADC_NEG, + SCF_EDA_ADC_POS, + + SCF_EDA_ADC_CI, + SCF_EDA_ADC_IN0, + SCF_EDA_ADC_IN1, + SCF_EDA_ADC_OUT, + SCF_EDA_ADC_CF, + + SCF_EDA_ADC_NB, +}; + enum { SCF_EDA_NAND4_NEG, SCF_EDA_NAND4_POS, @@ -574,4 +629,33 @@ int scf_pins_same_line(ScfEfunction* f); #define EDA_PIN_ADD_PIN_EF(_ef, _p0, _p1) \ EDA_PIN_ADD_PIN((_ef)->components[(_p0)->cid], (_p0)->id, (_ef)->components[(_p1)->cid], (_p1)->id) + +static char* component_types[SCF_EDA_Components_NB] = +{ + "None", + "Battery", + + "Resistor", + "Capacitor", + "Inductor", + + "Diode", + "NPN", + "PNP", + + "NAND", + "NOR", + "NOT", + + "AND", + "OR", + "XOR", + + "ADD", + + "NAND4", + "AND2_OR", + "IF", + "MLA", +}; #endif diff --git a/ses_core.h b/ses_core.h index 5d6bcbe..ec5a8e4 100644 --- a/ses_core.h +++ b/ses_core.h @@ -9,6 +9,7 @@ typedef struct ses_step_s ses_step_t; typedef struct ses_path_s ses_path_t; typedef struct ses_edge_s ses_edge_t; typedef struct ses_node_s ses_node_t; +typedef struct ses_group_s ses_group_t; typedef struct ses_ctx_s ses_ctx_t; @@ -87,15 +88,14 @@ struct ses_node_s { scf_vector_t* edges; - double v; - double a; - double a0; - ScfEline* el; - int index; - int vip_i; - ses_path_t* path; +}; + +struct ses_group_s +{ + scf_vector_t* nodes; + scf_vector_t* edges; }; struct ses_ctx_s @@ -115,37 +115,40 @@ struct ses_step_s }; -void ses_eline_print(ScfEline* el); -void ses_pin_print(ScfEpin* p); -void ses_IC_print(ScfEcomponent* c); +void ses_eline_print(ScfEline* el); +void ses_pin_print(ScfEpin* p); +void ses_IC_print(ScfEcomponent* c); + +ses_path_t* ses_path_alloc(); +void ses_path_free (ses_path_t* path); +void ses_path_print(ses_path_t* path); +ses_path_t* ses_path_ref (ses_path_t* src); +int ses_path_xchg (ses_path_t* path0, int k0, ses_path_t* path1, int k1); -ses_path_t* ses_path_alloc(); -void ses_path_free (ses_path_t* path); -void ses_path_print(ses_path_t* path); -ses_path_t* ses_path_ref (ses_path_t* src); -int ses_path_xchg (ses_path_t* path0, int k0, ses_path_t* path1, int k1); +int ses_path_add (ScfEfunction* f, ses_path_t* path, ses_path_t* child); -int ses_path_add (ScfEfunction* f, ses_path_t* path, ses_path_t* child); +int ses_path_is_child(ScfEfunction* f, ses_path_t* parent, ses_path_t* child); +ses_path_t* ses_path_find_child(ses_path_t* path, int m, int n); +ses_path_t* ses_path_find_bridge(ses_path_t* path, int m, int n); +void ses_path_sort_childs(ses_path_t* path); -int ses_path_is_child(ScfEfunction* f, ses_path_t* parent, ses_path_t* child); -ses_path_t* ses_path_find_child(ses_path_t* path, int m, int n); -ses_path_t* ses_path_find_bridge(ses_path_t* path, int m, int n); -void ses_path_sort_childs(ses_path_t* path); +ses_edge_t* ses_edge_alloc(ses_path_t* path, int first, int last); +void ses_edge_free (ses_edge_t* edge); +void ses_edge_print(ses_edge_t* edge); -ses_edge_t* ses_edge_alloc(ses_path_t* path, int first, int last); -void ses_edge_free (ses_edge_t* edge); -void ses_edge_print(ses_edge_t* edge); +ses_node_t* ses_node_alloc(); +void ses_node_free (ses_node_t* node); +void ses_node_print(ses_node_t* node); -ses_node_t* ses_node_alloc(); -void ses_node_free (ses_node_t* node); -void ses_node_print(ses_node_t* node); +void ses_nodes_free (scf_vector_t* nodes); +void ses_nodes_print(scf_vector_t* nodes); +void ses_paths_print(scf_vector_t* paths); -void ses_nodes_free (scf_vector_t* nodes); -void ses_nodes_print(scf_vector_t* nodes); -void ses_paths_print(scf_vector_t* paths); +ses_group_t* ses_group_alloc(); +void ses_group_free (ses_group_t* group); -ses_ctx_t* ses_ctx_alloc(); -void ses_ctx_free (ses_ctx_t* ctx); +ses_ctx_t* ses_ctx_alloc(); +void ses_ctx_free (ses_ctx_t* ctx); void ses_components_print(ScfEfunction* f); void ses_elines_print (ScfEfunction* f); @@ -164,8 +167,8 @@ int ses_draw(ScfEfunction* f, const char* file, uint32_t bx, uint32_t by, uint32 int __ses_path_va_branch(ScfEfunction* f, ses_path_t* path, int m, int n, double pr, int* changed, int64_t ps, int64_t count); -int __ses_nodes_path (ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, scf_vector_t** pnodes, scf_vector_t** pedges); -int __ses_nodes_path_solve(ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, int* changed, int64_t ps, int64_t count); +int __ses_nodes_paths (ScfEfunction* f, scf_vector_t* paths, scf_vector_t** pnodes, scf_vector_t** pedges); +int __ses_nodes_paths_solve(ScfEfunction* f, scf_vector_t* paths, int* changed, int64_t ps, int64_t count); int __ses_path_jr(ScfEfunction* f, ses_path_t* path); void __ses_path_pr(ScfEfunction* f, ses_path_t* path, int i, int j, ses_path_t* child, double* r); @@ -208,6 +211,20 @@ static inline int ses_same_line(ScfEpin* p0, ScfEpin* p1) #define SES_LINE_POS(p) (ses_top_pline(p)->flags & SCF_EDA_PIN_POS) #define SES_LINE_NEG(p) (ses_top_pline(p)->flags & SCF_EDA_PIN_NEG) +static inline ScfEline* ses_find_line_by_flag(ScfEfunction* f, uint64_t flag) +{ + ScfEline* el; + long i; + + for (i = 0; i < f->n_elines; i++) { + el = f->elines[i]; + + if (el->flags & flag) + return el; + } + return NULL; +} + static inline int ses_same_line_in_path(ScfEpin* p, ses_path_t* path) { ScfEline* el = ses_top_pline(p); diff --git a/ses_layout.c b/ses_layout.c index 794bef0..32ba885 100644 --- a/ses_layout.c +++ b/ses_layout.c @@ -56,6 +56,9 @@ int ses_layout_draw(ScfEboard* b, uint32_t bx, uint32_t by, uint32_t bw, uint32_ else if (SCF_EDA_PIN_CF & el->flags) SHOW_COLOR(cr, 0.8, 0, 0.8); + + else if (SCF_EDA_PIN_GND & el->flags) + SHOW_COLOR(cr, 0.0, 0, 0.5); else SHOW_COLOR(cr, 1, 0.5, 0.1); @@ -94,6 +97,18 @@ int ses_layout_draw(ScfEboard* b, uint32_t bx, uint32_t by, uint32_t bw, uint32_ cairo_show_text(cr, text); cairo_stroke(cr); } + + if (el->flags & SCF_EDA_PIN_GND) { + cairo_move_to(cr, l->x0, l->y0); + cairo_line_to(cr, l->x0, l->y0 + 8); + cairo_move_to(cr, l->x0 - 6, l->y0 + 8); + cairo_line_to(cr, l->x0 + 6, l->y0 + 8); + cairo_move_to(cr, l->x0 - 4, l->y0 + 12); + cairo_line_to(cr, l->x0 + 4, l->y0 + 12); + cairo_move_to(cr, l->x0 - 2, l->y0 + 16); + cairo_line_to(cr, l->x0 + 2, l->y0 + 16); + cairo_stroke(cr); + } } cairo_set_line_width(cr, 3); diff --git a/ses_layout_function.c b/ses_layout_function.c index 3d643ce..58410fb 100644 --- a/ses_layout_function.c +++ b/ses_layout_function.c @@ -14,8 +14,11 @@ static inline int LAYOUT_P0(ScfEcomponent* c) case SCF_EDA_AND: case SCF_EDA_AND2_OR: case SCF_EDA_ADD: + case SCF_EDA_ADC: case SCF_EDA_IF: case SCF_EDA_MLA: + case SCF_EDA_DFF: + case SCF_EDA_OP_AMP: k = 2; break; default: @@ -420,15 +423,22 @@ static void __ses_layout_key_components(ScfEfunction* f) if (SCF_EDA_NAND4 != c->type && SCF_EDA_IF != c->type && SCF_EDA_ADD != c->type + && SCF_EDA_ADC != c->type && SCF_EDA_MLA != c->type && SCF_EDA_AND2_OR != c->type) continue; - j = LAYOUT_P0(c); - p = c->pins[j]; - - int n = __ses_find_eline_index(f, p->lid); + int n; int k; + for (j = LAYOUT_P0(c); j < c->n_pins; j++) { + p = c->pins[j]; + + n = __ses_find_eline_index(f, p->lid); + + if (!(f->elines[n]->flags & SCF_EDA_PIN_POS)) + break; + } + assert(j < c->n_pins); f->elines[n]->flags |= SCF_EDA_PIN_KEY; @@ -437,6 +447,9 @@ static void __ses_layout_key_components(ScfEfunction* f) k = __ses_find_eline_index(f, p->lid); + if (f->elines[k]->flags & SCF_EDA_PIN_POS) + continue; + f->elines[k]->flags |= SCF_EDA_PIN_KEY; n = eline_mov_before(f, n, k); @@ -1025,6 +1038,8 @@ static void __ses_set_xy(ScfEfunction* f, int d) case SCF_EDA_OR: case SCF_EDA_NOR: case SCF_EDA_XOR: + case SCF_EDA_DFF: + case SCF_EDA_OP_AMP: __set_xy_by_pins(c, SCF_EDA_NAND_IN0, SCF_EDA_NAND_OUT); c->pins[SCF_EDA_NAND_POS]->x = c->x; @@ -1108,15 +1123,39 @@ static void __ses_set_xy(ScfEfunction* f, int d) c->pins[SCF_EDA_ADD_NEG]->x = c->x; if (0 == n) { - c->pins[SCF_EDA_ADD_IN0]->x = c->x - d / 4; + c->pins[SCF_EDA_ADD_IN0]->x = c->x - d * 3 / 4; c->pins[SCF_EDA_ADD_IN1]->x = c->x + d / 4; c->pins[SCF_EDA_ADD_OUT]->x = c->x + d * 3 / 4; - c->pins[SCF_EDA_ADD_CF ]->x = c->x - d * 3 / 4; + c->pins[SCF_EDA_ADD_CF ]->x = c->x - d / 4; } else { - c->pins[SCF_EDA_ADD_IN0]->x = c->x + d / 4; + c->pins[SCF_EDA_ADD_IN0]->x = c->x + d * 3 / 4; c->pins[SCF_EDA_ADD_IN1]->x = c->x - d / 4; c->pins[SCF_EDA_ADD_OUT]->x = c->x - d * 3 / 4; - c->pins[SCF_EDA_ADD_CF ]->x = c->x + d * 3 / 4; + c->pins[SCF_EDA_ADD_CF ]->x = c->x + d / 4; + } + break; + + case SCF_EDA_ADC: + c->x = c->pins[SCF_EDA_ADC_CF]->x; + c->y = c->pins[SCF_EDA_ADC_CF]->y + d / 2; + + c->pins[SCF_EDA_ADC_POS]->x = c->x; + c->pins[SCF_EDA_ADC_NEG]->x = c->x; + + if (0 == n) { + c->pins[SCF_EDA_ADC_CI ]->x = c->x - d * 3 / 4; + c->pins[SCF_EDA_ADC_IN0]->x = c->x - d / 4; + c->pins[SCF_EDA_ADC_IN1]->x = c->x + d / 4; + + c->pins[SCF_EDA_ADC_OUT]->x = c->x + d * 3 / 4; + c->pins[SCF_EDA_ADC_CF ]->x = c->x - d / 4; + } else { + c->pins[SCF_EDA_ADC_CI ]->x = c->x + d * 3 / 4; + c->pins[SCF_EDA_ADC_IN0]->x = c->x + d / 4; + c->pins[SCF_EDA_ADC_IN1]->x = c->x - d / 4; + + c->pins[SCF_EDA_ADC_OUT]->x = c->x - d * 3 / 4; + c->pins[SCF_EDA_ADC_CF ]->x = c->x + d / 4; } break; default: @@ -1302,11 +1341,14 @@ static void __ses_set_cx(ScfEfunction* f, int d) || SCF_EDA_NAND4 == c->type || SCF_EDA_NAND4 == c2->type || SCF_EDA_AND == c->type || SCF_EDA_AND == c2->type || SCF_EDA_ADD == c->type || SCF_EDA_ADD == c2->type + || SCF_EDA_ADC == c->type || SCF_EDA_ADC == c2->type || SCF_EDA_OR == c->type || SCF_EDA_OR == c2->type || SCF_EDA_XOR == c->type || SCF_EDA_XOR == c2->type + || SCF_EDA_DFF == c->type || SCF_EDA_DFF == c2->type || SCF_EDA_NOR == c->type || SCF_EDA_NOR == c2->type || SCF_EDA_IF == c->type || SCF_EDA_IF == c2->type || SCF_EDA_MLA == c->type || SCF_EDA_MLA == c2->type + || SCF_EDA_OP_AMP == c->type || SCF_EDA_OP_AMP == c2->type || SCF_EDA_AND2_OR == c->type || SCF_EDA_AND2_OR == c2->type) c->x = c2->x + d * 2; else @@ -1412,11 +1454,14 @@ static void __ses_min_cx(ScfEfunction* f, int d) || SCF_EDA_NAND4 == c->type || SCF_EDA_NAND4 == mt || SCF_EDA_AND == c->type || SCF_EDA_AND == mt || SCF_EDA_ADD == c->type || SCF_EDA_ADD == mt + || SCF_EDA_ADC == c->type || SCF_EDA_ADC == mt || SCF_EDA_OR == c->type || SCF_EDA_OR == mt || SCF_EDA_XOR == c->type || SCF_EDA_XOR == mt + || SCF_EDA_DFF == c->type || SCF_EDA_DFF == mt || SCF_EDA_NOR == c->type || SCF_EDA_NOR == mt || SCF_EDA_IF == c->type || SCF_EDA_IF == mt || SCF_EDA_MLA == c->type || SCF_EDA_MLA == mt + || SCF_EDA_OP_AMP == c->type || SCF_EDA_OP_AMP == mt || SCF_EDA_AND2_OR == c->type || SCF_EDA_AND2_OR == mt) c->x = max + d * 2; else @@ -1450,11 +1495,14 @@ static void __ses_min_cx(ScfEfunction* f, int d) case SCF_EDA_AND: case SCF_EDA_AND2_OR: case SCF_EDA_ADD: + case SCF_EDA_ADC: case SCF_EDA_OR: case SCF_EDA_XOR: + case SCF_EDA_DFF: case SCF_EDA_NOR: case SCF_EDA_IF: case SCF_EDA_MLA: + case SCF_EDA_OP_AMP: c2 = c3; d2 = d * 2; break; @@ -1479,11 +1527,14 @@ static void __ses_min_cx(ScfEfunction* f, int d) case SCF_EDA_AND: case SCF_EDA_AND2_OR: case SCF_EDA_ADD: + case SCF_EDA_ADC: case SCF_EDA_OR: case SCF_EDA_XOR: + case SCF_EDA_DFF: case SCF_EDA_NOR: case SCF_EDA_IF: case SCF_EDA_MLA: + case SCF_EDA_OP_AMP: c->x = c2->x + d * 2; break; default: @@ -1526,9 +1577,11 @@ static void __ses_xchg_px(ScfEfunction* f, int d) d2 = d * 7 / 8; break; + case SCF_EDA_OP_AMP: case SCF_EDA_NAND: case SCF_EDA_NOR: case SCF_EDA_XOR: + case SCF_EDA_DFF: case SCF_EDA_OR: case SCF_EDA_AND: pb = c->pins[SCF_EDA_NAND_OUT]; @@ -1574,9 +1627,23 @@ static void __ses_xchg_px(ScfEfunction* f, int d) if (pc->x < c->x) { pc->x = c->x - d2; pe->x = c->x + d2; + + if (SCF_EDA_DFF == c->type) { + if (SCF_EDA_DFF_IN == pc->id) + pb->x = c->x - 8; + else + pb->x = c->x + 8; + } } else { pc->x = c->x + d2; pe->x = c->x - d2; + + if (SCF_EDA_DFF == c->type) { + if (SCF_EDA_DFF_IN == pc->id) + pb->x = c->x + 8; + else + pb->x = c->x - 8; + } } } } diff --git a/ses_node_analysis.c b/ses_node_analysis.c index cee9b24..d0d2310 100644 --- a/ses_node_analysis.c +++ b/ses_node_analysis.c @@ -37,16 +37,10 @@ ses_edge_t* ses_edges_find_edge_by_pin(scf_vector_t* edges, ScfEpin* vip) return NULL; } -int __ses_nodes_path2(ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, scf_vector_t* nodes, scf_vector_t* edges) +static int __ses_edges_path(ses_path_t* path, int vip_m, int vip_n, scf_vector_t* edges) { - ses_path_t* child; - ses_path_t* bridge; - ses_path_t* conn; - ses_edge_t* edge = NULL; ses_edge_t* edge2 = NULL; - ses_node_t* prev = NULL; - ses_node_t* node = NULL; ScfEcomponent* c; ScfEcomponent* c2; @@ -59,51 +53,11 @@ int __ses_nodes_path2(ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, s int j = vip_n; int k; - path->vflag = 1; - - if (path->connections) { - for (k = 0; k < path->connections->size; k++) { - conn = path->connections->data[k]; - - scf_logd("path: %d, conn: %d, vflag: %d\n", path->index, conn->index, conn->vflag); - if (conn->vflag) - continue; - - ret = __ses_nodes_path2(f, conn, 0, conn->pins->size - 1, nodes, edges); - if (ret < 0) - return ret; - } - } - - if (path->childs) { - for (k = 0; k < path->childs->size; k++) { - child = path->childs->data[k]; - - if (child->vflag) - continue; - - ret = __ses_nodes_path2(f, child, 0, child->pins->size - 1, nodes, edges); - if (ret < 0) - return ret; - } - } - - if (path->bridges) { - for (k = 0; k < path->bridges->size; k++) { - bridge = path->bridges->data[k]; - - if (bridge->vflag) - continue; - - ret = __ses_nodes_path2(f, bridge, 0, bridge->pins->size - 1, nodes, edges); - if (ret < 0) - return ret; - } - } - - scf_logd("path: %d, vflag: %d, vip_m: %d, vip_n: %d\n", path->index, path->vflag, vip_m, vip_n); + scf_logd("path: %d, vip_m: %d, vip_n: %d\n", path->index, vip_m, vip_n); + int node_flag = 0; int bflag = 0; + for (i = vip_n - 1; i >= vip_m; i -= 2) { p = path->pins->data[i]; @@ -128,119 +82,33 @@ int __ses_nodes_path2(ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, s case SCF_EDA_Capacitor: case SCF_EDA_Inductor: - if (!node) { - node = ses_node_alloc(); - if (!node) - return -ENOMEM; - } + node_flag = 1; break; default: if (i - 1 >= vip_m) { p2 = path->pins->data[i - 1]; c2 = p2->c; - if (SCF_EDA_Diode == c2->type && !node) { - node = ses_node_alloc(); - if (!node) - return -ENOMEM; - } + switch (c2->type) { + case SCF_EDA_Diode: + case SCF_EDA_Capacitor: + case SCF_EDA_Inductor: + node_flag = 1; + break; + default: + break; + }; } break; }; - if (path->childs) { - for (k = 0; k < path->childs->size; k++) { - child = path->childs->data[k]; - - if (child->parent_p0 == i) { -#define EDGE_ADD_UNIQUE(_path, _m) \ - if (!node) { \ - node = ses_node_alloc(); \ - if (!node) \ - return -ENOMEM; \ - } \ - edge = ses_edges_find_edge(edges, _path, _m); \ - if (edge) { \ - ret = scf_vector_add(node->edges, edge); \ - if (ret < 0) { \ - ses_node_free(node); \ - return ret; \ - } \ - } else { \ - scf_loge("\n"); \ - ses_node_free(node); \ - return -EINVAL; \ - } - - EDGE_ADD_UNIQUE(child, 0); - edge->node1 = node; - - } else if (child->parent_p1 == i - 1) { - - EDGE_ADD_UNIQUE(child, child->pins->size - 1); - edge->node0 = node; - } - } - } - - if (path->bridges) { - for (k = 0; k < path->bridges->size; k++) { - bridge = path->bridges->data[k]; - - if (bridge->parent_p0 == i) { - - EDGE_ADD_UNIQUE(bridge, 0); - edge->node1 = node; - - } else if (bridge->parent_p1 == i - 1) { - - EDGE_ADD_UNIQUE(bridge, bridge->pins->size - 1); - edge->node0 = node; - } - } - } - - if (path->connections) { - for (k = 0; k < path->connections->size; k++) { - conn = path->connections->data[k]; - - scf_logd("path: %d, conn: %d, i: %d, parent_p0: %d, parent_p1: %d\n", - path->index, conn->index, i, conn->parent_p0, conn->parent_p1); - - if (path == conn->conn0 && conn->parent_p0 == i) { - - EDGE_ADD_UNIQUE(conn, 0); - edge->node1 = node; - - } else if (path == conn->conn1 && conn->parent_p1 == i - 1) { - - EDGE_ADD_UNIQUE(conn, conn->pins->size - 1); - edge->node0 = node; - } - } - } - - if (!node) { + if (!node_flag) { if (i > vip_m) continue; - node = ses_node_alloc(); - if (!node) - return -ENOMEM; + node_flag = 1; } - ret = scf_vector_add(nodes, node); - if (ret < 0) { - ses_node_free(node); - return ret; - } - - p = path->pins->data[i]; - - node->vip_i = i; - node->path = path; - node->el = ses_top_pline(p); - edge = ses_edge_alloc(path, i, j); if (!edge) return -ENOMEM; @@ -252,21 +120,9 @@ int __ses_nodes_path2(ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, s } edge->index = edges->size - 1; - edge->node1 = node; edge->bflag = bflag; bflag = 0; - ret = scf_vector_add(node->edges, edge); - if (ret < 0) - return ret; - - if (prev) { - ret = scf_vector_add(prev->edges, edge); - if (ret < 0) - return ret; - edge->node0 = prev; - } - if (edge2) { if (edge ->bflag) { edge2->edge_b = edge; @@ -279,8 +135,7 @@ int __ses_nodes_path2(ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, s edge2 = NULL; } - prev = node; - node = NULL; + node_flag = 0; j = i - 1; } @@ -288,150 +143,110 @@ int __ses_nodes_path2(ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, s return 0; } -static void __ses_path_clear_vflag(ses_path_t* path) +static int __ses_get_node(ses_node_t** pnode, scf_vector_t* nodes, ScfEline* el) { - ses_path_t* child; - int k; - - path->vflag = 0; + ses_node_t* node; + int i; - if (path->connections) { - for (k = 0; k < path->connections->size; k++) { - child = path->connections->data[k]; + for (i = 0; i < nodes->size; i++) { + node = nodes->data[i]; - __ses_path_clear_vflag(child); + if (el == node->el) { + *pnode = node; + return 0; } } - if (path->childs) { - for (k = 0; k < path->childs->size; k++) { - child = path->childs->data[k]; + node = ses_node_alloc(); + if (!node) + return -ENOMEM; + node->index = nodes->size; + node->el = el; - __ses_path_clear_vflag(child); - } + int ret = scf_vector_add(nodes, node); + if (ret < 0) { + ses_node_free(node); + return ret; } - if (path->bridges) { - for (k = 0; k < path->bridges->size; k++) { - child = path->bridges->data[k]; - - __ses_path_clear_vflag(child); - } - } + *pnode = node; + return 0; } -int __ses_nodes_path(ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, scf_vector_t** pnodes, scf_vector_t** pedges) +static int __ses_nodes_edges(scf_vector_t* nodes, scf_vector_t* edges) { - scf_vector_t* nodes; - scf_vector_t* edges; - ses_node_t* node; - ses_edge_t* edge; + ses_edge_t* edge; + ScfEline* lm; + ScfEline* ln; + ScfEpin* pm; + ScfEpin* pn; int i; - int j; - - nodes = scf_vector_alloc(); - if (!nodes) - return -ENOMEM; - - edges = scf_vector_alloc(); - if (!edges) { - scf_vector_free(nodes); - return -ENOMEM; - } - - __ses_path_clear_vflag(path); - int ret = __ses_nodes_path2(f, path, vip_m, vip_n, nodes, edges); - if (ret < 0) - goto error; + for (i = 0; i < edges->size; i++) { + edge = edges->data[i]; - ScfEcomponent* B = f->components[0]; - ScfEpin* Bp = B->pins[SCF_EDA_Battery_POS]; - ScfEpin* Bn = B->pins[SCF_EDA_Battery_NEG]; - ScfEline* LP = ses_top_pline(Bp); - ScfEline* LN = ses_top_pline(Bn); - ScfEline* el; - ScfEpin* p; + pm = edge->path->pins->data[edge->vip_m]; + pn = edge->path->pins->data[edge->vip_n]; - for (i = 0; i < nodes->size; ) { - node = nodes->data[i]; + lm = ses_top_pline(pm); + ln = ses_top_pline(pn); - for (j = node->edges->size - 1; j >= 0; j--) { - edge = node->edges->data[j]; - - if (node->el == LP) { - assert(0 == scf_vector_del(node->edges, edge)); + if (!lm->vconst) { + int ret = __ses_get_node(&edge->node1, nodes, lm); + if (ret < 0) + return ret; - if (edge->node0 == node) - edge->node0 = NULL; - if (edge->node1 == node) - edge->node1 = NULL; - } else { - if (edge->node0 != node && edge->node1 != node) - assert(0 == scf_vector_del(node->edges, edge)); - } + ret = scf_vector_add(edge->node1->edges, edge); + if (ret < 0) + return ret; } - if (node->edges->size <= 0) { - assert(0 == scf_vector_del(nodes, node)); + if (!ln->vconst) { + int ret = __ses_get_node(&edge->node0, nodes, ln); + if (ret < 0) + return ret; - ses_node_free(node); - node = NULL; - } else { - node->index = i; - i++; + ret = scf_vector_add(edge->node0->edges, edge); + if (ret < 0) + return ret; } } - for (j = 0; j < edges->size; j++) { - edge = edges->data[j]; - - p = edge->path->pins->data[edge->vip_n]; - el = ses_top_pline(p); - - if (edge->node0 || el == LN) - continue; - - for (i = 0; i < nodes->size; i++) { - node = nodes->data[i]; - - if (el == node->el) { - edge->node0 = node; + return 0; +} - ret = scf_vector_add(node->edges, edge); - if (ret < 0) - goto error; - break; - } - } +int __ses_nodes_paths(ScfEfunction* f, scf_vector_t* paths, scf_vector_t** pnodes, scf_vector_t** pedges) +{ + scf_vector_t* nodes; + scf_vector_t* edges; + ses_path_t* path; - if (i >= nodes->size) { - node = ses_node_alloc(); - if (!node) { - ret = -ENOMEM; - goto error; - } - node->index = nodes->size; + int ret; + int i; - ret = scf_vector_add(nodes, node); - if (ret < 0) { - ses_node_free(node); - goto error; - } + nodes = scf_vector_alloc(); + if (!nodes) + return -ENOMEM; - node->vip_i = edge->vip_n; - node->path = edge->path; - node->el = el; + edges = scf_vector_alloc(); + if (!edges) { + scf_vector_free(nodes); + return -ENOMEM; + } - edge->node0 = node; + for (i = 0; i < paths->size; i++) { + path = paths->data[i]; - ret = scf_vector_add(node->edges, edge); - if (ret < 0) - goto error; - } + ret = __ses_edges_path(path, 0, path->pins->size - 1, edges); + if (ret < 0) + goto error; } + ret = __ses_nodes_edges(nodes, edges); + if (ret < 0) + goto error; + *pnodes = nodes; *pedges = edges; return 0; @@ -489,10 +304,6 @@ static void __ses_nodes_set_Ab(ScfEfunction* f, scf_vector_t* nodes, scf_vector_ { ses_node_t* node; ses_edge_t* edge; - - ScfEcomponent* B = f->components[0]; - ScfEpin* Bp = B->pins[SCF_EDA_Battery_POS]; - ScfEpin* Bn = B->pins[SCF_EDA_Battery_NEG]; ScfEpin* p0; ScfEpin* p1; @@ -528,6 +339,8 @@ static void __ses_nodes_set_Ab(ScfEfunction* f, scf_vector_t* nodes, scf_vector_ __ses_path_lc(f, edge->path, edge->vip_m, edge->vip_n, &cv, &lv, &uf, &uh, &la); + __ses_path_jr(f, edge->path); + p0 = edge->path->pins->data[edge->vip_m]; p1 = edge->path->pins->data[edge->vip_n]; @@ -573,15 +386,15 @@ static void __ses_nodes_set_Ab(ScfEfunction* f, scf_vector_t* nodes, scf_vector_ else A[(n + edge->index) * N + n + edge->index] = -r - uh * 1000000.0 / ps; - if (edge->node0 && edge->node0->el != ses_top_pline(Bn)) + if (edge->node0 && !edge->node0->el->vconst) A[(n + edge->index) * N + edge->node0->index] = -1; else - b[n + edge->index] += Bn->v; + b[n + edge->index] += ses_top_pline(p1)->v; - if (edge->node1 && edge->node1->el != ses_top_pline(Bp)) + if (edge->node1 && !edge->node1->el->vconst) A[(n + edge->index) * N + edge->node1->index] = 1; else - b[n + edge->index] -= Bp->v; + b[n + edge->index] -= ses_top_pline(p0)->v; } } @@ -631,9 +444,9 @@ static int __ses_edges_update_Ab(ScfEfunction* f, scf_vector_t* edges, double* A ScfEcomponent* c; ScfEcomponent* B = f->components[0]; ScfEpin* Bp = B->pins[SCF_EDA_Battery_POS]; - ScfEpin* Bn = B->pins[SCF_EDA_Battery_NEG]; ScfEpin* p0; ScfEpin* p1; + ScfEpin* p; int n = N - edges->size; int k = 0; @@ -649,15 +462,15 @@ static int __ses_edges_update_Ab(ScfEfunction* f, scf_vector_t* edges, double* A double Vb; double Ve; - if (edge->node1 && edge->node1->el != ses_top_pline(Bp)) + if (edge->node1 && !edge->node1->el->vconst) Vb = X[edge->node1->index]; else - Vb = Bp->v; + Vb = ses_top_pline(p0)->v; - if (edge->node0 && edge->node0->el != ses_top_pline(Bn)) + if (edge->node0 && !edge->node0->el->vconst) Ve = X[edge->node0->index]; else - Ve = Bn->v; + Ve = ses_top_pline(p1)->v; if (edge->bflag) { double dV = Vb - Ve; @@ -706,10 +519,12 @@ static int __ses_edges_update_Ab(ScfEfunction* f, scf_vector_t* edges, double* A double Ib = X[n + edge->edge_b->index]; double Vc = Vb; - if (edge->edge_b->node1 && edge->edge_b->node1->el != ses_top_pline(Bp)) + if (edge->edge_b->node1 && !edge->edge_b->node1->el->vconst) Vb = X[edge->edge_b->node1->index]; - else - Vb = Bp->v; + else { + p = edge->edge_b->path->pins->data[edge->edge_b->vip_m]; + Vb = ses_top_pline(p)->v; + } double dI = Ib * edge->hfe - Ic; double V = SCF_EDA_V_NPN_ON; @@ -745,17 +560,12 @@ static int __ses_edges_update_Ab(ScfEfunction* f, scf_vector_t* edges, double* A return k; } -static int __ses_nodes_path_solve2(ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, scf_vector_t* nodes, scf_vector_t* edges, int* changed, int64_t ps, int64_t count) +static int __ses_nodes_solve(ScfEfunction* f, scf_vector_t* nodes, scf_vector_t* edges, int* changed, int64_t ps, int64_t count) { ses_node_t* node; ses_edge_t* edge; ScfEcomponent* c; - ScfEcomponent* B = f->components[0]; - ScfEpin* Bp = B->pins[SCF_EDA_Battery_POS]; - ScfEpin* Bn = B->pins[SCF_EDA_Battery_NEG]; - ScfEpin* pm = path->pins->data[vip_m]; - ScfEpin* pn = path->pins->data[vip_n]; ScfEpin* p0; ScfEpin* p1; ScfEline* el; @@ -768,11 +578,6 @@ static int __ses_nodes_path_solve2(ScfEfunction* f, ses_path_t* path, int vip_m, int n = nodes->size; int N = n + m; - pm->v = ses_top_pline(pm)->v; - pn->v = ses_top_pline(pn)->v; - - scf_logi("c%ldp%ld->v: %lg, c%ldp%ld->v: %lg, n: %d, m: %d, N: %d\n", pm->cid, pm->id, pm->v, pn->cid, pn->id, pn->v, n, m, N); - double* A = calloc(N * N + N + N + (N + N + N * N + N * N), sizeof(double)); if (!A) return -ENOMEM; @@ -784,8 +589,6 @@ static int __ses_nodes_path_solve2(ScfEfunction* f, ses_path_t* path, int vip_m, double* V = S + N; double* U = V + N * N; - __ses_path_jr(f, path); - __ses_nodes_set_Ab(f, nodes, edges, ps, A, b, N); gsl_matrix_view _A = gsl_matrix_view_array(U, N, N); @@ -816,7 +619,9 @@ static int __ses_nodes_path_solve2(ScfEfunction* f, ses_path_t* path, int vip_m, for (i = 0; i < n; i++) { node = nodes->data[i]; el = node->el; - el->v = X[i]; + + if (!el->vconst) + el->v = X[i]; } if (n_offs > 0) { @@ -832,9 +637,6 @@ static int __ses_nodes_path_solve2(ScfEfunction* f, ses_path_t* path, int vip_m, // ses_AbX_print(A, b, X, N); - ScfEline* LP = ses_top_pline(Bp); - ScfEline* LN = ses_top_pline(Bn); - for (j = 0; j < edges->size; j++) { edge = edges->data[j]; @@ -844,13 +646,13 @@ static int __ses_nodes_path_solve2(ScfEfunction* f, ses_path_t* path, int vip_m, el = ses_top_pline(p0); p0->v = el->v; - if (el != LP && el != LN) - ses_line_set_v(c->pf->elines[p0->lid], p0->v); + if (!el->vconst) + ses_line_set_v(p0->c->pf->elines[p0->lid], p0->v); el = ses_top_pline(p1); p1->v = el->v; - if (el != LP && el != LN) - ses_line_set_v(c->pf->elines[p1->lid], p1->v); + if (!el->vconst) + ses_line_set_v(p1->c->pf->elines[p1->lid], p1->v); edge->a = X[n + edge->index]; #if 1 @@ -924,21 +726,126 @@ error: return ret; } -int __ses_nodes_path_solve(ScfEfunction* f, ses_path_t* path, int vip_m, int vip_n, int* changed, int64_t ps, int64_t count) +static int __ses_nodes_split(scf_vector_t* groups, scf_vector_t* nodes, scf_vector_t* edges) +{ + ses_group_t* g; + ses_node_t* node; + ses_edge_t* edge; + + while (nodes->size > 0) { + node = nodes->data[0]; + + g = ses_group_alloc(); + if (!g) + return -ENOMEM; + + int ret = scf_vector_add(g->nodes, node); + if (ret < 0) { + ses_group_free(g); + return ret; + } + node->index = 0; + + assert(0 == scf_vector_del(nodes, node)); + + int i; + int j; + for (i = 0; i < g->nodes->size; i++) { + node = g->nodes->data[i]; + + for (j = 0; j < node->edges->size; j++) { + edge = node->edges->data[j]; + + if (edge->node1 && !scf_vector_find(g->nodes, edge->node1)) { + edge->node1->index = g->nodes->size; + + ret = scf_vector_add(g->nodes, edge->node1); + if (ret < 0) { + ses_group_free(g); + return ret; + } + + assert(0 == scf_vector_del(nodes, edge->node1)); + } + + if (edge->node0 && !scf_vector_find(g->nodes, edge->node0)) { + edge->node0->index = g->nodes->size; + + ret = scf_vector_add_unique(g->nodes, edge->node0); + if (ret < 0) { + ses_group_free(g); + return ret; + } + + assert(0 == scf_vector_del(nodes, edge->node0)); + } + + if (!scf_vector_find(g->edges, edge)) { + edge->index = g->edges->size; + + ret = scf_vector_add(g->edges, edge); + if (ret < 0) { + ses_group_free(g); + return ret; + } + + assert(0 == scf_vector_del(edges, edge)); + } + } + } + + ret = scf_vector_add(groups, g); + if (ret < 0) { + ses_group_free(g); + return ret; + } + } + + assert(0 == nodes->size); + assert(0 == edges->size); + return 0; +} + +int __ses_nodes_paths_solve(ScfEfunction* f, scf_vector_t* paths, int* changed, int64_t ps, int64_t count) { scf_vector_t* nodes = NULL; scf_vector_t* edges = NULL; + scf_vector_t* groups; + ses_group_t* g; + + int ret; + int i; - int ret = __ses_nodes_path(f, path, vip_m, vip_n, &nodes, &edges); + groups = scf_vector_alloc(); + if (!groups) + return -ENOMEM; + + ret = __ses_nodes_paths(f, paths, &nodes, &edges); if (ret < 0) - return ret; - ses_nodes_print(nodes); + goto error; - ret = __ses_nodes_path_solve2(f, path, vip_m, vip_n, nodes, edges, changed, ps, count); + ret = __ses_nodes_split(groups, nodes, edges); + if (ret < 0) + goto error; + + for (i = 0; i < groups->size; i++) { + g = groups->data[i]; + + scf_logi("i: %d\n", i); + ses_nodes_print(g->nodes); + + ret = __ses_nodes_solve(f, g->nodes, g->edges, changed, ps, count); + if (ret < 0) + goto error; + } + +error: + scf_vector_clear(nodes, (void (*)(void*) )ses_node_free); + scf_vector_clear(edges, (void (*)(void*) )ses_edge_free); + scf_vector_clear(groups, (void (*)(void*) )ses_group_free); - scf_vector_clear(nodes, (void (*)(void*) )ses_node_free); - scf_vector_clear(edges, (void (*)(void*) )ses_edge_free); scf_vector_free(nodes); scf_vector_free(edges); + scf_vector_free(groups); return ret; } diff --git a/ses_step_ac_input.c b/ses_step_ac_input.c new file mode 100644 index 0000000..817cb47 --- /dev/null +++ b/ses_step_ac_input.c @@ -0,0 +1,53 @@ +#include"ses_core.h" + +static int _ac_input_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx_t* ctx) +{ + ScfEcomponent* c; + ScfEline* el0; + ScfEline* el1; + ScfEpin* p0; + ScfEpin* p1; + + long i; + + for (i = 0; i < f->n_components; i++) { + c = f->components[i]; + + if (SCF_EDA_Signal != c->type) + continue; + + c->v = 0.01 * sin(ps * count); + + p0 = c->pins[SCF_EDA_Signal_POS]; + p1 = c->pins[SCF_EDA_Signal_NEG]; + el0 = f->elines[p0->lid]; + el1 = f->elines[p1->lid]; + + if (!el0->vconst) { + if (!el1->vconst) { + el0->v = c->v / 2; + el1->v = -c->v / 2; + el0->vconst = 1; + el1->vconst = 1; + } else { + el0->v = el1->v + c->v; + el0->vconst = 1; + } + } else if (!el1->vconst) { + el1->v = el0->v - c->v; + el1->vconst = 1; + } else { + scf_loge("\n"); + return -EINVAL; + } + } + + return 0; +} + +ses_step_t ses_step_ac_input = +{ + .name = "ac_input", + + .handler = _ac_input_handler, +}; diff --git a/ses_step_battery.c b/ses_step_battery.c index dd9790e..ddf5a82 100644 --- a/ses_step_battery.c +++ b/ses_step_battery.c @@ -2,24 +2,63 @@ static int _battery_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx_t* ctx) { - ScfEcomponent* c; - ScfEline* el; - ScfEpin* p; - - c = f->components[0]; - c->v = 5; - - p = c->pins[SCF_EDA_Battery_POS]; - p->v = 5; - el = f->elines[p->lid]; - el->v = 5; - el->vconst = 1; - - p = c->pins[SCF_EDA_Battery_NEG]; - p ->v = 0; - el = f->elines[p->lid]; - el->v = 0; - el->vconst = 1; + ScfEcomponent* c; + ScfEline* el; + ScfEline* LP; + ScfEline* LN; + ScfEpin* Bp; + ScfEpin* Bn; + + long i; + for (i = 0; i < f->n_elines; i++) { + el = f->elines[i]; + el->vconst = 0; + } + + for (i = 0; i < f->n_components; i++) { + c = f->components[i]; + + if (SCF_EDA_Battery != c->type) + continue; + c->v = 5; + + Bp = c->pins[SCF_EDA_Battery_POS]; + Bn = c->pins[SCF_EDA_Battery_NEG]; + + LP = f->elines[Bp->lid]; + LN = f->elines[Bn->lid]; + + if (!LP->vconst) { + if (!LN->vconst) { + Bp->v = c->v; + Bn->v = 0; + + ses_line_set_v(LP, Bp->v); + ses_line_set_v(LN, 0); + + LP->vconst = 1; + LN->vconst = 1; + } else { + Bp->v = LN->v + c->v; + + ses_line_set_v(LP, Bp->v); + + LP->vconst = 1; + } + + } else if (!LN->vconst) { + Bn->v = LP->v - c->v; + + ses_line_set_v(LN, Bn->v); + + LN->vconst = 1; + + } else if (LP->v - LN->v != c->v) { + scf_loge("Battery '%lgV' connected between line '%lgV' and '%lgV', diff: %lgV\n", + c->v, LP->v, LN->v, LP->v - LN->v); + return -EINVAL; + } + } return 0; } diff --git a/ses_step_dc_diode.c b/ses_step_dc_diode.c index 8887ca9..79df91e 100644 --- a/ses_step_dc_diode.c +++ b/ses_step_dc_diode.c @@ -18,12 +18,8 @@ static void __dc_dfs_init(ScfEfunction* f, ScfEcomponent* IC) } else if (i < IC->n_pins) { p = IC->pins[i]; parent = IC->pf->elines[p->lid]; - - el->vconst = parent->vconst; continue; } - - el->vconst = 0; } for (i = 0; i < f->n_components; i++) { @@ -34,7 +30,7 @@ static void __dc_dfs_init(ScfEfunction* f, ScfEcomponent* IC) } } -static int __dc_diode_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, ScfEpin* Bn, ScfEline* LP, ScfEline* LN) +static int __dc_diode_status(ScfEfunction* root, ScfEfunction* f, ScfEline* LP, ScfEline* LN) { ScfEcomponent* c; ScfEpin* pb; @@ -47,7 +43,7 @@ static int __dc_diode_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, S c = f->components[i]; if (c->f) { - int ret = __dc_diode_status(root, c->f, Bp, Bn, LP, LN); + int ret = __dc_diode_status(root, c->f, LP, LN); if (ret < 0) return ret; @@ -105,7 +101,7 @@ static int __dc_diode_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, S pe->v = le->v; pb->v = le->v + SCF_EDA_V_Diode_ON; - if (pb->v > Bp->v) + if (pb->v > LP->v) c->status = SCF_EDA_Status_OFF; else c->status = SCF_EDA_Status_ON; @@ -115,10 +111,7 @@ static int __dc_diode_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, S pb->v = lb->v; pe->v = lb->v - SCF_EDA_V_Diode_ON; - if (lb->v == Bp->v) - le->vconst = 1; - - if (pe->v < Bn->v - 0.01) + if (pe->v < LN->v - 0.01) c->status = SCF_EDA_Status_OFF; else c->status = SCF_EDA_Status_ON; @@ -128,7 +121,7 @@ static int __dc_diode_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, S pb->v = le->v + SCF_EDA_V_Diode_ON; pe->v = le->v; - if (pb->v > Bp->v + 0.01) + if (pb->v > LP->v + 0.01) c->status = SCF_EDA_Status_OFF; else c->status = SCF_EDA_Status_ON; @@ -148,15 +141,12 @@ static int __dc_diode_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, S static int _dc_diode_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx_t* ctx) { - ScfEcomponent* B = f->components[0]; - ScfEpin* Bp = B->pins[SCF_EDA_Battery_POS]; - ScfEpin* Bn = B->pins[SCF_EDA_Battery_NEG]; - ScfEline* LP = ses_top_pline(Bp); - ScfEline* LN = ses_top_pline(Bn); + ScfEline* LP = ses_find_line_by_flag(f, SCF_EDA_PIN_POS); + ScfEline* LN = ses_find_line_by_flag(f, SCF_EDA_PIN_NEG); __dc_dfs_init(f, NULL); - return __dc_diode_status(f, f, Bp, Bn, LP, LN); + return __dc_diode_status(f, f, LP, LN); } ses_step_t ses_step_dc_diode = diff --git a/ses_step_dc_input.c b/ses_step_dc_input.c index de18d30..0bea384 100644 --- a/ses_step_dc_input.c +++ b/ses_step_dc_input.c @@ -12,7 +12,7 @@ static int _dc_input_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx long j; int k; - int x[] = {1, 1, 1, 0, 1}; + int x[] = {0, 0, 0, 0, 0}; int y[] = {0, 1, 0, 1, 0}; B = f->components[0]; @@ -26,16 +26,17 @@ static int _dc_input_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx continue; if (SCF_EDA_PIN_IN0 & el->flags) - k = x[el->io_lid]; + k = x[(count / 800) & 0x1]; else - k = y[el->io_lid]; - scf_logi("el->io_lid: %ld, k: %d\n", el->io_lid, k); + k = y[(count / 400) & 0x1]; el2 = f->elines[B->pins[k]->lid]; el->v = el2->v; el->vconst = 1; + scf_logi("el->io_lid: %ld, k: %d, v: %lg\n", el->io_lid, k, el->v); + for (j = 0; j + 1 < el->n_pins; j += 2) { c = f->components[el->pins[j]]; diff --git a/ses_step_dc_npn.c b/ses_step_dc_npn.c index 00af987..5974f39 100644 --- a/ses_step_dc_npn.c +++ b/ses_step_dc_npn.c @@ -1,6 +1,6 @@ #include"ses_core.h" -static int __dc_npn_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, ScfEpin* Bn, ScfEline* LP, ScfEline* LN) +static int __dc_npn_status(ScfEfunction* root, ScfEfunction* f, ScfEline* LP, ScfEline* LN) { ScfEcomponent* c; ScfEpin* pb; @@ -14,7 +14,7 @@ static int __dc_npn_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, Scf c = f->components[i]; if (c->f) { - int ret = __dc_npn_status(root, c->f, Bp, Bn, LP, LN); + int ret = __dc_npn_status(root, c->f, LP, LN); if (ret < 0) return ret; @@ -73,7 +73,7 @@ static int __dc_npn_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, Scf pe->v = le->v; pb->v = le->v + SCF_EDA_V_NPN_ON; - if (pb->v > Bp->v) + if (pb->v > LP->v) c->status = SCF_EDA_Status_OFF; else c->status = SCF_EDA_Status_ON; @@ -83,7 +83,7 @@ static int __dc_npn_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, Scf pb->v = lb->v; pe->v = lb->v - SCF_EDA_V_NPN_ON; - if (pe->v < Bn->v - 0.01) + if (pe->v < LN->v - 0.01) c->status = SCF_EDA_Status_OFF; else c->status = SCF_EDA_Status_ON; @@ -93,7 +93,7 @@ static int __dc_npn_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, Scf pb->v = le->v + SCF_EDA_V_NPN_ON; pb->v = lb->v; - if (pb->v > Bp->v + 0.01) + if (pb->v > LP->v + 0.01) c->status = SCF_EDA_Status_OFF; else c->status = SCF_EDA_Status_ON; @@ -113,13 +113,10 @@ static int __dc_npn_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, Scf static int _dc_npn_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx_t* ctx) { - ScfEcomponent* B = f->components[0]; - ScfEpin* Bp = B->pins[SCF_EDA_Battery_POS]; - ScfEpin* Bn = B->pins[SCF_EDA_Battery_NEG]; - ScfEline* LP = ses_top_pline(Bp); - ScfEline* LN = ses_top_pline(Bn); + ScfEline* LP = ses_find_line_by_flag(f, SCF_EDA_PIN_POS); + ScfEline* LN = ses_find_line_by_flag(f, SCF_EDA_PIN_NEG); - return __dc_npn_status(f, f, Bp, Bn, LP, LN); + return __dc_npn_status(f, f, LP, LN); } ses_step_t ses_step_dc_npn = diff --git a/ses_step_dc_pnp.c b/ses_step_dc_pnp.c index a2c8b41..a4e5186 100644 --- a/ses_step_dc_pnp.c +++ b/ses_step_dc_pnp.c @@ -1,6 +1,6 @@ #include"ses_core.h" -static int __dc_pnp_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, ScfEpin* Bn, ScfEline* LP, ScfEline* LN) +static int __dc_pnp_status(ScfEfunction* root, ScfEfunction* f, ScfEline* LP, ScfEline* LN) { ScfEcomponent* c; ScfEpin* pb; @@ -14,7 +14,7 @@ static int __dc_pnp_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, Scf c = f->components[i]; if (c->f) { - int ret = __dc_pnp_status(root, c->f, Bp, Bn, LP, LN); + int ret = __dc_pnp_status(root, c->f, LP, LN); if (ret < 0) return ret; @@ -55,7 +55,7 @@ static int __dc_pnp_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, Scf pe->v = le->v; pb->v = le->v - SCF_EDA_V_PNP_ON; - if (pb->v < Bn->v) + if (pb->v < LN->v) c->status = SCF_EDA_Status_OFF; else c->status = SCF_EDA_Status_ON; @@ -65,7 +65,7 @@ static int __dc_pnp_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, Scf pb->v = lb->v; pe->v = lb->v + SCF_EDA_V_PNP_ON; - if (pe->v > Bp->v + 0.01) + if (pe->v > LP->v + 0.01) c->status = SCF_EDA_Status_OFF; else c->status = SCF_EDA_Status_ON; @@ -75,7 +75,7 @@ static int __dc_pnp_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, Scf pb->v = le->v - SCF_EDA_V_PNP_ON; pe->v = le->v; - if (pb->v < Bn->v - 0.01) + if (pb->v < LN->v - 0.01) c->status = SCF_EDA_Status_OFF; else c->status = SCF_EDA_Status_ON; @@ -95,13 +95,10 @@ static int __dc_pnp_status(ScfEfunction* root, ScfEfunction* f, ScfEpin* Bp, Scf static int _dc_pnp_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx_t* ctx) { - ScfEcomponent* B = f->components[0]; - ScfEpin* Bp = B->pins[SCF_EDA_Battery_POS]; - ScfEpin* Bn = B->pins[SCF_EDA_Battery_NEG]; - ScfEline* LP = ses_top_pline(Bp); - ScfEline* LN = ses_top_pline(Bn); + ScfEline* LP = ses_find_line_by_flag(f, SCF_EDA_PIN_POS); + ScfEline* LN = ses_find_line_by_flag(f, SCF_EDA_PIN_NEG); - return __dc_pnp_status(f, f, Bp, Bn, LP, LN); + return __dc_pnp_status(f, f, LP, LN); } ses_step_t ses_step_dc_pnp = diff --git a/ses_step_draw.c b/ses_step_draw.c index 887b2c5..94d85be 100644 --- a/ses_step_draw.c +++ b/ses_step_draw.c @@ -128,6 +128,7 @@ void __ses_function_draw(ScfEfunction* f, cairo_t* cr) cairo_move_to(cr, c->x + 10, c->y + 8); break; + case SCF_EDA_OP_AMP: case SCF_EDA_NAND: case SCF_EDA_NAND4: case SCF_EDA_NOR: @@ -142,7 +143,9 @@ void __ses_function_draw(ScfEfunction* f, cairo_t* cr) cairo_move_to(cr, c->x + 6, c->y + 30); break; + case SCF_EDA_ADC: case SCF_EDA_ADD: + case SCF_EDA_DFF: n = snprintf(text, sizeof(text) - 1, "%ld", c->id); cairo_move_to(cr, c->x + 18, c->y); @@ -160,6 +163,12 @@ void __ses_function_draw(ScfEfunction* f, cairo_t* cr) cairo_move_to(cr, c->x + 6, c->y - 18); break; + + case SCF_EDA_Signal: + n = snprintf(text, sizeof(text) - 1, "%ld", c->id); + + cairo_move_to(cr, c->x + 12, c->y - 12); + break; default: n = snprintf(text, sizeof(text) - 1, "%ld", c->id); cairo_move_to(cr, c->x - 10 - n * 10, c->y - 12); @@ -592,6 +601,73 @@ void __ses_function_draw(ScfEfunction* f, cairo_t* cr) cairo_stroke(cr); break; +#define DRAW_GATE_PIN(_p, _x, _y0, _y1) \ + do { \ + cairo_move_to(cr, c->x + (_x), c->y + (_y0)); \ + cairo_line_to(cr, c->x + (_x), c->y + (_y1)); \ + cairo_line_to(cr, (_p)->x, c->y + (_y1)); \ + cairo_line_to(cr, (_p)->x, (_p)->y); \ + cairo_stroke(cr); \ + } while (0) + +#define DRAW_TEXT(_x, _y, _size, _text) \ + do { \ + cairo_set_font_size(cr, _size); \ + cairo_move_to(cr, _x, _y); \ + cairo_show_text(cr, _text); \ + cairo_stroke(cr); \ + } while (0) + + case SCF_EDA_OP_AMP: + p = c->pins[SCF_EDA_OP_AMP_OUT]; + p0 = c->pins[SCF_EDA_OP_AMP_IN]; + p1 = c->pins[SCF_EDA_OP_AMP_INVERT]; + + if (p->y < c->y) { + cairo_move_to(cr, p->x, p->y); + cairo_line_to(cr, c->x, c->y - 32); + cairo_line_to(cr, c->x - 16, c->y); + cairo_line_to(cr, c->x + 16, c->y); + cairo_line_to(cr, c->x, c->y - 32); + cairo_stroke(cr); + + if (p0->x < p1->x) { + DRAW_GATE_PIN(p0, -6, 0, 8); + DRAW_GATE_PIN(p1, 6, 0, 8); + + DRAW_TEXT(c->x - 9, c->y - 2, 12, "+"); + DRAW_TEXT(c->x + 4, c->y - 2, 12, "-"); + } else { + DRAW_GATE_PIN(p0, 6, 0, 8); + DRAW_GATE_PIN(p1, -6, 0, 8); + + DRAW_TEXT(c->x + 4, c->y - 2, 12, "+"); + DRAW_TEXT(c->x - 9, c->y - 2, 12, "-"); + } + } else { + cairo_move_to(cr, p->x, p->y); + cairo_line_to(cr, c->x, c->y + 32); + cairo_line_to(cr, c->x - 16, c->y); + cairo_line_to(cr, c->x + 16, c->y); + cairo_line_to(cr, c->x, c->y + 32); + cairo_stroke(cr); + + if (p0->x < p1->x) { + DRAW_GATE_PIN(p0, -6, 0, -8); + DRAW_GATE_PIN(p1, 6, 0, -8); + + DRAW_TEXT(c->x - 9, c->y + 2, 12, "+"); + DRAW_TEXT(c->x + 4, c->y + 2, 12, "-"); + } else { + DRAW_GATE_PIN(p0, 6, 0, -8); + DRAW_GATE_PIN(p1, -6, 0, -8); + + DRAW_TEXT(c->x + 4, c->y + 2, 12, "+"); + DRAW_TEXT(c->x - 9, c->y + 2, 12, "-"); + } + } + break; + case SCF_EDA_AND: case SCF_EDA_NAND: p = c->pins[SCF_EDA_NAND_OUT]; @@ -639,15 +715,6 @@ void __ses_function_draw(ScfEfunction* f, cairo_t* cr) if (p0->x > p1->x) SCF_XCHG(p0, p1); -#define DRAW_GATE_PIN(_p, _x, _y0, _y1) \ - do { \ - cairo_move_to(cr, c->x + (_x), c->y + (_y0)); \ - cairo_line_to(cr, c->x + (_x), c->y + (_y1)); \ - cairo_line_to(cr, (_p)->x, c->y + (_y1)); \ - cairo_line_to(cr, (_p)->x, (_p)->y); \ - cairo_stroke(cr); \ - } while (0) - if (c->y < p->y) { if (p0 == c->pins[SCF_EDA_NAND_IN1]) { DRAW_GATE_PIN(p1, 5, -6, -12); @@ -781,14 +848,6 @@ void __ses_function_draw(ScfEfunction* f, cairo_t* cr) } } -#define DRAW_TEXT(_x, _y, _size, _text) \ - do { \ - cairo_set_font_size(cr, _size); \ - cairo_move_to(cr, _x, _y); \ - cairo_show_text(cr, _text); \ - cairo_stroke(cr); \ - } while (0) - if (p0->x < c->x) { DRAW_GATE_PIN(p0, -23, 22, 28); DRAW_GATE_PIN(p1, -17, 22, 32); @@ -850,6 +909,72 @@ void __ses_function_draw(ScfEfunction* f, cairo_t* cr) cairo_stroke(cr); break; + case SCF_EDA_DFF: + cairo_rectangle(cr, c->x - 16, c->y - 12, 32, 24); + cairo_stroke(cr); + + p0 = c->pins[SCF_EDA_DFF_IN]; + p1 = c->pins[SCF_EDA_DFF_CK]; + p = c->pins[SCF_EDA_DFF_OUT]; + + if (p->y < c->y) { + if (p0->x < p1->x) { + DRAW_GATE_PIN(p, -8, -12, -28); + DRAW_GATE_PIN(p0, -8, 12, 20); + DRAW_GATE_PIN(p1, 8, 12, 20); + + DRAW_TEXT(c->x - 12, c->y + 9, 12, "D"); + + cairo_arc(cr, c->x + 8, c->y - 16, 3, 0, 2 * M_PI); + cairo_stroke(cr); +#define DRAW_GATE_CK(_dx, _dy0, _dy1) \ + do { \ + cairo_move_to(cr, c->x + (_dx) - 4, c->y + (_dy0)); \ + cairo_line_to(cr, c->x + (_dx), c->y + (_dy1)); \ + cairo_line_to(cr, c->x + (_dx) + 4, c->y + (_dy0)); \ + cairo_stroke(cr); \ + } while (0) + + DRAW_GATE_CK(8, 12, 5); + } else { + DRAW_GATE_PIN(p, 8, -12, -28); + DRAW_GATE_PIN(p0, 8, 12, 20); + DRAW_GATE_PIN(p1, -8, 12, 20); + + DRAW_TEXT(c->x + 4, c->y + 9, 12, "D"); + + cairo_arc(cr, c->x - 8, c->y - 16, 3, 0, 2 * M_PI); + cairo_stroke(cr); + + DRAW_GATE_CK(-8, 12, 5); + } + } else { + if (p0->x < p1->x) { + DRAW_GATE_PIN(p, -8, 12, 28); + DRAW_GATE_PIN(p0, -8, -12, -20); + DRAW_GATE_PIN(p1, 8, -12, -20); + + DRAW_TEXT(c->x - 12, c->y, 12, "D"); + + cairo_arc(cr, c->x + 8, c->y + 16, 3, 0, 2 * M_PI); + cairo_stroke(cr); + + DRAW_GATE_CK(8, -12, -5); + } else { + DRAW_GATE_PIN(p, 8, 12, 28); + DRAW_GATE_PIN(p0, 8, -12, -20); + DRAW_GATE_PIN(p1, -8, -12, -20); + + DRAW_TEXT(c->x + 4, c->y, 12, "D"); + + cairo_arc(cr, c->x - 8, c->y + 16, 3, 0, 2 * M_PI); + cairo_stroke(cr); + + DRAW_GATE_CK(-8, -12, -5); + } + } + break; + case SCF_EDA_ADD: cairo_rectangle(cr, c->x - 16, c->y - 14, 32, 28); cairo_stroke(cr); @@ -873,8 +998,41 @@ void __ses_function_draw(ScfEfunction* f, cairo_t* cr) DRAW_GATE_PIN(p1, 8, 14, 22); DRAW_GATE_PIN(p0, -8, 14, 22); - DRAW_TEXT(c->x - 12, c->y - 2, 12, "C0"); - DRAW_TEXT(c->x - 1, c->y - 2, 12, "Σ"); + DRAW_TEXT(c->x - 14, c->y - 2, 12, "C0"); + DRAW_TEXT(c->x + 5, c->y - 2, 12, "Σ"); + } + break; + + case SCF_EDA_ADC: + cairo_rectangle(cr, c->x - 16, c->y - 14, 32, 28); + cairo_stroke(cr); + + pc = c->pins[SCF_EDA_ADC_CF]; + p = c->pins[SCF_EDA_ADC_OUT]; + p2 = c->pins[SCF_EDA_ADC_IN1]; + p1 = c->pins[SCF_EDA_ADC_IN0]; + p0 = c->pins[SCF_EDA_ADC_CI]; + + if (c->x < pc->x) { + DRAW_GATE_PIN(pc, 8, -14, -22); + DRAW_GATE_PIN(p, -8, -14, -22); + DRAW_GATE_PIN(p2, -8, 14, 22); + DRAW_GATE_PIN(p1, 0, 14, 28); + DRAW_GATE_PIN(p0, 8, 14, 22); + + DRAW_TEXT(c->x - 1, c->y + 12, 12, "CI"); + DRAW_TEXT(c->x - 1, c->y - 2, 12, "C0"); + DRAW_TEXT(c->x - 12, c->y - 2, 12, "Σ"); + } else { + DRAW_GATE_PIN(pc, -8, -14, -22); + DRAW_GATE_PIN(p, 8, -14, -22); + DRAW_GATE_PIN(p2, 8, 14, 22); + DRAW_GATE_PIN(p1, 0, 14, 28); + DRAW_GATE_PIN(p0, -8, 14, 22); + + DRAW_TEXT(c->x - 14, c->y + 12, 12, "CI"); + DRAW_TEXT(c->x - 14, c->y - 2, 12, "C0"); + DRAW_TEXT(c->x + 5, c->y - 2, 12, "Σ"); } break; @@ -1089,6 +1247,45 @@ void __ses_function_draw(ScfEfunction* f, cairo_t* cr) } cairo_stroke(cr); break; + + case SCF_EDA_Signal: + p0 = c->pins[SCF_EDA_Signal_POS]; + p1 = c->pins[SCF_EDA_Signal_NEG]; + + if (p0->y > p1->y) { + SHOW_COLOR(cr, 0.0, 0.0, 0.8); + DRAW_TEXT(c->x + 2, c->y - 16, 18, "-"); + + SHOW_COLOR(cr, 0.8, 0.0, 0.0); + DRAW_TEXT(c->x + 2, c->y + 24, 18, "+"); + + SCF_XCHG(p0, p1); + } else { + SHOW_COLOR(cr, 0.8, 0.0, 0.0); + DRAW_TEXT(c->x + 2, c->y - 16, 18, "+"); + + SHOW_COLOR(cr, 0.0, 0.0, 0.8); + DRAW_TEXT(c->x + 2, c->y + 24, 18, "-"); + } + SHOW_COLOR(cr, 0.6, 0.6, 0.0); + + cairo_arc(cr, c->x, c->y, 14, 0, 2 * M_PI); + cairo_stroke(cr); + + cairo_move_to(cr, c->x, c->y - 14); + cairo_line_to(cr, p0->x, p0->y); + cairo_move_to(cr, c->x, c->y + 14); + cairo_line_to(cr, p1->x, p1->y); + cairo_stroke(cr); + + if (SCF_EDA_Signal_DC != c->type) { + cairo_arc(cr, c->x - 4, c->y, 4, -M_PI, 0); + cairo_stroke(cr); + + cairo_arc(cr, c->x + 4, c->y, 4, 0, M_PI); + cairo_stroke(cr); + } + break; default: break; }; @@ -1168,6 +1365,9 @@ int ses_draw(ScfEfunction* f, const char* file, uint32_t bx, uint32_t by, uint32 else if (SCF_EDA_PIN_CF & el->flags) SHOW_COLOR(cr, 0.8, 0, 0.8); + + else if (SCF_EDA_PIN_GND & el->flags) + SHOW_COLOR(cr, 0.0, 0, 0.5); else SHOW_COLOR(cr, 1, 0.5, 0.1); @@ -1205,6 +1405,18 @@ int ses_draw(ScfEfunction* f, const char* file, uint32_t bx, uint32_t by, uint32 cairo_show_text(cr, text); cairo_stroke(cr); } + + if (el->flags & SCF_EDA_PIN_GND) { + cairo_move_to(cr, l->x0, l->y0); + cairo_line_to(cr, l->x0, l->y0 + 8); + cairo_move_to(cr, l->x0 - 6, l->y0 + 8); + cairo_line_to(cr, l->x0 + 6, l->y0 + 8); + cairo_move_to(cr, l->x0 - 4, l->y0 + 12); + cairo_line_to(cr, l->x0 + 4, l->y0 + 12); + cairo_move_to(cr, l->x0 - 2, l->y0 + 16); + cairo_line_to(cr, l->x0 + 2, l->y0 + 16); + cairo_stroke(cr); + } } cairo_set_line_width(cr, 3); @@ -1347,11 +1559,15 @@ static int _draw_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx_t* fp = fopen("v.txt", "w"); if (fp) - fprintf(fp, "%ld, %lg\n", i, f->elines[4]->v); + fprintf(fp, "%ld, %lg, %lg, %lg\n", i, f->elines[2]->v, f->elines[9]->v, f->elines[8]->v); #endif - ses_draw(f, file, f->x, f->y, f->w, f->h, ps, count); + int j = count % 400; - __draw_IC(f, ps, count, i); + if (j > 396 || j < 20) { + ses_draw(f, file, f->x, f->y, f->w, f->h, ps, count); + +// __draw_IC(f, ps, count, i); + } i++; } diff --git a/ses_step_topo.c b/ses_step_topo.c index 588afae..192643e 100644 --- a/ses_step_topo.c +++ b/ses_step_topo.c @@ -2,8 +2,11 @@ static int __ses_dfs_add_ppath(scf_vector_t* paths, ses_path_t** ppath) { - ScfEpin* p; - int j; + ses_path_t* tmp; + ScfEpin* p; + ScfEpin* p1; + int j; + int k; if (*ppath) { if ((*ppath)->pins->size > 0) { @@ -16,6 +19,40 @@ static int __ses_dfs_add_ppath(scf_vector_t* paths, ses_path_t** ppath) p->pflag = 1; p->path = (uintptr_t)*ppath; } + + p1 = (*ppath)->pins->data[(*ppath)->pins->size - 1]; + + for (j = 0; j < (*ppath)->pins->size; j++) { + p = (*ppath)->pins->data[j]; + + if (p1 != p && ses_same_line(p1, p)) { + tmp = ses_path_alloc(); + if (!tmp) + return -ENOMEM; + + assert((*ppath)->pins->size > 2); + + p = (*ppath)->pins->data[(*ppath)->pins->size - 2]; + + if (scf_vector_add(tmp->pins, p) < 0) { + ses_path_free(tmp); + return -ENOMEM; + } + + if (scf_vector_add(tmp->pins, p1) < 0) { + ses_path_free(tmp); + return -ENOMEM; + } + + if (scf_vector_add(paths, tmp) < 0) { + ses_path_free(tmp); + return -ENOMEM; + } + + (*ppath)->pins->size -= 2; + break; + } + } } else ses_path_free(*ppath); *ppath = NULL; @@ -53,7 +90,7 @@ static int __ses_dfs_line(ScfEcomponent* rc, ScfEpin* np, scf_vector_t* __paths, c = rc->pf->components[el->pins[j]]; p = c->pins [el->pins[j + 1]]; - if (SCF_EDA_Battery == c->type) + if (SCF_EDA_Battery == c->type || SCF_EDA_Signal == c->type) continue; if (p->pflag) { @@ -865,7 +902,6 @@ static int __topo_fix_complete(ScfEfunction* f, scf_vector_t* paths, ses_path_t* int i; if (parent->childs) { - for (i = 0; i < parent->childs->size; ) { child = parent->childs->data[i]; @@ -883,7 +919,6 @@ static int __topo_fix_complete(ScfEfunction* f, scf_vector_t* paths, ses_path_t* } if (parent->bridges) { - for (i = 0; i < parent->bridges->size; ) { child = parent->bridges->data[i]; @@ -936,21 +971,17 @@ static int _topo_path_completes(ScfEfunction* f, scf_vector_t* paths) int k; int m; - for (i = 0; i < paths->size; ) { + for (i = 0; i < paths->size; i++) { path0 = paths->data[i]; p0 = path0->pins->data[0]; p1 = path0->pins->data[path0->pins->size - 1]; - if (!SES_LINE_NEG(p1)) { - i++; + if (!SES_LINE_NEG(p1)) continue; - } - if (SES_LINE_POS(p0)) { - i++; + if (SES_LINE_POS(p0)) continue; - } for (j = 0; j < paths->size; j++) { path1 = paths->data[j]; @@ -973,38 +1004,31 @@ static int _topo_path_completes(ScfEfunction* f, scf_vector_t* paths) for (m = 0; m < path0->pins->size; m += 2) { __p0 = path0->pins->data[m]; - if (ses_same_line(__p3, __p0)) - goto xchg; - } - } - } - - i++; - continue; -xchg: + if (!ses_same_line(__p3, __p0)) + continue; #if 1 - scf_logi("\033[36mconnect path: \033[0m"); - ses_pin_print(p2); - ses_pin_print(__p3); - printf("(%d)--", path1->pins->size); - ses_pin_print(__p0); - ses_pin_print(p1); - printf("(%d)\n", path0->pins->size); + scf_logi("\033[36mconnect path: \033[0m"); + ses_pin_print(p2); + ses_pin_print(__p3); + printf("(%d)--", path1->pins->size); + ses_pin_print(__p0); + ses_pin_print(p1); + printf("(%d)\n", path0->pins->size); #endif - int ret = __topo_path_xchg(f, paths, path0, m, path1, k + 1); - if (ret < 0) - return ret; + int ret = __topo_path_xchg(f, paths, path0, m, path1, k + 1); + if (ret < 0) + return ret; - if (path0->pins->size <= 0) { - if (scf_vector_del(paths, path0) < 0) - return -1; + if (path0->pins->size <= 0) { + assert(0 == scf_vector_del(paths, path0)); - ses_path_free(path0); - path0 = NULL; + ses_path_free(path0); + path0 = NULL; + } + return 0; + } + } } - - if (path0) - i++; } return 0; @@ -1449,7 +1473,7 @@ static int _topo_paths(ScfEline* el, scf_vector_t* paths, int flags) c = el->pf->components[el->pins[i]]; p = c->pins [el->pins[i + 1]]; - if (SCF_EDA_Battery == c->type) + if (SCF_EDA_Battery == c->type || SCF_EDA_Signal == c->type) continue; if (p->vflag) @@ -1670,11 +1694,6 @@ static int __topo_bridge_connections(ScfEfunction* f, scf_vector_t* paths, int f return 0; } -static int _topo_bridge_connections(ScfEfunction* f, scf_vector_t* paths) -{ - return __topo_bridge_connections(f, paths, 0); -} - static int _topo_paths_mov_top(ScfEfunction* f, scf_vector_t* paths, ses_path_t* parent, ses_path_t* child) { ses_path_t* path; @@ -1759,7 +1778,7 @@ static int _topo_path_parallel(ScfEfunction* f, scf_vector_t* paths) return 0; } -int __ses_topo_layers(ScfEfunction* f, scf_vector_t* paths) +int __ses_topo_layers(ScfEfunction* f, scf_vector_t* paths, int layout_flag) { ses_path_t* path; @@ -1792,6 +1811,12 @@ int __ses_topo_layers(ScfEfunction* f, scf_vector_t* paths) _topo_key_components(paths); + if (!layout_flag) { + ret = __topo_bridge_connections(f, paths, 1); + if (ret < 0) + return ret; + } + ret = _topo_path_neg(f, paths); if (ret < 0) return ret; @@ -1852,7 +1877,7 @@ int ses_layout_paths(ScfEfunction* f, scf_vector_t* paths) // ses_paths_print(paths, f); - return __ses_topo_layers(f, paths); + return __ses_topo_layers(f, paths, 1); } static int _topo_paths_lc(ScfEfunction* root, ScfEfunction* f, scf_vector_t* paths) @@ -1905,18 +1930,27 @@ static int _topo_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx_t* if (ret < 0) return ret; - ret = _topo_paths_lc(f, f, ctx->paths); - if (ret < 0) - return ret; // scf_logi("\n"); // ses_paths_print(ctx->paths); // scf_logi("\n\n"); - ret = __ses_topo_layers(f, ctx->paths); + el = f->elines[B->pins[SCF_EDA_Battery_NEG]->lid]; + + if (el->flags & SCF_EDA_PIN_GND) { + ret = _topo_paths(el, ctx->paths, 1); + if (ret < 0) + return ret; + } + + ret = _topo_paths_lc(f, f, ctx->paths); + if (ret < 0) + return ret; +#if 0 + ret = __ses_topo_layers(f, ctx->paths, 0); if (ret < 0) return ret; - ret = _topo_bridge_connections(f, ctx->paths); + ret = __topo_bridge_connections(f, ctx->paths, 0); if (ret < 0) return ret; @@ -1927,7 +1961,7 @@ static int _topo_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx_t* ret = _topo_path_leaf(f, ctx->paths); if (ret < 0) return ret; - +#endif ses_paths_print(ctx->paths); return 0; } diff --git a/ses_step_va.c b/ses_step_va.c index 33ea667..595cf2b 100644 --- a/ses_step_va.c +++ b/ses_step_va.c @@ -85,12 +85,6 @@ int __ses_path_va_branch(ScfEfunction* f, ses_path_t* path, int m, int n, double return 0; ScfEcomponent* c; - ScfEcomponent* B = f->components[0]; - ScfEpin* Bp = B->pins[SCF_EDA_Battery_POS]; - ScfEpin* Bn = B->pins[SCF_EDA_Battery_NEG]; - ScfEline* LP = ses_top_pline(Bp); - ScfEline* LN = ses_top_pline(Bn); - ScfEpin* p0 = path->pins->data[m]; ScfEpin* p1 = path->pins->data[n]; ScfEline* el; @@ -145,7 +139,7 @@ int __ses_path_va_branch(ScfEfunction* f, ses_path_t* path, int m, int n, double p->a = a; - if (el != LP && el != LN) { + if (!el->vconst) { el->v = p->v; ses_line_set_v(c->pf->elines[p->lid], p->v); } diff --git a/ses_step_va_nodes.c b/ses_step_va_nodes.c index 0b26bb7..d54560a 100644 --- a/ses_step_va_nodes.c +++ b/ses_step_va_nodes.c @@ -1,65 +1,12 @@ #include"ses_core.h" -int __ses_path_va_nodes(ScfEfunction* f, ses_path_t* path, int* changed, scf_vector_t* paths, int64_t ps, int64_t count) -{ - if (!path) - return -EINVAL; - - if (path->pins->size < 2) { - scf_loge("\n"); - return -EINVAL; - } - - ScfEpin* p0 = path->pins->data[0]; - ScfEpin* p1 = path->pins->data[path->pins->size - 1]; - - double _sr0 = p0->sr; - double _pr0 = p0->pr; - double _sr1 = p1->sr; - double _pr1 = p1->pr; - - p0->sr = 0; - p0->pr = 0; - p1->sr = path->sr; - p1->pr = path->pr; - - scf_logi("---------------\n"); - - int ret = __ses_nodes_path_solve(f, path, 0, path->pins->size - 1, changed, ps, count); - if (ret < 0) { - scf_loge("\n"); - return ret; - } - scf_logi("---------------\n\n"); - - p0->sr = _sr0; - p0->pr = _pr0; - p1->sr = _sr1; - p1->pr = _pr1; - return 0; -} - -static int ses_path_va_nodes(ScfEfunction* f, ses_path_t* path, int* changed, scf_vector_t* paths, int64_t ps, int64_t count) -{ - return __ses_path_va_nodes(f, path, changed, paths, ps, count); -} - static int _va_nodes_handler(ScfEfunction* f, int64_t ps, int64_t count, ses_ctx_t* ctx) { - ses_path_t* path; - int changed = 0; - int i; - - for (i = 0; i < ctx->paths->size; i++) { - path = ctx->paths->data[i]; - scf_logi("i: %d, path->index: %d\n", i, path->index); - - int ret = ses_path_va_nodes(f, path, &changed, ctx->paths, ps, count); - if (ret < 0) - return ret; - } + int ret = __ses_nodes_paths_solve(f, ctx->paths, &changed, ps, count); + if (ret < 0) + return ret; ctx->changed += changed; return 0; diff --git a/ses_steps.c b/ses_steps.c index 1bb8e8d..feefdd2 100644 --- a/ses_steps.c +++ b/ses_steps.c @@ -3,6 +3,7 @@ extern ses_step_t ses_step_battery; extern ses_step_t ses_step_dc_input; +extern ses_step_t ses_step_ac_input; extern ses_step_t ses_step_dc_diode; extern ses_step_t ses_step_dc_npn; @@ -22,6 +23,7 @@ static ses_step_t* ses_steps_0[] = &ses_step_battery, &ses_step_dc_input, +// &ses_step_ac_input, }; static ses_step_t* ses_steps_1[] = diff --git a/ses_utils.c b/ses_utils.c index 47811e5..a882aff 100644 --- a/ses_utils.c +++ b/ses_utils.c @@ -154,32 +154,39 @@ void ses_nodes_print(scf_vector_t* nodes) } } -void __ses_pn_dr(ScfEcomponent* c, ScfEpin* pb, ScfEpin* pe) +ses_group_t* ses_group_alloc() { - double v = pb->v - pe->v; - double r; + ses_group_t* g = calloc(1, sizeof(ses_group_t)); + if (!g) + return NULL; - if (v >= SCF_EDA_V_Diode_ON) { + g->nodes = scf_vector_alloc(); + if (!g->nodes) { + free(g); + return NULL; + } - ses_ui_r(&r, NULL, v, 0, pb->a, 0); - pe->dr = r - pe->r; + g->edges = scf_vector_alloc(); + if (!g->edges) { + scf_vector_free(g->nodes); + free(g); + return NULL; + } - } else if (v > SCF_EDA_V_Diode_OFF) - pe->dr = pb->r * (SCF_EDA_V_Diode_ON - SCF_EDA_V_Diode_OFF) / (v - SCF_EDA_V_Diode_OFF + 0.001); + return g; } -void __ses_npn_dr(ScfEcomponent* c, ScfEpin* pb, ScfEpin* pe) +void ses_group_free(ses_group_t* g) { - double v = pb->v - pe->v; - double r; - - if (v >= SCF_EDA_V_NPN_ON) { + if (g) { + scf_vector_clear(g->nodes, ( void (*)(void*) )ses_node_free); + scf_vector_free(g->nodes); - ses_ui_r(&r, NULL, v, 0, pb->a, 0); - pb->dr = r - pb->r; + scf_vector_clear(g->edges, ( void (*)(void*) )ses_edge_free); + scf_vector_free(g->edges); - } else if (v > SCF_EDA_V_NPN_OFF) - pb->dr = pb->r * (SCF_EDA_V_NPN_ON - SCF_EDA_V_NPN_OFF) / (v - SCF_EDA_V_NPN_OFF + 0.001); + free(g); + } } void ses_eline_print(ScfEline* el) diff --git a/test/Makefile b/test/Makefile index 938aaac..c27bb31 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,10 +1,13 @@ -CFILES += main.c +#CFILES += main.c #CFILES += test.c #CFILES += fft.c #CFILES += dct.c #CFILES += pnp.c #CFILES += colpitts.c #CFILES += astable_multivibrator.c +CFILES += two_battery.c +#CFILES += draw_timing.c + CFILES += ../scf_eda_pack.c CFILES += ../pack/scf_pack.c diff --git a/test/draw_timing.c b/test/draw_timing.c new file mode 100644 index 0000000..d62c6a5 --- /dev/null +++ b/test/draw_timing.c @@ -0,0 +1,74 @@ +#include +#include + +#define N 6400 + +#define W 1280 +#define H 720 + +#define PX 0.16 + +int main() +{ + FILE* fp = fopen("v.txt", "r"); + + cairo_surface_t* surface; + cairo_t* cr; + + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, W, H); + cr = cairo_create(surface); + + cairo_set_line_width(cr, 2); + cairo_set_source_rgb(cr, 1, 1, 1); + cairo_rectangle (cr, 0, 0, W, H); + cairo_fill(cr); + cairo_stroke(cr); + + cairo_select_font_face(cr, "Calibri", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); + cairo_set_font_size(cr, 20); + cairo_set_source_rgb(cr, 0, 0, 0); + + double in0 = 0.0; + double in = 0.0; + double time0 = 0.0; + double time = 0.0; + double out0 = 0.0; + double out = 0.0; + + int i; + int j; + + for (i = 0; i < N; i++) { + fscanf(fp, "%d, %lg, %lg, %lg", &j, &in, &time, &out); + + if (i > 10 && i < N) { + printf("i: %d, in: %lg, time: %lg, out: %lg\n", i, in, time, out); + + cairo_move_to(cr, 40 + PX * (i - 1), 200 - 20 * in0); + cairo_line_to(cr, 40 + PX * i, 200 - 20 * in); + cairo_stroke(cr); + + cairo_move_to(cr, 40 + PX * (i - 1), 400 - 20 * time0); + cairo_line_to(cr, 40 + PX * i, 400 - 20 * time); + cairo_stroke(cr); + + cairo_move_to(cr, 40 + PX * (i - 1), 600 - 20 * out0); + cairo_line_to(cr, 40 + PX * i, 600 - 20 * out); + cairo_stroke(cr); + } + + in0 = in; + time0 = time; + out0 = out; + } + + cairo_surface_write_to_png(surface, "timing.png"); + + cairo_destroy(cr); + cairo_surface_destroy(surface); + surface = NULL; + cr = NULL; + + fclose(fp); + return 0; +} diff --git a/test/two_battery.c b/test/two_battery.c new file mode 100644 index 0000000..418837d --- /dev/null +++ b/test/two_battery.c @@ -0,0 +1,87 @@ +#include +#include +#include +#include"ses_core.h" + +int main(int argc, char* argv[]) +{ + ScfEcomponent* B0; + ScfEcomponent* B1; + ScfEcomponent* R0; + ScfEcomponent* R1; + ScfEcomponent* D0; + ScfEcomponent* D1; + ScfEcomponent* T0; + ScfEcomponent* T1; + + ScfEcomponent* C; + ScfEcomponent* S; + ScfEcomponent* RL; + + ScfEboard* b = scf_eboard__alloc(); + ScfEfunction* f = scf_efunction__alloc("two_battery"); + + EDA_INST_ADD_COMPONENT(f, B0, SCF_EDA_Battery); + EDA_INST_ADD_COMPONENT(f, B1, SCF_EDA_Battery); + EDA_INST_ADD_COMPONENT(f, R0, SCF_EDA_Resistor); + EDA_INST_ADD_COMPONENT(f, R1, SCF_EDA_Resistor); + EDA_INST_ADD_COMPONENT(f, D0, SCF_EDA_Diode); + EDA_INST_ADD_COMPONENT(f, D1, SCF_EDA_Diode); + EDA_INST_ADD_COMPONENT(f, T0, SCF_EDA_NPN); + EDA_INST_ADD_COMPONENT(f, T1, SCF_EDA_PNP); + + EDA_INST_ADD_COMPONENT(f, C, SCF_EDA_Capacitor); + EDA_INST_ADD_COMPONENT(f, S, SCF_EDA_Signal); + EDA_INST_ADD_COMPONENT(f, RL, SCF_EDA_Resistor); + + B0->pins[SCF_EDA_Battery_POS]->flags = SCF_EDA_PIN_POS; +// B0->pins[SCF_EDA_Battery_NEG]->flags = SCF_EDA_PIN_NEG; +// B1->pins[SCF_EDA_Battery_POS]->flags = SCF_EDA_PIN_POS; + B1->pins[SCF_EDA_Battery_NEG]->flags = SCF_EDA_PIN_NEG; + + EDA_PIN_ADD_PIN(B0, SCF_EDA_Battery_POS, R0, 1); + EDA_PIN_ADD_PIN(R0, 0, D0, SCF_EDA_Diode_POS); + EDA_PIN_ADD_PIN(D0, SCF_EDA_Diode_NEG, D1, SCF_EDA_Diode_POS); + EDA_PIN_ADD_PIN(D1, SCF_EDA_Diode_NEG, R1, 1); + EDA_PIN_ADD_PIN(R1, 0, B1, SCF_EDA_Battery_NEG); + + EDA_PIN_ADD_PIN(B0, SCF_EDA_Battery_POS, T0, SCF_EDA_NPN_C); + EDA_PIN_ADD_PIN(T0, SCF_EDA_NPN_E, T1, SCF_EDA_PNP_E); + EDA_PIN_ADD_PIN(T1, SCF_EDA_PNP_C, B1, SCF_EDA_Battery_NEG); + + EDA_PIN_ADD_PIN(T0, SCF_EDA_NPN_B, D0, SCF_EDA_Diode_POS); + EDA_PIN_ADD_PIN(T1, SCF_EDA_PNP_B, D1, SCF_EDA_Diode_NEG); + + EDA_PIN_ADD_PIN(B0, SCF_EDA_Battery_NEG, B1, SCF_EDA_Battery_POS); + EDA_PIN_ADD_PIN(C, 0, D0, SCF_EDA_Diode_NEG); + + EDA_PIN_ADD_PIN(T0, SCF_EDA_NPN_E, RL, 1); + EDA_PIN_ADD_PIN(B0, SCF_EDA_Battery_NEG, RL, 0); + + EDA_PIN_ADD_PIN(S, SCF_EDA_Signal_NEG, B0, SCF_EDA_Battery_NEG); + EDA_PIN_ADD_PIN(S, SCF_EDA_Signal_POS, C, 1); + + C ->pins[1]->flags = SCF_EDA_PIN_IN | SCF_EDA_PIN_IN0; + T0->pins[SCF_EDA_NPN_E]->flags = SCF_EDA_PIN_OUT; + + R0->r = 1000; + R1->r = 1000; + RL->r = 10; + + scf_eboard__add_function(b, f); + + long len = 0; + uint8_t* buf = NULL; + + ScfEboard_pack(b, &buf, &len); + ScfEboard_free(b); + b = NULL; + + FILE* fp = fopen("./two_battery.cpk", "wb"); + if (!fp) + return -EINVAL; + + fwrite(buf, len, 1, fp); + fclose(fp); + return 0; +} diff --git a/test/v.txt b/test/v.txt index c72fc2a..8986d9a 100644 --- a/test/v.txt +++ b/test/v.txt @@ -1,1500 +1,6400 @@ -0, 0.00281274 -1, -0.00253098 -2, -0.75151 -3, -1.2427 -4, -1.68784 -5, -2.09123 -6, -2.451 -7, -2.78236 -8, -3.08264 -9, -3.35477 -10, -3.60137 -11, -3.64628 -12, -3.64764 -13, -3.64901 -14, -3.65038 -15, -3.65176 -16, -3.65314 -17, -3.65453 -18, -3.65593 -19, -3.65733 -20, -3.65874 -21, -3.66015 -22, -3.66156 -23, -3.66298 -24, -3.6644 -25, -3.66583 -26, -3.66726 -27, -3.66869 -28, -3.67012 -29, -3.67156 -30, -3.673 -31, -3.67444 -32, -3.67588 -33, -3.67733 -34, -3.67878 -35, -3.68023 -36, -3.68168 -37, -3.68314 -38, -3.6846 -39, -3.68605 -40, -3.68751 -41, -3.68898 -42, -3.69044 -43, -3.6919 -44, -3.69337 -45, -3.69484 -46, -3.6963 -47, -3.69777 -48, -3.69924 -49, -3.70072 -50, -3.70081 -51, -3.70231 -52, -3.70381 -53, -3.7053 -54, -3.70721 -55, -3.70874 -56, -3.71028 -57, -3.71183 -58, -3.7134 -59, -3.71497 -60, -3.71657 -61, -3.71819 -62, -3.71985 -63, -3.72158 -64, -3.72339 -65, -3.72537 -66, -3.72763 -67, -3.73049 -68, -3.72714 -69, -2.43478 -70, -1.63811 -71, -0.916781 -72, -0.263657 -73, 0.327712 -74, 0.863167 -75, 1.34799 -76, 1.78698 -77, 2.17853 -78, 2.53848 -79, 2.86439 -80, 3.15948 -81, 3.42666 -82, 3.53226 -83, 3.53359 -84, 3.53491 -85, 3.53625 -86, 3.53759 -87, 3.53893 -88, 3.54028 -89, 3.54164 -90, 3.543 -91, 3.54436 -92, 3.54573 -93, 3.5471 -94, 3.54848 -95, 3.54985 -96, 3.55123 -97, 3.55262 -98, 3.554 -99, 3.55539 -100, 3.55678 -101, 3.55818 -102, 3.55957 -103, 3.56097 -104, 3.56237 -105, 3.56377 -106, 3.56518 -107, 3.56658 -108, 3.56799 -109, 3.5694 -110, 3.57081 -111, 3.57222 -112, 3.57364 -113, 3.57505 -114, 3.57647 -115, 3.57788 -116, 3.5793 -117, 3.58072 -118, 3.58214 -119, 3.58356 -120, 3.58363 -121, 3.58508 -122, 3.58653 -123, 3.58797 -124, 3.5899 -125, 3.59139 -126, 3.5929 -127, 3.59441 -128, 3.59593 -129, 3.59748 -130, 3.59906 -131, 3.60068 -132, 3.60236 -133, 3.60414 -134, 3.6061 -135, 3.60838 -136, 3.61135 -137, 3.60814 -138, 2.1705 -139, 1.40535 -140, 0.711938 -141, 0.0835447 -142, -0.485934 -143, -1.00202 -144, -1.46972 -145, -1.89358 -146, -2.27185 -147, -2.62 -148, -2.93551 -149, -3.22143 -150, -3.48054 -151, -3.50793 -152, -3.50925 -153, -3.51057 -154, -3.5119 -155, -3.51324 -156, -3.51458 -157, -3.51593 -158, -3.51728 -159, -3.51864 -160, -3.52 -161, -3.52136 -162, -3.52273 -163, -3.5241 -164, -3.52547 -165, -3.52685 -166, -3.52822 -167, -3.52961 -168, -3.53099 -169, -3.53238 -170, -3.53377 -171, -3.53516 -172, -3.53655 -173, -3.53794 -174, -3.53934 -175, -3.54074 -176, -3.54214 -177, -3.54354 -178, -3.54494 -179, -3.54635 -180, -3.54776 -181, -3.54916 -182, -3.55057 -183, -3.55198 -184, -3.55339 -185, -3.55481 -186, -3.55622 -187, -3.55763 -188, -3.55905 -189, -3.55913 -190, -3.56057 -191, -3.56201 -192, -3.56391 -193, -3.56539 -194, -3.56688 -195, -3.56839 -196, -3.5699 -197, -3.57144 -198, -3.573 -199, -3.5746 -200, -3.57625 -201, -3.578 -202, -3.57989 -203, -3.58205 -204, -3.58476 -205, -3.58108 -206, -2.4668 -207, -1.66711 -208, -0.943034 -209, -0.287428 -210, 0.306188 -211, 0.843678 -212, 1.33035 -213, 1.771 -214, 2.16408 -215, 2.5254 -216, 2.85254 -217, 3.14875 -218, 3.41695 -219, 3.54482 -220, 3.54614 -221, 3.54748 -222, 3.54881 -223, 3.55016 -224, 3.5515 -225, 3.55286 -226, 3.55422 -227, 3.55558 -228, 3.55695 -229, 3.55832 -230, 3.55969 -231, 3.56107 -232, 3.56245 -233, 3.56384 -234, 3.56523 -235, 3.56662 -236, 3.56801 -237, 3.56941 -238, 3.57081 -239, 3.57221 -240, 3.57361 -241, 3.57501 -242, 3.57642 -243, 3.57783 -244, 3.57924 -245, 3.58065 -246, 3.58206 -247, 3.58348 -248, 3.5849 -249, 3.58631 -250, 3.58773 -251, 3.58915 -252, 3.59058 -253, 3.592 -254, 3.59342 -255, 3.59485 -256, 3.59627 -257, 3.59634 -258, 3.59779 -259, 3.59924 -260, 3.6007 -261, 3.60261 -262, 3.60411 -263, 3.60561 -264, 3.60712 -265, 3.60865 -266, 3.61019 -267, 3.61176 -268, 3.61337 -269, 3.61503 -270, 3.61677 -271, 3.61865 -272, 3.62079 -273, 3.62342 -274, 3.62725 -275, 2.51163 -276, 1.71449 -277, 0.992093 -278, 0.337433 -279, -0.255849 -280, -0.793508 -281, -1.28076 -282, -1.72233 -283, -2.12249 -284, -2.4793 -285, -2.808 -286, -3.10588 -287, -3.37583 -288, -3.62046 -289, -3.50525 -290, -3.50657 -291, -3.5079 -292, -3.50923 -293, -3.51057 -294, -3.51191 -295, -3.51326 -296, -3.51462 -297, -3.51597 -298, -3.51733 -299, -3.5187 -300, -3.52007 -301, -3.52144 -302, -3.52281 -303, -3.52419 -304, -3.52557 -305, -3.52695 -306, -3.52833 -307, -3.52972 -308, -3.53111 -309, -3.5325 -310, -3.53389 -311, -3.53528 -312, -3.53668 -313, -3.53808 -314, -3.53948 -315, -3.54088 -316, -3.54228 -317, -3.54369 -318, -3.54509 -319, -3.5465 -320, -3.54791 -321, -3.54932 -322, -3.55073 -323, -3.55214 -324, -3.55355 -325, -3.55497 -326, -3.55504 -327, -3.55648 -328, -3.55791 -329, -3.55935 -330, -3.56128 -331, -3.56277 -332, -3.56427 -333, -3.56578 -334, -3.5673 -335, -3.56885 -336, -3.57044 -337, -3.57207 -338, -3.57378 -339, -3.57561 -340, -3.57767 -341, -3.58015 -342, -3.5836 -343, -2.6326 -344, -1.89433 -345, -1.14877 -346, -0.473714 -347, 0.137516 -348, 0.690954 -349, 1.19206 -350, 1.64579 -351, 2.05069 -352, 2.42273 -353, 2.75958 -354, 3.06458 -355, 3.34074 -356, 3.59078 -357, 3.57454 -358, 3.57588 -359, 3.57723 -360, 3.57858 -361, 3.57993 -362, 3.58129 -363, 3.58266 -364, 3.58403 -365, 3.58541 -366, 3.58679 -367, 3.58817 -368, 3.58956 -369, 3.59095 -370, 3.59234 -371, 3.59374 -372, 3.59514 -373, 3.59654 -374, 3.59795 -375, 3.59936 -376, 3.60077 -377, 3.60218 -378, 3.6036 -379, 3.60501 -380, 3.60643 -381, 3.60785 -382, 3.60927 -383, 3.6107 -384, 3.61212 -385, 3.61355 -386, 3.61498 -387, 3.61641 -388, 3.61784 -389, 3.61928 -390, 3.62071 -391, 3.62214 -392, 3.62358 -393, 3.62502 -394, 3.62646 -395, 3.62654 -396, 3.628 -397, 3.62947 -398, 3.63093 -399, 3.63286 -400, 3.63437 -401, 3.63588 -402, 3.63741 -403, 3.63895 -404, 3.6405 -405, 3.64209 -406, 3.64371 -407, 3.64539 -408, 3.64716 -409, 3.64907 -410, 3.65125 -411, 3.65397 -412, 3.65803 -413, 2.45749 -414, 1.66542 -415, 0.94763 -416, 0.297138 -417, -0.292366 -418, -0.826602 -419, -1.31075 -420, -1.74951 -421, -2.14124 -422, -2.50164 -423, -2.82825 -424, -3.12423 -425, -3.39245 -426, -3.49584 -427, -3.49715 -428, -3.49847 -429, -3.4998 -430, -3.50113 -431, -3.50247 -432, -3.50381 -433, -3.50515 -434, -3.50651 -435, -3.50786 -436, -3.50922 -437, -3.51058 -438, -3.51194 -439, -3.51331 -440, -3.51468 -441, -3.51606 -442, -3.51743 -443, -3.51881 -444, -3.52019 -445, -3.52158 -446, -3.52296 -447, -3.52435 -448, -3.52574 -449, -3.52713 -450, -3.52853 -451, -3.52992 -452, -3.53132 -453, -3.53272 -454, -3.53412 -455, -3.53552 -456, -3.53692 -457, -3.53832 -458, -3.53973 -459, -3.54114 -460, -3.54254 -461, -3.54395 -462, -3.54536 -463, -3.54677 -464, -3.54685 -465, -3.54828 -466, -3.54971 -467, -3.55161 -468, -3.55309 -469, -3.55458 -470, -3.55607 -471, -3.55758 -472, -3.55911 -473, -3.56067 -474, -3.56226 -475, -3.5639 -476, -3.56564 -477, -3.56751 -478, -3.56965 -479, -3.57231 -480, -3.57622 -481, -2.45211 -482, -1.6538 -483, -0.930987 -484, -0.27652 -485, 0.316064 -486, 0.85262 -487, 1.33845 -488, 1.77833 -489, 2.17071 -490, 2.5314 -491, 2.85798 -492, 3.15367 -493, 3.4214 -494, 3.66381 -495, 3.57627 -496, 3.57761 -497, 3.57896 -498, 3.58031 -499, 3.58167 -500, 3.58303 -501, 3.5844 -502, 3.58578 -503, 3.58715 -504, 3.58853 -505, 3.58992 -506, 3.59131 -507, 3.5927 -508, 3.5941 -509, 3.59549 -510, 3.5969 -511, 3.5983 -512, 3.59971 -513, 3.60112 -514, 3.60253 -515, 3.60394 -516, 3.60536 -517, 3.60678 -518, 3.6082 -519, 3.60962 -520, 3.61104 -521, 3.61247 -522, 3.61389 -523, 3.61532 -524, 3.61675 -525, 3.61818 -526, 3.61961 -527, 3.62105 -528, 3.62248 -529, 3.62392 -530, 3.62536 -531, 3.62679 -532, 3.62823 -533, 3.62832 -534, 3.62979 -535, 3.63125 -536, 3.63272 -537, 3.63465 -538, 3.63616 -539, 3.63768 -540, 3.63921 -541, 3.64075 -542, 3.64232 -543, 3.64391 -544, 3.64555 -545, 3.64724 -546, 3.64904 -547, 3.65101 -548, 3.65328 -549, 3.65622 -550, 3.65297 -551, 2.21035 -552, 1.44146 -553, 0.744668 -554, 0.113205 -555, -0.459054 -556, -0.977662 -557, -1.44765 -558, -1.87357 -559, -2.25369 -560, -2.60354 -561, -2.9206 -562, -3.20792 -563, -3.4683 -564, -3.52299 -565, -3.52431 -566, -3.52564 -567, -3.52698 -568, -3.52832 -569, -3.52967 -570, -3.53102 -571, -3.53237 -572, -3.53374 -573, -3.5351 -574, -3.53647 -575, -3.53784 -576, -3.53922 -577, -3.54059 -578, -3.54198 -579, -3.54336 -580, -3.54475 -581, -3.54614 -582, -3.54753 -583, -3.54892 -584, -3.55032 -585, -3.55172 -586, -3.55312 -587, -3.55452 -588, -3.55592 -589, -3.55733 -590, -3.55874 -591, -3.56015 -592, -3.56156 -593, -3.56297 -594, -3.56438 -595, -3.5658 -596, -3.56721 -597, -3.56863 -598, -3.57005 -599, -3.57147 -600, -3.57289 -601, -3.57431 -602, -3.57439 -603, -3.57583 -604, -3.57728 -605, -3.57917 -606, -3.58066 -607, -3.58215 -608, -3.58366 -609, -3.58518 -610, -3.58671 -611, -3.58827 -612, -3.58986 -613, -3.5915 -614, -3.59321 -615, -3.59505 -616, -3.59711 -617, -3.59959 -618, -3.60302 -619, -2.64977 -620, -1.91121 -621, -1.16405 -622, -0.487545 -623, 0.124992 -624, 0.679614 -625, 1.1818 -626, 1.6365 -627, 2.0482 -628, 2.41506 -629, 2.75264 -630, 3.0583 -631, 3.33505 -632, 3.58563 -633, 3.56879 -634, 3.57013 -635, 3.57147 -636, 3.57282 -637, 3.57417 -638, 3.57553 -639, 3.5769 -640, 3.57827 -641, 3.57964 -642, 3.58102 -643, 3.5824 -644, 3.58379 -645, 3.58517 -646, 3.58657 -647, 3.58796 -648, 3.58936 -649, 3.59076 -650, 3.59216 -651, 3.59357 -652, 3.59498 -653, 3.59639 -654, 3.5978 -655, 3.59922 -656, 3.60063 -657, 3.60205 -658, 3.60347 -659, 3.60489 -660, 3.60632 -661, 3.60774 -662, 3.60917 -663, 3.6106 -664, 3.61203 -665, 3.61346 -666, 3.61489 -667, 3.61632 -668, 3.61776 -669, 3.61919 -670, 3.62063 -671, 3.62071 -672, 3.62217 -673, 3.62363 -674, 3.62509 -675, 3.62702 -676, 3.62853 -677, 3.63004 -678, 3.63157 -679, 3.63311 -680, 3.63466 -681, 3.63625 -682, 3.63787 -683, 3.63956 -684, 3.64133 -685, 3.64326 -686, 3.64548 -687, 3.64829 -688, 3.64481 -689, 2.36907 -690, 1.5853 -691, 0.875018 -692, 0.231334 -693, -0.352001 -694, -0.880645 -695, -1.35973 -696, -1.79389 -697, -2.18147 -698, -2.53809 -699, -2.86128 -700, -3.15417 -701, -3.41959 -702, -3.49767 -703, -3.49898 -704, -3.5003 -705, -3.50163 -706, -3.50296 -707, -3.5043 -708, -3.50564 -709, -3.50699 -710, -3.50834 -711, -3.5097 -712, -3.51106 -713, -3.51242 -714, -3.51379 -715, -3.51515 -716, -3.51653 -717, -3.5179 -718, -3.51928 -719, -3.52066 -720, -3.52204 -721, -3.52342 -722, -3.52481 -723, -3.5262 -724, -3.52759 -725, -3.52898 -726, -3.53038 -727, -3.53177 -728, -3.53317 -729, -3.53457 -730, -3.53597 -731, -3.53737 -732, -3.53878 -733, -3.54018 -734, -3.54159 -735, -3.54299 -736, -3.5444 -737, -3.54581 -738, -3.54722 -739, -3.54863 -740, -3.54871 -741, -3.55014 -742, -3.55158 -743, -3.55348 -744, -3.55496 -745, -3.55645 -746, -3.55794 -747, -3.55946 -748, -3.56099 -749, -3.56254 -750, -3.56414 -751, -3.56579 -752, -3.56753 -753, -3.56942 -754, -3.57159 -755, -3.57429 -756, -3.57062 -757, -2.45714 -758, -1.65836 -759, -0.935114 -760, -0.280257 -761, 0.312681 -762, 0.849557 -763, 1.33567 -764, 1.77582 -765, 2.16844 -766, 2.52934 -767, 2.85611 -768, 3.15199 -769, 3.41988 -770, 3.54797 -771, 3.5493 -772, 3.55063 -773, 3.55197 -774, 3.55331 -775, 3.55466 -776, 3.55602 -777, 3.55738 -778, 3.55874 -779, 3.56011 -780, 3.56148 -781, 3.56286 -782, 3.56424 -783, 3.56562 -784, 3.56701 -785, 3.56839 -786, 3.56979 -787, 3.57118 -788, 3.57258 -789, 3.57398 -790, 3.57538 -791, 3.57678 -792, 3.57819 -793, 3.5796 -794, 3.58101 -795, 3.58242 -796, 3.58383 -797, 3.58525 -798, 3.58666 -799, 3.58808 -800, 3.5895 -801, 3.59092 -802, 3.59234 -803, 3.59376 -804, 3.59519 -805, 3.59661 -806, 3.59804 -807, 3.59947 -808, 3.6009 -809, 3.60099 -810, 3.60244 -811, 3.6039 -812, 3.60581 -813, 3.60731 -814, 3.60881 -815, 3.61032 -816, 3.61185 -817, 3.61339 -818, 3.61496 -819, 3.61657 -820, 3.61822 -821, 3.61996 -822, 3.62184 -823, 3.62395 -824, 3.62655 -825, 3.63028 -826, 2.51214 -827, 1.71495 -828, 0.992513 -829, 0.337813 -830, -0.255504 -831, -0.793196 -832, -1.28048 -833, -1.72207 -834, -2.12226 -835, -2.47909 -836, -2.80781 -837, -3.1057 -838, -3.37567 -839, -3.62031 -840, -3.53144 -841, -3.53277 -842, -3.5341 -843, -3.53545 -844, -3.53679 -845, -3.53814 -846, -3.5395 -847, -3.54086 -848, -3.54223 -849, -3.5436 -850, -3.54497 -851, -3.54635 -852, -3.54773 -853, -3.54911 -854, -3.5505 -855, -3.55189 -856, -3.55328 -857, -3.55467 -858, -3.55607 -859, -3.55747 -860, -3.55887 -861, -3.56027 -862, -3.56167 -863, -3.56308 -864, -3.56449 -865, -3.5659 -866, -3.56731 -867, -3.56872 -868, -3.57014 -869, -3.57155 -870, -3.57297 -871, -3.57439 -872, -3.57581 -873, -3.57723 -874, -3.57865 -875, -3.58007 -876, -3.5815 -877, -3.58157 -878, -3.58302 -879, -3.58446 -880, -3.58591 -881, -3.58783 -882, -3.58932 -883, -3.59082 -884, -3.59233 -885, -3.59386 -886, -3.59541 -887, -3.59698 -888, -3.5986 -889, -3.60027 -890, -3.60203 -891, -3.60396 -892, -3.60617 -893, -3.60897 -894, -3.60546 -895, -2.40634 -896, -1.61236 -897, -0.893468 -898, -0.242549 -899, 0.346824 -900, 0.880472 -901, 1.36366 -902, 1.80117 -903, 2.19136 -904, 2.55009 -905, 2.8749 -906, 3.169 -907, 3.43528 -908, 3.5386 -909, 3.53992 -910, 3.54125 -911, 3.54259 -912, 3.54393 -913, 3.54528 -914, 3.54663 -915, 3.54798 -916, 3.54935 -917, 3.55071 -918, 3.55208 -919, 3.55345 -920, 3.55483 -921, 3.55621 -922, 3.55759 -923, 3.55898 -924, 3.56037 -925, 3.56176 -926, 3.56315 -927, 3.56455 -928, 3.56595 -929, 3.56735 -930, 3.56875 -931, 3.57015 -932, 3.57156 -933, 3.57297 -934, 3.57438 -935, 3.57579 -936, 3.5772 -937, 3.57862 -938, 3.58003 -939, 3.58145 -940, 3.58287 -941, 3.58429 -942, 3.58571 -943, 3.58713 -944, 3.58855 -945, 3.58998 -946, 3.59005 -947, 3.5915 -948, 3.59295 -949, 3.59439 -950, 3.59632 -951, 3.59781 -952, 3.59931 -953, 3.60083 -954, 3.60235 -955, 3.6039 -956, 3.60547 -957, 3.60709 -958, 3.60876 -959, 3.61053 -960, 3.61245 -961, 3.61467 -962, 3.61749 -963, 3.61401 -964, 2.25464 -965, 1.4816 -966, 0.781039 -967, 0.146166 -968, -0.429183 -969, -0.950592 -970, -1.42312 -971, -1.85134 -972, -2.23357 -973, -2.58531 -974, -2.90407 -975, -3.19294 -976, -3.45472 -977, -3.53284 -978, -3.53417 -979, -3.5355 -980, -3.53684 -981, -3.53818 -982, -3.53953 -983, -3.54089 -984, -3.54225 -985, -3.54361 -986, -3.54498 -987, -3.54635 -988, -3.54772 -989, -3.5491 -990, -3.55048 -991, -3.55187 -992, -3.55326 -993, -3.55465 -994, -3.55604 -995, -3.55743 -996, -3.55883 -997, -3.56023 -998, -3.56163 -999, -3.56304 -1000, -3.56444 -1001, -3.56585 -1002, -3.56726 -1003, -3.56867 -1004, -3.57009 -1005, -3.5715 -1006, -3.57292 -1007, -3.57433 -1008, -3.57575 -1009, -3.57717 -1010, -3.57859 -1011, -3.58001 -1012, -3.58144 -1013, -3.58286 -1014, -3.58429 -1015, -3.58436 -1016, -3.58581 -1017, -3.58726 -1018, -3.58871 -1019, -3.59063 -1020, -3.59213 -1021, -3.59364 -1022, -3.59515 -1023, -3.59669 -1024, -3.59824 -1025, -3.59982 -1026, -3.60145 -1027, -3.60314 -1028, -3.60494 -1029, -3.60692 -1030, -3.60923 -1031, -3.61227 -1032, -3.60907 -1033, -2.15934 -1034, -1.38872 -1035, -0.690968 -1036, -0.0591962 -1037, 0.51284 -1038, 1.03079 -1039, 1.49977 -1040, 1.9244 -1041, 2.30296 -1042, 2.65114 -1043, 2.96639 -1044, 3.25184 -1045, 3.51028 -1046, 3.56518 -1047, 3.56651 -1048, 3.56785 -1049, 3.56919 -1050, 3.57054 -1051, 3.5719 -1052, 3.57326 -1053, 3.57463 -1054, 3.576 -1055, 3.57738 -1056, 3.57876 -1057, 3.58014 -1058, 3.58153 -1059, 3.58292 -1060, 3.58431 -1061, 3.58571 -1062, 3.5871 -1063, 3.58851 -1064, 3.58991 -1065, 3.59132 -1066, 3.59272 -1067, 3.59414 -1068, 3.59555 -1069, 3.59696 -1070, 3.59838 -1071, 3.5998 -1072, 3.60122 -1073, 3.60264 -1074, 3.60406 -1075, 3.60549 -1076, 3.60691 -1077, 3.60834 -1078, 3.60977 -1079, 3.6112 -1080, 3.61263 -1081, 3.61407 -1082, 3.6155 -1083, 3.61693 -1084, 3.61701 -1085, 3.61847 -1086, 3.61993 -1087, 3.62139 -1088, 3.62331 -1089, 3.62481 -1090, 3.62632 -1091, 3.62784 -1092, 3.62937 -1093, 3.63093 -1094, 3.6325 -1095, 3.63411 -1096, 3.63578 -1097, 3.63753 -1098, 3.63941 -1099, 3.64154 -1100, 3.64415 -1101, 3.64791 -1102, 2.52973 -1103, 1.73089 -1104, 1.00695 -1105, 0.3509 -1106, -0.243644 -1107, -0.782447 -1108, -1.27074 -1109, -1.71325 -1110, -2.11426 -1111, -2.47185 -1112, -2.80125 -1113, -3.09976 -1114, -3.37028 -1115, -3.61543 -1116, -3.527 -1117, -3.52832 -1118, -3.52966 -1119, -3.531 -1120, -3.53234 -1121, -3.5337 -1122, -3.53505 -1123, -3.53641 -1124, -3.53778 -1125, -3.53914 -1126, -3.54052 -1127, -3.54189 -1128, -3.54327 -1129, -3.54465 -1130, -3.54603 -1131, -3.54742 -1132, -3.54881 -1133, -3.5502 -1134, -3.5516 -1135, -3.55299 -1136, -3.55439 -1137, -3.55579 -1138, -3.5572 -1139, -3.5586 -1140, -3.56001 -1141, -3.56142 -1142, -3.56283 -1143, -3.56424 -1144, -3.56565 -1145, -3.56706 -1146, -3.56848 -1147, -3.5699 -1148, -3.57132 -1149, -3.57273 -1150, -3.57415 -1151, -3.57558 -1152, -3.577 -1153, -3.57707 -1154, -3.57851 -1155, -3.57996 -1156, -3.58141 -1157, -3.58332 -1158, -3.58482 -1159, -3.58632 -1160, -3.58783 -1161, -3.58936 -1162, -3.5909 -1163, -3.59248 -1164, -3.5941 -1165, -3.59577 -1166, -3.59755 -1167, -3.59949 -1168, -3.60174 -1169, -3.60463 -1170, -3.60126 -1171, -2.31885 -1172, -1.53315 -1173, -0.82174 -1174, -0.177603 -1175, 0.405629 -1176, 0.933717 -1177, 1.41187 -1178, 1.84482 -1179, 2.23089 -1180, 2.58588 -1181, 2.90731 -1182, 3.19834 -1183, 3.46184 -1184, 3.53995 -1185, 3.54127 -1186, 3.54261 -1187, 3.54394 -1188, 3.54529 -1189, 3.54663 -1190, 3.54799 -1191, 3.54934 -1192, 3.55071 -1193, 3.55207 -1194, 3.55344 -1195, 3.55482 -1196, 3.5562 -1197, 3.55758 -1198, 3.55896 -1199, 3.56035 -1200, 3.56174 -1201, 3.56313 -1202, 3.56452 -1203, 3.56592 -1204, 3.56732 -1205, 3.56872 -1206, 3.57012 -1207, 3.57153 -1208, 3.57293 -1209, 3.57434 -1210, 3.57575 -1211, 3.57716 -1212, 3.57858 -1213, 3.57999 -1214, 3.58141 -1215, 3.58283 -1216, 3.58425 -1217, 3.58567 -1218, 3.58709 -1219, 3.58851 -1220, 3.58993 -1221, 3.59136 -1222, 3.59143 -1223, 3.59288 -1224, 3.59433 -1225, 3.59578 -1226, 3.59771 -1227, 3.5992 -1228, 3.6007 -1229, 3.60222 -1230, 3.60375 -1231, 3.6053 -1232, 3.60687 -1233, 3.60849 -1234, 3.61017 -1235, 3.61195 -1236, 3.61389 -1237, 3.61613 -1238, 3.61902 -1239, 3.61566 -1240, 2.2594 -1241, 1.48591 -1242, 0.784951 -1243, 0.149711 -1244, -0.42597 -1245, -0.94768 -1246, -1.42048 -1247, -1.84895 -1248, -2.2314 -1249, -2.58335 -1250, -2.90229 -1251, -3.19133 -1252, -3.45327 -1253, -3.50602 -1254, -3.50733 -1255, -3.50866 -1256, -3.50999 -1257, -3.51133 -1258, -3.51267 -1259, -3.51401 -1260, -3.51536 -1261, -3.51672 -1262, -3.51808 -1263, -3.51944 -1264, -3.52081 -1265, -3.52217 -1266, -3.52355 -1267, -3.52492 -1268, -3.5263 -1269, -3.52768 -1270, -3.52906 -1271, -3.53045 -1272, -3.53184 -1273, -3.53323 -1274, -3.53462 -1275, -3.53601 -1276, -3.53741 -1277, -3.53881 -1278, -3.54021 -1279, -3.54161 -1280, -3.54301 -1281, -3.54441 -1282, -3.54582 -1283, -3.54723 -1284, -3.54863 -1285, -3.55004 -1286, -3.55145 -1287, -3.55286 -1288, -3.55428 -1289, -3.55569 -1290, -3.5571 -1291, -3.55718 -1292, -3.55862 -1293, -3.56006 -1294, -3.56196 -1295, -3.56344 -1296, -3.56493 -1297, -3.56643 -1298, -3.56795 -1299, -3.56948 -1300, -3.57104 -1301, -3.57264 -1302, -3.57429 -1303, -3.57603 -1304, -3.57791 -1305, -3.58005 -1306, -3.58271 -1307, -3.58664 -1308, -2.46239 -1309, -1.66311 -1310, -0.939418 -1311, -0.284154 -1312, 0.309153 -1313, 0.846362 -1314, 1.33278 -1315, 1.7732 -1316, 2.16607 -1317, 2.5272 -1318, 2.85417 -1319, 3.15023 -1320, 3.41828 -1321, 3.66099 -1322, 3.57362 -1323, 3.57495 -1324, 3.5763 -1325, 3.57765 -1326, 3.57901 -1327, 3.58037 -1328, 3.58174 -1329, 3.58311 -1330, 3.58449 -1331, 3.58587 -1332, 3.58725 -1333, 3.58864 -1334, 3.59003 -1335, 3.59143 -1336, 3.59282 -1337, 3.59422 -1338, 3.59563 -1339, 3.59703 -1340, 3.59844 -1341, 3.59985 -1342, 3.60126 -1343, 3.60268 -1344, 3.6041 -1345, 3.60552 -1346, 3.60694 -1347, 3.60836 -1348, 3.60978 -1349, 3.61121 -1350, 3.61264 -1351, 3.61406 -1352, 3.61549 -1353, 3.61693 -1354, 3.61836 -1355, 3.61979 -1356, 3.62123 -1357, 3.62266 -1358, 3.6241 -1359, 3.62554 -1360, 3.62563 -1361, 3.62709 -1362, 3.62856 -1363, 3.63046 -1364, 3.63196 -1365, 3.63347 -1366, 3.63498 -1367, 3.63651 -1368, 3.63806 -1369, 3.63962 -1370, 3.64122 -1371, 3.64285 -1372, 3.64455 -1373, 3.64636 -1374, 3.64833 -1375, 3.65064 -1376, 3.65363 -1377, 3.65048 -1378, 2.21046 -1379, 1.44156 -1380, 0.744754 -1381, 0.113283 -1382, -0.458983 -1383, -0.977598 -1384, -1.44759 -1385, -1.87352 -1386, -2.25364 -1387, -2.6035 -1388, -2.92056 -1389, -3.20788 -1390, -3.46826 -1391, -3.49667 -1392, -3.49799 -1393, -3.49931 -1394, -3.50064 -1395, -3.50197 -1396, -3.50331 -1397, -3.50466 -1398, -3.506 -1399, -3.50736 -1400, -3.50871 -1401, -3.51007 -1402, -3.51143 -1403, -3.5128 -1404, -3.51417 -1405, -3.51554 -1406, -3.51692 -1407, -3.51829 -1408, -3.51967 -1409, -3.52106 -1410, -3.52244 -1411, -3.52383 -1412, -3.52522 -1413, -3.52661 -1414, -3.528 -1415, -3.52939 -1416, -3.53079 -1417, -3.53219 -1418, -3.53358 -1419, -3.53499 -1420, -3.53639 -1421, -3.53779 -1422, -3.53919 -1423, -3.5406 -1424, -3.54201 -1425, -3.54341 -1426, -3.54482 -1427, -3.54623 -1428, -3.54764 -1429, -3.54773 -1430, -3.54916 -1431, -3.5506 -1432, -3.5525 -1433, -3.55398 -1434, -3.55547 -1435, -3.55697 -1436, -3.55849 -1437, -3.56002 -1438, -3.56159 -1439, -3.56319 -1440, -3.56486 -1441, -3.56663 -1442, -3.56857 -1443, -3.57082 -1444, -3.57373 -1445, -3.57038 -1446, -2.20434 -1447, -1.42946 -1448, -0.727862 -1449, -0.0926017 -1450, 0.482593 -1451, 1.0034 -1452, 1.47497 -1453, 1.90195 -1454, 2.28266 -1455, 2.63276 -1456, 2.94975 -1457, 3.23677 -1458, 3.49664 -1459, 3.57501 -1460, 3.57635 -1461, 3.57769 -1462, 3.57904 -1463, 3.58039 -1464, 3.58175 -1465, 3.58311 -1466, 3.58448 -1467, 3.58586 -1468, 3.58724 -1469, 3.58862 -1470, 3.59 -1471, 3.59139 -1472, 3.59279 -1473, 3.59418 -1474, 3.59558 -1475, 3.59699 -1476, 3.59839 -1477, 3.5998 -1478, 3.60121 -1479, 3.60262 -1480, 3.60403 -1481, 3.60545 -1482, 3.60687 -1483, 3.60829 -1484, 3.60971 -1485, 3.61113 -1486, 3.61256 -1487, 3.61399 -1488, 3.61542 -1489, 3.61685 -1490, 3.61828 -1491, 3.61971 -1492, 3.62114 -1493, 3.62258 -1494, 3.62402 -1495, 3.62545 -1496, 3.62689 -1497, 3.62833 -1498, 3.62843 -1499, 3.62989 +0, 0, 0, -38.5887 +1, 0, 0, 4.93339 +2, 0, 0, 0.0160904 +3, 0, 0, 0.00161377 +4, 0, 0, 0.00322125 +5, 0, 0, 0.00322125 +6, 0, 0, 0.00322125 +7, 0, 0, 0.00322125 +8, 0, 0, 0.00322125 +9, 0, 0, 0.00322125 +10, 0, 0, 0.00322125 +11, 0, 0, 0.00322125 +12, 0, 0, 0.00322125 +13, 0, 0, 0.00322125 +14, 0, 0, 0.00322125 +15, 0, 0, 0.00322125 +16, 0, 0, 0.00322125 +17, 0, 0, 0.00322125 +18, 0, 0, 0.00322125 +19, 0, 0, 0.00322125 +20, 0, 0, 0.00322125 +21, 0, 0, 0.00322125 +22, 0, 0, 0.00322125 +23, 0, 0, 0.00322125 +24, 0, 0, 0.00322125 +25, 0, 0, 0.00322125 +26, 0, 0, 0.00322125 +27, 0, 0, 0.00322125 +28, 0, 0, 0.00322125 +29, 0, 0, 0.00322125 +30, 0, 0, 0.00322125 +31, 0, 0, 0.00322125 +32, 0, 0, 0.00322125 +33, 0, 0, 0.00322125 +34, 0, 0, 0.00322125 +35, 0, 0, 0.00322125 +36, 0, 0, 0.00322125 +37, 0, 0, 0.00322125 +38, 0, 0, 0.00322125 +39, 0, 0, 0.00322125 +40, 0, 0, 0.00322125 +41, 0, 0, 0.00322125 +42, 0, 0, 0.00322125 +43, 0, 0, 0.00322125 +44, 0, 0, 0.00322125 +45, 0, 0, 0.00322125 +46, 0, 0, 0.00322125 +47, 0, 0, 0.00322125 +48, 0, 0, 0.00322125 +49, 0, 0, 0.00322125 +50, 0, 0, 0.00322125 +51, 0, 0, 0.00322125 +52, 0, 0, 0.00322125 +53, 0, 0, 0.00322125 +54, 0, 0, 0.00322125 +55, 0, 0, 0.00322125 +56, 0, 0, 0.00322125 +57, 0, 0, 0.00322125 +58, 0, 0, 0.00322125 +59, 0, 0, 0.00322125 +60, 0, 0, 0.00322125 +61, 0, 0, 0.00322125 +62, 0, 0, 0.00322125 +63, 0, 0, 0.00322125 +64, 0, 0, 0.00322125 +65, 0, 0, 0.00322125 +66, 0, 0, 0.00322125 +67, 0, 0, 0.00322125 +68, 0, 0, 0.00322125 +69, 0, 0, 0.00322125 +70, 0, 0, 0.00322125 +71, 0, 0, 0.00322125 +72, 0, 0, 0.00322125 +73, 0, 0, 0.00322125 +74, 0, 0, 0.00322125 +75, 0, 0, 0.00322125 +76, 0, 0, 0.00322125 +77, 0, 0, 0.00322125 +78, 0, 0, 0.00322125 +79, 0, 0, 0.00322125 +80, 0, 0, 0.00322125 +81, 0, 0, 0.00322125 +82, 0, 0, 0.00322125 +83, 0, 0, 0.00322125 +84, 0, 0, 0.00322125 +85, 0, 0, 0.00322125 +86, 0, 0, 0.00322125 +87, 0, 0, 0.00322125 +88, 0, 0, 0.00322125 +89, 0, 0, 0.00322125 +90, 0, 0, 0.00322125 +91, 0, 0, 0.00322125 +92, 0, 0, 0.00322125 +93, 0, 0, 0.00322125 +94, 0, 0, 0.00322125 +95, 0, 0, 0.00322125 +96, 0, 0, 0.00322125 +97, 0, 0, 0.00322125 +98, 0, 0, 0.00322125 +99, 0, 0, 0.00322125 +100, 0, 0, 0.00322125 +101, 0, 0, 0.00322125 +102, 0, 0, 0.00322125 +103, 0, 0, 0.00322125 +104, 0, 0, 0.00322125 +105, 0, 0, 0.00322125 +106, 0, 0, 0.00322125 +107, 0, 0, 0.00322125 +108, 0, 0, 0.00322125 +109, 0, 0, 0.00322125 +110, 0, 0, 0.00322125 +111, 0, 0, 0.00322125 +112, 0, 0, 0.00322125 +113, 0, 0, 0.00322125 +114, 0, 0, 0.00322125 +115, 0, 0, 0.00322125 +116, 0, 0, 0.00322125 +117, 0, 0, 0.00322125 +118, 0, 0, 0.00322125 +119, 0, 0, 0.00322125 +120, 0, 0, 0.00322125 +121, 0, 0, 0.00322125 +122, 0, 0, 0.00322125 +123, 0, 0, 0.00322125 +124, 0, 0, 0.00322125 +125, 0, 0, 0.00322125 +126, 0, 0, 0.00322125 +127, 0, 0, 0.00322125 +128, 0, 0, 0.00322125 +129, 0, 0, 0.00322125 +130, 0, 0, 0.00322125 +131, 0, 0, 0.00322125 +132, 0, 0, 0.00322125 +133, 0, 0, 0.00322125 +134, 0, 0, 0.00322125 +135, 0, 0, 0.00322125 +136, 0, 0, 0.00322125 +137, 0, 0, 0.00322125 +138, 0, 0, 0.00322125 +139, 0, 0, 0.00322125 +140, 0, 0, 0.00322125 +141, 0, 0, 0.00322125 +142, 0, 0, 0.00322125 +143, 0, 0, 0.00322125 +144, 0, 0, 0.00322125 +145, 0, 0, 0.00322125 +146, 0, 0, 0.00322125 +147, 0, 0, 0.00322125 +148, 0, 0, 0.00322125 +149, 0, 0, 0.00322125 +150, 0, 0, 0.00322125 +151, 0, 0, 0.00322125 +152, 0, 0, 0.00322125 +153, 0, 0, 0.00322125 +154, 0, 0, 0.00322125 +155, 0, 0, 0.00322125 +156, 0, 0, 0.00322125 +157, 0, 0, 0.00322125 +158, 0, 0, 0.00322125 +159, 0, 0, 0.00322125 +160, 0, 0, 0.00322125 +161, 0, 0, 0.00322125 +162, 0, 0, 0.00322125 +163, 0, 0, 0.00322125 +164, 0, 0, 0.00322125 +165, 0, 0, 0.00322125 +166, 0, 0, 0.00322125 +167, 0, 0, 0.00322125 +168, 0, 0, 0.00322125 +169, 0, 0, 0.00322125 +170, 0, 0, 0.00322125 +171, 0, 0, 0.00322125 +172, 0, 0, 0.00322125 +173, 0, 0, 0.00322125 +174, 0, 0, 0.00322125 +175, 0, 0, 0.00322125 +176, 0, 0, 0.00322125 +177, 0, 0, 0.00322125 +178, 0, 0, 0.00322125 +179, 0, 0, 0.00322125 +180, 0, 0, 0.00322125 +181, 0, 0, 0.00322125 +182, 0, 0, 0.00322125 +183, 0, 0, 0.00322125 +184, 0, 0, 0.00322125 +185, 0, 0, 0.00322125 +186, 0, 0, 0.00322125 +187, 0, 0, 0.00322125 +188, 0, 0, 0.00322125 +189, 0, 0, 0.00322125 +190, 0, 0, 0.00322125 +191, 0, 0, 0.00322125 +192, 0, 0, 0.00322125 +193, 0, 0, 0.00322125 +194, 0, 0, 0.00322125 +195, 0, 0, 0.00322125 +196, 0, 0, 0.00322125 +197, 0, 0, 0.00322125 +198, 0, 0, 0.00322125 +199, 0, 0, 0.00322125 +200, 0, 0, 0.00322125 +201, 0, 0, 0.00322125 +202, 0, 0, 0.00322125 +203, 0, 0, 0.00322125 +204, 0, 0, 0.00322125 +205, 0, 0, 0.00322125 +206, 0, 0, 0.00322125 +207, 0, 0, 0.00322125 +208, 0, 0, 0.00322125 +209, 0, 0, 0.00322125 +210, 0, 0, 0.00322125 +211, 0, 0, 0.00322125 +212, 0, 0, 0.00322125 +213, 0, 0, 0.00322125 +214, 0, 0, 0.00322125 +215, 0, 0, 0.00322125 +216, 0, 0, 0.00322125 +217, 0, 0, 0.00322125 +218, 0, 0, 0.00322125 +219, 0, 0, 0.00322125 +220, 0, 0, 0.00322125 +221, 0, 0, 0.00322125 +222, 0, 0, 0.00322125 +223, 0, 0, 0.00322125 +224, 0, 0, 0.00322125 +225, 0, 0, 0.00322125 +226, 0, 0, 0.00322125 +227, 0, 0, 0.00322125 +228, 0, 0, 0.00322125 +229, 0, 0, 0.00322125 +230, 0, 0, 0.00322125 +231, 0, 0, 0.00322125 +232, 0, 0, 0.00322125 +233, 0, 0, 0.00322125 +234, 0, 0, 0.00322125 +235, 0, 0, 0.00322125 +236, 0, 0, 0.00322125 +237, 0, 0, 0.00322125 +238, 0, 0, 0.00322125 +239, 0, 0, 0.00322125 +240, 0, 0, 0.00322125 +241, 0, 0, 0.00322125 +242, 0, 0, 0.00322125 +243, 0, 0, 0.00322125 +244, 0, 0, 0.00322125 +245, 0, 0, 0.00322125 +246, 0, 0, 0.00322125 +247, 0, 0, 0.00322125 +248, 0, 0, 0.00322125 +249, 0, 0, 0.00322125 +250, 0, 0, 0.00322125 +251, 0, 0, 0.00322125 +252, 0, 0, 0.00322125 +253, 0, 0, 0.00322125 +254, 0, 0, 0.00322125 +255, 0, 0, 0.00322125 +256, 0, 0, 0.00322125 +257, 0, 0, 0.00322125 +258, 0, 0, 0.00322125 +259, 0, 0, 0.00322125 +260, 0, 0, 0.00322125 +261, 0, 0, 0.00322125 +262, 0, 0, 0.00322125 +263, 0, 0, 0.00322125 +264, 0, 0, 0.00322125 +265, 0, 0, 0.00322125 +266, 0, 0, 0.00322125 +267, 0, 0, 0.00322125 +268, 0, 0, 0.00322125 +269, 0, 0, 0.00322125 +270, 0, 0, 0.00322125 +271, 0, 0, 0.00322125 +272, 0, 0, 0.00322125 +273, 0, 0, 0.00322125 +274, 0, 0, 0.00322125 +275, 0, 0, 0.00322125 +276, 0, 0, 0.00322125 +277, 0, 0, 0.00322125 +278, 0, 0, 0.00322125 +279, 0, 0, 0.00322125 +280, 0, 0, 0.00322125 +281, 0, 0, 0.00322125 +282, 0, 0, 0.00322125 +283, 0, 0, 0.00322125 +284, 0, 0, 0.00322125 +285, 0, 0, 0.00322125 +286, 0, 0, 0.00322125 +287, 0, 0, 0.00322125 +288, 0, 0, 0.00322125 +289, 0, 0, 0.00322125 +290, 0, 0, 0.00322125 +291, 0, 0, 0.00322125 +292, 0, 0, 0.00322125 +293, 0, 0, 0.00322125 +294, 0, 0, 0.00322125 +295, 0, 0, 0.00322125 +296, 0, 0, 0.00322125 +297, 0, 0, 0.00322125 +298, 0, 0, 0.00322125 +299, 0, 0, 0.00322125 +300, 0, 0, 0.00322125 +301, 0, 0, 0.00322125 +302, 0, 0, 0.00322125 +303, 0, 0, 0.00322125 +304, 0, 0, 0.00322125 +305, 0, 0, 0.00322125 +306, 0, 0, 0.00322125 +307, 0, 0, 0.00322125 +308, 0, 0, 0.00322125 +309, 0, 0, 0.00322125 +310, 0, 0, 0.00322125 +311, 0, 0, 0.00322125 +312, 0, 0, 0.00322125 +313, 0, 0, 0.00322125 +314, 0, 0, 0.00322125 +315, 0, 0, 0.00322125 +316, 0, 0, 0.00322125 +317, 0, 0, 0.00322125 +318, 0, 0, 0.00322125 +319, 0, 0, 0.00322125 +320, 0, 0, 0.00322125 +321, 0, 0, 0.00322125 +322, 0, 0, 0.00322125 +323, 0, 0, 0.00322125 +324, 0, 0, 0.00322125 +325, 0, 0, 0.00322125 +326, 0, 0, 0.00322125 +327, 0, 0, 0.00322125 +328, 0, 0, 0.00322125 +329, 0, 0, 0.00322125 +330, 0, 0, 0.00322125 +331, 0, 0, 0.00322125 +332, 0, 0, 0.00322125 +333, 0, 0, 0.00322125 +334, 0, 0, 0.00322125 +335, 0, 0, 0.00322125 +336, 0, 0, 0.00322125 +337, 0, 0, 0.00322125 +338, 0, 0, 0.00322125 +339, 0, 0, 0.00322125 +340, 0, 0, 0.00322125 +341, 0, 0, 0.00322125 +342, 0, 0, 0.00322125 +343, 0, 0, 0.00322125 +344, 0, 0, 0.00322125 +345, 0, 0, 0.00322125 +346, 0, 0, 0.00322125 +347, 0, 0, 0.00322125 +348, 0, 0, 0.00322125 +349, 0, 0, 0.00322125 +350, 0, 0, 0.00322125 +351, 0, 0, 0.00322125 +352, 0, 0, 0.00322125 +353, 0, 0, 0.00322125 +354, 0, 0, 0.00322125 +355, 0, 0, 0.00322125 +356, 0, 0, 0.00322125 +357, 0, 0, 0.00322125 +358, 0, 0, 0.00322125 +359, 0, 0, 0.00322125 +360, 0, 0, 0.00322125 +361, 0, 0, 0.00322125 +362, 0, 0, 0.00322125 +363, 0, 0, 0.00322125 +364, 0, 0, 0.00322125 +365, 0, 0, 0.00322125 +366, 0, 0, 0.00322125 +367, 0, 0, 0.00322125 +368, 0, 0, 0.00322125 +369, 0, 0, 0.00322125 +370, 0, 0, 0.00322125 +371, 0, 0, 0.00322125 +372, 0, 0, 0.00322125 +373, 0, 0, 0.00322125 +374, 0, 0, 0.00322125 +375, 0, 0, 0.00322125 +376, 0, 0, 0.00322125 +377, 0, 0, 0.00322125 +378, 0, 0, 0.00322125 +379, 0, 0, 0.00322125 +380, 0, 0, 0.00322125 +381, 0, 0, 0.00322125 +382, 0, 0, 0.00322125 +383, 0, 0, 0.00322125 +384, 0, 0, 0.00322125 +385, 0, 0, 0.00322125 +386, 0, 0, 0.00322125 +387, 0, 0, 0.00322125 +388, 0, 0, 0.00322125 +389, 0, 0, 0.00322125 +390, 0, 0, 0.00322125 +391, 0, 0, 0.00322125 +392, 0, 0, 0.00322125 +393, 0, 0, 0.00322125 +394, 0, 0, 0.00322125 +395, 0, 0, 0.00322125 +396, 0, 0, 0.00322125 +397, 0, 0, 0.00322125 +398, 0, 0, 0.00322125 +399, 0, 0, 0.00322125 +400, 0, 5, 0.00322125 +401, 0, 5, 0.00322125 +402, 0, 5, 0.00322125 +403, 0, 5, 0.0031559 +404, 0, 5, 0.00322125 +405, 0, 5, 0.0031559 +406, 0, 5, 0.00322125 +407, 0, 5, 0.00322125 +408, 0, 5, 0.0017137 +409, 0, 5, 0.00161377 +410, 0, 5, 0.00161377 +411, 0, 5, 0.00315082 +412, 0, 5, 0.00322125 +413, 0, 5, 0.00322125 +414, 0, 5, 0.00322125 +415, 0, 5, 0.00322125 +416, 0, 5, 0.00322125 +417, 0, 5, 0.00322125 +418, 0, 5, 0.00322125 +419, 0, 5, 0.00322125 +420, 0, 5, 0.00322125 +421, 0, 5, 0.00322125 +422, 0, 5, 0.00322125 +423, 0, 5, 0.00322125 +424, 0, 5, 0.00322125 +425, 0, 5, 0.00322125 +426, 0, 5, 0.00322125 +427, 0, 5, 0.00322125 +428, 0, 5, 0.00322125 +429, 0, 5, 0.00322125 +430, 0, 5, 0.00322125 +431, 0, 5, 0.00322125 +432, 0, 5, 0.00322125 +433, 0, 5, 0.00322125 +434, 0, 5, 0.00322125 +435, 0, 5, 0.00322125 +436, 0, 5, 0.00322125 +437, 0, 5, 0.00322125 +438, 0, 5, 0.00322125 +439, 0, 5, 0.00322125 +440, 0, 5, 0.00322125 +441, 0, 5, 0.00322125 +442, 0, 5, 0.00322125 +443, 0, 5, 0.00322125 +444, 0, 5, 0.00322125 +445, 0, 5, 0.00322125 +446, 0, 5, 0.00322125 +447, 0, 5, 0.00322125 +448, 0, 5, 0.00322125 +449, 0, 5, 0.00322125 +450, 0, 5, 0.00322125 +451, 0, 5, 0.00322125 +452, 0, 5, 0.00322125 +453, 0, 5, 0.00322125 +454, 0, 5, 0.00322125 +455, 0, 5, 0.00322125 +456, 0, 5, 0.00322125 +457, 0, 5, 0.00322125 +458, 0, 5, 0.00322125 +459, 0, 5, 0.00322125 +460, 0, 5, 0.00322125 +461, 0, 5, 0.00322125 +462, 0, 5, 0.00322125 +463, 0, 5, 0.00322125 +464, 0, 5, 0.00322125 +465, 0, 5, 0.00322125 +466, 0, 5, 0.00322125 +467, 0, 5, 0.00322125 +468, 0, 5, 0.00322125 +469, 0, 5, 0.00322125 +470, 0, 5, 0.00322125 +471, 0, 5, 0.00322125 +472, 0, 5, 0.00322125 +473, 0, 5, 0.00322125 +474, 0, 5, 0.00322125 +475, 0, 5, 0.00322125 +476, 0, 5, 0.00322125 +477, 0, 5, 0.00322125 +478, 0, 5, 0.00322125 +479, 0, 5, 0.00322125 +480, 0, 5, 0.00322125 +481, 0, 5, 0.00322125 +482, 0, 5, 0.00322125 +483, 0, 5, 0.00322125 +484, 0, 5, 0.00322125 +485, 0, 5, 0.00322125 +486, 0, 5, 0.00322125 +487, 0, 5, 0.00322125 +488, 0, 5, 0.00322125 +489, 0, 5, 0.00322125 +490, 0, 5, 0.00322125 +491, 0, 5, 0.00322125 +492, 0, 5, 0.00322125 +493, 0, 5, 0.00322125 +494, 0, 5, 0.00322125 +495, 0, 5, 0.00322125 +496, 0, 5, 0.00322125 +497, 0, 5, 0.00322125 +498, 0, 5, 0.00322125 +499, 0, 5, 0.00322125 +500, 0, 5, 0.00322125 +501, 0, 5, 0.00322125 +502, 0, 5, 0.00322125 +503, 0, 5, 0.00322125 +504, 0, 5, 0.00322125 +505, 0, 5, 0.00322125 +506, 0, 5, 0.00322125 +507, 0, 5, 0.00322125 +508, 0, 5, 0.00322125 +509, 0, 5, 0.00322125 +510, 0, 5, 0.00322125 +511, 0, 5, 0.00322125 +512, 0, 5, 0.00322125 +513, 0, 5, 0.00322125 +514, 0, 5, 0.00322125 +515, 0, 5, 0.00322125 +516, 0, 5, 0.00322125 +517, 0, 5, 0.00322125 +518, 0, 5, 0.00322125 +519, 0, 5, 0.00322125 +520, 0, 5, 0.00322125 +521, 0, 5, 0.00322125 +522, 0, 5, 0.00322125 +523, 0, 5, 0.00322125 +524, 0, 5, 0.00322125 +525, 0, 5, 0.00322125 +526, 0, 5, 0.00322125 +527, 0, 5, 0.00322125 +528, 0, 5, 0.00322125 +529, 0, 5, 0.00322125 +530, 0, 5, 0.00322125 +531, 0, 5, 0.00322125 +532, 0, 5, 0.00322125 +533, 0, 5, 0.00322125 +534, 0, 5, 0.00322125 +535, 0, 5, 0.00322125 +536, 0, 5, 0.00322125 +537, 0, 5, 0.00322125 +538, 0, 5, 0.00322125 +539, 0, 5, 0.00322125 +540, 0, 5, 0.00322125 +541, 0, 5, 0.00322125 +542, 0, 5, 0.00322125 +543, 0, 5, 0.00322125 +544, 0, 5, 0.00322125 +545, 0, 5, 0.00322125 +546, 0, 5, 0.00322125 +547, 0, 5, 0.00322125 +548, 0, 5, 0.00322125 +549, 0, 5, 0.00322125 +550, 0, 5, 0.00322125 +551, 0, 5, 0.00322125 +552, 0, 5, 0.00322125 +553, 0, 5, 0.00322125 +554, 0, 5, 0.00322125 +555, 0, 5, 0.00322125 +556, 0, 5, 0.00322125 +557, 0, 5, 0.00322125 +558, 0, 5, 0.00322125 +559, 0, 5, 0.00322125 +560, 0, 5, 0.00322125 +561, 0, 5, 0.00322125 +562, 0, 5, 0.00322125 +563, 0, 5, 0.00322125 +564, 0, 5, 0.00322125 +565, 0, 5, 0.00322125 +566, 0, 5, 0.00322125 +567, 0, 5, 0.00322125 +568, 0, 5, 0.00322125 +569, 0, 5, 0.00322125 +570, 0, 5, 0.00322125 +571, 0, 5, 0.00322125 +572, 0, 5, 0.00322125 +573, 0, 5, 0.00322125 +574, 0, 5, 0.00322125 +575, 0, 5, 0.00322125 +576, 0, 5, 0.00322125 +577, 0, 5, 0.00322125 +578, 0, 5, 0.00322125 +579, 0, 5, 0.00322125 +580, 0, 5, 0.00322125 +581, 0, 5, 0.00322125 +582, 0, 5, 0.00322125 +583, 0, 5, 0.00322125 +584, 0, 5, 0.00322125 +585, 0, 5, 0.00322125 +586, 0, 5, 0.00322125 +587, 0, 5, 0.00322125 +588, 0, 5, 0.00322125 +589, 0, 5, 0.00322125 +590, 0, 5, 0.00322125 +591, 0, 5, 0.00322125 +592, 0, 5, 0.00322125 +593, 0, 5, 0.00322125 +594, 0, 5, 0.00322125 +595, 0, 5, 0.00322125 +596, 0, 5, 0.00322125 +597, 0, 5, 0.00322125 +598, 0, 5, 0.00322125 +599, 0, 5, 0.00322125 +600, 0, 5, 0.00322125 +601, 0, 5, 0.00322125 +602, 0, 5, 0.00322125 +603, 0, 5, 0.00322125 +604, 0, 5, 0.00322125 +605, 0, 5, 0.00322125 +606, 0, 5, 0.00322125 +607, 0, 5, 0.00322125 +608, 0, 5, 0.00322125 +609, 0, 5, 0.00322125 +610, 0, 5, 0.00322125 +611, 0, 5, 0.00322125 +612, 0, 5, 0.00322125 +613, 0, 5, 0.00322125 +614, 0, 5, 0.00322125 +615, 0, 5, 0.00322125 +616, 0, 5, 0.00322125 +617, 0, 5, 0.00322125 +618, 0, 5, 0.00322125 +619, 0, 5, 0.00322125 +620, 0, 5, 0.00322125 +621, 0, 5, 0.00322125 +622, 0, 5, 0.00322125 +623, 0, 5, 0.00322125 +624, 0, 5, 0.00322125 +625, 0, 5, 0.00322125 +626, 0, 5, 0.00322125 +627, 0, 5, 0.00322125 +628, 0, 5, 0.00322125 +629, 0, 5, 0.00322125 +630, 0, 5, 0.00322125 +631, 0, 5, 0.00322125 +632, 0, 5, 0.00322125 +633, 0, 5, 0.00322125 +634, 0, 5, 0.00322125 +635, 0, 5, 0.00322125 +636, 0, 5, 0.00322125 +637, 0, 5, 0.00322125 +638, 0, 5, 0.00322125 +639, 0, 5, 0.00322125 +640, 0, 5, 0.00322125 +641, 0, 5, 0.00322125 +642, 0, 5, 0.00322125 +643, 0, 5, 0.00322125 +644, 0, 5, 0.00322125 +645, 0, 5, 0.00322125 +646, 0, 5, 0.00322125 +647, 0, 5, 0.00322125 +648, 0, 5, 0.00322125 +649, 0, 5, 0.00322125 +650, 0, 5, 0.00322125 +651, 0, 5, 0.00322125 +652, 0, 5, 0.00322125 +653, 0, 5, 0.00322125 +654, 0, 5, 0.00322125 +655, 0, 5, 0.00322125 +656, 0, 5, 0.00322125 +657, 0, 5, 0.00322125 +658, 0, 5, 0.00322125 +659, 0, 5, 0.00322125 +660, 0, 5, 0.00322125 +661, 0, 5, 0.00322125 +662, 0, 5, 0.00322125 +663, 0, 5, 0.00322125 +664, 0, 5, 0.00322125 +665, 0, 5, 0.00322125 +666, 0, 5, 0.00322125 +667, 0, 5, 0.00322125 +668, 0, 5, 0.00322125 +669, 0, 5, 0.00322125 +670, 0, 5, 0.00322125 +671, 0, 5, 0.00322125 +672, 0, 5, 0.00322125 +673, 0, 5, 0.00322125 +674, 0, 5, 0.00322125 +675, 0, 5, 0.00322125 +676, 0, 5, 0.00322125 +677, 0, 5, 0.00322125 +678, 0, 5, 0.00322125 +679, 0, 5, 0.00322125 +680, 0, 5, 0.00322125 +681, 0, 5, 0.00322125 +682, 0, 5, 0.00322125 +683, 0, 5, 0.00322125 +684, 0, 5, 0.00322125 +685, 0, 5, 0.00322125 +686, 0, 5, 0.00322125 +687, 0, 5, 0.00322125 +688, 0, 5, 0.00322125 +689, 0, 5, 0.00322125 +690, 0, 5, 0.00322125 +691, 0, 5, 0.00322125 +692, 0, 5, 0.00322125 +693, 0, 5, 0.00322125 +694, 0, 5, 0.00322125 +695, 0, 5, 0.00322125 +696, 0, 5, 0.00322125 +697, 0, 5, 0.00322125 +698, 0, 5, 0.00322125 +699, 0, 5, 0.00322125 +700, 0, 5, 0.00322125 +701, 0, 5, 0.00322125 +702, 0, 5, 0.00322125 +703, 0, 5, 0.00322125 +704, 0, 5, 0.00322125 +705, 0, 5, 0.00322125 +706, 0, 5, 0.00322125 +707, 0, 5, 0.00322125 +708, 0, 5, 0.00322125 +709, 0, 5, 0.00322125 +710, 0, 5, 0.00322125 +711, 0, 5, 0.00322125 +712, 0, 5, 0.00322125 +713, 0, 5, 0.00322125 +714, 0, 5, 0.00322125 +715, 0, 5, 0.00322125 +716, 0, 5, 0.00322125 +717, 0, 5, 0.00322125 +718, 0, 5, 0.00322125 +719, 0, 5, 0.00322125 +720, 0, 5, 0.00322125 +721, 0, 5, 0.00322125 +722, 0, 5, 0.00322125 +723, 0, 5, 0.00322125 +724, 0, 5, 0.00322125 +725, 0, 5, 0.00322125 +726, 0, 5, 0.00322125 +727, 0, 5, 0.00322125 +728, 0, 5, 0.00322125 +729, 0, 5, 0.00322125 +730, 0, 5, 0.00322125 +731, 0, 5, 0.00322125 +732, 0, 5, 0.00322125 +733, 0, 5, 0.00322125 +734, 0, 5, 0.00322125 +735, 0, 5, 0.00322125 +736, 0, 5, 0.00322125 +737, 0, 5, 0.00322125 +738, 0, 5, 0.00322125 +739, 0, 5, 0.00322125 +740, 0, 5, 0.00322125 +741, 0, 5, 0.00322125 +742, 0, 5, 0.00322125 +743, 0, 5, 0.00322125 +744, 0, 5, 0.00322125 +745, 0, 5, 0.00322125 +746, 0, 5, 0.00322125 +747, 0, 5, 0.00322125 +748, 0, 5, 0.00322125 +749, 0, 5, 0.00322125 +750, 0, 5, 0.00322125 +751, 0, 5, 0.00322125 +752, 0, 5, 0.00322125 +753, 0, 5, 0.00322125 +754, 0, 5, 0.00322125 +755, 0, 5, 0.00322125 +756, 0, 5, 0.00322125 +757, 0, 5, 0.00322125 +758, 0, 5, 0.00322125 +759, 0, 5, 0.00322125 +760, 0, 5, 0.00322125 +761, 0, 5, 0.00322125 +762, 0, 5, 0.00322125 +763, 0, 5, 0.00322125 +764, 0, 5, 0.00322125 +765, 0, 5, 0.00322125 +766, 0, 5, 0.00322125 +767, 0, 5, 0.00322125 +768, 0, 5, 0.00322125 +769, 0, 5, 0.00322125 +770, 0, 5, 0.00322125 +771, 0, 5, 0.00322125 +772, 0, 5, 0.00322125 +773, 0, 5, 0.00322125 +774, 0, 5, 0.00322125 +775, 0, 5, 0.00322125 +776, 0, 5, 0.00322125 +777, 0, 5, 0.00322125 +778, 0, 5, 0.00322125 +779, 0, 5, 0.00322125 +780, 0, 5, 0.00322125 +781, 0, 5, 0.00322125 +782, 0, 5, 0.00322125 +783, 0, 5, 0.00322125 +784, 0, 5, 0.00322125 +785, 0, 5, 0.00322125 +786, 0, 5, 0.00322125 +787, 0, 5, 0.00322125 +788, 0, 5, 0.00322125 +789, 0, 5, 0.00322125 +790, 0, 5, 0.00322125 +791, 0, 5, 0.00322125 +792, 0, 5, 0.00322125 +793, 0, 5, 0.00322125 +794, 0, 5, 0.00322125 +795, 0, 5, 0.00322125 +796, 0, 5, 0.00322125 +797, 0, 5, 0.00322125 +798, 0, 5, 0.00322125 +799, 0, 5, 0.00322125 +800, 5, 0, 0.00322125 +801, 5, 0, 0.00322125 +802, 5, 0, 0.00322125 +803, 5, 0, 0.00322125 +804, 5, 0, 0.00322125 +805, 5, 0, 0.00322125 +806, 5, 0, 0.00322125 +807, 5, 0, 0.00322125 +808, 5, 0, 0.00322125 +809, 5, 0, 0.00322125 +810, 5, 0, 0.00322125 +811, 5, 0, 0.00322125 +812, 5, 0, 0.00322125 +813, 5, 0, 0.00322125 +814, 5, 0, 0.00322125 +815, 5, 0, 0.00322125 +816, 5, 0, 0.00322125 +817, 5, 0, 0.00322125 +818, 5, 0, 0.00322125 +819, 5, 0, 0.00322125 +820, 5, 0, 0.00322125 +821, 5, 0, 0.00322125 +822, 5, 0, 0.00322125 +823, 5, 0, 0.0031559 +824, 5, 0, 0.00322125 +825, 5, 0, 0.00322125 +826, 5, 0, 0.00322125 +827, 5, 0, 0.00322125 +828, 5, 0, 0.00322125 +829, 5, 0, 0.00322125 +830, 5, 0, 0.00322125 +831, 5, 0, 0.00322125 +832, 5, 0, 0.00322125 +833, 5, 0, 0.00322125 +834, 5, 0, 0.00322125 +835, 5, 0, 0.00322125 +836, 5, 0, 0.00322125 +837, 5, 0, 0.00322125 +838, 5, 0, 0.00322125 +839, 5, 0, 0.00322125 +840, 5, 0, 0.00322125 +841, 5, 0, 0.00322125 +842, 5, 0, 0.00322125 +843, 5, 0, 0.00322125 +844, 5, 0, 0.00322125 +845, 5, 0, 0.00322125 +846, 5, 0, 0.00322125 +847, 5, 0, 0.00322125 +848, 5, 0, 0.00322125 +849, 5, 0, 0.00322125 +850, 5, 0, 0.00322125 +851, 5, 0, 0.00322125 +852, 5, 0, 0.00322125 +853, 5, 0, 0.00322125 +854, 5, 0, 0.00322125 +855, 5, 0, 0.00322125 +856, 5, 0, 0.00322125 +857, 5, 0, 0.00322125 +858, 5, 0, 0.00322125 +859, 5, 0, 0.00322125 +860, 5, 0, 0.00322125 +861, 5, 0, 0.00322125 +862, 5, 0, 0.00322125 +863, 5, 0, 0.00322125 +864, 5, 0, 0.00322125 +865, 5, 0, 0.00322125 +866, 5, 0, 0.00322125 +867, 5, 0, 0.00322125 +868, 5, 0, 0.00322125 +869, 5, 0, 0.00322125 +870, 5, 0, 0.00322125 +871, 5, 0, 0.00322125 +872, 5, 0, 0.00322125 +873, 5, 0, 0.00322125 +874, 5, 0, 0.00322125 +875, 5, 0, 0.00322125 +876, 5, 0, 0.00322125 +877, 5, 0, 0.00322125 +878, 5, 0, 0.00322125 +879, 5, 0, 0.00322125 +880, 5, 0, 0.00322125 +881, 5, 0, 0.00322125 +882, 5, 0, 0.00322125 +883, 5, 0, 0.00322125 +884, 5, 0, 0.00322125 +885, 5, 0, 0.00322125 +886, 5, 0, 0.00322125 +887, 5, 0, 0.00322125 +888, 5, 0, 0.00322125 +889, 5, 0, 0.00322125 +890, 5, 0, 0.00322125 +891, 5, 0, 0.00322125 +892, 5, 0, 0.00322125 +893, 5, 0, 0.00322125 +894, 5, 0, 0.00322125 +895, 5, 0, 0.00322125 +896, 5, 0, 0.00322125 +897, 5, 0, 0.00322125 +898, 5, 0, 0.00322125 +899, 5, 0, 0.00322125 +900, 5, 0, 0.00322125 +901, 5, 0, 0.00322125 +902, 5, 0, 0.00322125 +903, 5, 0, 0.00322125 +904, 5, 0, 0.00322125 +905, 5, 0, 0.00322125 +906, 5, 0, 0.00322125 +907, 5, 0, 0.00322125 +908, 5, 0, 0.00322125 +909, 5, 0, 0.00322125 +910, 5, 0, 0.00322125 +911, 5, 0, 0.00322125 +912, 5, 0, 0.00322125 +913, 5, 0, 0.00322125 +914, 5, 0, 0.00322125 +915, 5, 0, 0.00322125 +916, 5, 0, 0.00322125 +917, 5, 0, 0.00322125 +918, 5, 0, 0.00322125 +919, 5, 0, 0.00322125 +920, 5, 0, 0.00322125 +921, 5, 0, 0.00322125 +922, 5, 0, 0.00322125 +923, 5, 0, 0.00322125 +924, 5, 0, 0.00322125 +925, 5, 0, 0.00322125 +926, 5, 0, 0.00322125 +927, 5, 0, 0.00322125 +928, 5, 0, 0.00322125 +929, 5, 0, 0.00322125 +930, 5, 0, 0.00322125 +931, 5, 0, 0.00322125 +932, 5, 0, 0.00322125 +933, 5, 0, 0.00322125 +934, 5, 0, 0.00322125 +935, 5, 0, 0.00322125 +936, 5, 0, 0.00322125 +937, 5, 0, 0.00322125 +938, 5, 0, 0.00322125 +939, 5, 0, 0.00322125 +940, 5, 0, 0.00322125 +941, 5, 0, 0.00322125 +942, 5, 0, 0.00322125 +943, 5, 0, 0.00322125 +944, 5, 0, 0.00322125 +945, 5, 0, 0.00322125 +946, 5, 0, 0.00322125 +947, 5, 0, 0.00322125 +948, 5, 0, 0.00322125 +949, 5, 0, 0.00322125 +950, 5, 0, 0.00322125 +951, 5, 0, 0.00322125 +952, 5, 0, 0.00322125 +953, 5, 0, 0.00322125 +954, 5, 0, 0.00322125 +955, 5, 0, 0.00322125 +956, 5, 0, 0.00322125 +957, 5, 0, 0.00322125 +958, 5, 0, 0.00322125 +959, 5, 0, 0.00322125 +960, 5, 0, 0.00322125 +961, 5, 0, 0.00322125 +962, 5, 0, 0.00322125 +963, 5, 0, 0.00322125 +964, 5, 0, 0.00322125 +965, 5, 0, 0.00322125 +966, 5, 0, 0.00322125 +967, 5, 0, 0.00322125 +968, 5, 0, 0.00322125 +969, 5, 0, 0.00322125 +970, 5, 0, 0.00322125 +971, 5, 0, 0.00322125 +972, 5, 0, 0.00322125 +973, 5, 0, 0.00322125 +974, 5, 0, 0.00322125 +975, 5, 0, 0.00322125 +976, 5, 0, 0.00322125 +977, 5, 0, 0.00322125 +978, 5, 0, 0.00322125 +979, 5, 0, 0.00322125 +980, 5, 0, 0.00322125 +981, 5, 0, 0.00322125 +982, 5, 0, 0.00322125 +983, 5, 0, 0.00322125 +984, 5, 0, 0.00322125 +985, 5, 0, 0.00322125 +986, 5, 0, 0.00322125 +987, 5, 0, 0.00322125 +988, 5, 0, 0.00322125 +989, 5, 0, 0.00322125 +990, 5, 0, 0.00322125 +991, 5, 0, 0.00322125 +992, 5, 0, 0.00322125 +993, 5, 0, 0.00322125 +994, 5, 0, 0.00322125 +995, 5, 0, 0.00322125 +996, 5, 0, 0.00322125 +997, 5, 0, 0.00322125 +998, 5, 0, 0.00322125 +999, 5, 0, 0.00322125 +1000, 5, 0, 0.00322125 +1001, 5, 0, 0.00322125 +1002, 5, 0, 0.00322125 +1003, 5, 0, 0.00322125 +1004, 5, 0, 0.00322125 +1005, 5, 0, 0.00322125 +1006, 5, 0, 0.00322125 +1007, 5, 0, 0.00322125 +1008, 5, 0, 0.00322125 +1009, 5, 0, 0.00322125 +1010, 5, 0, 0.00322125 +1011, 5, 0, 0.00322125 +1012, 5, 0, 0.00322125 +1013, 5, 0, 0.00322125 +1014, 5, 0, 0.00322125 +1015, 5, 0, 0.00322125 +1016, 5, 0, 0.00322125 +1017, 5, 0, 0.00322125 +1018, 5, 0, 0.00322125 +1019, 5, 0, 0.00322125 +1020, 5, 0, 0.00322125 +1021, 5, 0, 0.00322125 +1022, 5, 0, 0.00322125 +1023, 5, 0, 0.00322125 +1024, 5, 0, 0.00322125 +1025, 5, 0, 0.00322125 +1026, 5, 0, 0.00322125 +1027, 5, 0, 0.00322125 +1028, 5, 0, 0.00322125 +1029, 5, 0, 0.00322125 +1030, 5, 0, 0.00322125 +1031, 5, 0, 0.00322125 +1032, 5, 0, 0.00322125 +1033, 5, 0, 0.00322125 +1034, 5, 0, 0.00322125 +1035, 5, 0, 0.00322125 +1036, 5, 0, 0.00322125 +1037, 5, 0, 0.00322125 +1038, 5, 0, 0.00322125 +1039, 5, 0, 0.00322125 +1040, 5, 0, 0.00322125 +1041, 5, 0, 0.00322125 +1042, 5, 0, 0.00322125 +1043, 5, 0, 0.00322125 +1044, 5, 0, 0.00322125 +1045, 5, 0, 0.00322125 +1046, 5, 0, 0.00322125 +1047, 5, 0, 0.00322125 +1048, 5, 0, 0.00322125 +1049, 5, 0, 0.00322125 +1050, 5, 0, 0.00322125 +1051, 5, 0, 0.00322125 +1052, 5, 0, 0.00322125 +1053, 5, 0, 0.00322125 +1054, 5, 0, 0.00322125 +1055, 5, 0, 0.00322125 +1056, 5, 0, 0.00322125 +1057, 5, 0, 0.00322125 +1058, 5, 0, 0.00322125 +1059, 5, 0, 0.00322125 +1060, 5, 0, 0.00322125 +1061, 5, 0, 0.00322125 +1062, 5, 0, 0.00322125 +1063, 5, 0, 0.00322125 +1064, 5, 0, 0.00322125 +1065, 5, 0, 0.00322125 +1066, 5, 0, 0.00322125 +1067, 5, 0, 0.00322125 +1068, 5, 0, 0.00322125 +1069, 5, 0, 0.00322125 +1070, 5, 0, 0.00322125 +1071, 5, 0, 0.00322125 +1072, 5, 0, 0.00322125 +1073, 5, 0, 0.00322125 +1074, 5, 0, 0.00322125 +1075, 5, 0, 0.00322125 +1076, 5, 0, 0.00322125 +1077, 5, 0, 0.00322125 +1078, 5, 0, 0.00322125 +1079, 5, 0, 0.00322125 +1080, 5, 0, 0.00322125 +1081, 5, 0, 0.00322125 +1082, 5, 0, 0.00322125 +1083, 5, 0, 0.00322125 +1084, 5, 0, 0.00322125 +1085, 5, 0, 0.00322125 +1086, 5, 0, 0.00322125 +1087, 5, 0, 0.00322125 +1088, 5, 0, 0.00322125 +1089, 5, 0, 0.00322125 +1090, 5, 0, 0.00322125 +1091, 5, 0, 0.00322125 +1092, 5, 0, 0.00322125 +1093, 5, 0, 0.00322125 +1094, 5, 0, 0.00322125 +1095, 5, 0, 0.00322125 +1096, 5, 0, 0.00322125 +1097, 5, 0, 0.00322125 +1098, 5, 0, 0.00322125 +1099, 5, 0, 0.00322125 +1100, 5, 0, 0.00322125 +1101, 5, 0, 0.00322125 +1102, 5, 0, 0.00322125 +1103, 5, 0, 0.00322125 +1104, 5, 0, 0.00322125 +1105, 5, 0, 0.00322125 +1106, 5, 0, 0.00322125 +1107, 5, 0, 0.00322125 +1108, 5, 0, 0.00322125 +1109, 5, 0, 0.00322125 +1110, 5, 0, 0.00322125 +1111, 5, 0, 0.00322125 +1112, 5, 0, 0.00322125 +1113, 5, 0, 0.00322125 +1114, 5, 0, 0.00322125 +1115, 5, 0, 0.00322125 +1116, 5, 0, 0.00322125 +1117, 5, 0, 0.00322125 +1118, 5, 0, 0.00322125 +1119, 5, 0, 0.00322125 +1120, 5, 0, 0.00322125 +1121, 5, 0, 0.00322125 +1122, 5, 0, 0.00322125 +1123, 5, 0, 0.00322125 +1124, 5, 0, 0.00322125 +1125, 5, 0, 0.00322125 +1126, 5, 0, 0.00322125 +1127, 5, 0, 0.00322125 +1128, 5, 0, 0.00322125 +1129, 5, 0, 0.00322125 +1130, 5, 0, 0.00322125 +1131, 5, 0, 0.00322125 +1132, 5, 0, 0.00322125 +1133, 5, 0, 0.00322125 +1134, 5, 0, 0.00322125 +1135, 5, 0, 0.00322125 +1136, 5, 0, 0.00322125 +1137, 5, 0, 0.00322125 +1138, 5, 0, 0.00322125 +1139, 5, 0, 0.00322125 +1140, 5, 0, 0.00322125 +1141, 5, 0, 0.00322125 +1142, 5, 0, 0.00322125 +1143, 5, 0, 0.00322125 +1144, 5, 0, 0.00322125 +1145, 5, 0, 0.00322125 +1146, 5, 0, 0.00322125 +1147, 5, 0, 0.00322125 +1148, 5, 0, 0.00322125 +1149, 5, 0, 0.00322125 +1150, 5, 0, 0.00322125 +1151, 5, 0, 0.00322125 +1152, 5, 0, 0.00322125 +1153, 5, 0, 0.00322125 +1154, 5, 0, 0.00322125 +1155, 5, 0, 0.00322125 +1156, 5, 0, 0.00322125 +1157, 5, 0, 0.00322125 +1158, 5, 0, 0.00322125 +1159, 5, 0, 0.00322125 +1160, 5, 0, 0.00322125 +1161, 5, 0, 0.00322125 +1162, 5, 0, 0.00322125 +1163, 5, 0, 0.00322125 +1164, 5, 0, 0.00322125 +1165, 5, 0, 0.00322125 +1166, 5, 0, 0.00322125 +1167, 5, 0, 0.00322125 +1168, 5, 0, 0.00322125 +1169, 5, 0, 0.00322125 +1170, 5, 0, 0.00322125 +1171, 5, 0, 0.00322125 +1172, 5, 0, 0.00322125 +1173, 5, 0, 0.00322125 +1174, 5, 0, 0.00322125 +1175, 5, 0, 0.00322125 +1176, 5, 0, 0.00322125 +1177, 5, 0, 0.00322125 +1178, 5, 0, 0.00322125 +1179, 5, 0, 0.00322125 +1180, 5, 0, 0.00322125 +1181, 5, 0, 0.00322125 +1182, 5, 0, 0.00322125 +1183, 5, 0, 0.00322125 +1184, 5, 0, 0.00322125 +1185, 5, 0, 0.00322125 +1186, 5, 0, 0.00322125 +1187, 5, 0, 0.00322125 +1188, 5, 0, 0.00322125 +1189, 5, 0, 0.00322125 +1190, 5, 0, 0.00322125 +1191, 5, 0, 0.00322125 +1192, 5, 0, 0.00322125 +1193, 5, 0, 0.00322125 +1194, 5, 0, 0.00322125 +1195, 5, 0, 0.00322125 +1196, 5, 0, 0.00322125 +1197, 5, 0, 0.00322125 +1198, 5, 0, 0.00322125 +1199, 5, 0, 0.00322125 +1200, 5, 5, 0.00322125 +1201, 5, 5, 0.00322125 +1202, 5, 5, 0.00322125 +1203, 5, 5, 0.0031559 +1204, 5, 5, 0.00322125 +1205, 5, 5, 0.0031559 +1206, 5, 5, 0.0031559 +1207, 5, 5, 0.0031559 +1208, 5, 5, 0.0031559 +1209, 5, 5, 0.00322125 +1210, 5, 5, 5 +1211, 5, 5, 5 +1212, 5, 5, 5 +1213, 5, 5, 5 +1214, 5, 5, 5 +1215, 5, 5, 5 +1216, 5, 5, 5 +1217, 5, 5, 5 +1218, 5, 5, 5 +1219, 5, 5, 5 +1220, 5, 5, 5 +1221, 5, 5, 5 +1222, 5, 5, 5 +1223, 5, 5, 5 +1224, 5, 5, 5 +1225, 5, 5, 5 +1226, 5, 5, 5 +1227, 5, 5, 5 +1228, 5, 5, 5 +1229, 5, 5, 5 +1230, 5, 5, 5 +1231, 5, 5, 5 +1232, 5, 5, 5 +1233, 5, 5, 5 +1234, 5, 5, 5 +1235, 5, 5, 5 +1236, 5, 5, 5 +1237, 5, 5, 5 +1238, 5, 5, 5 +1239, 5, 5, 5 +1240, 5, 5, 5 +1241, 5, 5, 5 +1242, 5, 5, 5 +1243, 5, 5, 5 +1244, 5, 5, 5 +1245, 5, 5, 5 +1246, 5, 5, 5 +1247, 5, 5, 5 +1248, 5, 5, 5 +1249, 5, 5, 5 +1250, 5, 5, 5 +1251, 5, 5, 5 +1252, 5, 5, 5 +1253, 5, 5, 5 +1254, 5, 5, 5 +1255, 5, 5, 5 +1256, 5, 5, 5 +1257, 5, 5, 5 +1258, 5, 5, 5 +1259, 5, 5, 5 +1260, 5, 5, 5 +1261, 5, 5, 5 +1262, 5, 5, 5 +1263, 5, 5, 5 +1264, 5, 5, 5 +1265, 5, 5, 5 +1266, 5, 5, 5 +1267, 5, 5, 5 +1268, 5, 5, 5 +1269, 5, 5, 5 +1270, 5, 5, 5 +1271, 5, 5, 5 +1272, 5, 5, 5 +1273, 5, 5, 5 +1274, 5, 5, 5 +1275, 5, 5, 5 +1276, 5, 5, 5 +1277, 5, 5, 5 +1278, 5, 5, 5 +1279, 5, 5, 5 +1280, 5, 5, 5 +1281, 5, 5, 5 +1282, 5, 5, 5 +1283, 5, 5, 5 +1284, 5, 5, 5 +1285, 5, 5, 5 +1286, 5, 5, 5 +1287, 5, 5, 5 +1288, 5, 5, 5 +1289, 5, 5, 5 +1290, 5, 5, 5 +1291, 5, 5, 5 +1292, 5, 5, 5 +1293, 5, 5, 5 +1294, 5, 5, 5 +1295, 5, 5, 5 +1296, 5, 5, 5 +1297, 5, 5, 5 +1298, 5, 5, 5 +1299, 5, 5, 5 +1300, 5, 5, 5 +1301, 5, 5, 5 +1302, 5, 5, 5 +1303, 5, 5, 5 +1304, 5, 5, 5 +1305, 5, 5, 5 +1306, 5, 5, 5 +1307, 5, 5, 5 +1308, 5, 5, 5 +1309, 5, 5, 5 +1310, 5, 5, 5 +1311, 5, 5, 5 +1312, 5, 5, 5 +1313, 5, 5, 5 +1314, 5, 5, 5 +1315, 5, 5, 5 +1316, 5, 5, 5 +1317, 5, 5, 5 +1318, 5, 5, 5 +1319, 5, 5, 5 +1320, 5, 5, 5 +1321, 5, 5, 5 +1322, 5, 5, 5 +1323, 5, 5, 5 +1324, 5, 5, 5 +1325, 5, 5, 5 +1326, 5, 5, 5 +1327, 5, 5, 5 +1328, 5, 5, 5 +1329, 5, 5, 5 +1330, 5, 5, 5 +1331, 5, 5, 5 +1332, 5, 5, 5 +1333, 5, 5, 5 +1334, 5, 5, 5 +1335, 5, 5, 5 +1336, 5, 5, 5 +1337, 5, 5, 5 +1338, 5, 5, 5 +1339, 5, 5, 5 +1340, 5, 5, 5 +1341, 5, 5, 5 +1342, 5, 5, 5 +1343, 5, 5, 5 +1344, 5, 5, 5 +1345, 5, 5, 5 +1346, 5, 5, 5 +1347, 5, 5, 5 +1348, 5, 5, 5 +1349, 5, 5, 5 +1350, 5, 5, 5 +1351, 5, 5, 5 +1352, 5, 5, 5 +1353, 5, 5, 5 +1354, 5, 5, 5 +1355, 5, 5, 5 +1356, 5, 5, 5 +1357, 5, 5, 5 +1358, 5, 5, 5 +1359, 5, 5, 5 +1360, 5, 5, 5 +1361, 5, 5, 5 +1362, 5, 5, 5 +1363, 5, 5, 5 +1364, 5, 5, 5 +1365, 5, 5, 5 +1366, 5, 5, 5 +1367, 5, 5, 5 +1368, 5, 5, 5 +1369, 5, 5, 5 +1370, 5, 5, 5 +1371, 5, 5, 5 +1372, 5, 5, 5 +1373, 5, 5, 5 +1374, 5, 5, 5 +1375, 5, 5, 5 +1376, 5, 5, 5 +1377, 5, 5, 5 +1378, 5, 5, 5 +1379, 5, 5, 5 +1380, 5, 5, 5 +1381, 5, 5, 5 +1382, 5, 5, 5 +1383, 5, 5, 5 +1384, 5, 5, 5 +1385, 5, 5, 5 +1386, 5, 5, 5 +1387, 5, 5, 5 +1388, 5, 5, 5 +1389, 5, 5, 5 +1390, 5, 5, 5 +1391, 5, 5, 5 +1392, 5, 5, 5 +1393, 5, 5, 5 +1394, 5, 5, 5 +1395, 5, 5, 5 +1396, 5, 5, 5 +1397, 5, 5, 5 +1398, 5, 5, 5 +1399, 5, 5, 5 +1400, 5, 5, 5 +1401, 5, 5, 5 +1402, 5, 5, 5 +1403, 5, 5, 5 +1404, 5, 5, 5 +1405, 5, 5, 5 +1406, 5, 5, 5 +1407, 5, 5, 5 +1408, 5, 5, 5 +1409, 5, 5, 5 +1410, 5, 5, 5 +1411, 5, 5, 5 +1412, 5, 5, 5 +1413, 5, 5, 5 +1414, 5, 5, 5 +1415, 5, 5, 5 +1416, 5, 5, 5 +1417, 5, 5, 5 +1418, 5, 5, 5 +1419, 5, 5, 5 +1420, 5, 5, 5 +1421, 5, 5, 5 +1422, 5, 5, 5 +1423, 5, 5, 5 +1424, 5, 5, 5 +1425, 5, 5, 5 +1426, 5, 5, 5 +1427, 5, 5, 5 +1428, 5, 5, 5 +1429, 5, 5, 5 +1430, 5, 5, 5 +1431, 5, 5, 5 +1432, 5, 5, 5 +1433, 5, 5, 5 +1434, 5, 5, 5 +1435, 5, 5, 5 +1436, 5, 5, 5 +1437, 5, 5, 5 +1438, 5, 5, 5 +1439, 5, 5, 5 +1440, 5, 5, 5 +1441, 5, 5, 5 +1442, 5, 5, 5 +1443, 5, 5, 5 +1444, 5, 5, 5 +1445, 5, 5, 5 +1446, 5, 5, 5 +1447, 5, 5, 5 +1448, 5, 5, 5 +1449, 5, 5, 5 +1450, 5, 5, 5 +1451, 5, 5, 5 +1452, 5, 5, 5 +1453, 5, 5, 5 +1454, 5, 5, 5 +1455, 5, 5, 5 +1456, 5, 5, 5 +1457, 5, 5, 5 +1458, 5, 5, 5 +1459, 5, 5, 5 +1460, 5, 5, 5 +1461, 5, 5, 5 +1462, 5, 5, 5 +1463, 5, 5, 5 +1464, 5, 5, 5 +1465, 5, 5, 5 +1466, 5, 5, 5 +1467, 5, 5, 5 +1468, 5, 5, 5 +1469, 5, 5, 5 +1470, 5, 5, 5 +1471, 5, 5, 5 +1472, 5, 5, 5 +1473, 5, 5, 5 +1474, 5, 5, 5 +1475, 5, 5, 5 +1476, 5, 5, 5 +1477, 5, 5, 5 +1478, 5, 5, 5 +1479, 5, 5, 5 +1480, 5, 5, 5 +1481, 5, 5, 5 +1482, 5, 5, 5 +1483, 5, 5, 5 +1484, 5, 5, 5 +1485, 5, 5, 5 +1486, 5, 5, 5 +1487, 5, 5, 5 +1488, 5, 5, 5 +1489, 5, 5, 5 +1490, 5, 5, 5 +1491, 5, 5, 5 +1492, 5, 5, 5 +1493, 5, 5, 5 +1494, 5, 5, 5 +1495, 5, 5, 5 +1496, 5, 5, 5 +1497, 5, 5, 5 +1498, 5, 5, 5 +1499, 5, 5, 5 +1500, 5, 5, 5 +1501, 5, 5, 5 +1502, 5, 5, 5 +1503, 5, 5, 5 +1504, 5, 5, 5 +1505, 5, 5, 5 +1506, 5, 5, 5 +1507, 5, 5, 5 +1508, 5, 5, 5 +1509, 5, 5, 5 +1510, 5, 5, 5 +1511, 5, 5, 5 +1512, 5, 5, 5 +1513, 5, 5, 5 +1514, 5, 5, 5 +1515, 5, 5, 5 +1516, 5, 5, 5 +1517, 5, 5, 5 +1518, 5, 5, 5 +1519, 5, 5, 5 +1520, 5, 5, 5 +1521, 5, 5, 5 +1522, 5, 5, 5 +1523, 5, 5, 5 +1524, 5, 5, 5 +1525, 5, 5, 5 +1526, 5, 5, 5 +1527, 5, 5, 5 +1528, 5, 5, 5 +1529, 5, 5, 5 +1530, 5, 5, 5 +1531, 5, 5, 5 +1532, 5, 5, 5 +1533, 5, 5, 5 +1534, 5, 5, 5 +1535, 5, 5, 5 +1536, 5, 5, 5 +1537, 5, 5, 5 +1538, 5, 5, 5 +1539, 5, 5, 5 +1540, 5, 5, 5 +1541, 5, 5, 5 +1542, 5, 5, 5 +1543, 5, 5, 5 +1544, 5, 5, 5 +1545, 5, 5, 5 +1546, 5, 5, 5 +1547, 5, 5, 5 +1548, 5, 5, 5 +1549, 5, 5, 5 +1550, 5, 5, 5 +1551, 5, 5, 5 +1552, 5, 5, 5 +1553, 5, 5, 5 +1554, 5, 5, 5 +1555, 5, 5, 5 +1556, 5, 5, 5 +1557, 5, 5, 5 +1558, 5, 5, 5 +1559, 5, 5, 5 +1560, 5, 5, 5 +1561, 5, 5, 5 +1562, 5, 5, 5 +1563, 5, 5, 5 +1564, 5, 5, 5 +1565, 5, 5, 5 +1566, 5, 5, 5 +1567, 5, 5, 5 +1568, 5, 5, 5 +1569, 5, 5, 5 +1570, 5, 5, 5 +1571, 5, 5, 5 +1572, 5, 5, 5 +1573, 5, 5, 5 +1574, 5, 5, 5 +1575, 5, 5, 5 +1576, 5, 5, 5 +1577, 5, 5, 5 +1578, 5, 5, 5 +1579, 5, 5, 5 +1580, 5, 5, 5 +1581, 5, 5, 5 +1582, 5, 5, 5 +1583, 5, 5, 5 +1584, 5, 5, 5 +1585, 5, 5, 5 +1586, 5, 5, 5 +1587, 5, 5, 5 +1588, 5, 5, 5 +1589, 5, 5, 5 +1590, 5, 5, 5 +1591, 5, 5, 5 +1592, 5, 5, 5 +1593, 5, 5, 5 +1594, 5, 5, 5 +1595, 5, 5, 5 +1596, 5, 5, 5 +1597, 5, 5, 5 +1598, 5, 5, 5 +1599, 5, 5, 5 +1600, 0, 0, 5 +1601, 0, 0, 5 +1602, 0, 0, 5 +1603, 0, 0, 5 +1604, 0, 0, 5 +1605, 0, 0, 5 +1606, 0, 0, 5 +1607, 0, 0, 5 +1608, 0, 0, 5 +1609, 0, 0, 5 +1610, 0, 0, 5 +1611, 0, 0, 5 +1612, 0, 0, 5 +1613, 0, 0, 5 +1614, 0, 0, 5 +1615, 0, 0, 5 +1616, 0, 0, 5 +1617, 0, 0, 5 +1618, 0, 0, 5 +1619, 0, 0, 5 +1620, 0, 0, 5 +1621, 0, 0, 5 +1622, 0, 0, 5 +1623, 0, 0, 5 +1624, 0, 0, 5 +1625, 0, 0, 5 +1626, 0, 0, 5 +1627, 0, 0, 5 +1628, 0, 0, 5 +1629, 0, 0, 5 +1630, 0, 0, 5 +1631, 0, 0, 5 +1632, 0, 0, 5 +1633, 0, 0, 5 +1634, 0, 0, 5 +1635, 0, 0, 5 +1636, 0, 0, 5 +1637, 0, 0, 5 +1638, 0, 0, 5 +1639, 0, 0, 5 +1640, 0, 0, 5 +1641, 0, 0, 5 +1642, 0, 0, 5 +1643, 0, 0, 5 +1644, 0, 0, 5 +1645, 0, 0, 5 +1646, 0, 0, 5 +1647, 0, 0, 5 +1648, 0, 0, 5 +1649, 0, 0, 5 +1650, 0, 0, 5 +1651, 0, 0, 5 +1652, 0, 0, 5 +1653, 0, 0, 5 +1654, 0, 0, 5 +1655, 0, 0, 5 +1656, 0, 0, 5 +1657, 0, 0, 5 +1658, 0, 0, 5 +1659, 0, 0, 5 +1660, 0, 0, 5 +1661, 0, 0, 5 +1662, 0, 0, 5 +1663, 0, 0, 5 +1664, 0, 0, 5 +1665, 0, 0, 5 +1666, 0, 0, 5 +1667, 0, 0, 5 +1668, 0, 0, 5 +1669, 0, 0, 5 +1670, 0, 0, 5 +1671, 0, 0, 5 +1672, 0, 0, 5 +1673, 0, 0, 5 +1674, 0, 0, 5 +1675, 0, 0, 5 +1676, 0, 0, 5 +1677, 0, 0, 5 +1678, 0, 0, 5 +1679, 0, 0, 5 +1680, 0, 0, 5 +1681, 0, 0, 5 +1682, 0, 0, 5 +1683, 0, 0, 5 +1684, 0, 0, 5 +1685, 0, 0, 5 +1686, 0, 0, 5 +1687, 0, 0, 5 +1688, 0, 0, 5 +1689, 0, 0, 5 +1690, 0, 0, 5 +1691, 0, 0, 5 +1692, 0, 0, 5 +1693, 0, 0, 5 +1694, 0, 0, 5 +1695, 0, 0, 5 +1696, 0, 0, 5 +1697, 0, 0, 5 +1698, 0, 0, 5 +1699, 0, 0, 5 +1700, 0, 0, 5 +1701, 0, 0, 5 +1702, 0, 0, 5 +1703, 0, 0, 5 +1704, 0, 0, 5 +1705, 0, 0, 5 +1706, 0, 0, 5 +1707, 0, 0, 5 +1708, 0, 0, 5 +1709, 0, 0, 5 +1710, 0, 0, 5 +1711, 0, 0, 5 +1712, 0, 0, 5 +1713, 0, 0, 5 +1714, 0, 0, 5 +1715, 0, 0, 5 +1716, 0, 0, 5 +1717, 0, 0, 5 +1718, 0, 0, 5 +1719, 0, 0, 5 +1720, 0, 0, 5 +1721, 0, 0, 5 +1722, 0, 0, 5 +1723, 0, 0, 5 +1724, 0, 0, 5 +1725, 0, 0, 5 +1726, 0, 0, 5 +1727, 0, 0, 5 +1728, 0, 0, 5 +1729, 0, 0, 5 +1730, 0, 0, 5 +1731, 0, 0, 5 +1732, 0, 0, 5 +1733, 0, 0, 5 +1734, 0, 0, 5 +1735, 0, 0, 5 +1736, 0, 0, 5 +1737, 0, 0, 5 +1738, 0, 0, 5 +1739, 0, 0, 5 +1740, 0, 0, 5 +1741, 0, 0, 5 +1742, 0, 0, 5 +1743, 0, 0, 5 +1744, 0, 0, 5 +1745, 0, 0, 5 +1746, 0, 0, 5 +1747, 0, 0, 5 +1748, 0, 0, 5 +1749, 0, 0, 5 +1750, 0, 0, 5 +1751, 0, 0, 5 +1752, 0, 0, 5 +1753, 0, 0, 5 +1754, 0, 0, 5 +1755, 0, 0, 5 +1756, 0, 0, 5 +1757, 0, 0, 5 +1758, 0, 0, 5 +1759, 0, 0, 5 +1760, 0, 0, 5 +1761, 0, 0, 5 +1762, 0, 0, 5 +1763, 0, 0, 5 +1764, 0, 0, 5 +1765, 0, 0, 5 +1766, 0, 0, 5 +1767, 0, 0, 5 +1768, 0, 0, 5 +1769, 0, 0, 5 +1770, 0, 0, 5 +1771, 0, 0, 5 +1772, 0, 0, 5 +1773, 0, 0, 5 +1774, 0, 0, 5 +1775, 0, 0, 5 +1776, 0, 0, 5 +1777, 0, 0, 5 +1778, 0, 0, 5 +1779, 0, 0, 5 +1780, 0, 0, 5 +1781, 0, 0, 5 +1782, 0, 0, 5 +1783, 0, 0, 5 +1784, 0, 0, 5 +1785, 0, 0, 5 +1786, 0, 0, 5 +1787, 0, 0, 5 +1788, 0, 0, 5 +1789, 0, 0, 5 +1790, 0, 0, 5 +1791, 0, 0, 5 +1792, 0, 0, 5 +1793, 0, 0, 5 +1794, 0, 0, 5 +1795, 0, 0, 5 +1796, 0, 0, 5 +1797, 0, 0, 5 +1798, 0, 0, 5 +1799, 0, 0, 5 +1800, 0, 0, 5 +1801, 0, 0, 5 +1802, 0, 0, 5 +1803, 0, 0, 5 +1804, 0, 0, 5 +1805, 0, 0, 5 +1806, 0, 0, 5 +1807, 0, 0, 5 +1808, 0, 0, 5 +1809, 0, 0, 5 +1810, 0, 0, 5 +1811, 0, 0, 5 +1812, 0, 0, 5 +1813, 0, 0, 5 +1814, 0, 0, 5 +1815, 0, 0, 5 +1816, 0, 0, 5 +1817, 0, 0, 5 +1818, 0, 0, 5 +1819, 0, 0, 5 +1820, 0, 0, 5 +1821, 0, 0, 5 +1822, 0, 0, 5 +1823, 0, 0, 5 +1824, 0, 0, 5 +1825, 0, 0, 5 +1826, 0, 0, 5 +1827, 0, 0, 5 +1828, 0, 0, 5 +1829, 0, 0, 5 +1830, 0, 0, 5 +1831, 0, 0, 5 +1832, 0, 0, 5 +1833, 0, 0, 5 +1834, 0, 0, 5 +1835, 0, 0, 5 +1836, 0, 0, 5 +1837, 0, 0, 5 +1838, 0, 0, 5 +1839, 0, 0, 5 +1840, 0, 0, 5 +1841, 0, 0, 5 +1842, 0, 0, 5 +1843, 0, 0, 5 +1844, 0, 0, 5 +1845, 0, 0, 5 +1846, 0, 0, 5 +1847, 0, 0, 5 +1848, 0, 0, 5 +1849, 0, 0, 5 +1850, 0, 0, 5 +1851, 0, 0, 5 +1852, 0, 0, 5 +1853, 0, 0, 5 +1854, 0, 0, 5 +1855, 0, 0, 5 +1856, 0, 0, 5 +1857, 0, 0, 5 +1858, 0, 0, 5 +1859, 0, 0, 5 +1860, 0, 0, 5 +1861, 0, 0, 5 +1862, 0, 0, 5 +1863, 0, 0, 5 +1864, 0, 0, 5 +1865, 0, 0, 5 +1866, 0, 0, 5 +1867, 0, 0, 5 +1868, 0, 0, 5 +1869, 0, 0, 5 +1870, 0, 0, 5 +1871, 0, 0, 5 +1872, 0, 0, 5 +1873, 0, 0, 5 +1874, 0, 0, 5 +1875, 0, 0, 5 +1876, 0, 0, 5 +1877, 0, 0, 5 +1878, 0, 0, 5 +1879, 0, 0, 5 +1880, 0, 0, 5 +1881, 0, 0, 5 +1882, 0, 0, 5 +1883, 0, 0, 5 +1884, 0, 0, 5 +1885, 0, 0, 5 +1886, 0, 0, 5 +1887, 0, 0, 5 +1888, 0, 0, 5 +1889, 0, 0, 5 +1890, 0, 0, 5 +1891, 0, 0, 5 +1892, 0, 0, 5 +1893, 0, 0, 5 +1894, 0, 0, 5 +1895, 0, 0, 5 +1896, 0, 0, 5 +1897, 0, 0, 5 +1898, 0, 0, 5 +1899, 0, 0, 5 +1900, 0, 0, 5 +1901, 0, 0, 5 +1902, 0, 0, 5 +1903, 0, 0, 5 +1904, 0, 0, 5 +1905, 0, 0, 5 +1906, 0, 0, 5 +1907, 0, 0, 5 +1908, 0, 0, 5 +1909, 0, 0, 5 +1910, 0, 0, 5 +1911, 0, 0, 5 +1912, 0, 0, 5 +1913, 0, 0, 5 +1914, 0, 0, 5 +1915, 0, 0, 5 +1916, 0, 0, 5 +1917, 0, 0, 5 +1918, 0, 0, 5 +1919, 0, 0, 5 +1920, 0, 0, 5 +1921, 0, 0, 5 +1922, 0, 0, 5 +1923, 0, 0, 5 +1924, 0, 0, 5 +1925, 0, 0, 5 +1926, 0, 0, 5 +1927, 0, 0, 5 +1928, 0, 0, 5 +1929, 0, 0, 5 +1930, 0, 0, 5 +1931, 0, 0, 5 +1932, 0, 0, 5 +1933, 0, 0, 5 +1934, 0, 0, 5 +1935, 0, 0, 5 +1936, 0, 0, 5 +1937, 0, 0, 5 +1938, 0, 0, 5 +1939, 0, 0, 5 +1940, 0, 0, 5 +1941, 0, 0, 5 +1942, 0, 0, 5 +1943, 0, 0, 5 +1944, 0, 0, 5 +1945, 0, 0, 5 +1946, 0, 0, 5 +1947, 0, 0, 5 +1948, 0, 0, 5 +1949, 0, 0, 5 +1950, 0, 0, 5 +1951, 0, 0, 5 +1952, 0, 0, 5 +1953, 0, 0, 5 +1954, 0, 0, 5 +1955, 0, 0, 5 +1956, 0, 0, 5 +1957, 0, 0, 5 +1958, 0, 0, 5 +1959, 0, 0, 5 +1960, 0, 0, 5 +1961, 0, 0, 5 +1962, 0, 0, 5 +1963, 0, 0, 5 +1964, 0, 0, 5 +1965, 0, 0, 5 +1966, 0, 0, 5 +1967, 0, 0, 5 +1968, 0, 0, 5 +1969, 0, 0, 5 +1970, 0, 0, 5 +1971, 0, 0, 5 +1972, 0, 0, 5 +1973, 0, 0, 5 +1974, 0, 0, 5 +1975, 0, 0, 5 +1976, 0, 0, 5 +1977, 0, 0, 5 +1978, 0, 0, 5 +1979, 0, 0, 5 +1980, 0, 0, 5 +1981, 0, 0, 5 +1982, 0, 0, 5 +1983, 0, 0, 5 +1984, 0, 0, 5 +1985, 0, 0, 5 +1986, 0, 0, 5 +1987, 0, 0, 5 +1988, 0, 0, 5 +1989, 0, 0, 5 +1990, 0, 0, 5 +1991, 0, 0, 5 +1992, 0, 0, 5 +1993, 0, 0, 5 +1994, 0, 0, 5 +1995, 0, 0, 5 +1996, 0, 0, 5 +1997, 0, 0, 5 +1998, 0, 0, 5 +1999, 0, 0, 5 +2000, 0, 5, 5 +2001, 0, 5, 5 +2002, 0, 5, 5 +2003, 0, 5, 5 +2004, 0, 5, 5 +2005, 0, 5, 5 +2006, 0, 5, 5 +2007, 0, 5, 5 +2008, 0, 5, 5 +2009, 0, 5, 5 +2010, 0, 5, 5 +2011, 0, 5, 5 +2012, 0, 5, 5 +2013, 0, 5, 0 +2014, 0, 5, 0 +2015, 0, 5, 0 +2016, 0, 5, 0.0031559 +2017, 0, 5, 0.0031559 +2018, 0, 5, 0.00322125 +2019, 0, 5, 0.0031559 +2020, 0, 5, 0.00322125 +2021, 0, 5, 0.00322125 +2022, 0, 5, 0.00322125 +2023, 0, 5, 0.00322125 +2024, 0, 5, 0.00322125 +2025, 0, 5, 0.00322125 +2026, 0, 5, 0.00322125 +2027, 0, 5, 0.00322125 +2028, 0, 5, 0.00322125 +2029, 0, 5, 0.00322125 +2030, 0, 5, 0.00322125 +2031, 0, 5, 0.00322125 +2032, 0, 5, 0.00322125 +2033, 0, 5, 0.00322125 +2034, 0, 5, 0.00322125 +2035, 0, 5, 0.00322125 +2036, 0, 5, 0.00322125 +2037, 0, 5, 0.00322125 +2038, 0, 5, 0.00322125 +2039, 0, 5, 0.00322125 +2040, 0, 5, 0.00322125 +2041, 0, 5, 0.00322125 +2042, 0, 5, 0.00322125 +2043, 0, 5, 0.00322125 +2044, 0, 5, 0.00322125 +2045, 0, 5, 0.00322125 +2046, 0, 5, 0.00322125 +2047, 0, 5, 0.00322125 +2048, 0, 5, 0.00322125 +2049, 0, 5, 0.00322125 +2050, 0, 5, 0.00322125 +2051, 0, 5, 0.00322125 +2052, 0, 5, 0.00322125 +2053, 0, 5, 0.00322125 +2054, 0, 5, 0.00322125 +2055, 0, 5, 0.00322125 +2056, 0, 5, 0.00322125 +2057, 0, 5, 0.00322125 +2058, 0, 5, 0.00322125 +2059, 0, 5, 0.00322125 +2060, 0, 5, 0.00322125 +2061, 0, 5, 0.00322125 +2062, 0, 5, 0.00322125 +2063, 0, 5, 0.00322125 +2064, 0, 5, 0.00322125 +2065, 0, 5, 0.00322125 +2066, 0, 5, 0.00322125 +2067, 0, 5, 0.00322125 +2068, 0, 5, 0.00322125 +2069, 0, 5, 0.00322125 +2070, 0, 5, 0.00322125 +2071, 0, 5, 0.00322125 +2072, 0, 5, 0.00322125 +2073, 0, 5, 0.00322125 +2074, 0, 5, 0.00322125 +2075, 0, 5, 0.00322125 +2076, 0, 5, 0.00322125 +2077, 0, 5, 0.00322125 +2078, 0, 5, 0.00322125 +2079, 0, 5, 0.00322125 +2080, 0, 5, 0.00322125 +2081, 0, 5, 0.00322125 +2082, 0, 5, 0.00322125 +2083, 0, 5, 0.00322125 +2084, 0, 5, 0.00322125 +2085, 0, 5, 0.00322125 +2086, 0, 5, 0.00322125 +2087, 0, 5, 0.00322125 +2088, 0, 5, 0.00322125 +2089, 0, 5, 0.00322125 +2090, 0, 5, 0.00322125 +2091, 0, 5, 0.00322125 +2092, 0, 5, 0.00322125 +2093, 0, 5, 0.00322125 +2094, 0, 5, 0.00322125 +2095, 0, 5, 0.00322125 +2096, 0, 5, 0.00322125 +2097, 0, 5, 0.00322125 +2098, 0, 5, 0.00322125 +2099, 0, 5, 0.00322125 +2100, 0, 5, 0.00322125 +2101, 0, 5, 0.00322125 +2102, 0, 5, 0.00322125 +2103, 0, 5, 0.00322125 +2104, 0, 5, 0.00322125 +2105, 0, 5, 0.00322125 +2106, 0, 5, 0.00322125 +2107, 0, 5, 0.00322125 +2108, 0, 5, 0.00322125 +2109, 0, 5, 0.00322125 +2110, 0, 5, 0.00322125 +2111, 0, 5, 0.00322125 +2112, 0, 5, 0.00322125 +2113, 0, 5, 0.00322125 +2114, 0, 5, 0.00322125 +2115, 0, 5, 0.00322125 +2116, 0, 5, 0.00322125 +2117, 0, 5, 0.00322125 +2118, 0, 5, 0.00322125 +2119, 0, 5, 0.00322125 +2120, 0, 5, 0.00322125 +2121, 0, 5, 0.00322125 +2122, 0, 5, 0.00322125 +2123, 0, 5, 0.00322125 +2124, 0, 5, 0.00322125 +2125, 0, 5, 0.00322125 +2126, 0, 5, 0.00322125 +2127, 0, 5, 0.00322125 +2128, 0, 5, 0.00322125 +2129, 0, 5, 0.00322125 +2130, 0, 5, 0.00322125 +2131, 0, 5, 0.00322125 +2132, 0, 5, 0.00322125 +2133, 0, 5, 0.00322125 +2134, 0, 5, 0.00322125 +2135, 0, 5, 0.00322125 +2136, 0, 5, 0.00322125 +2137, 0, 5, 0.00322125 +2138, 0, 5, 0.00322125 +2139, 0, 5, 0.00322125 +2140, 0, 5, 0.00322125 +2141, 0, 5, 0.00322125 +2142, 0, 5, 0.00322125 +2143, 0, 5, 0.00322125 +2144, 0, 5, 0.00322125 +2145, 0, 5, 0.00322125 +2146, 0, 5, 0.00322125 +2147, 0, 5, 0.00322125 +2148, 0, 5, 0.00322125 +2149, 0, 5, 0.00322125 +2150, 0, 5, 0.00322125 +2151, 0, 5, 0.00322125 +2152, 0, 5, 0.00322125 +2153, 0, 5, 0.00322125 +2154, 0, 5, 0.00322125 +2155, 0, 5, 0.00322125 +2156, 0, 5, 0.00322125 +2157, 0, 5, 0.00322125 +2158, 0, 5, 0.00322125 +2159, 0, 5, 0.00322125 +2160, 0, 5, 0.00322125 +2161, 0, 5, 0.00322125 +2162, 0, 5, 0.00322125 +2163, 0, 5, 0.00322125 +2164, 0, 5, 0.00322125 +2165, 0, 5, 0.00322125 +2166, 0, 5, 0.00322125 +2167, 0, 5, 0.00322125 +2168, 0, 5, 0.00322125 +2169, 0, 5, 0.00322125 +2170, 0, 5, 0.00322125 +2171, 0, 5, 0.00322125 +2172, 0, 5, 0.00322125 +2173, 0, 5, 0.00322125 +2174, 0, 5, 0.00322125 +2175, 0, 5, 0.00322125 +2176, 0, 5, 0.00322125 +2177, 0, 5, 0.00322125 +2178, 0, 5, 0.00322125 +2179, 0, 5, 0.00322125 +2180, 0, 5, 0.00322125 +2181, 0, 5, 0.00322125 +2182, 0, 5, 0.00322125 +2183, 0, 5, 0.00322125 +2184, 0, 5, 0.00322125 +2185, 0, 5, 0.00322125 +2186, 0, 5, 0.00322125 +2187, 0, 5, 0.00322125 +2188, 0, 5, 0.00322125 +2189, 0, 5, 0.00322125 +2190, 0, 5, 0.00322125 +2191, 0, 5, 0.00322125 +2192, 0, 5, 0.00322125 +2193, 0, 5, 0.00322125 +2194, 0, 5, 0.00322125 +2195, 0, 5, 0.00322125 +2196, 0, 5, 0.00322125 +2197, 0, 5, 0.00322125 +2198, 0, 5, 0.00322125 +2199, 0, 5, 0.00322125 +2200, 0, 5, 0.00322125 +2201, 0, 5, 0.00322125 +2202, 0, 5, 0.00322125 +2203, 0, 5, 0.00322125 +2204, 0, 5, 0.00322125 +2205, 0, 5, 0.00322125 +2206, 0, 5, 0.00322125 +2207, 0, 5, 0.00322125 +2208, 0, 5, 0.00322125 +2209, 0, 5, 0.00322125 +2210, 0, 5, 0.00322125 +2211, 0, 5, 0.00322125 +2212, 0, 5, 0.00322125 +2213, 0, 5, 0.00322125 +2214, 0, 5, 0.00322125 +2215, 0, 5, 0.00322125 +2216, 0, 5, 0.00322125 +2217, 0, 5, 0.00322125 +2218, 0, 5, 0.00322125 +2219, 0, 5, 0.00322125 +2220, 0, 5, 0.00322125 +2221, 0, 5, 0.00322125 +2222, 0, 5, 0.00322125 +2223, 0, 5, 0.00322125 +2224, 0, 5, 0.00322125 +2225, 0, 5, 0.00322125 +2226, 0, 5, 0.00322125 +2227, 0, 5, 0.00322125 +2228, 0, 5, 0.00322125 +2229, 0, 5, 0.00322125 +2230, 0, 5, 0.00322125 +2231, 0, 5, 0.00322125 +2232, 0, 5, 0.00322125 +2233, 0, 5, 0.00322125 +2234, 0, 5, 0.00322125 +2235, 0, 5, 0.00322125 +2236, 0, 5, 0.00322125 +2237, 0, 5, 0.00322125 +2238, 0, 5, 0.00322125 +2239, 0, 5, 0.00322125 +2240, 0, 5, 0.00322125 +2241, 0, 5, 0.00322125 +2242, 0, 5, 0.00322125 +2243, 0, 5, 0.00322125 +2244, 0, 5, 0.00322125 +2245, 0, 5, 0.00322125 +2246, 0, 5, 0.00322125 +2247, 0, 5, 0.00322125 +2248, 0, 5, 0.00322125 +2249, 0, 5, 0.00322125 +2250, 0, 5, 0.00322125 +2251, 0, 5, 0.00322125 +2252, 0, 5, 0.00322125 +2253, 0, 5, 0.00322125 +2254, 0, 5, 0.00322125 +2255, 0, 5, 0.00322125 +2256, 0, 5, 0.00322125 +2257, 0, 5, 0.00322125 +2258, 0, 5, 0.00322125 +2259, 0, 5, 0.00322125 +2260, 0, 5, 0.00322125 +2261, 0, 5, 0.00322125 +2262, 0, 5, 0.00322125 +2263, 0, 5, 0.00322125 +2264, 0, 5, 0.00322125 +2265, 0, 5, 0.00322125 +2266, 0, 5, 0.00322125 +2267, 0, 5, 0.00322125 +2268, 0, 5, 0.00322125 +2269, 0, 5, 0.00322125 +2270, 0, 5, 0.00322125 +2271, 0, 5, 0.00322125 +2272, 0, 5, 0.00322125 +2273, 0, 5, 0.00322125 +2274, 0, 5, 0.00322125 +2275, 0, 5, 0.00322125 +2276, 0, 5, 0.00322125 +2277, 0, 5, 0.00322125 +2278, 0, 5, 0.00322125 +2279, 0, 5, 0.00322125 +2280, 0, 5, 0.00322125 +2281, 0, 5, 0.00322125 +2282, 0, 5, 0.00322125 +2283, 0, 5, 0.00322125 +2284, 0, 5, 0.00322125 +2285, 0, 5, 0.00322125 +2286, 0, 5, 0.00322125 +2287, 0, 5, 0.00322125 +2288, 0, 5, 0.00322125 +2289, 0, 5, 0.00322125 +2290, 0, 5, 0.00322125 +2291, 0, 5, 0.00322125 +2292, 0, 5, 0.00322125 +2293, 0, 5, 0.00322125 +2294, 0, 5, 0.00322125 +2295, 0, 5, 0.00322125 +2296, 0, 5, 0.00322125 +2297, 0, 5, 0.00322125 +2298, 0, 5, 0.00322125 +2299, 0, 5, 0.00322125 +2300, 0, 5, 0.00322125 +2301, 0, 5, 0.00322125 +2302, 0, 5, 0.00322125 +2303, 0, 5, 0.00322125 +2304, 0, 5, 0.00322125 +2305, 0, 5, 0.00322125 +2306, 0, 5, 0.00322125 +2307, 0, 5, 0.00322125 +2308, 0, 5, 0.00322125 +2309, 0, 5, 0.00322125 +2310, 0, 5, 0.00322125 +2311, 0, 5, 0.00322125 +2312, 0, 5, 0.00322125 +2313, 0, 5, 0.00322125 +2314, 0, 5, 0.00322125 +2315, 0, 5, 0.00322125 +2316, 0, 5, 0.00322125 +2317, 0, 5, 0.00322125 +2318, 0, 5, 0.00322125 +2319, 0, 5, 0.00322125 +2320, 0, 5, 0.00322125 +2321, 0, 5, 0.00322125 +2322, 0, 5, 0.00322125 +2323, 0, 5, 0.00322125 +2324, 0, 5, 0.00322125 +2325, 0, 5, 0.00322125 +2326, 0, 5, 0.00322125 +2327, 0, 5, 0.00322125 +2328, 0, 5, 0.00322125 +2329, 0, 5, 0.00322125 +2330, 0, 5, 0.00322125 +2331, 0, 5, 0.00322125 +2332, 0, 5, 0.00322125 +2333, 0, 5, 0.00322125 +2334, 0, 5, 0.00322125 +2335, 0, 5, 0.00322125 +2336, 0, 5, 0.00322125 +2337, 0, 5, 0.00322125 +2338, 0, 5, 0.00322125 +2339, 0, 5, 0.00322125 +2340, 0, 5, 0.00322125 +2341, 0, 5, 0.00322125 +2342, 0, 5, 0.00322125 +2343, 0, 5, 0.00322125 +2344, 0, 5, 0.00322125 +2345, 0, 5, 0.00322125 +2346, 0, 5, 0.00322125 +2347, 0, 5, 0.00322125 +2348, 0, 5, 0.00322125 +2349, 0, 5, 0.00322125 +2350, 0, 5, 0.00322125 +2351, 0, 5, 0.00322125 +2352, 0, 5, 0.00322125 +2353, 0, 5, 0.00322125 +2354, 0, 5, 0.00322125 +2355, 0, 5, 0.00322125 +2356, 0, 5, 0.00322125 +2357, 0, 5, 0.00322125 +2358, 0, 5, 0.00322125 +2359, 0, 5, 0.00322125 +2360, 0, 5, 0.00322125 +2361, 0, 5, 0.00322125 +2362, 0, 5, 0.00322125 +2363, 0, 5, 0.00322125 +2364, 0, 5, 0.00322125 +2365, 0, 5, 0.00322125 +2366, 0, 5, 0.00322125 +2367, 0, 5, 0.00322125 +2368, 0, 5, 0.00322125 +2369, 0, 5, 0.00322125 +2370, 0, 5, 0.00322125 +2371, 0, 5, 0.00322125 +2372, 0, 5, 0.00322125 +2373, 0, 5, 0.00322125 +2374, 0, 5, 0.00322125 +2375, 0, 5, 0.00322125 +2376, 0, 5, 0.00322125 +2377, 0, 5, 0.00322125 +2378, 0, 5, 0.00322125 +2379, 0, 5, 0.00322125 +2380, 0, 5, 0.00322125 +2381, 0, 5, 0.00322125 +2382, 0, 5, 0.00322125 +2383, 0, 5, 0.00322125 +2384, 0, 5, 0.00322125 +2385, 0, 5, 0.00322125 +2386, 0, 5, 0.00322125 +2387, 0, 5, 0.00322125 +2388, 0, 5, 0.00322125 +2389, 0, 5, 0.00322125 +2390, 0, 5, 0.00322125 +2391, 0, 5, 0.00322125 +2392, 0, 5, 0.00322125 +2393, 0, 5, 0.00322125 +2394, 0, 5, 0.00322125 +2395, 0, 5, 0.00322125 +2396, 0, 5, 0.00322125 +2397, 0, 5, 0.00322125 +2398, 0, 5, 0.00322125 +2399, 0, 5, 0.00322125 +2400, 5, 0, 0.00322125 +2401, 5, 0, 0.00322125 +2402, 5, 0, 0.00322125 +2403, 5, 0, 0.00322125 +2404, 5, 0, 0.00322125 +2405, 5, 0, 0.00322125 +2406, 5, 0, 0.00322125 +2407, 5, 0, 0.00322125 +2408, 5, 0, 0.00322125 +2409, 5, 0, 0.00322125 +2410, 5, 0, 0.00322125 +2411, 5, 0, 0.00322125 +2412, 5, 0, 0.00322125 +2413, 5, 0, 0.00322125 +2414, 5, 0, 0.00322125 +2415, 5, 0, 0.00322125 +2416, 5, 0, 0.00322125 +2417, 5, 0, 0.00322125 +2418, 5, 0, 0.00322125 +2419, 5, 0, 0.00322125 +2420, 5, 0, 0.00322125 +2421, 5, 0, 0.00322125 +2422, 5, 0, 0.00322125 +2423, 5, 0, 0.0031559 +2424, 5, 0, 0.00322125 +2425, 5, 0, 0.00322125 +2426, 5, 0, 0.00322125 +2427, 5, 0, 0.00322125 +2428, 5, 0, 0.00322125 +2429, 5, 0, 0.00322125 +2430, 5, 0, 0.00322125 +2431, 5, 0, 0.00322125 +2432, 5, 0, 0.00322125 +2433, 5, 0, 0.00322125 +2434, 5, 0, 0.00322125 +2435, 5, 0, 0.00322125 +2436, 5, 0, 0.00322125 +2437, 5, 0, 0.00322125 +2438, 5, 0, 0.00322125 +2439, 5, 0, 0.00322125 +2440, 5, 0, 0.00322125 +2441, 5, 0, 0.00322125 +2442, 5, 0, 0.00322125 +2443, 5, 0, 0.00322125 +2444, 5, 0, 0.00322125 +2445, 5, 0, 0.00322125 +2446, 5, 0, 0.00322125 +2447, 5, 0, 0.00322125 +2448, 5, 0, 0.00322125 +2449, 5, 0, 0.00322125 +2450, 5, 0, 0.00322125 +2451, 5, 0, 0.00322125 +2452, 5, 0, 0.00322125 +2453, 5, 0, 0.00322125 +2454, 5, 0, 0.00322125 +2455, 5, 0, 0.00322125 +2456, 5, 0, 0.00322125 +2457, 5, 0, 0.00322125 +2458, 5, 0, 0.00322125 +2459, 5, 0, 0.00322125 +2460, 5, 0, 0.00322125 +2461, 5, 0, 0.00322125 +2462, 5, 0, 0.00322125 +2463, 5, 0, 0.00322125 +2464, 5, 0, 0.00322125 +2465, 5, 0, 0.00322125 +2466, 5, 0, 0.00322125 +2467, 5, 0, 0.00322125 +2468, 5, 0, 0.00322125 +2469, 5, 0, 0.00322125 +2470, 5, 0, 0.00322125 +2471, 5, 0, 0.00322125 +2472, 5, 0, 0.00322125 +2473, 5, 0, 0.00322125 +2474, 5, 0, 0.00322125 +2475, 5, 0, 0.00322125 +2476, 5, 0, 0.00322125 +2477, 5, 0, 0.00322125 +2478, 5, 0, 0.00322125 +2479, 5, 0, 0.00322125 +2480, 5, 0, 0.00322125 +2481, 5, 0, 0.00322125 +2482, 5, 0, 0.00322125 +2483, 5, 0, 0.00322125 +2484, 5, 0, 0.00322125 +2485, 5, 0, 0.00322125 +2486, 5, 0, 0.00322125 +2487, 5, 0, 0.00322125 +2488, 5, 0, 0.00322125 +2489, 5, 0, 0.00322125 +2490, 5, 0, 0.00322125 +2491, 5, 0, 0.00322125 +2492, 5, 0, 0.00322125 +2493, 5, 0, 0.00322125 +2494, 5, 0, 0.00322125 +2495, 5, 0, 0.00322125 +2496, 5, 0, 0.00322125 +2497, 5, 0, 0.00322125 +2498, 5, 0, 0.00322125 +2499, 5, 0, 0.00322125 +2500, 5, 0, 0.00322125 +2501, 5, 0, 0.00322125 +2502, 5, 0, 0.00322125 +2503, 5, 0, 0.00322125 +2504, 5, 0, 0.00322125 +2505, 5, 0, 0.00322125 +2506, 5, 0, 0.00322125 +2507, 5, 0, 0.00322125 +2508, 5, 0, 0.00322125 +2509, 5, 0, 0.00322125 +2510, 5, 0, 0.00322125 +2511, 5, 0, 0.00322125 +2512, 5, 0, 0.00322125 +2513, 5, 0, 0.00322125 +2514, 5, 0, 0.00322125 +2515, 5, 0, 0.00322125 +2516, 5, 0, 0.00322125 +2517, 5, 0, 0.00322125 +2518, 5, 0, 0.00322125 +2519, 5, 0, 0.00322125 +2520, 5, 0, 0.00322125 +2521, 5, 0, 0.00322125 +2522, 5, 0, 0.00322125 +2523, 5, 0, 0.00322125 +2524, 5, 0, 0.00322125 +2525, 5, 0, 0.00322125 +2526, 5, 0, 0.00322125 +2527, 5, 0, 0.00322125 +2528, 5, 0, 0.00322125 +2529, 5, 0, 0.00322125 +2530, 5, 0, 0.00322125 +2531, 5, 0, 0.00322125 +2532, 5, 0, 0.00322125 +2533, 5, 0, 0.00322125 +2534, 5, 0, 0.00322125 +2535, 5, 0, 0.00322125 +2536, 5, 0, 0.00322125 +2537, 5, 0, 0.00322125 +2538, 5, 0, 0.00322125 +2539, 5, 0, 0.00322125 +2540, 5, 0, 0.00322125 +2541, 5, 0, 0.00322125 +2542, 5, 0, 0.00322125 +2543, 5, 0, 0.00322125 +2544, 5, 0, 0.00322125 +2545, 5, 0, 0.00322125 +2546, 5, 0, 0.00322125 +2547, 5, 0, 0.00322125 +2548, 5, 0, 0.00322125 +2549, 5, 0, 0.00322125 +2550, 5, 0, 0.00322125 +2551, 5, 0, 0.00322125 +2552, 5, 0, 0.00322125 +2553, 5, 0, 0.00322125 +2554, 5, 0, 0.00322125 +2555, 5, 0, 0.00322125 +2556, 5, 0, 0.00322125 +2557, 5, 0, 0.00322125 +2558, 5, 0, 0.00322125 +2559, 5, 0, 0.00322125 +2560, 5, 0, 0.00322125 +2561, 5, 0, 0.00322125 +2562, 5, 0, 0.00322125 +2563, 5, 0, 0.00322125 +2564, 5, 0, 0.00322125 +2565, 5, 0, 0.00322125 +2566, 5, 0, 0.00322125 +2567, 5, 0, 0.00322125 +2568, 5, 0, 0.00322125 +2569, 5, 0, 0.00322125 +2570, 5, 0, 0.00322125 +2571, 5, 0, 0.00322125 +2572, 5, 0, 0.00322125 +2573, 5, 0, 0.00322125 +2574, 5, 0, 0.00322125 +2575, 5, 0, 0.00322125 +2576, 5, 0, 0.00322125 +2577, 5, 0, 0.00322125 +2578, 5, 0, 0.00322125 +2579, 5, 0, 0.00322125 +2580, 5, 0, 0.00322125 +2581, 5, 0, 0.00322125 +2582, 5, 0, 0.00322125 +2583, 5, 0, 0.00322125 +2584, 5, 0, 0.00322125 +2585, 5, 0, 0.00322125 +2586, 5, 0, 0.00322125 +2587, 5, 0, 0.00322125 +2588, 5, 0, 0.00322125 +2589, 5, 0, 0.00322125 +2590, 5, 0, 0.00322125 +2591, 5, 0, 0.00322125 +2592, 5, 0, 0.00322125 +2593, 5, 0, 0.00322125 +2594, 5, 0, 0.00322125 +2595, 5, 0, 0.00322125 +2596, 5, 0, 0.00322125 +2597, 5, 0, 0.00322125 +2598, 5, 0, 0.00322125 +2599, 5, 0, 0.00322125 +2600, 5, 0, 0.00322125 +2601, 5, 0, 0.00322125 +2602, 5, 0, 0.00322125 +2603, 5, 0, 0.00322125 +2604, 5, 0, 0.00322125 +2605, 5, 0, 0.00322125 +2606, 5, 0, 0.00322125 +2607, 5, 0, 0.00322125 +2608, 5, 0, 0.00322125 +2609, 5, 0, 0.00322125 +2610, 5, 0, 0.00322125 +2611, 5, 0, 0.00322125 +2612, 5, 0, 0.00322125 +2613, 5, 0, 0.00322125 +2614, 5, 0, 0.00322125 +2615, 5, 0, 0.00322125 +2616, 5, 0, 0.00322125 +2617, 5, 0, 0.00322125 +2618, 5, 0, 0.00322125 +2619, 5, 0, 0.00322125 +2620, 5, 0, 0.00322125 +2621, 5, 0, 0.00322125 +2622, 5, 0, 0.00322125 +2623, 5, 0, 0.00322125 +2624, 5, 0, 0.00322125 +2625, 5, 0, 0.00322125 +2626, 5, 0, 0.00322125 +2627, 5, 0, 0.00322125 +2628, 5, 0, 0.00322125 +2629, 5, 0, 0.00322125 +2630, 5, 0, 0.00322125 +2631, 5, 0, 0.00322125 +2632, 5, 0, 0.00322125 +2633, 5, 0, 0.00322125 +2634, 5, 0, 0.00322125 +2635, 5, 0, 0.00322125 +2636, 5, 0, 0.00322125 +2637, 5, 0, 0.00322125 +2638, 5, 0, 0.00322125 +2639, 5, 0, 0.00322125 +2640, 5, 0, 0.00322125 +2641, 5, 0, 0.00322125 +2642, 5, 0, 0.00322125 +2643, 5, 0, 0.00322125 +2644, 5, 0, 0.00322125 +2645, 5, 0, 0.00322125 +2646, 5, 0, 0.00322125 +2647, 5, 0, 0.00322125 +2648, 5, 0, 0.00322125 +2649, 5, 0, 0.00322125 +2650, 5, 0, 0.00322125 +2651, 5, 0, 0.00322125 +2652, 5, 0, 0.00322125 +2653, 5, 0, 0.00322125 +2654, 5, 0, 0.00322125 +2655, 5, 0, 0.00322125 +2656, 5, 0, 0.00322125 +2657, 5, 0, 0.00322125 +2658, 5, 0, 0.00322125 +2659, 5, 0, 0.00322125 +2660, 5, 0, 0.00322125 +2661, 5, 0, 0.00322125 +2662, 5, 0, 0.00322125 +2663, 5, 0, 0.00322125 +2664, 5, 0, 0.00322125 +2665, 5, 0, 0.00322125 +2666, 5, 0, 0.00322125 +2667, 5, 0, 0.00322125 +2668, 5, 0, 0.00322125 +2669, 5, 0, 0.00322125 +2670, 5, 0, 0.00322125 +2671, 5, 0, 0.00322125 +2672, 5, 0, 0.00322125 +2673, 5, 0, 0.00322125 +2674, 5, 0, 0.00322125 +2675, 5, 0, 0.00322125 +2676, 5, 0, 0.00322125 +2677, 5, 0, 0.00322125 +2678, 5, 0, 0.00322125 +2679, 5, 0, 0.00322125 +2680, 5, 0, 0.00322125 +2681, 5, 0, 0.00322125 +2682, 5, 0, 0.00322125 +2683, 5, 0, 0.00322125 +2684, 5, 0, 0.00322125 +2685, 5, 0, 0.00322125 +2686, 5, 0, 0.00322125 +2687, 5, 0, 0.00322125 +2688, 5, 0, 0.00322125 +2689, 5, 0, 0.00322125 +2690, 5, 0, 0.00322125 +2691, 5, 0, 0.00322125 +2692, 5, 0, 0.00322125 +2693, 5, 0, 0.00322125 +2694, 5, 0, 0.00322125 +2695, 5, 0, 0.00322125 +2696, 5, 0, 0.00322125 +2697, 5, 0, 0.00322125 +2698, 5, 0, 0.00322125 +2699, 5, 0, 0.00322125 +2700, 5, 0, 0.00322125 +2701, 5, 0, 0.00322125 +2702, 5, 0, 0.00322125 +2703, 5, 0, 0.00322125 +2704, 5, 0, 0.00322125 +2705, 5, 0, 0.00322125 +2706, 5, 0, 0.00322125 +2707, 5, 0, 0.00322125 +2708, 5, 0, 0.00322125 +2709, 5, 0, 0.00322125 +2710, 5, 0, 0.00322125 +2711, 5, 0, 0.00322125 +2712, 5, 0, 0.00322125 +2713, 5, 0, 0.00322125 +2714, 5, 0, 0.00322125 +2715, 5, 0, 0.00322125 +2716, 5, 0, 0.00322125 +2717, 5, 0, 0.00322125 +2718, 5, 0, 0.00322125 +2719, 5, 0, 0.00322125 +2720, 5, 0, 0.00322125 +2721, 5, 0, 0.00322125 +2722, 5, 0, 0.00322125 +2723, 5, 0, 0.00322125 +2724, 5, 0, 0.00322125 +2725, 5, 0, 0.00322125 +2726, 5, 0, 0.00322125 +2727, 5, 0, 0.00322125 +2728, 5, 0, 0.00322125 +2729, 5, 0, 0.00322125 +2730, 5, 0, 0.00322125 +2731, 5, 0, 0.00322125 +2732, 5, 0, 0.00322125 +2733, 5, 0, 0.00322125 +2734, 5, 0, 0.00322125 +2735, 5, 0, 0.00322125 +2736, 5, 0, 0.00322125 +2737, 5, 0, 0.00322125 +2738, 5, 0, 0.00322125 +2739, 5, 0, 0.00322125 +2740, 5, 0, 0.00322125 +2741, 5, 0, 0.00322125 +2742, 5, 0, 0.00322125 +2743, 5, 0, 0.00322125 +2744, 5, 0, 0.00322125 +2745, 5, 0, 0.00322125 +2746, 5, 0, 0.00322125 +2747, 5, 0, 0.00322125 +2748, 5, 0, 0.00322125 +2749, 5, 0, 0.00322125 +2750, 5, 0, 0.00322125 +2751, 5, 0, 0.00322125 +2752, 5, 0, 0.00322125 +2753, 5, 0, 0.00322125 +2754, 5, 0, 0.00322125 +2755, 5, 0, 0.00322125 +2756, 5, 0, 0.00322125 +2757, 5, 0, 0.00322125 +2758, 5, 0, 0.00322125 +2759, 5, 0, 0.00322125 +2760, 5, 0, 0.00322125 +2761, 5, 0, 0.00322125 +2762, 5, 0, 0.00322125 +2763, 5, 0, 0.00322125 +2764, 5, 0, 0.00322125 +2765, 5, 0, 0.00322125 +2766, 5, 0, 0.00322125 +2767, 5, 0, 0.00322125 +2768, 5, 0, 0.00322125 +2769, 5, 0, 0.00322125 +2770, 5, 0, 0.00322125 +2771, 5, 0, 0.00322125 +2772, 5, 0, 0.00322125 +2773, 5, 0, 0.00322125 +2774, 5, 0, 0.00322125 +2775, 5, 0, 0.00322125 +2776, 5, 0, 0.00322125 +2777, 5, 0, 0.00322125 +2778, 5, 0, 0.00322125 +2779, 5, 0, 0.00322125 +2780, 5, 0, 0.00322125 +2781, 5, 0, 0.00322125 +2782, 5, 0, 0.00322125 +2783, 5, 0, 0.00322125 +2784, 5, 0, 0.00322125 +2785, 5, 0, 0.00322125 +2786, 5, 0, 0.00322125 +2787, 5, 0, 0.00322125 +2788, 5, 0, 0.00322125 +2789, 5, 0, 0.00322125 +2790, 5, 0, 0.00322125 +2791, 5, 0, 0.00322125 +2792, 5, 0, 0.00322125 +2793, 5, 0, 0.00322125 +2794, 5, 0, 0.00322125 +2795, 5, 0, 0.00322125 +2796, 5, 0, 0.00322125 +2797, 5, 0, 0.00322125 +2798, 5, 0, 0.00322125 +2799, 5, 0, 0.00322125 +2800, 5, 5, 0.00322125 +2801, 5, 5, 0.00322125 +2802, 5, 5, 0.00322125 +2803, 5, 5, 0.0031559 +2804, 5, 5, 0.00322125 +2805, 5, 5, 0.0031559 +2806, 5, 5, 0.0031559 +2807, 5, 5, 0.0031559 +2808, 5, 5, 0.0031559 +2809, 5, 5, 0.00322125 +2810, 5, 5, 5 +2811, 5, 5, 5 +2812, 5, 5, 5 +2813, 5, 5, 5 +2814, 5, 5, 5 +2815, 5, 5, 5 +2816, 5, 5, 5 +2817, 5, 5, 5 +2818, 5, 5, 5 +2819, 5, 5, 5 +2820, 5, 5, 5 +2821, 5, 5, 5 +2822, 5, 5, 5 +2823, 5, 5, 5 +2824, 5, 5, 5 +2825, 5, 5, 5 +2826, 5, 5, 5 +2827, 5, 5, 5 +2828, 5, 5, 5 +2829, 5, 5, 5 +2830, 5, 5, 5 +2831, 5, 5, 5 +2832, 5, 5, 5 +2833, 5, 5, 5 +2834, 5, 5, 5 +2835, 5, 5, 5 +2836, 5, 5, 5 +2837, 5, 5, 5 +2838, 5, 5, 5 +2839, 5, 5, 5 +2840, 5, 5, 5 +2841, 5, 5, 5 +2842, 5, 5, 5 +2843, 5, 5, 5 +2844, 5, 5, 5 +2845, 5, 5, 5 +2846, 5, 5, 5 +2847, 5, 5, 5 +2848, 5, 5, 5 +2849, 5, 5, 5 +2850, 5, 5, 5 +2851, 5, 5, 5 +2852, 5, 5, 5 +2853, 5, 5, 5 +2854, 5, 5, 5 +2855, 5, 5, 5 +2856, 5, 5, 5 +2857, 5, 5, 5 +2858, 5, 5, 5 +2859, 5, 5, 5 +2860, 5, 5, 5 +2861, 5, 5, 5 +2862, 5, 5, 5 +2863, 5, 5, 5 +2864, 5, 5, 5 +2865, 5, 5, 5 +2866, 5, 5, 5 +2867, 5, 5, 5 +2868, 5, 5, 5 +2869, 5, 5, 5 +2870, 5, 5, 5 +2871, 5, 5, 5 +2872, 5, 5, 5 +2873, 5, 5, 5 +2874, 5, 5, 5 +2875, 5, 5, 5 +2876, 5, 5, 5 +2877, 5, 5, 5 +2878, 5, 5, 5 +2879, 5, 5, 5 +2880, 5, 5, 5 +2881, 5, 5, 5 +2882, 5, 5, 5 +2883, 5, 5, 5 +2884, 5, 5, 5 +2885, 5, 5, 5 +2886, 5, 5, 5 +2887, 5, 5, 5 +2888, 5, 5, 5 +2889, 5, 5, 5 +2890, 5, 5, 5 +2891, 5, 5, 5 +2892, 5, 5, 5 +2893, 5, 5, 5 +2894, 5, 5, 5 +2895, 5, 5, 5 +2896, 5, 5, 5 +2897, 5, 5, 5 +2898, 5, 5, 5 +2899, 5, 5, 5 +2900, 5, 5, 5 +2901, 5, 5, 5 +2902, 5, 5, 5 +2903, 5, 5, 5 +2904, 5, 5, 5 +2905, 5, 5, 5 +2906, 5, 5, 5 +2907, 5, 5, 5 +2908, 5, 5, 5 +2909, 5, 5, 5 +2910, 5, 5, 5 +2911, 5, 5, 5 +2912, 5, 5, 5 +2913, 5, 5, 5 +2914, 5, 5, 5 +2915, 5, 5, 5 +2916, 5, 5, 5 +2917, 5, 5, 5 +2918, 5, 5, 5 +2919, 5, 5, 5 +2920, 5, 5, 5 +2921, 5, 5, 5 +2922, 5, 5, 5 +2923, 5, 5, 5 +2924, 5, 5, 5 +2925, 5, 5, 5 +2926, 5, 5, 5 +2927, 5, 5, 5 +2928, 5, 5, 5 +2929, 5, 5, 5 +2930, 5, 5, 5 +2931, 5, 5, 5 +2932, 5, 5, 5 +2933, 5, 5, 5 +2934, 5, 5, 5 +2935, 5, 5, 5 +2936, 5, 5, 5 +2937, 5, 5, 5 +2938, 5, 5, 5 +2939, 5, 5, 5 +2940, 5, 5, 5 +2941, 5, 5, 5 +2942, 5, 5, 5 +2943, 5, 5, 5 +2944, 5, 5, 5 +2945, 5, 5, 5 +2946, 5, 5, 5 +2947, 5, 5, 5 +2948, 5, 5, 5 +2949, 5, 5, 5 +2950, 5, 5, 5 +2951, 5, 5, 5 +2952, 5, 5, 5 +2953, 5, 5, 5 +2954, 5, 5, 5 +2955, 5, 5, 5 +2956, 5, 5, 5 +2957, 5, 5, 5 +2958, 5, 5, 5 +2959, 5, 5, 5 +2960, 5, 5, 5 +2961, 5, 5, 5 +2962, 5, 5, 5 +2963, 5, 5, 5 +2964, 5, 5, 5 +2965, 5, 5, 5 +2966, 5, 5, 5 +2967, 5, 5, 5 +2968, 5, 5, 5 +2969, 5, 5, 5 +2970, 5, 5, 5 +2971, 5, 5, 5 +2972, 5, 5, 5 +2973, 5, 5, 5 +2974, 5, 5, 5 +2975, 5, 5, 5 +2976, 5, 5, 5 +2977, 5, 5, 5 +2978, 5, 5, 5 +2979, 5, 5, 5 +2980, 5, 5, 5 +2981, 5, 5, 5 +2982, 5, 5, 5 +2983, 5, 5, 5 +2984, 5, 5, 5 +2985, 5, 5, 5 +2986, 5, 5, 5 +2987, 5, 5, 5 +2988, 5, 5, 5 +2989, 5, 5, 5 +2990, 5, 5, 5 +2991, 5, 5, 5 +2992, 5, 5, 5 +2993, 5, 5, 5 +2994, 5, 5, 5 +2995, 5, 5, 5 +2996, 5, 5, 5 +2997, 5, 5, 5 +2998, 5, 5, 5 +2999, 5, 5, 5 +3000, 5, 5, 5 +3001, 5, 5, 5 +3002, 5, 5, 5 +3003, 5, 5, 5 +3004, 5, 5, 5 +3005, 5, 5, 5 +3006, 5, 5, 5 +3007, 5, 5, 5 +3008, 5, 5, 5 +3009, 5, 5, 5 +3010, 5, 5, 5 +3011, 5, 5, 5 +3012, 5, 5, 5 +3013, 5, 5, 5 +3014, 5, 5, 5 +3015, 5, 5, 5 +3016, 5, 5, 5 +3017, 5, 5, 5 +3018, 5, 5, 5 +3019, 5, 5, 5 +3020, 5, 5, 5 +3021, 5, 5, 5 +3022, 5, 5, 5 +3023, 5, 5, 5 +3024, 5, 5, 5 +3025, 5, 5, 5 +3026, 5, 5, 5 +3027, 5, 5, 5 +3028, 5, 5, 5 +3029, 5, 5, 5 +3030, 5, 5, 5 +3031, 5, 5, 5 +3032, 5, 5, 5 +3033, 5, 5, 5 +3034, 5, 5, 5 +3035, 5, 5, 5 +3036, 5, 5, 5 +3037, 5, 5, 5 +3038, 5, 5, 5 +3039, 5, 5, 5 +3040, 5, 5, 5 +3041, 5, 5, 5 +3042, 5, 5, 5 +3043, 5, 5, 5 +3044, 5, 5, 5 +3045, 5, 5, 5 +3046, 5, 5, 5 +3047, 5, 5, 5 +3048, 5, 5, 5 +3049, 5, 5, 5 +3050, 5, 5, 5 +3051, 5, 5, 5 +3052, 5, 5, 5 +3053, 5, 5, 5 +3054, 5, 5, 5 +3055, 5, 5, 5 +3056, 5, 5, 5 +3057, 5, 5, 5 +3058, 5, 5, 5 +3059, 5, 5, 5 +3060, 5, 5, 5 +3061, 5, 5, 5 +3062, 5, 5, 5 +3063, 5, 5, 5 +3064, 5, 5, 5 +3065, 5, 5, 5 +3066, 5, 5, 5 +3067, 5, 5, 5 +3068, 5, 5, 5 +3069, 5, 5, 5 +3070, 5, 5, 5 +3071, 5, 5, 5 +3072, 5, 5, 5 +3073, 5, 5, 5 +3074, 5, 5, 5 +3075, 5, 5, 5 +3076, 5, 5, 5 +3077, 5, 5, 5 +3078, 5, 5, 5 +3079, 5, 5, 5 +3080, 5, 5, 5 +3081, 5, 5, 5 +3082, 5, 5, 5 +3083, 5, 5, 5 +3084, 5, 5, 5 +3085, 5, 5, 5 +3086, 5, 5, 5 +3087, 5, 5, 5 +3088, 5, 5, 5 +3089, 5, 5, 5 +3090, 5, 5, 5 +3091, 5, 5, 5 +3092, 5, 5, 5 +3093, 5, 5, 5 +3094, 5, 5, 5 +3095, 5, 5, 5 +3096, 5, 5, 5 +3097, 5, 5, 5 +3098, 5, 5, 5 +3099, 5, 5, 5 +3100, 5, 5, 5 +3101, 5, 5, 5 +3102, 5, 5, 5 +3103, 5, 5, 5 +3104, 5, 5, 5 +3105, 5, 5, 5 +3106, 5, 5, 5 +3107, 5, 5, 5 +3108, 5, 5, 5 +3109, 5, 5, 5 +3110, 5, 5, 5 +3111, 5, 5, 5 +3112, 5, 5, 5 +3113, 5, 5, 5 +3114, 5, 5, 5 +3115, 5, 5, 5 +3116, 5, 5, 5 +3117, 5, 5, 5 +3118, 5, 5, 5 +3119, 5, 5, 5 +3120, 5, 5, 5 +3121, 5, 5, 5 +3122, 5, 5, 5 +3123, 5, 5, 5 +3124, 5, 5, 5 +3125, 5, 5, 5 +3126, 5, 5, 5 +3127, 5, 5, 5 +3128, 5, 5, 5 +3129, 5, 5, 5 +3130, 5, 5, 5 +3131, 5, 5, 5 +3132, 5, 5, 5 +3133, 5, 5, 5 +3134, 5, 5, 5 +3135, 5, 5, 5 +3136, 5, 5, 5 +3137, 5, 5, 5 +3138, 5, 5, 5 +3139, 5, 5, 5 +3140, 5, 5, 5 +3141, 5, 5, 5 +3142, 5, 5, 5 +3143, 5, 5, 5 +3144, 5, 5, 5 +3145, 5, 5, 5 +3146, 5, 5, 5 +3147, 5, 5, 5 +3148, 5, 5, 5 +3149, 5, 5, 5 +3150, 5, 5, 5 +3151, 5, 5, 5 +3152, 5, 5, 5 +3153, 5, 5, 5 +3154, 5, 5, 5 +3155, 5, 5, 5 +3156, 5, 5, 5 +3157, 5, 5, 5 +3158, 5, 5, 5 +3159, 5, 5, 5 +3160, 5, 5, 5 +3161, 5, 5, 5 +3162, 5, 5, 5 +3163, 5, 5, 5 +3164, 5, 5, 5 +3165, 5, 5, 5 +3166, 5, 5, 5 +3167, 5, 5, 5 +3168, 5, 5, 5 +3169, 5, 5, 5 +3170, 5, 5, 5 +3171, 5, 5, 5 +3172, 5, 5, 5 +3173, 5, 5, 5 +3174, 5, 5, 5 +3175, 5, 5, 5 +3176, 5, 5, 5 +3177, 5, 5, 5 +3178, 5, 5, 5 +3179, 5, 5, 5 +3180, 5, 5, 5 +3181, 5, 5, 5 +3182, 5, 5, 5 +3183, 5, 5, 5 +3184, 5, 5, 5 +3185, 5, 5, 5 +3186, 5, 5, 5 +3187, 5, 5, 5 +3188, 5, 5, 5 +3189, 5, 5, 5 +3190, 5, 5, 5 +3191, 5, 5, 5 +3192, 5, 5, 5 +3193, 5, 5, 5 +3194, 5, 5, 5 +3195, 5, 5, 5 +3196, 5, 5, 5 +3197, 5, 5, 5 +3198, 5, 5, 5 +3199, 5, 5, 5 +3200, 0, 0, 5 +3201, 0, 0, 5 +3202, 0, 0, 5 +3203, 0, 0, 5 +3204, 0, 0, 5 +3205, 0, 0, 5 +3206, 0, 0, 5 +3207, 0, 0, 5 +3208, 0, 0, 5 +3209, 0, 0, 5 +3210, 0, 0, 5 +3211, 0, 0, 5 +3212, 0, 0, 5 +3213, 0, 0, 5 +3214, 0, 0, 5 +3215, 0, 0, 5 +3216, 0, 0, 5 +3217, 0, 0, 5 +3218, 0, 0, 5 +3219, 0, 0, 5 +3220, 0, 0, 5 +3221, 0, 0, 5 +3222, 0, 0, 5 +3223, 0, 0, 5 +3224, 0, 0, 5 +3225, 0, 0, 5 +3226, 0, 0, 5 +3227, 0, 0, 5 +3228, 0, 0, 5 +3229, 0, 0, 5 +3230, 0, 0, 5 +3231, 0, 0, 5 +3232, 0, 0, 5 +3233, 0, 0, 5 +3234, 0, 0, 5 +3235, 0, 0, 5 +3236, 0, 0, 5 +3237, 0, 0, 5 +3238, 0, 0, 5 +3239, 0, 0, 5 +3240, 0, 0, 5 +3241, 0, 0, 5 +3242, 0, 0, 5 +3243, 0, 0, 5 +3244, 0, 0, 5 +3245, 0, 0, 5 +3246, 0, 0, 5 +3247, 0, 0, 5 +3248, 0, 0, 5 +3249, 0, 0, 5 +3250, 0, 0, 5 +3251, 0, 0, 5 +3252, 0, 0, 5 +3253, 0, 0, 5 +3254, 0, 0, 5 +3255, 0, 0, 5 +3256, 0, 0, 5 +3257, 0, 0, 5 +3258, 0, 0, 5 +3259, 0, 0, 5 +3260, 0, 0, 5 +3261, 0, 0, 5 +3262, 0, 0, 5 +3263, 0, 0, 5 +3264, 0, 0, 5 +3265, 0, 0, 5 +3266, 0, 0, 5 +3267, 0, 0, 5 +3268, 0, 0, 5 +3269, 0, 0, 5 +3270, 0, 0, 5 +3271, 0, 0, 5 +3272, 0, 0, 5 +3273, 0, 0, 5 +3274, 0, 0, 5 +3275, 0, 0, 5 +3276, 0, 0, 5 +3277, 0, 0, 5 +3278, 0, 0, 5 +3279, 0, 0, 5 +3280, 0, 0, 5 +3281, 0, 0, 5 +3282, 0, 0, 5 +3283, 0, 0, 5 +3284, 0, 0, 5 +3285, 0, 0, 5 +3286, 0, 0, 5 +3287, 0, 0, 5 +3288, 0, 0, 5 +3289, 0, 0, 5 +3290, 0, 0, 5 +3291, 0, 0, 5 +3292, 0, 0, 5 +3293, 0, 0, 5 +3294, 0, 0, 5 +3295, 0, 0, 5 +3296, 0, 0, 5 +3297, 0, 0, 5 +3298, 0, 0, 5 +3299, 0, 0, 5 +3300, 0, 0, 5 +3301, 0, 0, 5 +3302, 0, 0, 5 +3303, 0, 0, 5 +3304, 0, 0, 5 +3305, 0, 0, 5 +3306, 0, 0, 5 +3307, 0, 0, 5 +3308, 0, 0, 5 +3309, 0, 0, 5 +3310, 0, 0, 5 +3311, 0, 0, 5 +3312, 0, 0, 5 +3313, 0, 0, 5 +3314, 0, 0, 5 +3315, 0, 0, 5 +3316, 0, 0, 5 +3317, 0, 0, 5 +3318, 0, 0, 5 +3319, 0, 0, 5 +3320, 0, 0, 5 +3321, 0, 0, 5 +3322, 0, 0, 5 +3323, 0, 0, 5 +3324, 0, 0, 5 +3325, 0, 0, 5 +3326, 0, 0, 5 +3327, 0, 0, 5 +3328, 0, 0, 5 +3329, 0, 0, 5 +3330, 0, 0, 5 +3331, 0, 0, 5 +3332, 0, 0, 5 +3333, 0, 0, 5 +3334, 0, 0, 5 +3335, 0, 0, 5 +3336, 0, 0, 5 +3337, 0, 0, 5 +3338, 0, 0, 5 +3339, 0, 0, 5 +3340, 0, 0, 5 +3341, 0, 0, 5 +3342, 0, 0, 5 +3343, 0, 0, 5 +3344, 0, 0, 5 +3345, 0, 0, 5 +3346, 0, 0, 5 +3347, 0, 0, 5 +3348, 0, 0, 5 +3349, 0, 0, 5 +3350, 0, 0, 5 +3351, 0, 0, 5 +3352, 0, 0, 5 +3353, 0, 0, 5 +3354, 0, 0, 5 +3355, 0, 0, 5 +3356, 0, 0, 5 +3357, 0, 0, 5 +3358, 0, 0, 5 +3359, 0, 0, 5 +3360, 0, 0, 5 +3361, 0, 0, 5 +3362, 0, 0, 5 +3363, 0, 0, 5 +3364, 0, 0, 5 +3365, 0, 0, 5 +3366, 0, 0, 5 +3367, 0, 0, 5 +3368, 0, 0, 5 +3369, 0, 0, 5 +3370, 0, 0, 5 +3371, 0, 0, 5 +3372, 0, 0, 5 +3373, 0, 0, 5 +3374, 0, 0, 5 +3375, 0, 0, 5 +3376, 0, 0, 5 +3377, 0, 0, 5 +3378, 0, 0, 5 +3379, 0, 0, 5 +3380, 0, 0, 5 +3381, 0, 0, 5 +3382, 0, 0, 5 +3383, 0, 0, 5 +3384, 0, 0, 5 +3385, 0, 0, 5 +3386, 0, 0, 5 +3387, 0, 0, 5 +3388, 0, 0, 5 +3389, 0, 0, 5 +3390, 0, 0, 5 +3391, 0, 0, 5 +3392, 0, 0, 5 +3393, 0, 0, 5 +3394, 0, 0, 5 +3395, 0, 0, 5 +3396, 0, 0, 5 +3397, 0, 0, 5 +3398, 0, 0, 5 +3399, 0, 0, 5 +3400, 0, 0, 5 +3401, 0, 0, 5 +3402, 0, 0, 5 +3403, 0, 0, 5 +3404, 0, 0, 5 +3405, 0, 0, 5 +3406, 0, 0, 5 +3407, 0, 0, 5 +3408, 0, 0, 5 +3409, 0, 0, 5 +3410, 0, 0, 5 +3411, 0, 0, 5 +3412, 0, 0, 5 +3413, 0, 0, 5 +3414, 0, 0, 5 +3415, 0, 0, 5 +3416, 0, 0, 5 +3417, 0, 0, 5 +3418, 0, 0, 5 +3419, 0, 0, 5 +3420, 0, 0, 5 +3421, 0, 0, 5 +3422, 0, 0, 5 +3423, 0, 0, 5 +3424, 0, 0, 5 +3425, 0, 0, 5 +3426, 0, 0, 5 +3427, 0, 0, 5 +3428, 0, 0, 5 +3429, 0, 0, 5 +3430, 0, 0, 5 +3431, 0, 0, 5 +3432, 0, 0, 5 +3433, 0, 0, 5 +3434, 0, 0, 5 +3435, 0, 0, 5 +3436, 0, 0, 5 +3437, 0, 0, 5 +3438, 0, 0, 5 +3439, 0, 0, 5 +3440, 0, 0, 5 +3441, 0, 0, 5 +3442, 0, 0, 5 +3443, 0, 0, 5 +3444, 0, 0, 5 +3445, 0, 0, 5 +3446, 0, 0, 5 +3447, 0, 0, 5 +3448, 0, 0, 5 +3449, 0, 0, 5 +3450, 0, 0, 5 +3451, 0, 0, 5 +3452, 0, 0, 5 +3453, 0, 0, 5 +3454, 0, 0, 5 +3455, 0, 0, 5 +3456, 0, 0, 5 +3457, 0, 0, 5 +3458, 0, 0, 5 +3459, 0, 0, 5 +3460, 0, 0, 5 +3461, 0, 0, 5 +3462, 0, 0, 5 +3463, 0, 0, 5 +3464, 0, 0, 5 +3465, 0, 0, 5 +3466, 0, 0, 5 +3467, 0, 0, 5 +3468, 0, 0, 5 +3469, 0, 0, 5 +3470, 0, 0, 5 +3471, 0, 0, 5 +3472, 0, 0, 5 +3473, 0, 0, 5 +3474, 0, 0, 5 +3475, 0, 0, 5 +3476, 0, 0, 5 +3477, 0, 0, 5 +3478, 0, 0, 5 +3479, 0, 0, 5 +3480, 0, 0, 5 +3481, 0, 0, 5 +3482, 0, 0, 5 +3483, 0, 0, 5 +3484, 0, 0, 5 +3485, 0, 0, 5 +3486, 0, 0, 5 +3487, 0, 0, 5 +3488, 0, 0, 5 +3489, 0, 0, 5 +3490, 0, 0, 5 +3491, 0, 0, 5 +3492, 0, 0, 5 +3493, 0, 0, 5 +3494, 0, 0, 5 +3495, 0, 0, 5 +3496, 0, 0, 5 +3497, 0, 0, 5 +3498, 0, 0, 5 +3499, 0, 0, 5 +3500, 0, 0, 5 +3501, 0, 0, 5 +3502, 0, 0, 5 +3503, 0, 0, 5 +3504, 0, 0, 5 +3505, 0, 0, 5 +3506, 0, 0, 5 +3507, 0, 0, 5 +3508, 0, 0, 5 +3509, 0, 0, 5 +3510, 0, 0, 5 +3511, 0, 0, 5 +3512, 0, 0, 5 +3513, 0, 0, 5 +3514, 0, 0, 5 +3515, 0, 0, 5 +3516, 0, 0, 5 +3517, 0, 0, 5 +3518, 0, 0, 5 +3519, 0, 0, 5 +3520, 0, 0, 5 +3521, 0, 0, 5 +3522, 0, 0, 5 +3523, 0, 0, 5 +3524, 0, 0, 5 +3525, 0, 0, 5 +3526, 0, 0, 5 +3527, 0, 0, 5 +3528, 0, 0, 5 +3529, 0, 0, 5 +3530, 0, 0, 5 +3531, 0, 0, 5 +3532, 0, 0, 5 +3533, 0, 0, 5 +3534, 0, 0, 5 +3535, 0, 0, 5 +3536, 0, 0, 5 +3537, 0, 0, 5 +3538, 0, 0, 5 +3539, 0, 0, 5 +3540, 0, 0, 5 +3541, 0, 0, 5 +3542, 0, 0, 5 +3543, 0, 0, 5 +3544, 0, 0, 5 +3545, 0, 0, 5 +3546, 0, 0, 5 +3547, 0, 0, 5 +3548, 0, 0, 5 +3549, 0, 0, 5 +3550, 0, 0, 5 +3551, 0, 0, 5 +3552, 0, 0, 5 +3553, 0, 0, 5 +3554, 0, 0, 5 +3555, 0, 0, 5 +3556, 0, 0, 5 +3557, 0, 0, 5 +3558, 0, 0, 5 +3559, 0, 0, 5 +3560, 0, 0, 5 +3561, 0, 0, 5 +3562, 0, 0, 5 +3563, 0, 0, 5 +3564, 0, 0, 5 +3565, 0, 0, 5 +3566, 0, 0, 5 +3567, 0, 0, 5 +3568, 0, 0, 5 +3569, 0, 0, 5 +3570, 0, 0, 5 +3571, 0, 0, 5 +3572, 0, 0, 5 +3573, 0, 0, 5 +3574, 0, 0, 5 +3575, 0, 0, 5 +3576, 0, 0, 5 +3577, 0, 0, 5 +3578, 0, 0, 5 +3579, 0, 0, 5 +3580, 0, 0, 5 +3581, 0, 0, 5 +3582, 0, 0, 5 +3583, 0, 0, 5 +3584, 0, 0, 5 +3585, 0, 0, 5 +3586, 0, 0, 5 +3587, 0, 0, 5 +3588, 0, 0, 5 +3589, 0, 0, 5 +3590, 0, 0, 5 +3591, 0, 0, 5 +3592, 0, 0, 5 +3593, 0, 0, 5 +3594, 0, 0, 5 +3595, 0, 0, 5 +3596, 0, 0, 5 +3597, 0, 0, 5 +3598, 0, 0, 5 +3599, 0, 0, 5 +3600, 0, 5, 5 +3601, 0, 5, 5 +3602, 0, 5, 5 +3603, 0, 5, 5 +3604, 0, 5, 5 +3605, 0, 5, 5 +3606, 0, 5, 5 +3607, 0, 5, 5 +3608, 0, 5, 5 +3609, 0, 5, 5 +3610, 0, 5, 5 +3611, 0, 5, 5 +3612, 0, 5, 5 +3613, 0, 5, 0 +3614, 0, 5, 0 +3615, 0, 5, 0 +3616, 0, 5, 0.0031559 +3617, 0, 5, 0.0031559 +3618, 0, 5, 0.00322125 +3619, 0, 5, 0.0031559 +3620, 0, 5, 0.00322125 +3621, 0, 5, 0.00322125 +3622, 0, 5, 0.00322125 +3623, 0, 5, 0.00322125 +3624, 0, 5, 0.00322125 +3625, 0, 5, 0.00322125 +3626, 0, 5, 0.00322125 +3627, 0, 5, 0.00322125 +3628, 0, 5, 0.00322125 +3629, 0, 5, 0.00322125 +3630, 0, 5, 0.00322125 +3631, 0, 5, 0.00322125 +3632, 0, 5, 0.00322125 +3633, 0, 5, 0.00322125 +3634, 0, 5, 0.00322125 +3635, 0, 5, 0.00322125 +3636, 0, 5, 0.00322125 +3637, 0, 5, 0.00322125 +3638, 0, 5, 0.00322125 +3639, 0, 5, 0.00322125 +3640, 0, 5, 0.00322125 +3641, 0, 5, 0.00322125 +3642, 0, 5, 0.00322125 +3643, 0, 5, 0.00322125 +3644, 0, 5, 0.00322125 +3645, 0, 5, 0.00322125 +3646, 0, 5, 0.00322125 +3647, 0, 5, 0.00322125 +3648, 0, 5, 0.00322125 +3649, 0, 5, 0.00322125 +3650, 0, 5, 0.00322125 +3651, 0, 5, 0.00322125 +3652, 0, 5, 0.00322125 +3653, 0, 5, 0.00322125 +3654, 0, 5, 0.00322125 +3655, 0, 5, 0.00322125 +3656, 0, 5, 0.00322125 +3657, 0, 5, 0.00322125 +3658, 0, 5, 0.00322125 +3659, 0, 5, 0.00322125 +3660, 0, 5, 0.00322125 +3661, 0, 5, 0.00322125 +3662, 0, 5, 0.00322125 +3663, 0, 5, 0.00322125 +3664, 0, 5, 0.00322125 +3665, 0, 5, 0.00322125 +3666, 0, 5, 0.00322125 +3667, 0, 5, 0.00322125 +3668, 0, 5, 0.00322125 +3669, 0, 5, 0.00322125 +3670, 0, 5, 0.00322125 +3671, 0, 5, 0.00322125 +3672, 0, 5, 0.00322125 +3673, 0, 5, 0.00322125 +3674, 0, 5, 0.00322125 +3675, 0, 5, 0.00322125 +3676, 0, 5, 0.00322125 +3677, 0, 5, 0.00322125 +3678, 0, 5, 0.00322125 +3679, 0, 5, 0.00322125 +3680, 0, 5, 0.00322125 +3681, 0, 5, 0.00322125 +3682, 0, 5, 0.00322125 +3683, 0, 5, 0.00322125 +3684, 0, 5, 0.00322125 +3685, 0, 5, 0.00322125 +3686, 0, 5, 0.00322125 +3687, 0, 5, 0.00322125 +3688, 0, 5, 0.00322125 +3689, 0, 5, 0.00322125 +3690, 0, 5, 0.00322125 +3691, 0, 5, 0.00322125 +3692, 0, 5, 0.00322125 +3693, 0, 5, 0.00322125 +3694, 0, 5, 0.00322125 +3695, 0, 5, 0.00322125 +3696, 0, 5, 0.00322125 +3697, 0, 5, 0.00322125 +3698, 0, 5, 0.00322125 +3699, 0, 5, 0.00322125 +3700, 0, 5, 0.00322125 +3701, 0, 5, 0.00322125 +3702, 0, 5, 0.00322125 +3703, 0, 5, 0.00322125 +3704, 0, 5, 0.00322125 +3705, 0, 5, 0.00322125 +3706, 0, 5, 0.00322125 +3707, 0, 5, 0.00322125 +3708, 0, 5, 0.00322125 +3709, 0, 5, 0.00322125 +3710, 0, 5, 0.00322125 +3711, 0, 5, 0.00322125 +3712, 0, 5, 0.00322125 +3713, 0, 5, 0.00322125 +3714, 0, 5, 0.00322125 +3715, 0, 5, 0.00322125 +3716, 0, 5, 0.00322125 +3717, 0, 5, 0.00322125 +3718, 0, 5, 0.00322125 +3719, 0, 5, 0.00322125 +3720, 0, 5, 0.00322125 +3721, 0, 5, 0.00322125 +3722, 0, 5, 0.00322125 +3723, 0, 5, 0.00322125 +3724, 0, 5, 0.00322125 +3725, 0, 5, 0.00322125 +3726, 0, 5, 0.00322125 +3727, 0, 5, 0.00322125 +3728, 0, 5, 0.00322125 +3729, 0, 5, 0.00322125 +3730, 0, 5, 0.00322125 +3731, 0, 5, 0.00322125 +3732, 0, 5, 0.00322125 +3733, 0, 5, 0.00322125 +3734, 0, 5, 0.00322125 +3735, 0, 5, 0.00322125 +3736, 0, 5, 0.00322125 +3737, 0, 5, 0.00322125 +3738, 0, 5, 0.00322125 +3739, 0, 5, 0.00322125 +3740, 0, 5, 0.00322125 +3741, 0, 5, 0.00322125 +3742, 0, 5, 0.00322125 +3743, 0, 5, 0.00322125 +3744, 0, 5, 0.00322125 +3745, 0, 5, 0.00322125 +3746, 0, 5, 0.00322125 +3747, 0, 5, 0.00322125 +3748, 0, 5, 0.00322125 +3749, 0, 5, 0.00322125 +3750, 0, 5, 0.00322125 +3751, 0, 5, 0.00322125 +3752, 0, 5, 0.00322125 +3753, 0, 5, 0.00322125 +3754, 0, 5, 0.00322125 +3755, 0, 5, 0.00322125 +3756, 0, 5, 0.00322125 +3757, 0, 5, 0.00322125 +3758, 0, 5, 0.00322125 +3759, 0, 5, 0.00322125 +3760, 0, 5, 0.00322125 +3761, 0, 5, 0.00322125 +3762, 0, 5, 0.00322125 +3763, 0, 5, 0.00322125 +3764, 0, 5, 0.00322125 +3765, 0, 5, 0.00322125 +3766, 0, 5, 0.00322125 +3767, 0, 5, 0.00322125 +3768, 0, 5, 0.00322125 +3769, 0, 5, 0.00322125 +3770, 0, 5, 0.00322125 +3771, 0, 5, 0.00322125 +3772, 0, 5, 0.00322125 +3773, 0, 5, 0.00322125 +3774, 0, 5, 0.00322125 +3775, 0, 5, 0.00322125 +3776, 0, 5, 0.00322125 +3777, 0, 5, 0.00322125 +3778, 0, 5, 0.00322125 +3779, 0, 5, 0.00322125 +3780, 0, 5, 0.00322125 +3781, 0, 5, 0.00322125 +3782, 0, 5, 0.00322125 +3783, 0, 5, 0.00322125 +3784, 0, 5, 0.00322125 +3785, 0, 5, 0.00322125 +3786, 0, 5, 0.00322125 +3787, 0, 5, 0.00322125 +3788, 0, 5, 0.00322125 +3789, 0, 5, 0.00322125 +3790, 0, 5, 0.00322125 +3791, 0, 5, 0.00322125 +3792, 0, 5, 0.00322125 +3793, 0, 5, 0.00322125 +3794, 0, 5, 0.00322125 +3795, 0, 5, 0.00322125 +3796, 0, 5, 0.00322125 +3797, 0, 5, 0.00322125 +3798, 0, 5, 0.00322125 +3799, 0, 5, 0.00322125 +3800, 0, 5, 0.00322125 +3801, 0, 5, 0.00322125 +3802, 0, 5, 0.00322125 +3803, 0, 5, 0.00322125 +3804, 0, 5, 0.00322125 +3805, 0, 5, 0.00322125 +3806, 0, 5, 0.00322125 +3807, 0, 5, 0.00322125 +3808, 0, 5, 0.00322125 +3809, 0, 5, 0.00322125 +3810, 0, 5, 0.00322125 +3811, 0, 5, 0.00322125 +3812, 0, 5, 0.00322125 +3813, 0, 5, 0.00322125 +3814, 0, 5, 0.00322125 +3815, 0, 5, 0.00322125 +3816, 0, 5, 0.00322125 +3817, 0, 5, 0.00322125 +3818, 0, 5, 0.00322125 +3819, 0, 5, 0.00322125 +3820, 0, 5, 0.00322125 +3821, 0, 5, 0.00322125 +3822, 0, 5, 0.00322125 +3823, 0, 5, 0.00322125 +3824, 0, 5, 0.00322125 +3825, 0, 5, 0.00322125 +3826, 0, 5, 0.00322125 +3827, 0, 5, 0.00322125 +3828, 0, 5, 0.00322125 +3829, 0, 5, 0.00322125 +3830, 0, 5, 0.00322125 +3831, 0, 5, 0.00322125 +3832, 0, 5, 0.00322125 +3833, 0, 5, 0.00322125 +3834, 0, 5, 0.00322125 +3835, 0, 5, 0.00322125 +3836, 0, 5, 0.00322125 +3837, 0, 5, 0.00322125 +3838, 0, 5, 0.00322125 +3839, 0, 5, 0.00322125 +3840, 0, 5, 0.00322125 +3841, 0, 5, 0.00322125 +3842, 0, 5, 0.00322125 +3843, 0, 5, 0.00322125 +3844, 0, 5, 0.00322125 +3845, 0, 5, 0.00322125 +3846, 0, 5, 0.00322125 +3847, 0, 5, 0.00322125 +3848, 0, 5, 0.00322125 +3849, 0, 5, 0.00322125 +3850, 0, 5, 0.00322125 +3851, 0, 5, 0.00322125 +3852, 0, 5, 0.00322125 +3853, 0, 5, 0.00322125 +3854, 0, 5, 0.00322125 +3855, 0, 5, 0.00322125 +3856, 0, 5, 0.00322125 +3857, 0, 5, 0.00322125 +3858, 0, 5, 0.00322125 +3859, 0, 5, 0.00322125 +3860, 0, 5, 0.00322125 +3861, 0, 5, 0.00322125 +3862, 0, 5, 0.00322125 +3863, 0, 5, 0.00322125 +3864, 0, 5, 0.00322125 +3865, 0, 5, 0.00322125 +3866, 0, 5, 0.00322125 +3867, 0, 5, 0.00322125 +3868, 0, 5, 0.00322125 +3869, 0, 5, 0.00322125 +3870, 0, 5, 0.00322125 +3871, 0, 5, 0.00322125 +3872, 0, 5, 0.00322125 +3873, 0, 5, 0.00322125 +3874, 0, 5, 0.00322125 +3875, 0, 5, 0.00322125 +3876, 0, 5, 0.00322125 +3877, 0, 5, 0.00322125 +3878, 0, 5, 0.00322125 +3879, 0, 5, 0.00322125 +3880, 0, 5, 0.00322125 +3881, 0, 5, 0.00322125 +3882, 0, 5, 0.00322125 +3883, 0, 5, 0.00322125 +3884, 0, 5, 0.00322125 +3885, 0, 5, 0.00322125 +3886, 0, 5, 0.00322125 +3887, 0, 5, 0.00322125 +3888, 0, 5, 0.00322125 +3889, 0, 5, 0.00322125 +3890, 0, 5, 0.00322125 +3891, 0, 5, 0.00322125 +3892, 0, 5, 0.00322125 +3893, 0, 5, 0.00322125 +3894, 0, 5, 0.00322125 +3895, 0, 5, 0.00322125 +3896, 0, 5, 0.00322125 +3897, 0, 5, 0.00322125 +3898, 0, 5, 0.00322125 +3899, 0, 5, 0.00322125 +3900, 0, 5, 0.00322125 +3901, 0, 5, 0.00322125 +3902, 0, 5, 0.00322125 +3903, 0, 5, 0.00322125 +3904, 0, 5, 0.00322125 +3905, 0, 5, 0.00322125 +3906, 0, 5, 0.00322125 +3907, 0, 5, 0.00322125 +3908, 0, 5, 0.00322125 +3909, 0, 5, 0.00322125 +3910, 0, 5, 0.00322125 +3911, 0, 5, 0.00322125 +3912, 0, 5, 0.00322125 +3913, 0, 5, 0.00322125 +3914, 0, 5, 0.00322125 +3915, 0, 5, 0.00322125 +3916, 0, 5, 0.00322125 +3917, 0, 5, 0.00322125 +3918, 0, 5, 0.00322125 +3919, 0, 5, 0.00322125 +3920, 0, 5, 0.00322125 +3921, 0, 5, 0.00322125 +3922, 0, 5, 0.00322125 +3923, 0, 5, 0.00322125 +3924, 0, 5, 0.00322125 +3925, 0, 5, 0.00322125 +3926, 0, 5, 0.00322125 +3927, 0, 5, 0.00322125 +3928, 0, 5, 0.00322125 +3929, 0, 5, 0.00322125 +3930, 0, 5, 0.00322125 +3931, 0, 5, 0.00322125 +3932, 0, 5, 0.00322125 +3933, 0, 5, 0.00322125 +3934, 0, 5, 0.00322125 +3935, 0, 5, 0.00322125 +3936, 0, 5, 0.00322125 +3937, 0, 5, 0.00322125 +3938, 0, 5, 0.00322125 +3939, 0, 5, 0.00322125 +3940, 0, 5, 0.00322125 +3941, 0, 5, 0.00322125 +3942, 0, 5, 0.00322125 +3943, 0, 5, 0.00322125 +3944, 0, 5, 0.00322125 +3945, 0, 5, 0.00322125 +3946, 0, 5, 0.00322125 +3947, 0, 5, 0.00322125 +3948, 0, 5, 0.00322125 +3949, 0, 5, 0.00322125 +3950, 0, 5, 0.00322125 +3951, 0, 5, 0.00322125 +3952, 0, 5, 0.00322125 +3953, 0, 5, 0.00322125 +3954, 0, 5, 0.00322125 +3955, 0, 5, 0.00322125 +3956, 0, 5, 0.00322125 +3957, 0, 5, 0.00322125 +3958, 0, 5, 0.00322125 +3959, 0, 5, 0.00322125 +3960, 0, 5, 0.00322125 +3961, 0, 5, 0.00322125 +3962, 0, 5, 0.00322125 +3963, 0, 5, 0.00322125 +3964, 0, 5, 0.00322125 +3965, 0, 5, 0.00322125 +3966, 0, 5, 0.00322125 +3967, 0, 5, 0.00322125 +3968, 0, 5, 0.00322125 +3969, 0, 5, 0.00322125 +3970, 0, 5, 0.00322125 +3971, 0, 5, 0.00322125 +3972, 0, 5, 0.00322125 +3973, 0, 5, 0.00322125 +3974, 0, 5, 0.00322125 +3975, 0, 5, 0.00322125 +3976, 0, 5, 0.00322125 +3977, 0, 5, 0.00322125 +3978, 0, 5, 0.00322125 +3979, 0, 5, 0.00322125 +3980, 0, 5, 0.00322125 +3981, 0, 5, 0.00322125 +3982, 0, 5, 0.00322125 +3983, 0, 5, 0.00322125 +3984, 0, 5, 0.00322125 +3985, 0, 5, 0.00322125 +3986, 0, 5, 0.00322125 +3987, 0, 5, 0.00322125 +3988, 0, 5, 0.00322125 +3989, 0, 5, 0.00322125 +3990, 0, 5, 0.00322125 +3991, 0, 5, 0.00322125 +3992, 0, 5, 0.00322125 +3993, 0, 5, 0.00322125 +3994, 0, 5, 0.00322125 +3995, 0, 5, 0.00322125 +3996, 0, 5, 0.00322125 +3997, 0, 5, 0.00322125 +3998, 0, 5, 0.00322125 +3999, 0, 5, 0.00322125 +4000, 5, 0, 0.00322125 +4001, 5, 0, 0.00322125 +4002, 5, 0, 0.00322125 +4003, 5, 0, 0.00322125 +4004, 5, 0, 0.00322125 +4005, 5, 0, 0.00322125 +4006, 5, 0, 0.00322125 +4007, 5, 0, 0.00322125 +4008, 5, 0, 0.00322125 +4009, 5, 0, 0.00322125 +4010, 5, 0, 0.00322125 +4011, 5, 0, 0.00322125 +4012, 5, 0, 0.00322125 +4013, 5, 0, 0.00322125 +4014, 5, 0, 0.00322125 +4015, 5, 0, 0.00322125 +4016, 5, 0, 0.00322125 +4017, 5, 0, 0.00322125 +4018, 5, 0, 0.00322125 +4019, 5, 0, 0.00322125 +4020, 5, 0, 0.00322125 +4021, 5, 0, 0.00322125 +4022, 5, 0, 0.00322125 +4023, 5, 0, 0.0031559 +4024, 5, 0, 0.00322125 +4025, 5, 0, 0.00322125 +4026, 5, 0, 0.00322125 +4027, 5, 0, 0.00322125 +4028, 5, 0, 0.00322125 +4029, 5, 0, 0.00322125 +4030, 5, 0, 0.00322125 +4031, 5, 0, 0.00322125 +4032, 5, 0, 0.00322125 +4033, 5, 0, 0.00322125 +4034, 5, 0, 0.00322125 +4035, 5, 0, 0.00322125 +4036, 5, 0, 0.00322125 +4037, 5, 0, 0.00322125 +4038, 5, 0, 0.00322125 +4039, 5, 0, 0.00322125 +4040, 5, 0, 0.00322125 +4041, 5, 0, 0.00322125 +4042, 5, 0, 0.00322125 +4043, 5, 0, 0.00322125 +4044, 5, 0, 0.00322125 +4045, 5, 0, 0.00322125 +4046, 5, 0, 0.00322125 +4047, 5, 0, 0.00322125 +4048, 5, 0, 0.00322125 +4049, 5, 0, 0.00322125 +4050, 5, 0, 0.00322125 +4051, 5, 0, 0.00322125 +4052, 5, 0, 0.00322125 +4053, 5, 0, 0.00322125 +4054, 5, 0, 0.00322125 +4055, 5, 0, 0.00322125 +4056, 5, 0, 0.00322125 +4057, 5, 0, 0.00322125 +4058, 5, 0, 0.00322125 +4059, 5, 0, 0.00322125 +4060, 5, 0, 0.00322125 +4061, 5, 0, 0.00322125 +4062, 5, 0, 0.00322125 +4063, 5, 0, 0.00322125 +4064, 5, 0, 0.00322125 +4065, 5, 0, 0.00322125 +4066, 5, 0, 0.00322125 +4067, 5, 0, 0.00322125 +4068, 5, 0, 0.00322125 +4069, 5, 0, 0.00322125 +4070, 5, 0, 0.00322125 +4071, 5, 0, 0.00322125 +4072, 5, 0, 0.00322125 +4073, 5, 0, 0.00322125 +4074, 5, 0, 0.00322125 +4075, 5, 0, 0.00322125 +4076, 5, 0, 0.00322125 +4077, 5, 0, 0.00322125 +4078, 5, 0, 0.00322125 +4079, 5, 0, 0.00322125 +4080, 5, 0, 0.00322125 +4081, 5, 0, 0.00322125 +4082, 5, 0, 0.00322125 +4083, 5, 0, 0.00322125 +4084, 5, 0, 0.00322125 +4085, 5, 0, 0.00322125 +4086, 5, 0, 0.00322125 +4087, 5, 0, 0.00322125 +4088, 5, 0, 0.00322125 +4089, 5, 0, 0.00322125 +4090, 5, 0, 0.00322125 +4091, 5, 0, 0.00322125 +4092, 5, 0, 0.00322125 +4093, 5, 0, 0.00322125 +4094, 5, 0, 0.00322125 +4095, 5, 0, 0.00322125 +4096, 5, 0, 0.00322125 +4097, 5, 0, 0.00322125 +4098, 5, 0, 0.00322125 +4099, 5, 0, 0.00322125 +4100, 5, 0, 0.00322125 +4101, 5, 0, 0.00322125 +4102, 5, 0, 0.00322125 +4103, 5, 0, 0.00322125 +4104, 5, 0, 0.00322125 +4105, 5, 0, 0.00322125 +4106, 5, 0, 0.00322125 +4107, 5, 0, 0.00322125 +4108, 5, 0, 0.00322125 +4109, 5, 0, 0.00322125 +4110, 5, 0, 0.00322125 +4111, 5, 0, 0.00322125 +4112, 5, 0, 0.00322125 +4113, 5, 0, 0.00322125 +4114, 5, 0, 0.00322125 +4115, 5, 0, 0.00322125 +4116, 5, 0, 0.00322125 +4117, 5, 0, 0.00322125 +4118, 5, 0, 0.00322125 +4119, 5, 0, 0.00322125 +4120, 5, 0, 0.00322125 +4121, 5, 0, 0.00322125 +4122, 5, 0, 0.00322125 +4123, 5, 0, 0.00322125 +4124, 5, 0, 0.00322125 +4125, 5, 0, 0.00322125 +4126, 5, 0, 0.00322125 +4127, 5, 0, 0.00322125 +4128, 5, 0, 0.00322125 +4129, 5, 0, 0.00322125 +4130, 5, 0, 0.00322125 +4131, 5, 0, 0.00322125 +4132, 5, 0, 0.00322125 +4133, 5, 0, 0.00322125 +4134, 5, 0, 0.00322125 +4135, 5, 0, 0.00322125 +4136, 5, 0, 0.00322125 +4137, 5, 0, 0.00322125 +4138, 5, 0, 0.00322125 +4139, 5, 0, 0.00322125 +4140, 5, 0, 0.00322125 +4141, 5, 0, 0.00322125 +4142, 5, 0, 0.00322125 +4143, 5, 0, 0.00322125 +4144, 5, 0, 0.00322125 +4145, 5, 0, 0.00322125 +4146, 5, 0, 0.00322125 +4147, 5, 0, 0.00322125 +4148, 5, 0, 0.00322125 +4149, 5, 0, 0.00322125 +4150, 5, 0, 0.00322125 +4151, 5, 0, 0.00322125 +4152, 5, 0, 0.00322125 +4153, 5, 0, 0.00322125 +4154, 5, 0, 0.00322125 +4155, 5, 0, 0.00322125 +4156, 5, 0, 0.00322125 +4157, 5, 0, 0.00322125 +4158, 5, 0, 0.00322125 +4159, 5, 0, 0.00322125 +4160, 5, 0, 0.00322125 +4161, 5, 0, 0.00322125 +4162, 5, 0, 0.00322125 +4163, 5, 0, 0.00322125 +4164, 5, 0, 0.00322125 +4165, 5, 0, 0.00322125 +4166, 5, 0, 0.00322125 +4167, 5, 0, 0.00322125 +4168, 5, 0, 0.00322125 +4169, 5, 0, 0.00322125 +4170, 5, 0, 0.00322125 +4171, 5, 0, 0.00322125 +4172, 5, 0, 0.00322125 +4173, 5, 0, 0.00322125 +4174, 5, 0, 0.00322125 +4175, 5, 0, 0.00322125 +4176, 5, 0, 0.00322125 +4177, 5, 0, 0.00322125 +4178, 5, 0, 0.00322125 +4179, 5, 0, 0.00322125 +4180, 5, 0, 0.00322125 +4181, 5, 0, 0.00322125 +4182, 5, 0, 0.00322125 +4183, 5, 0, 0.00322125 +4184, 5, 0, 0.00322125 +4185, 5, 0, 0.00322125 +4186, 5, 0, 0.00322125 +4187, 5, 0, 0.00322125 +4188, 5, 0, 0.00322125 +4189, 5, 0, 0.00322125 +4190, 5, 0, 0.00322125 +4191, 5, 0, 0.00322125 +4192, 5, 0, 0.00322125 +4193, 5, 0, 0.00322125 +4194, 5, 0, 0.00322125 +4195, 5, 0, 0.00322125 +4196, 5, 0, 0.00322125 +4197, 5, 0, 0.00322125 +4198, 5, 0, 0.00322125 +4199, 5, 0, 0.00322125 +4200, 5, 0, 0.00322125 +4201, 5, 0, 0.00322125 +4202, 5, 0, 0.00322125 +4203, 5, 0, 0.00322125 +4204, 5, 0, 0.00322125 +4205, 5, 0, 0.00322125 +4206, 5, 0, 0.00322125 +4207, 5, 0, 0.00322125 +4208, 5, 0, 0.00322125 +4209, 5, 0, 0.00322125 +4210, 5, 0, 0.00322125 +4211, 5, 0, 0.00322125 +4212, 5, 0, 0.00322125 +4213, 5, 0, 0.00322125 +4214, 5, 0, 0.00322125 +4215, 5, 0, 0.00322125 +4216, 5, 0, 0.00322125 +4217, 5, 0, 0.00322125 +4218, 5, 0, 0.00322125 +4219, 5, 0, 0.00322125 +4220, 5, 0, 0.00322125 +4221, 5, 0, 0.00322125 +4222, 5, 0, 0.00322125 +4223, 5, 0, 0.00322125 +4224, 5, 0, 0.00322125 +4225, 5, 0, 0.00322125 +4226, 5, 0, 0.00322125 +4227, 5, 0, 0.00322125 +4228, 5, 0, 0.00322125 +4229, 5, 0, 0.00322125 +4230, 5, 0, 0.00322125 +4231, 5, 0, 0.00322125 +4232, 5, 0, 0.00322125 +4233, 5, 0, 0.00322125 +4234, 5, 0, 0.00322125 +4235, 5, 0, 0.00322125 +4236, 5, 0, 0.00322125 +4237, 5, 0, 0.00322125 +4238, 5, 0, 0.00322125 +4239, 5, 0, 0.00322125 +4240, 5, 0, 0.00322125 +4241, 5, 0, 0.00322125 +4242, 5, 0, 0.00322125 +4243, 5, 0, 0.00322125 +4244, 5, 0, 0.00322125 +4245, 5, 0, 0.00322125 +4246, 5, 0, 0.00322125 +4247, 5, 0, 0.00322125 +4248, 5, 0, 0.00322125 +4249, 5, 0, 0.00322125 +4250, 5, 0, 0.00322125 +4251, 5, 0, 0.00322125 +4252, 5, 0, 0.00322125 +4253, 5, 0, 0.00322125 +4254, 5, 0, 0.00322125 +4255, 5, 0, 0.00322125 +4256, 5, 0, 0.00322125 +4257, 5, 0, 0.00322125 +4258, 5, 0, 0.00322125 +4259, 5, 0, 0.00322125 +4260, 5, 0, 0.00322125 +4261, 5, 0, 0.00322125 +4262, 5, 0, 0.00322125 +4263, 5, 0, 0.00322125 +4264, 5, 0, 0.00322125 +4265, 5, 0, 0.00322125 +4266, 5, 0, 0.00322125 +4267, 5, 0, 0.00322125 +4268, 5, 0, 0.00322125 +4269, 5, 0, 0.00322125 +4270, 5, 0, 0.00322125 +4271, 5, 0, 0.00322125 +4272, 5, 0, 0.00322125 +4273, 5, 0, 0.00322125 +4274, 5, 0, 0.00322125 +4275, 5, 0, 0.00322125 +4276, 5, 0, 0.00322125 +4277, 5, 0, 0.00322125 +4278, 5, 0, 0.00322125 +4279, 5, 0, 0.00322125 +4280, 5, 0, 0.00322125 +4281, 5, 0, 0.00322125 +4282, 5, 0, 0.00322125 +4283, 5, 0, 0.00322125 +4284, 5, 0, 0.00322125 +4285, 5, 0, 0.00322125 +4286, 5, 0, 0.00322125 +4287, 5, 0, 0.00322125 +4288, 5, 0, 0.00322125 +4289, 5, 0, 0.00322125 +4290, 5, 0, 0.00322125 +4291, 5, 0, 0.00322125 +4292, 5, 0, 0.00322125 +4293, 5, 0, 0.00322125 +4294, 5, 0, 0.00322125 +4295, 5, 0, 0.00322125 +4296, 5, 0, 0.00322125 +4297, 5, 0, 0.00322125 +4298, 5, 0, 0.00322125 +4299, 5, 0, 0.00322125 +4300, 5, 0, 0.00322125 +4301, 5, 0, 0.00322125 +4302, 5, 0, 0.00322125 +4303, 5, 0, 0.00322125 +4304, 5, 0, 0.00322125 +4305, 5, 0, 0.00322125 +4306, 5, 0, 0.00322125 +4307, 5, 0, 0.00322125 +4308, 5, 0, 0.00322125 +4309, 5, 0, 0.00322125 +4310, 5, 0, 0.00322125 +4311, 5, 0, 0.00322125 +4312, 5, 0, 0.00322125 +4313, 5, 0, 0.00322125 +4314, 5, 0, 0.00322125 +4315, 5, 0, 0.00322125 +4316, 5, 0, 0.00322125 +4317, 5, 0, 0.00322125 +4318, 5, 0, 0.00322125 +4319, 5, 0, 0.00322125 +4320, 5, 0, 0.00322125 +4321, 5, 0, 0.00322125 +4322, 5, 0, 0.00322125 +4323, 5, 0, 0.00322125 +4324, 5, 0, 0.00322125 +4325, 5, 0, 0.00322125 +4326, 5, 0, 0.00322125 +4327, 5, 0, 0.00322125 +4328, 5, 0, 0.00322125 +4329, 5, 0, 0.00322125 +4330, 5, 0, 0.00322125 +4331, 5, 0, 0.00322125 +4332, 5, 0, 0.00322125 +4333, 5, 0, 0.00322125 +4334, 5, 0, 0.00322125 +4335, 5, 0, 0.00322125 +4336, 5, 0, 0.00322125 +4337, 5, 0, 0.00322125 +4338, 5, 0, 0.00322125 +4339, 5, 0, 0.00322125 +4340, 5, 0, 0.00322125 +4341, 5, 0, 0.00322125 +4342, 5, 0, 0.00322125 +4343, 5, 0, 0.00322125 +4344, 5, 0, 0.00322125 +4345, 5, 0, 0.00322125 +4346, 5, 0, 0.00322125 +4347, 5, 0, 0.00322125 +4348, 5, 0, 0.00322125 +4349, 5, 0, 0.00322125 +4350, 5, 0, 0.00322125 +4351, 5, 0, 0.00322125 +4352, 5, 0, 0.00322125 +4353, 5, 0, 0.00322125 +4354, 5, 0, 0.00322125 +4355, 5, 0, 0.00322125 +4356, 5, 0, 0.00322125 +4357, 5, 0, 0.00322125 +4358, 5, 0, 0.00322125 +4359, 5, 0, 0.00322125 +4360, 5, 0, 0.00322125 +4361, 5, 0, 0.00322125 +4362, 5, 0, 0.00322125 +4363, 5, 0, 0.00322125 +4364, 5, 0, 0.00322125 +4365, 5, 0, 0.00322125 +4366, 5, 0, 0.00322125 +4367, 5, 0, 0.00322125 +4368, 5, 0, 0.00322125 +4369, 5, 0, 0.00322125 +4370, 5, 0, 0.00322125 +4371, 5, 0, 0.00322125 +4372, 5, 0, 0.00322125 +4373, 5, 0, 0.00322125 +4374, 5, 0, 0.00322125 +4375, 5, 0, 0.00322125 +4376, 5, 0, 0.00322125 +4377, 5, 0, 0.00322125 +4378, 5, 0, 0.00322125 +4379, 5, 0, 0.00322125 +4380, 5, 0, 0.00322125 +4381, 5, 0, 0.00322125 +4382, 5, 0, 0.00322125 +4383, 5, 0, 0.00322125 +4384, 5, 0, 0.00322125 +4385, 5, 0, 0.00322125 +4386, 5, 0, 0.00322125 +4387, 5, 0, 0.00322125 +4388, 5, 0, 0.00322125 +4389, 5, 0, 0.00322125 +4390, 5, 0, 0.00322125 +4391, 5, 0, 0.00322125 +4392, 5, 0, 0.00322125 +4393, 5, 0, 0.00322125 +4394, 5, 0, 0.00322125 +4395, 5, 0, 0.00322125 +4396, 5, 0, 0.00322125 +4397, 5, 0, 0.00322125 +4398, 5, 0, 0.00322125 +4399, 5, 0, 0.00322125 +4400, 5, 5, 0.00322125 +4401, 5, 5, 0.00322125 +4402, 5, 5, 0.00322125 +4403, 5, 5, 0.0031559 +4404, 5, 5, 0.00322125 +4405, 5, 5, 0.0031559 +4406, 5, 5, 0.0031559 +4407, 5, 5, 0.0031559 +4408, 5, 5, 0.0031559 +4409, 5, 5, 0.00322125 +4410, 5, 5, 5 +4411, 5, 5, 5 +4412, 5, 5, 5 +4413, 5, 5, 5 +4414, 5, 5, 5 +4415, 5, 5, 5 +4416, 5, 5, 5 +4417, 5, 5, 5 +4418, 5, 5, 5 +4419, 5, 5, 5 +4420, 5, 5, 5 +4421, 5, 5, 5 +4422, 5, 5, 5 +4423, 5, 5, 5 +4424, 5, 5, 5 +4425, 5, 5, 5 +4426, 5, 5, 5 +4427, 5, 5, 5 +4428, 5, 5, 5 +4429, 5, 5, 5 +4430, 5, 5, 5 +4431, 5, 5, 5 +4432, 5, 5, 5 +4433, 5, 5, 5 +4434, 5, 5, 5 +4435, 5, 5, 5 +4436, 5, 5, 5 +4437, 5, 5, 5 +4438, 5, 5, 5 +4439, 5, 5, 5 +4440, 5, 5, 5 +4441, 5, 5, 5 +4442, 5, 5, 5 +4443, 5, 5, 5 +4444, 5, 5, 5 +4445, 5, 5, 5 +4446, 5, 5, 5 +4447, 5, 5, 5 +4448, 5, 5, 5 +4449, 5, 5, 5 +4450, 5, 5, 5 +4451, 5, 5, 5 +4452, 5, 5, 5 +4453, 5, 5, 5 +4454, 5, 5, 5 +4455, 5, 5, 5 +4456, 5, 5, 5 +4457, 5, 5, 5 +4458, 5, 5, 5 +4459, 5, 5, 5 +4460, 5, 5, 5 +4461, 5, 5, 5 +4462, 5, 5, 5 +4463, 5, 5, 5 +4464, 5, 5, 5 +4465, 5, 5, 5 +4466, 5, 5, 5 +4467, 5, 5, 5 +4468, 5, 5, 5 +4469, 5, 5, 5 +4470, 5, 5, 5 +4471, 5, 5, 5 +4472, 5, 5, 5 +4473, 5, 5, 5 +4474, 5, 5, 5 +4475, 5, 5, 5 +4476, 5, 5, 5 +4477, 5, 5, 5 +4478, 5, 5, 5 +4479, 5, 5, 5 +4480, 5, 5, 5 +4481, 5, 5, 5 +4482, 5, 5, 5 +4483, 5, 5, 5 +4484, 5, 5, 5 +4485, 5, 5, 5 +4486, 5, 5, 5 +4487, 5, 5, 5 +4488, 5, 5, 5 +4489, 5, 5, 5 +4490, 5, 5, 5 +4491, 5, 5, 5 +4492, 5, 5, 5 +4493, 5, 5, 5 +4494, 5, 5, 5 +4495, 5, 5, 5 +4496, 5, 5, 5 +4497, 5, 5, 5 +4498, 5, 5, 5 +4499, 5, 5, 5 +4500, 5, 5, 5 +4501, 5, 5, 5 +4502, 5, 5, 5 +4503, 5, 5, 5 +4504, 5, 5, 5 +4505, 5, 5, 5 +4506, 5, 5, 5 +4507, 5, 5, 5 +4508, 5, 5, 5 +4509, 5, 5, 5 +4510, 5, 5, 5 +4511, 5, 5, 5 +4512, 5, 5, 5 +4513, 5, 5, 5 +4514, 5, 5, 5 +4515, 5, 5, 5 +4516, 5, 5, 5 +4517, 5, 5, 5 +4518, 5, 5, 5 +4519, 5, 5, 5 +4520, 5, 5, 5 +4521, 5, 5, 5 +4522, 5, 5, 5 +4523, 5, 5, 5 +4524, 5, 5, 5 +4525, 5, 5, 5 +4526, 5, 5, 5 +4527, 5, 5, 5 +4528, 5, 5, 5 +4529, 5, 5, 5 +4530, 5, 5, 5 +4531, 5, 5, 5 +4532, 5, 5, 5 +4533, 5, 5, 5 +4534, 5, 5, 5 +4535, 5, 5, 5 +4536, 5, 5, 5 +4537, 5, 5, 5 +4538, 5, 5, 5 +4539, 5, 5, 5 +4540, 5, 5, 5 +4541, 5, 5, 5 +4542, 5, 5, 5 +4543, 5, 5, 5 +4544, 5, 5, 5 +4545, 5, 5, 5 +4546, 5, 5, 5 +4547, 5, 5, 5 +4548, 5, 5, 5 +4549, 5, 5, 5 +4550, 5, 5, 5 +4551, 5, 5, 5 +4552, 5, 5, 5 +4553, 5, 5, 5 +4554, 5, 5, 5 +4555, 5, 5, 5 +4556, 5, 5, 5 +4557, 5, 5, 5 +4558, 5, 5, 5 +4559, 5, 5, 5 +4560, 5, 5, 5 +4561, 5, 5, 5 +4562, 5, 5, 5 +4563, 5, 5, 5 +4564, 5, 5, 5 +4565, 5, 5, 5 +4566, 5, 5, 5 +4567, 5, 5, 5 +4568, 5, 5, 5 +4569, 5, 5, 5 +4570, 5, 5, 5 +4571, 5, 5, 5 +4572, 5, 5, 5 +4573, 5, 5, 5 +4574, 5, 5, 5 +4575, 5, 5, 5 +4576, 5, 5, 5 +4577, 5, 5, 5 +4578, 5, 5, 5 +4579, 5, 5, 5 +4580, 5, 5, 5 +4581, 5, 5, 5 +4582, 5, 5, 5 +4583, 5, 5, 5 +4584, 5, 5, 5 +4585, 5, 5, 5 +4586, 5, 5, 5 +4587, 5, 5, 5 +4588, 5, 5, 5 +4589, 5, 5, 5 +4590, 5, 5, 5 +4591, 5, 5, 5 +4592, 5, 5, 5 +4593, 5, 5, 5 +4594, 5, 5, 5 +4595, 5, 5, 5 +4596, 5, 5, 5 +4597, 5, 5, 5 +4598, 5, 5, 5 +4599, 5, 5, 5 +4600, 5, 5, 5 +4601, 5, 5, 5 +4602, 5, 5, 5 +4603, 5, 5, 5 +4604, 5, 5, 5 +4605, 5, 5, 5 +4606, 5, 5, 5 +4607, 5, 5, 5 +4608, 5, 5, 5 +4609, 5, 5, 5 +4610, 5, 5, 5 +4611, 5, 5, 5 +4612, 5, 5, 5 +4613, 5, 5, 5 +4614, 5, 5, 5 +4615, 5, 5, 5 +4616, 5, 5, 5 +4617, 5, 5, 5 +4618, 5, 5, 5 +4619, 5, 5, 5 +4620, 5, 5, 5 +4621, 5, 5, 5 +4622, 5, 5, 5 +4623, 5, 5, 5 +4624, 5, 5, 5 +4625, 5, 5, 5 +4626, 5, 5, 5 +4627, 5, 5, 5 +4628, 5, 5, 5 +4629, 5, 5, 5 +4630, 5, 5, 5 +4631, 5, 5, 5 +4632, 5, 5, 5 +4633, 5, 5, 5 +4634, 5, 5, 5 +4635, 5, 5, 5 +4636, 5, 5, 5 +4637, 5, 5, 5 +4638, 5, 5, 5 +4639, 5, 5, 5 +4640, 5, 5, 5 +4641, 5, 5, 5 +4642, 5, 5, 5 +4643, 5, 5, 5 +4644, 5, 5, 5 +4645, 5, 5, 5 +4646, 5, 5, 5 +4647, 5, 5, 5 +4648, 5, 5, 5 +4649, 5, 5, 5 +4650, 5, 5, 5 +4651, 5, 5, 5 +4652, 5, 5, 5 +4653, 5, 5, 5 +4654, 5, 5, 5 +4655, 5, 5, 5 +4656, 5, 5, 5 +4657, 5, 5, 5 +4658, 5, 5, 5 +4659, 5, 5, 5 +4660, 5, 5, 5 +4661, 5, 5, 5 +4662, 5, 5, 5 +4663, 5, 5, 5 +4664, 5, 5, 5 +4665, 5, 5, 5 +4666, 5, 5, 5 +4667, 5, 5, 5 +4668, 5, 5, 5 +4669, 5, 5, 5 +4670, 5, 5, 5 +4671, 5, 5, 5 +4672, 5, 5, 5 +4673, 5, 5, 5 +4674, 5, 5, 5 +4675, 5, 5, 5 +4676, 5, 5, 5 +4677, 5, 5, 5 +4678, 5, 5, 5 +4679, 5, 5, 5 +4680, 5, 5, 5 +4681, 5, 5, 5 +4682, 5, 5, 5 +4683, 5, 5, 5 +4684, 5, 5, 5 +4685, 5, 5, 5 +4686, 5, 5, 5 +4687, 5, 5, 5 +4688, 5, 5, 5 +4689, 5, 5, 5 +4690, 5, 5, 5 +4691, 5, 5, 5 +4692, 5, 5, 5 +4693, 5, 5, 5 +4694, 5, 5, 5 +4695, 5, 5, 5 +4696, 5, 5, 5 +4697, 5, 5, 5 +4698, 5, 5, 5 +4699, 5, 5, 5 +4700, 5, 5, 5 +4701, 5, 5, 5 +4702, 5, 5, 5 +4703, 5, 5, 5 +4704, 5, 5, 5 +4705, 5, 5, 5 +4706, 5, 5, 5 +4707, 5, 5, 5 +4708, 5, 5, 5 +4709, 5, 5, 5 +4710, 5, 5, 5 +4711, 5, 5, 5 +4712, 5, 5, 5 +4713, 5, 5, 5 +4714, 5, 5, 5 +4715, 5, 5, 5 +4716, 5, 5, 5 +4717, 5, 5, 5 +4718, 5, 5, 5 +4719, 5, 5, 5 +4720, 5, 5, 5 +4721, 5, 5, 5 +4722, 5, 5, 5 +4723, 5, 5, 5 +4724, 5, 5, 5 +4725, 5, 5, 5 +4726, 5, 5, 5 +4727, 5, 5, 5 +4728, 5, 5, 5 +4729, 5, 5, 5 +4730, 5, 5, 5 +4731, 5, 5, 5 +4732, 5, 5, 5 +4733, 5, 5, 5 +4734, 5, 5, 5 +4735, 5, 5, 5 +4736, 5, 5, 5 +4737, 5, 5, 5 +4738, 5, 5, 5 +4739, 5, 5, 5 +4740, 5, 5, 5 +4741, 5, 5, 5 +4742, 5, 5, 5 +4743, 5, 5, 5 +4744, 5, 5, 5 +4745, 5, 5, 5 +4746, 5, 5, 5 +4747, 5, 5, 5 +4748, 5, 5, 5 +4749, 5, 5, 5 +4750, 5, 5, 5 +4751, 5, 5, 5 +4752, 5, 5, 5 +4753, 5, 5, 5 +4754, 5, 5, 5 +4755, 5, 5, 5 +4756, 5, 5, 5 +4757, 5, 5, 5 +4758, 5, 5, 5 +4759, 5, 5, 5 +4760, 5, 5, 5 +4761, 5, 5, 5 +4762, 5, 5, 5 +4763, 5, 5, 5 +4764, 5, 5, 5 +4765, 5, 5, 5 +4766, 5, 5, 5 +4767, 5, 5, 5 +4768, 5, 5, 5 +4769, 5, 5, 5 +4770, 5, 5, 5 +4771, 5, 5, 5 +4772, 5, 5, 5 +4773, 5, 5, 5 +4774, 5, 5, 5 +4775, 5, 5, 5 +4776, 5, 5, 5 +4777, 5, 5, 5 +4778, 5, 5, 5 +4779, 5, 5, 5 +4780, 5, 5, 5 +4781, 5, 5, 5 +4782, 5, 5, 5 +4783, 5, 5, 5 +4784, 5, 5, 5 +4785, 5, 5, 5 +4786, 5, 5, 5 +4787, 5, 5, 5 +4788, 5, 5, 5 +4789, 5, 5, 5 +4790, 5, 5, 5 +4791, 5, 5, 5 +4792, 5, 5, 5 +4793, 5, 5, 5 +4794, 5, 5, 5 +4795, 5, 5, 5 +4796, 5, 5, 5 +4797, 5, 5, 5 +4798, 5, 5, 5 +4799, 5, 5, 5 +4800, 0, 0, 5 +4801, 0, 0, 5 +4802, 0, 0, 5 +4803, 0, 0, 5 +4804, 0, 0, 5 +4805, 0, 0, 5 +4806, 0, 0, 5 +4807, 0, 0, 5 +4808, 0, 0, 5 +4809, 0, 0, 5 +4810, 0, 0, 5 +4811, 0, 0, 5 +4812, 0, 0, 5 +4813, 0, 0, 5 +4814, 0, 0, 5 +4815, 0, 0, 5 +4816, 0, 0, 5 +4817, 0, 0, 5 +4818, 0, 0, 5 +4819, 0, 0, 5 +4820, 0, 0, 5 +4821, 0, 0, 5 +4822, 0, 0, 5 +4823, 0, 0, 5 +4824, 0, 0, 5 +4825, 0, 0, 5 +4826, 0, 0, 5 +4827, 0, 0, 5 +4828, 0, 0, 5 +4829, 0, 0, 5 +4830, 0, 0, 5 +4831, 0, 0, 5 +4832, 0, 0, 5 +4833, 0, 0, 5 +4834, 0, 0, 5 +4835, 0, 0, 5 +4836, 0, 0, 5 +4837, 0, 0, 5 +4838, 0, 0, 5 +4839, 0, 0, 5 +4840, 0, 0, 5 +4841, 0, 0, 5 +4842, 0, 0, 5 +4843, 0, 0, 5 +4844, 0, 0, 5 +4845, 0, 0, 5 +4846, 0, 0, 5 +4847, 0, 0, 5 +4848, 0, 0, 5 +4849, 0, 0, 5 +4850, 0, 0, 5 +4851, 0, 0, 5 +4852, 0, 0, 5 +4853, 0, 0, 5 +4854, 0, 0, 5 +4855, 0, 0, 5 +4856, 0, 0, 5 +4857, 0, 0, 5 +4858, 0, 0, 5 +4859, 0, 0, 5 +4860, 0, 0, 5 +4861, 0, 0, 5 +4862, 0, 0, 5 +4863, 0, 0, 5 +4864, 0, 0, 5 +4865, 0, 0, 5 +4866, 0, 0, 5 +4867, 0, 0, 5 +4868, 0, 0, 5 +4869, 0, 0, 5 +4870, 0, 0, 5 +4871, 0, 0, 5 +4872, 0, 0, 5 +4873, 0, 0, 5 +4874, 0, 0, 5 +4875, 0, 0, 5 +4876, 0, 0, 5 +4877, 0, 0, 5 +4878, 0, 0, 5 +4879, 0, 0, 5 +4880, 0, 0, 5 +4881, 0, 0, 5 +4882, 0, 0, 5 +4883, 0, 0, 5 +4884, 0, 0, 5 +4885, 0, 0, 5 +4886, 0, 0, 5 +4887, 0, 0, 5 +4888, 0, 0, 5 +4889, 0, 0, 5 +4890, 0, 0, 5 +4891, 0, 0, 5 +4892, 0, 0, 5 +4893, 0, 0, 5 +4894, 0, 0, 5 +4895, 0, 0, 5 +4896, 0, 0, 5 +4897, 0, 0, 5 +4898, 0, 0, 5 +4899, 0, 0, 5 +4900, 0, 0, 5 +4901, 0, 0, 5 +4902, 0, 0, 5 +4903, 0, 0, 5 +4904, 0, 0, 5 +4905, 0, 0, 5 +4906, 0, 0, 5 +4907, 0, 0, 5 +4908, 0, 0, 5 +4909, 0, 0, 5 +4910, 0, 0, 5 +4911, 0, 0, 5 +4912, 0, 0, 5 +4913, 0, 0, 5 +4914, 0, 0, 5 +4915, 0, 0, 5 +4916, 0, 0, 5 +4917, 0, 0, 5 +4918, 0, 0, 5 +4919, 0, 0, 5 +4920, 0, 0, 5 +4921, 0, 0, 5 +4922, 0, 0, 5 +4923, 0, 0, 5 +4924, 0, 0, 5 +4925, 0, 0, 5 +4926, 0, 0, 5 +4927, 0, 0, 5 +4928, 0, 0, 5 +4929, 0, 0, 5 +4930, 0, 0, 5 +4931, 0, 0, 5 +4932, 0, 0, 5 +4933, 0, 0, 5 +4934, 0, 0, 5 +4935, 0, 0, 5 +4936, 0, 0, 5 +4937, 0, 0, 5 +4938, 0, 0, 5 +4939, 0, 0, 5 +4940, 0, 0, 5 +4941, 0, 0, 5 +4942, 0, 0, 5 +4943, 0, 0, 5 +4944, 0, 0, 5 +4945, 0, 0, 5 +4946, 0, 0, 5 +4947, 0, 0, 5 +4948, 0, 0, 5 +4949, 0, 0, 5 +4950, 0, 0, 5 +4951, 0, 0, 5 +4952, 0, 0, 5 +4953, 0, 0, 5 +4954, 0, 0, 5 +4955, 0, 0, 5 +4956, 0, 0, 5 +4957, 0, 0, 5 +4958, 0, 0, 5 +4959, 0, 0, 5 +4960, 0, 0, 5 +4961, 0, 0, 5 +4962, 0, 0, 5 +4963, 0, 0, 5 +4964, 0, 0, 5 +4965, 0, 0, 5 +4966, 0, 0, 5 +4967, 0, 0, 5 +4968, 0, 0, 5 +4969, 0, 0, 5 +4970, 0, 0, 5 +4971, 0, 0, 5 +4972, 0, 0, 5 +4973, 0, 0, 5 +4974, 0, 0, 5 +4975, 0, 0, 5 +4976, 0, 0, 5 +4977, 0, 0, 5 +4978, 0, 0, 5 +4979, 0, 0, 5 +4980, 0, 0, 5 +4981, 0, 0, 5 +4982, 0, 0, 5 +4983, 0, 0, 5 +4984, 0, 0, 5 +4985, 0, 0, 5 +4986, 0, 0, 5 +4987, 0, 0, 5 +4988, 0, 0, 5 +4989, 0, 0, 5 +4990, 0, 0, 5 +4991, 0, 0, 5 +4992, 0, 0, 5 +4993, 0, 0, 5 +4994, 0, 0, 5 +4995, 0, 0, 5 +4996, 0, 0, 5 +4997, 0, 0, 5 +4998, 0, 0, 5 +4999, 0, 0, 5 +5000, 0, 0, 5 +5001, 0, 0, 5 +5002, 0, 0, 5 +5003, 0, 0, 5 +5004, 0, 0, 5 +5005, 0, 0, 5 +5006, 0, 0, 5 +5007, 0, 0, 5 +5008, 0, 0, 5 +5009, 0, 0, 5 +5010, 0, 0, 5 +5011, 0, 0, 5 +5012, 0, 0, 5 +5013, 0, 0, 5 +5014, 0, 0, 5 +5015, 0, 0, 5 +5016, 0, 0, 5 +5017, 0, 0, 5 +5018, 0, 0, 5 +5019, 0, 0, 5 +5020, 0, 0, 5 +5021, 0, 0, 5 +5022, 0, 0, 5 +5023, 0, 0, 5 +5024, 0, 0, 5 +5025, 0, 0, 5 +5026, 0, 0, 5 +5027, 0, 0, 5 +5028, 0, 0, 5 +5029, 0, 0, 5 +5030, 0, 0, 5 +5031, 0, 0, 5 +5032, 0, 0, 5 +5033, 0, 0, 5 +5034, 0, 0, 5 +5035, 0, 0, 5 +5036, 0, 0, 5 +5037, 0, 0, 5 +5038, 0, 0, 5 +5039, 0, 0, 5 +5040, 0, 0, 5 +5041, 0, 0, 5 +5042, 0, 0, 5 +5043, 0, 0, 5 +5044, 0, 0, 5 +5045, 0, 0, 5 +5046, 0, 0, 5 +5047, 0, 0, 5 +5048, 0, 0, 5 +5049, 0, 0, 5 +5050, 0, 0, 5 +5051, 0, 0, 5 +5052, 0, 0, 5 +5053, 0, 0, 5 +5054, 0, 0, 5 +5055, 0, 0, 5 +5056, 0, 0, 5 +5057, 0, 0, 5 +5058, 0, 0, 5 +5059, 0, 0, 5 +5060, 0, 0, 5 +5061, 0, 0, 5 +5062, 0, 0, 5 +5063, 0, 0, 5 +5064, 0, 0, 5 +5065, 0, 0, 5 +5066, 0, 0, 5 +5067, 0, 0, 5 +5068, 0, 0, 5 +5069, 0, 0, 5 +5070, 0, 0, 5 +5071, 0, 0, 5 +5072, 0, 0, 5 +5073, 0, 0, 5 +5074, 0, 0, 5 +5075, 0, 0, 5 +5076, 0, 0, 5 +5077, 0, 0, 5 +5078, 0, 0, 5 +5079, 0, 0, 5 +5080, 0, 0, 5 +5081, 0, 0, 5 +5082, 0, 0, 5 +5083, 0, 0, 5 +5084, 0, 0, 5 +5085, 0, 0, 5 +5086, 0, 0, 5 +5087, 0, 0, 5 +5088, 0, 0, 5 +5089, 0, 0, 5 +5090, 0, 0, 5 +5091, 0, 0, 5 +5092, 0, 0, 5 +5093, 0, 0, 5 +5094, 0, 0, 5 +5095, 0, 0, 5 +5096, 0, 0, 5 +5097, 0, 0, 5 +5098, 0, 0, 5 +5099, 0, 0, 5 +5100, 0, 0, 5 +5101, 0, 0, 5 +5102, 0, 0, 5 +5103, 0, 0, 5 +5104, 0, 0, 5 +5105, 0, 0, 5 +5106, 0, 0, 5 +5107, 0, 0, 5 +5108, 0, 0, 5 +5109, 0, 0, 5 +5110, 0, 0, 5 +5111, 0, 0, 5 +5112, 0, 0, 5 +5113, 0, 0, 5 +5114, 0, 0, 5 +5115, 0, 0, 5 +5116, 0, 0, 5 +5117, 0, 0, 5 +5118, 0, 0, 5 +5119, 0, 0, 5 +5120, 0, 0, 5 +5121, 0, 0, 5 +5122, 0, 0, 5 +5123, 0, 0, 5 +5124, 0, 0, 5 +5125, 0, 0, 5 +5126, 0, 0, 5 +5127, 0, 0, 5 +5128, 0, 0, 5 +5129, 0, 0, 5 +5130, 0, 0, 5 +5131, 0, 0, 5 +5132, 0, 0, 5 +5133, 0, 0, 5 +5134, 0, 0, 5 +5135, 0, 0, 5 +5136, 0, 0, 5 +5137, 0, 0, 5 +5138, 0, 0, 5 +5139, 0, 0, 5 +5140, 0, 0, 5 +5141, 0, 0, 5 +5142, 0, 0, 5 +5143, 0, 0, 5 +5144, 0, 0, 5 +5145, 0, 0, 5 +5146, 0, 0, 5 +5147, 0, 0, 5 +5148, 0, 0, 5 +5149, 0, 0, 5 +5150, 0, 0, 5 +5151, 0, 0, 5 +5152, 0, 0, 5 +5153, 0, 0, 5 +5154, 0, 0, 5 +5155, 0, 0, 5 +5156, 0, 0, 5 +5157, 0, 0, 5 +5158, 0, 0, 5 +5159, 0, 0, 5 +5160, 0, 0, 5 +5161, 0, 0, 5 +5162, 0, 0, 5 +5163, 0, 0, 5 +5164, 0, 0, 5 +5165, 0, 0, 5 +5166, 0, 0, 5 +5167, 0, 0, 5 +5168, 0, 0, 5 +5169, 0, 0, 5 +5170, 0, 0, 5 +5171, 0, 0, 5 +5172, 0, 0, 5 +5173, 0, 0, 5 +5174, 0, 0, 5 +5175, 0, 0, 5 +5176, 0, 0, 5 +5177, 0, 0, 5 +5178, 0, 0, 5 +5179, 0, 0, 5 +5180, 0, 0, 5 +5181, 0, 0, 5 +5182, 0, 0, 5 +5183, 0, 0, 5 +5184, 0, 0, 5 +5185, 0, 0, 5 +5186, 0, 0, 5 +5187, 0, 0, 5 +5188, 0, 0, 5 +5189, 0, 0, 5 +5190, 0, 0, 5 +5191, 0, 0, 5 +5192, 0, 0, 5 +5193, 0, 0, 5 +5194, 0, 0, 5 +5195, 0, 0, 5 +5196, 0, 0, 5 +5197, 0, 0, 5 +5198, 0, 0, 5 +5199, 0, 0, 5 +5200, 0, 5, 5 +5201, 0, 5, 5 +5202, 0, 5, 5 +5203, 0, 5, 5 +5204, 0, 5, 5 +5205, 0, 5, 5 +5206, 0, 5, 5 +5207, 0, 5, 5 +5208, 0, 5, 5 +5209, 0, 5, 5 +5210, 0, 5, 5 +5211, 0, 5, 5 +5212, 0, 5, 5 +5213, 0, 5, 0 +5214, 0, 5, 0 +5215, 0, 5, 0 +5216, 0, 5, 0.0031559 +5217, 0, 5, 0.0031559 +5218, 0, 5, 0.00322125 +5219, 0, 5, 0.0031559 +5220, 0, 5, 0.00322125 +5221, 0, 5, 0.00322125 +5222, 0, 5, 0.00322125 +5223, 0, 5, 0.00322125 +5224, 0, 5, 0.00322125 +5225, 0, 5, 0.00322125 +5226, 0, 5, 0.00322125 +5227, 0, 5, 0.00322125 +5228, 0, 5, 0.00322125 +5229, 0, 5, 0.00322125 +5230, 0, 5, 0.00322125 +5231, 0, 5, 0.00322125 +5232, 0, 5, 0.00322125 +5233, 0, 5, 0.00322125 +5234, 0, 5, 0.00322125 +5235, 0, 5, 0.00322125 +5236, 0, 5, 0.00322125 +5237, 0, 5, 0.00322125 +5238, 0, 5, 0.00322125 +5239, 0, 5, 0.00322125 +5240, 0, 5, 0.00322125 +5241, 0, 5, 0.00322125 +5242, 0, 5, 0.00322125 +5243, 0, 5, 0.00322125 +5244, 0, 5, 0.00322125 +5245, 0, 5, 0.00322125 +5246, 0, 5, 0.00322125 +5247, 0, 5, 0.00322125 +5248, 0, 5, 0.00322125 +5249, 0, 5, 0.00322125 +5250, 0, 5, 0.00322125 +5251, 0, 5, 0.00322125 +5252, 0, 5, 0.00322125 +5253, 0, 5, 0.00322125 +5254, 0, 5, 0.00322125 +5255, 0, 5, 0.00322125 +5256, 0, 5, 0.00322125 +5257, 0, 5, 0.00322125 +5258, 0, 5, 0.00322125 +5259, 0, 5, 0.00322125 +5260, 0, 5, 0.00322125 +5261, 0, 5, 0.00322125 +5262, 0, 5, 0.00322125 +5263, 0, 5, 0.00322125 +5264, 0, 5, 0.00322125 +5265, 0, 5, 0.00322125 +5266, 0, 5, 0.00322125 +5267, 0, 5, 0.00322125 +5268, 0, 5, 0.00322125 +5269, 0, 5, 0.00322125 +5270, 0, 5, 0.00322125 +5271, 0, 5, 0.00322125 +5272, 0, 5, 0.00322125 +5273, 0, 5, 0.00322125 +5274, 0, 5, 0.00322125 +5275, 0, 5, 0.00322125 +5276, 0, 5, 0.00322125 +5277, 0, 5, 0.00322125 +5278, 0, 5, 0.00322125 +5279, 0, 5, 0.00322125 +5280, 0, 5, 0.00322125 +5281, 0, 5, 0.00322125 +5282, 0, 5, 0.00322125 +5283, 0, 5, 0.00322125 +5284, 0, 5, 0.00322125 +5285, 0, 5, 0.00322125 +5286, 0, 5, 0.00322125 +5287, 0, 5, 0.00322125 +5288, 0, 5, 0.00322125 +5289, 0, 5, 0.00322125 +5290, 0, 5, 0.00322125 +5291, 0, 5, 0.00322125 +5292, 0, 5, 0.00322125 +5293, 0, 5, 0.00322125 +5294, 0, 5, 0.00322125 +5295, 0, 5, 0.00322125 +5296, 0, 5, 0.00322125 +5297, 0, 5, 0.00322125 +5298, 0, 5, 0.00322125 +5299, 0, 5, 0.00322125 +5300, 0, 5, 0.00322125 +5301, 0, 5, 0.00322125 +5302, 0, 5, 0.00322125 +5303, 0, 5, 0.00322125 +5304, 0, 5, 0.00322125 +5305, 0, 5, 0.00322125 +5306, 0, 5, 0.00322125 +5307, 0, 5, 0.00322125 +5308, 0, 5, 0.00322125 +5309, 0, 5, 0.00322125 +5310, 0, 5, 0.00322125 +5311, 0, 5, 0.00322125 +5312, 0, 5, 0.00322125 +5313, 0, 5, 0.00322125 +5314, 0, 5, 0.00322125 +5315, 0, 5, 0.00322125 +5316, 0, 5, 0.00322125 +5317, 0, 5, 0.00322125 +5318, 0, 5, 0.00322125 +5319, 0, 5, 0.00322125 +5320, 0, 5, 0.00322125 +5321, 0, 5, 0.00322125 +5322, 0, 5, 0.00322125 +5323, 0, 5, 0.00322125 +5324, 0, 5, 0.00322125 +5325, 0, 5, 0.00322125 +5326, 0, 5, 0.00322125 +5327, 0, 5, 0.00322125 +5328, 0, 5, 0.00322125 +5329, 0, 5, 0.00322125 +5330, 0, 5, 0.00322125 +5331, 0, 5, 0.00322125 +5332, 0, 5, 0.00322125 +5333, 0, 5, 0.00322125 +5334, 0, 5, 0.00322125 +5335, 0, 5, 0.00322125 +5336, 0, 5, 0.00322125 +5337, 0, 5, 0.00322125 +5338, 0, 5, 0.00322125 +5339, 0, 5, 0.00322125 +5340, 0, 5, 0.00322125 +5341, 0, 5, 0.00322125 +5342, 0, 5, 0.00322125 +5343, 0, 5, 0.00322125 +5344, 0, 5, 0.00322125 +5345, 0, 5, 0.00322125 +5346, 0, 5, 0.00322125 +5347, 0, 5, 0.00322125 +5348, 0, 5, 0.00322125 +5349, 0, 5, 0.00322125 +5350, 0, 5, 0.00322125 +5351, 0, 5, 0.00322125 +5352, 0, 5, 0.00322125 +5353, 0, 5, 0.00322125 +5354, 0, 5, 0.00322125 +5355, 0, 5, 0.00322125 +5356, 0, 5, 0.00322125 +5357, 0, 5, 0.00322125 +5358, 0, 5, 0.00322125 +5359, 0, 5, 0.00322125 +5360, 0, 5, 0.00322125 +5361, 0, 5, 0.00322125 +5362, 0, 5, 0.00322125 +5363, 0, 5, 0.00322125 +5364, 0, 5, 0.00322125 +5365, 0, 5, 0.00322125 +5366, 0, 5, 0.00322125 +5367, 0, 5, 0.00322125 +5368, 0, 5, 0.00322125 +5369, 0, 5, 0.00322125 +5370, 0, 5, 0.00322125 +5371, 0, 5, 0.00322125 +5372, 0, 5, 0.00322125 +5373, 0, 5, 0.00322125 +5374, 0, 5, 0.00322125 +5375, 0, 5, 0.00322125 +5376, 0, 5, 0.00322125 +5377, 0, 5, 0.00322125 +5378, 0, 5, 0.00322125 +5379, 0, 5, 0.00322125 +5380, 0, 5, 0.00322125 +5381, 0, 5, 0.00322125 +5382, 0, 5, 0.00322125 +5383, 0, 5, 0.00322125 +5384, 0, 5, 0.00322125 +5385, 0, 5, 0.00322125 +5386, 0, 5, 0.00322125 +5387, 0, 5, 0.00322125 +5388, 0, 5, 0.00322125 +5389, 0, 5, 0.00322125 +5390, 0, 5, 0.00322125 +5391, 0, 5, 0.00322125 +5392, 0, 5, 0.00322125 +5393, 0, 5, 0.00322125 +5394, 0, 5, 0.00322125 +5395, 0, 5, 0.00322125 +5396, 0, 5, 0.00322125 +5397, 0, 5, 0.00322125 +5398, 0, 5, 0.00322125 +5399, 0, 5, 0.00322125 +5400, 0, 5, 0.00322125 +5401, 0, 5, 0.00322125 +5402, 0, 5, 0.00322125 +5403, 0, 5, 0.00322125 +5404, 0, 5, 0.00322125 +5405, 0, 5, 0.00322125 +5406, 0, 5, 0.00322125 +5407, 0, 5, 0.00322125 +5408, 0, 5, 0.00322125 +5409, 0, 5, 0.00322125 +5410, 0, 5, 0.00322125 +5411, 0, 5, 0.00322125 +5412, 0, 5, 0.00322125 +5413, 0, 5, 0.00322125 +5414, 0, 5, 0.00322125 +5415, 0, 5, 0.00322125 +5416, 0, 5, 0.00322125 +5417, 0, 5, 0.00322125 +5418, 0, 5, 0.00322125 +5419, 0, 5, 0.00322125 +5420, 0, 5, 0.00322125 +5421, 0, 5, 0.00322125 +5422, 0, 5, 0.00322125 +5423, 0, 5, 0.00322125 +5424, 0, 5, 0.00322125 +5425, 0, 5, 0.00322125 +5426, 0, 5, 0.00322125 +5427, 0, 5, 0.00322125 +5428, 0, 5, 0.00322125 +5429, 0, 5, 0.00322125 +5430, 0, 5, 0.00322125 +5431, 0, 5, 0.00322125 +5432, 0, 5, 0.00322125 +5433, 0, 5, 0.00322125 +5434, 0, 5, 0.00322125 +5435, 0, 5, 0.00322125 +5436, 0, 5, 0.00322125 +5437, 0, 5, 0.00322125 +5438, 0, 5, 0.00322125 +5439, 0, 5, 0.00322125 +5440, 0, 5, 0.00322125 +5441, 0, 5, 0.00322125 +5442, 0, 5, 0.00322125 +5443, 0, 5, 0.00322125 +5444, 0, 5, 0.00322125 +5445, 0, 5, 0.00322125 +5446, 0, 5, 0.00322125 +5447, 0, 5, 0.00322125 +5448, 0, 5, 0.00322125 +5449, 0, 5, 0.00322125 +5450, 0, 5, 0.00322125 +5451, 0, 5, 0.00322125 +5452, 0, 5, 0.00322125 +5453, 0, 5, 0.00322125 +5454, 0, 5, 0.00322125 +5455, 0, 5, 0.00322125 +5456, 0, 5, 0.00322125 +5457, 0, 5, 0.00322125 +5458, 0, 5, 0.00322125 +5459, 0, 5, 0.00322125 +5460, 0, 5, 0.00322125 +5461, 0, 5, 0.00322125 +5462, 0, 5, 0.00322125 +5463, 0, 5, 0.00322125 +5464, 0, 5, 0.00322125 +5465, 0, 5, 0.00322125 +5466, 0, 5, 0.00322125 +5467, 0, 5, 0.00322125 +5468, 0, 5, 0.00322125 +5469, 0, 5, 0.00322125 +5470, 0, 5, 0.00322125 +5471, 0, 5, 0.00322125 +5472, 0, 5, 0.00322125 +5473, 0, 5, 0.00322125 +5474, 0, 5, 0.00322125 +5475, 0, 5, 0.00322125 +5476, 0, 5, 0.00322125 +5477, 0, 5, 0.00322125 +5478, 0, 5, 0.00322125 +5479, 0, 5, 0.00322125 +5480, 0, 5, 0.00322125 +5481, 0, 5, 0.00322125 +5482, 0, 5, 0.00322125 +5483, 0, 5, 0.00322125 +5484, 0, 5, 0.00322125 +5485, 0, 5, 0.00322125 +5486, 0, 5, 0.00322125 +5487, 0, 5, 0.00322125 +5488, 0, 5, 0.00322125 +5489, 0, 5, 0.00322125 +5490, 0, 5, 0.00322125 +5491, 0, 5, 0.00322125 +5492, 0, 5, 0.00322125 +5493, 0, 5, 0.00322125 +5494, 0, 5, 0.00322125 +5495, 0, 5, 0.00322125 +5496, 0, 5, 0.00322125 +5497, 0, 5, 0.00322125 +5498, 0, 5, 0.00322125 +5499, 0, 5, 0.00322125 +5500, 0, 5, 0.00322125 +5501, 0, 5, 0.00322125 +5502, 0, 5, 0.00322125 +5503, 0, 5, 0.00322125 +5504, 0, 5, 0.00322125 +5505, 0, 5, 0.00322125 +5506, 0, 5, 0.00322125 +5507, 0, 5, 0.00322125 +5508, 0, 5, 0.00322125 +5509, 0, 5, 0.00322125 +5510, 0, 5, 0.00322125 +5511, 0, 5, 0.00322125 +5512, 0, 5, 0.00322125 +5513, 0, 5, 0.00322125 +5514, 0, 5, 0.00322125 +5515, 0, 5, 0.00322125 +5516, 0, 5, 0.00322125 +5517, 0, 5, 0.00322125 +5518, 0, 5, 0.00322125 +5519, 0, 5, 0.00322125 +5520, 0, 5, 0.00322125 +5521, 0, 5, 0.00322125 +5522, 0, 5, 0.00322125 +5523, 0, 5, 0.00322125 +5524, 0, 5, 0.00322125 +5525, 0, 5, 0.00322125 +5526, 0, 5, 0.00322125 +5527, 0, 5, 0.00322125 +5528, 0, 5, 0.00322125 +5529, 0, 5, 0.00322125 +5530, 0, 5, 0.00322125 +5531, 0, 5, 0.00322125 +5532, 0, 5, 0.00322125 +5533, 0, 5, 0.00322125 +5534, 0, 5, 0.00322125 +5535, 0, 5, 0.00322125 +5536, 0, 5, 0.00322125 +5537, 0, 5, 0.00322125 +5538, 0, 5, 0.00322125 +5539, 0, 5, 0.00322125 +5540, 0, 5, 0.00322125 +5541, 0, 5, 0.00322125 +5542, 0, 5, 0.00322125 +5543, 0, 5, 0.00322125 +5544, 0, 5, 0.00322125 +5545, 0, 5, 0.00322125 +5546, 0, 5, 0.00322125 +5547, 0, 5, 0.00322125 +5548, 0, 5, 0.00322125 +5549, 0, 5, 0.00322125 +5550, 0, 5, 0.00322125 +5551, 0, 5, 0.00322125 +5552, 0, 5, 0.00322125 +5553, 0, 5, 0.00322125 +5554, 0, 5, 0.00322125 +5555, 0, 5, 0.00322125 +5556, 0, 5, 0.00322125 +5557, 0, 5, 0.00322125 +5558, 0, 5, 0.00322125 +5559, 0, 5, 0.00322125 +5560, 0, 5, 0.00322125 +5561, 0, 5, 0.00322125 +5562, 0, 5, 0.00322125 +5563, 0, 5, 0.00322125 +5564, 0, 5, 0.00322125 +5565, 0, 5, 0.00322125 +5566, 0, 5, 0.00322125 +5567, 0, 5, 0.00322125 +5568, 0, 5, 0.00322125 +5569, 0, 5, 0.00322125 +5570, 0, 5, 0.00322125 +5571, 0, 5, 0.00322125 +5572, 0, 5, 0.00322125 +5573, 0, 5, 0.00322125 +5574, 0, 5, 0.00322125 +5575, 0, 5, 0.00322125 +5576, 0, 5, 0.00322125 +5577, 0, 5, 0.00322125 +5578, 0, 5, 0.00322125 +5579, 0, 5, 0.00322125 +5580, 0, 5, 0.00322125 +5581, 0, 5, 0.00322125 +5582, 0, 5, 0.00322125 +5583, 0, 5, 0.00322125 +5584, 0, 5, 0.00322125 +5585, 0, 5, 0.00322125 +5586, 0, 5, 0.00322125 +5587, 0, 5, 0.00322125 +5588, 0, 5, 0.00322125 +5589, 0, 5, 0.00322125 +5590, 0, 5, 0.00322125 +5591, 0, 5, 0.00322125 +5592, 0, 5, 0.00322125 +5593, 0, 5, 0.00322125 +5594, 0, 5, 0.00322125 +5595, 0, 5, 0.00322125 +5596, 0, 5, 0.00322125 +5597, 0, 5, 0.00322125 +5598, 0, 5, 0.00322125 +5599, 0, 5, 0.00322125 +5600, 5, 0, 0.00322125 +5601, 5, 0, 0.00322125 +5602, 5, 0, 0.00322125 +5603, 5, 0, 0.00322125 +5604, 5, 0, 0.00322125 +5605, 5, 0, 0.00322125 +5606, 5, 0, 0.00322125 +5607, 5, 0, 0.00322125 +5608, 5, 0, 0.00322125 +5609, 5, 0, 0.00322125 +5610, 5, 0, 0.00322125 +5611, 5, 0, 0.00322125 +5612, 5, 0, 0.00322125 +5613, 5, 0, 0.00322125 +5614, 5, 0, 0.00322125 +5615, 5, 0, 0.00322125 +5616, 5, 0, 0.00322125 +5617, 5, 0, 0.00322125 +5618, 5, 0, 0.00322125 +5619, 5, 0, 0.00322125 +5620, 5, 0, 0.00322125 +5621, 5, 0, 0.00322125 +5622, 5, 0, 0.00322125 +5623, 5, 0, 0.0031559 +5624, 5, 0, 0.00322125 +5625, 5, 0, 0.00322125 +5626, 5, 0, 0.00322125 +5627, 5, 0, 0.00322125 +5628, 5, 0, 0.00322125 +5629, 5, 0, 0.00322125 +5630, 5, 0, 0.00322125 +5631, 5, 0, 0.00322125 +5632, 5, 0, 0.00322125 +5633, 5, 0, 0.00322125 +5634, 5, 0, 0.00322125 +5635, 5, 0, 0.00322125 +5636, 5, 0, 0.00322125 +5637, 5, 0, 0.00322125 +5638, 5, 0, 0.00322125 +5639, 5, 0, 0.00322125 +5640, 5, 0, 0.00322125 +5641, 5, 0, 0.00322125 +5642, 5, 0, 0.00322125 +5643, 5, 0, 0.00322125 +5644, 5, 0, 0.00322125 +5645, 5, 0, 0.00322125 +5646, 5, 0, 0.00322125 +5647, 5, 0, 0.00322125 +5648, 5, 0, 0.00322125 +5649, 5, 0, 0.00322125 +5650, 5, 0, 0.00322125 +5651, 5, 0, 0.00322125 +5652, 5, 0, 0.00322125 +5653, 5, 0, 0.00322125 +5654, 5, 0, 0.00322125 +5655, 5, 0, 0.00322125 +5656, 5, 0, 0.00322125 +5657, 5, 0, 0.00322125 +5658, 5, 0, 0.00322125 +5659, 5, 0, 0.00322125 +5660, 5, 0, 0.00322125 +5661, 5, 0, 0.00322125 +5662, 5, 0, 0.00322125 +5663, 5, 0, 0.00322125 +5664, 5, 0, 0.00322125 +5665, 5, 0, 0.00322125 +5666, 5, 0, 0.00322125 +5667, 5, 0, 0.00322125 +5668, 5, 0, 0.00322125 +5669, 5, 0, 0.00322125 +5670, 5, 0, 0.00322125 +5671, 5, 0, 0.00322125 +5672, 5, 0, 0.00322125 +5673, 5, 0, 0.00322125 +5674, 5, 0, 0.00322125 +5675, 5, 0, 0.00322125 +5676, 5, 0, 0.00322125 +5677, 5, 0, 0.00322125 +5678, 5, 0, 0.00322125 +5679, 5, 0, 0.00322125 +5680, 5, 0, 0.00322125 +5681, 5, 0, 0.00322125 +5682, 5, 0, 0.00322125 +5683, 5, 0, 0.00322125 +5684, 5, 0, 0.00322125 +5685, 5, 0, 0.00322125 +5686, 5, 0, 0.00322125 +5687, 5, 0, 0.00322125 +5688, 5, 0, 0.00322125 +5689, 5, 0, 0.00322125 +5690, 5, 0, 0.00322125 +5691, 5, 0, 0.00322125 +5692, 5, 0, 0.00322125 +5693, 5, 0, 0.00322125 +5694, 5, 0, 0.00322125 +5695, 5, 0, 0.00322125 +5696, 5, 0, 0.00322125 +5697, 5, 0, 0.00322125 +5698, 5, 0, 0.00322125 +5699, 5, 0, 0.00322125 +5700, 5, 0, 0.00322125 +5701, 5, 0, 0.00322125 +5702, 5, 0, 0.00322125 +5703, 5, 0, 0.00322125 +5704, 5, 0, 0.00322125 +5705, 5, 0, 0.00322125 +5706, 5, 0, 0.00322125 +5707, 5, 0, 0.00322125 +5708, 5, 0, 0.00322125 +5709, 5, 0, 0.00322125 +5710, 5, 0, 0.00322125 +5711, 5, 0, 0.00322125 +5712, 5, 0, 0.00322125 +5713, 5, 0, 0.00322125 +5714, 5, 0, 0.00322125 +5715, 5, 0, 0.00322125 +5716, 5, 0, 0.00322125 +5717, 5, 0, 0.00322125 +5718, 5, 0, 0.00322125 +5719, 5, 0, 0.00322125 +5720, 5, 0, 0.00322125 +5721, 5, 0, 0.00322125 +5722, 5, 0, 0.00322125 +5723, 5, 0, 0.00322125 +5724, 5, 0, 0.00322125 +5725, 5, 0, 0.00322125 +5726, 5, 0, 0.00322125 +5727, 5, 0, 0.00322125 +5728, 5, 0, 0.00322125 +5729, 5, 0, 0.00322125 +5730, 5, 0, 0.00322125 +5731, 5, 0, 0.00322125 +5732, 5, 0, 0.00322125 +5733, 5, 0, 0.00322125 +5734, 5, 0, 0.00322125 +5735, 5, 0, 0.00322125 +5736, 5, 0, 0.00322125 +5737, 5, 0, 0.00322125 +5738, 5, 0, 0.00322125 +5739, 5, 0, 0.00322125 +5740, 5, 0, 0.00322125 +5741, 5, 0, 0.00322125 +5742, 5, 0, 0.00322125 +5743, 5, 0, 0.00322125 +5744, 5, 0, 0.00322125 +5745, 5, 0, 0.00322125 +5746, 5, 0, 0.00322125 +5747, 5, 0, 0.00322125 +5748, 5, 0, 0.00322125 +5749, 5, 0, 0.00322125 +5750, 5, 0, 0.00322125 +5751, 5, 0, 0.00322125 +5752, 5, 0, 0.00322125 +5753, 5, 0, 0.00322125 +5754, 5, 0, 0.00322125 +5755, 5, 0, 0.00322125 +5756, 5, 0, 0.00322125 +5757, 5, 0, 0.00322125 +5758, 5, 0, 0.00322125 +5759, 5, 0, 0.00322125 +5760, 5, 0, 0.00322125 +5761, 5, 0, 0.00322125 +5762, 5, 0, 0.00322125 +5763, 5, 0, 0.00322125 +5764, 5, 0, 0.00322125 +5765, 5, 0, 0.00322125 +5766, 5, 0, 0.00322125 +5767, 5, 0, 0.00322125 +5768, 5, 0, 0.00322125 +5769, 5, 0, 0.00322125 +5770, 5, 0, 0.00322125 +5771, 5, 0, 0.00322125 +5772, 5, 0, 0.00322125 +5773, 5, 0, 0.00322125 +5774, 5, 0, 0.00322125 +5775, 5, 0, 0.00322125 +5776, 5, 0, 0.00322125 +5777, 5, 0, 0.00322125 +5778, 5, 0, 0.00322125 +5779, 5, 0, 0.00322125 +5780, 5, 0, 0.00322125 +5781, 5, 0, 0.00322125 +5782, 5, 0, 0.00322125 +5783, 5, 0, 0.00322125 +5784, 5, 0, 0.00322125 +5785, 5, 0, 0.00322125 +5786, 5, 0, 0.00322125 +5787, 5, 0, 0.00322125 +5788, 5, 0, 0.00322125 +5789, 5, 0, 0.00322125 +5790, 5, 0, 0.00322125 +5791, 5, 0, 0.00322125 +5792, 5, 0, 0.00322125 +5793, 5, 0, 0.00322125 +5794, 5, 0, 0.00322125 +5795, 5, 0, 0.00322125 +5796, 5, 0, 0.00322125 +5797, 5, 0, 0.00322125 +5798, 5, 0, 0.00322125 +5799, 5, 0, 0.00322125 +5800, 5, 0, 0.00322125 +5801, 5, 0, 0.00322125 +5802, 5, 0, 0.00322125 +5803, 5, 0, 0.00322125 +5804, 5, 0, 0.00322125 +5805, 5, 0, 0.00322125 +5806, 5, 0, 0.00322125 +5807, 5, 0, 0.00322125 +5808, 5, 0, 0.00322125 +5809, 5, 0, 0.00322125 +5810, 5, 0, 0.00322125 +5811, 5, 0, 0.00322125 +5812, 5, 0, 0.00322125 +5813, 5, 0, 0.00322125 +5814, 5, 0, 0.00322125 +5815, 5, 0, 0.00322125 +5816, 5, 0, 0.00322125 +5817, 5, 0, 0.00322125 +5818, 5, 0, 0.00322125 +5819, 5, 0, 0.00322125 +5820, 5, 0, 0.00322125 +5821, 5, 0, 0.00322125 +5822, 5, 0, 0.00322125 +5823, 5, 0, 0.00322125 +5824, 5, 0, 0.00322125 +5825, 5, 0, 0.00322125 +5826, 5, 0, 0.00322125 +5827, 5, 0, 0.00322125 +5828, 5, 0, 0.00322125 +5829, 5, 0, 0.00322125 +5830, 5, 0, 0.00322125 +5831, 5, 0, 0.00322125 +5832, 5, 0, 0.00322125 +5833, 5, 0, 0.00322125 +5834, 5, 0, 0.00322125 +5835, 5, 0, 0.00322125 +5836, 5, 0, 0.00322125 +5837, 5, 0, 0.00322125 +5838, 5, 0, 0.00322125 +5839, 5, 0, 0.00322125 +5840, 5, 0, 0.00322125 +5841, 5, 0, 0.00322125 +5842, 5, 0, 0.00322125 +5843, 5, 0, 0.00322125 +5844, 5, 0, 0.00322125 +5845, 5, 0, 0.00322125 +5846, 5, 0, 0.00322125 +5847, 5, 0, 0.00322125 +5848, 5, 0, 0.00322125 +5849, 5, 0, 0.00322125 +5850, 5, 0, 0.00322125 +5851, 5, 0, 0.00322125 +5852, 5, 0, 0.00322125 +5853, 5, 0, 0.00322125 +5854, 5, 0, 0.00322125 +5855, 5, 0, 0.00322125 +5856, 5, 0, 0.00322125 +5857, 5, 0, 0.00322125 +5858, 5, 0, 0.00322125 +5859, 5, 0, 0.00322125 +5860, 5, 0, 0.00322125 +5861, 5, 0, 0.00322125 +5862, 5, 0, 0.00322125 +5863, 5, 0, 0.00322125 +5864, 5, 0, 0.00322125 +5865, 5, 0, 0.00322125 +5866, 5, 0, 0.00322125 +5867, 5, 0, 0.00322125 +5868, 5, 0, 0.00322125 +5869, 5, 0, 0.00322125 +5870, 5, 0, 0.00322125 +5871, 5, 0, 0.00322125 +5872, 5, 0, 0.00322125 +5873, 5, 0, 0.00322125 +5874, 5, 0, 0.00322125 +5875, 5, 0, 0.00322125 +5876, 5, 0, 0.00322125 +5877, 5, 0, 0.00322125 +5878, 5, 0, 0.00322125 +5879, 5, 0, 0.00322125 +5880, 5, 0, 0.00322125 +5881, 5, 0, 0.00322125 +5882, 5, 0, 0.00322125 +5883, 5, 0, 0.00322125 +5884, 5, 0, 0.00322125 +5885, 5, 0, 0.00322125 +5886, 5, 0, 0.00322125 +5887, 5, 0, 0.00322125 +5888, 5, 0, 0.00322125 +5889, 5, 0, 0.00322125 +5890, 5, 0, 0.00322125 +5891, 5, 0, 0.00322125 +5892, 5, 0, 0.00322125 +5893, 5, 0, 0.00322125 +5894, 5, 0, 0.00322125 +5895, 5, 0, 0.00322125 +5896, 5, 0, 0.00322125 +5897, 5, 0, 0.00322125 +5898, 5, 0, 0.00322125 +5899, 5, 0, 0.00322125 +5900, 5, 0, 0.00322125 +5901, 5, 0, 0.00322125 +5902, 5, 0, 0.00322125 +5903, 5, 0, 0.00322125 +5904, 5, 0, 0.00322125 +5905, 5, 0, 0.00322125 +5906, 5, 0, 0.00322125 +5907, 5, 0, 0.00322125 +5908, 5, 0, 0.00322125 +5909, 5, 0, 0.00322125 +5910, 5, 0, 0.00322125 +5911, 5, 0, 0.00322125 +5912, 5, 0, 0.00322125 +5913, 5, 0, 0.00322125 +5914, 5, 0, 0.00322125 +5915, 5, 0, 0.00322125 +5916, 5, 0, 0.00322125 +5917, 5, 0, 0.00322125 +5918, 5, 0, 0.00322125 +5919, 5, 0, 0.00322125 +5920, 5, 0, 0.00322125 +5921, 5, 0, 0.00322125 +5922, 5, 0, 0.00322125 +5923, 5, 0, 0.00322125 +5924, 5, 0, 0.00322125 +5925, 5, 0, 0.00322125 +5926, 5, 0, 0.00322125 +5927, 5, 0, 0.00322125 +5928, 5, 0, 0.00322125 +5929, 5, 0, 0.00322125 +5930, 5, 0, 0.00322125 +5931, 5, 0, 0.00322125 +5932, 5, 0, 0.00322125 +5933, 5, 0, 0.00322125 +5934, 5, 0, 0.00322125 +5935, 5, 0, 0.00322125 +5936, 5, 0, 0.00322125 +5937, 5, 0, 0.00322125 +5938, 5, 0, 0.00322125 +5939, 5, 0, 0.00322125 +5940, 5, 0, 0.00322125 +5941, 5, 0, 0.00322125 +5942, 5, 0, 0.00322125 +5943, 5, 0, 0.00322125 +5944, 5, 0, 0.00322125 +5945, 5, 0, 0.00322125 +5946, 5, 0, 0.00322125 +5947, 5, 0, 0.00322125 +5948, 5, 0, 0.00322125 +5949, 5, 0, 0.00322125 +5950, 5, 0, 0.00322125 +5951, 5, 0, 0.00322125 +5952, 5, 0, 0.00322125 +5953, 5, 0, 0.00322125 +5954, 5, 0, 0.00322125 +5955, 5, 0, 0.00322125 +5956, 5, 0, 0.00322125 +5957, 5, 0, 0.00322125 +5958, 5, 0, 0.00322125 +5959, 5, 0, 0.00322125 +5960, 5, 0, 0.00322125 +5961, 5, 0, 0.00322125 +5962, 5, 0, 0.00322125 +5963, 5, 0, 0.00322125 +5964, 5, 0, 0.00322125 +5965, 5, 0, 0.00322125 +5966, 5, 0, 0.00322125 +5967, 5, 0, 0.00322125 +5968, 5, 0, 0.00322125 +5969, 5, 0, 0.00322125 +5970, 5, 0, 0.00322125 +5971, 5, 0, 0.00322125 +5972, 5, 0, 0.00322125 +5973, 5, 0, 0.00322125 +5974, 5, 0, 0.00322125 +5975, 5, 0, 0.00322125 +5976, 5, 0, 0.00322125 +5977, 5, 0, 0.00322125 +5978, 5, 0, 0.00322125 +5979, 5, 0, 0.00322125 +5980, 5, 0, 0.00322125 +5981, 5, 0, 0.00322125 +5982, 5, 0, 0.00322125 +5983, 5, 0, 0.00322125 +5984, 5, 0, 0.00322125 +5985, 5, 0, 0.00322125 +5986, 5, 0, 0.00322125 +5987, 5, 0, 0.00322125 +5988, 5, 0, 0.00322125 +5989, 5, 0, 0.00322125 +5990, 5, 0, 0.00322125 +5991, 5, 0, 0.00322125 +5992, 5, 0, 0.00322125 +5993, 5, 0, 0.00322125 +5994, 5, 0, 0.00322125 +5995, 5, 0, 0.00322125 +5996, 5, 0, 0.00322125 +5997, 5, 0, 0.00322125 +5998, 5, 0, 0.00322125 +5999, 5, 0, 0.00322125 +6000, 5, 5, 0.00322125 +6001, 5, 5, 0.00322125 +6002, 5, 5, 0.00322125 +6003, 5, 5, 0.0031559 +6004, 5, 5, 0.00322125 +6005, 5, 5, 0.0031559 +6006, 5, 5, 0.0031559 +6007, 5, 5, 0.0031559 +6008, 5, 5, 0.0031559 +6009, 5, 5, 0.00322125 +6010, 5, 5, 5 +6011, 5, 5, 5 +6012, 5, 5, 5 +6013, 5, 5, 5 +6014, 5, 5, 5 +6015, 5, 5, 5 +6016, 5, 5, 5 +6017, 5, 5, 5 +6018, 5, 5, 5 +6019, 5, 5, 5 +6020, 5, 5, 5 +6021, 5, 5, 5 +6022, 5, 5, 5 +6023, 5, 5, 5 +6024, 5, 5, 5 +6025, 5, 5, 5 +6026, 5, 5, 5 +6027, 5, 5, 5 +6028, 5, 5, 5 +6029, 5, 5, 5 +6030, 5, 5, 5 +6031, 5, 5, 5 +6032, 5, 5, 5 +6033, 5, 5, 5 +6034, 5, 5, 5 +6035, 5, 5, 5 +6036, 5, 5, 5 +6037, 5, 5, 5 +6038, 5, 5, 5 +6039, 5, 5, 5 +6040, 5, 5, 5 +6041, 5, 5, 5 +6042, 5, 5, 5 +6043, 5, 5, 5 +6044, 5, 5, 5 +6045, 5, 5, 5 +6046, 5, 5, 5 +6047, 5, 5, 5 +6048, 5, 5, 5 +6049, 5, 5, 5 +6050, 5, 5, 5 +6051, 5, 5, 5 +6052, 5, 5, 5 +6053, 5, 5, 5 +6054, 5, 5, 5 +6055, 5, 5, 5 +6056, 5, 5, 5 +6057, 5, 5, 5 +6058, 5, 5, 5 +6059, 5, 5, 5 +6060, 5, 5, 5 +6061, 5, 5, 5 +6062, 5, 5, 5 +6063, 5, 5, 5 +6064, 5, 5, 5 +6065, 5, 5, 5 +6066, 5, 5, 5 +6067, 5, 5, 5 +6068, 5, 5, 5 +6069, 5, 5, 5 +6070, 5, 5, 5 +6071, 5, 5, 5 +6072, 5, 5, 5 +6073, 5, 5, 5 +6074, 5, 5, 5 +6075, 5, 5, 5 +6076, 5, 5, 5 +6077, 5, 5, 5 +6078, 5, 5, 5 +6079, 5, 5, 5 +6080, 5, 5, 5 +6081, 5, 5, 5 +6082, 5, 5, 5 +6083, 5, 5, 5 +6084, 5, 5, 5 +6085, 5, 5, 5 +6086, 5, 5, 5 +6087, 5, 5, 5 +6088, 5, 5, 5 +6089, 5, 5, 5 +6090, 5, 5, 5 +6091, 5, 5, 5 +6092, 5, 5, 5 +6093, 5, 5, 5 +6094, 5, 5, 5 +6095, 5, 5, 5 +6096, 5, 5, 5 +6097, 5, 5, 5 +6098, 5, 5, 5 +6099, 5, 5, 5 +6100, 5, 5, 5 +6101, 5, 5, 5 +6102, 5, 5, 5 +6103, 5, 5, 5 +6104, 5, 5, 5 +6105, 5, 5, 5 +6106, 5, 5, 5 +6107, 5, 5, 5 +6108, 5, 5, 5 +6109, 5, 5, 5 +6110, 5, 5, 5 +6111, 5, 5, 5 +6112, 5, 5, 5 +6113, 5, 5, 5 +6114, 5, 5, 5 +6115, 5, 5, 5 +6116, 5, 5, 5 +6117, 5, 5, 5 +6118, 5, 5, 5 +6119, 5, 5, 5 +6120, 5, 5, 5 +6121, 5, 5, 5 +6122, 5, 5, 5 +6123, 5, 5, 5 +6124, 5, 5, 5 +6125, 5, 5, 5 +6126, 5, 5, 5 +6127, 5, 5, 5 +6128, 5, 5, 5 +6129, 5, 5, 5 +6130, 5, 5, 5 +6131, 5, 5, 5 +6132, 5, 5, 5 +6133, 5, 5, 5 +6134, 5, 5, 5 +6135, 5, 5, 5 +6136, 5, 5, 5 +6137, 5, 5, 5 +6138, 5, 5, 5 +6139, 5, 5, 5 +6140, 5, 5, 5 +6141, 5, 5, 5 +6142, 5, 5, 5 +6143, 5, 5, 5 +6144, 5, 5, 5 +6145, 5, 5, 5 +6146, 5, 5, 5 +6147, 5, 5, 5 +6148, 5, 5, 5 +6149, 5, 5, 5 +6150, 5, 5, 5 +6151, 5, 5, 5 +6152, 5, 5, 5 +6153, 5, 5, 5 +6154, 5, 5, 5 +6155, 5, 5, 5 +6156, 5, 5, 5 +6157, 5, 5, 5 +6158, 5, 5, 5 +6159, 5, 5, 5 +6160, 5, 5, 5 +6161, 5, 5, 5 +6162, 5, 5, 5 +6163, 5, 5, 5 +6164, 5, 5, 5 +6165, 5, 5, 5 +6166, 5, 5, 5 +6167, 5, 5, 5 +6168, 5, 5, 5 +6169, 5, 5, 5 +6170, 5, 5, 5 +6171, 5, 5, 5 +6172, 5, 5, 5 +6173, 5, 5, 5 +6174, 5, 5, 5 +6175, 5, 5, 5 +6176, 5, 5, 5 +6177, 5, 5, 5 +6178, 5, 5, 5 +6179, 5, 5, 5 +6180, 5, 5, 5 +6181, 5, 5, 5 +6182, 5, 5, 5 +6183, 5, 5, 5 +6184, 5, 5, 5 +6185, 5, 5, 5 +6186, 5, 5, 5 +6187, 5, 5, 5 +6188, 5, 5, 5 +6189, 5, 5, 5 +6190, 5, 5, 5 +6191, 5, 5, 5 +6192, 5, 5, 5 +6193, 5, 5, 5 +6194, 5, 5, 5 +6195, 5, 5, 5 +6196, 5, 5, 5 +6197, 5, 5, 5 +6198, 5, 5, 5 +6199, 5, 5, 5 +6200, 5, 5, 5 +6201, 5, 5, 5 +6202, 5, 5, 5 +6203, 5, 5, 5 +6204, 5, 5, 5 +6205, 5, 5, 5 +6206, 5, 5, 5 +6207, 5, 5, 5 +6208, 5, 5, 5 +6209, 5, 5, 5 +6210, 5, 5, 5 +6211, 5, 5, 5 +6212, 5, 5, 5 +6213, 5, 5, 5 +6214, 5, 5, 5 +6215, 5, 5, 5 +6216, 5, 5, 5 +6217, 5, 5, 5 +6218, 5, 5, 5 +6219, 5, 5, 5 +6220, 5, 5, 5 +6221, 5, 5, 5 +6222, 5, 5, 5 +6223, 5, 5, 5 +6224, 5, 5, 5 +6225, 5, 5, 5 +6226, 5, 5, 5 +6227, 5, 5, 5 +6228, 5, 5, 5 +6229, 5, 5, 5 +6230, 5, 5, 5 +6231, 5, 5, 5 +6232, 5, 5, 5 +6233, 5, 5, 5 +6234, 5, 5, 5 +6235, 5, 5, 5 +6236, 5, 5, 5 +6237, 5, 5, 5 +6238, 5, 5, 5 +6239, 5, 5, 5 +6240, 5, 5, 5 +6241, 5, 5, 5 +6242, 5, 5, 5 +6243, 5, 5, 5 +6244, 5, 5, 5 +6245, 5, 5, 5 +6246, 5, 5, 5 +6247, 5, 5, 5 +6248, 5, 5, 5 +6249, 5, 5, 5 +6250, 5, 5, 5 +6251, 5, 5, 5 +6252, 5, 5, 5 +6253, 5, 5, 5 +6254, 5, 5, 5 +6255, 5, 5, 5 +6256, 5, 5, 5 +6257, 5, 5, 5 +6258, 5, 5, 5 +6259, 5, 5, 5 +6260, 5, 5, 5 +6261, 5, 5, 5 +6262, 5, 5, 5 +6263, 5, 5, 5 +6264, 5, 5, 5 +6265, 5, 5, 5 +6266, 5, 5, 5 +6267, 5, 5, 5 +6268, 5, 5, 5 +6269, 5, 5, 5 +6270, 5, 5, 5 +6271, 5, 5, 5 +6272, 5, 5, 5 +6273, 5, 5, 5 +6274, 5, 5, 5 +6275, 5, 5, 5 +6276, 5, 5, 5 +6277, 5, 5, 5 +6278, 5, 5, 5 +6279, 5, 5, 5 +6280, 5, 5, 5 +6281, 5, 5, 5 +6282, 5, 5, 5 +6283, 5, 5, 5 +6284, 5, 5, 5 +6285, 5, 5, 5 +6286, 5, 5, 5 +6287, 5, 5, 5 +6288, 5, 5, 5 +6289, 5, 5, 5 +6290, 5, 5, 5 +6291, 5, 5, 5 +6292, 5, 5, 5 +6293, 5, 5, 5 +6294, 5, 5, 5 +6295, 5, 5, 5 +6296, 5, 5, 5 +6297, 5, 5, 5 +6298, 5, 5, 5 +6299, 5, 5, 5 +6300, 5, 5, 5 +6301, 5, 5, 5 +6302, 5, 5, 5 +6303, 5, 5, 5 +6304, 5, 5, 5 +6305, 5, 5, 5 +6306, 5, 5, 5 +6307, 5, 5, 5 +6308, 5, 5, 5 +6309, 5, 5, 5 +6310, 5, 5, 5 +6311, 5, 5, 5 +6312, 5, 5, 5 +6313, 5, 5, 5 +6314, 5, 5, 5 +6315, 5, 5, 5 +6316, 5, 5, 5 +6317, 5, 5, 5 +6318, 5, 5, 5 +6319, 5, 5, 5 +6320, 5, 5, 5 +6321, 5, 5, 5 +6322, 5, 5, 5 +6323, 5, 5, 5 +6324, 5, 5, 5 +6325, 5, 5, 5 +6326, 5, 5, 5 +6327, 5, 5, 5 +6328, 5, 5, 5 +6329, 5, 5, 5 +6330, 5, 5, 5 +6331, 5, 5, 5 +6332, 5, 5, 5 +6333, 5, 5, 5 +6334, 5, 5, 5 +6335, 5, 5, 5 +6336, 5, 5, 5 +6337, 5, 5, 5 +6338, 5, 5, 5 +6339, 5, 5, 5 +6340, 5, 5, 5 +6341, 5, 5, 5 +6342, 5, 5, 5 +6343, 5, 5, 5 +6344, 5, 5, 5 +6345, 5, 5, 5 +6346, 5, 5, 5 +6347, 5, 5, 5 +6348, 5, 5, 5 +6349, 5, 5, 5 +6350, 5, 5, 5 +6351, 5, 5, 5 +6352, 5, 5, 5 +6353, 5, 5, 5 +6354, 5, 5, 5 +6355, 5, 5, 5 +6356, 5, 5, 5 +6357, 5, 5, 5 +6358, 5, 5, 5 +6359, 5, 5, 5 +6360, 5, 5, 5 +6361, 5, 5, 5 +6362, 5, 5, 5 +6363, 5, 5, 5 +6364, 5, 5, 5 +6365, 5, 5, 5 +6366, 5, 5, 5 +6367, 5, 5, 5 +6368, 5, 5, 5 +6369, 5, 5, 5 +6370, 5, 5, 5 +6371, 5, 5, 5 +6372, 5, 5, 5 +6373, 5, 5, 5 +6374, 5, 5, 5 +6375, 5, 5, 5 +6376, 5, 5, 5 +6377, 5, 5, 5 +6378, 5, 5, 5 +6379, 5, 5, 5 +6380, 5, 5, 5 +6381, 5, 5, 5 +6382, 5, 5, 5 +6383, 5, 5, 5 +6384, 5, 5, 5 +6385, 5, 5, 5 +6386, 5, 5, 5 +6387, 5, 5, 5 +6388, 5, 5, 5 +6389, 5, 5, 5 +6390, 5, 5, 5 +6391, 5, 5, 5 +6392, 5, 5, 5 +6393, 5, 5, 5 +6394, 5, 5, 5 +6395, 5, 5, 5 +6396, 5, 5, 5 +6397, 5, 5, 5 +6398, 5, 5, 5 +6399, 5, 5, 5 -- 2.25.1