ࡱ> @=#&3}-hfƴ(@@J(!Զ* (Q_CZlL4X TcDz̽ӽtgΙsf^QƠZUbG8 V0X? Gaཕ]6mh?hLf0,/㭰F ] Z^;҆\I7rT<9T٭ʬfWBLe(Q>_! ' A(eѲLCV29~`P[:5]w_k'J *><%vUF"gƓhBG>pϧ걥"qx=T@)0z(;V#G{P_6&SԘ͏HQx~ۦyc;9{t̏51<3>Cч0 }TGGEd}s4~|;tfH9:W&jLȱ]:E9*uVɵ'?xZZK\>kiRv Yǔ]ZCPذϓچ-8MHWIώcAupߘAPn6`H>$c>75j8ZH~!1^ o"_{DE~Kg|/|I ,~Hg!!rĿ85x+Gx8I:Eo@BB! B CQqd1>Gw*:eb{ه-=B?To?vD̠L|f!a<a8"~;3|EgNzx~Ps8"~;3˝8˝C1Sc3WV+Cء)EUqDP=F zVR 9]fvoPH7T^ G{fg4Z=TSfٞ=z> 2r3v]pa/?}(\*S՟8w^u]7W]jnT=ޫT}Tj7sͶO ?l6D;E|~l5:~q}/Kxxga^C;ԾDKi?m3?Nu6nqx2ˏ/3k)֦x']x55l)J8KY,TU<_G0j[bkɷRSa<ld%NS~<Bɻ*wa9 xC5x׈>|.߃WaV^ob&oo ?[;e}Qy(!;üW $[ g2e%z,fPK=ȭ#iߒ{4Was:ɛoy_دu'-دf̍r_6cϖ%E ȅȶHء=O+K)nOG"s'b÷G'M>[HzRh~IXH꽳[ yUﱸn38y\י}_ZA4?4=gJY[OYI|J}H,hοɇR"nLVZ~ #Sp)3NW}pb'yޔզ{;śonwUU]BJoo'S o48M!@=? gC&]j WSxZ}lEmʕ-PhE AA"D imZ>lHhB-(!Fj1 $ZLJ 5!7;s7;X(3v{ofB6& BJrt1!֢Prs!?SB҈vxd_MAXIG`Y]GI޻P.\lLA7xL<8d.f䵦H~q0*3I܅<_NB-f$LH=+ʃ$[Ƌ2vY> wZh<=U_{' qd5q},OS“맗pՀ99>U W Ū "B帟P2vPTCGjW['cd͏c\ bs4gT&7ir[ۚ_ll䭚<#ߪ`*{ԣ j}p£TGBg@\9B:e}?R::K2..XX._;uH=&%RtG޻7C)iʒ͑3P;sd#\iX#Z*|>mǢrQn\ &",6@|3 Ui'X9G~ӌ(Ub~M?H%+ß9$Pۀbm~Ü3bwg ,v!o3_E1NpJ_ƍ#CԏWZɘm3AإN;\X;Acc0E=V)39*}cc&Oᯥtj9r}cco)ARw8W)]®@a+>ݱ1?*l;3u73<qw`TaŨ9,Q7JC{oy+1~W*:2[NFkhrd YO*no}sXW7? B{|d}fsʼn0oC2^K:qfsabH8P)epO%kP[ln7 /&]r<\nVZIۚokjVM!C +COK&Or#&XW博QhM^feZ5yw  !gNw1'&[r p9L)kKXGxoeU·{SnN)cI8k‹E>okRf$f׋@/H-'d(yInqov$"Q__S?ұ~h%Q)bWʂ _7z"}lo=+e r*Rwb>KRJҮjhzhY2J]CwCwW@_ϕx6)1~{]%Ѝsfhq-ncۓe; 56Km0x*~'-L[ڈz٨;M=4~6|g1_1R2S܇4f[S?|gWF2M5l%ko=d{se-Ps~G>~Խ"}HSFxEZ=_YjlIY2zguX9U/f(snIp)A_[:rl1o =j1bMҽT-}(v;G 9巖, S~5N! )`!.wax|Kzb̀i Ixcdd``~0XHs3D@,&FFrN,#pv ;C(12020edD* )+C ppQf0Kp|Ul0f.Kk AKj?_*#tYdYBGD /Y+/CLM$Bd !kї{v [ w {(/P^x+c }5At/@=da"? ]j WxY]hTG>3{YG& jjC- X 1Z5٘%ji XD)%-h RĪ}h_A+T -%=g?prg;̜93s@JQ@C pav}=qY(n'&ѯ}FA% ~˥(|Igg,(tsBbȡN .KԢ*C1 ALU(/͍xc|4,Pwg,C,LeJʼ^mgugtn/TΑv:V>1 38QUFLgƓޡBi@1gs7e'ca; Krf^0O'T4I[hl9e|8c%C1x[n >x7mlڔX%uc'ɷ<)WѦM|rt*.~,T(u\,5jUPK\JKRz6r껤",S~ŗ>W yDQ7&lPQ10Zɱyۍ[el ΁G[GX)#Bzrگs5_H. 9H?·ِ2cy_`|$6$'rϧ߁QwWwz?|g4&2\'T{]ƶ_>p%(|*Sg?c?.8Ewu~Sn-Gو+*G|9f7 ~V@6QVN" ql3x:%nS{:xk - [7  | HNR$_u_qi?mE<wx?0o05 maWX _ѯV؍>u_* _Yއ:Ea }yMYĿ'VX^ݴ7ۏ;ƿ >.e>zHӯ|m}yZK֭0?Qc1z,is9=),Sf{bMΟL~[JyÇ}åq~|𲿀j{p+ߺh_sϻUŜs~vPlṕX~X8.:+bU fW^Nug/we;zŽS /nw[vc~/AܙUaKΝrMe窐miNksS'=({E*rFY<&rGy}hO6ѪUil73oa'/,]E\wR~.gL8k@=q܌4Bmi (]j WxZklE>3-mBiXb411*54l i,J)(!VD)UALQb$U1c5;;{w t893sri}?K y:| i'Mv9tE?a q3:!2䭆ՐW*C^bK iþF{ y!o6͆coVooQS闲oRgƥ֚%ռ[0qV)H=ޖ}_ ]$ [{.L'9k"UJKc1a?xy)T? wbsۆhYkpx@[ ~1)Ȼ ѯfX o=+xoc&w#g/w^v@zc'/?ݴYiAJ-9;.gy;]㯷:X:"Qqd1/,#TL}ʶ.~N|..c }|X 8At~Pu2{ccbf'jl' ;30|2bcbfk>,~@`_ ~P `ۥ /~L?ۭ~,.5ke[Ak%Hqu{g2MGܽ-t8"7}vh:q.KnsbQLw&'}p?[f6TGEe_m+[(ۮ.56YKYuQG54dn/L8l. 5f!x/2\?-7bl[ y!2UĐӆo6c{ y!o6I~.=ùEkt,{0s_Ne]!Аrʺ|!n|/6Đ NY9acW1&[&/"Np>6!yՈu6?<~ڳ$?7 :'!H["g?)k ?_OϏȟp?[ߐ??"\h _ o?'Hs"(G-̃;_Vf~ V)NKC d9ae= ׫da~w%oƿ|yo+Y^H`c4a>PH$tWt{kb[h r"|n%ɢf/f9v0Bj.c.% kc_ZlADž~7IGẕ,&X'|h]JK6YgW>% &Sqyk_T3l /:yC<\4Kj'uwySZjyGO{q կfϭ.m9~v3ʈk ,k1zԵڢ|SVwU{3"F[x4sbW w5~jW,p9|d#9_qmgȑβޔզcX7i{J^Lro'?U$o kY@=*ϘPJ3{ *? B\BQ)@7l#D 5BBFML$QxO&c}!$51D L9sgvgOljos39sfΝW:-@/Q` ;8y(HT`DZ\"k-Է%.lqZo-7 ){-Rq9ֿ%ŜȖ e.iO_ِg.A.OG4d(qcAmgs>[w_Xns]Øtȉh}0<-9O8FBs+9Ս-eX4O*,h"䋰Ď?eƤ[B67t,}T'c8## O3<] fx) w'8\:X]ꊇ'ɷ+h99:8LN*_:[Z/&MMN1:S~N'_A.Š>x9]_S>%3Ek eAiGG$2eI}RdNʤ -D?oX仡ĕ%;jo`7 I\٨0D!%TRH?s#9Y̍$)'1ZY@SOBR%[{ADru#{G$l1ώ_du]pvA?em_H/6N߽k(K? vc.pڇʇO2Q}ӭ\q[Ά'*kryXx:Vl>tmNd+^oC]3AM冸&h̐"yl;?m|To;=fx) w>(/ O3<?O2(_T`3:_8m/0S0-13 }R0ʐy8l]{xוP71^E ui^#{Jy_6l)rwv< +zW&z C3:TziYb^]ҼqGq&`"~u_m5ufZ"@EO%ޏz^Kw>cCM{esMkzuU*5ߏ VσjXwBzƸo|mWc4x(!ةμ\|67s~`!iqOռ5oAg,K9svv3 ɞk&|hGΓT 'n@{5턿vq#x .3.Ob=w.WioMĈop"Ux8m.թ!};ǟ;/r'؝;hoĽ /7_zk3L}RZKlVfX;;$wasa\XߧZX0y2<u|{ +M!,0鳭-ڪM%W6Qk=Microsoft Office Excel-DiagrammDiagramm Excel.Chart.80>Microsoft Office Excel-DiagrammD Diagramm Excel.Chart.80>Microsoft Office Excel-Diagrammb Diagramm Excel.Chart.80>Microsoft Office Excel-Diagramm`Diagramm Excel.Chart.80>Microsoft Office Excel-Diagramm/ 0DArialNew RomanttP, 0"DStarSymbolomanttP, 0, DLuxi SansomanttP, 00DWingdingsomanttP, 0@DCourier NewmanttP, 01PDSymbol NewmanttP, 0`DTimes New RomanttP, 0@ . @n?" dd@  @@``  | h ,L/ 7  H H>  * & #  \   /6/  ( D5- 7+ p=@A .'lZno xy ~ * q  C "$#&embedded systems  cost and energy consumption depend on the size of the built-in memory limited amount of memory more and more functionality is packed on embedded systems memory must be used more efficiently procedural abstraction reduces code size by extracting duplicate code segmentsF;%QFDD:%DR  procedural abstraction  post link-time optimization of static binaries: whole program code, including all libraries function prolog and epilog constant address calculations precise control flow must be reconstructed offset tables register indirect jumpsR1g+Q-1  $procedural abstraction (suffix tree) % textual matching of instruction sequences frequent instruction sequences are taken from the suffix tree various optimizations: special treatment for labels, jumps, & fingerprinting canonic register mapping & but fundamental suffix tree matching problem persists hR707D  nduplicate search (suffix tree) @... 2000: add r2, r1, 0x42 2004: sub r2, r2, r3 2008: add r4, r2, 0x4 200c: load r3, 0x10710 2010: sub r2, r2, r3 2014: load r3, 0x1071c 2018: add r4, r2, 0x4 ... 2504: mul r2, r1, 0x5 2508: sub r2, r2, r3 250c: add r4, r2, 0x4 2510: load r3, 0x10710 2514: sub r2, r2, r3 2518: load r3, 0x1071c 251c: add r4, r2, 0x4 ...AA@ ?... 3118: div r3, r2, r1 311c: sub r2, r2, r3 3120: add r4, r2, 0x4 3124: load r3, 0x10710 3128: sub r2, r2, r3 312c: load r3, 0x1071c 3130: add r4, r2, 0x4 ... 400c: sub r3, r2, 0x42 4010: sub r2, r2, r3 4014: load r3, 0x10710 4018: add r4, r2, 0x4 401c: sub r2, r2, r3 4020: add r4, r2, 0x4 4024: load r3, 0x1071c ...$@?? oextraction (suffix tree) "... 2000: add r2, r1, 0x42 2004: call 0x5070 ... 2504: mul r2, r1, 0x5 2508: call 0x5070 ... 3118: div r3, r2, r1 311c: call 0x5070 ... 400c: sub r3, r2, 0x42 4010: sub r2, r2, r3 4014: load r3, 0x10710 4018: add r4, r2, 0x4 401c: sub r2, r2, r3 4020: add r4, r2, 0x4 4024: load r3, 0x1071c##" ... 5070: sub r2, r2, r3 5074: load r3, 0x10710 5078: add r4, r2, 0x4 507c: sub r2, r2, r3 5080: add r4, r2, 0x4 5084: load r3, 0x1071c 5088: return'candidates selection (iterative greedy)(( (  $saved instructions (absolute values)$ $saved instructions (relative values)$ $procedural abstraction (graph-based) % ptransform instruction sequences into minimal data flow graphs (DFG) search for frequent subgraphs in DFGs  q duplicate search (graph-based) @... 2000: add r2, r1, 0x42 2004: sub r2, r2, r3 2008: add r4, r2, 0x4 200c: load r3, 0x10710 2010: sub r2, r2, r3 2014: load r3, 0x1071c 2018: add r4, r2, 0x4 ... 2504: mul r2, r1, 0x5 2508: sub r2, r2, r3 250c: add r4, r2, 0x4 2510: load r3, 0x10710 2514: sub r2, r2, r3 2518: load r3, 0x1071c 251c: add r4, r2, 0x4 ...AA@ ?... 3118: div r3, r2, r1 311c: sub r2, r2, r3 3120: add r4, r2, 0x4 3124: load r3, 0x10710 3128: sub r2, r2, r3 312c: load r3, 0x1071c 3130: add r4, r2, 0x4 ... 400c: sub r3, r2, 0x42 4010: sub r2, r2, r3 4014: load r3, 0x10710 4018: add r4, r2, 0x4 401c: sub r2, r2, r3 4020: add r4, r2, 0x4 4024: load r3, 0x1071c ...@@? extraction (graph-based) ... 2000: add r2, r1, 0x42 2004: call 0x5070 ... 2504: mul r2, r1, 0x5 2508: call 0x5070 ... 3118: div r3, r2, r1 311c: call 0x5070 ... 400c: sub r3, r2, 0x42 4010: call 0x5070 ...  ... 5070: sub r2, r2, r3 5074: load r3, 0x10710 5078: add r4, r2, 0x4 507c: sub r2, r2, r3 5080: add r4, r2, 0x4 5084: load r3, 0x1071c 5088: returnsearch lattice  /graph miner (procedural abstraction extensions) 0 pruning necessary because of the size of the search lattice number of occurrences must decrease with growing subgraph size calculate the maximal-independent set (MIS) of subgraphs to make pruning possible again  /graph miner (procedural abstraction extensions) 0 3invalid subgraph pruning during candidate selection 4 candidates selection (optimal)   $procedural abstraction (graph-based)$ Pro no special treatment of branches and labels resistant to instruction reordering can be used to extract general code fragments, not limited to basic blocks or single-entry single-exit regions*   rCon subgraph-isomorphism test is NP-complete extremely huge search lattice (exponential in time and memory usage)*oo s $saved instructions (absolute values)$ $saved instructions (relative values)$ optimization time (sec.)   future work  increase number of identified duplicate candidates extend search areas from basic blocks to function and whole program canonic register mapping speedup duplicate search further parallelize graph search more procedural abstraction specific pruning rules to limit search latticeL3]l3]l  summary  qprocedural abstraction with DFGs result in more compact code: graph-based mining saves up to 2.6 times more instructions than the traditional approaches interesting for embedded systems (huge volumes) long optimization times affordable because of price per piece overnight or over the weekend optimization of code during the development process every saved bit countsL>\0>\0 r $Graph-Based Procedural Abstraction %%  % I A. Dreweke, M. Wrlein, D. Schell, T. Meinl, I. Fischer, M. Philippsen$J >/0!$&'()*+,-.02345g   0` 33` Sf3f` 33g` f` www3PP` ZXdbmo` \ғ3y`Ӣ` 3f3ff` 3f3FKf` hk]wwwfܹ` ff>>\`Y{ff` R>&- {p_/̴>?" dd@|?" dd@  " @ ` n?" dd@   @@``PT    @ ` `$p>>   (   `"  s *GAAA"q`"  s *G+D3"  6  "I  ^*Titelmasterformat durch Klicken bearbeiten+ +0  0İ "<<<  ^Textmasterformate durch Klicken bearbeiten Zweite Ebene Dritte Ebene Vierte Ebene Fnfte Ebene+     _"  Hȹ@@GD3"  Alexander Dreweke, Computer Science Department 2  Programming Systems Group, University of Erlangen-Nuremberg, Germany *J|%-`3 " ,  z |  rb  C ,AInf2-Logo"=ZaH  0޽h ? 33___PPT10i.'U+D='  = @B + 42007-02-07_uebersetzerbau3  0 0u(  `"  s *GAAA"q`"   s *G+D3"  6t<( " ( ^*Titelmasterformat durch Klicken bearbeiten+ +  0 "` 6  ( p<Formatvorlage des Untertitelmasters durch Klicken bearbeiten= ="   Hx?(@@GD3" `&%-`    r%   0I("  qProgramming Systems Group, Computer Science Department 2 University of Erlangen-Nuremberg, Germany www2.cs.fau.derr r b  C ,AInf2-Logo"=ZaH  0޽h ? 33___PPT10i.' 9D+D='  = @B +4 0 `@D(  @  @ NtTWTW     v* ***>>SS @ NTWTW  O  x* ***>>SSd @ c $ ?AT @ @ NLTWTW no  ^Textmasterformate durch Klicken bearbeiten Zweite Ebene Dritte Ebene Vierte Ebene Fnfte Ebene+     _ @ TXTWTW     v* ***>>SS @ TTWTW  O  x* ***>>SSH @ 0ܖ6g ? 3380___PPT10. # P8(    0D     >*   0  O  @*   6     >*   6|  O  @* H  0ܖ6g ? 3380___PPT10. 1- 0  (:(  (r ( S O(  (  ( S Z(1 _  ( "@08XH ( 0޽h ? 33___PPT10i.e1+D='  = @B +} ( 0 4$(  4r 4 S ( I  ( r 4 S  <<< ( H 4 0޽h ? 33___PPT10i.XWte+D='  = @B + ) 0 %Y4  (  r  S  I    I S h <T <  &xq z {L ]V   #  9@ 7 s  ]V ZB  s *D17 ZB  s *D1s ZB  s *D17 7 ZB  s *D1s  s ZB  s *D17 s  ZB  s *D17  ZB  s *D1 s    0D(] *  Nbinary(2  4L f[R  ?#  j -a T 7 s  "# f[R ZB # s *D17 ZB $ s *D1s ZB % s *D17 7 ZB & s *D1s  s ZB ' s *D17 s  ZB ( s *D17  ZB ) s *D1 s   * 60(fJ  Xoptimized binary(2  ^B 7 6DDp  nnZ L  W  C#  L  9 H` (1"`C W  S postprocessor(2   : H1"`/ C  P extraction (2    ; H$(1"` / Ycandidate selection(2   < H (1"`  Vduplicate search(2   = Hl(1"`  R preprocessor (2   L r F#  6 fB @B 6DDp ZB A s *DDprZB BB s *DDp^B G 6DDp nn@ O H(1 "`^r ,$@ 0 Vduplicate search(2   W H!(1 "`y  ,$D 0 Ycandidate selection(2  H  0޽h ? 33___PPT10.OWI+^D'  = @B D' = @BA?%,( < +O%,( < +D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*O%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*W%(+p+0+O0 ++0+W0 + * 0  86(  8x 8 c $( I  ( ~ 8 s *̜( <<< ( H 8 0޽h ? 33___PPT10i.XWte+D='  = @B +  0   P,< (    6uԔ"`h 3,$D 0   s *"` ,$@ 0r  S ` }  I  }    s *"`,$@ 0  s *"`[ A,$@ 0L  W  # LHb   H(1"`C W  U postprocessor(2     HT(1"`/ C  R extraction (2       H(1"` / [candidate selection(2    ! H} 1"`  Zduplicate search(2    " HH} 1"`  T preprocessor (2    l w  ,w ,$D 0HT >  &# Zw  n2 ' 0D"`> n2 (B 0D"`> HT >  )# Z n2 * 0D"`> n2 +B 0D"`> x  c $$}  <T < }  x  c $}  < << }  H  0޽h ? 33v n ___PPT10N .TUc+ D" '  = @B D ' = @BA?%,( < +O%,( < +D' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*,%(+   0   p*^ (  x  c $)}  I  }     0+}  '2  B  `  s *"`6e l  6uԔ"`3 `  s *"`q6`  s *"`6`  s *"` ~  s *?}  <T < }  r  S  < <<  F w   w  HT >  # Zw  n2   0D"`> n2 !B 0D"`> HT >  "# Z n2 # 0D"`> n2 $B 0D"`> L  W  %# LHb  & H?} 1"`C W  U postprocessor(2    ' HD} 1"`/ C  T extraction (2     ( HH} 1"` / [candidate selection(2    ) H\C} 1"`  Xduplicate search(2    * HO} 1"`  T preprocessor (2    H  0޽h ? 33___PPT10i.TUc+D='  = @B +d 5 0 DD` l$~D(  $x $ c $j}  I  }  L  W  3$# LHb  4$ H\l} 1"`C W  U postprocessor(2    5$ Hp} 1"`/ C  R extraction (2     6$ HTu} 1"` / ]candidate selection(2    7$ Hly} 1"`  Xduplicate search(2    8$ Hpw} 1"`  T preprocessor (2    F T Z$ T [$ 0|} T J=21&0N i  \$ i  ]$ <T} u"`iV 940 ^$ B|} "`i 930 _$ B} "`iV 930 `$ <} u"`i 940 a$ <8} u"`i4   940 b$ B̗} "`i4  930t c$ 6D8c"`it d$ 6D8c"`i z  : .  e$  : . ,$D 0 f$ B`} "`:  Z3 instructions0  `B g$B 0D8c BB`B h$B 0D8c B`B i$B 0D8c B. z  :   j$  :  ,$D 0 k$ <|} u"`. :  r4 instructions$0   `B l$B 0Du8c   `B m$ 0Du8c  `B n$ 0Du8c  z  V: 4  o$ V : 4 ,$D 0t p$ 6D8c"`: T q$ 6|} "`: T V7 instructions(2  `B r$ 0DD8c V`B s$B 0DD8c 4 z    t$ " n,$D 0 u$ 0}    extraction benefit: (L (N  1)  (N + 1) > 0 L: code length N: # of occurrencesS 2@D@Df @Df@`@Fff S  v$ 0D} J z  Ncall(2   w$ 0}    Mret(2  `B x$ 0D8cV ' `B y$ 0D8c ) l  ^ $" n,$D 0 {$ 6$}  ^ extraction benefit: (7 (2  1)  (2 + 1) = 4 > 0 L: code length N: # of occurrencesW 2@DD@Df @Df@` @FfDf W  |$ 6x}  '  Ncall(2   }$ 6}    Mret(2  fB ~$ 6D8c{ A fB $ 6D8cE~   z   $  ,$D  0 $ 0} B J=17&0 N  C  $  C UN  Wi  $ C;  $ B} "` W0 930 $ <} u"` Wf  940 $ <@} u"` 2 W  940 $ B} "` W2  930t $ 6D8c"` Wi N  0W $  0Wt $ 6D8c"` 0W $ Hh} "` 0W Rcall(2 D  N  u W  $  f W t $ 6D8c"` u W  $ H} "` u W  Rcall(2 D   $ H} "` Wi  Qret(2 D  TB $ c $D TB $ c $D TB $ c $D pTB $ c $D 8TB $ c $D  z  ^ $ " n,$D  0 $ 0  ^ extraction benefit: (4 (2  1)  (2 + 1) = 1 > 0 L: code length N: # of occurrencesW 2@Du@Df @Df@` @Ffuf W  $ 0   '  Ncall(2   $ 0T    Mret(2  `B $ 0D8c{ A `B $ 0D8cE~  az   $  ,$D 0 $ 0 1   J=16&0N - ed $  4 TB $ c $D. TB $ c $D. 55TB $ c $D. TB $ c $D-  h TB $ c $D.   $ B "`e/ 930 $ <d u"` e  940 $ B  "` e  930t $ 6D8c"` e T  0W $# /et $ 6D8c"` 0W $ H($ "` 0W Rcall(2 D  T  u W  $# 3 e t $ 6D8c"` u W  $ Hd( "` u W  Rcall(2 D   $ H\, "` e  Qret(2 D  T M $# e#  $ H0 u"`M Rcall(2 u  t $ 6uu8c"`MT M $#  c  $ H. u"`M Rcall(2 u  t $ 6uu8c"`MTB $ c $D0  dT M $#  cF $ H8 u"`M Qret(2 u  t $ 6uu8c"`Mz  ^ $ " n,$D 0 $ 0<  ^ extraction benefit: (3 (2  1)  (2 + 1) = 0 L: code length N: # of occurrencesS 2@D@Df @Df@`@Fff S  $ 0J  '  Ncall(2   $ 0N    Mret(2  `B $ 0D8c{ A `B $ 0D8cE~  H $ 0޽h ? 33___PPT10.8J8+5D^'  = @B D' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*e$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*j$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*o$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*t$%(D' =%(Df' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*t$%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D' =%(Dz' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*j$%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*o$%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*e$%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D' =%(Df' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*$%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D' =%(Df' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*$%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(+ 0 0  *(  x  c $0^  I     0  `A ? ? {     0`  5really small input binaries: gcc -Os, dietlibc linked46(2 6   0f {m ] MiBench programs on ARM  2  H  0޽h ? 33___PPT10i.:J+D='  = @B + 3 0  N(  x  c $hm  I     0  `A `? ? { `    0o  5really small input binaries: gcc -Os, dietlibc linked46(2 6   0$v {m ] MiBench programs on ARM  2    <y "` w,$D 0 n good savings, still not optimal! ! H  0޽h ? 33___PPT10.:J+|3DO'  = @B D ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(+8+0+0 + + 0   %)<(  <x < c $  I     < S   <T <<$ 0   D8  <<  )<<[   < 0$   << _sub r2, r2, r3 add r4, r2, 0x4 load r3, 0x10710 sub r2, r2, r3 load r3, 0x1071c add r4, r2, 0x4``_sN  >j  < \  N  d   <  tB  < 61"` d   < BH "` Y  Kadd 2  N ? k|   < M y tB < 61"`? k|  < Bԑ "`C kq  Lsub  2  N  d  <  >tB < 61"` d  < B\ "` Y  Lload 2  N ? k|  < MyqtB < 61"`? k|  < B "`C kq  Lsub  2  N  d  <  tB < 61"` d  < B  "` Y  Kadd 2  N  d  <  >tB < 61"` d  < B\ "` Y  Lload 2  N  d  <  jtB < 61"` d  < B "` Y  Kadd 2  N  d  < >gtB  < 61"` d  !< B  "` Y  Lload 2  `B "< 0D1i| 1 `B #< 0D1ml5`B $< 0D1m`B %<B 0D1 m `B &<B 0D1m5`B '<B 0D1oi`B (< 0Dup H < 0޽h ? 33D<___PPT10.XWte+t<D'  = @B Ds' = @BA?%,( < +O%,( < +Da' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<D%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<Hn%(+8+0+<0 +  - 0   L (  `  s *"` x  c $  I    `  s *"``  s *"`[ AL  W  # LHb   H 1"`C W  U postprocessor(2      H  1"`/ C  R extraction (2       H 1"` / [candidate selection(2      HT 1"`  Zduplicate search(2      Hl 1"`  T preprocessor (2    F w    w HT >  # Zw  n2  0D"`> n2 B 0D"`> HT >  # Z n2  0D"`> n2 B 0D"`> ~  s *<  <T <   `  s *"`a G~  s *0  < <<   H  0޽h ? 33___PPT10i.TUc+D='  = @B +  . 0   b (  x  c $$  I      0  '2  B  `  s *"`6e `  s *"`q6`  s *"`6`  s *"` x   c $p  < <<   L  W  # LHb   H 1"`C W  U postprocessor(2     HD 1"`/ C  T extraction (2      H 1"` / [candidate selection(2     H( 1"`  Xduplicate search(2     H 1"`  T preprocessor (2    `  s *"`E < ~   s *`  <T <   H  0޽h ? 33___PPT10i.TUc+D='  = @B +Џ 4 0 ww@ !w(  L  W  # LHb   H% 1"`C W  U postprocessor(2     H' 1"`/ C  R extraction (2      H(. 1"` / [candidate selection(2     H1 1"`  Zduplicate search(2     H5 1"`  T preprocessor (2    x  c $7  I      B: "`1 Y ,$ 0 X* & 2  zz ,?   ,? ,$D 0`B B 0DD1,? N :  :N ? k   qtB  61"`? k|   Bd@ "`C k  Lsub  2  t  61"`:z   ,$D 0`B B 0DD1=N v  vN  i   )VtB  61"` d   BE "` i  Kadd 2  N ? k   *VtB  61"`? k|   Bo :#   oN  i  ;  tB < 61"` d  = B䊂 "` i  Kadd 2  N ? k  > M y tB ? 61"`? k|  @ Bp "`C k  Lsub  2  N  i  A  >tB B 61"` d  C B "` i  Lload 2  N ? k  D MyvtB E 61"`? k|  F Bh "`C k  Lsub  2  N  i  G  tB H 61"` d  I B̜ "` i  Kadd 2  N  i  J  >tB K 61"` d  L BH "` i  Lload 2  N  i  M  otB N 61"` d  O BФ "` i  Kadd 2  N  i  P >ltB Q 61"` d  R B "` i  Lload 2  `B S 0D1i| 1 `B T 0D1ml5`B U 0D1m`B VB 0D1 m `B WB 0D1m5`B XB 0D1oit Y 61"` `B Z 0DD1? z  [ ,$D  0`B \ 0DD1N  ] N  i  ^ tB _ 61"` d  ` B "` i  Lload 2  N ? k  a tB b 61"`? k|  c BP "`C k  Lsub  2  `B d 0D1't e 61"`B f@ 0DD1 l,$D  0/z ,<? g ,<?,$D  0`B h 0DD1 c  `B iB 0DD1 ? tB j 61"` J k B蹂 "` O Ksub 2  tB l 61"` I m BP "` N Mload  2  `B n 0D1 J tB o 61"` B  p B‚ "` G  Kadd 2  `B q 0D1 F t r 61"` c `B s 0DD1G  }tB t 61"`  J u Bǂ "`  O Ksub 2  tB v 61"`  I w B˂ "`  N Mload  2  `B x 0D1 J tB y 61"`  B  z BЂ "`  G  Lload 2  `B { 0D1 F t | 61"` ` `B } 0DD1MMtB ~ 61"`9'f  Bӂ "`9"b Ksub 2  tB  61"`:&f  BX؂ "`>!f Ladd  2  `B  0D1MM&t  61"``B  0DD1G ,I`B B 0DD1? ,C tB  61"`1 ^ q  B܂ "`1 Z v Lload 2  tB  61"`:gq  B "`:cv Kadd 2  t  61"` | t  61"``B  0DD1? ? `B B 0DD1@ tB  61"`- #Z   B "`- V  Ksub 2  tB  61"`. "Z   B0 "`2 Z  Mload  2  `B  0D1C C 't  61"` | `B B 0DD1?  B   bE`FNQ&UVW))? XX6381-D81^ DS &{'LO^ D+ YL^0L8]T+ YL7Gn2H+IJ7GI:9]T:I:Q= qR&QJ 7JJ >:*;9>:+$.+] x!+] 6381$ 3-D^ D %D^0L8]TH+ YL^0L8]T7G@8Cn2H+IJI:B,= qR&N7#Q7JK J 7J>:8*;9+ +$ x!+ ] x!+$(,`C0*0*ITNT0*0* BCCloud#" ` ?B   bE`FNQ&UVW))? XX6381-D81^ DS &{'LO^ D+ YL^0L8]T+ YL7Gn2H+IJ7GI:9]T:I:Q= qR&QJ 7JJ >:*;9>:+$.+] x!+] 6381$ 3-D^ D %D^0L8]TH+ YL^0L8]T7G@8Cn2H+IJI:B,= qR&N7#Q7JK J 7J>:8*;9+ +$ x!+ ] x!+$(,`C0*0*ITNT0*0* BCCloud#" `   B   bE`FNQ&UVW))? XX6381-D81^ DS &{'LO^ D+ YL^0L8]T+ YL7Gn2H+IJ7GI:9]T:I:Q= qR&QJ 7JJ >:*;9>:+$.+] x!+] 6381$ 3-D^ D %D^0L8]TH+ YL^0L8]T7G@8Cn2H+IJI:B,= qR&N7#Q7JK J 7J>:8*;9+ +$ x!+ ] x!+$(,`C0*0*ITNT0*0* BCCloud#" ` <Q `B  0DD1R[  `B  0DD1 ` \ `B B 0DD1%` R `B  0DD1  `B B 0DD1Q  B   bE`FNQ&UVW))? XX6381-D81^ DS &{'LO^ D+ YL^0L8]T+ YL7Gn2H+IJ7GI:9]T:I:Q= qR&QJ 7JJ >:*;9>:+$.+] x!+] 6381$ 3-D^ D %D^0L8]TH+ YL^0L8]T7G@8Cn2H+IJI:B,= qR&N7#Q7JK J 7J>:8*;9+ +$ x!+ ] x!+$(,`C0*0*ITNT0*0* BCCloud#" ` B   bE`FNQ&UVW))? XX6381-D81^ DS &{'LO^ D+ YL^0L8]T+ YL7Gn2H+IJ7GI:9]T:I:Q= qR&QJ 7JJ >:*;9>:+$.+] x!+] 6381$ 3-D^ D %D^0L8]TH+ YL^0L8]T7G@8Cn2H+IJI:B,= qR&N7#Q7JK J 7J>:8*;9+ +$ x!+ ] x!+$(,`C0*0*ITNT0*0* BCCloud#" ` S`B  0DD1 `B B 0DD1I`B  0DD1RRqtB  61"`AnE  B "`AjJ Kadd 2  tB  61"`BnD  B< "`FnI Lsub  2  `B  0D1WEWtB  61"`Er=   B "`EnB  Ksub 2  `B  0D1_A_t  61"`[ H  0޽h ? 33___PPT10+O5 Dk'  = @B D&' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*9%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*[%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*f%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*g%(+8+0+0 +)  0 80 B (    S \  <<<<$ 0   r  S    I   rB ' <1"`- rB * <1"` ^ q8    3- [ fB - 6D1  ` . H "`   Lload 2   / H "` S  Ksub 2  l KY  4^ O] ,$D 0zB ( <1"`Kx zB ) <1"`, Y fB + 6D1, W fB ,B 6D1Q q  0 Hh "`Kt  Kadd 2   1 H  "`( Q  Kadd 2   5 0 -H ]#occurrences: 1 2    8 0$ -H,$ 0 ]#occurrences: 2 2    9 3 BeClDEpF2Af8cm 3eFS U [~2_Njl[B=RlBZuf3ov@         `"`b 1 ,$@ 0 ;@ C BeClDEpF23f8cm 3eFS U [~2_Njl[B=RlBZuf3ov@         `"`H / ,$D 0 < 0) -H,$  0 c#occurrences: 1$ 2D  L  W  =# LHb  > H/ 1"`C W  U postprocessor(2    ? H\3 1"`/ C  R extraction (2     @ Hx7 1"` / [candidate selection(2    A H$; 1"`  Zduplicate search(2    B H? 1"`  T preprocessor (2    H  0޽h ? 33!___PPT10.b[qA+ʚD'  = @B Dp' = @BA?%,( < +O%,( < +D' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<{%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*4%(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bhidden*o3>+B#style.visibility<*5%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*8%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*9%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*;%(Dq' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bhidden*o3>+B#style.visibility<*8%(++0+0 ++0+50 ++0+80 ++0+80 ++0+<0 +-  0 %|% A@t$(  qL  >j # \ L N  d    tB  61"` d    BW "` Y  Kadd 2  N ? k|    M y tB   61"`? k|    B,_ "`C kq  Lsub  2  N  d     >tB  61"` d   Bp[ "` Y  Lload 2  N ? k|   MyqtB  61"`? k|   BLg "`C kq  Lsub  2  N  d    tB  61"` d   Bk "` Y  Kadd 2  N  d    >tB  61"` d   Bp "` Y  Lload 2  N  d    jtB  61"` d   BgtB  61"` d   Bx "` Y  Lload 2  `B  0D1i| 1 `B   0D1ml5`B ! 0D1m`B "B 0D1 m `B #B 0D1m5`B $B 0D1oir  S t|  I    & 3 JBaCDEF>f8c%%/B^$OACsEI{?atyA|AIgIm5OVeS5h/ @            `"`hT ,$D 0 l  ?  v0 ? ,$D 0 @  Fo S ? T  d  7# }tB 8 61"` d  9 B@ "` Y  Lload 2  T  d  :#  R otB ; 61"` d  < BЃ "` Y  Kadd 2  T  d  =#  sitB > 61"` d  ? B8 "` Y  Lload 2  fB A 6D1 z-fB EB 6D1 z  H N f8c"` Kq Pcall 23  0@ q FA O FlR K <Gq8HIq81q F-lR N <GחHpIח1-FADT q FA P#  plR Q <Gq8HIq81q F-lR R <GחHpIח1-FAfB u 6Dup  `l PThZ  yT(Z ,$D 0n wB 0"`PTcn x 0"`PhZ L  W  z# LHb  { H, 1"`C W  U postprocessor(2    | HĖ 1"`/ C  R extraction (2     } Ht 1"` / ]candidate selection(2    ~ H 1"`  Xduplicate search(2     H 1"`  T preprocessor (2    r  S X  <<<   H  0޽h ?OK9N Q R 33___PPT10.f[p>+W}D'  = @B Du' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*&%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*v%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*y%(+G , 0 87 \ m7(  l Pz~ Pz~,$D 0`B W 0D8cz`B c 0D8cP`B d 0D8czPz`B e 0D8cyy~L  W  # LHb   Ht 1"`C W  U postprocessor(2     H䴄 1"`/ C  R extraction (2      Hܸ 1"` / ]candidate selection(2     H༄ 1"`  Xduplicate search(2     H 1"`  T preprocessor (2    x  c $„  I     0ń T J=21&0F i   i   <Ʉ u"`iV 940  B΄ "`i 930   Bф "`iV 930   <<Մ u"`i 940   <؄ u"`i4   940   Bd܄ "`i4  930t   6D8c"`it  6D8c"`i  L 0߄ A J=16&0Tl 5 b y,$@ 0t N 6"`Ot O 6"`?Ot P 6"`oOt Q 6u"`?ht R 6u"`hot S 6u"`h5t T 6D"`?t U 6D"`oll  Tgp  `MP i,$D 0t2 [ 6f8c"` Tt2 \ 6f8c"` gp  h 0t 5 ,$ 0 J=15&0Zl {   { ,$@ 0T   U # {  }  H u"`  U Qret(2   t  6u8c"`  U k B u"`| z ?  940 l H$ "`   930T M v#   ) w H u"`M Rcall(2 u  t x 6uu8c"`MT   U #  5  } ND u"`  U Rcall(2   z ~ <u8c"`  UT   U #   "  H u"`  U Rcall(2   t  6u8c"`  UT M #  @   H u"`M Rcall(2 u  t  6uu8c"`MT   U # }  6  H u"`  U Rcall(2   t  6u8c"`  UT M # } H   H u"`M Rcall(2 u  t  6uu8c"`Mz  <D8c"` 5 #z  <D8c"`|  T M # ~ +   H u"`M Qret(2 u  t  6uu8c"`M 8     9 H@ "` 930 : Bd u"`  940 ; H "` 930z < <D8c"`T  0W =# st > 6D8c"` 0W ? H% "` 0W Rcall(2 D  T  u W  @# wt A 6D8c"` u W  B H( "` u W  Rcall(2 D   C N<, "`f Qret(2 D  T M E#  F Hx0 u"`M Rcall(2 u  t G 6uu8c"`MT M H# Z I H4 u"`M Rcall(2 u  t J 6uu8c"`MT M #     H<9 u"`M Qret(2 u  t  6uu8c"`M  0= {b Vgreedy iterative(2  l :! :!,$D 0ZB  s *D8c  <C :! 3 collisions:    0+B#style.visibility<*b%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*`%(Df' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*h%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(+p+0+h0 ++0+0 +  & 0  h(  hx h c $DU  I   x h c $U  <T <   x h c $V  < <<   H h 0޽h ? 33___PPT10i.3J~+D='  = @B + ! 0 *(  x  c $/@8q-Ĺ#^x+ ^qb%K!&#6# RMhE\ J% *3kA} 񻈗#CڼJĿA;!~~Tw`>ů_V7½d;`ԧ g)*C,G@D@5d A Ex,p#uG!Fx<<q xN@8 5+*;Twܰ*#t_{3s7vS9ڥnmmkN35VOޖ\NYoNV'24 rSmJȶ-܋A]^ `[5[!,pk.wgο .h 滕<~SP+@xPێmUq v<خjjt-w0}!'_rsܾ{k{,͓H7&w',PE}*T{D}TAP;^[A񺎈I?Tfjp>Pmk_j2J uL婶?JYPԗ7ep`!EH]#B*w\`{>|wb۔~F{Ji*U:ږNv_W%[Ri}z:uyj ĞGD`|?gTXBe+W1 kJ#vWoJ^[׵Y@Z3T{%2v~9Ɯ}c;κ^|+gmv}X&h!J῎3 S 4_)pZ3GNr<(_=K3zNeDL,6fn)w-! 5}]$\#31rLadKmMn2T9 uxtM*8dS=Rig*tFgys'G6|Nq0)9+^\NfSF0jTO_4V/:qDp$U¹]2!g #M?ψ()8-&,[MZAX_0"hRO@X3ܩX ֏k,gi0GAsITHM:JJ-F N'2"X?Q"xڧe:хAKatH:t9N:BkR'=UNi9e?I3sS3 !H,tF5$tjMwFNM),1(ӣ$"U~Uu2aG-YN9Rc\^GltE&rf vhzL?͟^ "uin),d|7tgwq_?[:Q|$L7|݋.xL zJZ뀞0_kz"|+_k{|=oqN,x];SHꯧnz{{?}txꩧ?u'L)G ggNto݄ם`JkLٹM ŷn6\6o ([_Lb0cI|!-co09N;oZX-܂9ـ'pʎ 6^D Ki뀤aGєU[Չ͘-mJ'vm+ܖġe.$.moIVcљJWΕ<9JvBQ95)}TQUtrE /1Rtvӻҩ>a֮ԗFN}81\)e&s,T2C9@W "|t,o/e8kң,&Šr-so ։ɰ Z<4l)iAU5B[v4͝yXlc'ЏK| Dm ` AMxDmPM7KpC ΍r+(Z`-xI-`ՑBj rafp~`-p4kRF_ASlbR{B@d\#G|8 l%چ3fXɇB}8Z@v^;=Xed1UntZpVt|8ݗX_n|g݈:`;ޯR]zƧ%+ow[J*^[|=kx5_ ΞI3sBIP a ܱE~g|vō % ;5 fVNgVɢ?%FD 7!&4h_X.p"0 ç "n >u'KoV;W?s}C9A, B Q^ BIB¨  M& 1?1sv~"N/$wqu_vs071 ? DMs \M Ra]xMqI!]/}OmKa:#Qןp d3'z{Cz{Z ӭv[\RHKgH/2zt ޠbCLKHJo~i=қغǥ{s4zì7=Tz g7\Q\g8zӗJoءcY;+A9GV-A/>uVڸ`,^C9C'S7 R%skpK戽d^4G85_n|ƸP鍻w9bk[8q)(j4b︯]å xG+選z_zW q#Q\G^{p 'zE7ņQ\$lZfc l rzF~*<}%ZYE 97z0.EKO 4[l%%6 ='v4:"f{Ӧ$Ȕ`"wAaɧmYJS)L.Y4~Rb;fc , ,fyy%Ԇާf,Q2],%6dm,Z5b=d{]/ oa{ vP,֩z'D,#l?؅4eƒFGЇX {rsE?s#D[g\t(pUw@+v>Lt7H{ }&ӮpyȱM op52,k{~ 92,#){7)㓟%1%& N- X9"͉Uc;%dxW 2щ+3{f,HoN te4vD֜d9X ;^(Y$.I;:F2, 49\?1e`+(3+0ZIXHI,t#IrGZd$ǂƊ{iL9!VRHIcԳX;TvmfP\w @nĺXtZsIX6|h=ʌ]eDnDˢW\HJ$G\hM353 R>q :N$T!Y4DK~ VM*G1`\۪iLGͱF e<,H#$L5AQiD;6I^"c:.jAx9T IEvR\@喂bVV#^yQgqBN-9s䡩f̶,Li'd ڄrgaBN-9+%gI"-YOP=2cuX!bg6b8֜u)\UJ/p#'"r1]X{5`YI,'MlN2 '/ 9]EڿԌVd3GˈD!C0Ch'0EZ q%ބ7=BgapLC v22Σ1\T wip g;= ZI7ivIݤMfE!؊=%ޱPhfYkɰ/yk/B)jKhNSuz`#7 ވx-@63nC;AnN+oWbʓ<П]vDyFklue%rK5ekqëbg|Un›"(uC |tkD51n3ݶی0Zncmb:a'uF M14@k_hVXRWF]K1" a3d!c+gԵM")F1Z1iu!VF]`b-vg6nSthfԵnOj᷌$Fmh`ƨkCך6um2QH9 ])/ׅ3l))!WC f; izc-p=Qp\/1qczLZI7i=:v7iqfF:P;F3^3iӄA;M&mI #zޤ}h>4i^~>]NdԄAдyWtv|tjb)<*,g!WylG3˛WOQerV;z( "ړ1u*"_aIF<ΕI<-qIp?h?AuF[b?9!jcw7wuw<-QW#cAKg>st?D}l@zq#*c]7,85ppTnsWCmg:dKA,07Klwu\}þaowط;vtMhV9cwßi_" {  plrJKNn7*e[t7lIwv^t,fWfʬtoV:tWxzʢ<,v3r2,vmGݢ;[tg9^tpsG>ewjշ;`?-·#|> 7|G%v},B;|>H~rP,X/7>v}þa_ow|þaowط;i2;\΀XΟ:z&d{ĴSG/=Ȇ)1zo߭@őCz:uY]:~rP,g| :)g _э9Vt++5Yp--jBk%ů ᴆ)~ 7Ks d.d}c{ 7 w@*&F_I} =ݎ+wDD)2S( HFVEFanDG$0l"^!E'Gi`Nd,"d؝{p-g)1p8'R46^HS B[ CiTHr}X~~-w >ds~ Zؤ},7paL_hW w-5_hvZ+o>V s}+G\ #mo~[tUks}U7WXztU޳?q}UKc&WL1:~HK[O[|[|8to)X[| [iaaؙug_we0lEaъ}T/]tbkD^MsmC >VAA:>Vv#m%ǩQ-dWd'}عRȾsWd XJ:Xt{N<"1&pX+FepTO ^x0;ɭVj\}PޭdZm= w7ϘP,Jl!u7@c_Z sGO^Dq^Uq=InH.eeKZ,'U֪A4$NP˯VuYW,^E(_,A(iPKEyVx,?f1+̍~MHOjWǬ,_ƫ}쁴o74^\MeTϧ|U)Sv,1 {ܬ#9ƌxh` k]Fb1ΌXAc1(w,klTl"|@.IŞ\'k~"s{N*=]d9vW<& 9>v_1v?u9=N, ۇ/dgHaB&'}O pbxˇb?1bh;1x loiWYF6wJ_6wEvnG刟WaS!n}Pl*5wLK 0L'г86Xsg ZRZ6}ԞI{rmjڕv*;*sz!Ai~?= {4he"7$Ő'ɕSq0vOBWv{F,+dVh^2qx`#^̳2Gpx\v8COC枋n@6Xrs\#Ϗs'|f_A 8x^JឲWGsGl{G3/z+;ڱGWSQ1h7XeWxDm胾 .aILH`yaӹQuP66ʖk<Zu(;lna!rf~?nstȇCG>|8t?TuVڸuBd %Ӻ&ߍONn,w7/n;~E7EPd~sn0?D?:u jp-}yy$w;VoM.0hnn7iqFl;nλKcWtͺii_.^>Р _Ӑd&&FnA6@] + Aq3}{ѝЇ)O@w]8yl el52Rh޸YMUa}o ԵMӭIlĸtێo3bkhѶ錺6rdԵ;-/7}ZaI^u-agYl26yF]x)?(b["neԵ!b7|ƨko36M>fF]~˨kO2n4݆֊i6qoC`xQ60.q.a4!PyF;.SRBzZ_B0dc}PDIKsQ ZI1i&ޤfԏMZܤMw@x;^{ͤfN4aж&J3hhMzIФ6{fcw9ySK2ͻ+`5kOU/|vJ-r| gmG3۾ؔ,F-L{yZttoOψoy[Ws{WrJ6ӢA+EsidF/`K-mJ'y*z&mmr.-Ɩ qMsYgGuGϐqF2m$S#\YB KĵGisg*n^)sͰ*ݻΕI<-qIp?h?AuF[b?9!jcw7wuw<-QW#cAKg>st?D}cc]1nD:ck%O"]3nmm[wSRnߟ>F>s1b]'fsk7v/8k&{CVM|֥=3%:E 4O^31HƋ9wGzE觰n5泥fC7 4 Oݦ}o_tFlXi}4&6:?P?J%8x} ՕU==1#3tO(a`PQy53=0DDDY7ns4dLFjaW̷j̗%F3nMg9ֳq:{S/X}?:x'}q4'C /񓾾>PB Ű]`~(= P6úÑ/݅ B yFx0+=ag#xs@<,ij F/ 8qJ{/@K!.@\qbf%#^ 2@\qJUIՈ- ElGZI5}&^ةڍeī7#Rkނx-W_C^O󈧩;J҂?oƻd?@h އA)Q~"!#V V+5@u`HG!F8qxbx OF8d>q*43?YgO'>gCmnHKH+gQS)RO z}hO Sz|.joIoe,lkkoI6O۞\Nn/Z3]Lw͘>㑫ϴ"PRs/z:GPv9۬Bo3FlPXNnXFîCQJ ݕi˵u+hB@?$aL32a,}L(/;ct쮿i?H@F4>v@ @Q_@7?>$CR*kmL6AK8/wL*u,15Wڻ:WTeL2,ptVרj{M}kc?&ߤ>:U^Q\̿|Sڸ>9њJsөS}@-!t0z)Ttu arՄm?TJ]CiQaƭY||(]l0Y"ȧ碄CGga"7Op8M"ބ f[oE܎uoGw"~o7UGwFǚ[4^wnq^F(8$0 ?]fR^=Zn:ϔ~ +)綐hv߁=ccQxBv¢vt_\>ݮ;}_ppwp/ב7 rn|NvSm,5,yrZypY^bm+ZX +ʌzWH<iqgn߯D))S>-DuXfZ/X9lxV d\8VxV , >4GM.H֝%;jCAA]\F|1e-:ыn2;e9˦-3ZXfl@Xf\P*Gh]O@W]Ϭz -,X(M0P)PfZOK[D&ѵ0tU?{^_zIp@n_zժ"zy? ;*Ow*"7[<}p*azN rE*p+H(| UFAw~* '7o#" LF/FOM'>sr7,rM.w3|pş|]([tqtw7W~XOq]zt'=aB'z߲xph)xC$@7x遟oO)m.<#Lvc}*L^ G D}yw^Ym}0#76 m}݀ p}poC s=f͂e ЭT9Mا oT+qtG$ο{#m-hJ=`|Z FrryNY:X"Am@^M|Wy{ZԞx{?]Lw/\X R Y8gc ]`,G:ֲbCDuB݉O{^u;iK+crC] 4 M~֍h@3;~=+`]zƧ5%kՓH2ͨ('>3QzgZC97o4cRsn8Ӣw,ȂpتVi?b}}?ͫѥ;5 WLgL&?eFTi,7!*&4hC >ȇJ^1\o1&lzp_8_ !g*.Az)i0'p݈h| Q*o )E0E/EZ9v$ב}CϹb.+UX񋲼^~b *ΘiX8KvIB]# wtGU_jNȜF~TaպND4,Ք,e퓲`Zd,kc^rsz܈K.u&cX:+Bc9kU~nRrPpw-H0́U!л7/\2(HI:kVb.+(:nK xNˁKGD)M~G8Jq1ˈ*,U%ZAhbw~Mp1}^Պ7.g ySnK.uuu܉F`D1cZ{Mlɶ.7ޫ3E*ZR5<>AEx/oF[Qo-ʇg.hosB)zLWPᓰ1(I03K]h|̘rR'`M-NY؈ۻNGE*LK%*Y0FK!֬%%R9~3t/,+DjamSGym)!mjtF^bI;U,^-$ܤUʱ>bW:EI(;Mm(9VK]m]ů42H$F T#с]VϤXp2D]V9?JNpu"!HIJqUi) !)V)VjW)ͳ~A,/HڎD0i)wrܝ%[nUFKs/&%hVcamzFjroݿ0Ri|#xFgoa*FxFj]oڕaiGF)KyobaQ?rm&--AvP(--CmG:wXNtřκwnʹ2Y"ȰhyS,CXtbwbL460>(sl@җ7Bt'D ՜nudn+Q|'5]O}W0;9ܰG+Bݡdt{ݦ]9 ƉFg t[zfu ߽On5b7:t%Zo ݀{e)GQ`0r@wL4W`j:|ՐeKEJ%(DۓD%SR Y%eZeEsKbZ~̓JzRKE8w*¹RѠogZFIZ-SZ/e)NYqen41=U5jOJRV;eR6UVesi*!o*IM_j*r"w9U*̍UN'e1UNYUM=: PşcHQ_N}^M>e$}ZH ~;#On'wvyw;zT;5?o 6h%g<̵47 A= 1!_q|6e|"Q-ȧB. .R?Nkxj|ۊbgGզ4P#04nd|lmܴMUnGMDH){3G߄|D}_#߂BP@c0@c0!Ȯ @c0@cpi  W l{ G]g"Mݿݯ!j~cS!n. d<5OZՍC0VIV'?ӅGI u%ZEòcFw2 >} ƋõD%w*T#>]rSxgҶYm٢5[4â-0io%âh,6lњ-a(+$Ru2_t3' (lm6^cm2s#}K"(r/dꋚ&Q}`05<~w ǩ]#-$%r}H<.F6د)~%y>Gh}f w9 hZ< R=6~t]>9Q:LŮ'С2wЄ7X'9>!vM(=B1۬[rDlToi|Z|A|:ȶw\Y)epAPC/ m8! QQG/GC] Q?*s*\GY5v>{ִˊՉy_e!QV}- UpF%%".$;S?1WC'"} _}3~ #[m yiuk}xgح}â[~o5D}i=W氨~/nk8Ñ^{㶆O޵ qcYb$eɼN>멩[257Nݯ氨2onܶZvEO}mhwhwpCRzC;;5[a4/՞i9P􁌟=bxQJ2o :@xwѲUbma!-Bl˭I샍ĸ sKv탹6z4A NGA* Ӑd&z;H#[!ގx7D&e@c̾w ރI_G#P}0Ɲxh}tBCP#bJb|ڟf"oSx{'< ja ,=$S>af4ۓ\9c2a,I3O5щ%Ϣmh,ZEkhE3,[`ɰPh,6͢5[ffX4æ 01Ő$By|$qnbKv~I~5{ouUuL0 JNuչsu}eؘ߀>BA%2Aoo/ /!F؈.`\- }M)JHpw'VF iCz@:]#ݺ,wJ ñ.aX#陏qw:Mn05!?w># @3 " KKA{0ޗH 20qh1c!G uZbb5DI'#NFA8Zi?XX8q&,O"xl@8qP@L"6 x6| m+""q1ĥ#9|Xy /BlB\x1*KS[2]cӎ_7s]oLWw;@oY TJr,37"nB 2mZ[6oE*ĿC"Ո oTw YH }!;hFL޶ܱۢsck9m-Ҝ^?m~[jMGj:{8쵩ϧﻬHs )8@&U4`;K [(DZ+04W^H_AwQ(CZ1-N%?MDOysP5"Ԥ1~zzOd ixcUI&(yBg<^Li>[0!frCs :E !Yʄ,Zc*Bv= 7k5\֒3Dˑ!xh6Ѧ۴bv(6ͦ%lJA&3iwoF'duKeCw oxYPҟ1{[vDŹD|tj]iC9kO ~ G feЯL|woYi49#Vz\̌ Z3 mvI堝#i:hfZӞYܿ#>M}hӈh恿|gxVu5wu/BN_8-;f"Ky^-mH0UsmJuu5!p'NRU˵΍]ED>%dt]ޒJ7YS0Y׻:>;ө"LeP<:צz#Z< wNNN}g˿Ò;:?QKF]7=E-SGQv u(d WƅJKr@Q\TJf m]+4LP-]m~ƂVCH E c,tJa I؜Y~~k} o)h;,dZΖ\.IzG:QZ7OoI; wkƊ74?٭RI؈F) 4JA{Cϱ׀-7a:p!)ۃ5ޝ@syt{ba|-C5\+$*p$Oc>9th+i01a i&{ׇL6t_/]>ݮ}{!,EOuvSjdCƫr<9yZc`z~FfinLU#AZ_Z a 4s B5.k>$1)`:@rkWb2V-"WH]SA[lShrCɨ*_$_+C` ̥tzKe=[M?O79rsO௯8_}9}q? ` xMkVMT#Tduq1ݲbw(OR׹d#Lb0u3aReNչ9(^U {SuAjmRߧR;עx^U y6lD v[Ӱs[bVazۃO UcԋhYulAhmZ7Y+*C1G:"cbdo:=꒡P!.۷i @a8|JB^-"^vs0a#7Vߺ@v6عv7P?3g΄x v, .uP =Ypz }C518J#9DA ÷7-Y,|M,Hs6ʥff5,9庢YAeBea{sG:ՙFe/)IV^BU/;Rkx ,(t-cʍzm}q14F1p;]>ÿШeӫYf j.㕊H3T9u'K~ Og\~ӌYM%+d57l7'/!qf͑|!vK>VP䳚VʖؤCpim*@տ .pmΟ! >Bӈ۳;s>i|E.'6dm8>_"U_pGMN% -7a\  b۴xCal Ͱ7D-t:!R'ӏzNZkMX68. +5r&nF`~=qe|ތOkKj6g?pEg.hzi晶x-搟Ey VPc|IG޾P_}#"b±c\)M+58]bwR’Z|fZYNz\ײޤV4M>-C |h-C9h= s/N",MlIy:ⳑG^~( O=ԒrIyYR݋(b Xt=R'`1ˊf',YmbRmD}Cfa)php Ku?^qKXE_0CP-T=t?S!¨/oZÔ&կXBiD!bW\ⶊv͘BY.S(vmsboe:uԽߓZs׈Wp+~. ]+跋;p "21  9:3$[IB(V*9#&,Ej~-jT3C-ڼ8"SMZK'QR!sFmN*Z᏶0Iӎ>$yyGRU$٢H+$; GGv&Cb'8 &-Qb灓QJvdC"8K8ނ[;Ȣe4=M g^ VܔuVՒ˹p'"8l0!>M5"-1t,ff FM3zϳz\o L{W,G`YYy˿d_0oΌ+9W-Ef &#b :KJ=w?KD.2Lwƒvƿ7 tuoksgLT C˞MZíK3v'pt['g)$ӸhpGvUR ˆ0lHXuZ0K+详wMQҾfqUMV젩)'JaJsGJڣ lܱNS\,I4Z[p)YMzG-|nَZ.rYpw:AlhsDQv|xU8j+I+ 8kP*3a-Rk!sKB랤jM3)DqT{wKѬ%E E'%Ŗsɘh_P Ij b&C Ci1bi~c&誏 CC_ UAr0P U  U>.*C?~wK-2U<{0>@x͡gٯF-g@`}WgOͳם~3kٕjX0̳~Jγ;086 AlsbC9L'6767GAĆwwbCл w@л z$W:ı uDCSrha':.߮Oz`mm=5w(AXDz~[։cm=R1[[SX+kʱ~lEoy}-N"t'嵀cӟ4GY`AvCnk<5ȱw'8}7`S.,^  `,^@,^h4-\ZZs:uxA#CŋQ1_N#&0b9a|06ȅ#w+FXhf5Gv3ڳh(Nj>K GF b`tK =%uZni=^n۔p B؁.1&Tn_BntZ_i{yb CExɋ60/e2B!ZX͞ j^.c}Wh}LSѥ&9e{*bV4oa^u#@ r!{"}EmPik:84Ya>efA-׈PO`=]5{&ld*$]R<3<Ŏ) 8`Zz &Lnz!CrPPC>iHaV2!˄Vy~ᢧD]q ;r9`;%w9)ZMki6ئE;ͦmi FiRd iL8ݛ? r3wPo]2y1gy(OwM~%@ `nQhjV̟\WnC-u ݖh%FFK_Xb 40n}>ObUQ{oe|QSn1M'̄3m` a4p]}ة%҅ܔpiA-MЪ-N zVnp iAexⴠg6_ -N zVnol?v6ƨf3Zܶ'k1ZO9إ[)^q_䔐WC \+zFI:R} pt1[.j/vEӦimZM+i6(jmWm6-a6-Ӟ6v~Nn~n Mi۴R]Ѷڴ6uM[l9 ޲#-.'Ei^ή(wr*V[ž2ݶfA2=ݽ5gX~.uP<3b/h ̨+i%mv6iEL{fqtdW( 7}RM#J)?Y;[չG8"vZhhFX.iz]#E~ÜVS̵)܆\8 K%W-ע:7vt5n[tvi{K*dMEPey=fD<&3bklն!mtO BYz 坻f_{=GOC%m}`)cLƆ&7rn.{5ͭm[tZYE}\}2#I߁OLٯOzj+r(s(yMGjZku3­h²ns>]7*hڹ]7E p:N ؄o;\ ZHE}JOs,}h|uoG 4 ,<7!YuXfK\?S@>k--oL|>Z< wNNN}g˿Òivtl .ZDZ'b-7ĤoCb+ mÄ\qEK_Υh9I(.*b%鶮ՕO!g1r$c}߫;/SurFi9[sL'~D-t5#}yz]iIݚb?jtߚ7ac*a?5iK0-z jzu؄>|T[G08e{0{#ٻh.O"!>b( _ˌءEl+$* '2!Ε[Ep}H[D0S S͸\2Y WOk_rG.$^vf|&gqHk/Oiyrσ<8}{5sT ĺ2jjaQ0`O?<&>$O1)`:rkWbBU-"WH]STV!T$DP25:3s)]RqVvS꾄SM\j+W)H3}܏?i0EN[5eNSoR#oc}q^ԘnYb;0f^璁3 p%IY> S-S<5HjZ%W}Դc.0uaReLչ9(^U {'SuAjmRߧR;עx^U y6lD v[` @~OeEͪ;me BSm4ڀd]P>vPk'7XG-Y*'GAT OQL8 >MۤP1.TiI«Ҿ//c*p5jHMi 9o{#9Dsy0}/]bEѣ9.~ˇn$-2͟Л+>t|[U9£c9)Eī?UeAwz| O2t]qfoN]|q^\(4h}ߢzM|]WtwqXߓ6uգ\k/ݝn.]1oCYú#_m0C7EwGtކ`=4“,B3.Ln"Kw7_ndn=۷i @a8|JB^-"^vs0a#7Vߺ@v6عv7P?3g΄FM$]c/,b:s1yh f;c= ԡ/XLD=|{B$Ē4S`GhfBbXuZ3x]7wSitYB["1Gdl+TB#&w [p΂BRGkB>ȩ;&\X? 2"XL-ɔk2'R/.De8o*Oe)|)ݎo&R%ty.D_2$yyG2C~ёDD:\)<߈?:Q$.t{#8ÀxHOxm9g LRshA>ai2LH&6V;d.&'>I0ߖ5ܺ4ca1:xIX}etaD~U>/)w]SCy7NZH&~.>G4'u\yE1vFc} hy6FGC>eg3u,e γlA!C}Jh+=َl5B8Obgld9] r睔ʳ6l${#Ihs$ɽ#Ihfs$;'G,HkL$ϑ$Տ'G}$ ]G$kϑ$8NvIBcfϑ$8XuIB̩ EW}?Ury-F(F(APGĆ`md8>! f$W&ıM)9UoLes>~mC]Dyk*!(ӂCeyXYx/,C Yp8H6yGXX̐lߡUKI3]ڧL%F\TpbVfl̿1GbFXo7{MbM\9|9ڕP Z:E> ;rk<v]A?; #P1\`qZcP*?s9ym8nUQ+>p2%2N2p$2Kp$Eޔp,Eą!~(_!~K#^q)bqbb3"Մ+[TRɠ2 qJnx푬9O5So+`3n>@a _]x*uTx ⵈ_V|= Fu'HvvT[ti4洴6e2MoM/oO^Z[Z&s]n﬛ ov7  1w"a3˰AA|s_˄OMd.i):_kZWO`x<b!8h7mЁnM#Vt_\>ݮHy%Ou;ɩ/7 zuaDDNvwቻavP _N#>"w'\ ?H,U!RmΟ²bJ߽:!Py9{E z [WgD}R 2V3r7Yt3 *EEoy,_hX-_Zc#.- ^Oޜ߉wD(zU<t2o#(giXYnkδ3WeV"&BVY! apzWEt_2׵gX+@ﭵQWOt{2^۳Aw} Qh2c09#>pa0]u̩S:<ͱ Fgc401js׈~.XlReߵ$֛ iWgbB/$®Km4Mn2T9L5xuM:N.AOT nsy#Z>$ (s?.0xFSG;bDS4֪Tc+W]/i^b14(u.H<>ɾg-|c`Gp2.ILm4ɣ ɧZUs͸vK-Au01.ur8׻C K֗LOӨ7g 2Wԙ"/3m5ᰃz5W#U>^ѴPgf2OQ׆tY a .ŷ#8m}n>4!/9nR6͍ujFjp.h=eNVryS? l{XvQeVISnP0a7եd(`E}6)1q{p˻ VZ?0tx$sRλ^þh^9Ի|Ǧ N\;] ?Qߥ!н"lYC^ lQ+*4B5L?Y"K6W?xT?8^|E}o_Q2 g_>tg݄}`bKLܷM ŷl{nؼ6oB_{&N2Y$Xc)6$1ynJữa>!\$<#tDLidkenZ;:;PyS{f~s+;:wm5+:ִw"tfQ:2c1lkjϤ;2 }ek9hԮ4՝Wf3 377ۛuFg{&O+e(9nS~aaOPQ!K/AKʁk J  o&0}4zdUE i-`*<63 |<2j;9DXCF'ͨ᳆W*" <@8g~CXl'ӏ˳ ́TUN AaMDoc!P 7O)Vۙ=?έg{CYP7K]GR7+W2|`Jm6 ``Ai"\|WЇ7[l|;^0fňaX ƶ :D4VBjlB@t:!r'^uj;i[>};@A  X=60ez§% 툄(iI]LI>*v?8i{i '(oƢsg\X7cmԗ~Eo_PȂ8}j۱Y|"ï4.B8|gj@,YVƢCX֛LnA4͇/C ">ȇb>-s| ->dir'`) )0L_*.Ez14/b?0&ᑓԝÜ'3|$^ BPe# ) ^QfA^RpI^{OzhdJ$<1](W!*§Zw?}{{ Q!;'0'2 R SC1gB= `='uŭɟ@5R"pM hّ: 45Tl\B,WSBi 汮JWu;^95o>5)GɚP+v*!0)a y)ԛ"6+a;KO~[RRH֍7Y{Oet}J7aa7z ޭ˕}+kII!^[zUJoĥ7z#JoG 7(}k_$;ėިK/a|<^h5Z=٩IIx5L"tt]lًzEװ"Ww|K^[ٿlLJ ŷhxi߷?G\-k}ҫccPzBY7z{N2c7-v˖zNr:ޘK/5t'r\k;+PFQݢ{/Dɵ&7֭9B&ۢlQOP ᙰhi2%Xw:4H㼗4x(8'_>ͦw̶&Ʀ!2U0_@T"jJJD cvWcK Tɢ9XB&ˢ&'KY0RUjw!Y2et9Xtd;f)ً5b=g{]Ȕ#v} vX,J ֹ~~6`Q(x|1"?ۿHj9̍e&b.Mеk(S{:қ>Gi`{B@i_)NÑZW4#G0,~1Ot v"k Kײ?}VLLȂSC9a.ґ(n컈o^\"} &hbс+3{f,K߼D%Y.Sd˱P94z G(a%NqYّ y3lqRER"iaK:D9R?dFhFrX"I#pxd 8=}sJe?=?DskeX$o4RJ8̪E:Hv0\֐ KNo$7=%niOQB=D<}x| ]KsoPްBFrYH ~^}ѻ9 AH|LsVoj4̓hӒ4/MPWT۸JG[DTI8!Aokʯ lMcM&\ʡ \@V #.݄JхK<ŕ6 Ջȇ'%aX?aw똒C9 r@l(ߤHMb\+ypL(;LkyҶ X)mͩ "8{$%?h XQs>3'?}w= QnWfaX_M6{lL+yguȞ?F MO#?Vscw5~µaXfMIZ[)Y do|E `;{ lv+] < 1иc!tY< +k ;ػGQjFCZd!}ہwGO9r/ y_)#(fVL O 2 L*vnHZzH\c%a40١UiO`*<bp3 4X{M\7d+ޥ+IZEefY*Ve^mEh-i(͔OZN+giO Ufh?;|ߡwP"L8t(kh{BSQYS5VuqˍiDW[Nq7u1)L^?@xvX/V2څ-Vv3j֋i6wG`4XnkCCFM˭%Ql`4ƍL1#jLr3e NFCq%ijPhho 0J͖~qhhoܦi hhYn;a`rz&3PW- m`ߧrJR \EYdNI Zje=_T`)hhoMZj `-LwIeѲ-kfYYʢUYozӢuZEKZ45Iw v0i E{h&M#:΢ѢѢͱs92&7d MYpuGgV LogT9ȷzAms˪_?ݽ?gYO *m&&(I?E߮=]͟T Ew$}Ew*$$nڔ=9/ߙ8J|j%lTZi1^{ӢOyLVKڢ'j\O0!@rt-W\.^M%,Lj$A@gM%P"lrD\\tdƣ#DXf"%19ynnRoD_J:OL_%x{Ѻzm+33mӵHK*G~~R i}}_&[ۿXG ͽippTjpACo+6QUe?Z!??NG=u~;o|霠Y M\u% nO> 9>8Hз2'eN A XJ0K*l~4'"h+QI@i^-MOMki#wX3\Tʶg9gDʶ'xa }Zn[#ƊBGS>ڿiOЯq5- > >`+>`+ VpB`s+B`sA`s3pln.3)q<Ѽ"=&C mYxColX7˲Y|qbqS0&h!ZGHX̐\FvV-e}9X-fqv L@ɘŌ݌{I{[g<8bÖRg-Ɯ(U9@nBo7; C 1Vk Jt̏̀]: ?' ym!kIۆyR8ۆyʁ,Tۆyۆ}:%vΓ d'vSd"vd'ȳ $57m)lwpn6W{ kGٽ `v/ٽٽ^fAr_f f^5Wݫ;wßi'>lVj{ǹÃ]Yp}ѭ#tgSnggj=O?Eke}Yt|՞̬V`o; ނ8ؔ EEG/ /m򂆥C]\N^J 2<4q >xg \:U{wLb1}"8}`#hczuYƑﯶ9S}j_>M)YB40.OVp20B[Z7ע80cr ux }\4$g=gE o_[r+d)߽-U\ю` dm⺰8Gfc=a ɰð`ja]0%'!*g81{"BE(L3ٓD%ҥJQd5]?jj\_,""[,ƫ;1^ SĬ/fz1{YȌW~BQ{bYq1+-fcԤgE@:獈]BMybScS{>O3Z䩗|T=1KŬUq ԃ=FDԾcMK1)cXהY5nzkzy{zj~ Nkmi=;֝"Y7:+ 7  y<=Ma]vőVerP?`=|.?<7ՓՀ"-|_k _e)LN:!ưX]ÀVu#cpcDۥӧ۵! b\<%Ou;ɩ/7sy#,^[W\7̑mk3\mD̒':S,"Ae@Trܐr< bI !ٔejǴCS0\Tت`5qY޼DC{&-kѲmEeѪ,ZE{ LK`Ҷ[ӢuZE6S?ie;ÛV?*T]:|JC⡒gh?ڞTgw~]D[nL#ZڅoȻ Na b^{- z.d\oVm^Lc4۵=bθr{_"45oZn-b0nfzQ+d)n%v2݌, jFCg-+fV2nmFCx6M[iFCƸrۡ mЫ0І2jm m>èUR/z sJJ(P+C{LiFC{k\PFIr z]-kѲmEeѪ,ZE{ L6wIn:-ZEKZE]-䠙|'ihh v0iX,Zf?h,-- 1 -c2jYдWwtfV{uj0;U--68C)su&qo"~@\>eIE[t7oA'zXt7OO&MiJÙ79߮ķcU r*Diބ4Rg j+[/_ٞ&RsMw6"tt-W\.^ѱugʸU#53tT%-#Fߢt{ӊbvYţcEG*O<χ^%bshԏX|->WxJ~n=lb-6GppT>pAcb]--LFQUke>!??NG}r|霠Zt(׮0;2+Z7z:tЬtn|3[Uf7̞Iw2"}_湖gxFXK9C~4 K Iw{6~U8;qPl6c79#>pa@zcN͝jX1c401j` ~.᩼"Ka>+-. x:"ɯ^ USXD F h$d s2j^kux%)] sLu_E&G>|nI50)Q(~\OaY41vĈ%LiUOw8\/i^b10bwGu=Vu ބx3e ފ5n3nC;A.9ݻrg{q}D܌-2(g0󎒰|.# $,Ah,sV9\3RK_ط(R^VJȳp:oMܳ nM0&ۇt&Ď{O o܃=-p7=y|5=s0qDhLozRKWgD(!ͯa>!y3BG^۞HV涯!+"k(sC==5۳7Qs&s12=Ƞ˂mK}Q#Tw J_iO/࿆/̘pތbuk5nS~aaOHXQ!e/8-+A6C9.GeX.ahL:hXUty&|s. OFHayjuYPȀZi֑@ջ =Bl`Cp,XNv:y`gC\?+;kkyv־]eY6Fv3bе?D9ӄfM >-C+>-ub7_h%>~K=]STM}/_5HwUHaSt(ҋy14 ɝaN˓G>ip/O!@rh7{YP"\3v?򇐟7sIQ azpLaʬ鬯O^$!aTNj?}Yhǿ2 R SC1gB 7N $Xpωu]qk'@LG4Ƨ˝A^ysi.]!)]r.Ǻ+]!5^{[Ԗ=~͛mMJQf6(􊥝Joȥ7:BJoBv^ fHzJoӇߖһuc/o'q]R FXoX鍰aB%wr7z|lZRRHoꡗm~0)bi~q鍲ވѻB7zv~;Ip7%7˫X;M+t>KSZְ=٩jWSt.BI'vg^L;t.BW)\es^eLf6h4Ѵ[I\е]]]鍱?(Tw^,oޞ?|V7-v˖zNr:ޘK/5t'r\k;+PFQݢ{/Dɵ&7֭9B&ۢl]B0v^CEoh΄ENՔ$(anQCc;{KGيl:s\lzl{9mbl"S^cDe,&D`:&`w5dx{J,%d,jre/ é(Q{珜E(SIKEGSPkX(cqOzL9kT] **X9 xh/Q(x|B"?j9 rZ7npYۢ y|+Љ7nw.f(rlw@Tp[i|_~;Gjm^-̆ę|'Ǽ~-gc±HßQӶԹ1Q҇3il4HHn{  YS^x?NN4|ڠ4< 'fI /fIfI/Kq8{!OJNliگ}}=5Ss8f` L@05~ E>.-85s#S՞] 8ڦf ~s6xi]%0_V[ -;Rڥ+=@R-Aoz=BK_Te9=@|){x'G{!5V5# O>Gh gAn/&0xq-lV@V@[Y 6[ l `+^lnAr_ln lnV6%'W%e': =֎Eq,{0'P1U Ci&.{5#EJC1T05N(Fh$mH ҝk1(ª3+L5ҷ .ౘ 6oaC}ow:)C4K6i;9Qr \; ݄GovUr 1Vk Jt̏̀]: ?' m!kIۆùS8s0ۆù˕,sW/ۆùs.ۆý;evΝd;[v]d"Pvd;Fɽ0$57am)lwpn69=iAOuG xClx= tՑ=W蚱$m%00#N7 @K#KXH&@ %L p+H'fe/$@G9Ysz4#!UWx&.8p` aMAT8@H )8 >@,ˈSI{)y` ).^ 'osK _ ?Uj>d$Cl ;d)Ѝ!(Up|r5q投XOm([#ecvs{szz2Y֠`j:[maXRcWLF ux;X7jkX~35_XYe>r2ʯVNzz;3;],()ľ;@S?*|]uO>̈렪"`܅!Wx1v3}b{#7Bچ˃=A&s((禄UA}.@WQ(JUE5jn"ླZ sP56ج<0~{_5bSD-feCbОO-cF \jz@N=ʐlȲRfVyx`2U+-Jy< JJ2h&פ-5iKMZФMs`ОvIm6iI5j(cta.]TJy0R):K)<]Q`$ӧOjPzOH(hŽ~ r*=ApuF]eJ1^k&WZ34be+xr">x6MX9QW1ZSR2ua7*JxSv1jcRLf)˟JlY< ²>C| CޘHwB~uM|¨j2{'פ5i&פ-5iKMZФMs`О3L &lvIMnѬA5z#m4H&&hŠ+jn5iAWDivߛߛUfOLs1Qqn9F*Z NZV ;=V6rpmի폤|Hid V.MC}BŠ&]t'|I_/ ]_2N_m -i*уY7F/UosGOKWOwg)s):P_hɶ MC oɦ).T Ƶs=\;=َ!Yk6?ton _VIFtScMPB< #*͗3lK{ i,GwݞfꡪӈK~oU ȩstE|+ŋ}+i ֮TmޱmGvmFurzIviՓeee_Wyog+W8) 11u.t<ђ޽G_ђїlt3x=⤎ {hz,=N4yڏt0~x51:9|!z'`>۰E_*s}|,ǣp`|?^/&2Wu.ư`3 ) 䎇=H;gK963H\YͫS+|ylf<Ή0KSuZMp!>@saYXyw뵰WHMl6E;֢V0$gGԳ$vwxMpT"$W0e#FW)LjpCF-k=CS| nY0ҍi0VxBgD/uȧ֛ϩ>| Aʠ,^\ .p;YSO;mZYKu.UsfZ78Xt P$!og|0$ɸ F$ ⮹Nj9,ÝdXg㊱Ej&,2N/? ш7'f2̨ V=4tv8tt'^jԞn"U>niCzY.G%ۍ!^lʹK߭σ綘X^ i85ip Ν>oQñZ66fb` !SUbrwa5d+X8W"C_.?=.￟i/@>طo HB^'"Ͼ}|3܌7cܛfX6 C:rތ؆nn  ؽ{voA_g}.\r$s]PWgHm V!`=^<8>O+"R}|-vZ+^լWZb uTZ1 ˢ^Đ]-L;!vtm)%zݶLK,T0MoU6޶zO6;Lӎv}3ia4ulq$9x[X;bxQP rQw7NndleL ,k*_Đ}OWǓN71pA @pPEZ+j&WHMF Y\z3_gc zL Iޅ=cy2UՋPwU S<2p߾96Ȏw} }8 3V=/Vm-I=2بQo Was>q>.thr_-wM|gGդ%~͇;{jpg F,žzAO7@;Bh!n [$=ApdjŹ{ǐ2 _\> hYQu<Nz}/mA.A߂(i 68P&5'Q򦓗Vɘ3N 662!, B-[J9#kX_]8+pleE9YU0Ǫر@045.ޔR4IӉz!̻f.`iKS=BEB¨yPoLTu"Xwk{/rICp4MMhۛ:)TjS,Wq ְ RWu;yksMRPHOɛIafQҫlzAz֤Po٤U 귴I&W$E|ֻAָ^(zC7(XDE9w7z߼wo]{|mI^MސCoްv70}=Mw-Ja^L&vV)s~F:6d^͑(Ф(KΫ4bQ;0wz_eߪknI'w=\n7KTB0Zp)JI4~ /9~0ؚntFɧx@Mw%+oM Qaޢ4F`:T=VpE#66 folZlOqD5D yD-%R2,uV1TJgYTK`ij)VjRm#m2#(SIKƢ!.E5ZSQ~̟/srE|woR鄝l} ?Qs2R` q@}_?>R9_ю#pER؁,l1vh-Vṍ4voܤ ^"҃ozf1kRU>ROø=lqJ*ahs:h?E(k9sUQLnla"u˿G&I^љTLLf?&2i8DP2,[ri^d[O(e0:U*1r(sa4AI┷FߩRfhKS# zè;B9aF`o*H)# ,aJ|WTO6j{fk؝oboEY)4\,Sf`+6Wۺsό$Jш v &w*/ū^wP&x x3|7Ip $?7czCAwP,E"I4A[P+ 8"u "P0b`d_f/RT4~fA\FGQYNDvRi^JjAҜvxT DΉهp 4z;)(F"co%hbK0 ||_R~q0TR| R>)n)/o`Gk+)u@Yޥ[Z^TZ=K0a홤/LN,*$;Gv1ȗK,Wv٠"rw:=c130[4z"8BYUqb= =ezs{zizWo[' 7k!5WjV'e7l+ CZg-mV0V0> `|$_`F7[pxss /. ύMtZn6珳I(獿 52o; 쉾)|‡|/. x1ڌ,e7WLp+&:/5]f^Ƌ˳X*vc_?,^s pa݋`3mBEf3g_]6SEgÇ nb'51o3:cxfD9I\ӕx>>4ĜªXo]S.ڶ𳰝8fc7eRAAfKa_?JƬ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntrydO)Picturesw*Current UserSummaryInformation(PowerPoint Document(DocumentSummaryInformation8