From e03efe7d14540f04326ee22017c854d7e7546854 Mon Sep 17 00:00:00 2001 From: pfaure Date: Wed, 12 May 2021 21:33:01 +0200 Subject: [PATCH] Changement sorties --- as.tab.c | 21 ++++------ as.tab.o | Bin 19112 -> 18936 bytes as.y | 5 +-- output.asm | 84 +++++++++++++++++++++++++++++++++++++ output.bin | 2 +- rondoudou_cross_assembleur | Bin 42240 -> 42296 bytes tables.c | 20 +++++++-- tables.o | Bin 13344 -> 13848 bytes 8 files changed, 112 insertions(+), 20 deletions(-) diff --git a/as.tab.c b/as.tab.c index bef2ea1..f5c4a00 100644 --- a/as.tab.c +++ b/as.tab.c @@ -456,7 +456,7 @@ static const yytype_uint8 yyrline[] = { 0, 24, 24, 25, 27, 34, 41, 48, 55, 62, 69, 78, 83, 89, 98, 101, 109, 115, 123, 128, - 135, 141, 146 + 135, 139, 144 }; #endif @@ -1441,33 +1441,31 @@ yyreduce: case 20: #line 135 "as.y" /* yacc.c:1646 */ {increment_time(); - print(); int added_instruction = flush_and_init(file); - print(); add_instruction(CALL, (yyvsp[-1].nombre), (yyvsp[0].nombre), 0); new_instruction(added_instruction + 1);} -#line 1450 "as.tab.c" /* yacc.c:1646 */ +#line 1448 "as.tab.c" /* yacc.c:1646 */ break; case 21: -#line 141 "as.y" /* yacc.c:1646 */ +#line 139 "as.y" /* yacc.c:1646 */ {increment_time(); int added_instruction = flush_and_init(file); add_instruction(RET, 0, 0, 0); new_instruction(added_instruction + 1);} -#line 1459 "as.tab.c" /* yacc.c:1646 */ +#line 1457 "as.tab.c" /* yacc.c:1646 */ break; case 22: -#line 146 "as.y" /* yacc.c:1646 */ +#line 144 "as.y" /* yacc.c:1646 */ {increment_time(); add_instruction(STOP, (yyvsp[0].nombre), 0, 0); new_instruction(1);} -#line 1467 "as.tab.c" /* yacc.c:1646 */ +#line 1465 "as.tab.c" /* yacc.c:1646 */ break; -#line 1471 "as.tab.c" /* yacc.c:1646 */ +#line 1469 "as.tab.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -1695,16 +1693,15 @@ yyreturn: #endif return yyresult; } -#line 150 "as.y" /* yacc.c:1906 */ +#line 148 "as.y" /* yacc.c:1906 */ int main(void) { file = fopen("output.asm", "w"); file2 = fopen("output.bin", "w"); - file = stdout; init(); yyparse(); write_asm(file); - write_code_machine(file2); + write_code_machine_compact(file2); return 0; } diff --git a/as.tab.o b/as.tab.o index a3caabd7a4a842919669463f26df44f1de947537..8456aabaea27116dc64ba9aba2a72b17de371450 100644 GIT binary patch delta 1765 zcmZ`(ZERCz6z;igM_brvw{`bkR>tPmZJH={WbHm!yN-R(83_8LAyLDc5s(17CJTdT z)EeU_i5*WcDkg5mAIJ~Pa)XkHW*?ZCXoMNTiH3k5abR#xf7oOTdfwZ6@!Di3d7qwh zo^zi2o^#WC@;K!{*+wbXGjWf@L3^;#F+eUY>)229GM1eYXSdI0%i@N=PJ5&%Em04? zay>%JjPID&0N9ZZz-iUNa)SR-|XkibtetPTiemH-577sx zDcytxUx@nI+fBb9TiT#al`2HXaiwfOoknl@$I^x0@nm@=s{AfGg$Doo^eJZjm!$dM zFs`VWs<>Bj-ozgjha}exJSNxjq(|jrG=vSxHhK{Ul_pxinDRQh)mq^Y3)NpFxEcelU4u^?97+uiYr)1P zubM2?n`{#QRPtH=CvStOX_YC94C5FUTV&qhM60ZRxI+DmUjL(B|EFGmTh!Bf#M@+Q zfRFKhq#4^m?J{*?yiHaUW&b_h$?j!)K2Bnm**yj9W`iBp6^`ooCPJ+CjjpU9)h??o z<^R`wSd7Ltj8SG!6tGVj>?EdG=Q}Ji{;cDoKy|60-rP?R4{ny}K7pZT@h;hfl$avr z5RuImGx8#A;$!x1#{~E86sSIK>8-QWjNm%6&so@7W^=~d8HcY!PF%CF;<@LHS#kw= zbH;E57qOZ5TsG>rA>ARXM=b1JTxH(&491!LWCiwf%rbky!it;hFg9=*6qQ3i8LUWF zS(N`O=rZp^NJV8*1*-KjH?WD`4SdX7?ZPOt`z)+=!$&a13eW2}Do{OPRNk50*yK6X z#N@GNn{c+>0&pg6H)hAwJv7c33q?QoeSop Tt4Q=mJcoPo(bG0~`l|i~3DDL! delta 1920 zcmZ`(eN0U<9YYE=GRItqOsCZFk8VZ@o0#bw_{Tyr zNq}F5N}`Ua37X&_bqUFIVOunFS#(Xnp~DzrqUfRqLzG3Lp8NVSdJF50O2?xvn{5bRWqTs6iG3P%;LGIW zbT4+NMCnQ7r+%bOC8Hp<0*Pt88pX`BZ0=1myj|(N+PjH{nYF1`TXh)bMK+saW_QN@ zv;beG7qiYS_%@@RcJpqGBDk7asl8-3;%l9UwCft1TM=-3aKqWIwaRS;o_6h}ODJ%c z<9C;jo?xph?Uv1Eo8e_!w&8@kB-OOp5t(#*iTd$*)Y3N(Zeq}@V=`yEw(>I;b6(I^m$6S2k`FJ65qcbH-d5^ChqsJw;5F~4z2&3>Lcb?- zS(Y?v9k?WGwd(=W21g>VZ=QFQ*>l*{kl{R`HEv3@|KmwdO19;)Ymt|fBT`wo_B_LA z$lDy5$se$%7`Y7RB3vZUS+qbC=q?nfD&CWF-YXM1AH&7laJkrvsbVk9%1F8rSt`Cp zi9LtAo;z|FQzcu;7MU;k+sStrt`^jZXqC{Pb;k%2_@|85`oA$bX2iS);>eFNUL|0>tx>U#x?WHiE6hBo#N5WQ zR&QURpkCv!K3Vz{JQ)m diff --git a/as.y b/as.y index d938ea7..0cc9995 100644 --- a/as.y +++ b/as.y @@ -133,9 +133,7 @@ Instruction : tPRI tNB {increment_time(); Instruction : tCALL tNB tNB {increment_time(); - print(); int added_instruction = flush_and_init(file); - print(); add_instruction(CALL, $2, $3, 0); new_instruction(added_instruction + 1);}; Instruction : tRET {increment_time(); @@ -152,10 +150,9 @@ Instruction : tSTOP tNB {increment_time(); int main(void) { file = fopen("output.asm", "w"); file2 = fopen("output.bin", "w"); - file = stdout; init(); yyparse(); write_asm(file); - write_code_machine(file2); + write_code_machine_compact(file2); return 0; } diff --git a/output.asm b/output.asm index e69de29..4262c76 100644 --- a/output.asm +++ b/output.asm @@ -0,0 +1,84 @@ +JMP 48 +AFC 0 1 +LOAD 1 0 +CPY 2 1 +AFC 3 1 +MUL 0 3 0 +ADD 0 2 0 +LOADI 0 0 +PRI 0 +AFC 0 0 +CPY 2 1 +AFC 3 1 +MUL 0 3 0 +ADD 0 2 0 +AFC 2 14 +STOREI 0 2 +AFC 0 2 +CPY 1 0 +STORE 0 1 +STORE 1 0 +STORE 2 2 +STORE 3 3 +RET +AFC 0 0 +LOAD 1 0 +CPY 2 1 +AFC 3 1 +MUL 0 3 0 +ADD 0 2 0 +LOADI 0 0 +PRI 0 +AFC 0 1 +CPY 2 1 +AFC 3 1 +MUL 0 3 0 +ADD 0 2 0 +AFC 2 10 +STOREI 0 2 +CPY 0 1 +STORE 1 0 +STORE 2 2 +STORE 3 3 +CALL 1 1 +AFC 0 1 +CPY 1 0 +STORE 0 1 +STORE 1 0 +RET +AFC 0 0 +AFC 1 0 +STOREA 3 1 +AFC 1 1 +MUL 0 1 0 +LOAD 2 3 +ADD 0 2 0 +AFC 3 1 +STOREI 0 3 +AFC 2 1 +STORE 5 1 +AFC 1 0 +STOREA 4 1 +AFC 1 1 +MUL 2 1 2 +STORE 2 0 +LOAD 0 4 +ADD 2 0 2 +AFC 3 12 +STOREI 2 3 +STORE 6 1 +AFC 1 0 +STOREA 4 1 +STORE 3 2 +STORE 5 3 +CALL 23 4 +AFC 0 0 +AFC 1 0 +STOREA 5 1 +AFC 1 1 +MUL 0 1 0 +LOAD 2 5 +ADD 0 2 0 +LOADI 0 0 +PRI 0 +STOP 0 diff --git a/output.bin b/output.bin index a214a39..1d3fc57 100644 --- a/output.bin +++ b/output.bin @@ -1 +1 @@ -"00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "10101000000000000000000000000" & "10001000000000000000000000000" & "01100000000000000000000000000" & "00001000000000000001000000000" & "01010000000100000010100000000" & "00010000000000000000100000000" & "01001000000010000000100000000" & "01110000001010000000100000000" & "01001000000010000000000000000" & "01001000000000000000000000000" & "10011000101110000010000000000" & "01011000001010000001100000000" & "01011000000110000001000000000" & "01110000001000000000100000000" & "01001000000010000000000000000" & "01011000001100000000100000000" & "01101000000100000001100000000" & "01001000000110000110000000000" & "00001000000100000000000000010" & "01010000000000000010000000000" & "01011000000100000000000000000" & "00010000000100000000100000010" & "01001000000010000000100000000" & "01110000001000000000100000000" & "01001000000010000000000000000" & "01011000001010000000100000000" & "01001000000100000000100000000" & "01101000000000000001100000000" & "01001000000110000000100000000" & "00001000000000000001000000000" & "01010000000100000001100000000" & "00010000000000000000100000000" & "01001000000010000000100000000" & "01110000000110000000100000000" & "01001000000010000000000000000" & "01001000000000000000000000000" & "10100000000000000000000000000" & "01011000000010000000000000000" & "01011000000000000000100000000" & "01000000000010000000000000000" & "01001000000000000000100000000" & "10011000000010000000100000000" & "01011000000110000001100000000" & "01011000000100000001000000000" & "01011000000010000000000000000" & "01000000000000000000100000000" & "01101000000000000001000000000" & "01001000000100000101000000000" & "00001000000000000001000000000" & "00010000000000000001100000000" & "01001000000110000000100000000" & "01000000000100000000100000000" & "01001000000000000000100000000" & "10001000000000000000000000000" & "01100000000000000000000000000" & "00001000000000000001000000000" & "00010000000000000001100000000" & "01001000000110000000100000000" & "01000000000100000000100000000" & "01010000000010000000000000000" & "01001000000000000000000000000" & "10100000000000000000000000000" & "01011000000110000001100000000" & "01011000000100000001000000000" & "01011000000010000000000000000" & "01011000000000000000100000000" & "01000000000010000000000000000" & "01001000000000000001000000000" & "01101000000000000001000000000" & "01001000000100000111000000000" & "00001000000000000001000000000" & "00010000000000000001100000000" & "01001000000110000000100000000" & "01000000000100000000100000000" & "01001000000000000000000000000" & "10001000000000000000000000000" & "01100000000000000000000000000" & "00001000000000000001000000000" & "00010000000000000001100000000" & "01001000000110000000100000000" & "01000000000100000000100000000" & "01010000000010000000000000000" & "01001000000000000000100000000" & "01111001100000000000000000000" & \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101010000000000000000000000001000100000000000000000000000001100000000000000000000000000000010000000000000010000000000101000000010000001010000000000010000000000000000100000000010010000000100000001000000000111000000101000000010000000001001000000010000000000000000010010000000000000000000000001001100010111000001000000000001011000001010000001100000000010110000001100000010000000000111000000100000000010000000001001000000010000000000000000010110000011000000001000000000110100000010000000110000000001001000000110000110000000000000010000001000000000000000100101000000000000001000000000001011000000100000000000000000000100000001000000001000000100100100000001000000010000000001110000001000000000100000000010010000000100000000000000000101100000101000000010000000001001000000100000000100000000011010000000000000011000000000100100000011000000010000000000001000000000000001000000000010100000001000000011000000000001000000000000000010000000001001000000010000000100000000011100000001100000001000000000100100000001000000000000000001001000000000000000000000000101000000000000000000000000000101100000001000000000000000001011000000000000000100000000010000000000100000000000000000100100000000000000010000000010011000000010000000100000000010110000001100000011000000000101100000010000000100000000001011000000010000000000000000010000000000000000001000000000110100000000000000100000000001001000000100000101000000000000010000000000000010000000000001000000000000000110000000001001000000110000000100000000010000000001000000001000000000100100000000000000010000000010001000000000000000000000000011000000000000000000000000000000100000000000000100000000000010000000000000001100000000010010000001100000001000000000100000000010000000010000000001010000000010000000000000000010010000000000000000000000001010000000000000000000000000001011000000110000001100000000010110000001000000010000000000101100000001000000000000000001011000000000000000100000000010000000000100000000000000000100100000000000000100000000001101000000000000001000000000010010000001000001110000000000000100000000000000100000000000010000000000000001100000000010010000001100000001000000000100000000010000000010000000001001000000000000000000000000100010000000000000000000000000110000000000000000000000000000001000000000000001000000000000100000000000000011000000000100100000011000000010000000001000000000100000000100000000010100000000100000000000000000100100000000000000010000000001111001100000000000000000000 \ No newline at end of file diff --git a/rondoudou_cross_assembleur b/rondoudou_cross_assembleur index 1f084e39a9300934f3f166a93e7e9f6cf630a6c7..1bd0599c816b4350ff067ead05ce53a27748041a 100755 GIT binary patch delta 13942 zcmZ{K30zcF`~STcuHb@zG7gL^1MVxRtda=Hz^G_0xbL}ZnhTotPe()4@rt64mRoL_ zS(cWV+pCCVqE;@2mcEwgt2v0}TB%v{|DJp93^PN&;dA+(^DN)VGgn)Z|M&@FS2qD6tDq~<;7PGGnc*n@oPU68tD(Up2z#BnsY{z%cc@M`@e zQPOuKoi3)kHBb-~dCFv?kXM`&X;$Q4CK&}~ZPs(U9l_k{is-DRhghQ8vYy)QxyP8M zx&NYc_!TI5s+}6kicCst(tvjA+6TT3FPjC{-0!z~RH5r3#doE|22I54G`vBpn$OH^ zG~yPUX?25{;-6GQA0@5HAiKT+rRv+&jNt0cne?VUR~li0BDlV(j@o243r%e@CxcoB zPl*n#B?#7HbAC`B3lqaKArpP_mblRnRLtT9dpQqg`%Ba=w5fQJehrQgKPSJCMv~Zx z+J{6%j%@?4JTusHi$!ax?R=^rRCKQ?2;A{;GINxoQs}*qa7jv`V2fn(5K7e?;Hjh*&DK-L?fBSMCeV)X z#?r%PbT&LH?%QTaEG5tPFQj9x&07(WGiQ>jB9c&V#OSwpIU>r8r^tw~hW`(q$3?VY ztHc0QjCbn&JhgBKx|yu(Upg5G#_LE;nM;CIb>^uQ8k=j5X+cV_4*wCROb)rw+_%FGA++ z42Wgzi2qP*WTbJ7hwZsU*miT;KB9ogMpBb_+7M~%WN+-wJCWJmM$b5Jeg`(B^1b24 zs#WJ1ro@^z0k!C6-HD^4SfTcN}2lR7$=Nu~n^QM@Hnid^%s|PneiElFpu|Sdk8K$nHW6^~-P&DW3 zzC}i2nd`#9v5a23Yqu+TRjb%?#g0oiq1M1jRYw2bRb5M&EDNXEN)!_STK7B zkYdi+d*zN}z<8IBWAdwJ?{ns;tYvEgpFQ6Sb@n3GGX=82ZuJmCc50TS;{YH z=MbAs+kOl}Y2H8#0y|(T@(Fmekg# zEiqyT+R!XCWQomguS`SdpMu^0psk z`Z7}_`TB6MC~_>X9zr`v^6OOCys_o&0WeYeJq6==+$qk9xO)qe$;0St&b^nY$h%;f zSL~m+5ALP%JE&n8F?wrM`K(%{@?uSfrjk)K=M~SYi?Tl}Tjk~q6uE_q=63(Cs;U83 zMRQe77|a@}B3&H@CvJM-h+$S##`d;*dVvvL>CgCd&sFgIA8l#TDET_8SWV^r2Xx=4 za#Q)z0JCB$htQ_TOlCD*s1ysB%>MvVtC&wvcmj=Rsq3*M9_e<_TN;N2LB~{vFIqKGM5A5 zkR(VP2gIJJs0T#M$#2=LAwDOv$Vf3)iu{VF;i8y+WU31o)GKtRO~a0UD!<8=JMWs1(;Ob3FmEjQu-L|m zioAgV8#>c9%x=X+c1BX>;3HnJUwnnR!)o6)>^gz>yVA!sDvyfn-qR2$kMstEj^R*~?UlZXE;X z(DISk%4Fzn2i9L^U@LGkTA2>L0^>Pev{jUVv7piqOJHssB}N;4lbA-)MbXIU-~n^1 zJnC}!pS|4MO!ZZCb|xGBojJEeaK2oPUkVntWN zz-4gHp^m{-2!V_3B3Kd zCWS#2Z)$MT3I7#)(Q!rBnVX9x*ho>l_*A@LHI=cI4^PXA9HbKX{oS1r+`xu~<0c|a z^+kuDGNBT8L)HBP-9xhyLVIHCSuUy?-4Rve+~$}UI>AO)XorD4;xE8o-ocIY-Herf zWx01HYp-BMR{#Y%gt+89)l{CrJ%+e>@H=rdlhtD@kGiVMW^US!ddJldOJWtrEu$HP za0973EsU!lF$^`ubjX~0(mZ6CdRkFr88WNs2_o%Gg>lWK&aLQLT
E!{TNCsuiP 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 XX(p~6N!xZL)ZDd+*J@MbmWclkj`q(N delta 13403 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 { - write_instruction_binary(file, buffer[i]); + write_instruction_binary(file, buffer[i], 0); i--; } } +void write_code_machine_compact(FILE * file) { + printf(file, "\""); + int i = MEM_INST_SIZE - 1; + while (i>=0) { + write_instruction_binary(file, buffer[i], 1); + i--; + } + printf(file, "\"\n"); +} + struct case_adresse { int adresse; diff --git a/tables.o b/tables.o index 1d4ba2558a004e1259949b2fb9f724bd171c0a31..e8b1ecff36c76a693aa3fd96c5e2de2fcd7544e1 100644 GIT binary patch delta 3031 zcmZ{me{2**6vtY5W0XihZBpOcePbURZZ12s z^ZCB_=FQyf?hLmKwG9;O)1lD^ye{K%Bz_|jKM+`0Sct^mErurk-8% z`n=rZ@#}e-JnSjZD>eCyr$BpNUh??0*X2#9Ka?J?Upp@Elke?!MW(j;qUd%BxzZ~=# zu~lG`DQ+xepd%F3UL@Z~QZ0VPYDAE@FU6qOuUEqapIeazfJr$@s-4fi07vxfF*g3gwIImF$EzGK_AN)aYv@r zPbEGu3t?4z#}qu0P+32mU=trk~po?7D8xUdV=dh{{}KJX#Nai=N!amKlQ zI&FI#7`ZCdHg3j=!S-mk3CiJP8^?^XoM)V`#IFf>Iz3jH5Vx-e4)YhnE^JTW@E+s% zP^*>rl<@%LUo-A!{MsTf5}33Kw1nP)m{1|(S@PwFjN1DXsA0zWFxwgD={C#J2aVbu zrgELxqn{&2Z7f@fJMzsbpPg>!ev K>P6*b(ElH#l$XH( delta 2593 zcmZ{le`s4(6vyv-Yi;|QZB5$cC0W)a-KyPax^zjKb}O@;t!DlhDuRDZ%QjHQs7|d+ z9nMU~Dsc`hhmA5sia7srlv0rWLd_q=ACtL>e@qb8`GbuiG7F-WLOdt;Tz7n!8**Rn z=X=gQ=iYa3&cw*%?swYkxzzN!ptJmPuJBc^a5!Enm2!n+ZSc4=3&Zuhto2Z=UlI4& zxg(F+wYeihH*$rGxx(i+6t+XpE?S2UEUH&8%)IOyuYu~OKO0+GNA;&AerKGFlmd6f zACX=Qe+?{a7_;wLddHHC<*TVxQAFnzd>CxDet@TfF?&(L7!IOvG8nV^U>5r);1}#) zgK9Tsy$h|_pNApr(ZNLr3&z~C10r<59v!ephY&iiE?a=^*eq8%2F-$_ygNR z`k|^|I^quaFhjqZFEubV&ySIl*IxFz%6gFbHlGGr7>~sAYndKqYGSNs{w?#nd6pjL z{-qi`$9#}^o_UJ-Bh06mrNv%Mt^+CBmTkbDW-}$$&uSWY@+FjM~yQ{)6rDNua z!sWGY_+C~i3hkazhrwFs=1&PVB-Eb-4-4MTZ`eEAOM+8wRlFasGpF3>MwsYRng>7+Wy@85W#bGhyFa1-Wz4>$JTc{rs2^W|n@fVr#axB)q#OQCs512?c%#G3ujW4z@4}LT%RKuk@a=-jD8~h- z8)e$3n(Gr!g1HJmS8#9w+LaQO6D0(fi{B!+w14_P98bInd`t-Ps+|_x*itH=c(~EN z5uE4)#+|E1vGAvc3U+i zwBN%`3Eko0e%Oh#nSwd#QBA@8%)?E+ob&J`6md3F9pjX)$jwy8eh)X*afgQwL1Kd& zF{NfE6*_?KE%&ecliI)7^G&BMgLs@I|`K?rVhk^ya$$Mx9JM^k%a5 zNE5u6*=!w$>GWN2B@?QfXwvd&Sjc3ZgB^PGmjxTUx}AqzJ-oF9_IGvH^{>>!3vi|@ O>%5ZEqn!#9Y5oWQ3^*MC