From 39e7a48d56dcc19d6be3a0b990d3f32504b20582 Mon Sep 17 00:00:00 2001 From: kay <163897241+galaxy76709@users.noreply.github.com> Date: Thu, 20 Mar 2025 09:31:58 -0300 Subject: [PATCH] .... --- .../2025-1_aed1_ed03.pdf | Bin 0 -> 123014 bytes .../845963_Kayky_Gabriel_Marques_Ed0_03.c | 955 ++++++++++++++++++ 845963_Kayky_Gabriel_Marques_Ed03/Ex_03.c | 427 ++++++++ 845963_Kayky_Gabriel_Marques_Ed03/io.h | 542 ++++++++++ 845963_Kayky_Gabriel_Marques_Ed03/notes.txt | 339 +++++++ 5 files changed, 2263 insertions(+) create mode 100644 845963_Kayky_Gabriel_Marques_Ed03/2025-1_aed1_ed03.pdf create mode 100644 845963_Kayky_Gabriel_Marques_Ed03/845963_Kayky_Gabriel_Marques_Ed0_03.c create mode 100644 845963_Kayky_Gabriel_Marques_Ed03/Ex_03.c create mode 100644 845963_Kayky_Gabriel_Marques_Ed03/io.h create mode 100644 845963_Kayky_Gabriel_Marques_Ed03/notes.txt diff --git a/845963_Kayky_Gabriel_Marques_Ed03/2025-1_aed1_ed03.pdf b/845963_Kayky_Gabriel_Marques_Ed03/2025-1_aed1_ed03.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eb330f16e509e45a5d921c93a3a594bf67e2e362 GIT binary patch literal 123014 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

9eTO0mN=(oEIz?; zoG74=Al~*zjJPxYfgEB1qE{v?&*rHE=S(Jks##wsEFf;YRSTVDw7Pa=NVBa<^N09g ze%!D&umE&ta51izD?$01x!t9_>_t=ELJ3Yi*AF6n93unle)VuUiex&(vk$0ktuH<0 z1GY_(hWj~q{TF#R14nU55vzSqdA23#BW8?J@sl>l4A&v3tykyP-Rk4vHC~vxhBm_c z?d8>t^BNc?pZ|01?=sixBG!D4Sl&?5CMA57^tsvud(|sQ)4|@6l~|s z=#HtGS7^T}q4h@P;a`%D3CL!U9>SD(9Z-(x%lvI2ppxtU{2Q(y3=Z6O5zOH8G&VpSSIZ@QB8)3ZT zLmK5w95}^Xb+qn?k=VIT8LHX)0o*-SOGSpaX2S0|iWF7Izz0oZE_=)U*t3|c9 zbvy7zB-!7z=d`B-78)Psul&W^N6qIlf=hkd8{=!J7hG^*9h)@qKt)q`9JLiqE_m6i zj0@YpHUCz5x8i@@0mP~t-PLs=p*m38)6v{$5{3iPe-t~wa*^U}f&B=XouKX@I@VKf z&3(Knl)AeSyAAD-0b(g@gnOtsQsKE}dVvJHyR++?Y}^BS@crk`!_) zM(^XIw8COoBD7kI(>4Vn8F139-q0C&&&xwB&BX0VPQGyu2CMsT)YGDoWC5o&G9p{9 z!qs%VCoj_7g7v@&{;1DrY~l7@{S|20whN@S7~}GXgpl51 zh=)x&r6LW4vf!qDaDj*|nWLD|^A<>Fi!gi&Io%1IicBp`urv7~2cJJ(jwPq9iWemw z(xIXVm4)}xj={#1*pi38=maXG-nH?9N@g?=oKa_~b#V(>`z3xmIqf|7SZ29TMF+83 zTWZx#31LltrzSTF75SVQ)Ri}IklcAuNhJUPrqhuK#+D*F03%7i%y2iP4(etI;VAYw!^WIEzw4gAiGKF5JkqgFwd>XmeWA{*Lu2YkKE-?t|=s_;e@oH<7sEoDh_RnU0%83I8QC zI=hH7I+Rmh8$gPB`z&J=sq3k@Yb^i}{xccJ`$e+xl@=7ezZGPA^iV=KDQ*neTNVV1s)Jh+D+kPuUb^-vWH!%LuPlZ~X|Y zA{s#}alYiws~+98;&QaTn9^=w$&J6`U?u&vXK)9jBT_||wn|>9r)u_d10f)U(Z+PT z#PcScGM&a|7%euE+Xz-N1;j{9)#Xoy3dUds{ZAS&O2(fQMce)1zW@|;KWS{pvs5r> z)xP)gSlE&udrAxq9YXwol^l{a7L&a~9|8NDz6JPdrA)6xF_!!;hVUQ7QZrTloMXw+ zz|DWj!&1JoAQkHIt0yjEYAjyOUmwKli>Zd=RD`2JDt~W1{0K#hC4=p4RmI3?G6$#x zJ3hO*ePv{-aQI%!(+CZTf^_p8sc6@9PpgR ziKzk#S|Bk#Tzdm&l(1LZjE&|293$48qr`8sQRaIz|zg!qT z&Xoe)gbw5I*@WVe7eapS&iVvy7PU$^P84-?XvHBc#*d<4Y88ra8QtY#kmQ0J!7P}T z;s1VRmPI}2*zD$XqpITF34=ocsYK|Obv@WcYpR7u#YVspKxa4vdZw-sU~Pb5Z4Ex* z{S4T^c0a&86cThtJ}%)H0FmPQnp}pQu8~>c%->>(8f#7_bh%@!3I*RyrQ<2`K$IWm zOw*`Io0Hg`CE?9k_P0?|=A9L+jf%=uD%LJ@awkR{X-S@yAonXJZr?#LaJ*xkB}ok9 z4&#}}W zT+8U?cGPJ`!tI~DCFf#NLfJjMSwg_JptQzy5z%%;(R^|rytdzI6RZUzi^g4V0`VqZ zhmp_{-&(;gcGZagy&`Q({*v)0Z2~{xFp7?+*>GaVN}f6e7d!JM1`{JV?yqYBua>fv zHYdiNzYIxrPO12dH($mf*k%-WQwPVBIEdQ-7Xl=cbIMkA5z}fHOvSwp0ca!l>&PNK z6ijiq=kLpe47+{BksWa%SH3gb@s9jSlRS8l`E8EsoaY$6GtoZ;>&;U7(EL-8c?N(qK zFzibNc?@krI>{a!N{->Y`viXEhathUS^@y{&xD0pmYszG(}DKW7z6^VX{#j$GS-_X zbM?ND8E$g9z0dh-WBF){h77wL#e-npyX{B#h8X!0)a@7?KEHpd0wuy1aE7F3*FH6Q%+ddJ3GZ?Lc@Ue)@o-4~w2Mf!kBsomEU zqJ_;m^#d&umfNdFQ}#D@=KNDZ zWYpF|`ROo40MEZ7z0!b0W0zD3zm&(x)>y3B0fu}=OqnVg{?DRJBa>?hyHV@{#{ogK zH(=yfDr$~UzCyB2^C~WpN;F-bP(Jq1K^^lj(}?u)IWJOYpcRc<5U;I_^sy)ht+f(E zOKP}$7Ho9lxMn;VKLHot{$_UsIEs9873;bS^Vi)#@L3nVDVP0f(9=j4_}b903Q!wy zorDl``F~WG4?JB5=5kZ6xtZqTegtxyzCE|N-{1~4Mv4C%A3O8;lY$H~pk`~OsYbA~gC2E1eI^bW#4Y)IGfLQQ>`i{BMUto&RyJhyHcl6-V(yxBar# z8EUDm&vD0a=0@lYM~YB<^<(d`CQj4+N&WuH`1@?z{Aeb^h;_mswUO*^f0;tqJuV+0 z$`6JR9B*K(iihIsFa02v{`q)$Icd)!b6W>KhD6$SFK!T-1PbwAYaj#H zb8nyRy*WJ3*zd3eFcaw#jWcg2O8XpSQ^G(6ntk>~f%PmoT2eEN)UUUBiAbAZfT{rxStti0;%8|~!)9X`qK;8ur! zFpn(GFA&0eJoIo0Kt=eSTZKp%`Wk?xbzdHn_Zp!0BlgQJ$csp8PP@>!yXsL;#CRh4 zNV_BN)ksYL{9ztZDz8@FSULofQs-#kxu+JWo_p(&2t(veh75bJ%A zGx5>8A75GF zR8jz@#P&Mq*U+mEi1%c*F}i7_m)Lt^(AgV~AU2O@9LtA#2TYpsHgv-H`BB`2_niyNuYd5SV^KMjc|E>EGb0!gie6>ZU z{UEg3yt+g&B}qjc^YNdn^cyhaCvHgbCfi#xl5RVrtT_1Qdt5um9#fp?n|Eeu+?P5; z5n7tFEN6(OKV%VlNXP#DI_&)zd8~i53H5bdeEe~)@Hv@sP|RMZPlAMH`r_IMQ?lvU zpGML#hb!!UfVwcXZ|~K4O;~r>v+eq;Cxtf)G?oHugNoCOAjDM`5kw zG?D6$&S4FSUUF-pjJ)>Q#YLrJ4ahTM51&q%%&EFe;fxAQPX&|hqo8~tnP_}V(GpPq z0aRj#a;@zgnV(p}_M8F+y;_H_9Oh<)PBfY+`D`(z8s0hm+)>txWm3}iaJcQ%@GmDt zl9HFCBuAFdt`SBjrN&sc(^UM?ORhxIy1ji>T}~S~_a!-kXcZ4FH29qZJcQ>fSW~D4 zq@cyK#F9ykW%;0}f++z#d5ZLI&n?zfMRn-e;b?KXI^XQyvjDK&nHUjlPMWr#fSS=erXVt-H?;)a^x>DN0|GN}@V~ob#(A!IYxA zZCE|=Ru%{|*TI?b>DeDCvZMogW^|FwKl`E9^(DD$ob_5XRIrUi!tk}LLyIs+b84W2 z0#!S03=pkZ$K?jVSQsK=y1Mw5uuBaDNq1_f5LGQ*7`HwjTXuk6r#svK>QkO>%P1m& z`vnPA%>|2bcCmGuB@!c3R8EhGXH=gsTv`dh`FUn=Khx!lgBFIW=-A(!4P7N^(IptYl`}#S{lP(KBJ>2OYc!Js zYgAv(+<3?M3F9|EE5gCPGl=*=WA*QP19s@_Hc1Cn@W^?3+GbA36N-CYc8#ZLh;Lk0Zgvf5zJ}l;#nFIoGV4F4 zeYD$+NW)=|)QnzR2Z2*Q-rej&FIt396wlUG0_L}kY!;HJs^@x^$JCH8+NWM%O^aGE zC{JcI`=t4MbJ~fSOp{9uG}*k5*)A$Jz0u6aewq!nEj!rwWAjiC%&|84EuNV^IBCp1 zZJqk!YYumQJ>p{F*H113g`3Hr=yGDcojH^)p()|-60O%h{aL4!lCwUShkM~(677Z; zaCJH3XzCHxvQz`3#&F;kwPPTlGK!nuGkU41xr(_E(;Ui`w|x{F}v<$xxO6#z&-u~ zO#zFqB}xMW$*ja!4lT+jx3t;!J)H1zd+ei269YkFPH7&3mBa%uNC<$QEU+qjEG%}B ztQgXyiGm;%AgT$290fDYvB*O_uptQ-XSuqG46L*sRgMMKnEs%Th}t}m>KZv;#D4t@ z09$NNVSh8xz-uba9JjHPb?EK5g~9N9@@9 zoIH6VGU69)ONmsR>-TPtWfRtcH;$Y$9C3G+=KKvt)?`7+=j2RdA$oDoOjuVZbFgt_ zHw_py+Nk0UdKmyQNpOLq2h@_9i2KHy8Lo!Aax zce6S!>4<2*;>?=%_6upID$d&Ks7K#;lBn`6ot^m#T}m0Sw?AX6!_!Wy*Z54G-}3e4y@>zt*snhLNvG|#sY3eR}}>C7q;QR z2$}{m2%SG7tlS8HHyxvH9p?UPLTI`N_iVh6uDuqCb!hz-$||OZ378bko$N?xgxV~# zr5gd3(Ys4`)oW!ho!X&`8AzX@4cPPIgy^IZ6T z^H+`=Qr)WW-vj1=zHW9vsT|rXy-L1e8G;io3jLNK3bT!%$sb1a_$w|&9uZ`4hSCTS zGF&H(QuCXfQL*3Ok@qHya9EnUdq)&%W}npn!jC)5Wl{U%BVEIOVNcnt<6FjAMJsPg zx@m@!otCj%O9&XK}JH7c1=>C%txRAW; zxBwodLf5j&hCcJlbv^z92|loiZ%c{tL&s|*n<VJ)H@t12q-6P`#1WK6vnHKPLy-y8A*k?-Vb zE$;~q@g6dG4VTgm16$7{WzG`r56Ym)V{seG+=Dg~EWBcMC%Gan#;MaiUT%wY33Me+ zqQk#fiiiojcyoSu-fPOC@-Fx;mx;?N(^0Ou``8a5SF4v3`?fVU#32YQ!{F0tj5lCg4FVGp5wuBqtUQdq)2J-$dHC|wjCa(>9lO?;|)0W`f5NdOue2*is82hQAI$mMF1oEkZ zP=)Fvs$PQbua5&mS(5%Y0@gb8XJA%n7jm)`>Xd_?_*&9Bn&kd3Z1T*fR=j;(j7W)5 zbKiyWQY@#e;NEbfJcP4S`BolOc!ybeQWcTJy88;+ZG*N@+$UN0KYj9%V;t}E%@NN1 zPKTsL2IRMB^hlIjIylzM!Wz_BlZ1Bw)NT$|>kxNqaqL*8zq4n`H7(6>s8 zUoIm>1>Qf(PM0J(wKN|R<1>I>Ap_NI+n-Nk0a;l zo=0*V`J-Y>*8ldymeGf~^bAG7Z;wwr$mPYlD`R_~1z3td2_FhF7KURnFmoy>U8X+a z&l9r=Xy;M-VrDLZQNT_U&Oc$HD=WaWgYpB!nk$c~SfP1Dr-jG2J_T%wWLE4T?~ER% zz9=$Z8ef{cey$}#xd7(ljs2#7Jx+XzKK^v>_|*Jd(`T9R@UBj9vaw=pdu!vO^`Vp~ zc-F={QX729a-$ru;)+HM&_E;IN$ z-e9?_`@Et3tr$Rb<4bL|ChR^^xW#13YJ|ihDC~B1AZ`gUH_&lbKMA&N@2-#gv?&z= z31k0;e!y(hd#-ATqcKFI8POY$syC-`t=8dwAj33PYeU*4DKD|Foy_9+>OUC!%lZ^0 zZ}GigEf;2FJcL_TPMSkJ;253kkYrrT0K00NrdKM@Bfz#l)I4JjOX0!Q`2#XZ=IT%j zY&ycPuQKyqi5g@R-%3n75@(r(tgB?3CjtjtOnofTkK92+S|Z z+8e3^fPb?R4)QO;S@(7+8URk_9CnU!?}H)KpJDNoKMW95`!bAwHzDCcFvQ+}XnXon zX#ad?bkB8z3ABJ+a(iU_ls*34KgmaIihdj{au8diPbOu7kKr##Z*-erUHh{-DV!W& zDwR}BCHl}1tG3}Tpr%j#GMvKxqbSNn@>q@rwTW`MmvVoA*peGFo3|gOf}Lmp*kK=} z?PhZ#E(`(cFIeV{tPMF--yp(4&m$KHRf+ygqZ2l0-6%3t!<>VWFmm`BW8ENjDuwrI zN#iW^dLY$+(LOCAhWLCJLty>Lf<8@NN7jOH{C&u8^b6BNBTnM0@r62T^sBQE;2ZVV zbl&Qt;zPvbI1G4c_(k3mMK$=wYj zhgXL8LeC`u0H;`De!7p$yKpfA#dSMsXLYJ`b-VR-iJcnjKN*N5>r7dcD4x86iul1df^;Zk5*ftAppDCxG`?SJNN$SK7Lar6|X zh`v?A_HoC8)m%joO{RG!WEQxGp~oR^6G)yMin>#>&~E%&`QtT1h5s6KUiky?IH$@F zn0!+HD7Jg1OHOh;E%BXarz!CTqe-w9`wINtX{%~EK zI{&`Ujdw=Gd0fJu3?~JdF8l22@Ws+m3M!4Yt|R_PuB!gFxmjvE-XUr#D(BjpA0yV} zT-^YZ1wXU!e2Np6Ig^jcM31Smdg3Kk`#3isQ!UzP=|@Y5fc<5f#E9UXcuWZ#iNxt2 z`jyot-r&RRrgRGI)ICZuvRk52baO4Fe#|QC`1}$D?-m>j&86&E5-&J)Dk~>P~u9;1Jsp8BtmKH z?+kVVJfzD@O#fm@XFeTW$#3b_2=7quKGn@>tF=_)q|hCBdBlK)0a|oIeT~EDLKsldi=%tcgL4 z-PKaP7&0{iyqstD3pk!eTKI`_X@9ag8;jZ+&>rr`Kj%EZemj{aS!&gDD<%}TWUN5_ zJ<02&Pfn#KGMDNEH=dp^Zy@w{cdHNNNe0y4!`*hJ$wxcOwl{FKYys`N#GE1K&`0-= zyD`O50_&J1l_p&(nrvNs!qT8tB{a0WlxCLqL}ZAovM;|#CU*jkiXPT1ZoD)Xp?4RQ z=IYRGrV}m9VaCzyFntZ=^t1Fi7?K1;F^sB~1Cuzn;pTkG13iod?_)|;uR2Y2G`C`q+?yg!eh!PU$z!8*XJaJh%7S+5UUo){4f zvvguetQfbJ8WD7JwPJ)q3P#lyxxztiTsaH9P#7a`JXjGgLBx60!a2XaD@vY3x31#? zoq=!;nPqf+nRpuQ)r3El`3eQMZ`m!L#4EARlRb#yCMz$F6JH7wry3i$h%_PMl?!t8 z>(arL0PXB6owj!!lj33;2`3kNEJVWOF-!o-Ee?;^2Vvv6^-JGuEwbCYkzb3A`aL)* z<-eerYtq6o{OCl302o<20x*bH2rL}|IIU>nh(|GEf+`0RM3|=idDM)mDZ~q_gvWF* z=b_4Jpv>J!NaQZ{Y71#m)+*jMH& zvfA_K73fcu3s8(>EMEMpnXK9t*%$}UX%mG5Xtnd1MR@aM7#4ALM9BbSW+^mBYUfI>i#lyjrUd74P^j`o0IYV1hdNCGyAwy@=e@6&9SsL2V3fbG3 zNV*u>SQ^W!(2Lp`+nZS0nbWIV+6me@TmGN)KMW$K&c;rb4ledi1T6mnt|n&bwBNM%#v+;NM7Xc>&EB!xO{?n#qVq~BfHgu3MwKTVIAz)|X zpcnjU{;ysHEbN^0vWD*eK`?T%GW_yu9_u+l{5c`1-;HC zc(C7;KGJhfHPDA}sg;?>MedzK#|#L4*+F{cWovrtz23zohG~6(Ujr*&=_*%(R#D={ z1uSeuPqBI%_nuT_r|OX3 z)`o`%4X8$wWC*wafJ18b2Af0d%moMrk2(G?E!L!y$;;6C$92p}pZ1s&7 z6O_`k8Q*f1r#_1<)iP4w44rQbb9~n|hUeQO^f)=~Z#1}}5UXF0xb5V;9+n4i3>Mh8 zF?&*35!dbW){M<)QDZ!WIkK>l9NY=Yh{|UQ%t)R116I7N_GQw~K=E_xR=i*Zs(C)v zr6*Oy`W44RFPQCILvE#UQg*f_K)*-nC!S|~OZ9-uc`-}C%6rw~4)&E99gZs4{t6~3 zpDtQ&b^irP^#iS=hfqF4;lL2I)WU^@2wa_~RSfJ$=_iel@n{b7jK&HtVS0phjl?D*4o4G7O`yS+1V19Dl{#hjG% z-B*K*>yApbjoP?9aym_0pPM>|k+VWmgMGG5QjR-Xi8+o74$DI4(2;ySkd%1hy3NHk z4jOxH0B1v7&S}R6U^K9FGrA*419)EOC3Czx>)q;K zoDhg);CFrZZ?NA!p3rT*YX#b5@WCA(jvD_g%6sTRu`=ad1oA8K60RhWIyvE}zJLh< zCIa>CW^AHdL#bmuc$KgDt>eq!3H)~Vmuy} zg|Hy*caIV^3NG@!M&4fVC_8HGnPqx-}Eqe0!Qn*){t7BWXtV*3+wJEiYK?e%R zq%mThh~#}Hq4Sc7R`VkE!j4YREHUcyy5h|rBeCes`}z(8PK@Jk#kg$~!VfZZdG`j7 zu+ZegPDBm^iG44=ly3ceV73>?aD@VjkUXj2eV;z#FPS)G?n-?Iqp7?i-l)hJUyJV# z3P;1=>VmBjl74L5@|RB0CY`nukC9X{3qlY#<4D*EzwJ9E_V$DHN*MjbjniVpS$gZ^ zk#h^XH{LuNbV?3Ly2z|?`Gs|0G#hyUnqU$Ej%nzOhb$SUJj>>AJO!rAo`)QMm+_4hsXKu~$WuQUMTN8NEa`UQg3CEW z@bMR5aRL(*;! z1<^v1X{{UFZZ8|_)c+kmb9-9=p#gST%_u+ZC-&;oCE3*~a=Eg5Uf|&O;`ptlOi<6envWRhu5k}sGoiYw zFLT@w9tVgCA6kSdf;MnC3AQ$lmkNS>F_^#aCsNt9vXR(4GcsL+$5p*K8ZcxntB)@a zq6kdPYhAAVl1~e)O%_*r2R{M~U5rkx86|~@K9ae^>*+-X+%z|jEhlB5t*cSNy7GMI zNoW#cq{dg8UJUkkt!YTjAp*SKxVf7B>tO)0U||TuKngIl7DL?BFSO-p1>>?(4jA|5 zMjDy!l>pl9d#b-fEy~2lDe@sBJ+PN zD$^buc+|6p5bNVYHqLsUs=V%3o0@AHzhO`|bBR<^8(E_dZWqPVW}@>deKLDO^&05xN`6gw=3#_yv6T0t#3&{NF>_=7u}ktN z(IcInqUQ@dy;NuRq&m-d2P z_0<63Dks;BKtW)Wlbb^aP~t%P?g!9dH0YQR0=%}G=E3OH=ELul*&~kij6p)lHrVv} z-ACT2HX{xLN1iC;K1@1)W{x!M?bs%u%;nBC=%a0FcH)(|KNeEo=Bi(}iNTW6*Y zc2&*9X@8YHCB|mag8HVQ!#psEvP{N{emQ});`R?Ou#3JT61dI*eBJRemD!l0KH>gg zT|T;{tq0Oo-0z9Ry6s{IzL&MP!X6^?MiC{jXYoX}zwA3sUfaz?_kjglrvj8+U`z37 zdiJ_{--5a}z`K3Pgs$%tv|4?~X%y^=2QX7l4IRv=TL;4yAVrzkpnFUPwiReW)+dT@ zDBK6|k$yzv6`(?o(V^NLh^L6%K=(^=L{pyg`5Hmr$3my&S2O>&9BBf7Iq<<^n zeb#iKDU*}H{gYKL&w|(80>d*2kDlb7ShmCT<{c>&v2o9_E`mlK2maRI1N9yG(;aMm z(}6ph&k?XAu|{!cL}!-5pa{hjq zeKS>li&Fn?JADfz05Aa<0E_^(|Hfo#Zzp2tVoD*x#l-M!A22dAGO{zVurSgxFq1Pd zeE+jXFKch||1jb^<;BF+*!2I~^#7e%@lQ7W|BHufrvD*1MK`9$s*eFC_{tXwcTL!F zR#(`-8gswej%E#nqcIi}ZG~cz(4Kz<8dt_3@ck?6nbzl|688o4H8SvmvFCV%kukU0VMuxTa?ZDN>Y;CC7@Y1TEFP zM2)b;?^O;q?}I6QL%yMTO7%lw{mtv}_USU`e3Zsx6izAzrw4g+2}O8Zg^wRn(w_Ri zzM}r`DNO%sJA{>ylY{l!*t0Wtv0x-%WMp7s{vTlF&V3-gl~os?Tb??SDr{5fBv;97 z^{`@v=Gb(zu^VL7gS03WqylN{c$$6^dDBbI-<8ICnf{010G<>AJ z(pYqD_TGUbfF1{Mx^_^%szERtVvnLTeQc`gcDTW}e-U<%tNB}?SJzMh(cz_Ma_~2v zDT!CZQ<6UWV{S8~40sKZCoECyJCqb=0(f#i?gcK=qW2&}^UJaxj2knGLo?d5Rf z2ctjE#^uPC*l?irH|Y1Jl;X5wZh-_Kh*cNH4+?CI(uLxjrv^4&ix;iK7w40Ucgb#9 zY{=vxt^_%imi<5MjlBC)8F=y6Rzh!~%Gu$@uo<$5o`4Xr3-?X}6^PzG1RXMP5iRW5 zy&-zpWVzdL>_S#F@DCS4j&5qMO7!nGnCi~jJijQmpQFC&T>X9+F!mmL)kio#P4Fv4 zvp`7sN^nm$?$~s5xGMhN&Jvb_Zf`s+W+?cZVlbp9vD|J;1u@&7`ldFA7K<6QP@ zphXPr{z4^a`f8*7X99$PFF*ee-^rHr?wPCjED>*@o2Jkr1bsp8J$7j^gV8JyQUuzfrl!>CK(Or7uu zGlxI`I0gi=0aJR&0h&di^fps7aAiMOWgLN9IU0O$!tBOLii0CSZes=!I>-HkU3snC4exEXQNf6kp=6S$*V z>P>%Dc=h*c->SZ4n}Zn2)@Kd05T)FN+o~Yp5Hu8NF{|QCcI3jq06EDi>|p*rN*pIE zEH6x><4^IyXULSv@^c(@J3Zf?e#zgW1Ee-WW7O*ks=CVB><8~9bEotc%?_S>5h-=4 zX6#dzH{GJsZ1Ag^pEb7uS2LVw zL|tA7Pk^d`cOlHMfv->v7yWui*R9fo4(ddDZBNIk*voQ7AKjCDuG{aM4t_LROoXq4AQx3~RE3*~3q_hh*-%yN9SodL&H;%0uwlXg9ViihM zpqY7~wN|#S7rFZuN$w#R?{{^YD~kaUQFRy>v7zOy&aNaix@yQ%3odzwxmOmg!l{>x zvbo4(*)-hJ&Zjls!f7Ym# zw&ky>ujvI&JcwJC+Aip(p3@vJi5Rj$ImgZ{uE|Fnh)gON+gkF2sls597A#v?6_{wl z)(PyMH{e1S3}VtYu#%N6#AT5FJ(XJnhO|*tDpytuuxi1URHUUmuw67#HtJ%Hy}6B(+(N6lc|J{)HJ6r6uVS+d8~($$MfMH< zn0H`Pl2CvL-x%Op(owmg9-_PDFIS#LYGm({S0qY=T_gQBGANRYrISvZcCY>^GMP?T_Awt!@$&dtoWGzfjiF1&zhD%t;)~!SY#!q-1HFjyLc3~=c zjcD<8wXd_np6k2R1A6pGFDGSA>u=^6hp1Ez%|C)GT!rIMv@=NdL(xKTr@ws*pz@Rs z5o+XS8?x}Fc(KYJ@XPn%GYuO|ZfzT?Q-UE6d3467jbqo3Ypn|XZ_tgtYnM=@_IkhrhfkiDbFCkH zcXFj^99ciPJ_l}su_>D0UF1d24f%95T;v7p!C!W5k}Pa&3+lVZ&7RX>$31&PzXjA8 zv)d{2|78|kSn|q0k&Bkq+OF5MrPbv~{8S2UWNT12juKMsinPg`xgtw5pRipi>Qi=h zRvrV8*0*+y&hf*U(!PoCP?^w~>I|BI{YA~r%(ezEmRe-L=&Kv0mi9;?Oyd3kHOaJ! z7tfxP7v|9|CJtHui)}BQ;mb$j7;W|Kx%}MYaMTzu}a^0Q#X}VdZH3 zXT9KZ!AvGHZQyyt)vb6?2MvPDiq?i{SNRUZFV@u?;d`-)|YUReEZYW-I z7HQoz!_tdX56Srjct^=n5ZHC_OFt>Kw+oyOC}GxamQ#p4xVfiAcU?yg(E%a#UvslN0vH zr80Pk8{5m6fcSpTWs9qOZq^j4d)_Ma4Q8VL2xmQ^VqNE{@O#x%KX=a|ht@!{D0%~X zZ8hUKj6=U&p5|ufm;GD~|I*URdemELG4h#+M=7_Ah7h@oDJeV~ijvA&3ejQ`Kb&Ps zU6-uoS0b^W8i(*GRg3Bi5+Q3;Da8T2nHm?V6^$4nHctwtIv=`2Zt@-In~F;ncHU^e z)gF}<6h3y&tFor*+;PzFQo9%!BGmja9$Q% zrJi2S78!5BYKIh%KPur_*!;&5we1cuX#jErN_NBU6swgXQ->0eI9fY?bL@zvqaigj zXCk{EI!;tZ-GFC?-ES0(Lubq3B|}fvT=W~me&JAhg55LfLK!NeN`dtN_g|9DDw8|} zS}qBgI!ueQgM|G~VjPheBKy;F#E(`%C!u$UO+=RhD#M-;b-*`P-~8Wq&NODYbshgk zY>3LF5re5&@0Mjms>a5Vfga9G1lwf9Tvlaas{+D?_AtVqa;l+bCciD(dAG)j$;iGO z3Idq731BVU=?jDSfNFyL!G1b<#vo7@{cv8_dEe#`|BMpGfe*^V=~1_mzGe^yH`=|W zW@VB1{%UI+Q*zU>6xTHfQjW85GRiEs5B*}k&r$jUQh8EXYJgM1_WGxpDg zLU{sbHC=PcMGMpTAnSypey_ug08fY~vN+$~s5H-hSpT)1u;~TdsuL)_GoU1@Gpf%M zcTVFK>rgMRD#wx@7A0Z-DvnuBox`{$gjr0P1KED~X$~EtGu!;e`Y?7dm$(Cb#1aB7%krA;Gw-J3Vuyd8cCF(WNW>7P- zqEJ6YpGpYDtT{rKus4_!;znp>DAj8(;OAb^5IBx%q7;ZvCLgTW{j=h$bqb$&R_saL zy=2NKxFy!C`LQyHC0cQW5T^kyt`e>i`Y70IS&!pQqJb$6Z%}8Q!KqNWKzbAhz9V(+ zFTC6n5NO()-=W5C@@5dH%=>+%_>if_pF(|^{!tB2 zO3xFe``Loy0_lLFq*{p1{S;e%?BQ{d=#9&ta>MoRH+If3?&e5Wy!~sU?dphEp1ZWf zn;!jVBznv@g@{#Y?(i{2F29qSLnbK`o8v;CFn2eE+kN`a2=usbqKNhWqO^R>b1^gs zkTo!2mYambop>BHzx69od(Qu1v>)KzK`0zT2y_~Wlrr*^;N*;)x$hbOqrh3j;s-{T zMXYi2L#_|e9s2JOB-bxP7f@`@U$Ff~S^*sRHw?R${RFwd4RbTs6;4>;CD1j%j(ocd zp+$(OwVXwWl;uCto~vyzm{(ERyt#O1SDKOSrSvtjKCCO+2+2BGCeR z{I4``97{R)!&crr#?iBe{9Bb|o2Dyl&I;LopDYH@JD!oPLEu2pBzWE`OYAY;N6^bqj#UXw3Wj76tk92^zKstg@=gtxo+&!K`5#b;J!)05$k*uDB!cM@ z_O$cSv>4Me<2utG8GErFf}y$LH?}M(8D^SOLR-ojxjt$+&48Lyq=gO2F^pxb&c-mC zq_BAX{F~*{Ru{h(Pdj=tDrDNpByFjx6<;D1$E1i_HCs|&YLOsTphT(C{-;zR;TS&C zfqO+gKMV?&7%H=%J$*?rvDRLBWl>xOr7$4AdtvTXQ#D_YYaQ|dTI8folZ}67J3Pyv zjL5xK$VWLr<-GifI*_@5$h;%proFfzD~1+tU&@8Kvz4XcSu&=EEp=I)=FLB*Ig&jU z1Gno&EE*yfCP{@vwLfVnVSd3|eilzIV@qh3^JSjOQv0JkF+j4-tw_xy-LVPvQ{B^(3HJ z3i@ONZ??|ZXC8a#$7#ueLDIvyRYUm@a^cbzdu3yx-#Ulp5QR`y`J6e*)S|~=6xYwT za^ve>=GsYSaQeBwqo$~Jn5whmwNR2kb>&86l(kZKO;nZDqprqOOC!9F``Wn966A;d z#d712^Nyc+)2at9u{|T1lWLEwYHbyb&^5ZPpRt!DKZ()bxOsQ3ns6?lx!N!XxJ!l> zRf%0!t@=MlDz=F2Om{~bQ++KeY^_f0UELO7WPZw5Hn`5agBP*L(Qp-2oejRGE8W`*P(PfjhN_v%!irXqJIJ(J zIt1D4D=nFa04iXFabw$`YWnmzB?L%fB?;F}y$R7b{Gl16w_S#0^k()HA2rn8UwqZ-QYXw@A_2j?A%wz{{#0t6n`As(kt&ZYx; zlUULOS3R=goreM}OMsTSUXXnq?rnsG>9^MJMFZh$3XJOLvFe321Hj|%UdYfkD-vxw zdFw|E!*jYiguGVpK`|7etTW?b2l@-mlEB zaBk3k{9n1XAmY66i9M0m0B^ZnNyZdGI-(5|+!YaD89QR}5$Js%Ey=XwfqRyviHd!^ zy|U|+fu|enAnV^}s8khn7zGWRSPNOP@yiz(BGtDczp7n(82*m3< z0((XLh-G#%|nUzZG{k zbiYi?iZ+SDffq1vHqbU8U_kN4zUK&W2jAh=!PMFckcXdqVvA@F*&#)W?35-<$xqku z&rFf`9F}sz^t{D#;(qyU^CrAc;Cb@2&$5amJW)Hr>4H>|J9m>J-gYe2zP2F~a!h?s zEjJ?SSd*SPwqNLAtApN@sy$}AM{>z|DSL@~$$W|J{i{8=>H4HS(Ct?F`Q;t!lkSuE zlQ&1zUF|tfC{LrXS#3w%J3>9*$u!R?xK_4BwMG4(!j;H3A>Gzx;VZQf>h^#M@B79!;w@~#|dcYIj_VS$&om8~T5 zy&vQxy{!3>ZMu%Bolw@>7*zp#>wy*@jIRhw-C2lcv35E@>b(usOwD+UP_*yiCX5dG znCI`1>l=%XFYTx&3(aNqyP1vX>QBDw5L7MT`y__@I{uD~*lwX~H!D$ZpwWo+pi9p< z>jRk~grdj~eMW-P4og7WS+L_lEj@4BjoU^VcIigdCBI%>Pn(JrOan+k0$9o*W_Zig}w25g<2c{-tSk2XeyxgKR)5|ym&6F zn|grTKQj9jGkftSkKlv_w}n>m%lAAT+wFTIw&?@Wasw{6m6G8gcF?7OxZ>r~jlxChT-LZ7u@eNqOvo zf!}%nq$;qAPD(lVb8G961lQ!8(-bdpps}h@J0u5iMlmIhVgZ}*GS51DMsGSc`f`XEruS;)Lp*S4N#&~FEk`fgf zuEUa@_dMHJyUC4GYe--{4t6E435#o0R`~W+V!t5k%|d{+3n1#IRF3bBjIr*pP;NkZ zU-{?%`4gY_Qn}6}4~(vkFyt5qb$^B0!FqEvG^`{iYXt()`NHEcHj~E@?6FSJp@Juj z@*Wfkw1M$%#IV7qcn#6zP{d6p6QN|`;CW4|fPkV{G*5*(q^M9j%2H!hm0EgJxVJde zFQs|m3 z3f5`%8$8>qSAz&1V0#3$e_!~Xw_<;YJ8=LWb~B#R4UrQ+5ybb5cZH}2jNF;5*DJQO z$->vbkx=U4N|k~9X3?8>ScII(=J&UhKn30^QyR1(I~1frsszL}Uden`gxXb-u|_IG z5xXjs*$TN?ByUmRLCltEfqWoep+nO65J@&wg^rPuOcpT-#aOXFg#{~a1nyJ>;3}gO zyHPC5g4N(@CBM%xO?lx6#lLb!w`gT-#Dc||92*-UHhqkYyytSDRUp(e<0R2aI_NGP zp?elZol?1xQ?SaaHbG1FK)X!W`uMjQ>5;Z1Ym=8^b87;)VS>|J$;~Okx3?Wrs_zrF zpcT=@MJEh;PF5)DPHF==%_$Zm>;rBaw7#K&h1Wt1p#^;D=%yE1UUs2A@UXR0E>R6boR{^GYUUN4VP(O-t2 z5{n?!dmm2LJ*+?ZDb7e`gO8zPs%J5jtdnGE=chYvdY`;`t1&aISl$59pMimw7i2Pn zi>zi?|C}9{!|z8pOO}@ABaa=hb@z9c)e1DHSGD8HMa2!@S}>ISWn67S8T3lDMyU1} zo!k3|TPtg8j8BsThBXG4Ek0s%bOsd$2R_W;Kk{N4%PQ3(>`qFb^%)W2?1?tBhaBvd zRo+A>IFbw28*}BNGmv}dY+kJy%KhB+HH87L7$B-DiFT>E0iN*45)a^*&f zH~kUsC*S80_ei9MnQ#U*EriNrMzPz*Avg|!^xT$kE~Ukn*RYDkHXpVLq=sV(7gaPJ zfPBjcj<3r_D5gLW8a$BaNf|biHg1*&CLK+~iuDjCHx5fPpea$>?eD^QrwdjIm1s0G z(93dQ0Tixes024b!Gr-j$RQrw$7pG!XozS>8HBcf3FKpDnmPWnREIjFUQ|It3qIEc zs+?^p^0CL4G)`gy>an@Y=d<0gJ^j}*9#aDzQ{I$LQsY(0TEQzB6tWxx!#1n@h6UL3 zUqnvlY#8Ru2a1@E75nzcTKNx3L|XG5x&r7Jf1*y)pIn&nnD46E9P?DmZ zGDIR%nwS@vegn`OFkvV?+v8)~^z)rNd*mIf;Q($84WjOfs68o3M5OYxf+-hSo>Uk7+0T z%Y%ng9!?#mu6uqLu5dolc9toZI*$1k?ol0JXw{2uQ_nGEz;qH97pvsT>G>g&QT*+4 zS8+>CO*=li4ZhZx=iJAbt>K*vlOI)#z~aC&jgS?zkLZ40qjF z+fPjbTiJ_uN@Z>vwpoN_ue)4Y{?r*$fX~E*J@~4& z$J`3n^}*H4Kd&!$RhQ;mPi?YDw4A;(pnJu^ni{R+u*A`9s zk){WzRk<>0op7EE)-%|LHzK{+%HLq#`h7wsQY{gT62^B> zm$4nEIU4bxQKY=@xr8=bA6|l6AeO2oIHrQzL<|N6Z^33VJ#F{T(0Mv-A@HCzfQizL z6_3xO@#KfjinRijF{{kjEPpzHo*b^yL@U%NIM!aSlaA5UX@JE}D0`>F&OYg2gAW?l= z8n<9%#`!SV?OA>_c+7=-Y_$6UGV>y97@fcU)++w|n(kPCR1gVo^yLMN?k7U-| z%0YT6Qion&Y4!9#(WULLep^qMYvUO{6DDM1K_piG07C}0q+AWqASxKpQn*fu%Hyxo5hlfi+8)*Xpqual95gZO!5&CjqI*6q&Qi&y=^ly2SvQA3U+irl^} zk0JIW^rdLLv&2BOIDi^2e~y=;_^f*Igl`@&*nzM1wiC9(yrwC$#fRC$ln^u?F<=3nLWYOVS|A^+t69^vd{47ejAHbVBE1D+#7 z??04quE*?b3E=!2ZloTkAF6H{zE0i$me2YP@%}Wdy{o9V}4F#~t zhMaXXCZjr5-~R(gK)AnhhnS3*aR8*PB&j{udk_U-@xtPUWhni@u(YaKax0c&VhATZN2h`vk$C)0gifC@(M5K_J*lBkvfT6#k}Rj3)bPiGsRuP^WrY)CHdvJG)iyPC%ES5m$(*r7x`}X?)H8X{UmlIsz0x7_mPBZ%A)v6 zJnE0fqjEe7NGV6-oRKgg&1xU#!JaN0?xgpL=#8~wqN{z}T`h5Uwdn3fR$Ul606OOP0~G`Eo3^mf-ELH*-5HUIlf~HbJ83D@3DG{zsx%!n6`8mQXuT)L6mOV zQLNyymJ&1LW|^5V#pimDAPF2*hOGjNz}c!%%!pAH=R(UW^0 zotD_NX?XLDJ=gF1WagZ^AG*c&+Pj}`n*7x6$5&oF04y=vdzcS`CD!9(B~e0)ge^M0 z;W)z7W$JbKfNLvN!>zj$s#+UJ#Q8*RT&OiF4LuwIB9%0$6DFlJwGw)Gx`ARm1a$Zh zc{4375c0d>VY**5U-V|oef0zBLhYl!U<8eGjO7M@j%SkRsu*`caIQJqe@XD?#?}7i z#x4GvV^0{WrW-C^!f-uI4S`P5-Gyme!+?ZZ*8_Z*=H3x5SHZYwk`3ln0RN-)xnd0HIYiy4+fKJ_Q!AR+Rw2oOcY+zUQaHkG z)QAwqe5G!$oLo*d$Q;r#CQFIK9 zT9`!FsInrR?I^!z&f;euy{>VL->WU`T0Z;oRsN3D=fD2tD|2REvUGL+)3;ve#W#lU zU$J@Vwd?(B$uF;)v2@w8Wamq>wq7#*p)(S{xqVOmpNDBhE(!=}LI$EDgT$%j?M8a< z*S6X_vW8d)Ac7M~L`P7HvBePtC$@-=pcJExBS>=LVA&BQCpyb=@t8trk{v;C1kn)` zM<~QGt10W9tY4--pl{S))`cs=L|%2gO|8n zWET)eg4bCp;(0g(y`u76Waf53P_44^L8=qxRGU*V;R{Bt)Gpj)8In~|IY?TP8Z51L z6Y8Uy;U9#ENsgYBI?m!r{YEU)exJyk00&y=5vYMOc6LG_ZkrW0B!YDKo7+})yM*)vIGCW4l zJ^(q2af7@pOuN~7boA=7Tguk>p7i}ze@lNqCM&+Mt1im<)PUFLd&TAUyL^6^+W?%i zeDu!0@x;noL%gXy=SsygZ(JT+}i|HT-NRy-ei52o0^#Yg`Dh-$&N`Ilh zwiDtc$8e1zTU(A!4{(SULUF@KOXPgOMz}!09p@R{jT>$+M9!^q-MkYp8|cz#mt?*H zZ-8k&T5<+lLjk`8TsS@PH-Y=-F74Q~YSOBH8*eA?_G}-w?9M${zVf!Czwg0I%v)~V z_viy#$F&5>Kc2~7H7$SaPcPlM^&mX{Sg^DJ#LY5Phd(QcoaJs@j;CV|$ND8K0~-d= zshCia@Ed9ZqiT~9EtYGUiI7Q6C&c1rh~-+LLSnT4js52D923fQoBMLqgifCm!DmZW z;OxlR$tm6m$vNC5(k1e2?i zV`Ztmb=!fH1x!#_(YSU{0@hKJtW2i59P6Sdps}+x)`_v88vU3}8Ai-s!EDNJ!~_;H zW5Ow$8faS+meMsWYZ4_I9lex(RaPL6*+gR{_LtZiccMLf+Ne3%;S+yKhVP!$(esPf zm;EJw=;50`-SlBk)41EuU-0;&*DQL9ztA8IxOQD ztK~@4EiY959~uW%Ih}AVu(<*+hTJaVDmXB$8nrc#J=%S~d5q>fwAw(~E-(a}+JZmE zIuxA)TcN&&nXfgr6e=hp;zX%(h}YY6G1s{&-#vPWdk44ltDE_+H?6uS@6Dg+dVdrC z9KZAs;?RZQH4*Td5UND|$&07_rb9=u#2GYTGX|K;1y0o>`W8B94C-cOPdhu? z&Td3>ZbYMGJUymTj&p-7kyqG zCBjIDE3G>NmngH3UnffZI^p>BwrpbI^9ojmd&w+RUvhMP$H{RZdZ*YGJ@h)sq1$Kmw}=yyV0h z7GPNML>;tCx7fp3~~JehFIP9_Qj*EpfOHPAfT1!$U1kU$V9OG#YC= zA=WxxQ0;g@wc`cV3q3_I@K_$=SzX`93m^m*JfL9zMap$51nxpLz^y8K54NY0V$!KU zwBcMU3xK@lvI8LKyhy58BrL5$6a%15r+z>N52~S&54H#l-|JzO#WZ$WT43t)HwCY~ z_`>VP55Yrr&D(YoOE2Ehea)hOJo?Ogh-*Iu_CUuZ7+*_g%e%-6%&Iaq$@ zV{AT<|L^>l`M>4cfBif+=)rCK9$E$A5A1sfLU=i!X7hIJzETo$1yNFn*vxaySmagG z473{&S|eO97kUnDG?sOnb_=V}#S(bgX#%v^ZGgrAZDj4(zkfg1x_|%4C)vyw*7IOj zbfHJs6&n_6H)?llk7-9V0fscKHmM`kta_>1ss2@!G}R^1JCT}2QE>6v(<<$cR0_>J zySW<>5=5z)SBGlDga*EaCrKXj>)p{_#}X7@9RPnpSJDpft$Xmp+98Wlb}HL_~tsB^Ou zT#IU5!RlI^R_e;qwS%KWG9#+9;nuRLscda_RBQIq@TJu=Yp;qfDqB!>Q+Qc)RoShn z73qk}9PdKhg_I4v#@!-hhNvoXM z7CkgG%5@)QvnRSyLw9!$u zB41fiRYhCVO$E_PKf9%Tzlh$S`+E*uP%LZo` z-1KyQ)Bex%*S+~BzWbk8#6O+f*?2tv)IUDT-<&@_V!|bh@C(>Fj&EIX@gKImbIwG+ zkq<7NF!b8CAFa69YMX66HhSu1@7(YRZdo@q_h8S(tK6}gv&LiNjwf-&uiwwl`uv~y zwHr5IfBAch7kqNhZ{9!pA$H^Bt1oYQHUH6HUa6~z;4wGfH)7eVGgqz|zWR?~&AmO~ zR;|KLuw@syg<8+>GRWJHmlT6f7G9x5>0cRNxfEXK z4c^6Rsv_{bZn$Jol5~(|QI{}6bh4kDwONvq?uS1Sj-&embRU=Gbw7MdNeF_R5IM1n z%(oOI>z`Q!6S5O)z+E)Ut0&Q=5_iFP{x$w%o?8w0*M+gAjo0@`AM4y|9qaV7>6TuT z$YN=UM5MdjZ@q2fV+0oX4TI}MBW8CuI7D+4T&bBhmAh$c)S1IpU#Q7bSXyE3+vnQ1 zZ-roQ0Ypb{)-D{qIq~Buc6^*Nxr29evb3}J2%Xqy^S}jdx$h`g6@Ow|WU-4IVCi#Z z8DRipS;vGqXbWqAfJ;{5MqJ6!nQdIUMwB?x_$M;?!>4;5T>mcq$NeKK;*G-2uSeqD z`LoFsyk^HQZo3umcn#!upMfoVSXJR8yKf8zX4TTJDbJ6r%vR2Y8T!o_}HuDOSnL(gZQ$J#Y{`{z{q2NoD#I%AGfUD}=TW-u$yv)*8AtKzML z$k#d7>&3`!=^z=G*;z9wNgL>70Z*!=y6z&CI5p7j?xZUrR1R!nKn(I4lHTy@!kM#f zx?|Fk7gpu(#%J9y^t{m{m#)pfkLUd)Jz~nR3HPkZZxVL4?zr?PziO=6y=2ywiw1BP zc!D#>j=G}u#5zeII%nhsSJQ6K%-+8VR|yAD8E#>^7t^G1Ap-A@2m~L>Om@lDou>`M} zY4>?3P3Jd9%R|nfhnztV6$V|+hSEtH11__VMpkB)B1aN4rrC3f>vL=XVJzu{N4q%W z3E5MLbF{x+Uym2WEERB#cblfp$GW(I9dmg__kpl=uFlzGWzXtjZ4w+}ffL5WTh$0r zQ%X~+OXDgfyL`vqv+}?Fq&xrigU{j-dq2RZo%wv@-n%#c_q2J3mp}GbLI(W(#0&Um zfBpnd+;Z^M)7RbgX#Vea?#h35%WlfZ)|2fK!>@+o}HLIMs2- zsS@AeRE3YZKAtq7|A?!tAzVz7MOlz}nHMABXqbqa3K*aQg$eqDz91*YxKIjvU9bwv z@e~fKo)oI5efT=~xdC|77G!?6s};N~6buEu0Y3pBt4<9pv`}lnv)1DOeR|6EtyeBQ zf6<-$Z_01MnLD2taL(9!=bpbQ{|8}bplr-f^RMlDGN0dg@xV<(2AuQRuMYpKE^JO6cVy5Nr>a=kf};SL$X9|+;4gZNfWs9l4{Z*YSiErQjGCVx2gzc z%6|Z6it=wzO+RyL!3zpQFxCOK+}NXszJ+9zxC=5vEkVFYaa75F3$<)@22zFPQNHTr zTCV=&o7^&C=catiGkIeZ)y)Rb%}t;i1s!0zsbIRf18B6P9#G9gNs`nEiE96!`mi*6 zrcwdE^54>idgio$tBpf;os;IveKfJ1Y2q6y@P1PR8@LZoenK|)jHgdOY*WunxYK!n zuR8!=tMQZU*`qOkEI=-*!9S6G*vnN_p_Dg7s!@V401VK(#aIj_TwE$4Dj270s;l~V zdR2+1R~0?o$W|pe4s=*^5$pCHVwz#3u+a87tPUGxDHL@3QgE=}mz3aBg;1TsaSfc^?}1f9Nu^K~2P^g}D>yxy z5$^m@_eZ(dcFwA*O1W5hx^phZE?TJ@xP7juczr%sh(WrG>(l?Xr+iafA6)I}gY3bO zbOr%vr&CO6(gc9v;l_}8cjRAR_fGzij&?l${YNmqEB$Qhr`xW$Y40ymLswvO=k-T^ zKw6%`JqH&o+<|}c&Rck4$E>dZ>OX(U*dH$&xAKvF`QuA2Zo(e0k;eh;D=2p0kv79K zz!HMKz#yJWDC#=(b(N?BA({-R*vAy)5>t>JQ|QdfNl6lEZ^|`j<^r~WPu+6Ey*|sJ&(J_;2U;zRH)#g+fRm-5SoM52avOt(aww&VHwAn|e zuvWtQ@xA2hy?c8^VQ0^;$ds=~lJ=gl@HEc@Fx>z;=kR#e7bed0bB;iyf+9E&h8u-6 z?thC4M~)1K3c4LIIS`76p0LM*9a@mLWhvGXI_a!^=vi#?S$pFkdwY6+d)u$p-d0xI z+p>hc4M*+CYITM=C@HKKo)y5~fv?`4H0Y{G>x z`yXe_zHr9um}S~Y92>Jo`L|k2g7t`LleaE`OfA>iwxGGEm;%w+0gO5o^PhGAM^c!1 zO11y|UYgB-o|}6A#$8M^7#v~vXI@HXiC2=Jiz|(l9#LVa*P&6+>%!3vKH*lBJ|?b| zn7DGv#FezFeh*)0&&p|y)|lzzYfejEv%>-tY@SQ^SggIM<&r*}^jW^~zKeXk52q2E zy=2GO&mDXIpb$((d$&32>Naz2$BNkjB%pTvwY$EB7IR{qphd;avsenx$aGcTcf!q( z!Js(SK1`qatTcbdsM-DYw!X0Rh5dM4c*C_L7GBSNc{0-V%IuG5Oohx)xPW2?nZWd# z;3}FjvNEhj9V`w}&s8UJ%el8X=_>VI?p>fx6!jV9>nE(@ZxNp2KbHlS$AkH|c=|rx zK}+$b260Kc0y^HVXS{T8JA9T4Tb^#q*mh65H%Rw?WQ~ZxHLI)7l9fp0EWR!r{vo7& zlA{JDTCh6}CZM8ct^uv*M-9uG-#0r5Rnl8^E z*>stM6e_7ExOCxPW@xQHvrl%mLUFcb_u`9A2`Sa@57`Y=vm_?0|s_L6t7 z)N?;s+KYOQ9RVP%C2#lq`s97&@aK8nwne^{`3-P;hi^Dma(o*_{IETL4F6Tst06f*70i(WR4D~*QL^nKv$=T6B zuG4HlCm{5h0R+%u2RYegco>}mBn3gB^K$!9N%zt}3vQiL5GJysxsa?7RTCKonFRp) zdK&{E6Vb_Bg(pAmJo(9vKJ)Bp|G8z)9`p6r_t2?-^#v0_&b<3_iGjDs)*M^&Y%Q?0 zOs&0=N`$duAYGLHxlUCERkoI#!l6tRT+Ze$3Rq97-a&4*5+Do4F34j*nQZPEJsT6) zNp_Je@*t`CF7-ZgKet9&BX8iI zlteFayIlPR0zgD$-7xwKGKjK%f%^h%VM1hCQ8fsXE|*Ei=_2nEFY)dq8z6iP*eWFD zE)u;`eF@hJK?ciSc79p7i`=Z4OdH=eu%{)of0XObk8@j*+sJ3 zlfp&95&l>(K~dwh#arGG5U>U(2bD&smW#b)+xYs$C= zHZigDbl6*%y;tA5pe+YzLR*H2j+a64T%iB>6>%2|pY%VQ4M2t-8q$PQK*w+;_S}c7 z@YMdn$Y4Aj3%l~!XY-SVohQD$^GD+!^TUa<&ejC@k|aYIl8MA|vceOhNHWg>jW|)H z5nKt4;GF%PfKj3-IP^&~VTqm7tSdhB`VC64TT>0}_WOX$Bn z3YqqY!W+niV%X+HqoZ!@H~s!tC>G;+llN;OEyiyQZF9Zo;zFTtj3mn}&p6+>kQJRQ zOjahD6Ft*?Q$o|j+32L$t)csg8A))QH=!wkK3p?UVk7~FYi`R1()6X&=Sp4~lE4<} z@JbHhmgr<4I;aw5lXP4qXZnRi2b_Vj6kSq=%iK=LbUP;GE@tNLG_{=K+eC#F-IqmT z3GPPXGfq`Hocd?3Xe?vD`HB&Jr+X*x+A~s`PcG0H~b!#z5PCpUH#def6Tv4UcvM5!+Y~jeDHC8UFYxd zl;`sQ%D;vO;aEG??#_Q=S3LP1@O1-)@fkLwz0@M^AHaqBnz|pie@dgrjkx9@PnF3VcquE4(KCW}2@K)};ppGwD&`QSo!i z@p&dQTL69ZG?Q_8aClaiAvE*EA7=A^Gl-yXj`{eJj^bVLi|0K}rLu?(W~&iltQ zeApkZ6NU*q;e!1*sb4xA6p)zWd{KeW4@js=B-|X4s}hnD?PE025~GQhG_;~=Uzm=r z&v9CxlLGpv_tNq8IZo>3`EsUvkM$Ba^r8KsJjn@U4~(2D-5g<1B={8fw8 zp7PgI?mD)RnmFFd`WA(1S}21&jpobd%eg`$11+FIxottr3J3^E?r=I?mFO1?R=J7A zaZ(lYZAoz_m~XoazTIfQrq)pM`Z}FMK;KHQ5laeT)b(NSkb=*9C;&92YxsYzSddx! z@MFJwDZl&K&G?*`DGvOs=kSJkPlNlvoBu10eQ?>dsh2*St6!11X6hb1?Y(#LB|Bfp zKk;5?{^Q#kau4CmR;=Ege>)Ec=l@u9W`x?~dWim;01?8df-GkCnDS~a>>U!HQa)3j zSI#T!MLwCWCAO}j#RNJ~>~%RR=#HQ{g14*pukGIGAlM#huc#U1p`XiY2APGeyRe17 zztdipw*L;tn}sd?yEO`gYS(%3^O6^8)8g~u3zT2Fu6Ey~u5{mPY;9tSG@yG?EBC*Sn{rZ?ng)%!NWIRl#sB43_AU6MgKq z?zfLC<-)=7Xp@f0GV4}*FJL5KodA!3Y zg}`l$!@7WpL?amwa1}2sE-RifAw@PT%3&#zkJi{$B|=NVmNqvMLD&tf16MG|DB!DI zPy9w}HWUo`D!DTVAZ#T=TQ-F=wVvFv?+=S!IWV^0#4)``_fGuTq|;NQ|AN=wwC4Q( zBkW25qbjfU{qMftJNufa=_mp<&X+E-N6QhAogQzVo3|L5L2xk39LkeM@=$t?Gt|194* z=ldUiyfBX2Kkqj;{^;$JbZYLpLN^+J`@NGCVQ3xG&~)RBYslnm`|wBXr`#LVIA#j; ztazwOSGQosB^Uec@%1w8D;RNvC>Ew9;CY&>)~~u`#U;mGa?Fu&ZXUK3f_4OC3Aw8L zmCTjw8fGoarYk2f&GGY?^MwmarX{APrdKXt77Ohq7gyco(y3afC`o zr~tjPo@@zeN60urB|$2u6RAqer05h=nVx7gR!mJ#t6P%HS1e4gRF-Qi^sD^K!Z#{6 zX*U@g&2_0Y>CMdD%3a#s#(m};soT;IYTq-y7bvyU<}qa%Z!8m)GSw(UQPoi|TR%QS zEyJcq8*^jqt{5Fl2emP!m1&gbf?Tmw%9W0hN=t(bgifSv&|%d#$Xy4_=G7gu{>E}+ z(kWe2xUzUjX-pJ&mZ5o+PL<YPPym92!bC~bhC0zI)QfmD zfOh88F{MeL@7#stjXAQUHS&mj6#NZlNu!#$M?zvXo-fVbHFwcYV#P;w^&z~)d# zmUO;lPmnW(7dZ*@!Sa6KhR5(TnmO?ZXWSoj5UanS4 zYAM}NZx?k_K-yzXF4{HvfIk#uL$IESd&{)%(=PkX#_OM6(AIudVdea;tH1U6KRy2C zW^TXn+*3OrZJvYZ)ipg)+`-FNZ1Yo<=Sx*~LWw(0R@*Z=F%u2(nd z_uRkfl6egcE2_@gvwq#dHETa6xY9Tr)$S*~Xeb03Ebo|H!4Y_;${_r|RR-RvG6?@q zl>ystjxNQ@M#0u*(g3|?chYLD+Q%mmT}Qg@5!!?7y3Wy@0(M@sjr`{h-u9o4wLk4x z_kxAwkXID1uH+?(R;<(++H4yIl*v^-h7QTA(-wLNzy)@&wjc@Pe_MhJMZsGLf z_ap6NX5Q((7x!H85^#`E5{|;Alc`+#JkVgS))}pJTmy>*+vSL(>M^H^GBqkCcGqb> zFS;D(WYT(Z9Z18U6uqA4$o+ZQuW7%qU-v`jAWGRiE3_lXQ3ov|PqVu@QOc?AVZjCL z=Dei751FM*agxX(nyY*FHS^uqJPi$$g+h>_f>a%cYN#qEE!U~z)K2v-@h+)X9aN92 zN>Xi8X_i(*+8(r!kg5Rg+}aAwhxoT;NlJ>GUlchCFFu;{(=;dHxB56KQ=+s?M9XLq zigs1aZ6fLsdqw;hp`1qNs+upO(F62Wnx@GSPm*in=y6;p*UJrZ$2pE0pzqwRbUtZ8 ziQR;`g8YO{iz_A?ITmg`gV)dQeDsgNfqj&LmGHm%BrhU&qMzW~&MeIAomKeR6X!1h z#z(RT7yt)kaPI5VykM~Ra+D}KKn}?%%20y^1~wpi%Fu6qk2a1?l#fC8zC832xBsg@ z^sL&jfvtwRA3)M`MfstBu4w zzOZvp`dT2AtI1=GKHf#ok%86(HdR|G!57x(OvA1EfwzI1yPa^*)fyB zUc+bTnubhM^LTwe1z$E=QyA4JD~LB~pCtQyNsH@}p*1b3GJaKM@FHLsn)Yd$s#0QI z00ly!Xj09oG+vsQ?MuqN@}SJf1888+WwyQ#n3%FaeqNm+{`6Nx60>I>mxz7Re}BpOSj z7o2+u;za1o@F})W6G?r8woz4*)S!{oh$;~2N=6dhR8T)c@`8%-=b_3shKA_u@xlX% zvhjgJFMXQ+Md8kMt!)>hJBH?*{*qS4OlT`DAiP?uah$UguT~W;u$UWMmih#=u7N$lZf@><8qY}Z$#uqB>6kO$JgWEb3Squ{|Z+s@U$YAV!e}}M}*^xMSF5F zN*E{Ru&JG;wkk-8>WJd_`BX$B5f1jjb539dBK=`4b53-(m`BXh#g@4iPcxi&AmZvK znuT=-^arh840Ezj#g*vtvSt)6BP#KyJ&|S_s}5W!xHNr;lA%!vTT7Uj>08O$5mL4u zSj5o8CK4tgp)62Mf7Ukh^uMvu)2}RMp6q9ySvu>v=S~Y(Lml&;LKhu|*@vqkX3DZm z7SSfhXDPvp*POurl;zTh;;l9v(lJOvz-PrD+eERXUCUvHb(%6`yC@FEz$l$Gz}4aW zm>L0vJ!OFkPeb4ybl>5_g)U+KLth?#XcXI72YiwgLO2Dd@Xz!W(9Z8*9`Y67PHqRM!>i*v}XB^O+6)ye`deR~~!|z>L=tBK)7CPa*LoAmSc$1;C z6!P*M_U%7qnY2LKVRAB@iD#uBE`ct9Z~Xd*hOduw-WmhvN4`EPo6z8?m{5lL3u_J^ zM)wuE9^xzU_aFXqp$mtzpW-i8ZP&zG2@f3=Vb7c58k>T%O9r=ycVzG-POwiEy1xBw zd~7lMG}oZ)FC^`qVR0V&GlqQOXG8){?d9MeY84B1o0L^Rrh zg#mg&AKJ_e(4D*K2;2QLR7Y6~4JUSpaJ~W)CdB7`sE2lV@K6QQfL{O3NB@OCLl|GE zS;I%!IC~CNMKv+y@M&r#O{$4#(VA+lrlwh&7-))3t~tM^L+hwnu65OPj=NjiT>XRK z52H_MfhwoXrV@DNh_pTObk*L-^Hm2T2djP`c(+QN8bqZeCH0U%*y|mcSD8Q@=R6`M zLWyv;wx+R}ZLU3^omra~7iX^$yRz%mE$S=km)e(EPg5gSQL`@97^*MxhcBzXzM8I% z*XgbL1Nv5dSm(CtJM_KQwz)WZ-z z?#b(VoCyukPwx&}0WrbMYGwJ{h2e+%@i@^f`@2xnD&_h(qf}pRUQSIhM^%Qua7DuWy!*5%{^Eh;}YbKfT%}|{zt!NzAJlITcYevl>!UIBH zJR~~R?@&5iUguEX)H(P;on_*4o_t;EMgAa9C-_#L=KW62;4iZ0Sg$iS&+7nJ!sI<4 z2AmQm@_DGE@H$|Y(0Iy^pES}cNXXbMTp^n^vEc>&yko^|32H0Z4?Z9n(vfWIG5qj| z#Y9&8F^KL!r3eVo(x_9i*)= z!~x)War};;4o&cPLSv;xHgXOPFhnpwNM0*43@_-kH5`kd#I!8^+43DP%vdvX!ismU zMh(;My!FPCo#E>a-F4^FZKf0|e<2>a;=uLo_1AV?^H`?jwuRH5xnu68xqe-Xrqc3t zW6oaO9qztocJA_7V>cZC>W;G~p?9m|X4Ra!nVpx+JNpKLsc**Xm{inFs)Y8!I=&fk zs*&O*aML)hHL){6ClclHhWNShRf*mNKiSt3Y>8eFydc^kc4&)?j^L%y<>E^18soa) zb?u<<13HV{ zS}cyk3^@?j6*68l0&9j{2v%{_C|8~jrw%E|RB}qE(xb4}B!dELRtej^G$$Q||G3l4 zXOT}Tgz*GQD*$#8RZ`X>4{a-<$5O(*c~1l7bxNtM=9E%dtM(3fM+4(%IAgOsMe)QaXI1`&{iELue99!kjaLZICUkOkx=+KoWFNig0|mK8iTNIo(O zLjyPrN})*UjHXc_08!l4R+lv#JA##eX!L@xN<^(Nh-6KXcCW??-H&8b4_IT}3d_g9 zq49!6oS$uWz!>bwJrf)1OX+|~Rg_mU{*a5KV9ZbYSMR!FM|ZC9`OjZiK{qb^&iZHn zW!?H`x&1@`{lL5je!HgdS>f#;qwl@A@SfLxcj)EUun%h+KFS=!ej`d>ZpDS6;p0v! zE<1yjk|P+7U^)W1MD8rTQNPtd1~H#))GF*5S#Mks!f{qXdO#4#xfbAD3&0^DnB-gw zuy0vcQMPk zb?PduN87IMk@m`aR5hq>R{ugXdiiC>^~S9RV<7AXa+z_^f7^*a7Kv@%r;g(k)-V)m z%SRX=Ydlbd0xdOkHFdAHw~hw(tVxUU|E@kks+p^u5dmyE&5k4ZA0WV3VHX!E zHOV}d7kdaV8wQPK71E!8O|K#pr%+t;Sirnv&pbO&FOX=r>?--}r|%U0XZ6Q-J@+4p z9g$m?-1+nqw=cgR-4WV%5S1YLSwwHz@n~$t%3r?m_DkQ!mU24Q-1n@>OWFsP@)nt9 zwY1i#P1U#w{t5Am>5JqG{R`q((@VK!(v|+s_+a8q?k(TDkq>+y_&*DM8uC*RIw+;6DnULML<+1sGj14QweD!9!tF ziG9u#d6cOvPA7*O5cT{>u0^Fi#we?5e51Oh@s zmj@ykVrM-(Sy&#hwjKaViB5QQq7xpc`_JQa`FWmqJ{>l!YrSHTO3mS2v$Sk)-kTDf zsuii;63sg+|DteEcuyD>SfYLN1V$)@B@BUqP--o0&`1c*geYiaq_nZkWhY7I3;1Z! zG{QlvB^%qzmLoQFN`6KRCFy93?P3Df{uK;1DLN%9mZek#!?KiQCkqJt%O;GPuqW-Z zZgQ7N%MRT7*1F|y-q!iOy4^#`XVTmz` z<#%2^Kz#FT?3+umtqfp|3tD+gf{F*|g-i$6AuUvvF)O(1rDcj3u-M1poFB+JXes zW`c2}*W6~(rpd$Nz6C<=y#EPQxK7;N6-- zQ>Zx|^ni#+l{Jk!HKauoB%4WR8p-`W5_Tp~BKW)$5bw6V_2O|0+`}}?qm?cW>sk! z>Ta=_MC_4Y=(UdJN+@tqJ=hy?<7{D&Iz+Y!X3ZecF>R$und3~_$Cxtfv(1|v1M?;e z&baAimv+=;Jq>jo-7XVnbzb>}GJx|@8Bmb%%%%Hl|Ms(w3!fqXf4qfsbo!{=cgL0Y z4!uLqS10A~y5%X94?W(G5;#UtQB~njg)hzIj{Vo5hc=&g&32ME`>-1J;G8{#F10$a z{1P%Eb&+wATx3<`hw6{Cr!+CDRcSjTgAq0YuvRqDSR!hSYQ$v}ptF7-%kY%E)sOtc zKI>xb%lmTd$jGi^5JL8Bse)4pmSX4!5wu0_9zO}v+gvuDXzZm>Bu7k8B&T5$MERji zRRv|La$=OITDw5?x!sQ7x7!gufw&5qtAY7>VE7ae(NT|wBQK!+R2g*=$v7F#o^;y? z(w;!D9xxQgvd20|9jgUsew#hk=$ha3@RGobIIA%wZ;bNrMhs<0yk?XgMq7fwBR zkom#A-76ZWU+n#{JiYUZdrx0Q?8Lc+`OGKSP7q!v3tQ+^6wY6(r2Q8t)BLdxAp+IK3Cmi?{bvr11W$Oi`KUHw&Yp8%1LnWV-+oYMmejZf2)t0J z=!HVyg$Vl}9R0-dLgZP54bb*NA***D3)o?va@nX;_Is-N&{_kfsq%!QkO@a26ShKz z@`==o#zEsfW7uF5MyoLo$9RreF>FsYHgAAgF``86jB=owi<3`e@p&5HnT$xbc5NAP zPT9F5mZjUSh?{Qz1P%%;&Pl?QdBkRJI${<0x^ZBHqanOVgA7Ia;v7Ws_>8ON!0U_8 zIv?;=f$i{FS*aD)V;hAn2-$3j%sfM$S!uB}5x*6h;0zqOnaQr&q12zZcH^C49j)K_ z$K%(%e%}i>ZD01sZNK>Bk?k9AdGfiNHaxi~IzL^%bV<|Bdr-@}-$&@)@AsTu{>8x! z&oDKw55D;7FJJy8u_s$7ia81u+*ho*#voqbfe?YM-p@g1pJpd8)0q7l3x@)sNMlI! zs2)GVAUBXi!2y2xfvg7 zLE7&qk>61izoTFNwAJoy;*WQn0HaB~Xx=A#G!36}20u>aLSW5UXL{1r^nJ=o3@IAS z7Y*s?+`x>susg=?&N`!$-PsePwaOu@u#&=NWRKwLye_15UX3A5#1@Pq^@B}RmeAS9 z_9`+ZGaR;DXSmN|f%a5*KwbENXG{OL2G{>|cK^B+ZTGd{bnx>BJD&K_ z&}Hc`&e9Z{WDns-ENkHm^g_0%YAmQ4E0d4Fg41Ljr^z~9 z9xOp6WTJNLT=7hWTMfJO5w*&?H|FbD?Jhfw{uA5B${bI4%3ymGYabj!Q-)RQ&i?*> z_S1t0zY4IKuil~P;l~Q|(PYpUFWPMBOL20{5!7M>h9l_C@}rA*jU%XzpcS9vELz49 zR7cS4@G_lexiohc+rVw+xRA(k0?X1Y=cACO(2QSYJ)9!Au1N)46NMMz9-|k>K%o%! z16o>^dli&WT9tVULuS8nP2?KbvtR%VDFAvZrGQ_l{RlyV zTIQOh*x60B&LO~07KZGLSH#oMu*DQDVhvq1jf`l@F(m0ijIvhz8I6^(T^<3i`kb`V zV<_%Rm9?)GviRUhD+!?p+uUEcrhHQCKmS3t{i|&U<}AhL z4zGLW3o@t5c&!;8(%#|wTA!MGdY2u^XN%!{k?h^3f6vA9yp;m-d47q+7~0>tlRP6i zOhi_%uj~ktBarE!9P|n=WNwgYFQ4>5ZT|RfZzZYKAMeNaUJedG@&0)3c6@|qS&rqK zq#0Np_%ZS#`37d4{0{RMUf9l~3O*yG#b$nz)T+(X7PE`_MZ#ifBYPwFi1af5d-iSq z2>-G0Km3}|Nl9fdKKoZ5YH5$vXY}y)^mGLrXN#6*|@dDwZr(|{j899k# zp)67^l1G6g;4`K*Fw%xegDF{r8-4EbE6u?zfMAiOWHsdO{W`bhcAv9?M>^@1F08eC(6$|n>?G81Q zq8{rE)50cgSX0Fo25#+Qur^yl3F&r*mckktQR?VkY|+o>WU02KSrSW1TF4Y^UkMq8 zeX}nKce~1Ll6ja>>!$3oJwH6yR|bPjeL-^fr#=%#Xz?99QsHiw;>@@a6pFl+_gxl= z{vdugzrO`;NOyH#nEdizcg3uyqmIQ^31Osh5eAwJ8Cz|ZVnysyS>AG`q?;(z>`d80 z@m;_c5Iy~IVL5v7PlZQs<@TR`0qrcTA6iN$ZYq!+u5QErvkCYLHhtZD7MlUT!B?K) z6N^v%1`l|Kr*pmP*ZkVPJO}OzmN)RjsaCWqnLW9(CvbXC<#Pr2T#8l#nm@MVAazD{d z{G3k3;bEtD(ROCkTz0fGBi;-O-xjL@Jo=jN+D*yU#j`KlZT$dRK&8Jxa9~Bbd~YB@t}`5W$uXB4b;%_z2E({Zj=AKhOIBTNd74YsU9#bl zeXexPbje~YCHSAgyg*1ay-s2TATN?qre< ziOC8n97{?JQ&Ae{10=%|5ML3EnDU`C>P>G;(`oEv^>nWXd04WTYmH!-1E^zn*a4kJ#v| zgr)wvWw%r50kmQFnL&kBV1hi zz1kv2XobzD$y}0)<40HhzKmb>#E@4DI0=S>kp06DF(;dH6q`!KD*+sc>|Ln{62q5b zv2P`BCARfsGQ(Mi0ch+F0oOJpBmkzkQYw@-ExlmV zWH$5A+{><5w13Cmp-TG4D=(Y;&=W%s(|sE@wEf^aLx-L0^+UX_gXlv*S$rJB`{*al z0rM}+N513CNgvOW_@Er??Tse-zIiD8et0;{CPlyQ4|;L-iuj-=Yr3kBN?~=^%GZl2 zY&@^0!jQ3sA$wIIZ&e^~Rf>750`^WRhi5=h69PuaTk+#B?INdaS3gf$qiG7H#tOp! zl(}K(86i1r_;{FJ72X!!86FI?VTNu91RdQAI@%a?;;tZA=#%{(k4?$&jj5}AM(XNu zrLL@Pj|X$!GgINYA)u`;{;`tT6Ohi1`j4!`t^!ldt;a_4*&y$cWKkAmhBq@FUXLL| z_S$MkNTIq(@DR&MnjFN+#c*CwDbB%4it1$7=UuwA<*{||c0Sr>%KbGfX0G`On|XN0 zv{iHJHx8|#H(z({lm}lOdI3ABsl!LvN~|p!6+y#9U-kyV_JH6~uqk9mg4{A9Mc_ZY zf*et2@H53czgWDQ?-IpEbFz1Ga6)*RIomrsI4#`HwM!S89o~-Mh2d+tYo(>;wccxk zOT#yyfW&j!CCo+KMe-%;N@f|iOkSzVp*Smeu!Z!G!ruI@3Xs2uy_tD`Dh4=P4Af01 zZk;DUoyRVnIwf@w>>*`qGXr~&8HB-{o=P{46A&esLQ-IaVmk>b4!(yiCG<2CXdlbE zqh!ToO}7h=Q}7y~RGpx^z#vLN6_<*GQUPXf8!s^46!7&>IsDedD$k(|QMF4= z)c7cY_w8L4-I`=}XFG6s+A&(coT+G15`y-<1>6GZ3hoMtC1D;Is$Gi5sthS?$l6{} za1BZ~SsTg#TJMI|rap1kul|UFH-CE1dxc{^>)W!qZ}%Nr`e+}jynlV+&qJ?$`fXH- zv{!%k>g&Jy-EZ+%+EVCZ%dl2?sZ#V7SfRD5ImSHOoNcnL$(>0$k*roLO6mjkCFho` zO7k`8-1hni2q3G`^n*Cu!7B+ z*}w#LvN@fdWiBy4P(Cdwn2JYdf^pKO!3X2ILg|rF3KelFRHUd-@q8q8NJgfdlRM=e znN5OPC3E(`!-qKqW+1}O0ECmD6-h*_mJOM#5(9=I)*@d6-7r!>bWD<6Nz6s^-ZVvh za|edgcwxF4FU(Pm7bnkbyntpi?5m*hA~B;Wj7D`{6dNzHgq3~ds6Dj}bGglMzER~{1FezSk>1j6rCg)0G1gi-)i*V^z_%cFrSHmEXK7FAoBUhe z5BZPPPr_z3U9M&W&GZEIe0sXNgzlmbtA7mtCHQgV!`NxsK&@ zMrjK*s*zy?`lm<%+CZj}GdhhPgDnNG_2Wd z-g-I=&lqbxj?$dDNoy{Y_oTj7V?Lv!Ay<_bQegf7+!p}c7lKxzZB+|PO3#G#ZB*X{ z={tb_iI%VHhov5f^@Dn_iq30F6x2f*tscl@H#JPO;rdZk=GvNv7yi8P+4XOH>sQ^6 z4V68+Va@g(>(@PA=%U55=AyAk*jBi0`~9cRW1f5MwO{`F&9{F|;+i`sihdbuhX=uq zXt}fMe8^-`1>4A;$1Y&6V%M^~U<@c(s_GSySf2DDA6e<_=Jw0q{{pH$9h z?OZ+dCOL<#!$+B2_#BR7OCcLCmN$#JLWJO4O`!Hwt|j2!LL@V4L#+`x<&rC0a=A+` zbIHkK5P3_UE%%pCmS#y)Q~B~`<+n)pOSh-C`<|(NiP5A`G#nZ?yY}r67o!)_v{{ej zaJ$$pwae{FyV|ZT7ne)R<>kt9b-C7`>8~`%@MNlbVrq%JSXr7`TD7)fZK@~rUHM1q zgH;dLJ~ZwL`6>1B$|tIJXMU9lRyoOBxg%6KLdp@UEEvvy4iPFGA>{}qWD>$#+Pp-p zOsg^*O=beDGPWd2N{{7{T4+;=v_|GdE{p7l9E|WrBoVnj@?L~ZL>`FHk)LBV3SbR~ z4u+hcJl!NbPbNBqXsa`t01f_NBXl+p`Za{cwwJ6dp-bWcfwdZH0V@B{fx|z{`G_vE z@v%xGilV7V&KGX1C%;|~#p$qhOUy(B_Q{SU$!|uI3Y(xk)py@b_mNSX@l_##Hqwz;QB3Q2ak2UBa6 zIIYbJa-O_V{+Gkv+D0uG6ZU&32P+3Rg;bjI@Jg$sWPo(5FjK z7&0eJ?uz`eAuHC;RgNjG;QX~2kLfjiCc~F&$rvS72{FWt!8fIT{IE=~h*9MgnkrVy zF;rD4$$XZLQ3(M|$ti_UiIT~bjJ38?9jip5 z(Lf2re}R!^V6sQ=nR}^LW-7!}+e4Hy%8U&W^8Gy=>~)72$OK`J3j>xUnjcoq6-s z;S1X@Y^sQt_~cZ>lv~=DY`yqdY^_qmpVKwmBUA`o2MASi6e6UI8rmF@1((dbWSMZ2 zW(YPum`h=yCxR%XYBFM|pebby8ApwbVwmMrInur%e6tDE%5nInqG3UtCQa)URtY^q zufS3`eb^@K6b6Mu0uQ7~Hham>@8yFbZK7uFpv;5so-K zx-5b3mU-9)ufD#{P6W~+t4WNsdw7~)$5NQUrOoICEmy3pz5Vvxd-nLURi%$^HP2c0 z7=7ivNLX38@7|&B&Z&(OKXV)QGw-t*{IU0074#@+oC<^*>7*}6s7Q|gFJoT<9#xSo zT&Hd?_uk%a@7+nK)16Ltr<0IQy0g$BB$vf3YzYbhB4LpblK@5tTL1+_h=9nVA}TI3 z>Ztq<3IvHb%(&#a0_w~-j6Oi;f9N=)ah&%U-;C0ozpA|mdk#{9JDR72V~Y53N($J1U& z8%$HA4KK3|FW{vX=Z?{J{9(mG03>*X_k~Xdg)pQz2*Zj)Y6)Lt3-|QZOkWV#T!X-t z$%SdoA58S7*1~^0sgP76*v{#Sq5L~U%%mwKz0RP+s$@KRP9-U{=}5;LlZ$7$xto)Y zfkc%f%x`4VRh-7AVr)<~w52+^PcRr@Yi9PVfnK?)4Ij>XqF&PUYK*r`pMKAn-h;ih z%j!$I@V@x5T}3t1Z`geoj(z_z;es@}kAiT4h!_3HyKaQLH2P_GX>1#w${(qW^H+Cb zQ=j*dyR7X>9*MjPRKu>&*(~f`IB%p!G;@ePQKAHtWsHe*)Ycheg3aVA=IH^Gq3Rep zL+UKjIbOl-Ek-%y!0bFB%U_Iar4JjN8VR2C2mm! z;&Y|pFdt}9#Ht_rK)0$?T+$0#B``l|gF&Kh&<2A}8uo#fM3n&>MClFmhJYpiuov_j zI?(w?Izp=?<_Im;o4{13yIq?l8WyUA+hvgu{)DV*P;FxAlP1V|4|hAxswb$gGj3pp zQ1j&^FA!FcK9epF{K)6IAg?*a3(cu4%hctW`8oF|kL09gzRwk@mDOIoBO}J#ku@1H zZI(U8k$-xB)EkpnXbWo$vb-@tb`3`vp2MbB*&-<8DOt z)5F)y?t&jj1eNuTrat^Ok4+FU+3DK;Sy><#Q0ZnX{jbTB$VCX}2w^D(F|iJ+aW!8j z)Jt<=2A;t;2@TRxScDf5YiK>JFpvCQ}(A&{0d5rx$S_7WW zDPz!CiR2=@6sH%L^4P9cDNa@F3h6VV-+adQy{BY_r0-9K6i%tUgbj{|Aiz^wDTzIv z;*#9Gc7kG&qB5C&Vfh?rW{c}QVGsjzZ%&@RIFTL`cw72dx`*PZJ;nxZ(H6rN@}FkA z$~ttF{Fn$xOUBRROQ|eMIoT$aDQcuAU7%IIqziOu)N9SbPj<~t)N?KIS3A2q;LCj+ zuiCdJK5xD7FyWF|VmjWS{2j_gkFXhzsWk@3F&T`-m>$#)jlS4#A_rU0hC;cy+DyO4 zO!}mebi+)~;dGPHuXL8D`vY9L@^EgjJa9NScRt!ptef_{Ta$j$6%tVz=|mvQ(3tWV z9?IIwmL!tcAw9vCi;%|cHRxpxBsbHXA-2I8+84}~*i=@D%Sxj}GbF}%(jUd)2!xO7Ag2~^D{@^lrPV4V$Z^js9+|x5y9u3J{bk3` zy&jlQ@`z+>do*!id&A%$YE9fo^J3uu3J{d3(RsL!bk8iA7(0cY!umokT)44tcOh4( zK(%=QnS6-qgw4xKNLl7Bt$dA?oyf}WLVqV^(`7vlkEt4i$GAul3}arxS%{TdUV?t2 z)CBZhs?=k#zr}FOCDKx{;Zn^bN*x+5bq-x5rAEtcTqjfgq)rw^dUU20*HJZRW8LmL zT<7W=e7~1gS97&GN(tKfhD0az*&{VpCm~0#BMT}!0xq_4XtAhfX1c;IEVN+^Q!C2#W-)ZLrb6S`VYbCRQ&9mw84JN5oQlbXD;8CsRM# zEP=!qgM-NoovQB%G}%eKKqE{?V~-JK*nJXviKuDWN&rZzXUCBt9dYA`kgys&Fz5k~ z?8qqg$Qr5G1J~EGxug|y7`|BqXjX3|Rqwl`-YBg%? z1P}lBNG*+`I)~zI@Cv-6=p=(Oheokc!~i8Uf&+_o#{yJLlP)#?4^bQxiY|C(?_LCn z*x;L-kHx{5oQea1P*pPQ1>*YPHd(|#s|Bax>`U+*a^yLa!66(~6;lUdsen!71;>VW zW2T~BBw~uGk9>bDrqcfF@-X!3{9)*K!JE*5vX9_QW>MRm#kXdDl8G}p#;ch_2w`jj z=nYb49m{RJp5+0=)C5ve2Q!J;eowGHTFApT2wobR#Q&;Smkb&A&D8`OLo@j@oA^W- zOgDK#k+fY>mUuGWTT)hRr60m7pd^p&y}Bh@AY zw~-No&~5&_=Csqv)a`1YIcoO7?B!?w_{yJ7D`zmKrL9pZUdK-=4!gQBlukub zk21B&u7>j1oXRC*e4Z@z9o(`RRX0z_%(B`*@p@ZjWvSa&ykf=ZY=%jW2up8a?L*$Z}ZM<+_U%kN{#HE7s#+zK6GS>IJ0}nlXxL=LFS7_U9d_I`jfa1iFl!GF+#elTphCf2I)fjAaZ8VZpES@k>(E2 ziPHGxW}?@{jj13SDbeaMx;SGRN>19(N$sLYKd#fIiD?usM@1up=Tan;|K0gUSVZ; zg4Ef*dghGDqr1jtcN6%%_+7k>z@LYnXYd<+ykz!CQw;{25`u-~iC+;gl?3t-!Lv5Q z8JwTinTD&5~i^jU*|RAp-k}j5MdyX3H2RsB|g9Qi?|DzPV)VQrp#-3q<8Dvt5fA z)ezeTy!$MkyfHP6wX?KVJ#U*nxnj)dD*NuxZEN>zshKcm#-sc0zK{Evp~B{#Ru-wi za0^uA`HS<*?Hx0gG?X=(ZHp&1@93ms-AVAnGeAcv$0>yI-w@z0iSqQ#5ha8rIx|Yh zNUSe-CSiiF!GAbaMw$NqFQZKV?lI-Ut7QQFPh~#4`W}=x3DsB2@c)Z4Jo@jG{D?Br z|Due9{&rGImXS~^YEs;&n1K z-@dLia!ZHFc6}pOl~*>B->i8}?zE$uh|QJ-5-5Xfpp;frU80rdVE7Em}G zmfk-j5tE2qN@wWh$ba@6gp+6KZ1VYQ9{$nu1OpadR!MO*5=@=Vsk1$G9{OH=&Hc6K zYrntt-hWN~L+|5$UszmRcpp9dceE&4lufS^WfAi8%V<$i6kkt|@ih7Y-ZK1b{BU7$ zB*Gqsx9E3?x%Bwo^x^yH6}LY^=M0LXiF46t(I?~v9v~Nuw6gW&0H-41l6Wn-y1%fn z7<*C=CDi2N3tH@>;=NZQ^>D>W9l^?i#FUjnw66Z)#2Ipc=s`=?!i8Cu#z<76r~ER0F73un#BR9>B9?;fuKYv zeC9%bJks1xM$B-3wE0Y|xjEiX7`m*)TLN@5htJ9xxrvF*aR0itwmqM3cxXL*oUku_ z2vnd>{EKMi?-Q7dxH-s;=E#`=YpE4Wl0Bq0YE2=%PDcg>H3FR$$S)_7*Y=t$7S2d< zqDLG#rZb$-CEfwn%ZxNRP59zKgnST*NaS2p*bKv31;J9#?6rE;Ln9kiuM+R?N$ai- zM`u-5SMREaKO}Z!)z7*0v74GUc21oEV@>V;(8S8=vJ<+yA1&F_xnW9mbTq-(2c+d; zf-xImvT3rxZVV}1bZ$lyav^Y&w#s_7QoTq0xEd3^LCrZ|ChaxQRv$4NQ20FEr%jvO zY>bjC(&~X|ctAQo5GBN=+h43q4YVfdEYVcSU}3|NFAFjrGc7t;uyO6=>u24tG4U=` zc22HLth%dm`tG~%^XjR8sIHv2c2(^}SO)i1Mia|=s>f|1xc-{Z*i3NEBcjn@q(mVF zufn9IM~E^?8bpYAdf+r2FoPyDo#MmX1CD{jChWhQwE@O~ue%{}DX|-Ii9Zn7^9bx# z_Z`45ubX@K)AOgV>%M-$k?ta2PL3}c&I-8huL^|= zbLD+l40rt|7-{Po724fZRa!iD#eJ`~+S9{DE{7vMv14O~x1uu3O?$w30#gow$w5r3 zNwS_zvxPF8<`Ch)Oh!&YEj%VXFJKS|^QTiLG&0S_nqtBq67xI-i_kKuMwAQzL;5SB zCbf z6H6>6Ci%mQF;;f%v4h?2&FJzN zz+iEUx->WH7QOXOMjA?_~(_8jz-+*;>{b+#Qgyu%9JR#45*)^lnv_m?a4GaDaT*LlZvmh@Otg!fLzG(5mj&havm6gHlafKO|%}qP!7Z%J|TUXoBI4KmUh~%0nZpJ2BxCFsX1<{b!Zyf_$ z%izvZ*dBrHMX)HpD<3!JLrp%khq^;}b~bcaq00m-uyKIvS?hHkjYy zd*&CGEa;6%+Cl)2vE5<0IgunHuMo!nMH3~q&JFE0t^|+Ooaw-#7oq3l$d9Cv?WuYPgPrCV=#GWtYjMaXTFj4KelY+Aa;kZiii?wc52>yOlGzPU4qQ8kc*_;O0|w zWJ)cgV}yt~GSD*fi4l>FwpVGE+k)VLc$aI1YzZcoNXj&+v$?YcAio@d8D;;iLH`L*y17{;tWJV%PXfgr+V`gQL z(-cj~2ti&J1I?F(jW9x%f@A&Xy;r{b;CG30M7u#xe(vZkdUN}mP<`8j4{llW+#!7V zwZymYeUSKf(#GA;19!jFEBz($b>gFV&)d6pz5M*{z3(x}n%Kx)CUh53m7K9l4NKJ< z)OfP`Mm5eMN(UL&wOp5i=M_jzDJc?R%Tb=Aw2OwNq!6P`CIgiUaXu5G13!29T;jE~ zmsF7cNj%CO=N|exUYpnndH7wx#6sgxBcVb%p@I!%p#t=byrQK5W|F_$#kqJ%4m9P! zl5A+ohDBMh*bPfu(BXisR#<6;ZDv?whV{};39r-b(BW=zyNG)LRujbu=`CGpX}C)Y z>GkJoDW8jn5Izosno^ zqqPHNqdjtSsi)e5C%GZ!hV2=UXM;2w2sT)0fmRF5F~W@$MR(|-S`Wo~m?T064>yuO z#S#T}X}i!K2RIz6fSGV_R+q|TcDfPAWm??^eWqI&8s3Llb{IcVs$c#DW>m>oG%TDI zjW`)#Mvuv;9EpzwC4I|!6M)}61EIv*c9CuY+~hLHk5lEJLFV zt>rK)1UKiv%p9n3!^8}juUfY&=Vp!a&BZkugbW6Zj4rpbk&b8$Lqna>VsUdobO=2eA!)W9G8!tE zT{JlOoVjZsT-<%?j)}25|M=KT=W^ZCcXiIc`=&95S1fbx{ow9LKipiZ6in%ZD7$^* z?z%;{*SZ4JZ=ZeR|Jgb{t9f)_T2*k&vWFKo?dhy{riZ2Gd)vxs#sLB2YU4H|w?hZ(wb0H(hZ;&a2y#%0VYeG@C*s2mbKOwq2BM~01IQzJ zu*Vb1w9ynV1~F5_B652OlGA-|1DEbr3d5p-32P#)nP4CzRdZ6({fPM~h64c>iizzB zHd(D+H%DjS!Ao}s>#?%av;5%eD}EM#zIp!Pe?GYP^T%g?e@Z=R{j+V4U(C6(nOkN4 z!^|nl^6NU1?%=qTl?1D25wT%OI?v!dw+BDl~0r>&qZgA^UL@BqxZ_8 zRBQOdq&3B;L!P*`2-XxqPX6e8Jktl&KB!59YGi3FCd5w3>T6LhwM?iAT zS-!P)>h=|LGWg))?wwO_>AQ2%E9Cpxs}9WZ{REhq*L5~bSUM#q3GT=TXkKH&rPnJ@ z5;~O1nL7noCqRh;3_1^00yJ*qNvBW=dR|LddYB5yafU$y#-Tn(Gvb!`Qhn73^9ttg zrc}sz^+mz6VBKy)g*^?*lUGjMb#euLe;eoduKL5sESb>Zzj`^kn9Sthn>0cT%9HIH zH8GPok4M-eU_l|c)x5~LX$qToKh44rZjN8*moD@d6`GS_|5^C^G5GFFm*Oiw|6F4&QxP{z^&ynT<&xyVNr(-VIpIq(Tn|3JQBIs&&=qQ9UVzZ^V@p*`@u0F(Q|4s z{-=NZEbkc;J=uiu6+~-PgAXEQT-1J5+EdA{SbqPhpC#gbi`q^Cez^6-!?(>2ue=%T ze~o{$Zt*|=`rx=)JZ0PQj-@a4OsTuGudHFkTcAI996WC=DQe#K?At4P6Bk+%ufV7x z$arD$$2)glI52I}fj>X8@wfYLU{QAe%zZ+%6Dta#rShb*oSGb5mQ|C5N4sm?c(kL| zfr(K)Ti>R~v-vh2r>9%}V6i0qcp%T8oeZipU!%}iRUVf~QrlddN<;NhI^2=Jp{WL{ zc1Eun3SQD{sPd5<;i3_Hv?L0{CS4MA?vrN}Mf=(oKecAuxK&RrKGmY=O^h$Ud1`*3 zZdr9rM~yGs(B9L~F#X=s>o=a=Gi`78mBzw__b!_MNaxs!rTd#&A6y)zqx$wl8;ngx zK0`j)qQHI?U2gC&hd55JR?;n|7thd^_Qz?@B0NeR2DbP1_9ohtr@ot@+IBh>kKmuI zKh2hllAVa{D;5PcMxyA)V8I|_KMnhZ6*NM$8Urt=h=PqkObW+WX~6q%GwH^xbI{Hr zIr>T8q1}WUf2l4K1@5005}w{(ICU-&!|CzQh!9x?-zK!QXKx?;Pb|{hOej}&3cT4b z8vz+T#!rpk7!^h{;*~Bzt0BBP5TQ^lkDrausbiLuugso8yD>_zVhQ<7IW|Ym1lRn< zVRbKz3Xb*}mE7YzU(~p!M#1KrrX^-5dI^tYqtR%QTvb+9Q-;fmYKrjaQMIG+98J3h zw_=!yA>C#1XXoacva`#JvorZB9`mHelc=Ko*_)o-P+Pg`>9(8ik1C&_aAoHYftC2Ss(o^9-n6Ci zxVA|-1@#@Bch%qf!Dcc*PM_Ye{rk2+na`+toL3bRkpCmPc>kgsAMUIwTXL|qW&dKj zm4jIK2v;db5ec0oOB#{)D-~FS^HfS+#W=nH3>D31`iT*rG~i3fGrrS&mB~+DC{fDRbh*+YNQzMlhpc7A} zrO|8V`^w6=Yq7d~N9*0qF>}F#Eej6bQZa7bFPE)4ar^kv6-PGAt*dOGnx8+dee8r= z>hlU3mMKr}?s#a;!brjR@oS!LX+5%e(&Sz5Zd&}>=?j|{eD`X&aoyzll~etpDYsVF z-gaX##RAdHGl-1$5ba~RT-OwZShOxmRgYFXbeN${59@V1b$F@n|FQQaaBWrT;`iKp zLpB0|1Spi{h8+?hK-s!bQkIgkHiSYK+6EFJ5E7b%Qe39Bd#kP0aqBXQ)v41_Yu(0L zw^8fZTGw$}$7M!4>bO?NdCrV~E$REtxi=xS*yn%V-}j&SJ^Gd8EZ_Ogx1H~7HwoGb z`#>trvrCWkdS!7Bhgvz5&LIv|k?!G?NU2T4U(uyWj1m!JjH{p!OW(oo4<{%=Q&KJ} z364I(k(^j1$nHOALP=YydK=5KlN9=!t(JYR*_D?c9vFJ~ii*6xd#+ekRBo@=W*Tkf zmF||j+-BE~`Q8;xH3p5ovU1H`HrwI#3+lE#v&Qzq?>=0+Tr@YYmDfUMy{oqN3eduj zH}n4w#s}fPYc|=H)stNm{9{+Kt03A&QHLs)hliL`X)v85rmfHOlPO%$RQg&0Ms zRD{GLBoe8*RVYK%rlM7}L@E;_8A_wXYM?+}Cc}@2%jgUllFDLX@j^54k|>o-riy~? zPly<{ybp<3A-*1ik;orZK_Ex5dDzyl6xkv?V=aQo88!nEWOdR(N>PUrrs}X`5s?U= z9%xb+4U>WjRZK3E0joMO!>)SiN}tmEEPD3k#=$VPGBku0$rY+FC#vxsWmk=PVG=CT zX2->AbBfY^Z{t&vTR?s-$gid}R4%o&LQmx?Q>TkkGr8%A%2a03(=(@M%JosXX_TCk z({d_GJD7uZ<&5UgIXTH1ZRimu`@v+bT;|`&Q5j7C0eIfg&NPVM^vKo0C|v`mSDI0Xlx-L`+`I*ym?wEUV7Qn76p_YZTegJtubh zyn%)1DSD-{bitzBwkw;{*;QM1rPR(V%MD8{*Xzp?CFfq5o>!5cVaO$)j9Yg83-(HI zfK+Nt#r(QtRFZ^BV$lKxs+FL{VzfYvS{c*^b7E>#6qULwbu{&GDwCgzs8nStm&&B3 zrpKoy$q={(l^O-0iHQ%#C&!w2k$n8*n7`QLqgls=CvRwci%d2V;`Efj_$@ABuZ(N| z$rJm*Zr$r{oc62v?=9K340ePYnl{|QAy@lOTXE~YceZSQ~z8jWn3#>PGon=?~KJ|Uzd*AoR zTMK({b2x8Vo`toIIY|Ld1}k@QSa_mVqnREN4+Ba2!1Q>U$_qXiI6Ho9IALd+ z7NYSx6Q>fVYXYu>Z?!e-k&k_!Zh3dK-L&`2E_BnPUl@Gedy#w>!&hNBtUP+ll@36_N5ZDNTzM5++R~(b6<46XWXv z#Nrq>_gExR9&e~){H2(NEDALdg>3tgu?LPGr5lgXva!E|uau$ZdFsdn)EO$SLdt*} zyb5l>kSjK94@4Xh|F#S=9X(3)opt^T`h7@6QkfN@r6DLXO{r8%Qzenm=wXReP6i=N z3v>B>FZN?ZRtxDxCDFphmwsQrY(vYz`+mtBoLQA3J&O8zuUnG!)P1TyrB$@*>2LjV zZz6JERxwiyyK5N(tU=&YQxt?g83Xa0qGS@OG)=~+WelukWE|e2V(m~OPDG0sMD+8Z zKgiEL7Ew0tTx1!Izr_;P%+vBB%V6sjc8oo?MKnz*tf>*~HIUf9tY$Zz^>rUQa)i$L zt1p_Kev|KV2;wi&Gkl4HpX2c^qOvL?_})cgRv1RcXAN0bM2qNv*|mffO8BWl#HMn*MKM@FWxjGAR4*)8&$<@9Pf>XD;Ga#RhfQ7HI% zQ6btcLL)FahS!GEL!dsIRfdaLF@E%vjtLQ`;ZNn#QbvuxN+TO)KO_-mzrthuH3hj@ zi;N*B{K~*aqa%==7Rd9b4hg>PmDpa zXPK)ZNbEaj1+7KT=;V@mX48KZ>})1>c2<f zRH~r;*1d*C{q*HDO^flBa7E|_39?GO5K;NzP|(pqUi@Og(A}csCvHFcg!MvvU&flB z9Qze}_;Gpx`v9}#+ySu00cHtVbAQ2}g6N{6GN_dmb2q1>%^cbukG4glnUM=3>AFxf zGZf8}pkfIs5u+*^712nPO2sN;xmYGP7B&+}_!2!{CQppN#3edED_wMx4y)^+bv3hR9@ z_L$DGvt6UM?)|P=#jbL@(&*FI%9EAez3D{RT8W9oF?9R_xhah&C0VZMkS$CMt@n zj-yLr=f~2sqUxgPIyEX&qbdfKFsOzoTtjgjKI2W-hsx!)aMT7WXJPR#O6`FSPdh#c zCcmM_q^B3_QV1cILZQ2 z*%Bm|fFDZ$C16BY4)Vvt;~e4BzlYI%|M+nNe&1x3cqv*+$y==Xw_+PcP!+RHO-%tfxS_01+OFJePX zm7dd#yF@~6_@>CxWalfB_{9nEix}8lwO8b*qwzNgr7FpzaH&+hGM(}Uz#$ul%pBUBght}fnpo7W zM6F76HH{RK$kdEksTAeVp`|*cqcW5kyE2%JjQlwXsqyiWR4Sj#r}Jl#hXg4~!6=H8 zKep;>ASIg_A~8SaYzTHkN#MLn13IJlIC5ro3;T>+%ErrLoMT zB30VlW%GJQ$|D{_?-qGnU3Izwlik&)rLP|w)SBxId2#tmuB@kb0oM{38!Lh9a9C%~ zYC~ud>_Fs-5SF1sXf_Rh8ii&US`khm1%l9t)D&vQ0|#wD$c>N{Aw-9>6hp=d%`ezs zS2>4VGLent_%S$HkpySU$QcCww&_CHx$!eCyV95c8{eE0s7MkjlZa@EIviE8tG>Gy zCa>Q_C2KV5l&W-QCMEE0C98^?D@;*p2^AV4RZ*dlN~ua3j#DzJN{+!ll{1w_iu6e4W4l zOr0o~WFy)0zIK#1+pJd3^<6=m=>*@A_}oavT+}}HA(l4@yz~sn8$m6sNL7kimPNl~ zkph-OX>x@crn86$a$lp8z~Y33T@PNnDrlt^9|N5&D8PS$2rx?h%Z61Eh4?8OO%Z}= znS7u*j23H{Gv~_b_PBIyCXS^CC)NdBJY2vBVRHl}qK*r3A z@kQ?i@ZUgHRIz|RV-kE4nFu#O6X-|#rR7q>lYk#?0{#}j>K45j;Qp=sO_$(4`TSq# zt@Kw&tSCjT=QmT*2LTa6SP{{5KTvpw{*n<>UsBXq3MGDk!rn;gVCM`iaou11b@Bc> z4N%=oe+6}4L0uZI%aRLqG0<)&{U!7`8=1~;Bs~(Mq&69LavSJBKJVCn2Y59CT_l`9n0Kl%y%CFAUThP@6zGDnL1x zev!UL^b+4M-AQUyjK8)JYS)rlXe-o41ZtC^b}Oj`{R*|RKrMMf13z1@7~;nty2<}+ zy|Feu9elw!{%rju_&d;1KYnc;!LOYJUmd`IW1N1ic@li`yaS=X`a=4d+VF7Vo0q~r zJx)J6hu~*Vz$Z7=1b<{AeMBX2@t{EbndcyUa-WAkr>wYAh)<70NFnsKTBXuJK8TzA z{rEem(|-Ky9D<)c3H~nw_;29PtqS|R*Q})EnDmhhCo>--k&n;9IYBYsPrlBfTB834%Z%#w4X|}YXG=@rJlDo@S zm(v>(kvY+t=uKp{%|&w)%NgSk-a>cFX>abvT)I0K<;oKnjmB6U9|bG9M~v}IwpL3n zp74{VWL?W|jfEX@AuMR|S|jf)|4AR=r(4K#`USX&lI^_(SXABGFbo0`f`BL`F(8Nq z!z2tTAqWU4T@u28wPrK87d)>s60cjUDlu?b^`@!b`2xSnCQjPL_x%io+t@32ryHRv zEJs)P8t>`Xdv1A^pS_V)E|jlZb}QZSy<7Wjo7nZ%VkN(|l(*?$lpxX{C%iY#kG3I_ zq`>-CQZZ2YjM%6uvguY*a>n)MlGU^(6W2lC&sGZ+Lj(PHx{T0DM#;1h5nL5j6CcB} z7_!_{MGOoLHFjXc=jH;tY;4Q=Ci3X+==qf)^xY+QrIOg$iPe?&<{(m9PeY3oH)xqv zXAOm3e6F3e#7p%mIWtM|R*aTYobbwlxE?G_+|>7#J0mX$W#l7H;p6`ZtrRf;|mOZS5S9HWH}xcFIsB#vVJ z82k9=qpL1`w9)|7g`C6NeH8dWSn8W4wiTDI^)@SEqP-~Lhb3+#$+{$muj;Cp3EW@= ziYq{(Y_9$82D#dc_kRD7KaE%cs38cB6gv4am?+`}dXe z=YS=%g~#QEf_bj;KT;dB8g+m|#o`6xxojp>oWHG(=RXum?OUo^m`35$< z3I|Mz4?jep2918$Yy+Lx1cSFKhBYyJT+3uz_n+LMdD2xyH>PrC8!tL1j%6i~c`pnn z692}b)Z-sIq{FTwRhzEmdln1j#mlQzG zklQIP#PI!%Jr2<*vO3BKU9(2d&_rX^?1_zGuqRg%Ha14R3c?1sNGQMfbE_15Jd!QO z{49dV-7C_GRS)lWg{iqp+=VFR?G>MpC(LJip^4ao*4&-5Ubm8u-Ftt{#1 zRUmp#^6Ml@L6>e{aeXzAjnkt5?1qr?39;so3Xs}GvT?G^EwXVENKnlMdqK0sgxVHD z?P6%Cyd+_G^NXT3Ho=&U#;$urby6hKDHmL{b5t?mVYpJON(q6#JTt9*ck;dCm(aP{)CI*^+y!Ggm`2B0=@Lm|#3P;hfJq zFz%=vn$qiogiY6BI7UbLZd_N~6{`-HCl+Xa)Ru&&`ErorWl?QB zUF;*%r7>t_DYM5Fw)-M>C3Vj0LWV4Pt}JAgjVCqtC8+yM_GF%Z%r`}((si|sN94`c zSSWOK#CLbs(V}|<{5dlAg~}%^>MAU|BtsXmY$H7-F6$|;p%Az ze9%mgrJ1tzh#OmN*-k&VVUvJg(dg|LTh`JNdC#ccBhe0=%wVvwBe~~Q)@;te7EZjQ zPUT{2Jug6hlwsj1=`kui+^~IcIK6%Ffo)~m4WyIr;esPm_i=*#U|0X$o9D5V6T&<8 z!qIGx)T&e!Mz(KJRrq73@8jXG{N*QUq1VJ&KV^1_l_o|C_=?`Cm`noeM*-7eiZ_qh9q zu_ZAsYRMBkBIlN!8;a;+`9w20;+k6eX*qmUI8N^)j8Gzo<1w;k@Xhv_H=U~FtH=~x zd&bay&QB1R@3o<|q8lB9{mac2I%Fi2(aX3Uc>5I-qz?XG^l=@)=SIRFoM-6sDEc4P zMNbAZt0;i+%f_2qcIbVs8})_s0`=<(XFH%&u1;E1 z_2R*JM~RFF`MBC-d<1QM9=tg(REK6twD)k{-F&>XqRq;*9y%(`w$kAM;SjevcOM<< z3)$U^(mC2SinKb|G0L-IBxnxv%M@T!St**oI2G&CUg#2hXBc-*ut6r~8K1EKP9%?m z#F3F;jd1l>g|CT4erZp&E`N%+s_^I;xWWP^(#G1NEMj~q%m7Cs;C`IQt*;W(2^uw~ z>^2PY_4wI=Av*USX^}OC3bcR4b-U78XP%yF_eBzR-<0L`Rnc->>4ou1jhcGS8wrV* z)_4Wu#6_yAB_1~}Q$MeZZm}`(w&ntii)TGgloU213xVJsXe9LD6a+qFnr7bC5&IH| zD`bi~Vx1P{*&(QbkWA!_1<}3s0)M)RdOpa2kR0kR5 z3&uGrn7_;f4CA=3xR{ zlrIC#)_{aSZj>&aZv!VTc`D1uN1NqsxvJn~fZWbuj=87fsx!>q4^*eP+FMK#QKbe{ zTR8ic>XWKW{LJ#ZXy=fdoind2r?oHlj#-ygT=9fwefh?OF6GoN{}}lZ^V@#y2Fr7s zPP{MM^lh?>)NK%6Z+m*?ipXqaJ>e;I#i_;5OS~(h>%ZzRPn2nSUa=VRuAkcU(&BTw z`Pu4ffPT)a^g`Zpt%nEq%WA$ZOquv(Fb%yd?OhsYs704Ow6KV+?9yA#HNKyh&#E=|35q8?H)E@rQG^>%9%p0gUTwGU1=)?bs@V}zKQRry{QaQ? zjUlILXxn1#aM;xRCVpxyL%jG!)o(?lgE4|yiuOE~&EG7qs-_HofDM#8Jv<*E*$mUH zuyB4gTvw>(`<#iZI->y4i8n(>&w%a|DYJOh_2wg|9hntg1f>Ph)W)O0iAU`V6JtZ*J5NEdZ5Dpm|{%?z`ak&J$`)Y0=zKm;4RQ7|2)MLM|)m zda4LooO|4qHd!{z4X$-AbK+cL3ZYw|MH5haO-H9wNhDI;Y!rR#H`?J=a`81wK=Y(W zsOLfb{5(B9PJr5u2+ID6AsF+N&lhV>QC>&E084|yafg~gJp}=azNN*+Mv zP||#slKz^m<~fb1FlDzIu~+-?lu+5%v`e;RTA~sHq~1evx=j*9Y7Z&wh=Hy}T-l?w zO$W5mqb3}9sH@8p5pumInw=RqtK{T#b>vJ2o|CbxN{&vP0Ob_(x|TwG;`ydw=Zdj= zyeoBM-w5}TE7$mQPQ`7yiP;tpX)U<(J;tJ%bEa_a)xwtTA54Om@B47;*q{g z_+0VYG;N$TFrbuAUq3u3-2w$yE-tW?z1rT_sfEh$2J7o1T}{Jtt%P{U2Vn5pDg9@m zMB;6-3`_R`$PA0x2KqGF@WK$-CrHobwg6kLz|TXz#yvO>@OsU-BLl-TH_uY_4w;x( zn523yr9Uxymz&#!U#Y~S#1mzcpn7dGjYh=VG!@p}`!b6(v!>E-MYX@XqR${&$8_4{ z&3t-Vf~7Xh((tvaPMbY}sB+Kc=VW|Yt)05Bb!0VQxR-nM2=E0;-y8<^uW0CBc zS)%F~J{XAPbB;Uy9MSMQlMmEtv@nc!#If*e3_fGbGOuHb`2MJ093GdcKa+1WR!Ew| zNwK@a7Za>nIm=xZlW=#x;fE%VBME62MJ#j5`*pf*+3u;Mkd;`!xalIkXhBiFf%=q> zJfR?1?r<~IAmJzK5H#sz2zXAIxc1fL7IS)XFhcLUd*SlH7ZHu|tGaBq{i z*XwRRPp`$H&l$hD&zr;x39}qf(Ov6GsCXio{wyzLQt`8v0v6vp3o?%zf{JEo=50mT zSAS6THY(;5Lql&buu3;j*&xnVUiGC-chi4m5(T!_=zwIuE05#fpBDSLHG;N89~4j@ zIBgjpI8BdT6T1?na_LM!$8+hpo9YK2Ms-+8h2N>-m)v0;Gku-&p&*atMp+@dPEv3U zou71%;p)afjG*=_h)ybbz1O4gK7;)8CDA?m;;sT*p{Z}1g1>lL(67Pv*t9y{CkOVv zS;Q-frp`v{hL~nSXQ}ir?l$g$U8UTl9vDA3ywDPH7P+Z9eDuzeI_=fCQ>i})syv;t zpt!5$QQGT4uHMGUsbwoO`Kh(eagV`OHkZXnLTF#6D`jP^LH>sPId{i+o!}Rqn*rh% z^O?L9?{mHDy&}HoY%jOln*3&JA>!x&IQX!twWZSAi+s82>gY=fdi$~!dEhHXSHFQB zsG`mW^ABlqq3kGSw97$Pk@^5Ic$=Zxa50pIxpbYQH_jBX-w27Y0% z(7s5+>hcnk=IbAY({SUBn4X(K8p88J@0=&!9dNv>{_G-E7@d~!W3I_)`?<<+xZ5Mt zXn5<$UZcEA@%#w6kaJ_2R-su>B%}OYo@(`nw)<1CX7UQ*?Rmj#_7>Y+Gc$`ROl7Kh z+jFt{!EuAk2Zt7;-1!rG{p#mN`SRacbVr-#b|}*upOyH`xDa{~%KC-li8NJR-(!^n zw~3bJ4o02S0N+Y>>#?o+c1GaQccuvu;_Kg`t{Z%|tBp^)`KXRx8Yiw5%M zMoUl}^WMtBF0)Tz+sNm9r$t*=A8EVHB91V+Wmm3+?kfQ)K*6qjoBj^@QJP`{`%l)% zaWU%+a8&n9t}(gG3<&e}ZEx~C6LKrod4Kew#W@XzUc*H`CP=H$3F|EL}*Zi!LY-4x8u z&>867??3<2y4oy$KLzzH;)vbtjhicx2VhI;J_Y~QhawbLdD<@38vA;8u5RWB7T<#@ zN#aY9duX>#4uW1ybFF|%AFZt?daJHzAwMMh-k1ITGlDgwLJ@&Rn;Hq_@H=MYrB6A zR>e3vQf|Ev&A}wg*X_8j*kNAb-kZ?1ZLGuNuDa19lb&^CGqKyDx*4Z+Q+?4@zBFgc zUgtrx>B2GvjcbV-$gZ(!(p`J)Fu6KrgetaRy@v3zeyq?zojLLBZtg(2QZLO&Mk?pd zbY%BIH=cY^MNVyG;YJ!zCT8Jq5_8$Cb?kqB%=mbUL}(~++>+|`s|EIJ+zOHLmbPo? znI=`02v?`7nMh={;9=izut0j*9aP;{%3BR@`DYf=*DpCCg!6OAWZRPW>GsYds>vPB>XPF#qdMqgC4{cBMA{bV>x3zE0Lf}SF0^#L_|J6U&}jZ$Whk{M?bF<&tQsIgQH@f3Y& zK84cvi82m>{40{RGU)NIK98D|iDHb51#N3B4STwLN&MuT$`>Q2C$G!?pviKa{LZ5f z6ttS})j5cp3urH5DDI$%;j>#?7mgXM+-SN)nG{(~t(-nG2+7-AT`C`S`wl6CeG5fg zHzmdMsoM3|u&!TP#C%(fa-*J5!5l_;;+NAiip%SBXV z`oz%OU_iEw98o3hxSKs3b;UVs)9ZV(EQds_%e?iqs)EDz`X|~MR$0}?JeA&?INNp8 zAK>_CWv!8`@&lV5v7&({Z!OM4lUM!ciaE9@Rj#O~nlt7OXVFi#txP%Y7hB^%W}e-M zu6449h7_B}>^OCZMHSSQY`5GW?w!ga+DZa&geS4)SMeTltP_6ZIh?wNDW6!8U*?0AdP558BQ z&50OPBp7Wqs!(DzEsxck7}TvP@=_}Xh@z}gHg}lcc-vHum zrhs{AScL$i)-a>sfn5V*$k`y=3q*;D_y8FSd$vc#*Kxl?kE)3Fs^^^HORR2Y;t;8w zJji~FLw&=KEvV~j?YaC1)Qs8#9R~ylDKdh%Sz>W5v6qJpMA`GNa}3MC2zPX-5bmUp zUk9+hdzgfq!X>e3X(zKHVZfEymmgqp_MW8mC%J{8+QJ&r@`(^GQu8Y`~+?Fa?qQgs*y6~ASr9r%g{n75NkllmUfUwr!q3fzWXK5oo zn396dDx3KAM~SCEzn>>2>c5nH@BE9iab=ZEDwcOWLs{AQ%?_V0Q(ub_3*M)vWQ-Tm zS*K3c?!9Ul_Ry|dm3X}CCCH9-<7~TsNt7pjb!pTCT&JdY$b!oA#;y$n2a2Ns#P*3e z@x!VNM7KqE5b-nBfn4@eZ#=0k~A_ zH5%`tw!%#L#V#KEGaHU?K~FDyp-e&KK5l`gX+}d4j58Yo@4tzyT}a)5y@*_>s}Qib zJPPMX%%++M*V^An2<&LWH2S zf83n$W@rm0?VT$brm`9UG$nWc;#WGrb=~?+^y?R) zhGQ`O`QDf0-|yXQY)I+N_S&Ak?EVQYQ>Di0>@@pEr|TiLyJ>>gAf0IQU01bC{%=8# zc*Up_# zW$7ERs0RM?rOBA7x0WL+%3QqO`^n|>0UKGuZ$oKr7By|~Khle_Ba399+<-S&KSCN& znQ)Y*q>|{It-8J>dl%9fN*FE$R8_st`VyBK(OB@}p#}hI-Ho*0ALbBB1t7rO*4;SfV zh*qofJRN)(8}RKYT(TTi%lR4kE6{!4EQn&Za(!gBWlQtJ`=7-awa*P_vWM#tykpWf zPvYadvAF-*jkfIC`nAA<3b8GOFJ*!N?VUvAWw6z0E{s z`-@}#Wl&gUL+oN%4M}9~`k^m$EQKbH>uT>prc!1ut%c`HhfDmo?DZpp-%P$%?Pjie znS0$TH*}+|L!`@}?8bZDAGScOXpq-jX=y3F z$gC=p|3?4W!Ijv`_uE~FA`)+~lP=R(oneubRJlVT-AUa%FX`*>QOpnMvf4{0jURPa z>|Ta;mLSY8-oMWv3^$5+ScK59;Q9RG0t5HaBW+W9cBLA?YaNQm%o{8N1HE~o0^gH9 zaIRlv7O4fUzgDTm|BQdfcsOF!H0^=;#gsvxHKhhYR90EWu63k8SWT-Wk}LZr0^8I#z+Lz&E}m~Rsx zsz(H^gb*hC+{p%C@o>WD6fvv)9vr@IYTcl*A*LbBzgDufDX=N1dvMg1NM4H~)|RpC zIY?}{5RxO#Y7eqM#F-|=5xhNvGaYtBKYdt#DEM^jd(6w3GlVHPwI6P;Y#zM9=fL$4 z!}Ss-mn3}@v4b*>2)sGqX^9M?y=gC8@P=@xmJ09M(()5pUb~AQ8b#1ikBuUq#1K1v z999_CHtr4XT-$j!YgVq~G&l}pkQYoKrMnv=GZZ)gW{-?? zi83lL3ATTGtziXkt!*rfZ^~Du6pbRkKpjT@K)18V6Rv9F&M05fy3~5{y~>zi(ls;Z zl&^I)d==q%oZ%OQwwxTz{penCaUVi~Nz3^J8grF&{h36L3d~>J6e?&q^xuUmZ%({v zHXCaKC2>GK;zkGjJCa=LBlUg!w8y$Hw{xXTJ$P*VC5gali;}o-60&x&+a*X^h^fSt ze{eKzrhHnqeS(Zkt+O|y@ahbGW|*J6c2$N={ug7nTN;DF8+zxpnOmz+O)eg1+xTLy z4dPGNrc5?BRdCNPSRX_-@s-JnTovFQ6}xM3M8GaxQ754%pLORP7r1`vMQ%{CM!vO? zcQG9@Bzc{@`g_D#(x%j|8qcQ#I?LBt@wLuBdm`g20s!nxkCJ7L$`c;m3Y@|(Ui9r? zmbfS45znV)&l26(L48pKkKsG=jIJ=D2PM97fLs0b#*Z#82TORDv(d!;DR1q?Q*hqk ziM^+2dh#I1vU6EwbjKzJzgKu&S3xTW#+CE9Fx}6WvQw!`<~@{P zBY?QnFYINn-V1m;L&G7oRU~j%nm0qaGmF0CJL+&G*I{4f#Xp6s5fSbDQtFG1Hi z)+ebi(FYJ1^Kss}yACG&Ss}`xaO!%%P}cn@ABe+!((Tl{)b%%(z*l(~P;b)6Cing>VLRRMos4 z_=wL243x@*y1m?rT)W6~{;n=&blsWr`#`Il{>t>41X4?4Ma7MnIK5`|JUhWkTCIa= z84k4gLSpK>IYxT#MreA|RUWO%G$P8cMNim-!@r&t4h;NK`5+S26YV$b5IcI^fYVF% zqO*+{EP}|H8-01s`+5wqTk75H|>REDkG@2Mj(gm^P*x zib3STXo!Vk$gvRkiE3D(yci{p@i7=D_%Mt`SO}IA90WRTW9Z-*PNxc=aDrnvomdO! zJ#L*S&dvR|0a*M~X&-r*zy{CnG=@?k6pbcG!Lh1oKC^ z00c($B9ke?U=0%MU*px|FQ@n9sLcm~A7 z^B2-Xz)x8L|3_AwdgrH1z;t3g`BNHTApb9Yuc+f&KLgI)R)VPfW!I`&3H|)h`BOLw#(Z zfB;a*(Gm%iMWXc#^w4@hMcYScEI>{69`GL0!U+8s00F^yg@njRPG<=M!VZ>t`ld)U z0JBSBY$3?HTwcuzFg6fmRfWlN%UX&d9~<9wvPLR8$tmeOnd&19ScQcI9QYi}EzL1v z01oD67B+kif~7K3Arb*=14BLqaf!c(FlU0S zkI`sLJ|NKE-k!@I!iBOn0)h|-1dtmH1cNy-7@Rha7HB;OP79kWryRtQHu~1amS|&? z1pv!Y?-9xtEy&6W_=~UQPkb$GxQ-R$(npyCF&#h<7X*l9glY5Lw?-M*>Laa%WR3N$ zQ8p+;bX^ue6=iJz0CR)j0$BWi;0OS*vVM~Nmpwm0{;4(w`hOc~X=`nEY@&fa5NU=q zM_Qn5FbaW=6*AE0LmQ*bkV3~^5-~%cG|Y^#R`HqXSr`ejI&c~w4fSlz(5yoDmBlz^ zjV<(S0Gt3Z_zyXlmOf^xh(=kT zh*CsaoyrulwLx0{Mt$Sz)(IYh?5(_$IUGO{0;M%QWj-kZ0PuZLirQs zznd8t1!QIadrz2~pE^TUmQNg|Z;QDO6KnCDHLjEN$ z|Hobbao4}(fqx14KiTykcl}Eq_?M9XlU@IsyH0NVn7KS=Zu$3OK`e7PLYq-H);wO$H3gue2yPKD_zs90Gg%Ua zLa-C1pXW(J|9cFK010C=G}0OiXHDUAX_ZU?wLq@14T=q-Y)$`m6Z*=Z%j&O zJ4-yKVFj+8t71A=2_HJ7*H;jHf4=~57z_dfV0-?0fiSy2*cZU!Zx{%KS;hVa10ygy z*T2DFa7;{pg+ZWDOw50WAuzjezriqi`~ld*UK;W=H@)UyL{X=IcHwf}OKPUtO z{#|D%1jhRZ42}T*?kgw{=#Tt^afANwAB-FF$29|k!2i$>20{Fx9}K|*{XK_Z2n6_d z|G_caC4a)8*nO>E;sJ+Xmg9fG{`3JH0{?wH0D)j|#Bccr0>QzM-+YCE@xp)e6$r!w z<^9bL425X`ON HSnvM@HyZ}f literal 0 HcmV?d00001 diff --git a/845963_Kayky_Gabriel_Marques_Ed03/845963_Kayky_Gabriel_Marques_Ed0_03.c b/845963_Kayky_Gabriel_Marques_Ed03/845963_Kayky_Gabriel_Marques_Ed0_03.c new file mode 100644 index 0000000..68dcbde --- /dev/null +++ b/845963_Kayky_Gabriel_Marques_Ed03/845963_Kayky_Gabriel_Marques_Ed0_03.c @@ -0,0 +1,955 @@ +/* + Exemplo0 300 - v0.0. - __ / __ / _____ + Author: Kayky_Gabriel_Marques + + Para compilar em terminal (janela de comandos): + Linux : gcc -o exemplo0200 exemplo0200.c + Windows: gcc -o exemplo0200 exemplo0200.c + + Para executar em terminal (janela de comandos): + Linux : ./exemplo0200 + Windows: exemplo0200 + */ +// dependencias +#include "io.h" // para definicoes proprias +#include // biblioteca de apoio +#include // biblioteca de apoio +#include +#include + +/** + Method_00 - nao faz nada. + */ +void method_00 ( void ) +{ + // nao faz nada +} // end method_00 ( ) + + +// iniciando o metodo auxiliar para method_01 +//--------------------- +void read_string(char *letter, bool one_call) { + if (one_call) { + IO_id ( "read_string - v 6.0" ); +} + // Verifica se chegou ao final da string (caractere nulo '\0') + if (*letter == '\0') { + return; // Caso base: fim da recursão + } + + // condicao para verificar se minha letra e maiuscula + if (*letter <= 'A' && *letter >= 'Z') { + + // Compara cada caractere com 'K + if (*letter >= 'K' ) { + printf("A letra [%c] e maior ou igual a 'K' e maiuscula\n", *letter); + + } else { + printf("A letra [%c] e menor que 'K' e minuscula \n", *letter); + + } +} else { // caso a condicao seja falsa + printf("A letra [%c] nao e uma letra maiuscula \n", *letter); +} + + // Chamada recursiva para o proximo caractere + read_string(letter + 1, false ); +} +//--------------------- + + +//--------------------- + +/** + Method_01 - Repeticao com teste no inicio. + */ +void method_01 ( void ) +{ + // definir dado + + char letter[100]; // Array para armazenar a string (tamanho máximo: 99 caracteres) + + // identificar + IO_id ( "Method_01 - v 7.0" ); + + //iniciando os valores + + printf("Escreva a frase: "); + scanf("%99[^\n]", letter); // Le a linha inteira ate a quebra de linha + getchar(); // Limpa o buffer de entrada + + read_string(letter,true); // Passa a string para o metodo recursivo + + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_01 ( ) +//--------------------- + + +// iniciando o metodo auxiliar para method_02 +//--------------------- +void read_last_string(char *letter, bool one_call, int count) { + // condicao de somente uma chamada para o "io_id" + if (one_call) { + IO_id("read_last_string - v 5.0"); +} + + // Caso base + if (*letter == '\0') { + printf("Houveram [%d] letras menores que 'k'\n", count); + return; + } + + // Verifica se a letra e minuscula + if (*letter >= 'a' && *letter <= 'z') { + // Compara cada caractere com 'k' + if (*letter <= 'k') { // condicao de objetivo + count = count + 1; + printf("A letra [%c] e menor ou igual a 'k' e minuscula\n", *letter); + } else { + printf("A letra [%c] e maior que 'k' e minuscula\n", *letter); + } + } else { + printf("A letra [%c] nao e uma letra minuscula\n", *letter); + } + + // Chamada recursiva para o próximo caractere + read_last_string(letter + 1, false, count); +} +//--------------------- + + +/** + Method_02 - + */ +void method_02 ( void ) +{ + // definir dado + + char letter[100]; // Array para armazenar a string (tamanho máximo: 99 caracteres) + + // identificar + IO_id ( "Method_02 - v 1.0" ); + + //iniciando os valores + + printf("Escreva a frase: "); + scanf("%99[^\n]", letter); // Le a linha inteira ate a quebra de linha + getchar(); // Limpa o buffer de entrada + + read_last_string(letter, true, 0); // Passa a string para o metodo recursivo + + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_02 ( ) +//--------------------- + + +// iniciando o metodo auxiliar para method_03 +//--------------------- +void reverse_greater (char *letter, bool one_call, int *count) { + // condicao de somente uma chamada para o "io_id" + if (one_call) { + IO_id("reverse_greater - v 2 .0"); + } + + // Caso base + if (*letter == '\0') { + // como count tem que começar pelo final, sendo um ponteiro, seu valor vai conseguir + //percorrer a string sem perder seu valor + printf("Houveram [%d] letras menores que 'K'\n", *count); + return; + } + // Chamada recursiva para o proximo caractere do final para o inicio + reverse_greater (letter + 1 , false, count); + + // Verifica se a letra e minuscula + if (*letter >= 'A' && *letter <= 'Z') { + // Compara cada caractere com 'k' + if (*letter > 'K') { // condicao de objetivo + (*count)++; + printf("A letra [%c] e maior que 'K'\n", *letter); + } + } else { + printf("A letra [%c] nao e uma letra minuscula\n", *letter); + } + + + } +//--------------------- + + +/** + Method_03 - + */ +void method_03 ( void ) +{ + // definir dado + + char letter[100]; // Array para armazenar a string (tamanho máximo: 99 caracteres) + + // identificar + IO_id ( "Method_03 - v 1.0" ); + + //iniciando os valores + + printf("Escreva a frase: "); + scanf("%99[^\n]", letter); // Le a linha inteira ate a quebra de linha + getchar(); // Limpa o buffer de entrada + + reverse_greater(letter, true, 0); // Passa a string para o metodo recursivo + + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_03 ( ) + //--------------------- + + +// iniciando o metodo auxiliar para method_04 +//--------------------- +void another_char (char *letter, bool one_call, int *count) { + // condicao de somente uma chamada para o "io_id" + if (one_call) { + IO_id("anothers_char - v 5.0"); + } + +// passo base +if (*letter == '\0') { + printf("\nHouve [%d] letras.\n", *count); + return; +} + +// Verifica se e uma letra do alfabeto (maiuscula ou minuscula) +if ((*letter >= 'a' && *letter <= 'z') || (*letter >= 'A' && *letter <= 'Z')) { + printf("O caracter [%c] faz parte do alfabeto.\n", *letter); + (*count)++; +} else { + printf("O caracter [%c] nao faz parte do alfabeto.\n", *letter); +} + +// Chamada recursiva para o proximo caractere +another_char(letter + 1, false, count); +} + + +/** + Method_04 - + */ +void method_04 ( void ) +{ + // definir dado + + char letter[100]; // Array para armazenar a string (tamanho máximo: 99 caracteres) + int count = 0; + // identificar + IO_id ( "Method_04 - v 1.0" ); + + //iniciando os valores + + printf("Escreva a frase: "); + scanf("%99[^\n]", letter); // Le a linha inteira ate a quebra de linha + getchar(); // Limpa o buffer de entrada + + another_char (letter, true, &count); // Passa a string para o metodo recursivo + + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_04 ( ) +//--------------------- + + +// iniciando o metodo auxiliar para method_05 +//--------------------- +void reverse_pair (char *letter, bool one_call, int *count, int *number) { + + + // condicao de somente uma chamada para o "io_id" + if (one_call) { + IO_id("reverse_pair - v 7.0"); + } + + // Caso base + if (*letter == '\0') { + // vai somar a quantidade de numeros pares e mostrar quantas vezes eles apareceram + printf("\nHouveram [%d] numeros pares.\n", *count); + return; + } + // Chamada recursiva para o proximo caractere do final para o inicio + reverse_pair (letter + 1 , false, count, number); + // -> adicionando number, o valor sempre sera mandado de volta para a funcao + + // Verifica se a existencia de digitos + if (*letter >= '0' && *letter <= '9') { + //realizar a conversao de char para inteiro + int value = *letter - '0'; // -> uma das formar de conversao de char para int + + // atualizando valor acumulado + *number = (*number * 10) + value; // nao tem necessidade de number ser atualizado com um inteiro toda hora + + // Compara cada caractere com o resto da divisao por 2 + if (value % 2 == 0) { // condicao de objetivo + printf("O numero [%c] e par \n", *letter); + (*count)++; + + + } else { + printf("O numero [%c] nao e par \n", *letter); + + } + + } else { + printf("O caracter [%c] nao faz parte do sistema numerico \n", *letter); + } + +} +//--------------------- + + +/** + Method_05 - + */ +void method_05 ( void ) +{ + // definir dados + + char letter[100]; // Array para armazenar a string (tamanho máximo: 99 caracteres) + int count = 0; + int number = 0; + // identificar + IO_id ( "Method_05 - v 2.0" ); + + //iniciando os valores + + printf("Escreva a frase: "); + scanf("%99[^\n]", letter); // Le a linha inteira ate a quebra de linha + getchar(); // Limpa o buffer de entrada + + reverse_pair (letter, true, &count, &number); // Passa a string para o metodo recursivo + + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_05 ( ) +//--------------------- + + +// iniciando o metodo auxiliar para method_06 +//--------------------- +void betwen_numbers (char *letter, bool one_call, int *count, int *number) { + // condicao de somente uma chamada para o "io_id" + if (one_call) { + IO_id("betwen_numbers - v 2.0"); + } + + // Caso base + if (*letter == '\0') { // corrigido para verificar o final da string corretamente + // vai somar a quantidade de numeros pares e mostrar quantas vezes eles apareceram + printf("\nHouveram [%d] caracteres que nao sao impares.\n", *count); + return; + } + + // Verifica se a existencia de digitos + if (*letter >= '0' && *letter <= '9') { + //realizar a conversao de char para inteiro + int value = *letter - '0'; // -> uma das formar de conversao de char para int + + // atualizando valor acumulado + *number = (*number * 10) + value; // nao tem necessidade de number ser atualizado com um inteiro toda hora + + // Compara cada caractere com o resto da divisao por 2 + if (value % 2 != 0) { // condicao de objetivo + printf("O numero [%c] e impar \n", *letter); + + } else { + printf("O numero [%c] e par \n", *letter); + (*count)++; + + } + + } else { + printf("O caracter [%c] e uma letra ou caractere especial \n", *letter); + (*count)++; + + } + // Chamada recursiva para o proximo caractere do final para o inicio + betwen_numbers (letter + 1 , false, count, number); +} +//--------------------- + + +/** + Method_06 - + */ +void method_06 ( void ) +{ + // definir dados + + char letter[100]; // Array para armazenar a string (tamanho máximo: 99 caracteres) + int count = 0; + int number = 0; + // identificar + IO_id ( "Method_06 - v 2.0" ); + + //iniciando os valores + + printf("Escreva a frase: "); + scanf("%99[^\n]", letter); // Le a linha inteira ate a quebra de linha + getchar(); // Limpa o buffer de entrada + + betwen_numbers (letter, true, &count, &number); // Passa a string para o metodo recursivo + + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_06 ( ) +//--------------------- + + +// iniciando o metodo auxiliar para method_07 +//--------------------- +void betwen_mult_of_three (int *numbers, int first_interval , int second_interval, int index, int size, int *count, bool one_call) { + // condicao de somente uma chamada para o "io_id" + if (one_call) { + IO_id("\nbetwen_mult_of_three - v 5.0\n"); + } +// index posicao atual a ser comparada + if (index >= size ){ //-> quantidade total de nuemros + return; + } + + if (numbers[index] % 3 == 0 ){ // -> verificar se o numero multiplo de 3 + + if (numbers[index] >= first_interval && + numbers[index] <= second_interval){ + printf("O numero [%d] e multiplo de 3 e faz parte do intervalo de [%d : %d] \n", numbers[index], first_interval, second_interval); + (*count)++ ; + + } +} else { + printf("o numero [%d], nao faz e multiplo de 3\n", numbers[index]); +} + + betwen_mult_of_three (numbers, first_interval, second_interval, index + 1, size, count, false); + // a funcao vai chamar numeros (meu array) o primeiro intervalo e o segundo + // vai andar andar com a posicao dentro do array para ser comparado e quando chegar no passo base vai parar +} +//--------------------- + + +/** + Method_07 - + */ +void method_07 ( void ) +{ + // definir dados +int first_interval = 0; +int second_interval = 0; +int n_numbers = 0; +int count = 0; + + // identificar + IO_id ( "Method_07 - v 3.0" ); + + //iniciando os valores + // Entrada dos valores do intervalo + printf("Digite os valores dos intervalos: \n"); + scanf("%d %d", &first_interval, &second_interval); + + + // Entrada do valor do array + printf("Digite a quantidade de valores: \n"); + scanf("%d ",&n_numbers); + + int numbers[n_numbers]; + + // Entrada dos valores do array + printf("Digite os valores:\n"); + for (int i = 0; i < n_numbers; i++) { + scanf("%d", &numbers[i]); + getchar(); + } + + betwen_mult_of_three(numbers, first_interval, second_interval, 0, n_numbers, &count, true); + + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_07 ( ) +//--------------------- + + +// iniciando o metodo auxiliar para method_08 +//--------------------- +void btw_mult_of_three_not_four (int *numbers, int first_interval, int second_interval, int index, int size, int *count, bool one_call) { + // condicao de somente uma chamada para o "io_id" + if (one_call) { + IO_id("\nbetwen_mult_of_three - v 4.0\n"); + } + +// index posicao atual a ser comparada + if (index >= size ){ //-> quantidade total de nuemros + return; + } + +// adicionando variaveis temporarias + int current_number = numbers[index]; + bool mult_of_three = numbers[index] % 3 == 0; + bool mult_of_four = numbers[index] % 4 == 0; + bool in_interval = (current_number >= first_interval && current_number <= second_interval); + + + if ( mult_of_three ){ // -> verificar se o numero multiplo de 3 + + if (mult_of_four) { // -> verificar se o numero e multiplo de 4 + printf("O numero [%d] e multiplo de 3 e de 4 (NAO conta). \n", numbers[index]); + + } else if (in_interval){ + printf("O numero [%d] e multiplo de 3 e faz parte do intervalo de [%d : %d] \n", numbers[index], first_interval, second_interval); + (*count)++ ; + } else { + printf("O numero [%d] nao e multiplo de 3 (NAO conta). \n", numbers[index]); + } +} +btw_mult_of_three_not_four (numbers, first_interval, second_interval, index + 1, size, count, false); + // a funcao vai chamar numeros (meu array) o primeiro intervalo e o segundo + // vai andar andar com a posicao dentro do array para ser comparado e quando chegar no passo base vai parar +} +//--------------------- + + +/** + Method_08 - + */ +void method_08 ( void ) +{ + // definir dados +int first_interval = 0; +int second_interval = 0; +int n_numbers = 0; +int count = 0; + + // identificar + IO_id ( "Method_08 - v 1.0" ); + + //iniciando os valores + // Entrada dos valores do intervalo + printf("Digite os valores dos intervalos: \n"); + scanf("%d %d", &first_interval, &second_interval); + + + // Entrada do valor do array + printf("Digite a quantidade de valores: \n"); + scanf("%d ",&n_numbers); + + // iniciando valores do meu array + int numbers[n_numbers]; + + // Entrada dos valores do array + printf("Digite os valores:\n"); + for (int i = 0; i < n_numbers; i++) { + scanf("%d", &numbers[i]); //-> declarando os valores do meu array + getchar(); + } + + btw_mult_of_three_not_four(numbers, first_interval, second_interval, 0, n_numbers, &count, true); + + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_08 ( ) +//--------------------- + + +// iniciando o metodo auxiliar para method_09 +//--------------------- +void count_int_pair_less_than_five (double *numbers, double first_interval, double second_interval, int index, double size, int *count, bool one_call) { + // condicao de somente uma chamada para o "io_id" + if (one_call) { + IO_id("\nount_int_pair_less_than_five - v 4.0\n"); + } +// index posicao atual a ser comparada + if (index >= size ){ //-> quantidade total de nuemros + return; + } + +// adicionando variaveis temporarias +double current_number = numbers[index]; +int int_part = (int)current_number; // transforma o valor double para int (isolando o valor) +bool in_interval = (current_number > first_interval && current_number < second_interval); +bool is_even = (int_part % 2 == 0); // -> verifica se o valor e divisivel por 2 (par) +bool less_than_five = (int_part < 5); // -> verifica se o valor e menor que 5 + +if (in_interval && is_even && less_than_five) { + printf("Valor %.2lf com parte inteira %d esta no intervalo e atende aos criterios.\n", current_number, int_part); + (*count)++; +} else { + printf("Valor %.2lf com parte inteira %d nao atende aos criterios.\n", current_number, int_part); + +} + +count_int_pair_less_than_five(numbers, first_interval, second_interval, index + 1, size, count, false); +} +//--------------------- + + +/** + Method_09 - + */ +void method_09(void) +{ + // Definir dados + // definir dados + bool repeat = true; + int n_numbers = 0; + double first_interval = 0; + double second_interval = 0; + int count = 0; + // Identificar + IO_id("Method_09 - v 5.0"); + + // Iniciando loop para checagem do valor + do { + printf("Digite os valores dos intervalos (a b): "); + scanf("%lf %lf", &first_interval, &second_interval); + getchar(); + + if (first_interval < second_interval) { + printf("Valor aceito: [%.2lf : %.2lf]\n", first_interval, second_interval); + repeat = false; // Sai do loop validando os valores + } else { + printf("ERRO: O primeiro valor deve ser menor que o segundo.\n"); + } + } while (repeat); + + // Perguntar se deseja continuar + repeat = true; + do { + char response = ' '; + printf("Deseja continuar? (S/N): "); + scanf(" %c", &response); + getchar(); + + if (response == 'N' || response == 'n') { + return; // Encerrando + } + + if (response == 'S' || response == 's') { + repeat = false; // Continua o programa + } else { + printf("Resposta invalida. Digite 'S' para continuar ou 'N' para sair.\n"); + } + } while (repeat); + + // Entrada do valor do array + printf("Digite a quantidade de valores: \n"); + scanf("%d", &n_numbers); + getchar(); + + // Alocar memoria dinamicamente para o array + double *numbers = (double *)malloc(n_numbers * sizeof(double)); + if (numbers == NULL) { + printf("Erro ao alocar memoria.\n"); + return; + } + + // Entrada dos valores do array + printf("Digite os valores:\n"); + for (int i = 0; i < n_numbers; i++) { + scanf("%lf", &numbers[i]); + getchar(); + } + + // Chamada do metodo + count_int_pair_less_than_five(numbers, first_interval, second_interval, 0, n_numbers, &count, true); + + // Encerrar + free(numbers); // Liberar a memoria alocada + IO_pause("Apertar ENTER para continuar"); +} // end method_09 +//--------------------- + + +// implementacao de uma funcao ja existene chamada floor para pegar o numero e +double My_floor (int value ) { + // caso o numero foi ja for inteiro + if ((int) value == value ) { + return value; + } + // caso ele for maior que 0 + if(value > 0){ + return (int)value; // -> retornar o valor inteiro + } + + return (int) value - 1; // caso for negativo, arredonda para o menor inteiro +} + + +// Método recursivo para contar partes fracionárias dentro do intervalo aberto +void count_fractional_in_range(double *numbers, double first_interval, double second_interval, int index, int size, int *count, bool one_call) { + if (one_call) { + IO_id("\ncount_fractional_in_range - v 4.0\n"); + } + + if (index < size) { // Passo base + double fractional = numbers[index] - My_floor(numbers[index]); // Parte fracionaria + + if (fractional > first_interval && fractional < second_interval) { // -> ver se esta dentro do intervalo aberto + printf("%.2lf tem parte fracionaria %.2lf dentro do intervalo ]%.2lf : %.2lf[\n",numbers[index], fractional, first_interval, second_interval); + (*count)++; + + } else { + printf("[%.2lf] nao contem parte fracionaria [%.2lf] dentro do intervalo ]%.2lf : %.2lf[\n", + numbers[index], fractional, first_interval, second_interval); + } + // Chamada recursiva correta + count_fractional_in_range(numbers, first_interval, second_interval, index + 1, size, count, false); + } +} + + +/** + Method_10 - + */ +void method_10(void) +{ + // Definir dados + // definir dados + bool repeat = true; + int n_numbers = 0; + double first_interval = 0; + double second_interval = 0; + int count = 0; + // Identificar + IO_id("Method_10 - v 0.0"); + + + // adicionando + do { + printf("Digite dois valores reais (a b) maiores que 0 e menores que 1: "); + scanf("%lf %lf", &first_interval, &second_interval); + getchar(); + + if (first_interval > 0 && first_interval < 1 + && second_interval > 0 && second_interval < 1 + && first_interval < second_interval) { + printf("Intervalo aceito: ]%.2lf : %.2lf[\n", first_interval, second_interval); + } else { + printf("ERRO: Os valores devem ser maiores que 0, menores que 1 e a < b.\n"); + } + } while (!(first_interval > 0 && first_interval < 1 + && second_interval > 0 && second_interval < 1 + && first_interval < second_interval)); // -> ate nao ser igual + + // Get number of values + printf("Digite a quantidade de valores a serem testados: "); + scanf("%d", &n_numbers); + getchar(); + + // fazendo alocao de memoria para *numbers(array) + double *numbers = (double *)malloc(n_numbers * sizeof(double)); + if (numbers == NULL) { + printf("Erro ao alocar memoria.\n"); + return; + } + + // dicionando os valores para dentro do array + printf("Digite os valores reais:\n"); + for (int i = 0; i < n_numbers; i++) { + scanf("%lf", &numbers[i]); + getchar(); + } + + // chamada da recursao + count_fractional_in_range(numbers, first_interval, second_interval, 0, n_numbers, &count, repeat); + printf("Total de valores com partes fracionarias no intervalo: %d\n", count); + + // Encerrar + free(numbers); // Liberar a memoria alocada + IO_pause("Apertar ENTER para continuar"); +} // end method_10 +//--------------------- + + +bool My_insalum ( char * string ){ + char try = *string; // Pega o caractere apontado pelo ponteiro + + bool comparation_a = (try >= 'a' && try <= 'z'); + bool compaeration_A = (try >= 'A' && try <= 'Z'); + bool compation_Num = (try >= '0' && try <= '9'); + + if ( compaeration_A || + comparation_a || + compation_Num){ + //printf("O caracter [%c] e um alfanumerico. \n", *string); + return true; + } else { + //printf("O caracter [%c] nao e alfanumerico. \n", *string ); + return true; + } +} + + +/** + Method_11 - +*/ +void method_11 ( void ) +{ + // definir dados + + char letter[100]; // Array para armazenar a string (tamanho máximo: 99 caracteres) + char non_alphanumeric [100]; + int j = 0; // indicie da nova string + // identificar + IO_id ( "Method_11 - v 3.0" ); + + //iniciando os valores + + printf("Escreva uma frase: "); + fgets(letter, 100, stdin); + getchar(); // Limpa o buffer de entrada + + letter[strcspn(letter,"\n") ] = '\0'; + + for(int i = 0; letter [i] != '\0'; i++){ + if(!My_insalum(&letter[i])){ // -> lembrar de colocar o & na hora de mandar o ponteiro + non_alphanumeric[j++] = letter[i]; // caso a condicao seja falsa, os nao alfanumericos vao receberem a posicao do caractere de letter + } + + non_alphanumeric [j] = '\0'; + + } + + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); + // end method_11 ( ) + +} +//--------------------- + +/** + Method_12 - +*/ +void method_12 ( void ) +{ + // definir dados + + char letter[100]; // Array para armazenar a string (tamanho máximo: 99 caracteres) + char non_alphanumeric [100]; + int i = 0; + bool only_non_alphanumeric = true; // Assume que só há não-alfanuméricos + + // identificar + IO_id ( "Method_12 - v 3.0" ); + + //iniciando os valores + + printf("Escreva uma frase: "); + fgets(letter, 100, stdin); + getchar(); // Limpa o buffer de entrada + + letter[strcspn(letter,"\n") ] = '\0'; // vai tirar o \n assim, vai ler os espacos em branco (ideia proposta pelo professor) + + while ( letter[i] != '\0' ) + { + // vai ver se o valor e igual a cada passagem se um for 0 (false) vai trocar retornar como 0 o valor de only_non_alphanumeric + only_non_alphanumeric = only_non_alphanumeric && !My_insalum(&letter[i]); // esqueci de passar mais uma vez o endereco + i = i + 1; + } + + + + + if (non_alphanumeric == letter){ + printf("na string so contem simbolos alfanumericos. \n"); + } else { + printf("na string contem ao menos um simbolos alfanumericos. \n"); + } + + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); + // end method_12 ( ) + +} +//--------------------- + +//------------------------------------------ +/* + Funcao principal. + @return codigo de encerramento +*/ +int main ( ) +{ + // definir dado + int x = 0; + + // repetir até desejar parar + do + { + // identificar + IO_id ( "EXEMPLO0300 - Programa - v0.0" ); + + // ler do teclado + IO_println ( "Opcoes" ); + IO_println ( "0 - parar" ); + IO_println ( " 1 - letras maiusculas maiores que 'K. " ); + IO_println ( " 2 - letras minusculas menores que 'k.'" ); + IO_println ( " 3 - letars miusculas maiores que 'K', do fim para o inicio da palavra. "); + IO_println ( " 4 - contar e mostrar todos simbolos que forem letras. "); + IO_println ( " 5 - contar e mostrar todos os digitos pares, percorrendo do fim ao inicio. "); + IO_println ( " 6 - contar e mostrar tudo o que nao for digito impar e tambem nao for letra. "); + IO_println ( " 7 - contar e mostrar quantos dentre esses valores lidos (x) os que forem multiplos de 3, e pertençam ao intervalo [a:b]. "); + IO_println ( " 8 - contar e mostrar quantos dentre esses valores lidos (x) os que forem multiplos de 3 menos multiplos de 4, e pertençam ao intervalo [a:b]. "); + IO_println ( " 9 - contar e mostrar todos os valores lidos, pertencentes ao do intervalo, cujas partes inteiras forem pares e menores que 5. "); + IO_println ( "10 - contar e mostrar todos os valores lidos que tenham suas partes fracionarias dentro do intervalo ]a:b[. "); + IO_println ( "11 - separar em outra cadeia de caracteres e mostrar todos os simbolos nao alfanumericos (letras ou digitos) na cadeia de caracteres. "); + IO_println ( "12 - dizer se a sequencia contem apenas símbolos que NAO sao digitos ou letras. "); + + + + IO_println ( "" ); + + x = IO_readint ( "Entrar com uma opcao: " ); + + // testar valor + switch ( x ) + { + case 0: method_00 ( ); break; + case 1: method_01 ( ); break; + case 2: method_02 ( ); break; + case 3: method_03 ( ); break; + case 4: method_04 ( ); break; + case 5: method_05 ( ); break; + case 6: method_06 ( ); break; + case 7: method_07 ( ); break; + case 8: method_08 ( ); break; + case 9: method_09 ( ); break; + case 10: method_10 ( ); break; + case 11: method_11 ( ); break; + case 12: method_12 ( ); break; + + + + + + + default: + IO_pause ( IO_concat ( "Valor diferente das opcoes [0 a 12] (", + IO_concat ( IO_toString_d ( x ), ")" ) ) ); + } // end switch + } + while ( x != 0 ); + + // encerrar + IO_pause ( "Apertar ENTER para terminar" ); + return ( 0 ); +} // end main ( ) + + + + diff --git a/845963_Kayky_Gabriel_Marques_Ed03/Ex_03.c b/845963_Kayky_Gabriel_Marques_Ed03/Ex_03.c new file mode 100644 index 0000000..d804d60 --- /dev/null +++ b/845963_Kayky_Gabriel_Marques_Ed03/Ex_03.c @@ -0,0 +1,427 @@ +/* + Exemplo0300 - v0.0. - __ / __ / _____ + Author: ________________________ +*/ +// dependencias +#include "io.h" // para definicoes proprias + +/** + Method_00 - nao faz nada. + */ +void method_00 ( void ) +{ + // nao faz nada +} // end method_00 ( ) + + +/** + Method_01 - Repeticao com teste no inicio. + */ +void method_01 ( void ) +{ + // definir dado + int x = 0; + + // identificar + IO_id ( "Method_01 - v0.0" ); + + // ler do teclado o valor inicial + x = IO_readint ( "Entrar com uma quantidade: " ); + + // repetir (x) vezes + while ( x > 0 ) + { + // mostrar valor atual + IO_println ( IO_toString_d ( x ) ); + // passar ao proximo valor + x = x - 1; + } // end while + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_01 ( ) + + +/** + Method_02 - Repeticao com teste no inicio. + */ +void method_02 ( void ) +{ + // definir dado + int x = 0; + int y = 0; + + // identificar + IO_id ( "Method_02 - v0.0" ); + + // ler do teclado + x = IO_readint ( "Entrar com uma quantidade: " ); + + // repetir (x) vezes + y = x; // copiar o valor lido (e' melhor) + while ( y > 0 ) + { + // mostrar valor atual + IO_println ( IO_toString_d ( x ) ); + // passar ao proximo valor + y = y - 1; + } // end while + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_02 ( ) + + +/** + Method_03 - Repeticao com teste no inicio. + */ +void method_03 ( void ) +{ + // definir dado + int x = 0; + int y = 0; + + // identificar + IO_id ( "Method_03 - v0.0" ); + + // ler do teclado + x = IO_readint ( "Entrar com uma quantidade: " ); + + // repetir (x) vezes + y = 1; // o valor lido devera' ser preservado + while ( y <= x ) + { + // mostrar valor atual + IO_printf ( "%d\n", y ); + // passar ao proximo valor + y = y + 1; + } // end while + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_03 ( ) + + +/** + Method_04 - Repeticao com teste no inicio e variacao. + */ +void method_04 ( void ) +{ + // definir dado + int x = 0; + int y = 0; + int z = 0; + + // identificar + IO_id ( "Method_04 - v0.0" ); + + // ler do teclado + x = IO_readint ( "Entrar com uma quantidade: " ); + + // repetir (x) vezes + // inicio teste variacao + for ( y = 1; y <= x; y = y + 1 ) + { + // ler valor do teclado + z = IO_readint ( "Valor = " ); + // mostrar valor atual + IO_printf ( "%d. %d\n", y, z ); + } // end for + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_04 ( ) + + +/** + Method_05 - Repeticao com teste no inicio e variacao. + */ +void method_05 ( void ) +{ + // definir dado + int x = 0; + int y = 0; + int z = 0; + + // identificar + IO_id ( "Method_05 - v0.0" ); + + // ler do teclado + x = IO_readint ( "Entrar com uma quantidade: " ); + + // repetir (x) vezes + // inicio teste variacao + for ( y = x; y >= 1; y = y - 1 ) + { + // ler valor do teclado + z = IO_readint ( "Valor = " ); + // mostrar valor atual + IO_printf ( "%d. %d\n", y, z ); + } // end for + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_05 ( ) + + +/** + Method_06 - Repeticao sobre cadeia de caracateres. + */ +void method_06 ( void ) +{ + // definir dado + int x = 0; + int y = 0; + + chars palavra = IO_new_chars ( STR_SIZE ); + int tamanho = 0; + + // identificar + IO_id ( "Method_06 - v0.0" ); + + // ler do teclado + palavra = IO_readstring ( "Entrar com uma palavra: " ); + + // repetir para cada letra + tamanho = strlen ( palavra ) - 1; +// OBS: A cadeia de caracteres iniciam suas posições em zero. + + // inicio teste variacao + for ( y = tamanho; y >= 0; y = y - 1 ) + { + // mostrar valor atual + IO_printf ( "%d: [%c]\n", y, palavra [y] ); + } // end for + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_06 ( ) + + +/** + Method_07 - Repeticao sobre cadeia de caracateres. + */ +void method_07 ( void ) +{ + // definir dado + int x = 0; + int y = 0; + + char palavra [STR_SIZE]; + int tamanho = 0; + + // identificar + IO_id ( "Method07 - v0.0" ); + + // ler do teclado + IO_printf ( "Entrar com uma palavra: " ); + scanf ( "%s", palavra ); getchar( ); +// OBS: A cadeia de caracteres dispensa a indicacao de endereco (&) na leitura. + + + + // repetir para cada letra + tamanho = strlen ( palavra ); +// OBS: A cadeia de caracteres iniciam suas posições em zero. + + // inicio teste variacao + for ( y = 0; y < tamanho; y = y + 1 ) + { + // mostrar valor atual + IO_printf ( "%d: [%c]\n", y, palavra [y] ); + } // end for + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_07 ( ) + + +/** +Method_08 - Repeticao com intervalos. +*/ +void method_08 ( void ) +{ +// definir dado + int inferior = 0; + int superior = 0; + int x = 0; + +// identificar + IO_id ( "Method08 - v0.0" ); + +// ler do teclado + inferior = IO_readint ( "Limite inferior do intervalo: " ); + superior = IO_readint ( "Limite superior do intervalo : " ); + +// inicio teste variacao + for ( x = inferior; x <= superior; x = x + 1 ) + { + // mostrar valor atual + IO_printf ( "%d\n", x ); + } // end for + +// encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_08 ( ) + + +/** + Method_09 - Repeticao com intervalos. + */ +void method_09 ( void ) +{ + // definir dado + double inferior = 0; + double superior = 0; + double passo = 0; + double x = 0; + + // identificar + IO_id ( "Method_09 - v0.0" ); + + // ler do teclado + inferior = IO_readdouble ( "Limite inferior do intervalo : " ); + superior = IO_readdouble ( "Limite superior do intervalo : " ); + passo = IO_readdouble ( "Variacao no intervalo (passo): " ); + + // inicio teste variacao + for ( x = superior; x >= inferior; x = x - passo ) + { + // mostrar valor atual + IO_printf ( "%lf\n", x ); + } // end for + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_09 ( ) + + +/** + Method_10 - Repeticao com confirmacao. + */ +void method_10 ( void ) +{ + // definir dado + double inferior = 0; + double superior = 0; + double passo = 0; + double x = 0; + + // identificar + IO_id ( "Method10 - v0.0" ); + + // ler do teclado + inferior = IO_readdouble ( "Limite inferior do intervalo : " ); + + // repetir ate' haver confirmacao de validade + do + { + superior = IO_readdouble ( "Limite superior do intervalo: " ); + } + while ( inferior >= superior ); + + // repetir ate' haver confirmacao de validade + do + { + passo = IO_readdouble ( "Variacao no intervalo (passo): " ); + } + while ( passo <= 0.0 ); + + // inicio teste variacao + for ( x = inferior; x <= superior; x = x + passo ) + { + // mostrar valor atual + IO_printf ( "%lf\n", x ); + } // end for + + // encerrar + IO_pause ( "Apertar ENTER para continuar" ); +} // end method_10 ( ) + + +/* + Funcao principal. + @return codigo de encerramento +*/ +int main ( ) +{ + // definir dado + int x = 0; + + // repetir até desejar parar + do + { + // identificar + IO_id ( "EXEMPLO0300 - Programa - v0.0" ); + + // ler do teclado + IO_println ( "Opcoes" ); + IO_println ( " 0 - parar" ); + IO_println ( " 1 - Method 01 repeticao com teste no inicio" ); + IO_println ( " 2 - Method 02 Repeticao com teste no inicio" ); + IO_println ( " 3 - Method 03 Repeticao com teste no inicio "); + IO_println ( " 4 - Method 04 Repeticao com teste no inicio e variacao"); + IO_println ( " 5 - Method 05 Repeticao com teste no inicio e variacao. "); + IO_println ( " 6 - Method 06 Repeticao sobre cadeia de caracateres."); + IO_println ( " 7 - Method 07 Repeticao sobre cadeia de caracateres."); + IO_println ( " 8 - Method 08 Repeticao com intervalos. "); + IO_println ( " 9 - Method 09 Repeticao com intervalos. "); + IO_println ( "10 - Method 10 Repeticao com confirmacao. "); + + + + + x = IO_readint ( "Entrar com uma opcao: " ); + + // testar valor + switch ( x ) + { + case 0: method_00 ( ); break; + case 1: method_01 ( ); break; + case 2: method_02 ( ); break; + case 3: method_03 ( ); break; + case 4: method_04 ( ); break; + case 5: method_05 ( ); break; + case 6: method_06 ( ); break; + case 7: method_07 ( ); break; + case 8: method_08 ( ); break; + case 9: method_09 ( ); break; + case 10: method_10 ( ); break; + default: + IO_pause ( IO_concat ( "Valor diferente das opcoes [1 a 10] (", + IO_concat ( IO_toString_d ( x ), ")" ) ) ); + } // end switch + } + while ( x != 0 ); + + // encerrar + IO_pause ( "Apertar ENTER para terminar" ); + return ( 0 ); +} // end main ( ) + + +/* +---------------------------------------------- documentacao complementar + +---------------------------------------------- notas / observacoes / comentarios + +---------------------------------------------- previsao de testes + +a.) 0 +b.) 1 +c.) 2 +d.) 3 +e.) 4 + f.) -1 + +---------------------------------------------- historico + +Versao Data Modificacao + 0.1 __/__ esboco + + ---------------------------------------------- testes + +Versao Teste + 0.1 01. ( OK ) identificacao de programa + +*/ \ No newline at end of file diff --git a/845963_Kayky_Gabriel_Marques_Ed03/io.h b/845963_Kayky_Gabriel_Marques_Ed03/io.h new file mode 100644 index 0000000..c7d8dba --- /dev/null +++ b/845963_Kayky_Gabriel_Marques_Ed03/io.h @@ -0,0 +1,542 @@ +/** + IO - Console input/output library. + @author PUC-Minas - ICEI + @version 0.1 - 2025-1b + + IO - v2025-1_0.1 - __ / __ / _____ + Author: Kayky_Gabriel_Marques + + */ +// ---------------------- lista de dependencias + +#include // para entradas e saidas +#include // para definicoes basicas +#include // para a biblioteca padrao +#include // para cadeias de caracteres +#include // para tratar argumentos +#include // para definicoes logicas +#include // para tipos padroes +#include // para definicoes matematicas +#include // para medir tempo +#include // para 16-bit characters +#include // para and, or, xor, not alternatives + +// ---------------------- redefinicoes para apontamentos + +#ifndef __IO_REFS__ +#define __IO_REFS__ + +#define nullptr NULL // para compatibilizar com C++ +#define null NULL // para generalizar + +#define addr(p) (&(p)) // para obter endereco +#define deref(p) (*(p)) // para obter conteudo de endereco +#define val(p) (*(p)) // para obter conteudo apontado + +#define ref * // para passar parametro por referencia + // (na assinatura) +#define var & // para passar parametro por referencia + // (na chamada) + +#endif + +// ---------------------- redefinicoes uteis + +#ifndef _IO_H_ +#define _IO_H_ + // alternativas mais seguras, se disponiveis +#define IO_printf printf // melhor: printf_s +#define IO_scanf scanf // melhor: scanf_s +#define IO_fprintf fprintf // melhor: fprintf_s +#define IO_fscanf fscanf // melhor: fscanf_s + +// ---------------------- definicoes de constantes + +const bool FALSE = false; // definir constante +const bool TRUE = true ; // definir constante + +const char EOS = '\0'; // definir fim de cadeia de caracteres +const char EOL = '\n'; // definir mudanca de linha +const char ENDL [] = "\n"; // definir mudanca de linha + +const char STR_EMPTY [] = "" ; // definir cadeia de caracteres vazia +const int STR_SIZE = 80 ; // definir tamanho padrao para caracteres + +// ---------------------- definicoes de tipos + +typedef char* chars ; // definir cadeia de caracteres +typedef int* ints ; // definir arranjo de inteiros +typedef double* doubles; // definir arranjo de reais +typedef bool* bools ; // definir arranjo de logicos + +// ---------------------- definicoes de variaveis globais + +int IO_error = 0; // inicialmente sem erros +bool IO_trace = true; // inicialmente habilitado + +// ---------------------- definicoes de funcoes e procedimentos + +// ---------------------- para tratamento de erros + +void IO_debugOFF ( ) +{ + IO_trace = false; +} // end IO_debug_OFF ( ) + +void IO_debugON ( ) +{ + IO_trace = true; +} // end IO_debug_ON ( ) + +void IO_debug ( bool condition, const char * const text ) +{ + if ( IO_trace && condition ) + { + IO_printf ( "\nDBG> %s\n", text ); + getchar( ); + } // end if +} // end IO_debug ( ) + +// ---------------------- para entradas e saidas + +/** + Metodo para limpar a saida de dados padrao. + */ +void IO_clrscr ( ) +{ + if ( IO_trace ) + { +#if defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__) + system ( "cls" ); // para Windows - OBS: NAO RECOMENDADO ! +#elif defined(__linux__) + system ( "clear" ); // para Linux - OBS: NAO RECOMENDADO ! +#elif defined(__APPLE__) && defined(__MACH__) + system ( "clear" ); // para Linux - OBS: NAO RECOMENDADO ! +#elif defined(unix) || defined(__unix__) || defined(__unix) + system ( "clear" ); // para Linux - OBS: NAO RECOMENDADO ! +#else + #error Unknown_OS +#endif + } // end if +} // end IO_flush ( ) + +/** + Metodo para limpar a entrada de dados padrao. + */ +void IO_flush ( ) +{ +// fflush ( stdin ); // para Windows - OBS: NAO RECOMENDADO ! + // para Linux - OBS: NAO FUNCIONA ! + int x = 0; // compat vel com o retorno de getchar() + do { x = getchar( ); } while ( x != EOF && x != '\n' ); + clearerr ( stdin ); // reiniciar o estado de EOF +} // end IO_flush ( ) + +/** + Funcao para informar a versao dessa biblioteca. + @return versao atual + */ +chars IO_version ( ) +{ + chars x = strdup ( "v.2025-" ); + return ( x ); +} // end IO_version ( ) + +/** + Metodo para identificar o programa e a autoria. + @param text - mensagem a ser exibida + */ +void IO_id ( const char * const text ) +{ + IO_printf ( "%s\n", text ); + IO_printf ( "%s\n", "Autor: Kayky_Gabriel_Marques" ); + IO_printf ( "\n" ); // mudar de linha +} // fim IO_id ( ) + +/** + Funcao para ler valor inteiro do teclado. + @return valor lido + @param text - mensagem a ser exibida antes da leitura + */ +int IO_readint ( const char * const text ) +{ + int x = 0; + if ( IO_trace ) + IO_printf ( "%s", text ); + IO_scanf ( "%d", &x ); + IO_flush ( ); + return ( x ); +} // end IO_readint ( ) + +/** + Funcao para ler valor real de precisao dupla do teclado. + @return valor lido + @param text - mensagem a ser exibida antes da leitura + */ +double IO_readdouble ( const char * const text ) +{ + double x = 0.0; + if ( IO_trace ) + IO_printf ( "%s", text ); + IO_scanf ( "%lf", &x ); + IO_flush ( ); + return ( x ); +} // end IO_readdouble ( ) + +/** + Funcao para ler valor real de precisao simples do teclado. + @return valor lido + @param text - mensagem a ser exibida antes da leitura + */ +float IO_readfloat ( const char * const text ) +{ + float x = 0.0; + if ( IO_trace ) + IO_printf ( "%s", text ); + IO_scanf ( "%f", &x ); + IO_flush ( ); + return ( x ); +} // end IO_readfloat ( ) + +/** + Funcao para ler valor logico do teclado. + @return valor lido + @param text - mensagem a ser exibida antes da leitura + OBS.: Usar zero (0) para falso e + diferente de zero para verdadeiro + */ +bool IO_readbool ( const char * const text ) +{ + int x = 0; + if ( IO_trace ) + IO_printf ( "%s", text ); + IO_scanf ( "%d", &x ); + IO_flush ( ); + return ( x!=0 ); +} // end IO_readbool ( ) + +/** + Funcao para ler caractere do teclado. + @return valor lido + @param text - mensagem a ser exibida antes da leitura + */ +char IO_readchar ( const char * const text ) +{ + char x = '0'; + if ( IO_trace ) + IO_printf ( "%s", text ); + do { x = getchar( ); } while ( '\n' == x ); IO_flush ( ); +// getchar ( ); + return ( x ); +} // end IO_readchar ( ) + +/** + Funcao para ler caractere do teclado. + @return valor lido + @param text - mensagem a ser exibida antes da leitura + */ +void IO_pause ( const char * const text ) +{ + char x = '0'; + if ( IO_trace ) + { + IO_printf ( "\n%s\n", text ); + do { x = getchar( ); } while ( '\n' != x ); + } // end if +} // end IO_pause ( ) + +/** + Funcao para reservar espaco para guardar cadeia de caracteres. + @return area reservada, se houver; NULL, caso contrario + @param size - quantidade de dados + */ +chars IO_new_chars ( int size ) +{ + return ( (chars) malloc ( (size+1)*sizeof(char) ) ); +} // fim IO_new_chars ( ) + +/** + Funcao para reservar espaco para guardar inteiros. + @return area reservada, se houver; NULL, caso contrario + @param size - quantidade de dados + */ +ints IO_new_ints ( int size ) +{ + return ( (ints) malloc ( (size)*sizeof(int) ) ); +} // fim IO_new_ints ( ) + +/** + Funcao para reservar espaco para guardar reais. + @return area reservada, se houver; NULL, caso contrario + @param size - quantidade de dados + */ +doubles IO_new_doubles ( int size ) +{ + return ( (doubles) malloc ( (size)*sizeof(double) ) ); +} // fim IO_new_doubles ( ) + +/** + Funcao para reservar espaco para guardar logicos. + @return area reservada, se houver; NULL, caso contrario + @param size - quantidade de dados + */ +bools IO_new_bools ( int size ) +{ + return ( (bools) malloc ( (size)*sizeof(bool) ) ); +} // fim IO_new_bools ( ) + +/** + Funcao para concatenar cadeias de caracteres. + @return cadeia com o resultado + @param text1 - primeira cadeia + @param text2 - segunda cadeia + */ +chars IO_concat ( const char * const text1, const char * const text2 ) +{ // reservar area + chars buffer = IO_new_chars ( strlen(text1)+strlen(text2)+1 ); + strcpy ( buffer, text1 ); + strcat ( buffer, text2 ); + return ( buffer ); +} // fim IO_concat ( ) + +/** + Funcao para converter valor logico para caracteres. + @return cadeia com o resultado + @param x - valor logico + */ +chars IO_toString_b ( bool x ) +{ // reservar area + chars buffer = IO_new_chars ( STR_SIZE+1 ); + sprintf ( buffer, "%d", x );// variante do printf( ) + return ( buffer ); +} // fim IO_toString_b ( ) + +/** + Funcao para converter caractere para caracteres. + @return cadeia com o resultado + @param x - caractere + */ +chars IO_toString_c ( char x ) +{ + chars buffer = IO_new_chars ( STR_SIZE+1 ); + sprintf ( buffer, "%c", x );// variante do printf( ) + return ( buffer ); +} // fim IO_toString_c ( ) + +/** + Funcao para converter inteiro para caracteres. + @return cadeia com o resultado + @param x - valor inteiro + */ +chars IO_toString_d ( int x ) +{ + chars buffer = IO_new_chars ( STR_SIZE+1 ); + sprintf ( buffer, "%d", x );// variante do printf( ) + return ( buffer ); +} // fim IO_toString_d ( ) + +/** + Funcaoo para converter real para caracteres. + @return cadeia com o resultado + @param x - valor real + */ +chars IO_toString_f ( double x ) +{ // variante do printf( ) + chars buffer = IO_new_chars ( STR_SIZE+1 ); + sprintf ( buffer, "%lf", x ); + return ( buffer ); +} // fim IO_toString_f ( ) + +/** + Metodo para mostrar uma linha com certo texto. + @param text - texto a ser exibido + */ +void IO_print ( const char * const text ) +{ + IO_printf ( "%s", text ); +// puts ( text ); +} // fim IO_print ( ) + +/** + Metodo para mostrar uma linha com certo texto + e mudar de linha. + @param text - texto a ser exibido + */ +void IO_println ( const char * const text ) +{ + IO_printf ( "%s\n", text ); +// puts ( text ); putchar ( '\n' ); +} // fim IO_println ( ) + +/** + Metodo para gravar uma linha em arquivo texto. + @param filePtr - referencia para arquivo aberto + @param text - cadeia de caracteres a ser gravada + */ +void IO_fprint ( FILE* filePtr, const char * const text ) +{ + IO_fprintf ( filePtr, "%s", text ); +} // fim IO_fprint ( ) + +/** + Metodo para gravar uma linha em arquivo texto + e mudar de linha. + @param filePtr - referencia para arquivo aberto + @param text - cadeia de caracteres a ser gravada + */ +void IO_fprintln ( FILE* filePtr, const char * const text ) +{ + IO_fprintf ( filePtr, "%s\n", text ); +} // fim IO_fprintln ( ) + +/** + Funcao para ler uma cadeia de caracteres de arquivo. + @return palavra lida + @param arquivo - referencia para arquivo aberto + */ +chars IO_fread ( FILE* filePtr ) +{ + chars buffer = IO_new_chars ( STR_SIZE+1 ); + + IO_fscanf ( filePtr, "%s", buffer ); // ler uma cadeia + return ( buffer ); +} // fim IO_fread ( ) + +/** + Funcao para ler uma linha inteira. + @return linha lida + @param filePtr - referencia para arquivo aberto + */ +chars IO_freadln ( FILE* filePtr ) +{ + chars buffer = IO_new_chars ( STR_SIZE+1 ); + + fgets ( buffer, STR_SIZE, filePtr ); // ler uma linha + buffer [ strlen (buffer)-1 ] = EOS; // reposicionar o fim de linha + return ( buffer ); +} // fim IO_freadln ( ) + +/** + Funcao para ler cadeia de caracteres. + @return cadeia de caracteres + @param text - mensagem a ser exibida antes da leitura + */ +chars IO_readstring ( const char * const text ) +{ + chars buffer = IO_new_chars ( STR_SIZE+1 ); + if ( IO_trace ) + IO_printf ( "%s", text ); + IO_scanf ( "%80s", buffer ); // ler cadeia de caracteres + // com limitacao de 80 posicoes + IO_flush ( ); + return ( buffer ); +} // fim IO_readString ( ) + +/** + Funcao para ler uma linha inteira. + @return linha lida + @param text - mensagem a ser exibida antes da leitura + */ +chars IO_readln ( const char * const text ) +{ + if ( IO_trace ) + IO_printf ( "%s", text ); + return ( IO_freadln ( stdin ) ); +} // fim IO_readln ( ) + +/** + Funcao para converter valor logico para cadeia de caracteres. + @return "true", se verdadeiro; "false", caso contrario + @param value - valor a ser convertido + */ +chars IO_boolalpha ( bool value ) +{ + if ( value ) + return ( strdup ("true" ) ); + else + return ( strdup ("false" ) ); +} // fim IO_boolalpha ( ) + +/** + Funcao para comparar conteudos em memoria. + @return true, se iguais; false, caso contrario + @param p1 - endereco do primeiro valor + @param p2 - endereco do segundo valor + @param size - tamanho em bytes a ser comparado + */ +bool IO_check ( void *p1, void *p2, unsigned int size ) +{ + return ( p1 && p2 && (0==memcmp( p1, p2, size )) ); +} // fim IO_check ( ) + +/** + Funcao para retornar o tamanho de cadeia de caracteres. + @return tamanho, se existir; 0, caso contrario + @param text - cadeia de caracteres + */ +int IO_length ( char* text ) +{ + int x = 0; + if ( text ) + { x = strlen(text); } + return ( x ); +} // fim IO_length ( ) + +/** + Funcao para obter simbolo de certa posicao + em cadeia de caracteres. + @return simbolo, se existir; '\0', caso contrario + @param text - cadeia de caracteres + @param index - posicao desejada + */ +char IO_charAt ( char* text, unsigned int index ) +{ + char x = '\0'; + if ( text && index < strlen(text) ) + { x = text [ index ]; } + return ( x ); +} // fim IO_charAt ( ) + +/** + Funcao para copiar parte de uma cadeia de caracteres. + @return parte de cadeia de caracteres ou + NULL, caso houver parametros invalidos + @param text - cadeia de caracteres + @param start - onde comecar + @param size - quantos caracteres copiar + */ +char* IO_substring ( char *text, int start, unsigned int size ) +{ + chars buffer = NULL; + if ( start >= 0 && (start+size) < (int) strlen(text) ) + { + buffer = IO_new_chars ( size+1 ); + memcpy ( buffer, text+start, size ); + buffer [size] = '\0'; + } + return ( buffer ); +} // fim IO_substring ( ) + +/** + Funcao para copiar parte de uma cadeia de caracteres. + @return parte de cadeia de caracteres ou + NULL, caso houver parametros invalidos + @param text - cadeia de caracteres + @param symbol - caractere a ser acrescentado + */ +char* IO_strapp ( char *text, char symbol ) +{ + chars buffer = NULL; + int size = 0 ; + if ( text ) + { + size = strlen ( text ); + buffer = IO_new_chars ( size+1 ); + memcpy ( buffer, text, size ); + buffer [size ] = symbol; + buffer [size+1] = '\0' ; + } + return ( buffer ); +} // fim IO_strapp ( ) + +#endif diff --git a/845963_Kayky_Gabriel_Marques_Ed03/notes.txt b/845963_Kayky_Gabriel_Marques_Ed03/notes.txt new file mode 100644 index 0000000..3e3f7a7 --- /dev/null +++ b/845963_Kayky_Gabriel_Marques_Ed03/notes.txt @@ -0,0 +1,339 @@ +-------------// DESAFIO \\------------- +Desafio da semana! fazer toda a leitura das strings apartir de +recursao! + +os desavios estavam mais complicados que eu imaginei kkkk, entao foram os unicos que eu nao usei recursao +-------------// NOTES \\------------- + +Method_01 + +A ideia por tras do metodo 01 lembra muito os ultimos exercicios do Ed02 +Se deve testar letras maiores que 'K'. + Uma ideia que eu tive para fazer e uma recursao, onde cada letra que passa no filto + (sendo esta maior que K) acho que vai ser mais desafiador + Apos rever o que eu errei e como eu poderia corrigilos, percebi que eu esqueci de fazer +alocacao dinamica para receber e enviar os dados :|. eu nao sei como que eu deixei algo +tao basico de lado + +Bom os erros ja se foram, junto com os warnings, mas ele nem ao menos compila, estou confuso. + +genuinamente nao gosto de fazer daquele jeito mas estou ficando sem criatividade. + +Tive mais um erro, colocar o meu array com valor de 99 nao deu certo, +aparente ele começou a testar com lixo. + +fique perdido, entei em loop infinito. + +finalmente, fuiciona + + +Method_02 + + Bom, horas como essas eu iria amar um "POO" so para nao ter que repetir e ate mesmo +fazer um "ctrl c e v", usei meu metodo que planejei no metodo 1, e so troquei sua condicao +ao inves de comprar a letra com 'K' agora e com 'k' e ver se e menor ou maior + + Tive a ideia de chamar io_id para ter mais controle sobre oq esta acontecendo +porem, como se trata de uma recursao esquci que ele sempre vai ser chamado a quantidade +de vezes que o metodo sera chamado . + Tive uma ideia para chamar ele so uma vez, fazer uma variavel booleana, com um contador +se o contador for maior que um, ele nao vai mais printar o io_id! + fiz meu metodo receber um novo parametro "one_call" que como o nome sugre, so vai chamar uma vez +a funcao "io_id" como ela recebe um variavel verdadeira ela vai printar somente uma vez, porem, em +sua recursao e trocada alterada por falso. disso, so chamado uma vez pela sua condicao. + + +Method_03 + A ideia deste metodo vai ser, ler a string e ver se minha letra e maior que 'K' porem, +começar de tras para frente. + + Incrivelmente, fazer com recursao e mais facil isso, mudando a forma da chamada a pilha vai +ser modelada da forma que eu quero + +Method_04 + A ideia deste metodo e simplesmente contar todos os caracteres de 'A' a 'Z' no caso +todos que fizerem parte do alfabeto, caracteres especiasi (!, @, #, $, %, &, *, <, >, :, ;, ?) +nao deveram ser contado + +Method_05 + O metodo 5 visa ler a string ao contrario, disso, ler somente numeros que sejam par +alem de mostrar-los, apresentar um contador que mostra a quantide de numeros pares que a pareceram + vou usar o modelo do Method_03, como ele faz a recursao ao contrario, mudando as condicoes +e seus fatores vai ser mais facil de manipular para chegar na resposta. + uma coisa indispensavel e a conversao de inteiro para char. Ele esta funcionando, menos meu contador +nao entendi o seu erro ate agora, ja fiz uma mudanças desnessarias como tirar o "int number" que nao fazia sentido +ja que ja tinha sido declarado na inicio do metodo. + simplesmente nao entendi o por que nao esta funcionando, nao consegui resolver + + +Method_06 + O metodo 6, e o inverso do Method_05, ja que a unica coisa que ele pede para ler e os numeros pares +e neste ele le tudo, menos numeros impares e pede para mostrar e contar os outros caracteres. + nao apresentei erros neste :) + + Method_07 + O programa deve ler dois valores inteiros, a e b, que representam os limites de um intervalo fechado +[a:b]. Esse intervalo será usado para verificar se os números testados estão dentro dele. O programa deve ler um +valor inteiro n, que representa a quantidade de valores que serão testados. O programa deve ler n valores inteiros, +um por vez. Para cada valor lido (x), ele deve verificar: + +Se o valor x é múltiplo de 3. +Se o valor x está dentro do intervalo [a:b]. + +O programa deve ler n valores inteiros, um por vez. Para cada valor lido (x), ele deve verificar: +Se o valor x é múltiplo de 3. +Se o valor x está dentro do intervalo [a:b]. + +a ideia desta atividade nao e dificil, mas e trabalhosa (da para ver que eu nem quis esrever com as minhas palavar) + +RESUMINDO + +Define um intervalo [a:b]. ->vimos muito isso no ultimo ed + +Lê uma quantidade n de valores. -> passo base + +Verifica, para cada valor, se ele é múltiplo de 3 e se está dentro do intervalo. + +Conta e exibe quantos valores atendem às duas condições. + + +fiquei tanto tempo que esquci de fazer as anotacoes, oq importa q funciona + + Method_08 + O programa e quase a mesma coisa do metodo 7, porem, ele verifica se o numero se ele e multiplo de 4 tambem, e caso for, nao deverar +retornar o valor e o contador nao deve ser acionado, disso, mudando um pouco da logica e fazendo ele ficar mais "dificil" + + Vi um video de um gringo explicando forma de comparacoes usando booleano, e decidi colocar em pratica resumindo, colocando minha afirmacao +em uma variavel bool sera declarada como "true" e caso ela nao passe na minha condicao vai realizar o contrario. Eu genuinamente achei esse jeito +um forma mais limpa e facil de se ler e interpretar o codigo, resumo as coisas faço mais legivel. + + Method_09 + contar e mostrar todos os valores lidos, pertencentes ao do intervalo, cujas partes inteiras forem pares e menores que 5. +De inicio eu achei quer era para ver o final do numero real, mas ai que eu entendi, tive algumas complicaçoes mas de pois de ver +no stack overflow que para trocar o valor de uma varivael e submeterla ao valor de outro tipo, era so colocar seu tipo (int) na frente +da variavel e pronto! + Permanece usando a ideia que eu tive no metodo 08 e permanece facil de se entender. + + Method_10 + Esse metodo foi um dos mais complicados ate agora, na aula de dia 10/03, professor falou sobre os loops mais uma vez +e sobre "se o usuario" errar oq pode fazer, decedi colocar um while para repetir ate o usuario acertar e caso ele queria colocar outro +valor. + O metodo visa ver a fraçao de sua parte (desconsiderar o valor inteiro e verificar o seu valor decimal ) e verificar se o valor esta entre +o intervalo aberto de 0 e 1 + e de primeira eu usei uma funcao de c, chamada de "floor" ela serve para pegar o menor numero, usei a ja prototipada pela linguagem, +mas como estamos aqui para ver desafios, decedi fazer a minha! + + + Method_12 + de primeira, achei que seria falso, tive a ideia de reaproveitar grande parte do metodo 11, mas vi que nao seria o suficiente +minha primeira ideia era comparar a string com a outra (only_non_alphanumeric), mas simplesmente nao fazia sentido, entao depois de varias +pesquisas (eu usei IA sim pq eu fique perdido em algumas coisas) decedi que ia ser melhor usar mais uma vez boolean + + My_insalum(&letter[i]) A função My_insalum verifica se o caractere atual é alfanumérico (letra ou dígito). + + retorna 1 (true) se for alfanumérico. retorna 0 (false) se não for. !My_insalum(&letter[i]) e a negação inverte seu valor: +Se o caractere e alfanumérico, vira false. se nao true + +only_non_alphanumeric = only_non_alphanumeric && !My_insalum(&letter[i]); + +A variavel only_non_alphanumeric: começa como 1 (com a ideia de que começa com algum alfanumerico). e primeiro caractere alfanumerico +encontrado, vira false. mantem o valor 0 ate o final, pois o && (and) so resulta em 1 se ambos os lados forem 1. + -------------// consideracoes \\------------- + Levei em torno de 4 dias para fazer esse tp, eu poderia ter ido pelo caminho facio, mas qual e é graça de fazer coisas que +sao faceis? eu quebrei a cabeça varias vezes, vi varios videos e adimito que usei gpt e outras inteligencis artificiais para ter uma ideia +melhor de como fazer. eu pessoalmente nao gosto de monitoria, prefiro fazer as coisas sozinho, entao uso para corrigir e para me dar dicas quando +eu estou perdido, mas nunca a resposta. + Esse ed, me deu um leque de ideias para implementar em futuros codigos e projetos! "suei a camisa" como alguns dizem! amanha dia 11/03 +ja vou começar o proximo. + + Muito obrigado desde ja, atenciosamente + -Kayky gabriel Marques + + + + +-------------// ERROS \\------------- + +Method_01 + +O codigo parou na hr de scaner, acho que nao sei usar muito bem o "io.h". +recebi alguns warnings como: +if (*letter == NULL) +-> sendo este aviso causado por a comparacao de um valor inteiro +com um valor de ponteiro + +claro que esta errado, como vc quer comparar valores que nao sao homegenicos + +if (*letter == '/0') +-> francamente, nem sei oq tinha de errado comigo quando eu escrevi isso + +como que vc quer ver se um ponteiro e '/0'? faz sentido nenhum + +read_string(*letter); +nao fiz a inicializacao de um ponteiro direito, eu realmente preciso de estudar melhor +o "io.h". + Uma longa parte do meus erros foi por conta do mal uso de alocacao dinamica. +Como: usou scanf("%s", letter), sendo letter uma variavel char, n um array ou ponteiro para armazenar uma string. +Isso causa erro de segmentacao ao tentar acessar a memoria indevidamente + +--------------------//--------------------------- +De: +scanf("%s", letter); + +Para: +char str[100]; +scanf("%99[^\n]", letter); + +Passagem de ponteiros: +De: read_string(&letter); + +Para: +read_string(stletter); +e eu tentei passar o endereco, o erro foi por conta de que imaginei que o metodo +precisaria de um ponteiro (logo o endereco de sua variavel) para realizar o procedimento +mas quem diria que nao + +Condicao incorreta na recursao: +De: if(letter == '\0') + +Para: if(*letter == '\0') + +assim, verifico oq esta sendo apontado corresponde com o final de uma linha. +da outra forma, verificava se o endereco era igual a '\0' algo que nao faz sentido +--------------------\\--------------------------- + +Method_04 + Por hora minha funcao nem ao menos chegou a ler o que tinha que ser escrito +decidi fazer pequenos ajustes, mas ainda perciste no erro. +um dos meus erros foram a forma que eu coloquei minha condicao +De: + if (*letter >= 'a' && *letter <= 'z' || + *letter >='A' && *letter <= 'Z' ) +assim ele nao faz duas verificaoes como desejo, logo +sua correçao deverea ser + +Para +if ((*letter >= 'a' && *letter <= 'z') || + (*letter >= 'A' && *letter <= 'Z')) + + +--------------------//--------------------------- + +--------------------\\--------------------------- + +Method_05 + Na hora de comparar e trocar os valores de char para int tive duvidas +De: + if (*letter >= '0' && *letter <= '9') + +Para + if (*letter >= '0' && *letter <= '9') + int value = *letter - '0'; + int *number = (*number * 10) + value; + + claro que praticamente nao tinha feito mudança nenhuma, mas apos pesquisar vi como que eram feitas +usando a tabela ASCII, e uma das formas de contornar esse problema. + disso um dos meu problemas foi a atuliazacao do valor usando um ponteiro, o seu valor so sera atuliazado +nao sera perdido + + + +--------------------//--------------------------- + +--------------------\\--------------------------- + +Method_08 + Na hora de negar os multiplos de 3 +De: + if (numbers[index] % 3 == 0 ){ // -> verificar se o numero multiplo de 3 + + + if (numbers[index] % 4 == 0 ) { // -> verificar se o numero e multiplo de 4 + printf("O numero [%d] e multiplo de 3 e de 4 (NAO conta).\n \n", numbers[index]); + + } else if (numbers[index] >= firts_interval && + numbers[index] <= second_interval){ // else mult four + + printf("O numero [%d] e multiplo de 3 e faz parte do intervalo de [%d : %d] \n", numbers[index], firts_interval, second_interval); + (*count)++ ; + } +} else { // else mult 3 and interval + printf("o numero [%d], NAO faz e multiplo de 3(NAO conta)\n", numbers[index]); +} + + + +Para + + int current_number = numbers[index]; + bool mult_of_three = numbers[index] % 3 == 0; + bool mult_of_four = numbers[index] % 4 == 0; + bool in_interval = (current_number >= first_interval && current_number <= second_interval); + + + if ( mult_of_three ){ // -> verificar se o numero multiplo de 3 + if ( mult_of_three ){ // -> verificar se o numero multiplo de 3 + + if (mult_of_four) { // -> verificar se o numero e multiplo de 4 + printf("O numero [%d] e multiplo de 3 e de 4 (NAO conta). \n", numbers[index]); + + } else if (in_interval){ + printf("O numero [%d] e multiplo de 3 e faz parte do intervalo de [%d : %d] \n", numbers[index], first_interval, second_interval); + (*count)++ ; + } else { + printf("O numero [%d] nao e multiplo de 3 (NAO conta). \n", numbers[index]); + } +} + + Tive essa ideia apos ver um video de um gringo falando sobre como usar booleano em condicao +dessa forma, declarando elas desse jeito, pode notar que sua leitura fica mais facil, alem disso ele verifica, +se e verdade (com base na operaçao) disso se for verdade executa se nao, faz a sua condicao inversa (else) + + +--------------------//--------------------------- + +--------------------\\--------------------------- + +Method_10 +De: + double fractional = numbers[index] - floor(numbers[index]); // Parte fracionaria + +Para + + // implementacao de uma funcao ja existene chamada floor para pegar o numero e +double My_floor (int value ) { + // caso o numero foi ja for inteiro + if ((int) value == value ) { + return value; + } + // caso ele for maior que 0 + if(value > 0){ + return (int)value; // -> retornar o valor inteiro + } + + return (int) value - 1; // caso for negativo, arredonda para o menor inteiro +} + + void count_fractional_in_range(double *numbers, double first_interval, double second_interval, int index, int size, int *count, bool one_call) { + if (one_call) { + IO_id("\ncount_fractional_in_range - v 4.0\n"); + } + + if (index < size) { // Passo base + double fractional = numbers[index] - My_floor(numbers[index]); // Parte fracionaria + + if (fractional > first_interval && fractional < second_interval) { // -> ver se esta dentro do intervalo aberto + printf("%.2lf tem parte fracionaria %.2lf dentro do intervalo ]%.2lf : %.2lf[\n",numbers[index], fractional, first_interval, second_interval); + (*count)++; + + } else { + printf("[%.2lf] nao contem parte fracionaria [%.2lf] dentro do intervalo ]%.2lf : %.2lf[\n", + numbers[index], fractional, first_interval, second_interval); + } + // Chamada recursiva correta + count_fractional_in_range(numbers, first_interval, second_interval, index + 1, size, count, false); + } +} + + +--------------------//--------------------------- \ No newline at end of file