From 95f78ee7e3f7ca0d48c4eada850059d25a7dbfd0 Mon Sep 17 00:00:00 2001 From: PiPi-mk <563413940@qq.com> Date: Fri, 24 Jan 2025 20:59:17 +0800 Subject: [PATCH 1/3] Add files via upload --- report.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ report.pdf | Bin 0 -> 100385 bytes 2 files changed, 49 insertions(+) create mode 100644 report.md create mode 100644 report.pdf diff --git a/report.md b/report.md new file mode 100644 index 0000000..5d62b3f --- /dev/null +++ b/report.md @@ -0,0 +1,49 @@ +# LinkLab 报告 + +姓名:赖柏有 +学号:2022201388 + +## Part A: 思路简述 + +本实验旨在设计和实现一个简单的链接器,主要功能包括符号解析、重定位和段合并。链接器的核心思想是逐个处理输入的目标文件,合并其各个段(如 .text、.data 等),并解析全局符号。重定位主要针对地址相关的符号进行计算,确保目标文件的符号地址与最终执行文件的虚拟地址相符。 + +关键的数据结构包括符号表、段表和重定位表。符号表存储所有全局符号及其地址信息;段表管理程序的各个段及其数据;重定位表存储重定位项,确保符号的地址在合并后的文件中得到正确处理。 + +## Part B: 具体实现分析 + +### 符号解析实现 +在符号解析的过程中,我们首先根据符号类型将符号分为全局符号、局部符号和弱符号。对于全局符号,若在多个目标文件中出现,则检查是否存在强符号与弱符号冲突,确保使用强符号的定义。局部符号仅在所在目标文件内部使用,通过添加目标文件名后缀来避免与其他目标文件中的符号冲突。弱符号优先使用强符号定义。 + +对于符号冲突的解决,我们采取了两种策略:若存在强符号与弱符号的冲突,则优先选用强符号;若多个强符号定义相同符号,则抛出错误,提示用户存在重复定义。 + +在符号解析的过程中,错误检查尤为重要。例如,若在重定位时找不到目标符号,我们会抛出 "Undefined symbol" 错误。 + +### 重定位处理 +本实验支持的重定位类型包括 R_X86_64_32、R_X86_64_32S 和 R_X86_64_PC32。针对不同的重定位类型,重定位算法采用不同的处理方式: + +对于 R_X86_64_32,将符号的地址填入对应位置,截断为 32 位。 +对于 R_X86_64_32S,处理类似,但需要确保符号位的扩展是合法的(符号扩展)。 +对于 R_X86_64_PC32,计算相对偏移量,考虑程序计数器 %rip 的位置,确保跳转指令正确。 +错误处理方面,我们会检查重定位符号是否已定义,若未定义则抛出 Undefined symbol 错误。此外,重定位过程中需要进行合法性检查,确保所有计算结果符合目标平台的要求。 + +### 段合并策略 +在合并段的过程中,我们首先按段名进行合并。例如,.text 和 .rodata 等段会被合并到目标文件的相应位置。我们特别注意段的对齐,确保每个段的起始地址是 4KB 对齐,以符合常见操作系统的内存管理要求。 + +局部符号的存储考虑到其只在本目标文件内有效,因此我们采用了符号名称后加目标文件名后缀的方法来避免与全局符号冲突。 + +## Part C: 关键难点解决 +关键难点是第三步重定位,起初test_3一直发生段错误但是找了很久都找不到重定位是哪里出错了,后面看了很久才知道是没有考虑到P是要根据%rip计数器进行调整的,修改了这个才终于把这一关过了 + +## Part D: 实验反馈 + +实验估计7-15个小时但对于我来说,靠AI和自己硬磕搞了可能二十多个小时都没有怎么搞好,最后还是参考了别人的代码才能完成,我觉得有可能是我自己本身编程能力太烂了,但这个学习的过程确实对链接器更懂了,虽然自己上手写的时候真的写不好 + +## 参考资料 (可不填) + +1. [资料名] - [链接] - [具体帮助点] +2. ... diff --git a/report.pdf b/report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..10cdd9d402c4a63b88710a7cda0634251c7aef95 GIT binary patch literal 100385 zcmb5V1yozx_Agv2P@qVmxND(EaCdjtVhs@73GT(+-HR7@hoZsV-HN+A4|>i$_ul{a zzVY7M$|7*-`2{~7DW53KxklTLr5zltVGDbM9V@;M+p$L0Rh35|B@k;13M8)f%R!A0n(QG zLO?KxLWqNbj)9quo`H#;fsuuQm5Pq;^YfdMhX(-;WTF2u7sJ2jRC2Nc0R(|ypqZs1 zKn`dKvL$4E<|+WBfEI=nAPX90#b?tXFi`(lhLGtGOT`%E0J4#@0U3a7Ko)u++h^Ye zK^9<;jjHkU1P+7-Kr>qqK*-nzqz5*(v;askC_GcPR%SpaAxk|aW3U#k&J3&q zG_wOyh&q{C%P5)x^!Y78Vq%tTGKxkl`U3I>LKaq*x)uty`l6QH{~7t00RBCj6v)C5 zY(&V!&Ib51@xOu$P_)wpzhp&CT8f9q7W|xVa|AdpUPmjSo+$`Ss0%VQw%{f{YHTGY zG}h-PR%Mo^leQ8B85xT?+kh0EWt8-sP4(FIiFtY8xEwhg&8^Iz(?{rNZf0T2;mA!4 zd@cbH$Mf~eFo2i`j*!bn-+)8mx!C@ad8W9Djlf_l4gkQx!GYF+k=D}25J1n)&JLhs z05CAnJWJ5nI$3~$jx-jwBrhiZvLOVr)w40SddWHAi%p=er5%`?nD}qQ`g;G^wX(A@ z`(ssK4*)U)nLk&LEr6bu{*OP;*7Wr_o-5xR2<8D=S(zE@0sqvImA(NN;NPs5X#p?u z{Kvfix4t}^`o|dyTiQQCq1CfA2Rt*L9bx>JBhMtqzxtBr@4i&Ew9&Wyug+wprQ>?h z{I}@;k8gkZ`yA`%+yMSb&NJ~(dY@aAo7m<#d4DSOU+Mq5abGI&e-`U=aX)t<`0utA zw0!Qv=U@`Dyj1IR=js~+1uPvk=$=UydImyPb_Okg0?5|V&gQSi6?s;8?q3o9=R=&3 z?T^+AAs|TjEdFBS4<$}W|A)u(d;mmkEbXkGmHyQ29|E8VP_hA9*jl~#qUQt7B81+OY6D{L6JOw2rM38VF@0)jD*<)dve{6T}|g)z*Vuq_G0o1v0` zpKZg6UOKcryVK#5I@nFM=)(X4aO^BxZI`-8fKp#B?MTwcI<` zEhm#JF$gR?Jggs;QnXr&hdc^sJyxQ%(q&q1T8y!MbJDvkk>Y*dOXo-(NcBb`2ECIc zGFg4w2_J+h8U@|2%T67RR`%6E9?sOH7#Fc&N8f*Pyw}jTZWwi%)vzM+RC7g;;%K;X z0AQ%VsV<4+m2x3jcdlUni;RokH0!M)#&r78&&x(KwOjlms69_+mQbTKb9iLj^Y3$g z+o-=#UrXw?(F*86NkP%Q`}K*(4TeuRc#=&1RidZS>mRW9p){dy@d9CBIZ(i)+hQY; z86?~t)cm5~!`|YFdwBbC(Gjp$m{N?$+sJ5qfM6=F){T8gdhPJ;u&;dLBY~CbN(o1t zHvenk^p$LpDMCp;{i>Bp(nLSZujZWM%F+GHZL$_E3pCV}6=a}VH?}l42RDc2bFZ8o zrF=Z4_e*s}WqvVpq-|YqOa0awJX2SwSBDJ7uC>=gav9~6^uqBmQ(RT_TJdM`q!=nQ z$);Zo4Ur{@6iXQ@;ZZ2~#;Bvdk^azw)4w1QDpL&}mC{iEk#gwi@F}`DMPN zCpvmev7xzy$B<@)U*xU8DYfy+_pi+TpD_iX3!&e9BYu4Dy-Bo; zWM>QOAg$u}<^{5S_Xges`)m5A$zkRPo<-i3Z2JyY@3&?QPu2ZpMeC}%I60<^o0EU| zKH9sja)MjL@IKMU#NpK)fH)Y!p zm?KeMSv@hE?<7DWsV>Q}CY9VLZ-1dqERH{dh*g@3etb`_m&)xF3Vp(2@4|Y-+v$(f z5zISTa?AQA4 z57kE9?uGQZQR%1h`u1%un6(hj|q zmc^R$9|=;pvP2cLz{kNYBo7|kxQ>O73|8DUgcBX|&e2<;(tIqp@poJrLNb=qAfot; zS+9} zGn8n^KFZVrEZ7Z`|`taab{hQ zg1xBe0}0ciOuY$JHs)M!GK>{Y#w4EtUm)uJ0d@RCjO%~*h-Uqt4>)>4hL^GDZ`6N%;iIQxVq^P1Jn)KL z;Q3Ozs*e+I@bA7ks4rPwlE5eXkVU+LjrgY4P9h?ZMk?^Z52XGL^;_>DO6Tn_laMv4 zYV)7v)A{DiExQ7`61unkCMJ6%(k3nk#l_gn#TQGt;u-|iaChm6N9!Onm!qfUhs%MK zM0VTF0jELg##d0U7(aY}wKru!O~KTxRrkilJ-BRk{NON07B(CzLf6b=zLF|?f6vVv zqh|P35B$6fXT#kV&*Mi=eE%FP(P_TBXsRO$VL#xj{!5wC#$tng)-$NF@yKuDpY1#C zlMlP>-_%rcHVRG`VUD=HnVM!dn{1&rV^Z1wAy&DHCmCC}Qc*0iM?+8P(Akaa$v`5x^Exta%sj}oc5Q|-f< zsolF|*kr*m%|f20S07$`lo#_gw?dF;<%rWITNBh|gTVd00q|m^DDr`x87&E$QiSc= zs{U*y07e?TCW}vu{J(1HN02IVWBHFK6Ini*S8vtOd^kCqWJJwOUie|Zd~4$ACi6bnzi2(c&< zf?uI!8rScJ=0ca4VH}ze@2xP@@pin6k82zmV^$7bGU7joV3RnA9)`MNw7`h^ri*kF z!6~$P4;S>LXFmnpqoc2cShhbLv(!%?Q-A#}aXyvR-kRBR2|q|22o`z_L(%8w?IRT6 zP9fHt2wZ4B<`E~KhE?wQ%^7L6L8_1=$OvwCXA?n>j%AXZ!!8I<`7Wfnj=kZ`8}jR; ztH`SVF*Ln62FY@$rq8DyZ{@o5j$=j!a;cDICi%8cpoI=dUSe3HyGirdzeBEM%k}t zj6E;MEk`WJ$FEZ|J+jl`#M^P(D5=r=e97Cw6%IaLuALPfhb4STLnq1K5-?5&^Knpc zQ*r~eVx${Ncln=ox0bPn@jOgllUpRuu+lSFvz;Q6W*{ia!?RF`?krxLiMkvKhPyz! z^GoG7Dn&`gMNj4@n(K4UikI+9F9}>mA6d_~%7$gdxeL=~3>YL0frj#eciA_zC&sC*6DsC;~&fa%ES+GtCkme6?6c_5#Ov4xY_M8N?v z);V?3`=|t;mNAy&Ya~j=TBAd4YF!JtzC5Yd3e{@X%G7F47d47H2wh3K!8>okA5-6d zGZ=`jY?l@YJ*Hle4(|MP%XrIpzGXf_KB0K74fd@z_8~AdsfII14AD*1UUm#w;As1`$N(3 z-4gN=ImZd`I@E|%e1pqPO3h#USkStD;=Ou%?dn~-j14!Jq$wSVM{Xob8j zl%yW0#DpWv+rnh+E>?{D8Bb7K^kJ6XmXR#wZw~#4ZSb0q!gZAf;+;1%*}a;C+}4mo zN&LNn!q*S`#8^INJJ$I!!QcIcKc60f$rC1NBIEKMOV3@#*zF1)gB}a~XvMt%$4SE4 z<~c#pBErE(m`o(f6+C;uktsLOek(HYMT0&MuWg&h&nZJ8ACjhjo-({djP>Em|%&LPG z5-w@u=a$#a5rL6s=;}0+W8(_u`cQa3T61xBT4pbW&9@@-uVr0ZkgCfxoe}*yb=pMo z0~WAu9L^7&5`ae#+YLB2|HgaN603STXkk>-ZL4gR?XHIwggugQVYANnsgbm5@Q_s( z4%h{byuykxGwTM>2;Y3c4B~4M88aJ6Z-TnbFSxISe840O? z@ZivL5siUdiY)%pXfpYXx2Goi)ie?_qbTTjm;C^pUvu`X_H~BfDj&4{pQ+NQDqqvD>2M%5=PHRbKkYX)Hb zm!kE43Z5FAIzg-<9GnK*3Akb!8O7x0!RBgu>bm3^YrEqcs^p{yn4ui@Y8t`ny7Sch&W2F95)lVhX1`twO$8t) zuuK=9>=i2zPGjd#*ShT!)`mQRIZu^k|Q|Sh2hxHuiz~Y7mo4bR&lw z8@?aQ2V4njO3F%6^bG_JJ*6&0jUUXN`e}iVdEIQ?y;v%>K#58paeWH;Eg*R8jWTrPN{odghrW4lcC|zoY#`n##0Tl$L~-dr(&& z_~j7Nkb#D?+IA6YqTw}F_0bBAExEnQH#9^#jMPk*#5{c zIMA9oRkDNhB>jWS(HKqo2@ik7;c4EN~`wMyZ^Tw64NOq`R*4IB$>?OkSz zE~!tX1Yg62_SeY=R`2{6^EL2LX>TVMaL~C&z|z1(?}wI#OK&5v4#0J zK$SY)MC@0&Yw~Efbl(D<9vs<~2rV9PgN5NMbt`mj$_O2^-Adl;r8kmZfB0nm0ZFwf z)O*4w9Si)8D3Mmy%PzB8aM{?Xe2IL&x`nivB3vEtHS1gfbxC_#oinR_sx|4+4dvKsMhTvB|GF2u5jKoUAUSAUEDi~l~BlX>sXg8IO8w7WV>!%Ohvn#Mym_!>h|~P z_Vrz=$);7MaMg<{>cd*A zf7dH1LNyv4HeOGb4dXpNF6~V}Dou^nCdIpRp<(Bdm#&R)6TLfXc(ZOxu!LqK--`07 zUdks(Aos1a??D*PX2o`X2J*Y!q~9Qo#COSwv+m0SgR135KzS*7DV6q?tsT>z+fv!} z*jtt+su&X9O`Pe*q-pF+Y8%Mze$NjuEF%jtJ*S$scCv@=OJr4!QB6^0_V;Ws zLEI0~(2OC>aIMATaaFr79na&HM8->RZsTD;;-7wKuEXWEYu*ite#;()UlsOs8FeYV zk-`=Cb1>#|iLm_U8WdIiurv9MnGLDB()mf;b>|FNTy#UIa@34oy&_9fSTcx2{_V27 zX%u~vWVDIWixjsGCU_?ZMpeF)^_(3@C6B^qa!_mcQ(sCL$Yj}b< zjgLSCFf2Mg8rqg#pBS}8uF0=h3J7M1bJh?=kBVrBnK;R4_YBi(nKkg{l2DSv_e!VF z*d#!4d7v)wQncLn|*NdA) z;n+$0?R7!zxOW7fny&4gvfsQ}{Ct{s>!X$>kMcIMuVU!ih+ap=^wze1h`Ks*7j7>m zKwN~xIVAt{Hbzv@_+HkJUjg!1+{A;UdcP~E8sI`YCYlX&!}_3-1begz(H!rxBXk*B zqpK^pXLmHcBh|GnyJj@?7H_O=A8wF_vu=y8Gd}j|MfIt<22t~og~-7Za}>5{>d+pe zxFH}R#E(YA%NvXs>c{kFMb?Ti^p)NI4rni2En@iW!pz(;Wbi%LW-TO(P_$d5qVMf_ zaHNn*GqWyD^kh)2R1P)H*n38{rKkT@H~hE(#*7 zl12mrL5m=EW``Db*4lw4(o9lwRDJe z7weIJ-;Pr$SrfagPO6xhc#XcHwuN<~T3oF}6PIOWOYdyS6}v;?Wr8+?o5|w@mZE|g z(T{4vMz#VvDjuhK*C$sF-sWElz5`WUwS3l^ak) z6G-|m*~7ZJB;#U^4XsZ!(M=la`wP(BVNU|Z?fnV&s6UPV5D+1asl{7-95{(>>&G~9 z%<}#;xnRG}C&E_0HE>YNT|Q(YmSoGtU2u`@VG67*J^LuyJ(z5gzR7(R{=k05WUfM;1(uT z1lLrl{fx|p)0h!4XW@E1rkZ^n)~)V4Y^SW1xEbHI=p{VXZ(3v88_bSo()WVK-crqM4WO+>CpcqZFusX+ z7mkPcp_Zp|ocSc40DqZ3nAOdET5)-A{vrl!cAw=kwRC1NO{wp#l~!n@0YnlRvS`r7B!)T*Uv2B*-71mAu5dEX z7NrJLj&Bj?hHr-N4Oey;HQ_$^>sW{}GOc5&C-|U1#*2zDI}_`+>D7_OZmy;r7U$3N z0^`XoNOagAzn$$0*GetW;#GD!hl6=p>3JSw_zs(__Xc4NG)-8w{k1!@#AYg^~Ik{X2@rnkLSc7Fk?2*YdZIHW4 zxC+wp95GWXSv)Y={O`VrA~yyfN23)14$3t>qGpNtl5T+Beqv+R(-2#OE0TUUG*zu; z*RCLtD#S1-%-=z~<-EL}it6j@^;Z2n3;PWKlWGG&)VE^_OcFi+eMEb+koqqlv838K zJ$ubaUz2`C7&6LA2_V8ZPkmz>z|H~@BIa-l&CC^^4puE}=J*H>IwaCkW6kBvinfDn z+l!G)`pr+$WWb~vUd7lF#4!Q{m~ua?*X8%zqA&)GCq{R^o+)SRZmFZlee0kb9w;ls z`(tWi@^`V8Q|*Gy_N?K0${7Oz&o`|@Hy`Ii(uR`2#zWjEXE*IHNl;;HeimqW_i>85 z3PP~Q2|sM=DPmBYnnzAw=fCR1-2gsxTouIgZDKn1SZSR~!nI});&R*V#*Bb>C$_>< zIec+vL-*gD_h5#sY1Z{t%X~6DNIp2Y%veSD-j_Uxc1CE+PtHls+NckNCUUZ{FwpgD zL&iu>Oy>09$u^`jtOgl$d-BW@v2L(Q6*yrfCN**xHta#>)csZ22la~Ae}mp}ZM>It zj9yAkNI(YcsTpV5M=7gS_}tJn(1pcP=Y44j=Rj;hF*}-Z8;Y7e!ZEBDk}*|3Ue-XuQED3X$xD86K?lQ=)AmDe!NNN&Ss1~%wMD{ z3viNj*>E$CKZl=a%P;H_tToJFfgi-*_Lb`ixRjKITV^CcLrnJ2<$1Hk@R;;b zFK{rRw+Gqgw-bH+PLO$ylkI&hY_cLp4jz_HU^9t*t5qw={ z^rzUYHD_rEonZ=R=>Rr@kW_F#6RdIKkG9=_me;s&M5L2(8*+4U3JlyDlRnDfs(!sV z9Znz6OBnJhv5xcxN%^AmM|nQuRHG(qDN*QVm&vs;A@?i9IbPrNlWSiu-URA!AAcxt zeyk<6oDKZ3)%tktqS5H#vFEUq10MAqb{BHizQdbka=nawhqQRt)9G8v&3e){V$EzS zt}!C|L!P&`4mT)NX-ByOqQ;oTAO0OXfM_xfIJuw3zJ43#zZf%mb6^t~kvrb+EDqQe zW+!83PVAExi5?B99rWqE?yM8ymqCrH5G#5YtncQGF3!}gzsl{m$a7+cDzAu}=31Vx zF(PbJF%!ueyVa8?Yf+y``AO6EU|QxN4U-(CbGP&(>DJP&*vWZKc}Gp4dv_{u{4+sv zg5!eL^?8&qGXdA_ovaPxq-8zbocklBbiw)X(R}nb!Or+~yxwt-i>b@nP+^9vO^+De=3w@nYll57?uX4z{$LzOhEBZCTA6s)bG zLrqA~RL%cua8l$;$(&f1GEPC=A7-c3ddP#wNpsOgov}!(@6m%qn8vJj6bBo=zoVG~ z0c729nWObjaF^iKd)LmN zPOW!O(TZ&``fz5Qk+j>%KVWs2zZ6Ygpz~w#zyrPf&`y^mQbv6*pi{=Z7<{ga5PARs z$evniHP%?pRs-;hicxQ^wB8jg%t?G{Mqlyax_mYtUbYz>m0S`~bEWoBvL zo_8$nTZX7AUc)iwoLWB;;U29XxDPcdYAhCx-m(Mi4tgJHhd8s1JH2U?8FjMZiDUuO zK}e>twW51F>q$dftz!x2D7>|jo~Bj7!-i1|N83{d(j_aaXAZ`Nw^gYX^vcQOUyVd1 zx}^_NrwV1qOLXP~!^f{qrmB>^7xWtIz&eMh(UGVrbMQEOoA>`ClBz7EpYRXI zgEp_CIZW409gel_+tmo5m`S6~eT6#GO`vMwVXRu9Q9Vk~;NoX<@a)V;JVeXJUX#SCl|+~#sglVJVdK{8zLXR<0qa1WHFQhfN?`SZ6k^SlhCJ?B<_n2UFp@KaT{B?emuOCV23YP42vwrh2_*0lKr#A zig{@b2HWXI24l6ic@-I|!DdHF`)?i7;EbKJw9f7Tu_HyCHX zRnoka3pAMf&y7-A2Lx z^vUj<-?Gf|$H)5I1n^?YQ?|~H;mO|C<#JmwJ7coc=Blv-@7PbL+;G#BlcSWm@GsL+ zM~71kwLd+We>yWiB@7)`x^1T)7|rpjoHXm0)c11YbIv!-Ny{yUI+vbX6<)fwL3;tV zU6L5*)6)$fS!hZR*Br{+6P$wYrl-<3^18EC8%+mzB0t|~nTRTDjI-(?Z8;g^%6=Vq zc&AnS6rPLZ>6sxS%A0A9pzSxjN6yNAg?U|z|%f8Oc3fIHsVlI7u@HxzC1H*E0$ z%g_}ii5fn|=;Y^R$oAJr9ODP2B!|faXuEp`(x=4@oJjD~^B3EvS{8C8a`JF&2+hTC@BMVFNs+NW3o2^Fq zgx(gp*4ob-XT;SokuAUYTH2M@mVYDES-WI|0z0nWNCWR zmm(f5{^)X@xFxNoCnVmMwy7>H3aaTGn??Q);F^a^6s((v=bd z_hwD4YYHjXhEqzO zXnQB`T-qa0)YTGV*9V_$U)ot;_%XG@n(R4Qi4>~tz&pT^CKPCXuZXQNG zX2coXQo2BB;>c%uJ94>r_zSUS-DC5nE*=pq0Jz1uq9k3cl2_kCq(scg)K;HgN*jK6 zX8*4FAyq7{)xf;t=bW-~EJEQ_iTu>mmqJzL$)Z`cETxhKIYmXC%G@?HCLA1&(NEDy z1_rc9v!Frnr)5#D)pM%y6Oa~f4(*+_Izw!drO z@aWhEp2 zOJGn_YuAl@n^E#lg~y=zLfc)Doi9YGUQuUeoj5y#1$RM9L$Q5yG<=lC)C5`PW+ZQt zu=}+*4E7=l5FpA!cvJ})VNR&LPgprqi-2~;PuG~;-YoyviCS27OmIxQ{lU%w4eUST z5s3zdsjXK}>oH7y8iajVqTRoE+@mZ~&e(}mTnF_G^Fmj`iy^gcuZi;Mc6YdP*6^;V zdi9=!-dFUL2EGcE&2yU498p`Oq$g0)qU?3X zu7T9zh^mu4gv`cENK#3q@XUu;q z1;%=sg-hg%4p$~K543!nc2trzlAX>*Vx>*ATD6M{RSWbbl`Dk1OdKBJs?(D5rpnoU zy^C0q;2~d7eTCRa$^fj+<)r7NLa47<9L2;u>0YDh7emN8@%!vQ;jgfK^cTaf=2w?!Vw=`@XDuw$Us25;CtX(tgWUnTWttCfTSttn1fo# zil|6%WSo(tZh(TDdrb{kD3#5d#p^|?v`cxbsNE`|vvEOn4ry|S-IFTP$pwVz&t)*c zL7=wO%4>ABJl9bkMl<)-G_o1|()ccB%BcDB`P72T5LWTuCZ=WBip-gn_iV5`sw0W9 zza}`om3I_EDmh?@&w_K40{ZIhfC7NleC#V3w2+p&@?JQ|;uUc>9E8T<<+GZVs2fgn znzmDI)o4BplL}X(=6L`z2i;kQnS=C5=u%Rwe}MQyNo3r8LV?$$fS`H;iTJ<}$@L4v zEIwxMpm6Ac1N+w29CUbO+q%Bh8!T6!56-Qq53~DmarR3f+3<)yOjJ+AbA9zG1 zZL5|8Dg@UovC1ovUPC%x< z1Yhhyf!d+=GG4FW#y;;Y>m$SxvrzK%E1ZWi7vQQ>TdPKNoY>u*$8>pYS9BO;v<;oOk`S>-SBoAI+EX@B=NG1wN$>$?u>2^OuI z7y0?usULuqjz{^eEwkP3-}ZVc@kr2F_5u#Z&uwdv#zZN9c!+rnT~dLRNJ(luAZee&XWSFr8xL~6 z%X44iI)tDUg;A!Q8#xyo?8LM0NVAoBblSfu44WyD)iIur9D-@u{WZyNR{z5s2Uo)^ zo}_j6TqT(*fGd3F%UEemY@t%{Yzj$@FU5C7VO#l`n;lnq7jnb80{s|p!zuU<9NJLb zK-M6jl}0ORI1bt#1E1WgH7i?=CZCHmYXkO#xhK7O+?i~qe(UpU2gDZ_MG30};npgs zC_K(XX9&rz!o7#U+ErPs!zp0kpYdrGqC7fgxy4{kTf$0SqLJciz}O*BwdV{q$ZP2f z)^)05Ocgi&v`&a~7rhMo@l8{2nC{o|OO zYAT-eOv|SoKYnd@*x!{xM5_7HSC%J!2g52VN#zdLJ$Hb>I@>%63~&C5rCoC&=~r8^ z3cB0{&U_soVQYH+2NPd?^Q(%UgDNZD*ZPt={i(0Dvc<|xhmr}!dILeTU#TQp^y_>O zO7%@+%c>=2zEWvX-F*G!=Bl+`hOfe;Y_7Z~$kZ3`I2RQ+Sw%ehyoZtVsG?{CXDn>h zcY{!fJ-MCyE~pI43xOtIQ?A#KE_Wuv_o4C!ON?trMNyUBMh1(1*CFN|oR#10cee=5 z^+J_pepjGsemJEjO=_FRd3$+MS-%$E2dD{OTh=LGswqoj+^LU@CU6Dd%TEI) zhFtqiy)A_)%J+&sMWrbhSRb%gb1sj@O&(33_-_}8*7`_^-m}224m3aq6=d+=m6qu_ zYUx4*%V1eCNo7z{Hrl$N(O_zp#ou2TC*=A^s1#OONmwc1DFRZw3wEDgv!kWp{_nO^ zzJLz?6Y=l@SNI1Zqhwzh6x6dfTL0iQ{w(!>2L9in0K7y-251iY8#wY$#1+9Ha}`21x@Y)@t=oMGFT@3(r^XMaUocN?3xh?TZ363fWJ! zL6uCx*{HQ#UGX@{4dUKc#hp=Sfu^{5YH|CWPOVL!I9of**S97;Q}aIR)d9P56ISnK~!_lS&;a!P2h3<&d1X0 zu2O6IsP#9~cz2W6G2XKGZ9(*1Dew74aw`>y>u20kUM{!Y?n-!Gez^9lhlCVfw~owl zPWx?MzH9e)L_uCGi=hO<)F>Hl4uS|-EzLM3>hR2T{zg*h6j{jx{Q9dsCc_gw&Pu`s zzDHTDI@c~S!W$4m+zGZ|9>FwpT%aTL?3aMZuy#CNJ|f3Cn3erG+6CdzOnPf6Y(+>_ z`M%no+TF~`%*ag744PhYcP`|Rz{PQ&TTeFB&3)fgZyEP4x!eQ)F24LI{K0X5dcI>m zYre6jbdIONZT>Rwz@=8!veooXaQ+E+$7}wyP~Xti(Asc%D9@g!@vMWBm%UAGeiD&Y!vyE82_2b-$;oI{f|lFW!t|!w#KNa(ZHv+t*2da~t3J2o<*PHdCwFNG z^TYIl5{|XkxrowPD9PzT$|~z&Rv^nD@U<3BoBT(FV~}7XZb1iO*hmT z-=0^W*RB^0Obs5J&B}}yC(;1ERm#ae^c}P#E?>UI^jk(9{H%1~|!nvF`1VtZ@ zd-gN3gW`!)2yeQexX8cGKQTHV4Gov! za-PnzGD{Vcxzk6K15?xw8c}#a-fhQ0mNO@fGf>^rUpL`zTJ@NWX z;BN2AuZD~f#Zyvw=nzw zMX671zOq`5XYCE}PgZU9#|!rw7>7+(^Y_z$4}%^j0(t{zPPY+JUJoFCZ3!GcAH){*M!%e4&tv6B-Lzb3vR=~r$ zBEW4c$HQsID?Y3hyq`0zecLHnsN;Oub*JsRm$RiU)p{L`(ek*Kh=K1>e%Cbvuj6Jt z3E%2Of7;I5g6s^ufFA@j9gRQj`8ESI?{+VhM*4ulR{$?BY)7t11XKa7og+@DYL zo<}1sUS_tsf4z%1nb4AT`(5xk{eD&PiuDNeypPRS&C||R52N$=u}h2>$L0Q#NN#7DZ;%kUt~MruJ_KAYiuaA8?`fH*KOGrPvyZs{zs+d`siQ(G>0E$;eg&S?OPr!ZUY&;Lej zhNlFlayp%D&n8^7TPVLJQUiFsP9L{ELR)9 zt#5gM-B5#R>TlzvQL}A}gxa3)M8SVF784>jBRN(C>UdYf%p+^kKu=@!h#amdOUSji zwV)K4PS0Caza0*GtAW_3#8$B)qo1xRdq^&5u7u~d@_2XXHqCide^)(`C zHN!QR!H$~o+X5Lkw?0NpEctDcVcGw_WZ{Aor>}dr*B^9EXxc&ao%@G+BN58M&R;h3 zwtm`5S@_&v5~QRWrzCvW_@!(`v!L7W(+Yy5^-lEcgRM{`?2FlcrXJ~VsV*mHO&ukr z;Lx;>R;-7%ovf{*VWciiupQ)Wj$H5Ww>b%IWi(+YL)s7wdqHot_Sxob=oePxub0hb~+SQ`OJlWZ+>qLRFzBjkTmyj zre%(n7_?@8`gOfw=8PzNSAKgkB%Xn}M35|fw=*#@K?Sd4L0tX7v=A(?x9R5U4sk_G zPoH7D`3Y5bdSB8DzcOE(uFcAv?rR%enw!z#tq>FwC14Xl3}XcEmsZaQ%l|M_sBG2y zy;4dJ8F!eE>N`WGyx-^ml~VCQJ~sscS3Vpr%Nd*^r=t0UL55U*>>^&wJNOYOBc0fp zpK@r0a5)Nm<_cga2_7U4ozCq_I2CI%{E|7WPp#jN(l83kzlJtuid0|vZIx;|pU1k8 z^A-};QLA-$PetZ5o9m}xQ{775*Xg13@Gyi!g2tg_$Lb?LS*>f@=|)YYgh7c~7+I3w zMkbvjb=?;@K@z#SUppLcUD@93teJ(c5En zTjV}c>3U{A#N*X`zGXeXGOQMyReWm*mJU z5uhMWtWWGHb0+gel)8g4c_-vYOUr3v-3H9BZW>sY!pAVPE=yh956AVv-l%;rtlznGTwF-(=7|ClJGz`t`{#ZiL26aC;gs1N02tKijxzF`7!DH4=)I0T= zCLgz*?%I@*Lc=KBPj9^AGhqQ;d-JHj!>}Z6-C;+!KTMmIReCS#hy=$X$ZvA`$_lVx z1$M4!v$n#D)^QzM=v@oa_`cTBxH75~#$@;m1f4inGI7S1;8z+epTLEmpICkHsSmKh zEv+`hWnwbB9G3Z2Z3KspoxIL3OR(h8BkL{WTTxJeebLLwaBOd+YlGNjVE8c0{-HDh z$G6Yw?jAROS%~G>p<(-o_id_JTKt>`MV*W;)#T15jvems9pT&eFyc-< z+hors<(2;hF+k40su;OCHAn55tandv{U&m0tkGe$%b+Asoy2&h8}BRE-naHpF8EV| zKQT8a0k98`O4ZK<4VkVVFu6lPn`%ZYMYJWD z^Zh>g#a>zX(l}VnX`lS2rpV)k;6dby;MTLX8xwMIT~>M!9r-Av{A``9NJN>vDG}Hg|NYc(8UASJ&Vv(5RrfXLbab z;A)TtKh1+4gXV)&rRFAzU^9ZYJy4_S=9+dOT!}}0GzvUa-vIzNhx{urSs@TD|B5*Z z4j1?Q3lzeF-%mE8-#<@b9<)7CMuw_@qMx0aK3FrSKxNb)TSWj27j(23^zF?=HSL;Y zW6V^*GWof4#X1+));AXy&z~bQ$u}q|kaM$(C)wb3=W4u>udi<|3YWcVR`~z-FrnU? zb7F9gXrsLFpFfJObcivpn6HuC;nVlu7ZGN9dBvi?pP;SAi4Zuqd)ZY?l z^A32Gaq?&(Cr$#*r1k5!ul1?8@}$3bGh*od#XFLtd8`0Z zWnwHmF`qJkT!R5U^YE&0JUcj#`Fy@Y^+;N*N}cnoU{Y4$R#bkhgx$56Zxb zbNPBL(t`UyI7vN3#!@Iy9Jiy-q9jV8G|C_!6{u8IDHtBwRuC))Z7saA@YZJyIC^E_ z&1z0T+wz7BtFR5{@?n$gsyf=5G)O^Gu+TQ^m4)BFtY~Pf2|LvdP{jy`U?q5D1&6xe zl9dWouwjyCpky9rsbm<+lPQm^;DRtY3=3rMm4)wBMN&VUOj-iDZ8Mw`Qt)0vl{{Xc zDDqlVSXR(hO3#vmEV&81!<(OVgYEZ7GtA&t3VA0eHON^b*nY2SK&eg|t{Z07VkHkO z*Jt67Y+trRXlqcQ*9!hnhHZNiT-4c|(?m$4hh3BBeDCInCyE-Y>4wg!oS$^PgolkDN=Qd!zF9UqG{%`Sc~xXt zO4(?z2+_z`_!sn3^ev<#8+D`Zs%vVR%NT~6$mKE_w>#1tiN{?8%86#;p&Q3xPs_I8*y0_Oa#N)cJFO!oc0`&lexLSMb-OdMG4vp>eh}<+fyH=+`5f6CdHLu&7 z5)1+B2X*Y{aWN@-J?8FImiCI0D+}x{(LSGMc$%hICw%b3>7p*FTwXT?UEzE=X^XVs zN{rDNErw`wFljIfFY6J_lz7?MvT7BHn5Gu~HyS}#2T{w==VWYfswL2<^B?~HHQZTx z4c@-Y!5iiCWsq`*?3H0}1J-C-!z#C@ApRFMwiYG>C@L z0dxZ0f+nhk;`rH zt{@pkh_hNj2@Udk8}4kwSzpASL8UyJq8P!sJ*{$}-&Bg0SYU$oG~eFc)f@L7%ZlDur0M3`?o6>Ysi(LWDv`3~R63<>~dUwgnRe~wHxan5kZ%L=eY0)1L z%`*vyc004s%ZA2iqUkw?r1Cc#f+CP!(-+=E{|3)hl4+JC%Y0A7*a`%>9?Sj& zY;TlJAr=<+wT64d!|6W{g=E0K8QMjj=RJQ0=S?91EIx;Vtwt^bOF^aa0H_&=6XK z)}sluv6^nzn>T0mwPQXhV}$LMv&t)f2F~PN6Z2SwV=8xHwK( z7R6IE&2FR|M*xZAKE*IH%kYBIRME<}!w)pT?Sz20^5!~;&l(ht+OADm6y+9UG_R<# zpnyU&3{f#6kuVReASh3_!%}L4rE9%oajL{6CTsvi2#~E3;GJ*5o*3AoYtZUylgjIQ zvcz%8v7I}U+xmxxlRnEPH&iNS(!3laESG))V0^xAI+oSvQfz4Y&$O*I3zq5vYn>mLqkk4!P~l!s!Adq%G=?%O?8!Ij!{9Q zG=;+g$dBeJCMPI2_V#|9JuI-{HiH*szNm9zUN$QtqgbrYtPV*$XdHdv`{*Y?Q_!Wz z1xz%6R-@hM4BA{R;Qk@hX%D92+p8On?@_M#4EiFX`q5x~!!_4zh!3KEjz6=znMa+a z&XVN~bOy^lvqU&E;Kc?*5@<{;1`wqXSO|{TcJPTB$|q2+gusQB6b(Q%AE@A^>p&YX zV(O(cz{!Q+9657c%e5Fd&!s({5ili)CoEmq0;c@1sEM4)BsT(;TRB6b^p=(pL28qY zGUyqo%5pj{N-CvBxYMFIARFr}0Azp+C`vG)?{u3POeRYwLVU+QLrN(!LkkQKu;DQZ zQ{3%=;<|&ES)CKogQ_TL!jQsA(nKP0kXB@qm*74W&&fO|$r7#QEscR9onL05 z6V&CvRfgviR3*fP02~(bnHr*PbWLDNf@|g|(*Og&aOXCG{qEH4@nnXE0+tWEVB8}; zRLMzevL$A&Du+4-vx*|QtY(K)UKaDbDW+&khxUUp`D2{QFBl04*q2HH18u zN63xXaoaFxm%hZ|sab(?;Il3^eHnnM%XuKn=dp=fMPVqv5wG)yz?vPxQE7wb>`kw= z>2i!sC{`wGb8RLiOpfK4_6b^yr4*r{ITIlU4B(Z=2qt5}ViAn;S4cud&{}Ij(-UvA zM{e7|$!J5WIo>SG{bL(8g!{u6LFM|tKvOkoktB3J=@R#R7nrMi`+>pTJi z77+j#d44P+anP5%zMiJLebC^d)uRn|v<}MKp|NKeCIZHNSPy-vsaDTgO@pci|Ag71 zKTioZC({i6xNMu=W1_;cfXMVIk=L!LWJe-V=(bFX7VREK;d5y{RFT!7j&+pcHI9S5 z;U>c(_tjiQc5xICoCrMsE6_z63ZW$QXa(&-(`clcn(o=RE!UH_qdnfXj=sL0o{=lJ zZ5z>Td!&DIas&~_cDZVAxN8?##YH7fyw{pfTlWHh=PM1olm`vY@eP-^97sT51?pI# z1`;ZD^+WDaCOZEkj?h%pnY`K5N`*7owTiJyl~vkic@blWjxsW4FqZm5ykSK&>v|yZ z_UIRf1znVQP8V1SJdY;aq=`&7ukr$Rz|KkuRW_Uw9$>zuuxlimlH&cV5_EWYt76d} zl`vRN!Io8^(oKS-rB#j2wP_A5?mPuTvRhEN)lr#(J90SQCn(H-C3CCx&<{`&V+Odh z9kA3t)v=TdSOk3GWP}DB6>*5uZQGH2cQ+s5FEXP`KEkDls<0RaAqpDQamXnVbX9U{ zP^9ncSigyYf*S?%;hS!{=^-3d^6S7!sEmY;$vox&LquuqWhId$dP$&O?oj z5m*gQ(+U$xf|{@tPPFt;i+f5i)U6?fj&|{u#J8ySIO#v|8bEJo&^x~bq$r{oN`Wi{ zdSeG}Yf6{P@C*kJty_n;kB)ZXuFG^#y@wW6w->N=ps}DPxd`6`;K%1HPEVyA zs182^hQJMErrygfw4q`VGZby)X(J@)99F@!HbV_=M%a5Wm@ zS#g&ui5wd?EZl}&pGwKtDDtN87nG!_z`RdqXsb!pIAJf*@VwDxh4Y+bu+1@#p;<|Z zWCYqyBnwm*h=EK~*yzc$Sac-UqzS<6wP@Izpgn5z>PCgC$=Nv3oo-L(atY72TM{jo zs@LUKl28bm36P{zr_i#V53EM*OaZ$lkHK8a1 z@$0mtX`G^eDnqyHCa3P9MOov;^^PoTQ0=Q7lTR9x(A9w-`$O>CzX3Y0AFU$qKG@mm z=`l5yOnQ9-1GGn98bxW?GLBpHT>5GT0orkqJAN5S-2(<&N!gT_;4`AoujMjrh88oz zvQf%&3~|a&VZB5|wOi6Qm1g#agv8ZeL8l{q9woGc=4MsNqM1(FbQPUpd0v`06X!x6 z-!_wxB#pY`4x(ceuztTre+D|n19Uk;csSnN%vHNqclGvioyGO*0lKOVw=zt$qLnK# zVLgTu;J=VlS*Bbvg~C$IveucEzJ|D-2E@0S*LkdMZ3>IHb&x9ihQrGq$50F<32M&3 z&kn0b3qjp^yiQhJ9b`7msB+0VMLZC0#^B#^*Fj0xKJ3x)wUWdSsyODU8A`+U%Zjx| zHrH!RQnNX3BQ36>2|Cfxe$Y&}Ar2{@MerbEs7RA)ibVUo<9^AIuQLFtP(d{JR{>6F zLc)9#2|bfAb6+hQ>v$Eg`+=AShMy4N90rcVtQZ@L8GNEOtA zd#s{#7E7qaF!9d#e-=PqlBkQE$tC#cEn%<4s8YFMZkL>>YFQh&1Ab>IErfaETDAkP zUa1P#mC2aFR$iwa!B(0D60958Vz`f!k-|a-mVLBfYP_O9*`o4(loFB(*VNx6%1Ifn z(ZOwB4X`C?xCECaLFRrOcs@K(ybowFRE@=5eU)17VpY|J2fL}REH(L9Cyt*_T$Y;17nYAwEMmFZI(XQpBq<8k z*;LF9S2cTqwJZ?yQjAwcURHu}h7cg%f?~YK;Y5nYlwv!ID2q*GXd-L5SskzTMPN&V zji)J}Rlz@mJNORIQ?BlC0^=%XpC}d--B)G3@Zo4v7_du7HVcZCvNYrjWjJb z=?W|BishLK&4Kgi{*lV>054MIwyFZdFtQF{P0Sc{MAKNQOpDDTM`f!DV?aMzx@kVrMDgz@UH=MfZ`kQXO z^#;T+%{Mf^ZGe7-6VkJ&w!CG|NS(OLyvn*$lCQ^x>+2w@?w&d6@`k#wTZ$mMr0gO z6LN}mja76VRcsd}OA^S)lDegdN;p)^m12x)MMH|vg56-u@zb(Ng9K8HC@SXaD0G;@ z>)_?HoTLZ<&KTOXMAihS&$B2&bTy4~M8%TVGpy<9&qxx@NP?oDQfTW+LzHFEzQPp- zXR>lXCA65qcqAg3=7F#CXP|v7v>RQGu0=EG26Uv_eO*_ZEAjinVScKkgHP<;%jYI1 z`K_zh`-AJp$9Zg;{Qfg%cmVMH(dp?ZAH59tYjoZvg`^*Q8ro{5UG-K#gdmi%bP`H0 zij2eAAjS;+Rtv%q(?lHSn$ExU{zJ`WFu?_$DDCDCV!fS2x>~7>nTRG^1H)X`Fy!d z2%}NN-7YbrKvRmva3PiER1zo_!O7ulkHVN@iT|Q3`~pzIH^A~2P)pS!W4J~pnQ@$m zF6VL)u+KIB_98pGOn}~gtTw|Rh?yb<4D5}3QV;F#(46rR!~GhN_yqA?wt<`a4Nd2X zZyqV@p|zT`8Ssd>i5Axd_yDZrFVJg?SfK@VfhV%Hn%~jaH#X2p#?%wp5XK54I0hzB}r4f`k3>QmzJO!k&ybJ zbB#ZbH&6O%v+BR}vf*q?^9FFrdEhrAU6kaFyz2UzJRA~O?ywnJ19&fv8JgF-tjYl1 znaL)3y#pMYZQ?75L^c;Jt$HXSD|}MpWr4GOQ%KNfC7Wh7FRw7XsE1rz)Eo{RQybuH zL|}vnEgGb6i5K@X@J%y-F#M_>&2TBsb*VmZQ8h}tD4tJrY#CbTEDtykv;ez>VT!0y zzFc?Y7UOgNhcQJEt*C>+&~=={8Ixn$XtTMQPG>DTrU-shh-&L&G(Af&?SyRhJk;gM zLNWxd)7CzR)fAR%-P2Mo+O*wLDpJBE&ohS0*_3n|oEBnX9B2m_X^Wr^)Pu@s2f7}u zuBN6>^tN}Ec8!cDIzL>RD^VxfOXHoL~id(}=ef3yy0I+J&g}|PW;6l0F7mRcGK1n;NoeJU(6;M;XwJ{Lh z&up}0!;rR$0%clQpeTwq<8e`vGD!ejB|#S`7e{QZ50*~siAh}-O4&h6wTYM|08r-2gj5@Y>S|FDA`|iXC#u0 z$J<6_NdU*g#JXV1*an87ReX3%k@=Jzwk;)MV5};-X@gf$^J?D$oc0Dv1S3W1sy3h~ z-E@C{cW<#6?haq1{A(;L=q9NxHP zOV@_3w+Y)cMsP0H5KBIAW@Umv;c^&bMeO$<>jT!Q49Lj(Xf(A(()B_?wKt{&{m}OF z%~Wd$Cn9nNt42zLI-NKy0sZ_#PKxB_1fZY-rtc*_GHT);5(ks6PPYH-yWM^L&Y zqu1aBOktYiLZWWcj&oErWX3jmN0fVIy`*viF>@Su8td2#QL&U{OR6Xx#UUP0a!Hce zrnEq!>#nV1j;Cmee*>Hr$q>P4iL9W4H>c5|oTJ(j?PWZTG2xs9^#FehdpCnP#q_nF zLVN9=LEExu+nUS+qP_-9lg2X)#qFg-7o54fB z8y%{4O^>H4@ygK9@GU1MPh4}&a9fYxQ!WpmJ$>%<@#Di++*SidPBRDjbDQ7>a2MB?0CV`3L}F(3$N`iaCJq zbwrMdi8}F6L{;EKQxQC@VUJ2tnuwu4+>qpXo&vviUSwn1A2wMsARmUtS~`@`Xf3CM zTcdm@RHVhMBT;&@0^J}r-n`k>n&hTbs@LuPuVOuQmNr*- z6Dw74p68Y+;bnv57lYI#;|{<3dhQ}Y$11Sn{$8(pT-Oyku8CJCWUW!GeSOG#A(kZ3zR4#P$g0dCNn)n~Cv zGrRzHNSagqS1X&p6$x-OFM?`6`xUt{2y7E1$EKyD8AGtR$-a5szmvAXQJ5 zoiO1IDTo++3mKpXQ>d*bH_hdYo3MnQfq`;ah$a$3J^yuSK&@1ln`OoVI(BjJtUhk$ zHJaTQ45#tS#?#6@IAqdxQt(8BR|UMDj$;Y123@^Xb8c5;jgAO1MPp%eSQJIOU2|rE zJXb14IB~OYQHjy4!e$MTyCw7wl@2uUnWsB3+*XKYho!r0x=Wv%BL8q=Y%yRzr zEA@0>fTY3Li4V=M4V?^={BLpviQU$eJ;z-f&F$StZ2}uoRbji;_gIqMt?v-i5{u!qQf%HVHOMk@bM{+a>QhxY7hH{y9ta%g&U*Rv(0eo zJ=N+kts6R{8Yil>*r91mt7=ybcU^>wZ`d5Bc`$~N zM+0at8SUw=6n5}&ym{lck!?G6Z1%wkTD^Jo#ffZ7F~%j0$v47=K+L5vt{{ZSd9{r5 zMgSxT{Qj3FyYLttV!;?wOsWe&iY;{x<5s^Yh*FqOiNZ<6+HH#FT3fUnUt=kTlcKG? zc-IWcTlJ`z>WV^heQH8T2EULMq&Fxn%C>o3(5vX6!^sI+}NXB0G!|hD9N!r=Qwa$$jil$OnB%aT zMZUhV@N@JNz+fqqMa_XlxdKg~YXDzwujZ~kd1e3j$<6)iPOd)K+TU;FTUv}vE@!B= zY!<|Jli1rR?I{8Vik)|% z&MFa@2UDVGZZYtE6^(1kXI-k$NeMYs6w->N3yKOIvAU@#6N{ze@tqR(TC$Ck6bZfu8;a*g!hS@)$%T)k0G$ z=JjLEL9G3VhVMd;AnIpm0a2-b4cRu*`co`lXy=y&?>hIL*=H`t0F_13E>bq2`Z6%& zHo#D0Af|?wuH1dt*cHr!*{x%3_fxOxp+n#+@3Pj1ENZAbsn|KHO@>Zl%;Y9jekzgZ zAt?dSwd!$zw`r`Ln~Acxd#bZtES=V15$96Y?M(IFBw z$?aRWd)Kag1wWPAxNqZf?NdXr@VJ^QRW3KOAeL_$FfWKdmV*>&*Q=-0=J^EG7>UZm z;oBw8eU8Se8TC{S}s`E0jp8CR%!Fv8B z;y@z}6OEMZwVDwM_cj7hje$K9o-L6nVtlRpmkfP9@v7mx)`Jd#?AF2K28NL=Q;Y%Z z=2dlQt4R&_+maunytEu*^bivcV-LitD3?GZgCb6)Ie2mDVMS?7#$(HPo^ zuC2EFsqX&%;kKc+uCCPh*5cN+Yg4?%0I*42v0?j$En8BiDoLr0>GkXTQhk?=$-Irf z6i}+cAs0CiLH2OvqN!zX?=mePW>*t3tCBQJSgldaf&{-7oX-opF;*vnjN)uuF$Y^! zi)1A2a$!};<&^A|@bd&_JuR-LMa5dJSZg%Kw1xGlRVnb;xz3cuDMj$m$z-b*S}aOO zn_=l7<0UAFr~GR$_DDtuT)=@nfVEGdo5>8J!`hC_U|(D3O>Aqch8afNd}_}gEryVG z`lg$->t;^QOiz27x6;+TG+P_ge^1ZKQTB%aQA3kU0b^$=U>uN<57lB>jX?6UDSFEw zeQmsP`RG>7W8s4l&w_VTGMO||omAWx9U;-B(}gQB)|z;Y*J(pil4~%wxex|-%^^YL zr*Md8B`qGqO<*>1wCKj-g3K!d#mi!nV{Mk>niPE?G+mPPt|)gXa7AyexU|y~QP^%U z4^rq8&P<3GW$u{HDl~(IY$dG?>k>P;pd&}|LF*c3~wuFu2uxzMQ_GBMwmt~EAUqTU@ zoUfEh13f)K%;N_EH%j2yrU8d+My0Bk%x5^%6n5Q#@~Yld)#`w(>um#Vml^mDSZ&4F zT5Udv7eqkoqDo9f9hm;tp!17)K_J;;;jt;jIxKQAsaq7zsrD!iC9o?+n&_rh5;Y3b zOT2>6`3nj>n{3g&Ng9<28mE5TA%c)cyOx8V|OGgtg$qCHx!E}i;nkvvV zMaz3XZ@9y1vU#mduTFNZ$7@^TN=%gpw0Knhrl=D*Vwl~AySA8R8CtP2MU}RT#VSn? z77Bww*5;(Jz6|Ni-s$4E*HdG3)yVDiESIS zN?xF2I?qU=UYk?dTYs|fNYXwvd=uA(`*=oyq77aUO-6?U+u=a{>8&-1<~ zg-9|S9Wfl05mc^KH+VGWj?IJx&hEO?Xs=LL|4*2-iQUK(>DXPsKdRK>#2AwZN7C z)2?nrzG866R|#CMgDRI@o&%Tu@0d)IO|)Q5i$xj6%MW+QSy^damqUTa@B{GV-asY_ zp$g!=Le;cc*6oY-L|3nNRm)lmlU$OITJOKQ8V}OJmrbL(c#3$<-qtgMzK^v5k`z)A zbYXPhgJE#2^PDM2N>~7e!w6Qqhw2U`Y(XIyr-j#~xB>{+S3J&h`Gj=9vY|3h-+AYd z%o%Z6;YSmauCkJn*J$txiF ztx!+6S)2y73{DTbyxO6d!#d9j7;~H~+a_g&H)5ABE9S&j#UvRYr-;(K9YjB-nEjk4 zgk9qll$0%wivHtOP$O@B79>F>A007+?OWuV9>F%WbgYo?o3xP~1B8ty;>CqQmN+6yoMDia z2CI}#Rv?Bf5jhPmV49&CL&}-PXHFPHuE}Km>mk7w)jxZJ>Q6?bb`yD`0JQ}nNdJMA zNLAs66x#-`_S?_F(^U$K5|K~Xmr!T%wZ8_TEP_=2$=gX~eJOMKO1VrN$TIZxwgT3* zBoosBK4!7zfidkIZc!9A(!CA^xxzmW^ey??2S{f)natT4+w-_q%Cefcri=4R8fljm z65Ob(-NM_a4AoqA}$2~DA zwpwA`9_V^mu#9fS8X#Y+7@);&nl~ics|NAGH_^W>V#Fa5j~{5s14hgX2<5xu@qDPO zD_?M&R6cb%oOoHR=+x9sp*D}3gkJ;8fAQQ*s7G3Tv~NA=m{O2&)>pVE8PmDn!{G?! zn1C?v0@Z`{dme+0WaHFE-(O|tNpcx0J1VEBA5W*}8GW+2I!s50R`+-k$UvIs<+P}B z>!Kc@vRd!F8N`}xXyK}AJXNX0heTcH>~fFa)-`1NU0uFC1fZxnOfR23*~p4o3bHJL zn?=pQUpCEk`9$?vkInt)q0x><(~i4qw{`;?>!ZHaiqQ4c}X_&t7(ecq^*nb{wig^LN(dof|=em z0?TSy)sndmrOPrTVMvn{VJjyyvJlhQBvI*m$QXnp^TTp5$4Z8l|1!v$=q6~LYLddH z2{65>E7_j(eXU7biPn1>EPNSLS1VfKiZ5&TN1)46s$EU#p@*O)ZRGF_js&ST&3Fs1 zgv=n&@w^t5g{`W6lBk*66iwytepxqVezk1w)|ia!FeLM%HrDxX=tsfW4~c+A0h13^ zV>*LPGY+Ud?s#5&b!sq`&Bg`W?uqyOCvoUYbk7PmwQ#vXhZWOo3-7CL$5*!+E@nyYs5)tFc&jdtYmxEGN1z&WC6Wz^oX5 zSwt^&l)OKKiw&dqye8;mMdt7pAuAp&7BG4Ip&8EQmv0xYWjvK!c7@B-7`N zpaIr3)n3i{1}$3xt7uMVv`G&|yA&ELT4zhH5A01JfC`rcEpv*&MnUBSU%C2eFrG`J zc96kcWNzpcmeL#PR0eT-G}{_YB$V-O+Z0_4Aube&RF&%GoU7oVXQ|Dk`OM)T;{@&%{z7IC{Nzm3JbZ;~K48?5s6tfq)x0&vu@{|E5n<-nTg2=5VCs$V@ z9@R0B0y|-7s_BwX9u;Iw{JnlyXfYO3c)tla-VeTfG^p{;P-ld0YN5sJC`l*t%$^iY zf|EIk%&EghNYRX4!IZNGrvC+c9emU<_@><`UR7LMSCj~1m~3SEP;F@`(?1kM(i#y; zm#E-|f9Zu*d}YTwbERfZsB+B8lka}$<}i+Cx-H%`qm&uvb?muRs34i5D$0MT+Vm$W z+Sxg@ck1o{ueXM*OW^uNY4Xb$qK1+hlX#YO{)*&x z;^O3&9Gs<*rh3@WUHTls3Xtvx!&A#XVQ?H%-9@bH?V7a>%ykdn9>wuES0tec3R~a| zVf{E~@VA{H%Q-L-T$^H)LM%(s6sEugS{fyWPg<!+u=p*7hxsT5bL3|5ARx!vp5 zaXMY5dwRGlcZ`j30Fnw^;cX`TT^cqIzPd#s1dHi!{IcX=@<~17bT(k$QubRA9p{%% zNLV)IzX6u&8vHR?Rx?h~5m~lHH1%+v;6odS6|j`PlBK;6Wm{O5X+6ed6n_Wy7612> zZJ@2FCY^)+x`O9#ry-DVEycAC@$0-S@O$f6RFx>J zbHInCh0I+uH*P$cs)jVGZ3BtJ#}lH$mE)WqtAFR{Hy{O_L53*U-wNkTemY%cyYu;K zTUVD?^)5rtr3~4Xiu{s!qbsL|@|Prp@_&uBOs`^%@_tO^!(ommsVapC6>jD_Rbf08 zOw5z?!`sipiI71>lXOS`-<^B8M`xw1V%bHJ#-h{aj9GkSG|{Tj=Ac0dS&?jA?Xo%uqPr;y8jl^t$!tP?n73fxZ&WbXrslBO*pFauOCbSMWK6S`5FQ zN?)$0(gXa`A5iTF6uAp95_OYmzn{KYutZ7-nK*;pl!VU#py~l7^^T}1b2-)SR8%2X zu^Clj*`chY@Z|r9sDBf!HZQ_L1yltDdGjKIgY4#bH=ur!x$A1sUGuB8>9 zRH><*N?)axTU2NaYJey-CJ59&dA2;zMglJ+32DXX_~H=maPZI~qY1#TU;Lus-V(%ol@h`!tw~g( zYQk{0ag10LIyI58Df(*4kTf>q=?Z2ji8WPF{!UnnTh#Tg+vK{ff~@e}5)Z;>x0CIDlh37Q5tVQOFBrd@6}5$)^iau*ZDdlqw{FAiZZ@pCEoINxHtdvW$! zp;8MmR?4-kwZ>eFGWqIXp{HJ2Pn+l7P@Qy6XEPDMnJOf7!LVq{VO?;ldIV!@UZgP1 zicLmOn8pCw)gF^l3|stIyC|Bns;0xu*lN}kAz~S>pol5SRwT(&!|^OOn&Kah#o`o$ z6+M#FXeZ&tV*ejwZyqIUa@7ZZ5%Db%UqpQSlKZ|^Ro0f3wJ%xAd-Yzuz5A`*{d!lg zYPDJtQcFUOOoJq7WFZ7X76xQI10%*9WMGbr!G^&G4~vjNb7tnu8RpEK89?A;z#emE z{$nD(TqvW|^Wlp-}v6CHtAtle_8GAkRL&hT(Xk(`kb?$eTHG>IGo!;Y67}VVr;Ikw? zXe>gGRHkl+{|%;Jq(23N2-z-#&KgLWE7X1TF7a&tI$aakLWNl8hi;9~RS@B}>0jKB zTvcEUaXK#S*;McMZKk!%jP1b4bwvF2L(%&DY>fP+OEaWxQG-%9pk5pi0I+RRWLh>t zSPe{KaFyE0ikg4-r(#9_Na0FVSk9ZWYOr+mf<_w$?Y(xV6F1@$8*#+LOb+CLI55hJ z$~8jCZvy>ffma;=WUDogtGp{Cy(sa-w`LG8U|SPA>1vj%SnP)MMUbgyAk3QJ%R{bL z1=c_a3XubH$YSLb$KUTWu~B6M_EZJ&vTbYpX1>IXH~qlHo);~8D$Pz`b&5X6<%`$F zir^Y`=R7ra&%;SiC_nHF54k;v>yD=*A_*N**DT?y{@bCR;ro;?Dqrm1T=e4AmtN|9 z{6~J|&B__O%f%#Uns7kP zab|x&foYty0dl=p25>80nq)lmPJKJNYQ_k3Px2muxH;D5_|8eMe;&v2&Cn&x(7Drb z?UD_bI!;stC7-E?Yee%6ihW9nKv#7cVofEj+XCI@lW!x8b(+POO-yNtq4C<(|_dBgTA#BrIvgY_~CN6s!UN$mU7cMU-O6IZry?nWxdF6$N z55Ft(UFRqXPH^ld*gTVRQbYH5PLd-u;^QJua9)vTC7u-A8i>yvcjuq=)K{>VKKuUzR@XGm{$_Eue0mzHj2N=B(xyLJ8c)!X;)-&#ne zZrStmwy4P5+ir->lVsU~X>SS2MRfY)Z3f90s}v{H|=JXGW8{iN4ym#Tx#x z5(^AIov0s(-CsMr(pqS2!giwpbFCIMliGW%1sWkKcuEXv(nXJX$nRF7JBOiC6_)QL zOq7kSBkr;Ui$5crY@NA#S?1o6&_&8Y$$G;9u?VmZ4}b0gTVfPj85Wtu%;J!QL5mq4 z$<3Npvki{^VViTK!n}@5&2|v^m1sSbT7&I~=z()%ZH=nPCLXeCP}9A&0@YeY;5%Ha zzve^2)cmMQ|JO;M;Q&KGyuX}sOGc4>ty`Hn+}hvRKRnckqPUuSCSgCyicIKX4x_1U zxH4+rmFbRgsb2rjlVaZSJXGK*6C0O^)Rc1^Pz6~VBlPr|ZlJU-PB(&fT{z1$3Q4>R z9AL$2)*ALzG3HIBXres$4~jnQY;xVROk4k0-cv18(*aI>>?PX4>SeGX8RJ8WQ5}fgvmTQ9AytgYh z%}Y(0Ymgm755zL;TK=fCI_O<6SX7;gEjB-^IYe5!b-)1T`?6CL_WD5{y z96b-Q=|fj+k%;?S7GXG1Pxz(kMQtd6D12Fd1$ zY>hr-JN-nj*V_k<2Rv7^X;y5QSx#{&VJ6xImByM!tRP37b<11Awy;9I0~7%Q5P+IM zIvQ6A!D+(r2JkH87K}hxc4~m5gbB2jvQ{jtGI4lqjz}HiDr1H~EOomkT(Xy;uI-v! zU!{>2IKP8D8yn^i2I9~QEOQ-VVd6hJWj&U4VD@6xMg>pTUv$$+Z@A2KeN)LQMd1;J zjhZX@DBtP$S@AagS}sR?ayrwsII-_~)hNjVCR=aR(AktZ-C;-gz}+RQ)sSsme<*fa z3yAk#guq$lzIC+Ay!MyC9Cf^vPErq^15M;pVXnP`#{*nQ-+9nO!R|_&jflm3X!V%K z78kF%mULayo^G#9!~E6@A<@|2H2tNBbpDM}6PUi(=V=b+=d0~&3dsV)&FItU^FQslhh9O zq^`WO<#sw-Rma)N7K>X!Dz&9^ZkkJ5qt4Ou&cdj^H0}pnGDdO_h6=k0_+g>4a7K-{1jmT zzkhc2y7(q1K3pm6HZRP9SUhL`kuPY0^+wJ`wHqS9t$K#cb%#k`%eRusVL_=VGs?19 zfxA*MZS(eu)xAAywQtv~qdO(bx|1sw@1(NXJ8BTb@g3#PNSX8;n=q+Os-HOLL-8h1iS~tA$_GA9jjryKQx$nkvJGQFFRuMW^wgpc{_xTRKQT7b_x1!(mA00 ztg2H@(=e6&O~BrevhL8-Qv1=jh-&JT8(Tr3Q>;ZdGQ>}3v*k>tl*>&agV_SVAw+E# zGds!$NOq=RR(7eLcOXbRJU|W@OsDt@5$8Xq1Y#9?{enWHtb?+y4TPajy`Bg8IlO~! z;9tZl2EMZMClCL(hu?VU$k7%5#>o*$v zD?2;;o6F1lGaDQGY1f5t|J5g-eRluO#iOIve(P*m>CA>7YH(I9D6f-1gv&|mZ$pBn zVA#k%qOY8$K6i&g;{yiW1dnV&=X(76NlMr^=r1Nh3cA#k)}i_+&~=d3A2mH{au-<7 zOOD+GlZ#XG__HSe=;Mz+{}G>K^bh0P;qg)e!;T&B)8H<5s7x+re63b4FHfbKsa$S3_B)+rhx6t8>vz_- zx0hAhzPfz%{Hp!Q*yxO!Wbb6p(z#Tq6LKQw)b)p6{9_^-x}4zoD_354i8@<(>Z~@I z`=&%}iNsur(+!^YyO@)#O`Rzb=gWGntoeI+7(}X66T?6A4DQG(Tt3;V+8 z=#Sti)T0poys%`&G!dIPD)}$JAKkTn}#Ifjfin2?m zSk7lMOU0%0PHcA~t9UG_6c6PaPnHUYCv(LZr)4J+xd$z{9S8_rz*0VjJ5%#OhAbc_ zetf^>_I0)(o8GLOE7)z+;9SOl&XkiRxPxGot68oEiQE$N-p*Vo;2cGS`(|F8q%GIO zufA}Em)kiLg|%MuZp4Yk4Hmlz!(Xy>|3F-4$v7|ft!6HVg{8!n=Y=>tQz47x3qK*x zAgP%?>WwK=a|~Zt9MtCi z=1%(QuFZ7MG2)#_W<&aYxf?6uHU8hpoR*?el{~RBNCV&3i=-rWYotf#DYZ`$YKCh+ zsKyUoWhk{GF5Lqud@*6uTmmk*Alt$(e130F#Gn+n7{}{Wyqc?=#8(*h4nm^u?Io&a zgGmxOfytJH<-aE4;XBH1zmTcqW9(~w9QQnn(%z$2ul8;{@cKboe&hNv8kF!wKjnp zL#OJgK4CWYOk$QC80R};`(2h;$UYJ`psU7W68=#)%e)m2n{36hEn(2zE9vmiwN-1X zVA_V|efz;JGPWp2N4D_yfCNf9%uyeq*2wf zZD`pjADF5^A;diBi0?f#UA_Ehp8c$_+WaSN-!#6SHf#kb_TT+~!q)z- zl9x4%P|M|c;7O@tB6TDOvxB}NzVpTiwJUdWt8U@B>C)oj++1Ct(z-yUb%9Ci4c|v~ zbk0sb)p0V)T}^aCP2$nv;T)&zy(j>Oh%p@}`YrKR z)*@K2RJXu%7Ru6)AACh@E%6dXWLYd;w@W5r#%Gc@IO5VuosvE2#b!v5-A--q?UA`w zw^gr`lN0(zuRcCSUkFFR;Xs~dGADC9`yuIpYYeA9RJ*{5QCvo$h#nlAXaLB|V7FrA zH%-|?a{y9uh~I(Lb{)+s6E$GoVyfi5n2AyTmSd@9pBV2n{lF+u5hFicU-po`6QFe3#_Ez@>%xwJ4&?W2t+eQ)aILPj zW;6t;x7m8ZwDcQg!!cA9MAxP_A~oKrz(GayKP0MUB#DWxNUq^d+pjSl_zQ;z2drWj zZQoyED<^IH;;;#JaZ;WBtl-#?cy@wpC$+vqJ)DJSMwC1cLl+oORrO5~z(m~Z5mV1) z*#%6=9Q2&zJ}spAdEct0g3d;TF%k$58A@;6pceilvV6$(xGnC#moinnX@p-) z@~yV5Gv~{uCDF0U020U~vMg>tG9cK&q|Z)P?yic+Q0&vyUX*`i|60CmWoTx9|0sWS zyb6;!p(q-cCMT7Xq+^z4_aHuz7>rlCvi3ed$hQs~^TI*j>r!(RA~vf$4Q5nkcVyaU zGtP#qB0P(F5M)fSWCeGSk+NLMvT+%!$dq;B#cZ|>rb41FPs2_s`#CR^V_H<*7w?z# zJR^YCqJ*DFN`81yonH-^5m&9C>*ouu>XplMW?tA#;5I@>jl+0-mLq@PH#qrM*y04U zFsb|C?iEA}S0z&S~Q$sD0HuR{yf80+kwDtVqr7hHWw-mYlyqS*3}K+Irh2^(WXCbL%U z@O5hLC;Xh3BtrUtu(aZDrSgdD$SG?aQA;;)Dr2dRV~4^lGvitA;>a=hn;}sWANOZT zwLY1c>E?29+O%3`sRXr^*%d;nuzC)qcx~=116*b)7AKWTPLL}nO1mEwS4yhYUbKQo zU{o~_&=A$5`4p(3Y7fk3knCo9W!d&o#*DD0|M;|R%JDnPR&Wr5bjp!pCF!eEJr||s z>xlGHK5Q&-m9k_n{`s)dF11Q-DC_-v3bdxg*Z%5(-TtNmTFODYeW0{dyft6PiOl)2 zlI?M6e0b4D8QDn$cYJOKQ-yl}MWYj&pS*Ob2`iR~fPHA%Ca~uWRwp*eq%yM}>RbM$ z?@JVEP|nH{Ecx+{DS}C1cvS&heyGv-tfxkfjoDkpvQ*BfEMZdc^0o(U-e4*)3-=y0 zn?GSy_4Vy~2F~;$&X%b$Wjblo)l|Y9HkvLgJuea0{GRNhKG3s(Ke~SDrii(Dyy7f5 z+3Xd5<>9u)J4x zQc!FXYA;Jo_qi!hZ(D1UZw}#I%X`UPZ1`HaBY^MH0;ny~eTf_)NdLA#e{xb+VcH-j zZWkjL3E<}Iu4O_^XLejPbl!?93^^qqksG>Z1*wAMaPS$wS;mNzt5Q>%DVpL5pZM2e z%_ItICtV`KDpYqH&fewAH@2>B?e0#Mc&wUnHais+J;%8?b@7;>K1oyWj_3NxoJDVf zf8HJUp%46Jk|v6WVh3YdtlWymyVNjW1bNtlZImz`IKz)KuPmEnz;u2GfY8W>28=-= z!|x|kzJgnOPW0=NzTcLiZETf#c~qQ7WJ+orO>w^zkk_WB9*t)lZ0x*f8ZU}S#Ly66 zkMb|to@qE%(3Wtnoy@fvOsbak+Oo1QBCjXq-n#x^??}0@kWVRAKm$eDt1T>`z0*@q zPH^^vNnz4s0?F8Ctc;75yppnS=@DRpnBm7YmQTZFBR)Cp94lX+~+SnJ~kP%Hq+72Q` z#`HAvFteG#Z1+>dB(@f%3kIT{g02~iYuI!g7iFdby9(uCYi9pU_7SH1IOgBO`!k9swyY9 z>Hd|hh&u0Jj~KFfx>|`$a-SbmVSSaz?v95#n>A$;*ew04&^Jvx^0<-Da|=HvVpP}A zG!VSJbIC@jD`E>(4?|l@UpbjXiADODLG5Q&*%X-auCmk5-&(smlRrAD@8)v#-sa}o zTD?^&&CJx*Os0NPpzusBUqk{Ui!6C5Luk3&lWD90=%J7HYECKdirv_DiGr zkAT%7mN2W1V`*{V>bf7#zPa((2Gk9hL1vjc&tSUcKv|_PGUvm>D`$o0T{AfW)`kev z1wKJQJUa7FQV}JVvFjAGzA6=yg)7cRhre}uaq)$uzUIoR#Y)}b8joZa@T2MZw6yD8 z*NDUaid#%Kga=4?vfozzQpAEy5tTotJfplc(B4`IFTMWCOV2;^@ZQb#`ue53VO-+5 z+@*f2b;);}OBeU|>zB?;ZH!YKi-SMI-nPMn_`wkxN3nwynqUVExb^ygND>WHZqGhL zmNiCdZzHm8@?|`*wCkA~L7;1JLxXHqD&-v}LR+)?f&?^(dm#I&v8B5Pv|W%5d=>2& zmZ3x5ot1qQx?=!q6Jl3S1h{I^I`ljG$J0IFPiwYti83~j)ex;C{u7iRHvyiI_2^(k#9Q zF*QxhlW9PI_wSNCK~84r23aOYW|=Zh=2XH&uJhvgnIs8aS2)V~Ik|j=UDhKjBtt=RTkcFC}EEM8O90UtXv+MiQ!mHB- zdb(X|;y{fRcur1BJ$B5K;Iz4XZbQ}JnU6hT0s9FXWa=7|9hGB z&~V=b4e{GOVSHDm(32hP1ABFSc^NG`M&KCsR_q~rs)R^7uvBi@VdzqRWD7Lw`ljJ~ z!a4<3z(f$3mR2$nC*#{<4NA!b#(bY`t<)D5yiieQyc04oLygKYpLw#*G7h@Of(H7? zwVa&g^F9{J%?1(Y#Q-)Jh)euy)T8-FkHEt1+Nx_Je%*BG;oGOlV@Qx;EV$M|xOmBb$V zKZOlglDQ}&m-GFZ)?9H;*WH;@dMbmfIV?7fhD;er&aF2}QB8b*{NW4Tven5?X77=GuH*F~e=ah;UPtUMCIl?l@qKq8-%B14%%6~z~@naFr zEj#L*7c8Lp?2+jli0}dVniL)eDHQ8e>`kyoEVs!0PYSE^gr_G#NDAgzYM@#q`*R&f zj&nEYx0tqyRY1el<~zv7Uu zc@CARcR|kVOfO7vBb8rBqrxI0A1Re;ySBlZkzL6dgrQ31B|AhSBK49w&Nq~_c%PCD z+UW=Lg{6$$TU-oUOG`oI*>)|cO?ryS8rCQQax%%T8*w}uY}!0eUF$Qzh4Eqm6qdq0 zlagPw!>3GS8<%VqA(hnfcL8u-qBfSgTVHMo*jlnmxe8UCnW9WZ%c^ZAVw#z;e<8b^ z6=9U#v3(= zwJ*N>vMs#jJ^S9fP47O%I6FN;W&*Lr6O5lQA*Bmcp^xXqOiYeQzB!3w66_*{`X|wj z@tOT=b>4Ww+D$-6E5x-#NurVQF@;Vj{&@h^{vtNZjk=sTQ_Wi7)y?F=6|HJGhGxYu z0s`3SYTaPE02AeD`fK(211YNaqAZ-(OpQuWH>MYDoy%Kw(WYe9a}arA{o`UZSHD-mxK!z2`2-6on@UN6V6mdjNc#|6f3k$oudw2aNY_Hd0c|8Z`mai?Z zue%ZF5MFXGonS1TqUR)ejM41mWO(w#+$-G}H$<--AG7ZActTMDo=sv*IH}*GUxmbh zDnTl^1soU=<2v?i?{yca(isp|w-;k1P%F)aZ{Am>Pl8u1|9PBkW?U^ZPc*vFfwN6x z1JgHiSlV9Q`)taxktD}E4s~sWDbfwo199X4%f`seaL0Bv>Y10zA=N`+ro2MRkgaBO zmG(48(R3co6I0*}O!=_$N!njkAp$?%k)2P6Yd2HCXd8}mb9YXgQkY?EiR5DFrE37txlI%D}r%N z#Mj7W253l+->fDzo6zVm?@HaUf7$|GgxoTf6(0MoDG{RPreKycjTU3>02NX*%L79t zDQ4wiiuxH%cbXo~3xI73fSF-lo-p`%BXU2Gk70bV$+fD32NPZ7WaU2)c5k4D+>t)3 zFb!-0ywjCNyP+uQdR#8MY4>!g^q7f}=-Dh!&h{A3;7y>+c)EvdS^vy_D`N?e4EBsF z@`Y3SoU}PHEWFg``#&sv_glT*#~|R{J~P%by#_4y-|v}};a^M}uJ-FI;71m^AeiuUytF?W9(WZ2B81rXA1z8VQy*2S;Rbx?;GRt-$NTlupoHs64A&>(}s?95cNd41;k zyV0*sWHZlBhcyObt;fjg1i`3b3=QpY#~%-CF2J$!#!2pu@$w9xdr5qh9A}Qth?DP5 z!w|YoVc(+U1>!kPpmn6v4nX=xq2(rNy}&HrT@Jw9Mx8P<)NDH~HRhVSgFjagx0?KP z1aPsVcjxu&6S3(qVIWh85FezVs;MS5UU3ae{aI*OmRQx#F&F8o##PQ3h)r(O+en5G zl2Iyag@3F3u2NR!lnt@QH-MR(X2IS_;&t?xJjA4A>a%<=L-UMZT0hgK$3;wQ3w-ElF|f^jf>fJ~buNy3R( zcfu$<_A+yiH1&Y`hncQ}rh`bZn9hk0ztUc?HoJ zCUXkkPKi)MMYinxbqzDSomB;v%dLA`q5%GNVOAyc< zS-ZOJiTI&!7gZ!>(zC!8XPYrMjc{mF=6&LYV$l@Ah(@TcVO53DeJV0dq?rbFH+7=P zZ>&KLi8VK)usqD zYS<>o@j)KM!tofe4zyGei3^!!_ZykOSOm^Et4A`s;Qi6y4HTYys(-_ z*`?(o#OiCQNY7@B;&&HK!r|L*ixWLiEcgRqk17HIKBat@@_FSS$ZFoJKk~(=73I@= z44 zy?5G%g>~YIP!|bE7FA$bcu43Fj0mT_6>%?Pex9S)O;3R-U#$Aa!wM+H2E%?BI0hkE z?32i@%bC6D1`7*$P%Paj#8L6RCewV+WhQ1cEpT3%iM_x*hA@$sz;|37Qx@AWjC@tH zs$KLLv9vIB9nCO#-bHc2wxC6P7m1(srZ9^Lm{t%oCH;xyrY*YLRX4Jvd#@^#GA=M52_4nyp|vpLbBow!^-wvf|!j{#PxgsTOs7VO#Ov{dL0Z zlRnH9JN<(4yz)Nf2bEX*-B%Z0@U6E=?hS2g%fI^M*F&RWET1SX3@c1ijEil;8DHYmj|;jV8Cs5Is; z&&)i&uy7HI)1ni$gBSt2ZaRoC`)8uXjabSl*0_$jCH@<&?HQbCUeh;9#X>2ANF9+H zqZ)~+TQ{91|2iVJrBdrlW~k~av;edjLq6jsOV~G9STtui(SAwz)4sUoEB!R~{npmL zR@{%{*6PCM!tQQsrq|1~&N0|$6l{Z)vABX!)qBSjg;CCXbTJ00Zh7?*VPf$diN*gI z*llZyA)rC32dfbwTOBYzYs}iRBV{fVnVPXm0y|#C?%SNxbqigaL%@b`=fl&)VCyb` zHO2~>h)%=(g(gOJyNoFh;LQ>e_y_ z+1w&q6BUece(V${a2O9vYMxI@O`cd1arH;jcjc)9v5VX)32E$N@KQsnWvDo62-m&J z{Y|SN+zTSuYQ;9NN;wqfEFigpsl5McSs3xdA~)s;e#K0Gi!)U-iREonLZ9Ll?tjpN zImgb59UgqFwleJ_cY3vgl9@o>kgqHw$z|nG_Fo14O}N;eg=S?sRhqUe*wPwWyPbtu zb_nCU~X} z3QgRw@D}noUP7IJTuB7(G?#j&SygKQ3Lhq1GyUR>O^vp&1e@G%Hgy?R&9)o!wrbB+ zAub6FqZi6Mb6%vIJp6m{{@`%703-3+Y5@esz!&UnnU`kS!L2 zwaUs$5M?~a5z*vHddXx?JX}dCc@q;bhU9CRSO}$`IS-3f2Xg?HI$S0ju*ocJ;wPDx zEr17|PA8De06WUmxRDRCRagx}%^;!a`R0QeQf+lSl52Z3far%Md*tuw>i0}d%}-x4 zEq!OYW~$H(3XKRA>np1eZq}z(6rhxaUHjja-&azK^WSL@+J-%RQ%P!W6e$kp`>x2K zd8zrS^|!>re}#JfE;ci;1yX4MKGPL3SOgb!^&R6m`$l^n`F$ZVvCiIKv0B%2!v$|RTu~J z%=Uc|&9$Wf08|YdydzV>_rpCK&pXtZr3|+#nssF9^)>#;?8R0FrF*e#ost7GMQngN z%!{$9tBi2|qBHEFk)9>3%!{~ar=NfBVP@m?Yp=ij^26_1{=oA3`orl$rSi}h5c{F> zaBNo2$=eP3IY%&f%onLnge_-V_KZ{c%^^{xn{1+RkV6*m?qrGQT0+ulc%ef#OnVMSE)u_O?WPyaNYDwzIQ68$OTv2W) zx0SW2!mJ&Sg<5Mb^+jB5h?<{^d{+H$BbB}ZA0NXB6BCH742Fe2GV76A5mWm zv%9ONW3zv}A#S_d;`Vs$JrzQj@lXE~8f-pF`CDnUyBK4G^mD~~8o$o>4_%55Vmmjwj%r|o*(xPIk|p_&V(Wo;YV zXUnFO;Aym<&(e6KAx3TvXuK1F;b2!MaY=YiTyh+{yg$IIRu%_7%iXmp?yUmLA*wj1 zMDvS2NTF3YgCY@#99D^iIGrb@`^(|%x`4+drP^N1bvg6OAsOT_n2;`hlc@q~xF(h} z;<&#pGk_`26R-++`v(!qZX(k5Y#2@b1oe=v>J&iEsG1U<*1VY{>Fxn)3n(kAA64ON z|3Y{MT``r6h?)iJoSSOmC~7hRl@(QOwo0W+v+}M}jfT9kb0!fciMSKvG7@sn-ZR{P zULeM;E7oQrC%R>UTVeba2Lk)2rCCf@eoX9~+WfpF$6eG#gzws#yYRS(Ab$S$^>Xl5 zl#;sizaZX_nM4JDnan#sP~IbV!kuM!n5owf*OyvL^Ye!X`ko$!hu7cp+;cOBGv^m0 zhMhr44X`;uei_d(7cYDgGYj}J=E{g`ojfOrB#Z=Ko|0$_MuRTKFyxm3Ovx54-8EDr z0s$~BqNUXt$W|%RRFio7DTq9fEx=R=xJI(c6I|WFsDvoNF9~pJm`*th^ML^DR;V(T z4ha52!#9o4H>q*0rBb2_)cNF{DZ)U3+c9u*9|zs5S(Lv#4-kf3;Y-3Sz|?r({1L=j zHKazvbh|0)@_xqL7ebCq;}gkMQlN!27ysy9BYb-1sJpTCZQ#11g zsY3MF-NT!=bCIUyee$&>@U?l+SbA#SI=oHD?L%w+sig)^Z`N8@VLG9lcPEwFq!#EH z&!77AZer_`Q-b1iC=Qe4^%E3){fxTWuYyo#rd{`#`$3rm#VnUz@R8=$w31Vb-E^QP^aQjXXa<}HqrB@Gc5^?(})yotQYm^>D&ES zcetKk%gg4`Wa3cXMQP3rvxkVdRIqixbjPG_z^OY$lR4)D4(#uWSYWXBw`3-LN1p}F zE6bOJ^KLH9-?-6Cg<-QWJKL=1^9Rj?@7T(Dn!P>}J{yZ+8|R3?PpsA`{WXz!Po9Z< zQ!;~-bhkicn((JsnlBq~9Nm}wn!5B4NBLK|cL2aV_YPC@w$`DVeGzWchFI?lFk{kx z4H>tD2mbLQj2WknM(zo-#r5kmGuvU!m#WSsUnfSuec$E&8dh0;X-9x+0e^iL4X30H zJgg`7>4tzb_xiKNTB;NKJ>VYQym{&Nnu1rG3%TFSf#2+bTCV5bR#sP)+iovcGuqc4 zZ=cqw_14zh$=%qUU}l`NP(%2as0N0ONpaS}l+Z!-GwF^xD?v828_UhN``5*?Z6|KE zzwkEqkE+z&@q8!rmfNmdgiZ#A7(p+d=CsxSr;ZOe)fg@K3^#?>VbpC^U@ZW-FBJ-1 ze z{;VB*PQ0hzv4ht@7MAnwRZf>9v(!dY?`!0NoEvInqF=K^v}%X%i$qu<4c7C>wbg|@ zYR~0z4kK1A8Zt!xBQ`LCa z`3QC~a6XE*pj!bywX(7#;0?4mFPqfTmt4cUK7*Xydtx8D!&wCq=`n%6FG^-gGbh!D zFJ9z8Rr#i(a3=_+`SiOmlqb8U2BLz-@FdEP>T$K9JA`t*x99d$XQAcd?IUg%(8C22c*q=ZgAI|7RN$`%m`M}AO$kB zIhbpPU`ZJ5?@#%vlvX3@ciLHo=iT@tE&#cJ6;(U^@&0nrL{?>a8IcWx2=qn?_XiQ> zw-cT2mh3+kXua8Y_m;2BEadB^c}0%>-ngSkkJc09W5`9=6xqdH9l_mJ09sN z`|VFll?#CN4{4?nz*Nr16jQHgZE~2`EY31!NYn8_S092&X0GGXw>YW=Ft-*BTRW}s-JrZbAs&d34=57d^ur4#zh4~a|&CkPHvpG~Kgv-?` zgX~@Akes>llZ`Ov^lP8?`oAK!fX)562$Zsxyx>7b{Fex6&Xsn%Z2`M2op}R0_=lSr zZgjZ+DIeR0h~elb5Gi_=IONO=S2s8J`u#wl&>+O6Px{#8hB8#}l4=}nu@CM@t2cLH zDu=c=c2{>VT)4V@bt2kG=6Xv{yEKM~!DO#%B!#9c6J@}Ondj$AOY5T+QQdfM3Z#i} zqQNa(Z z%cNsJrBo%mrIZO>%Tj%He84B!oM*_K$EnIs0~fUVu)O787q9zY+Tl}#x(xNX4pq#) z=jnoDG;;U1>T2rpf=m&)v1y{IKv$^~4isYkG^v^B;>4~ex@1AUTqvvy-{h@(lY4J* z!ZQtOwWkU4V@(G`Upd3a*?F9K4;VFz_j!yeSp&+f&B8@$+AUSKX#9c|eAptDWz*hj zd1~B?g0&i|Y}#)KZ1`S)+yDg;QJIQOjc5VtG1=f?qV_-6Q!~2Qlz6&Y>Uqe&&=_X& zWS?qNnUNOAsQIoxJ)KJzqhhs6bM#CyYp4|8J(=S?SEf;hFVWZi?97&fcFGHTV0${l z3BwoVY?~LvZo6oQuT+V%A4GS(7n-G#ia0OG@=c>O1F?X)RYr}x9Zs9}elR<&BoomF znf;Q$VLQq_sdZHKmF>05_b%MNaQU)7Ed?BWC$geU#$Rdl8dFnO{j2Auk4v^^{T{gmuTLG3^~=!g zSe>aU*wyBRX)VChvyUeF3eTG_JC-Rq_MviLFHRQ0#c!hXSTe!!%*N!2Ujiw!Nu9kO zbDwmGY1UrmHuOR+^A@VMx~`gh8q2|YN3v!Fn+5=yD(5cR9--~)Rk4n4Iww`mkY;~* z+G3`_sLRZws%v3FCm3-bRS(9#iagt*+XdE1pq>~8gB)^sZ8$0|sPjHkg-T_1efGSId!EA6geMt@EEJ#|T`ygZ9Bj}W z)aje?{dKU_Q>{|g6<6dI_ZJ@cE|3Lq-3h>~6Wvz*bbwS%Tqxm2>XiuH7Y}?BfOO1N z-`9Ozzb55nUNorm4z?D%PSjl~;2_sb>xkF)L|mKC(*ZARfQARNgFDJXGF9&hIgS1f zTUpG{l}hF6P3}G1Q-nC z)XA|aW2-Q!OE5WRc%pLFe3#*M9|l$mN)fDW5E`(~yaQN}@f!1Ffu_ta3~oCPaojv? zZNO{}L8y}-Z6>qcf+UR~5Sk3t-eL~Uh|}O;-DO@z#JSH&1M!|@eo zAk$(HDm9R94K~J`t%gy9p{!r*>v0*zw)s6pa zfj{gYbE039{N%vA7ik)Sko~=x$k3>sPR*EwVyFk{_V@KxvKFe>XWSV5s_8`4-Sr%- z9c=d*K`K#AQ{Zxv%uM@#$E;4-Te~OXtRv;R^6CDKh5YJj?`rPSm4m~Xt*!k=sWjCm z8UQiJs`AYoP!7TWariffP}v7x+XqS?e60^Y*9S@rJ{N=BmBamhtOyjde|RNl*gbo! zh@9jE-gqef%0Fi(3LO8L;DknrvT8auSC%Y zsfkrWJ(EyI-owStdV<=9kK!Q6ioao~3^j!RQxZeVRi0H=l}{+I_j@0_{$Op1%{^!m z^4;J4K&wb$wg(`u=F8;=c1lU*at|Kfz3|N51;!p+xpnE*ojY$nc=Nmh{&@ws<2||P zo>32x3pUZIFd;J~KMi5r7)+m)sh;qHjoyS3%^04?16w(crZL@% zna+%BI@1|y2_vpnJVy@B5CO!G0MCPd-U!6;z7onI#Nv!+gg4uSDFT|@KSa!=FeJ>i z9IPQ#n%9z-Z@|EN>hU?a=j;`q zt6s-T#x0~6(>?0udLGri8uwSrewA~rp7G5FaEe$&=tU+>M`9y_VN7lckJDB9%9BYq zdS%yc(~90!D(l z-gcl%IVzC9#l%}L|F_;G`}cd_-$pboP| z6b2gLVIDh#kl7{XmB801mjo5=8ys3OEcLr-JvW=n!>YitOBHGym=1L;T{D@}e{Z}* zji0A3;l;IUJIfLBYcsdXSTzk7Kz*HgcWGg$?D@BeDy5vdy(e=`3nGGC*XHTEoZvKJ z6P70wRVE>Yv5lHZ_2IayE89Y>wDVhKT%}6ju$Cx!K=f^E(%^6fdpBH0|q#S;V;# zDbf$+BUo5%GU$4aX?$KuG%o%;nTso@9A`zWza(RkT&YCT-7X1JDbfxCa%zslAjcM; zc_TqQKGy@Yw=z*M8raDhUnBZ?NuKCh6v)9m*2;IRE_=HR-!BLB+u!-C-as`B>&AsAxG*XK2RPiFZ7pb zt5wKUh}NE&d3g81gGcThZf@ROxVX173m<;60zL`BCm(_ee0XPJXJ_HgLs-#k2VU(& zzF1B*^VTM&9m^{}mxL|D_V+W=n`2e5L9f6lp|R2pt5W}54qY6u*t@3)8B!{2r5ZHF z1Cs}fkC$b`6#1vzd(qY&=nnQ^$n6%d@}}fsJeZxOHn;(G0gk1N$&Cf^;2-4v&1=Nf z<+iwft(PG}LrTX_Ak_2<~&@sd*m;DX@G2tf}V)x%tF7~TS1x>r0Uu{?C z<|=9z#Fk<1OxpkjVXg!fsVxG)+a{yR(g)7m)gng4Ma_(nwb5r zJG*vK(t{&RG`hSO8Y#R(L-8B^G0PAr43cI|Yj@Oz4Xa~6$h)v|)#oUkHt;=rCaGjd zHOxOul!acCi2ktiu-@%HeEG@?S8m*Rh+OxWzHH$sBPKlIiI&PiH|=b=@||0apHTF4?o@LKX}4Hk9WUId~jfOmo4Y^HQW8yQgv4* z$nVI$8|y>5{i)Yqe_cG_b=ijVUfuc4Z&>cX#q{Y=+(al41gR$1am2io@W&*DNTh2) z)5n-TbluqV!g`XMaTZJwV;l;nD-}D;VFvJmWc5PN>%@DC(%J0Q`n7VoGd16wUs^Id z=9$FC@fr=L79VG0hGR~bSBw+++3(P=k$nCEP45dkhz&aiRnYPcyl+S`L_-VaMXhMg8GLm3wl3?-kIhNZrh$>Tb4)TO;mm;$f3L`sz)dKm!V~PE{8{qxt_c z_U6%%B=>n>W=3X4Mnp#BompA;T>z?p0;*6b+(6^#1AU--`tF{d84ibYbB5#$IU^2- z9MU`_+9G9AvPB(~P0?DL*2?tLEm_{RtZPMCl%@51dp-Z*r=>(mev-Yi<@a` z6wnw-nCZgN)!kKb{Lb(9eJPpR5NN8Q(}E}0LPM_Blr^QKQ2=<}#+nrwmUY3F<&0y;+^WgpuVHw*zvzPM zUT8Y1_tZ~=^(@i$wdV{iY>0qbpQAdSLDmvdv4j4n#l;cgSae@zr6Xj=` zk1;jVIMr~ zbl1EH!`O7EFtA&}{|@uio1tDAxu9SZMm3ybK*wFgWS;>v!&Cimhzt7jgyp@(v&}{6 zw#eUWC8gh~RQhuZ3;pTY*}k30^lz`;;JN&MfB$p>nc>oodjsRVd)RXy3a*?s(>dbF zK89Oa9IM}s>ZPyqu-j`P%kYD`P+t+*D$n`as+8(>upGG^``eVlFD%VpPyMUz_vxu zZ`tmf7B-D1p$%p0hsCxw_ge3snVD&~T2Dm2Xwn+M;ZK40)}hZ}<-G+%|1|%o*IQFl zB37us{onYB{!OVY_`%H_LW)!@hDtbLgopi^;VT+BHv!VsCz$8!Ur00)J|?@byQ<8? z!Svq_1U2%Ps38E=W3{oumPQ;>2 z#(&5}{dE(g$3{h8lN)E0jfxo-7g^E+0s>+k?$`)+1nSqHr2DV|Hm+jwemG2^FFYDSfgVVOqlis7)^_(hHVl%Cx1 zZbDWpZg`@z{A5dhO*ZvVj3_86nqDsOG@{yx(*2;`;&EH$|GbYwOCzi9Pd=f6I~EzN64)Bt;XR`B%9hNrHFvLn~_(lBvdb9*G5suqEN2Bvj9cDP`>bU&7JFH>)Bz}m679=xNNPD^YFocD86`&ge9&*D9uG;)SE0uI$=>QpSqAr+!``beun!Ge8 z>{nBsolRFHDXqG0A$>9v9ohSbF)xXD3xAm>CPxllcLrdu!~ z23izEYS87I@WS5C&VtHPAn6B+KqukhHiw#|SX$*d zB7e=xjIH(fZ6#;g#Tq|kLe9I}9bkt}W;{o8i$jYxJS?L!Pyc9|XduUT^hduOdZJZe z1XC%4--Bl;KMoEt%~W~b(a*VZTF!-z+?dsDvN*FNQp1ZmTTJc4=zlSYp)iAbgc>y~ zn2Dm$Q=q{Xh^m;4cYQPk8B!Ir8t0L(q{DLnHFt>x#SDLtuqTO%*zYAuaXZp^={a$} zo(y_hrP@YmcQ<(M@dpnAOHmGk!-vLw#uWm=*)_`bgy>pg?~eopM(xDosE(mv^?){U z04F_xDticv{7w9XYzlca4FdIX^)FA6I^k!Pg%3j)Kk;cq?8W~M)hPZhtelqrWN+N~{J25&Y+Rm}>v;!LImm&)<2S4<2XG2I zkTTVr&LHb=8%(E~W0+I7Fysd zM3mhSV*`Bbw-S_6lyGl6DUe<_L3_E=Do+)rS}j0a*RsGPch22;^id$`fsXM8*mx&* zc^v80KM_=otZF1i{d*_Fu5chmHLi**jZ=|i-FpKF!-+)k*?BpHS>~+GS?+i7rQ5J5 zNk>S7eg4fI9y;=!>BzBMO1Y*$ld5KqC)7H{^{hdFVT3vWAd|4E573qWByA%-W4bfK z$IgH+D+=5KC`AZ#sJ9bA3vQd1#yzFu-tx{H2ziR#4_zg0Q$xiVtylyuneMy=!b?t) z?fsGTrwPu%le&C`lbP0qEZ$%2OO=_@OdRjauDfqY(!u`0$?Ey2i9YJ0pRnsuQd658 zk)ND{;@;tiY&Kc&BY^VeWm$GsMJ1eVW<6}^(`uojT6%7Z%P2)1iRYmKoMe{6Q7(mD?`x=d+68rLayJ|GnKvqei}RIg8;< z)2Z^){Eu;fjh~H>ttU7A&l2VzEH$JJ>8x~3cvdO&~!sXV+7oL z(zcIy-nd1Hs+(AFCmWKJs5kt+R86M0*0{G7Xu_AJyW2B&-up=V@_Wy0E+UVf>*xcE|{EdNpozyb(@m!y|QOLy$5o>rM0t|J_R3`dJ6Fs7rxXW(d#kDo4% z+h7q>#^LV-1MsNJGbnCGN5#!b{e6LMw5T_4VRyv}enn*4CfKob70EL3sBuV_*o#RE z=Orf7mtK15ld6m??r^r17-@oCatCD1M0(>h0yJ-~^PdW6p?}u@ePluEVGxRCk4$8! zz>tw)D+aZ18V1puL@;Z)(^>-6nw7H-(70zqRY0&Nx<7n#siqRlXr2g^CpYJwW67pG z>8&u2sT=%&_C*FfwK!8CnN(^~S{yI?L+4YtB{=d%DZU%0SFVxSnV9|@4JMNYu@?`n36e`t~8Ta=MZsLhSt!B>h;g$oM|a0|^E4>$deh1T7Xa$E8qhZC5?DT;1?0@+v5hk)LsQNVv9erv)dO!TiF zH+1baEBG=^2Z~pP0Zdy)M`zC(4pJ!d+kh~CPT^iL6I;sr4OY=!Qr-_g01kXB;Ug7! zkyujaH&g>!fs>)Y?nOVds2JObP&mi@W#&h|YGO@KBl`Y@h5qt#*T7IS5wm;5)Wpo8 zdsH+1eV%dL6|1!w6pPhvzhAxHy4sqbuL9St-fi4!G@DhV>wDF`6HW7nzf4pK8z)r^ zMA2k4%*x}J&^E{f_bY;1U-3VB+ z{C!ym3zfrZ(=}kpbQesZs({LRDq9bg;yIHjPT(0&jOu!=M%SkP6=k@C{l0quk~kVFQ^yZflhneflGYgsRIEgMot<7vGT^qWu9oA4ubB1@%z4= zg%B0Y)E0KYlx7GiN6>5v*0clJ+7UIgZRq?YbafAGD3G{8=#z1^0QotyGza0QeprLIoio%c;c&qSEI z=`?{Wy}i*cU-x(dulspfbrQ#VU_!8>KyV& z{wj8Pa7cbi#*|+i?Q@QSF$LJXbp?8Kl}GZ+Vp6GJ6djz)$mG|ow2YYHtKm1e-B7T? zs97L&iu5Ys39G_0ESczfrpgqA2{8Th+3fSG3>z!HmRemGy;>L>s+G44WO8eyp%^i} zVHwO2nK(-r6n~3b?F^6MbK7Qq#vBHJh(@vf0=9 z>v-K;Sa|(|Z@lux$3FJ@9HpAJC90dk zIzPfqao2PYoNC|#FJmh5GqIBKV==L15kk@dGV1&}1lzUG(;PFneXwlJ(9gTE3z4b$ z4!0D5WhF_J*_q*np~}?B+S(C{Wmp3p7fSWx0XiHH zmWdKpf-wA&Y|AVNL6lK_gyB`{-Qq#wr7rcpCWO>{;G~)A^Av``dWnaFdGF)ZP$_LY zR0}BemZ-NtJ>R#CV)S^{SEAmOW$G0V=~6PY@onjkxyM7}MpdPcB zV{ymE=p>9jRT93Sx;_{=7@F46M2=pEBc9sEuxz;Wn|&oNq%ApH!I-pXrivJ|X}T7z zUrJk6H}+{5nTHuP{fTQ<;?p<57O%VDpaQ`A*-QSl*$#hh%R5Y!S??)ba+=i#pj$ydSaeo(>7Dennm~utPY=SVQ zQVN9fjgD2_0MI}nTBs1f(v2x4zeQyyusxZ{p2s&$g&sbTp{kiiz#Tu(paT}NRI}`Y zA`_RX0-LW&G56a4r}Pa8CV1S2u-q03a=BW?_tn~DUudYZGFX!SMCbC9G1?~s+$k#A z>bjDh68#gHe*6U{TQAs(DD*nUfvv9FAjLy>x56~ruo&ham$HI;JvkSH znAT2ag4d)o(qp1-aZTG1orwLrLtRoCh)sO2`sG`I=*!z=e)YMV<() zTwST89r^*)upC%VL7j0cn>M0!-c=*NG_Q0rHZUp3{6pk3g;@MwHeH}mb($%K3it7X zoy)2b8rzmqWDXRGq1TK+w&j{jc)n0tK5GKAX1W{GbxoDAQ!M)+Q<lemji3Ud}6-q9U@#%{$gt44zk8U$tcR)gLfzVw9*yiJS6}jqJjv~iNzR2+_h zdd2vP58%*)(tw|M)_yoBWepW9hR6Lh)M9S{dpLn_{B3sNdW!370kqE%hbJ>r+*=x^ zW-_^`<$WW{D{i=2a1-Ja)wW*cVVjpztTd#2Vdldqnzbp(BGaimUQ$|ky;$PG`kHU5 zRpMFB%kPZ{d<|jU;4WELpEC7s3{qWE%nJ^ba)j>Z^!&}4H1L;VfLh#YsSLYt&UCqj zfq~c$QwL0_jKWbqBF|lmEj?vqH#xtOQn`DsF+>>od z2ckQ3?#%kqLQ~FWiD&RwnK0KalVhY*mzr*2I?=U-~G| z0h&BEK11Cny2+@+OM$9W4e%TeHI*P)0%b<=P(n4|RCuT&I6GhM_YZ^ll(Fk0BSpO_ zY{9mpTPA7nKg-V{w@!R9A;MMwm<=>+Iv!xYCcYR}r2ahN4D3qJN$-_DAYIrlKbiL4 zckY>UckX!o7hZbd>{;*mjn!3eHdiWnW++LIdXFCOh@Nt+hRFWp?e!+91CvA4AFJag zPpCJ>PY@jGCo35VC=?6;M`A|nxJDGu*hcapS8TyvD(iyEoGC1=`#No!PUu6kYdYH$ z8r@o;zIcNASiy)P2;?1pJ+LxlL9}vv4b?8(W_7< zxdoGIUPfq8X}BCC^K3p}C4OPRJn`S9|0?~mU`UmGQ6CiWM!~h?D(=Gw8Q~!ZpN9T2 z|BtNTpO{4dgcW?+B(2}D!{0HVC5k*EVJ z{KOr}Gz?Kg&hX4X+@eW-G7zduijd=&T^A7ZH@QpcneO#HEBJMxp}@cGB(=vKpA>V7 zm;YWDZQNSPU)p_bpPR_obep2~+HnY6cwlZ}0_UuCOKtkVYn!gJS};^C?k2r^F`w}V zQd+8TJ6PDJ9z3_Vm$9TcUd^md9?%iAx?&^;ML-piM92?QDx*X-t1h%Zk;RYNPhtvx zFrx`h5}ACdwcGbW+}WL0+Kx!c+z-i0mNH-w9wF+`z|MKo)yvL>j0603RxrV69!>hp z|8>khB(NIu0wGqUjRrDJPcsZpR#h+4Y)Xx+%cS^i_FP$#39QQ^#Kovx3q(=`kfH*^5=#vzer(%z`BFxt0 zl(AxY_h)VQ@VxE+rcg9UPN$G1byEL|YQ?z#!;TefTETfCeSIFF&8DlQHwWraBSltG zmFw|%q_%Aru$)c{PLR3!%*@){+R4Jp&}$AAJ13;&1t0Zjr0HmkXIPz0II#4wViw=L zkDjM8n}vjD^4O14a|~{iU`EdSSe5NP!+LQ3(>}^&6gyK!1oDI?R{X$%pRL!YS1e|r zj2kmYHffOoetj?AvsIq%s_651Th!+2^$b&I0$|T|HP?I-ro&w?1W}>r@SUN_bk6Td zdCC6SjN_Qmh~a2J!7_2!miou*7hlmKZB+x%4W{oY-7|JKtb;;HO<{-^u=9D#nOdXV z6x43quc_%OPAUg9x0U$ zudC^Q@ZjqYl+_21Ubvo4U%&9^gH=7hE~GHpu;x#{$zs+TJ69>Cu6j zpanRN7af$b7RQL$-cXG)krU`u#KTu)nYFNm`TMn)7Fs&tmMLsK%`cjP8Pr{Fsr(eN zm#{Z&Fr-+0Ceu*%E!lL->!;p2#<{ahzYCpT~K8GQ55`#2(H~4+L~3 zJMc;EuQv*J{Dh7)AubpB?*yyr$S;ldMl>5vQ^I`OHGrnc8NHfO;+zJFkx}@AXg%*i z2AQWsPAa9OTT~Xp88$Lm4p1t)Cgc_`rJKLbe;y|?8tJs9fw)pyuz)KX^+BwN1`dyL z@^9ufM8DSQET{dae-*~5HzMCawied%Y29*Es;i1#FS+f%*L)!4G4x9~(!Ihb9y~}8 z4u8%q+iy)-4pP_M%a+P6TI-$S*p_pElyg(U~iEwy~cliiXYAo zax*Wpr6t?Dd(rlPLkvxI`NNIHpP!i#-0u8ir?{IJqs138I-RkCIbjm#0Gc5~T#T3r z7xQD=+-LEu4D4uHdGpMf^6JJ$xwo=XZo6IAvdYu(Y#fHL3?KGjCkoP&D!~(=$nmE! z4f(NaIi{BwJMVujTlXwET~|7M-wC>^=_PR~1|yDx|a?53)1TK3~md){_GZy1k3 z>*agmzIbZHwQx0bi`3wD+oFNNVa5FDgxM!xX+?oYTHvpOq zO*n4_Z{?sxhBewhlYUoXlFN61XLGiudCS>ewpjEs(b}3vENkAIe}`1~;a2XLt-GIdFrn%jZ!8m4$bv01ADd}g*G!%<+rf!I8||yxhq$-UZr{!5`duI6>ATYpx0yOeacQ>``VGCG%=iz%gvq3G zH#$W=bO;#~aVb-RzY+N8|I$=oG$MIcCMj2O0!6l32G47e;`ruN?16kan#;iP7sDv$wS3NUQXFsql!d`p0;+1ad+X;3ul;{YOA_7<|G$N;3UkTAEmjOltz zTv-LgD7rrXhXXG&#m$2wH~hGK?xmn=sL+5qf*Kl-b$OQ0ZKu0JG0;qddPxNNZRt;? z-{xmHEnSlC^YeRgyHb`j5ANNQuRZ#xyu7uwzAlHJC+~N6y8XU9U%YT(N}f8!8yrt# zI-}$3A2A%gR@EZ5kWiVD`9oQrQfJq=o6Q?0ce91UZvvhrsf7MW7EDp58;^;y z0sQXfd#gEtVgKg{YnG;|3jDgE2iVRMCt-o{ts9R_)x0Sm8Kz!lI;E?PhLlVV{Y8@9 z5Aa{27XOBHf4e!g^XgM?yz%lYuk5_^{4>w&^j6{(P1`BVFU~J7?;M;xb7rU3EH~Tj z*LO~G_nhW-hneC;mw0q0Cm{UCq(x51Lkwr0lj>scC}n%NW)F`Beva_OC@Lx@Y&8|4aPaFWQy{H7G_UOzw3&Kkb4jr)e~2>K@-M7xSFd z;TK3r^ADQw!feY_u}Pd_CIl)#W{^UFrBdmDDV6`BVPd_qBUm&t39SM^iEin)65T6< zTl5yUHv;2$TjW$X*zV?PZ(&xIT!b#Ni(>)Vk!)tt?HLyFhvdOW5S9MPiIWw!i?e3^-av%gM^D+UjwP0v$Tkq@$N zU}$uUI5`lPvX&ahl_j}b48PiP5V~Jf>&(&Yb{HCKih*fC-O5(ih?`QH7l}>_#Mzmu z0ad|Pp=^VIrzdJM5B6Vpbc2$5-4!uGF;|eo7`0^136k$ z+*}HS)=C`{oKh`MOx2<(9%%oLLXr`Hyd75aei$eiWsRx>^0~+b0n2B>s)CsfG5dSi z1&X3-rfLxkBEzCcxMyl4G55EViLJqOt(#cW6yqW_Mm(2) zCH)(otu{r3orxM|sZ`a+l|51OTpF@#)rag_lclhPL3}{AlN^I3*_yhAZQAKHK7t*b z3u;{(w(`xbyf~}@AmHFk(7(^fJ zhWX|IyYolG9fJJaF7dehfcyDprNiyob?b?z>-%TAv$IyVQYjWKp0vvKx^?UFWy>{H zQv`6#&C^?pJHR zl0D;4xx$05>Jw$qHf;^<2Mi}X);5m?{xV^Io90<5&x)2iv0jw6_=GS;Of(5_*}lGoFyAwu9hu z_yjizA14ke7N-W%_Ay@NS0(F&yKMD`4O3H1X!@V96A>{CsIR)nBFN|qJd&4+uM_|Z z90L8o#?ZHUVx1HDr}g&#%VVH#N-2Spz>YJZBtMcX=uWVPo*MVPE|`$*@Ws9r{HUk{ z2}4q#g^iAhfMcE*&&x$&s|Z4F)K?;N+H&)P|&x}mdnaa{mdCf%}bfg zQTJ)0;dczaJ?cmePzMQ8a`2*iLkXAuxR;Q4qvLv1<9zz%r-)NAsXZ+NTdvEsic-$n z1XU3!)xSG`{v37Yb)@DJs*606O;@o39*L2EX}VWU_g-kMuXlScNG&%2x(dM6tLH9V z+BMyD%;Pcrq6Hlvww59fL@Na_(2M_*WTFX3MQL8TCEb&rl3tWP?RIY-jd4)g#uxen-nNeL|36X5oF*D8! zDKs9+$!z6zXtZenY$R(0#WI72%2Qdrh^c{y>N)MQtE+~hU_b~!ih?fe?X?v}F%@Sc z;`R;rjRxa+o!ZBr%lFd!pVIsp7dq4j@Ooh_rDWH63f{LE;z=l={F&O1VjlLvpV;5O zXPQ997+aSSr2r4+`3C6tZ}N=0&f}bAz7yBC8_(mV&TQkE@{`$v?RRg!`r3z|dzoIg%-NGJvT zUUa2>skF@&=Q5#%RcU#9yEa!lmWPZL*2FCy4vsAf7N_2k+RO2NYSMWdMb`;4QS$TG z1LPNh9SAIh92I2GD+gI21f!^t`I?{z^Fbl2M~E@Dn!*TO$G#l_cH8rTmwuLN^F<|W zr)>wp*LdztRMouY6+?t*(<(j3U;dnRzu+mYGohuXW8ZhZ;FJ!7 z`Ri6NFGotz$|;|vBqOlvx?{-J%F54M!H=gALqgv4$G{gWy_}f&YdVqcMo;eV3vWr2 zi13?|&vRV%Gpy=0s{;t_uzPlFI=vS~`k*v6rwr&>)JAkiRU^-kRgEW-LZ2pL@dd@I zr9H*vTME+60C+_gYjXNuZ24~JLd%QiIu6JzUfd!^?ZO^W6~mqFO!qeG1kmzSYrSqJ z8P>O?|Cr2XaYrXTBJFIKGO1F&Rj=E6bz^sT?cC?{aw=avcdnXGsoiNJZFdv4$59#e z!KkfvV#Hv~E1p=8WFaTJ5EDtoUr(dkcp-%a*}P`G>>I>%R5vYK5BTZ$=q1s~*HaK*ZAzN_2e>^rCtr~y$8!Xt1vUT5dzw1%zy#bl- z9}s6&P&so0dY2ka4;j@oIw!E>G02k$8Ph}Q6rUszQ1Yc9jZF6!smH_e?K2k>_mU|sL1wCV$MknaCD0JO%bAoBAoIQH3JwuT)zA?f6tW*@=kg& zk^M-a1Li+jIAdx3^lRe4WDzqIK#3g5AqGl*Rhf&?hh?57CbJ1MGb?8>EVcWgnwbaO z!C=UkKZ{g_xV=|g--Mpv40BC@c}A?-t?dFRuPWzL^C>}uxnx3z9V{&k&ym1|=Aw@?ojQR<8(D55ysj-kg|2SWaR0wDkq0m6cV4zj@xxvqO))ioYxa^s*;Q{JsYrUUQ zDFZ5h6YUpm561RObssp5Zi%U`XC*r4f>lH)`H8y3o^(+})@@fV7Tx^|7u-&xv9sew zl9Z5(xU(}etM2M)4dlrXa)dQ}SW4$;Q~N`J&Zu4kPaFl<7$U^x3oRM*o9`#$hUcl> z=3A5&qJ6Y*MFjzZi)4xa&Mh7y5^g>X$gQ|sl50>iZt`60n(17o@6GS}u1~(zY^c?jUVH5$uRr^0oNK=&fAg(B ze@nT3@2%?VujX>EzFvLn-gRh5PhDvnCmLJr2Ok&@m7bzHc@(pZ*LE;X;zuK?ATjqf zDm)K@?PR%y($lD@cAAXPG12H@kTVDklRzhmPV}pnJR?pkUVvrlDt@dvhJi4YKQM=_ zra^E(c?#4eb{-Kq)?`}byOkyOvMfhT3@;nDk&hHVr_uyt=Te!+5!3@7)U_P4G|B>G z&Ra!D3^^oWpa1#>Q_K7bwf`-B+vah6%cA@b>)LhyUt=5mQy!UrkSEyAn+8&`@!5G> zHw?{CiNoV5Qy1tn76t~7BYDih_tpr`XqsYA+a|vm*pe|fmmtS2fG%nqg$)0Y5)8QD z75W1n-FK4S#C5?dbXe)OXJ>a-(&-&XBLN`G%RA>bHZERl?2Jc+k7t_BsKV7>n(&`v zi#VLrdRX(lF|e0Q{l-9};n=9bur2qroHmU)IW(39b21O5d9HLA*~Oj>+S&PKx!3e; zjEv`y^)Aoz+4l0MoI@EB5JBS%^M6rBz6E?DU-Q$7VY!4ymloD->gAA*v`miqipou5 zn1L$Jd0E9kR+@RiW-hmebw+tWF6)r_>$~&5Qn_@P}Ny0l@TX@>4Tb|d!om0kLN6nh?#OnwKKM|ZBn|2$7CPU@pq!wI0UJGuFduy*= zn=fYOR{62Zx(m#?S`?umyC!l|orYS;Pq@Zzz;&dl#6Qk%W^AlF^*sc>L47ux+{1gvgMGXDpV8B@PS4k#{ z5-#i6ZJu1qnaa#eqmjv%%Nd+Xc^U6y?tg0K9ge8F6J4Rna#KCY=x3COii$Ze zG{CgRFSTuukHo0Oyvtq7{VYMo?ymvLcz$ND6AJHFzyh{Z{3v*m7-y~Eeax4E@pn2S zC0W6Jx+JYio6@dyUQEp9%4PHHc51uVGuM~*mbbP{)#_VoYYA!KlzCcH_4udJWaP0v z+(d3iltiBT@$CBRHybs^6HY@Qoxgquy~YN` z^C_j!cZiWm9#UHo6IU zz^rHxQfAxf4~#cdD~>9_9}^PI6E_A~}G^Ne&|6ru$Kiz2xp8pdg_%{NnQlpvWwInPg8dy>o+hSyN0qoEjQMfS{@#!v=C6S<^GEnMg~q(^?%li3u-k&dB2Y4( zbC<~r+{4dM=X}nzSGvskjHtG`f_A>ZA7G?%Yit6Q2+6v5y{INM*G`nx1|&T4W6qs(zqc0Q#6abWaOla3>P)9@)a2Rg=ZUKv@p43~T zCO2M)xx#J-Z+|;c&|o|s9^8|a?eux;CdN5_O>%qNmoDY1=~OBwU%h&mdzdwDd=--U z&tpzK8mA8LkS6<4G(hk!9arOleX$=rjU4V(VC5hiRNn8�RF!{kD-8kbi9FOiL3u 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 Db=O^{ literal 0 HcmV?d00001 From 0b04bd677ec3037a36538642139004a862826f9b Mon Sep 17 00:00:00 2001 From: PiPi-mk <563413940@qq.com> Date: Fri, 24 Jan 2025 21:00:28 +0800 Subject: [PATCH 2/3] Update nm.cpp --- src/student/nm.cpp | 48 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/src/student/nm.cpp b/src/student/nm.cpp index a029aee..67ed3f2 100644 --- a/src/student/nm.cpp +++ b/src/student/nm.cpp @@ -4,19 +4,39 @@ void FLE_nm(const FLEObject& obj) { - // TODO: 实现符号表显示工具 - // 1. 遍历所有符号 - // - 跳过未定义符号 (section为空的情况) - // - 使用16进制格式显示符号地址 + // 遍历符号表 + for (const auto& symbol : obj.symbols) { + // 跳过未定义符号 + if (symbol.section.empty()) { + continue; // 符号没有 section,表示是未定义符号 + } - // 2. 确定符号类型字符 - // - 处理弱符号: 代码段用'W',其他段用'V' - // - 根据段类型(.text/.data/.bss/.rodata)和符号类型(GLOBAL/LOCAL)确定显示字符 - // - 全局符号用大写字母,局部符号用小写字母 + // 确定符号类型和输出格式 + std::string type; + if (symbol.type == SymbolType::WEAK) { + type = (symbol.section == ".text") ? "W" : "V"; + } else if (symbol.type == SymbolType::GLOBAL) { + if (symbol.section == ".text") { + type = "T"; // 全局函数符号 + } else if (symbol.section == ".data") { + type = "D"; // 全局数据符号 + } else if (symbol.section == ".bss") { + type = "B"; // 全局未初始化数据符号 + } + } else if (symbol.type == SymbolType::LOCAL) { + if (symbol.section == ".text") { + type = "t"; // 局部函数符号 + } else if (symbol.section == ".data") { + type = "d"; // 局部数据符号 + } else if (symbol.section == ".bss") { + type = "b"; // 局部未初始化数据符号 + } + } - // 3. 按格式输出 - // - [地址] [类型] [符号名] - // - 地址使用16位十六进制,左侧补0 - - throw std::runtime_error("Not implemented"); -} \ No newline at end of file + // 输出符号信息 + // 确保地址是16位十六进制,左侧补零 + std::cout << std::setw(16) << std::setfill('0') << std::hex << symbol.offset << " " + << type << " " + << symbol.name << std::endl; + } +} From 74f9fe6c1f42980a18981cb61ca966308c05e541 Mon Sep 17 00:00:00 2001 From: PiPi-mk <563413940@qq.com> Date: Fri, 24 Jan 2025 21:00:55 +0800 Subject: [PATCH 3/3] Update ld.cpp --- src/student/ld.cpp | 169 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 145 insertions(+), 24 deletions(-) diff --git a/src/student/ld.cpp b/src/student/ld.cpp index 508a666..3f46ad0 100644 --- a/src/student/ld.cpp +++ b/src/student/ld.cpp @@ -1,30 +1,151 @@ -#include "fle.hpp" #include #include #include +#include #include #include +#include "fle.hpp" +#include "string_utils.hpp" + +FLEObject FLE_ld(const std::vector& input_objects) { + // 1. 合并段并收集符号 + // - 遍历每个输入对象的段 + // - 按段名合并并计算各段的偏移量 + // - 设置段的读/写/执行属性 + auto local_symbol_sets = std::vector>(); // 存储每个目标文件的局部符号 + for (const auto& obj : input_objects) { + local_symbol_sets.push_back(std::set()); + for (const auto& symbol : obj.symbols) { + if (symbol.type == SymbolType::LOCAL) + local_symbol_sets.back().insert(symbol.name); + } + } + + // 创建目标 FLEObject + auto linked_object = FLEObject(); + auto global_symbols = std::map(); + auto segment_names = std::vector{".text", ".rodata", ".data", ".bss"}; + auto segment_flags = std::vector{5, 4, 6, 6}; // 设置段的权限标志 + auto segment_vaddr = std::vector(4, 0); // 各段的虚拟地址 + size_t virtual_address = 0x400000; // 初始化虚拟内存基址 + + // 所有段并合并 + for (int i = 0; i < 4; i++) { + auto current_segment_name = segment_names[i]; + FLESection current_merged_section; + current_merged_section.has_symbols = false; + size_t section_offset = 0; // 当前段内的偏移量 + segment_vaddr[i] = virtual_address; + + // 遍历每个输入文件 + for (size_t j = 0; j < input_objects.size(); j++) { + auto current_object = input_objects[j]; + for (const auto& section_with_name : current_object.sections) { + auto current_subsection_name = section_with_name.first; + if (!starts_with(current_subsection_name, current_segment_name)) // 处理类似 .rodata.str1.1 的情况 + continue; + + auto current_section = section_with_name.second; + size_t section_size = 0; + + // 获取当前段的大小 + for (const auto& section_header : current_object.shdrs) { + if (section_header.name == current_subsection_name) { + section_size = section_header.size; + break; + } + } + + // 将当前段的数据复制到合并段 + current_merged_section.data.insert(current_merged_section.data.end(), current_section.data.begin(), current_section.data.end()); + + // 合并符号表 + for (auto symbol : current_object.symbols) { + if (symbol.section != current_subsection_name) + continue; + if (symbol.type == SymbolType::LOCAL) // 对本地符号进行重命名 + symbol.name = symbol.name + "@" + current_object.name; + symbol.offset += virtual_address; + + auto existing_symbol = global_symbols.find(symbol.name); + if (existing_symbol == global_symbols.end() || + (existing_symbol->second.type == SymbolType::UNDEFINED && (symbol.type == SymbolType::GLOBAL || symbol.type == SymbolType::WEAK)) || + (existing_symbol->second.type == SymbolType::WEAK && symbol.type == SymbolType::GLOBAL)) { + global_symbols[symbol.name] = symbol; + } + + if (existing_symbol != global_symbols.end() && + existing_symbol->second.type == SymbolType::GLOBAL && + symbol.type == SymbolType::GLOBAL) { + throw std::runtime_error("Multiple definitions of strong symbol: " + symbol.name); + } + current_merged_section.has_symbols = true; + } + + // 合并重定位项 + for (auto reloc : current_section.relocs) { + reloc.offset += section_offset; + if (local_symbol_sets[j].count(reloc.symbol) == 1) // 对本地符号重命名 + reloc.symbol = reloc.symbol + "@" + current_object.name; + current_merged_section.relocs.push_back(reloc); + } + + // 更新当前段偏移量和虚拟地址 + section_offset += section_size; + virtual_address += section_size; + } + } + + // 更新最终的可执行文件中的段 + linked_object.sections[current_segment_name] = current_merged_section; + ProgramHeader header; + header.name = current_segment_name; + header.vaddr = segment_vaddr[i]; + header.size = section_offset; + header.flags = segment_flags[i]; + linked_object.phdrs.push_back(header); + + // 对齐虚拟地址 + virtual_address = (virtual_address + 0xfff) & ~0xfff; + } + + // 3. 处理重定位 + for (int i = 0; i < 4; i++) { + auto section_name = segment_names[i]; + auto& section = linked_object.sections[section_name]; + for (const auto& reloc : section.relocs) { + if (global_symbols.count(reloc.symbol) == 0) { + auto symbol_name = reloc.symbol; + symbol_name = symbol_name.substr(0, symbol_name.find('@')); // 重命名回本地符号 + throw std::runtime_error("Undefined symbol: " + symbol_name); + } + + auto symbol = global_symbols.at(reloc.symbol); + assert(symbol.type != SymbolType::UNDEFINED); + int size = reloc.type == RelocationType::R_X86_64_64 ? 8 : 4; + + symbol.offset -= reloc.type == RelocationType::R_X86_64_PC32 ? segment_vaddr[i] + reloc.offset : 0; + symbol.offset += reloc.addend; + + // 写入重定位值(按小端序存储) + for (int j = 0; j < size; j++) { + section.data[reloc.offset + j] = symbol.offset & 0xff; + symbol.offset >>= 8; + } + } + + // 清空当前段的重定位项 + section.relocs.clear(); + } + + // 4. 设置程序入口点并返回可执行文件 + linked_object.type = ".exe"; + for (const auto& symbol : global_symbols) { + if (symbol.second.name == "_start") { + linked_object.entry = symbol.second.offset; + break; + } + } -FLEObject FLE_ld(const std::vector& objects) -{ - // TODO: 实现链接器 - // 1. 收集和合并段 - // - 遍历所有输入对象的段 - // - 按段名分组并计算偏移量 - // - 设置段的属性(读/写/执行) - - // 2. 处理符号 - // - 收集所有全局符号和局部符号 - // - 处理符号冲突(强符号/弱符号) - - // 3. 重定位 - // - 遍历所有重定位项 - // - 计算并填充重定位值 - // - 注意不同重定位类型的处理 - - // 4. 生成可执行文件 - // - 设置程序入口点(_start) - // - 确保所有必要的段都已正确设置 - - throw std::runtime_error("Not implemented"); -} \ No newline at end of file + return linked_object; +}