ࡱ> `!fdƠ1Z& X}G4xoEgw7'nJSEp )A"H@JdYJv*$N=?#+JP$D)̛Ydz<:/_{3yj%^beG]DNan|釃po؆{ :|Z^zY_p}x0  q@I~% ־t5sJ䵕~w=mGW?Gp?I=gUuu,foҬ`U N'(.Q 7]ohN<yQWvn#7(:dzH{HH{)`:%:qND)򏴬%eǻdcw Jq3U)~gR}_~D3U0.u R0.u R0.u R0[> yԇ`ՇCH&^/z@ȋXp Xp Xp XUV(0f ¬`KT95eZW'W6־xmsL;'fʄ#[Y~=d+^|xUu3k&M's^|71^|71^|71^|㥪P`T KJayԎ%3ӈ39Ҝm'a_l8ɞEQ'3DpnL-X0F`,ZE #P`֕ N`NW,%*AmzyDms_5m=1 `g`0Rנ5?ئrElc\mqU16UƸ*Ws ՜2RsҕM\<*ۜ#Ռfk[pdyL`I0vVȘԵk`ߝW`UWq0*_WV(0救 ߼k`KԵٛwu lr];Y]MX-5%5^оr7P'8g3P5#b\Rs1Bj.FHi)G+!-eB҄-A iy'`XzK6(FC#;1" #aD4<0"FDS):Y6 qg `s,TxQ)xfYPͺ,G1fO;y7+v$<;1Ņ">TZF*Nт۳ Y*JFIF`WANG2 CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 C    $.' ",#(7),01444'9=82<.342 i }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?Ѷm:LREQEQE܍L-QMM/L3NQLy5=XMqq' X?|%bVX?|# rgK6 ¢G4'  ͷy!HAx"I9ϙ6kR,cT]cnAJ,1Ymi鷾lFƻcTQ = *HVA\RqIQӬY!/PdJA5o:MfӮ+u~$=kwkV/nF )s4ޚcS.* |WB襎Xuu# ԔQEQEQEQEQERQEQKEQEQEQEQEQE! s[څF@3ɯWNjˢ^L|9M$K^ៀk3ϖzk <9SI 9MvQQ5EQ( s2f&K>ҷTr rEr4_^Z fmX6%2J:״+2#"z6ycOh[jtj?k:"ߺox~4Etrkc9unp?*xE2q(@¹:mkrQy"jo⻟@#mOS^V~iVQ@qL4H/`[$6+3Q4Z&K(f ܼu~$*inֳu5!a? H4(r%4xNt5]>34ף2K]6Pۆmkw:FCoT4gr=+pjxU ?*? 6#^%1׬xR.4EB2Mp+*Q GtR1G,O#c ¾CQ>'%7A|XQkpf=6V%*E|.'PӭnapTs򯡭mm*U=MZxA)@-nI#+ſ 5 3M-sj"X S<'K]l 2E} 7ɝb }* -QEQEQEQEQEQEQEQEQEQEQHzkM+̲(rs_9ǚߍ/v4 8?`{}м/xr R%hw2Xڤvq 'sIK5FH6*? h^'RW!~VV+|-]E1&=mR5E(WcIh/޵? $ 6%ٌD}*Oxz/ecm:r1{׿ibL$J +ʾngC^5TWxݲSRJ'K?4b\۵} {-GCӂ fAWVj]/ڍ66~5|;:3I+:Mg3sonMڑ׌pmoZq\\JҊJul&]!qYfXSpѱ#XHG*9,/_In|^ xs_nFJk< 1i }­u-%!J(((((((((()@Ҽ[/;Lr(9 4sZKoF7}31uy2^: ڕWnaZQ^cxZC5 #{y~hq4n٬|\qҾw+M\S ⾗VWPAdyYzݨom2W+/jZ]QX(uiؽ*иL ̺ cg+0$5~{y Oz'58𽿊=qg"5Ah xxKIJxgX-}_5b:aՁR2=k>3,>p%F>Z|%`4 ָd ƼoZ?!62GAaKM m^Sy>w ѥHc]Er3 7w{pCQO^:ϊ5+^M>/0dtm졊_:UP}kGc4; rTaG"y #gdJ<UmY_Mcźglub@~e5QEQEQEQEQEQEQEQEQEQTyG c+築?Z]+CdI0<ҹ_;|ev;0ْgJc|3`}G+TA'.xͯkHۡDoG9h$<+q;(P9$N/\jVf;N/zNWUC۹\U#+7^O|S tqGnk`Mn$#pZOKi V׊m*(/. 0ֹ/2ҼW($^IPbxcږi>%ɶ&|xᯌ5kUKłMqs^yYV5@ 1׼[Y4rVQ7c!ul)?_TcYۅ%\~:QLwTFf` OJoֱI}M{4<9[i n u5cmj6ڎ!Jx|H|\ RyWDktG2^5 j:,k ,с+t_[.2A4M 6(VE"'EQEQEQEQEQEQEQEQETI.%_ďW$M7Nш$dsĒǩjHir_Iime)HEhqA/jmnOGc/Դ<hM ނo豓yBU5ɏ31oՎfV7 4L:ҴW?&owSђ E|cZtMnTNA_FitW$jq*ʹwVA.J:=NgúLq9,qQ?P)䢂IP=jڥ􂩟9n>2<xӓŚ [fufwI?-AZ r#XڃW7xcKuK۸CMlۑȮc-yŏp#9S{xP?ɯl"F5u'/ v Si^ɵCv7G$;hZY3tg'WUËXıj 2y]k"d=W?~!YRi_x-QEQEQEQEQEQEQEQEV+hi$H2OJĩCw.R3`>|/_T)`*>}'imvGP8W;yhPy o#I]G{k%˺9)5ZvSO^ZIc#]W¦r~lk-;6ifx*e7EWv]wJmcJNNVF@kZ,g&YFI5*F bczou(UUk>9Xh]:\o];I"~|G՜5+১Vu1;ո~ig៼9?_?AQyWj{|j|Fmu˸{U)>xMoxWQ;3?5Vm>4jk<@}E?һⷅu;ՂCq]ݽbKyD=5ltV>{e,S"-mo 5"ws)נs66g+cw>0Ք~[ts./ ߵaש5R2[A!yz54k.xMP\%` #_zr=ih((((((()ŘI=oyt-&l@HJ]l?j xE$U\|qikCPbWMq'Éj]#4NUМ0?Jk6:=7w1ƈ3 7ѧvhaֿ|su=^OX8~wpk>LBVJ5k51x퍬.+on<;Isr"f[>2ibŚt|0+i+6yzyjsJѰSWjռ5OFBmZkTExr.b xVγa+ح-" (UQLu m6K(MxcǖX+CYaxn7ۻRpG;źd*#k;Pռ P4St9WEb^6yv^4jvu2W`: Z(#{Zi=C[xDbPng5-B)μTQv j2Ǵ V|;r{[xKKv?ZmB.-fIbq)Yx $QeB"Ny-*[ǜk&Ծ+kei-?t+Yxke孔A#D k7'|}us:Hϧ^t/hOhf");s׵E4w,0daa^Ucz&a]B >7o<-@[d5}gjvƟ C iEQEQEQEQEQEQEQA\|UoMk\y"%'MFR}p3_Wx3С X֝a][NpvƤ?GS-k)m.Y!qiMgƫ.M*M?ƻ߃VΟ& f2r^8mj;\_؆kHzG_ʽӌgj6]^Lă%׊jF7IvKZC_k5?wr8ׅEp~;e2u'A\1)xOvmq^[ë~ex!;H6yG>64=Bb-?,~( QEQEQEQEQEQEQET,$N)UWcelB}kվ t-uP-{;tƋ[]_HLVk,q^OA9mm2yS]+?R-uk)m/"YaU|  5'KM'=Sǚd6̻nf샽z<e8E.fiRkK~(3p>T,k?|]9B7 ? _K͒X@||konfQOݦm97$}szP !x6UK(sYk C\\n>|Q}lBMGQף 59j4 㷒:v ?Wc]FCQ^y^yOxYG\֦Mrpj# BےU-x1oK"_\wqDeQɌ4RZσ|U%,,pƀҼCڼ/Ֆf ~t.g^<ϳ lo/m|95M( | [_ ev/3LܜoKQk]: 6a <]K"RH=kt5K lPZVƛrq a 8+WŚ LRosGu &hyCjMT^/Zkvicf?vOŲxwB֙7ן5 NwjW_;uJ%vEx-rY3<֨'d3EX: }S!8ߎi~EaԠ>~7\S:W|]ާ}&Ny3e#'"+^0l>6X4Y=֡r  ~'x#ðJv^=/ÏKPcS m+~(x:?jcYlr}x)ܲ }}yaAYCwT UҊ((((((+?SMn/ep…M|}}f>-nvM/^3_M;~1;y[kc:s UI=Myx#Ŗ7(;3;RxŖקMfϛIpzޥkdrSE"vq^[=JӮ6ڽ2AJqO3_^:F XWiVgW7ţ߻ ^img[Ek(EV^Mze!#0 s6UI֋ˤOBӚ]kD3ۈ|C:/DRk !7?fn/dDu x'Ě*3(2޽VWW+o>&_~U/.'7:&n?y]~i^{URh>QTGV-nzQ1yfdGkz(u+s~*_vZ1j#[f;vX:Ljt.|< tq3zwzrּMߋ>(}X-V[DqJG&| r+>Q%eP1jk^:&uKhktrp8VW~ݦs&f((((((+ž;;HMLMs̀\? k {O}>v^mmحTVC7e^Mж:vuj.-2F E<|?eˋ-6dl4,zUi_j`;r {W=sV<o4f6M"9x Az$#FrTJox [٣ҭ+oz֑i}{oy6rYi#{ƛnEBKWm_^7G'oagmuM 89>DvO F+f?d/Ү^T]cP_WWk:**yoa^ QM.IB[۞ M{-EtH֬69Q0S}k%BH-,,dAֻxŚ$w! X5*") ⻋%9{ 3';Ew𭷄? 4c'dҞE|;tgz*Vg%Ք4L35DƓ,;Gn=+%_QU4]f8U#=E'҉C&Q^ڕ9o5 Qx87ľ#ƻ0Ѯam)Z7enດw? ~2k,o-ﬡ*R 6->."VI>(oheT$^?,M;I,Y#A]Ox~oQrbg^ooa!Qs1Vy]h@;5zKíLhp3W@(((((;W^~ Tkݧ5 |: "n_[*(*N:dSrsw a|z0kzkP)+wc j/kiu,Mz~>$&pAjτ~Q~Ɉ8=kXeX~j> oI$:5Ǽ^)vi5Myxwz&c]-n[|n6{\/&aBB=Hz$Y۴Hkbz X Yz'~G3$2s[KGtE+s=V#EyKu$W"P$ՏbToTsФ ߻aSGҵQel?rLӴ֯Nb? 鱎_Nv%_4ؚ- t\*1f{!{?LXՏirkǩ&vgZ4>yMr@C]Ay4Z>ﬥVGySW"w0Ĩ6[hk1dV81!QߏtZ_5/j knLH-8"^W%e#K(фF}%Cj񯆡O,Am-w \?Kg4\g"HhڂF"cĖߠndӝ*_ ƕzy|358q8WXZKs1csjfk1Z˾\wſsw4qn<Wďː]4((((((ȯ~<{XV˒]R꒡ܷԵ-A46_ #ֲ-o1@Uw n~{Qǵ~=-<3b |ώ벽7&!Tu5kWpxn.$A+حn`gD6 "J,(WzbG?`Yrl)e2Mx_O{ wO by^XxCL /v5q+[98Y~ /GN q]ei/)*?xu';xl攅 I^T|7 D1f}9 "{q^Vw,-C&@$WTkAhV׿h7Q>S3}\qkKm:[$1.I'mͦY6UP*;Wf&0Vms[Iӄs;Ivt71=OL,ed0 SE⏴[B~A蠚'Stom\4R`G8{z֯cv0tP`ڇ CF9ci յQjr#$g> ^&ݶ*A?<9;SlOWZ:k |'2c`2]<][:"NNϯJF>'jwTbdcJZ }+w^~H"81Iף\4|5{Tm#_UxXMw}X+((((({tvS9ƌğa_2Ɠ6Kg_^xgLO21!u gqt.Akw|7Ϧ]m/<,::g~h4&m%aҺ~(xk"[ubGL}+o̺,&7OjZZ//@=)9תM㒅8Y/qs\<xɺPa$AcO5$o[hsK/$.z2[r|yZ~+x]>)j7ggAx" i+5n$#VW0oåj*lH77/^ Ct9t_|Ga#}?k?ɑ_Z]#DAw+WVZ%׊_ 0zQ⻏j;TcҺxW^*Ok?-Nr[WuԺ圂n<;x#7EƯoho4Oפ͢xFfc$W1O~$6icbGZkZƐuy9*IT o h;+!\>2hZeÍ0q,uO4%hB:W7xO[8O/8HsM?H!FyW>> o>O 9A^Z0Ad\V Iq3Xx^cpV~:f/[rZωP}Α>Y+!c!|Wզ6C=@)8Eb{Ӊ:lrzҮ~am3!Ҋ(((((;W SV]#n_<%=) uvG?6@h~+>WYSOgWxh63i,:\3_AVKaZ"E? ڃ:bKO 2^[gHm`|s^p4_|D?M?MȀFp\d^ii:jZķ ~3\Kf|c]p‰EgP3X$ sN,jpsڼᖉ?YRG]7Voi887z.j=SF"⧃naDwVH|gz~G]qOV.{MgVY Zb8'ں1rV&uuv>bȥȮG)>κ 'A_?WIc\+a׺!k3-.Ogm/ XG,5tWK4p^GTP9,p+>!i_c_<}ki#TϨ!=sR J,>&h h(O#41*i\j|#h|,{)7fH¬CK<w5~2xj-gmoRO_ŤwSr c"/x'9 :g-OW{cvZb%B+_Km+~Cgۏ]d-!a¾9wQ| n5 yzd5}?zYMRg^pȬ"4Ka!w}kh&}-@9eɮុ/eLA?Ȯƚ%V"ϭpƋw:/%-u h֟'R=4j~ĖX[lW :j7V0_3>3Z.~!x Z[wH98ֽ+V#4 s^;*]D,:׹+Fu4\<-xՉ+5!NJJKwbo-4F܋z{ױk"/6R(_j._[C 2Fps\2ַ$<s槬$ 7@.HX5T[լfᢶm Wfuow-lFckc$sϪ1777kM͌m9]L^H@XmUyo|cOMw kgivpo[x\5Xƪ}gO e{-]lF_h}(=+E}i|C! 9gְu?M񞋪rZZkmb:|$~5ƟHGae(J|Cڴq[Of?o/.bU x{u+ ϮYC= ƣ<'}eiMRqXc3V]Fw[|qsZ~jFDxf_ƻQR{ K]o$.]hlC_ײl*0BY:|?VCd2|J%w2 Cl/SPXDW`;א3;/W&;RW.ZҊ(#}3vczWkVڷkvϦ6d3Wg4, }*ޟ=LU[m6qܦMjX]B"AYAk;kUD=@}寏:x*OI$׭|&&*(((((V <&,_s('}[@ +ɭjGNh.%&GpHֶ<j\w:%ܗ+k)sI{Q7Z߇NםKzgXXm1)obkpX ]7Qeq `oEݤcuxiö pť0%#j4 ~`n-bF4 ?SL46GEe#FA?Ox]ktGF03^-'$=X6*Ww4:\N]q?V!Q}*iffvZFWڹ/Bκ (#LAwn"ZRzW|OHH FT)ָ C㟉/1٪[„?G?B@j(]T8;Nq^&7ާ'^0á{X״]?R1 gV gmD\&~aڕp}___񭶏ak s-ܻ0thpZd=xIs^EQEQEQEQEQT'1 6`x|ů_i٨K8#QW|{eMJb@In;] ;/ʚ?UKIMJطt@J#Xy5@kx#1so@!A5'孚H(,~_ c }*x>ɩ]%ˮ'r? ZytZOl[Kp~ +_o)-ZR.bŝٷq9>"i{!i{\cQې> Ȭhb!\v<W"tmƖ'k'V{--Լ~VKn/n)cR:&p-杇ʋް'sɫf6ZW{yLTqNԾ%\i#%u/ @ ^c,Xy91S+]F!Zf Y*-IA|u ݵw pqZGXլ@p=EYv_Gko9!PxSҼKkxLK8dY𷇾xqVC{kup:!'v‚8KdU* q?‘HPژ~*xETy{"֎m+ReKApP9t;1ιoN:4vc&s9+L-gW]B8ܟ¼Tx|%!oN-kʷfb[yzcpuO]Y^Ǧ&-\O+~:Ϣ%4c<r8p5;d {eku^>+)Ͻm?oJCs*ך(}kmѫzkh}Nq9ʻ5H^EQEQEQEQEQYz>5} /t{bYg k=Yi UpdE|}Fhn]O`븏_ᶳ]cJ!km5ŶE9#\U*+ {-4WxOZf]>_¼ ߎ:̬ ~D׼y)kd1z5?4Iav֤Vgw{{Zܐ; ʒjNw-q`p \gl#݆FbA OR?:jI{-A~&k5[y#0u,$cH]mVjpN%aj};z[!x;~ė c03of1+(՗崻no5IE61Ut[MSM2I ]^0*Oxm`uijey4KN:H85ھ}iq{B_'yŚ ]>w_QBkY.KAk<()ҡt,+h-l0e@**c6x:C'4W '>0k}&5KZWg[klcm#ci'EtT(?j|5X|rndB- T]ڶZl"P8~n%wd8x/tM2OJJt#T hœ85l^'>it?Q^X*HG<:'Yg"^]}XGѣm='+OuI5G@9et}+>>6k5Ze,OWxƱ<,pRMq%cSr׾1#1+׮bZmD)ɵWX7𯞙wcZSOM,H0H@NL1JFU8k ҷAں}n1LH5(Q+!Tui8Ȳ?V#vB3A1sJ|9g^^E}]׃|l֯t/iW#>Kḳ~_ t?-pan᫧mATsَ+zZn/|Ă㬨< 9qWoP?#Hʺ#)dW#xC՝/٧<`;Nk ìFվn~چ{6I\#~nT~/q7! _X4)"m$y4mNKh$91 ?/ _}yMwQw[y3tV_P8 :(((((u-ꎦF9nzA}t*U.=B-Ṿ* 7FӴ87}jZa|15xW`sWA=cgDg^iiS-ĐD+~}Y5Mnw8xNs=›:PxWKi=F'`ɭU`2 xg[7 pg_ֽcږ}iQ;W|⼔ F1sk *0ʀ7Z{M99)H KVV+"I\b?X/m[ܸHFf'\?<˫iM=:_.+MzaF1ʳ-nY?UZ MxŶ!Vo%U:4O |,V15C gGT|* 4'V_ \nfZe5dQ:^݁ƹ$w.}JUXC+jvOAζ#TsFK;KƔȏ^޼㴅C7//zސNfq"xHxiT3u=EuY[EooQTp*;Ra}/j?Ez;sVG⟿[?}EQEQEQEQEQU̲OFKׯ4]C +P oFnjkbTMWN5s~5=P,?wy&~'1ku} 5Qx1_v~ ߘlKk wFxsI#dL?y׈>I 跗8W++Y 0A'-vӯ [57@e ?VӴ:5=svv[¹\o7Qz \U?o5EC o8n Hs^\ l69o!-CY./[tyKimMqg>HSMsTPӬDKҘ=ƩikVEp/=i$ Ecs.~&w;ִ5[]^%ôI_硫nZ?!!(;dk#z4Bg=t񖣯_^LdXPFW :oH״?GՃNneHӖ栓UѴ3@l kޡqx#IA<5yiEDY#w~w |c,;NCDV/>u` =㵌 $Oeow@:|?Gf{M+kAE ºG!v6?_^ 1PҼg/|=umS^w70^jQGjܼ8zV=īH2YOvq뫲IfYbnC)ȫhɶåEnZYx((((()2z/d*s -I9y*_jMzFZ(Z¾Ծ$K6^J9#$~ k>H\<%IJ6y?{WvvV:[İkZ9h^g2Ӄ`G^ WosT_/G? u/daH;|Q Ed:ɎGhզGyg(x~^Ƽ㝳K 5^Ch67L"gVC`z8-kz_PH@Mx>9^,?/zy6[ꗑ M&q־q2.;D_ݏmf˦<3[Ն8W'eˢk:4MxҴz](7kh wQgt+m8EvatCJORj|2lpXJ;kᯇZ+#37Ax~NV2uh汴_6m^]K}7):jv7GeҐ ~Oҍ T/9Kg}|/=}b|;ahiS)rƼ~{K2/kVZ|k׭kU!N2Pvc.+OWlb^lVJ#}F[Kּ?OoexgF H$WSZ|SM9eSM3Ym{ J%Mѣ_n?_XLӦ-4}2i H >Cފ~\zF]Z ['^@j&ut# @7t=GX2ʻw?ZuDŽ|{uᕙ?6;C|C^x=Cfa,s^EQEQEQEQEQA_$k6^?|af]5 uOv9tOš 4'5|7f*(&t=r87~,JM.n$epp^k 3oks/2R λ\B[ysA)OQֺ?u1TާXc90=L1Pƣy '̈Bi~ eaxv֬Eq,j)Wx#$;4[͍ # ٹ W9S]7m6fHb^y-Ċ3JkǚΦZ\;|ipG] wjz{Wu)ΈARď]:g@R1q^iJ"1ҩg ;Dd690`z 8|E!Tui8Ȳ KI)qHG/Z~R$HH ǿ5zu4s\"Wz>'i>" mrMFolנRQX^'F.3+>\.+; ⦭seᆲ25S\FSVʹ6$.#DuPda$8"o!xNg}*ki,@Xбx{v~ kE?t=wQoᑴ@mgaOXtI{hMy ] B66d%jNYb2I^W^oWkezq^?|> !9XF07~QEQEQEQEQE|C5]?Pa?t'Չ9xdHbϴ, bsMkUY ႀݓ] 2YCWKa *#nâvOQXZ74;:fomkv,W AٲZ0knb͞ED25ZVw kjЬC]F23Uiz֭}b&kч!y׫>wt,˂پ|_cPl=9fҬ y ~_ʴx8bDOEyUTdڼK?^ yY&^7Ω~\s+)RxkźՍIF,j$;H cAxԧTFy"GR`7/ݶehMK|#7/*kAOӭ#Pz™D;#!5=?tʩ*;tPp7 OPsjKVp+>4jS >mqn7_+oVn(^Upd#ǂ3@yl)"Xھ2麲yEp?Ǻ^$w H-9+$cwجjP Pyeş=Zu#3G_K֗2ZȞa3<I|w=`Fz~yo3i [AݹwwFi5':X6$8FA xMg y⻽7K,$*cc? [?|헐uj&`V<"?|Kruݹ%뭃}}!c> Q٢(((((& kgx^w W[O`ͅN=}9ڠwyQn9l f{maiR4fc+̼CD{{{N~7n:fv'N_N,Y,W{QҼ#4 _zg`bpֽ?k?\2"주̄1^x[(/>d⭷/yږW|NԡlM^:]x.'< c X}narq]G_ IJ7e 2خN{BD$^C]_<A-pw4-֮9*zfVMEE^ (> yV>*#HبX0yeJ~ʠ7-ԛm{Pk-ɾz ԑRIX4ڌo4gL&'*sqo@Mb8k!:/Dnu"H*58K6Lc"X j4K?g~l]bڬM] mHͥۂɽQQaSK/jh-׬FR2j6qrcKg=kƾ^*NE״wO<=+l>i:5yIخ_he bD*/#יW1Ck <70s-oC}HͻnH UMka.+>:xYXihiWEᏎaVD_O4Mn :2g` oAKQ|q J>[Z{;ۦٱ)QEQEQEQEQEL: B/#M͜1\yo?¾͂d9ǥxſZxWG/vɰ< M-b7!MzlVV;x@r)ml>hf`*x}Zm?P'BżsޛOÃDy =qx¿Bok2ko--[<lEmI/EQRM,pHʨ$9&U5YGFk?FQyeq( 86(_0ޕxCZ悗{7SW޼_%-ofK .y5^,A ۆG+dI|RGgI;mLK,jLI +2V༷`J_D-LW(q\y#~dE?5<32ohu^únyj7;Z-[Ð?;6~vjO~1\V}Zus%,sj/+zW]x.ħZOHb ʨo/B Hq^q| 4^Nqʦ fE>"+y+)k>24[cfNޣҽxQ+>cZlm~Gq4qs+I+nZ((((()0kω<*lfewvW$j#qJ xO"=W⎹^|k) qs^E&xL?[xy2L֯g4'GPU(O^6Rnzku^GҸOn,$=^uK{[ 5&?>0Lӭ~+g|QMcp,#cjo> o A^#$WRr+uռcx>^M= { <9]7b pB>f>qcW7Kcה.Tާ'Zo~ E$ ˌhI}8UπlGjٟYw0^/^GA bebF\}?W<\m~>d?6zZxn%Z/:>,C9S\7Q&t9=z W|PvI[~UTh]_;CJ_R٘rSXxvkHn_b;^[u 4,̮ x&f%t.yZVo^[8hPC#Hl:@ׅmmvbWPs]x#RъLJ{h.P$Pk| 㛽n("p? Ofu_Ih]) 'q:m9J((((((xOlӘ3FC>x8+ȴwyM렂Km? hO4粑gk 鷚Ov Xu&cy_ I׸\^Z~6*{O8܊HSGZƩ[=֛pۧN}EUimt<g\|ALjk}>& WA vQT@Ҧ#">kA0s\<{s^ t2|~+L!<2659#it$մ>!x[4m=sGQ;{xG¨y]7v3]H ]<73mb.Ҝu5EiX=uF𽍒.ݑ ܊:~l um9/K"2BTÊP3Qqd5>/c.Tvt5nM[×9Y!rUM{5E}+7k7ˣ˟n碷{Ҳ-*T1\*WW7xZ[ɎF:Wl^)e ,R2@A\ΡGREc+):<+/Bk,7vAJXֶ~7bX$l~WꚔF=˅$,rk<c?}q[&Ȅ7JSW6Ǧ[sll MFfI#;WJk6\ Z6]#}\׊&.y~d+{ uqߌ}GivֈXc VQEQEQEQEQEPzW;5 X:/+WZq1%^m3_cj:|d O|O3f9;z_xJ-o퓄9${> zd>(i$;brGZ>giYıƒIu}mcN;Wsc& ex믇^=VrQd^ݤ֙ UV쌛yc?ʬ)R0x,|ahTCz1̽s^sx\{ 1%;b9}kb״}:Y%LVt2 *-^,{k_#nN:Wzcx5umlʷwUJ=K:8A {XPxFeж\qu{^/6"]?i_z%+mz|:T`b8ѝ?uaV%KC|dpNkH#hC Ic]{ęT~Bׯ* 8S>(^:3\2 x~ |27:hjv]i+G$T8+ςEΖK%?ѼoO5Ő9|muGKm`}IT1NEղ1^kFSaN7_@ O߉ɥCW1k֦BRa2;Ҁ t((((()|Ÿ$т=|W|A<>t{5aXf[;UmooP51\?>!Cn:qs^ox%:05 bx@>t$t> /~x+; 9;(xgM%j"c_=,znrp>xO2ގ$f7zteXȘWSA:|v;cƶ3\?iZ}3^ڼM<7ƕ+;#>v:$܏{V4]HxpE]gtp*0>W=O]͎"CMyƯ/MtptȯG_Í/‘1qxF^w9AKER1WKgMkKWߨ܍"T*M6ٵUwj76[תqҗ`T34r"2+[sCU,YrC'BkuxcO쯶lE {/ 1H?[ԍK1>?qOYZO.!gῇÞ)CqMvQEQEQEQEQEQE|L70$y㜊 ^/g܊ys)}yeyWhP5JdH|[^OS /y\] +Wm<7e>m#K';N3y[v(j+1+.Z'."m9q4.Fes\ÏOouD^ I(p})C( W⟅ݥ}%c$?K}FNN+WK,-IMg( wx:*jz+ⲷhFk G+c^ rCklుa#F pcڗ42`GRxŶ^dUQ5ugU"H GYzvcOq V;KAY?k"l;^-,>)~/Oo+UUT` ?0Ўm 7\6*_|&VI= WJ1ҝEQEQEQEQEQEQE5*As_,dFڅx;FKoq^H*y_>|Ix/?oA'{|9\P𪂀k;N43dص~ϺaCԝ~y'Wꚵf7 H9,kt?C':-ܘ,A*=s^oq)4.7PGz󯈿VYxߊ4?Pq E: 񦕪&y߀v u(Ԁ3ßĒh"_&4R ^W FG=iJ =+U𾏭!}5j7u!զ~Y"m#ēEflLtjTҾ/.j%k&_֝_5/)µ>i*VMJNGuOp^&DB;jiMJLbº;_@~35yn}iͽ1oV6k.x%}k<9ͤhZM3*[ [?z[<.,Ƽz+C2鱶b#Z=œ2 > ~<-O4&y74>`lཷKyVHd25x:w"+veITa]T}4ifKnmީAܾBĚŚό|[$2ģ5Ï -onT y[k(((((((ҹOfxvDaRbltjVPOnh :dfοoM PpC3i۬c ؊ƨ 㟴Ӂ;8R*| r}쩹 ,xt xj^&Kk xKº,)hl>Z:Զ;hQ.^Gj+ 6hڎ>ϪE#/4CpbLf%7WF A=+|y;Bkk YU1mF㻵k4I!u"AxQЭIR2qW>|A SXp4ZF>o<ѵl#nrXhCKMN1FGQ(ڎFOݱYZϋI҈\f<[X Ge$vVcJiu=sƞ#[FK=*7,J~fi=>_د3O׼OizYeaL0{΂PIF\l`mҸoEӼ%fM|G מxkߏu/[=ۢnvXGoo4UQwTFa7{o?yi+ >Ycq |WφӅ?,L3Ǩ⺻OXK [v=&//Gq /[.,)b(,l4Rvڳ/cc5e&Jj^َ/ֺ?4zZvIP?|UYE·G&㪹zJՎ`|)Y;$r=EbxEYk4xj5kbڗb[FŋN+WZNEu4riv8B ziwt]:]Z1Z|-k-E[?xHEq^ݵCCsq -,*F,q?|ZyNX1FB7d_&M&-{qq"U?QH@$l4h IDSn\+\6l* k~,(,"5|צ[gCQWpGA_0}U) }k I>".l/Tc;=+ڻW -,"snJ-QEi6Zū[0Wk _6)+Wß]7Ķct)r0 S!IgXd`j(hʞbTM^n!cf,7dj%\e.Z'`R1>][ԏ6rx5ү7 O<1YOq"+k!w"["(9=Mz_è5I1n7_#FWogkuq|jO NծSCb*_4{cY\|GY|ɷֻmk4N8hZvA%Q2H_|Nм4\]tX993e+&ߌ/|>)ngIuS8v t(K2k^P^y?ɱ-hv\N0+ۆ6Yޱk]ȫ`OZ+>%@]џd1¾W4𾊗WHGz`Җ(((((((J|S_X]v>9S_'ZV?4/nxLq([Y[޽jZ(3Epk/_Dq*5yρ|iu纶>Kp+OGַ|rdہ}'Ś.cR 4[kyABۢcՂWDӓQ{i\a&ܖЬj͸W8v+B3Q-gr[@FXcPԬ#/ws*W`+2hN,zd~> ;X_MӛxcHzB^ 1A*"Q*P-dQEZ$ #V'|1aI G.G$ֹFs1=fNVRl(}k9-uXs~((((((()O-`9W'A๷~Wa_Ox6~2ҖU%%<]#(UZXU@',EC'Y(x[G"x-[pk_Ф~bB fŧo _0F]H>F4RSmֶM>Tw`9}ϊx9o'`lZ|%+`[iֺ**P>(]ZY-۪@-_&x]ֵ }tI_ |DZ¸ˮ{קTnbAh2ǁ_<|Tɣ貕^%O/X x/oQӐ嘏}+ >L!Q@QEQEQEQEQEQEQEQEQE!+;"9}oèF27{[[/-aoa_Exem`TN7}+҇AKHyx3Kִ{á+&>l1߅fGf9o0pGTy /zt[Wyr -<+V,*<I? iX|t(=*դ7qIꧡ+Ŀ5}KKm(g +# H aT 7 A(d;xY̋$%1ι^y;Ld ' ^\B"l2=qEQQIrEǰZ,+x"pP3}+KX@6ƁGSH8ERMxz׶ZeshP:R(x6N@!W|(oNuWrDC{WјA5_W?'gBT̥C޻/|EC4 lTQG5?yncVSE gŽsIlmInWx͗.E_f=5)  `:~5reܟE$t ( TQETM,,qVc+ǼwK2X.n@~Umwq#{?;Y#!+֕* ?QEQEQEQEQEQEQEQEQEQER`TSC4Rtad|Ԍ*nycx#V$'F]gE%i|:ne[W1 [5KEW^ֿ vQ$_/7.$|ڽss^2xk×Z?: 5b牙RcNъQKᆭHZXW׾x7^_fSd_{դ K$mXdi:zp<Ҿvau~9V`ׯ,2A#}XHS&kĶ2Ga]Gmj>(EsdEe w(4 )$+gĽвp3HpFNO֭x/6YR6',9j'Ҽ+nX[(`>iHqREQEQEQEQEQEQEQEQEQEQER0x wW^PI>9x_4z+zG s^6E=ū#s{m)oBc~>_tf%)ʶ◵QY!+) O^νn#/`8'Ʃy:5ɂ|ֽy2}G?fh[yQ}=v[u".2ɞ^{~hGu}J((T Q*J((((((((((((R0kt?}f#0>( {h^CϋzH5'#<[QR^g+м3rme>: \`{S$8q\εh?ڵ8wk̵-ѥzIҼ\oV[U_99Ğ%rڼ1&Y<+KH.5/˅i(5p6,QT`U8((((((((((((1H@KEHW֑N̼כFO%<:f\)}-FqH|57KFQEQEQEQEQEQEQEQEQEQEQEQEQEQE*JZC0?L%|%K9j5?NiD}뗿6Pʽ;uw6_/Ys=up1U-86zgя?Y<5/Ɣh,'gԿ?zz\WK?[6Wr}pKښN0u\N_KHYs]$qh4U_E&((((((((((((((((QE`S4QO"ȣȋy'*LQ(((((((((((((((((((((((((((((`!+=_1^) X}`JxoEgg?88qRi*5\ȁCCJ@6HnbokPUS?*H/@d"y3xSګmf_f>f6Y,&lr>,nȇn 5d o@˧jy^ >e~ ڄ8$kxĒk_DOTc "zZ:&RO rqj-ۻ4诃mܓJ#mZ6ʿAH%M~ws/q7my\|C;>>ϾJ>Wvkv? ;5ɠ"y #"yeHnn~Kȏ5뿃l~G2Ԭyd;dcwzRɒxOGX*GרC(T Xb(Fi>춂nc-8 2M=jDh2`eF h2o_$xQ6_G]Wv1.F^+ye#P`Ք N^K2jY3]j^MeG+|6i l rn4<mN kJcalTO 1 IX<\bL쯬M|_ӟ$2${֓?*eMuǵOݠ{|lnA#c WyMyb<&V]܅_h. w\UY^eK=x_LCY$Ǒt+rzx͂OaVq˝QV=?,H_ɲםUQm'Or'q}C95K8~E{wӚM4ļ9m5^>GoMosC}o<73ۉ./hd/x{/E / f{b/2lO~Ebl <7WS~~Aa;qP"}/&=(!ثaUvX~QcKj+vCH ^ m{lO,N4t}ơ^l7=cQ=c)i7YRWU s:V9 CqNp c?8 9Y={:wF~=稉~}ܓmx'dGjrʾTfʞtۗʛUuU7 }ٞ˛C+vܭuP /<7}Ă_'~Ebl"G".xn.1r۵8O&\tqz6okȩT<ᎎ/6F3Xèi+v {0c.ٞX} yZ4\8MC:4ӸA3MTGn9nLY8oLt29lLu=͔3m'L_̠mR1yܠpҘƂ а z)`z)=8o˱8y^ ^ R+XyFaR`9N']KKAJ{b/&b4aR"k  4^ ^)#'4\B-2F֙^ -ĉ: {N@ha/pѶ'ĂSCzp>O^l聯K3t.9lK 335h msH gƠeL;R4SiƠe7 Unu]7 Qf^3]=oخ8q &hR{MP_<7Ă_P>`M$ [+˸#k"a [/^ԧʩkx๹lWyf~1g=*aҾ/.zM8t=ҮenLXSwћȶޱkC7w/Vx{'ovޱj,zuw ~fϢUY4gl}F~e°"WX=tźckAu?q>/LT(   =Document Word.Document.80.Microsoft Word Document>Document Word.Document.80.Microsoft Word Document?Document Word.Document.80.Microsoft Word Document~/ 0DArialcawmantt8 0DTahomacawmantt8 0" DTimes New Romantt8 00DWingdingsRomantt8 0@DVerdanasRomantt8 0"PDCourier Newmantt8 01`DTimesr Newmantt8 0 pDHelveticawmantt8 0 "DSymbolcawmantt8 0 C0.  @n?" dd@  @@`` ,$` J   () *  - <  :  Bi   $ 444<9<(   :+'1o!)10> 63;<?DBCDEFGH IJKL MN O P QRSTUVW XY Z[\]^_ `abSc defghijklmnopqrstuvwxyz{|}~_2$dƠ1nR$Nт۳ Y*2n2$+=_1$"$!0{\  AA1? 3ff@338; ʚ;J%5ʚ;g4dddd 0ppp@ <4dddd@k 0td8 <4BdBd@l 0tg4<d<dX 0p p %0___PPT10 ___PPT9nnIt>"ՌPNG  IHDR +tsRGB PLTEfffm cmPPJCmp0712 7tRNS@fIDATWc`  SP1H $XLIENDB`? -O  =.]*Machine-Level Programming II: Control Flow++ FToday Condition codes Control flow structures Next time Procedures r*    @bCondition codesSingle bit registers CF Carry Flag SF Sign Flag ZF Zero Flag OF Overflow Flag Implicitly set by arithmetic operations addl Src,Dest C analog: t = a + b CF set if carry out from most significant bit Used to detect unsigned overflow ZF set if t == 0 SF set if t < 0 OF set if two s complement overflow (a>0 && b>0 && t<0) || (a<0 && b<0 && t>=0) Not set by leal instruction9($.!E,   (    ,!",  >v AcSetting condition codeslExplicit setting by compare instruction cmpl Src2,Src1 cmpl b,a like computing a-b without setting destination CF set if carry out from most significant bit Used for unsigned comparisons ZF set if a == b SF set if (a-b) < 0 OF set if two s complement overflow (a>0 && b<0 && (a-b)<0) || (a<0 && b>0 && (a-b)>0)(G.I3(0,        " 3>( BdSetting condition codesExplicit setting by test instruction testl Src2,Src1 Sets condition codes based on value of Src1 & Src2 Useful to have one of the operands be a mask testl b,a like computing a&b without setting destination ZF set when a&b == 0 SF set when a&b < 0&%3-d%',    t%l*CeReading condition codesKSetX Instructions Set single byte based on combinations of condition codes @99HDfReading condition codesSetX Instructions Set single byte based on combinations of condition codes One of 8 addressable byte registers Embedded within first 4 integer registers Does not alter remaining 3 bytes Typically use movzbl to finish job V]n]n$EgJumpingLjX Instructions Jump to different part of code depending on condition codes @<<KFhConditional branch exampleGiConditional branch exampleHj. Do-While loop exampleIk6 Do-While loop compilationJl<General  Do-While translationKm. While loop example #1Ln>Actual  While loop translationMo6General  While translationNp$ For loop exampleOqipwr computation  Pr$ For loop exampleQs For  While $ Rt, For loop compilationSuSwitch statementsTvJump table structureUwSwitch statement exampleVxAssembly setup explanationySymbolic labels Labels of form .LXX translated into addresses by assembler Table structure Each target requires 4 bytes Base address at .L57 Jumping jmp .L49 Jump target is denoted by label .L49 jmp *.L57(,%eax,4) Start of jump table denoted by label .L57 Register %eax holds op Must scale by factor of 4 to get offset into table Fetch target from effective Address .L57 + op*4;2 %(-       % W >+DmWy Jump tableXzSwitch statement completion  Puzzle What value returned when op is invalid? Answer Register %eax set to op at beginning of procedure This becomes the returned value Advantage of Jump Table Can do k-way branch in O(1) operations  (R'         ;   CY{ Object codeSSetup Label .L49 becomes address 0x804875c Label .L57 becomes address 0x8048bc0 J  Z| Object code|Jump table Doesn t show up in disassembled code Can inspect using GDB gdb code-examples (gdb) x/6xw 0x8048bc0 Examine 6 hexadecimal format  words (4-bytes each) Use command  help x to get format documentation 0x8048bc0 <_fini+32>: 0x08048730 0x08048737 0x08048740 0x08048747 0x08048750 0x08048757 ;(fk ;("k,F[}!Extracting jump table from binarybJump table stored in read only data segment (.rodata) Various fixed values needed by your code Can examine with objdump objdump code-examples  s --section=.rodata Show everything in indicated segment. Hard to read Jump table entries shown with reversed byte ordering E.g., 30870408 really means 0x080487306)+& \6)+  & ; P.<\~Disassembled targets]Matching disassembled targets^Sparse switch example~Not practical to use jump table Would require 1000 entries Obvious translation into if-then-else would have max. of 9 tests@!C!C_Sparse switch codeOCompares x to possible case values Jumps different places depending on outcomesPP`Sparse switch code structure6Organizes cases as binary tree Logarithmic performance77a SummarizingC Control if-then-else, do-while, while, switch Assembler control Jump & conditional jump Compiler Must generate assembly code to implement more complex control Standard techniques All loops ! do-while form Large switch statements use jump tables Conditions in CISC Machines generally have condition code registers Conditions in RISC Use general registers Special comparison instructions8 Z&ZZZ Z>ZZBZZ1ZZ6Z &   >  " 7$$((1,,00644/bcdefghij k l m n opqrstuvwxyz{|}~ !"i   0` .T3f` T3f3f` 999MMM` lff3f3޲` eoHff33Ҷ` ff!` T3f3fffq` T3f3fff[>?" dd@ ?nPd@ d " @ ` n?" dd@   @@``PR   @ ` `$p>>  ]U ,(  , , s *ɉ "`0  T Click to edit Master title style! ! , c $̉ "@0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  , c $4щ ":   AEECS 213 Introduction to Computer Systems Northwestern University2B0(2* 3 3 , Nff??"` , Nff??"` F   ," , Nff??" , Nff??"  , Nff??"  , Nff??"`  , c $pډ "ce  f*"0(2Z , B޽h))? ? T3f3fff[ 0___PPT10.Zj&___PPT92p22 1_aqualab01v  0  0d(  0~ 0 Hff??"A 0 0B "    A Click to edit  0 <E "   T Click to edit Master title style! !,T   0 "  0 TIff??"  F 0  0 TpLff??"  F 0 ~  0 Hff??"A~  0 Hff??"A  0 RAk B?nwu-seal-gray"@P%  0 c $ Q "`0   !Fabin E. Bustamante, Spring 2007H"0(2 3& 3& 3Z 0 B޽h))? ? T3f3fff[80___PPT10.Zj&( 0 d8(  d  d Nyy .   v* a11aa d NԢyy 2 .  x* a11aad d c $ ?  4 d Nyy 9 3  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S d Tyy q   v* a11aa d Tåyy q2   x* a11aaH d 0ηo~ ? 3380___PPT10.eۡp (     N yy .    v* a11aa  N yy 2 .   x* a11aa  TD yy q    v* a11aa  T< yy q2    x* a11aaH  0ηo~ ? 3380___PPT10.dz͓$ 0  $(  r  S PZ03  r  S [0    H  0޽h ? T3f3fff[80___PPT10.p  0   $(   r  S h,`0   r  S @,@0  H  0޽h ? GGG  0 0$ $(  $ r $ S ,`0   r $ S ,@0  H $ 0޽h ? GGG  0 @( 0(  ( r ( S ,`0   ~ ( s *,@0  H ( 0޽h ? GGGL  0 P, (  , r , S ,`0   r , S ,@0  ` ,  c $A ??l H , 0޽h ? GGG  0 `0 E(  0 r 0 S $0,`0   r 0 S 0,@0   0 B28c?P00@ `%eax0  0 B78c?p00` `%edx0  0 B;8c?00 `%ecx0  0 BX@8c?00 `%ebx0  0 BD8c?00  `%esi0   0 B@I8c? 00  `%edi0   0 <hM8c? 00  `%esp0   0 <Q8c?0 00  `%ebp0   0 BtV8c?P0@ ?%al 0   0 B(Z8c?P@ ?%ah 0  0 BY8c?p0` ?%dl 0  0 B]8c?p` ?%dh 0  0 BXe8c?0 a%cl 0  0 B i8c? a%ch 0  0 Bm8c?0 a%bl 0  0 Br8c? a%bh 0 ? 0 NLwwawa1?"` #  )int gt (int x, int y) { return x > y; }*0 *H 0 # lp}wawa? 1?  9ymovl 12(%ebp),%eax # eax = y cmpl %eax,8(%ebp) # Compare x : y setg %al # al = x > y movzbl %al,%eax # Zero rest of %eaxz0 z~jB 0 @ BD8c?   0 <8c?7 vx QNote inverted ordering!0  0 <܊8c? Z  >Body0 H 0 0޽h ? GGGd  0  p4 (  4 ~ 4 s *,`0   ~ 4 s *\,@0  ` 4  c $A ?? H 4 0޽h ? GGG  0  8 +(  8 r  8 S @,`0   e 8  f,wawa?1?"`p  Iint max(int x, int y) { if (x > y) return x; else return y; }J0 J68 8 # lǬwawa? 1?`0   _max: pushl %ebp movl %esp,%ebp movl 8(%ebp),%edx movl 12(%ebp),%eax cmpl %eax,%edx jle L9 movl %edx,%eax L9: movl %ebp,%esp popl %ebp ret0 d 8 <8c?0  8 HxЬ8c?g >Body0 d 8 <8c? `@ 8 HԬ8c?P @Set Up0 d  8 <8c?    8 H ڬ8c?p W  @Finish0 H 8 0޽h ? GGG]   0   < (  < ~ < s *,`0   \ < # lwawa? 1?P pp  movl 8(%ebp),%edx # edx = x movl 12(%ebp),%eax # eax = y cmpl %eax,%edx # x : y jle L9 # if <= goto L9 movl %edx,%eax # eax = x L9: # Done:0   xx <  f\wawa?1?"`@  y}int goto_max(int x, int y) { int rval = y; int ok = (x <= y); if (ok) goto done; rval = x; done: return rval; }6~0 g  d < <8c? @  < H8c? C x$Skipped when x y80  < s *,    C allows  goto as means of transferring control Closer to machine-level programming style Generally considered bad coding style @1*'1*' tH < 0޽h ? GGG   0L0 !@ (  @  @ T)wawa1?` d C Code <00 Z0 4aYi @ N,wawa1?"`S  tint fact_do (int x) { int result = 1; do { result *= x; x = x-1; } while (x > 1); return result; }u0 uHX% @ Tx;wawa1?` 8d  Goto Version > 08 Z0  4aYi @  f>wawa?1?"`p   1wint fact_goto(int x) { int result = 1; loop: result *= x; x = x-1; if (x > 1) goto loop; return result; }Nx0 )0H >~ @ s *E,`0   L @ s *F,w   Use backward branch to continue looping Only take branch when  while condition holdsVVH @ 0޽h ? GGGw    0L0   D  (  D % D T]wawa1?0@4  Goto Version > 08 Z0  4aYi D  fhwawa?1?"`P   Fzint fact_goto (int x) { int result = 1; loop: result *= x; x = x-1; if (x > 1) goto loop; return result; }N{0 ,0Z >~ D s *to,`0   2 D s *p, PP  Registers %edx x %eax result.  , 4aYiy D # lrwawa? 1?P  _fact_goto: pushl %ebp # Setup movl %esp,%ebp # Setup movl $1,%eax # eax = 1 movl 8(%ebp),%edx # edx = x L11: imull %edx,%eax # result *= x decl %edx # x-- cmpl $1,%edx # Compare x : 1 jg L11 # if > goto loop movl %ebp,%esp # Finish popl %ebp # Finish ret # Finish0 p        D Twawa1?`   Assembly > 08 Z0  4aYiH D 0޽h ? GGG    0L0  | H  (  H  H T8wawa1?pXt C Code <00 Z0 4aYi H NXwawag ?"`` P do Body while (Test);N0  % H Tįwawa1?@` D  Goto Version > 08 Z0  4aYiz H  fǯwawa?g ?"``@ @N &loop: Body if (Test) goto loopr'0  ~ H s *(ϯ,`0   z H s *`Я,P  $Body can be any C statement Typically compound statement: Test is expression returning integer = 0 interpreted as false 0 interpreted as true%0  !  4 aYi H T֯wawag ?"` (  pf{ Statement1; Statement2; & Statementn; }40       & H H 0޽h ? GGG   0L0 L &(  L  L Twawa1?  C Code <00 Z0 4aYi L N wawa1?"`S  tint fact_while (int x) { int result = 1; while (x > 1) { result *= x; x = x-1; }; return result; }u0 uH U3 L Twawa1?p @t First Goto Version >08 Z0  4aYi L  fwawa?1?"`p   int fact_while_goto (int x) { int result = 1; loop: if (!(x > 1)) goto done; result *= x; x = x-1; goto loop; done: return result; }0 2l'% ~ L s *,,`0    L s *., `  TIs this code equivalent to the do-while version? Must jump out of loop if test failsUUH L 0޽h ? GGG   0L0 :2P (  P  P TKwawa1?  C Code <00 Z0 4aYiu P NNwawa1?"`S  qint fact_while(int x) { int result = 1; while (x > 1) { result *= x; x = x-1; }; return result; }r0 r6U4 P T\wawa1?` @d Second Goto Version >08 Z0  4aYi` P  f>wawa?1?"`p 6 int fact_while_goto2 (int x) { int result = 1; if (!(x > 1)) goto done; loop: result *= x; x = x-1; if (x > 1) goto loop; done: return result; }0 K,Z!: r P S k,`0    P s *m, 0  zJUses same inner loop as do-while version Guards loop entry with extra testKKH P 0޽h ? GGG   0L0 N F  T  (  T  T T\wawa1?p` t C Code <00 Z0 4aYi  T N,wawag ?"`0$ }while (Test) BodyN0  T T wawa1?p   Do-While Version >08 Z0 4aYi T  fTwawa?g ?"``   'A if (!Test) goto done; do Body while(Test); done:B0    ,  r  T S ,`0   % T Tlwawa1?   Goto Version > 08 Z0  4aYi T  fdwawa?g ?"` p@  _I if (!Test) goto done; loop: Body if (Test) goto loop; done:J0   ,$ pB  T HDԔ?vB  T NDԔ?P 0 H T 0޽h ? GGGO   0L0   X w (  X ~ X s *γ,`0   H X s *,<   lAlgorithm Exploit property that p = p0 + 2p1 + 4p2 + & 2n 1pn 1 Gives: xp = z0 z1 2 (z2 2) 2 & (& ((zn  12) 2 )& ) 2 zi = 1 when pi = 0 zi = x when pi = 1 Complexity O(log p) q(                          bG" X  fسwawa?1?"`p L/* Compute x raised to nonnegative power p */ int ipwr_for(int x, unsigned p) { int result; for (result = 1; p != 0; p = p>>1) { if (p & 0x1) result *= x; x = x*x; } return result; } 0 >. xF p ` X   p `@xr X  HH2'8c?p `  X  H8c?  Zn 1 times* 0  X 08c?"`` 0 K)Example 310 = 32 * 38 = 32 * ((32) 2) 2*0 2          H X 0޽h ? GGG  0 xp\ (  \ r \ S r,`0    \  ftwawa?1?"`p  J/* Compute x raised to nonnegative power p */ int ipwr_for(int x, unsigned p) { int result; for (result = 1; p != 0; p = p>>1) { if (p & 0x1) result *= x; x = x*x; } return result; }0 >. x` \  c $A ??  H \ 0޽h ? GGG   0L0    ` 2 (  ` r ` S HX,`0   > ` N wawag ?"`P ; "for (Init; Test; Update ) Bodyt#0 2w `  fwawa?1?"` 8  w int result; for (result = 1; p != 0; p = p>>1) { if (p & 0x1) result *= x; x = x*x; }x0 xs  ` Tġwawa1? \  General Form > 08 Z0 4aYi ` H8c?`   @Init 0  `  `ԧwawa?1?"` `Pm  D result = 1 0   ` <8c?` `  @Test 0   `  `wawa?1?"` p  @p != 00   ` <|8c?` 0  BUpdate 0   `  `4wawa?1?"` p  D p = p >> 1 0    ` <8c? @@  @Body 0   `  `wawa?1?"` ` r8 { if (p & 0x1) result *= x; x = x*x; }90 9H ` 0޽h ? GGG  0L0   0 d * (  d r d S ʴ,`0   dB d <p? > d N@̴wawag ?"`{ "for (Init; Test; Update ) Bodyt#0 2_ d NXմwawag ?"`p + -Init; while (Test ) { Body Update ; }.0  ^B d @ 6p? % d TTwawa1?   Goto Version > 08 Z0  4aYi d  ftwawa?g ?"`0 3 r\ Init; if (!Test) goto done; loop: Body Update ; if (Test) goto loop; done:]0     ,/    d Twawa1?p t While Version >08 Z0 4aYi   d T wawa1?pPpt  For Version > 08 Z0  4aYi  d Twawa1? Do-While Version >08 Z0 4aYi   d  fwawa?3g ?"`  gW Init; if (!Test) goto done; do { Body Update ; } while (Test) done:X0     ;^B  d 6p?pP 0 H d 0޽h ? GGGi  0L0 @h (  h r h S l4,`0   F    h     h  B<6g ?"` c  @Init 0  h   `9wawa?g ?"`   D result = 1 0  F   h     h  61g ?"`m  @Test 0  h   `\Awawa?g ?"`  @p != 00 F P Z  h  P Z  h  6 8g ?"`P pp BUpdate 0   h   `Hwawa?g ?"`sZ D p = p >> 1 0    h <HL8c?@ @@`  @Body 0   h  `Owawa?g ?"``  r8 { if (p & 0x1) result *= x; x = x*x; }90 9% h TPQwawa1?  Goto Version > 08 Z0  4aYiF h  f`wawa?g ?"`   o  \ Init; if (!Test) goto done; loop: Body Update ; if (Test) goto loop; done:]0    ,/  h  fTqwawa?g ?"`0@  Z result = 1; if (p == 0) goto done; loop: if (p & 0x1) result *= x; x = x*x; p = p >> 1; if (p != 0) goto loop; done:~0 %R, X dB h <p?`@ `H h 0޽h ? GGGm  0L0 Pl (  l r l S ,`0    l S ~܇wawa1 ?, h  Implementation options Series of conditionals Good if few cases Slow if many Jump table Lookup branch target Avoids conditionals Possible when cases are small integer constants GCC Picks one based on case structure Bug in example code No default given Y" Y  "  : l Nwawa1?"``p  "typedef enum {ADD, MULT, MINUS, DIV, MOD, BAD} op_type; char unparse_symbol(op_type op) { switch (op) { case ADD : return '+'; case MULT: return '*'; case MINUS: return '-'; case DIV: return '/'; case MOD: return '%'; case BAD: return '?'; } } #0 #H)H l 0޽h ? GGG  0 ME`p (  p r p S ,`0    F  ` p  ` T p`p p # p`p p  <8c?`p H Code Block 0 0   p  H8c?p`G BTarg0: 0 T p p # p p  <8c? H Code Block 1 0    p  HL8c?p BTarg1: 0 T p@P   p # p@P   p  <8c?@P  H Code Block 2 0    p  H8c?p@'  BTarg2: 0 ,T    p #   p  < 8c?  pCode Block n 180   p  Hp8c? g \Targn-1:8 0  p  B 8c?   F " " "  0 F `  p  P  p  BX8c?  ATarg0 0  p  B8c? p ATarg1 0  p  Bt8c?p ` ATarg2 0  p  BX8c?  [Targn-180  p  B8c?`  F " " "  0  p  H(8c?`w Yjtab:0 2 p  fwawa?1?"` `   target = JTab[op]; goto *target;!0 !,   p  f wawa?1?"``  switch(op) { case val_0: Block 0 case val_1: Block 1 " " " case val_n-1: Block n 1 }k0    b p H 8c?@R` G Switch form 0   p H 8c? `  OApprox. translation 0  p H  8c?@0 ` F Jump table 0   p H 8c?0 H Jump targets 0  H p 0޽h ? GGG   0L0   pt (  t r t S  ,`0     t S ~# wawa1 ?,@ D   GBranching possibilities t T& wawa1? @  jSetup:(00 Z4aYi t # l/ wawa? 1? [ unparse_symbol: pushl %ebp # Setup movl %esp,%ebp # Setup movl 8(%ebp),%eax # eax = op cmpl $5,%eax # Compare op : 5 ja .L49 # If > goto done jmp *.L57(,%eax,4) # goto Table[op]0    04 t TB wawa1? 0 8Enumerated values ADD 0 MULT 1 MINUS 2 DIV 3 MOD 4 BAD 5B0 '0 '`hh t NP wawa1?"``P b  typedef enum {ADD, MULT, MINUS, DIV, MOD, BAD} op_type; char unparse_symbol(op_type op) { switch (op) { " " " } }0 H)'H t 0޽h ? GGG  0L0 x <(  x ~ x s *e ,`0   ~ x s *f ,@0   H x 0޽h ? GGG   0L0   | 4 (  | r | S @} ,`0   , | Tl wawa1? &  8Enumerated values ADD 0 MULT 1 MINUS 2 DIV 3 MOD 4 BAD 5B0 '0 ' ` | # lx~ wawa? 1?`C  .section .rodata .align 4 .L57: .long .L51 #Op = 0 .long .L52 #Op = 1 .long .L53 #Op = 2 .long .L54 #Op = 3 .long .L55 #Op = 4 .long .L56 #Op = 50   | TD wawa1?h  rTable contents(00 Z4aYi | # l wawa? 1?V  .L51: movl $43,%eax #  + jmp .L49 .L52: movl $42,%eax #  * jmp .L49 .L53: movl $45,%eax #  - jmp .L49 .L54: movl $47,%eax #  / jmp .L49 .L55: movl $37,%eax #  % jmp .L49 .L56: movl $63,%eax #  ? # Fall Through to .L490      (H | T wawa1?, 0 xTargets & completion(00 Z4aYiH | 0޽h ? GGG  0 D< (   ~  s *h ,`0   ~  s *d ,@0     # l wawa? 1?  H.L49: # Done: movl %ebp,%esp # Finish popl %ebp # Finish ret # FinishI0 IP HxPH  0޽h ? GGG  0  (   ~  s * ,`0   ~  s *` ,@0     # l wawa? 1?j  95 08048718 : 8048718: 55 pushl %ebp 8048719: 89 e5 movl %esp,%ebp 804871b: 8b 45 08 movl 0x8(%ebp),%eax 804871e: 83 f8 05 cmpl $0x5,%eax 8048721: 77 39 ja 804875c 8048723: ff 24 85 c0 8b jmp *0x8048bc0(,%eax,4) 60 6 +&<H  0޽h ? GGG  0  <(   ~  s * ,`0   ~  s * ,@0   H  0޽h ? GGG  0 H@ (   ~  s *4! ,`0   ~  s * " ,@0     # lp# wawa? 1? " Contents of section .rodata: 8048bc0 30870408 37870408 40870408 47870408 0...7...@...G... 8048bd0 50870408 57870408 46616374 28256429 P...W...Fact(%d) 8048be0 203d2025 6c640a00 43686172 203d2025 = %ld..Char = % & 0 &g>w4H  0޽h ? GGG  0 x (   r  S L ,`0   D  s *M , 8   X movl %esi,%esi does nothing Inserted to align instructions for better cache performance*YJ,J  # lR wawa? 1?0  v 8048730: b8 2b 00 00 00 movl $0x2b,%eax 8048735: eb 25 jmp 804875c 8048737: b8 2a 00 00 00 movl $0x2a,%eax 804873c: eb 1e jmp 804875c 804873e: 89 f6 movl %esi,%esi 8048740: b8 2d 00 00 00 movl $0x2d,%eax 8048745: eb 15 jmp 804875c 8048747: b8 2f 00 00 00 movl $0x2f,%eax 804874c: eb 0e jmp 804875c 804874e: 89 f6 movl %esi,%esi 8048750: b8 25 00 00 00 movl $0x25,%eax 8048755: eb 05 jmp 804875c 8048757: b8 3f 00 00 00 movl $0x3f,%eaxX0 **H5<5<5 H  0޽h ? GGG<   0    | (   ~  s * ,`P     # l wawa? 1?    8048730: b8 2b 00 00 00 movl 8048735: eb 25 jmp 8048737: b8 2a 00 00 00 movl 804873c: eb 1e jmp 804873e: 89 f6 movl 8048740: b8 2d 00 00 00 movl 8048745: eb 15 jmp 8048747: b8 2f 00 00 00 movl 804874c: eb 0e jmp 804874e: 89 f6 movl 8048750: b8 25 00 00 00 movl 8048755: eb 05 jmp 8048757: b8 3f 00 00 00 movl0 $     e  # l wawa? 1?P  MEntry 0x08048730 0x08048737 0x08048740 0x08048747 0x08048750 0x08048757F0 <80 ZHH`jB  BD8c?@` jB  BD8c?`@0 jB  BD8c?@@` jB  BD8c? @0 jB  BD8c? @` jB  BD8c?@ @` H  0޽h ? GGGs  0L0   (   ~  s * ,`0   ~  s * ,@0   W  N8 wawa1?"`  ]/* Return x/111 if x is multiple && <= 999. -1 otherwise */ int div111(int x) { switch(x) { case 0: return 0; case 111: return 1; case 222: return 2; case 333: return 3; case 444: return 4; case 555: return 5; case 666: return 6; case 777: return 7; case 888: return 8; case 999: return 9; default: return -1; } }^0 ^,DH  0޽h ? f33f3.   0L0  V(   r  S  ,`0   r  S  ,@0   ;  N wawa1?0   movl 8(%ebp),%eax # get x cmpl $444,%eax # x:444 je L8 jg L16 cmpl $111,%eax # x:111 je L5 jg L17 testl %eax,%eax # x:0 je L4 jmp L14 . . .0  Dt  N wawa1?p& iy . . . L5: movl $1,%eax jmp L19 L6: movl $2,%eax jmp L19 L7: movl $3,%eax jmp L19 L8: movl $4,%eax jmp L19 . . .z0 z         DtH  0޽h ? f33f3.@ ! 0L0 ?? PR V?(   r P S  ,`0   r Q S  ,@0   *>8 0.  R 0. N 0p6    0z @ B  B 3 rDo11?p`     f(  jJ11?0` 56  @-1"0 ZN 0p6     P j B  B 3 rDo11?p`     f  jJ11?0` 56  @-1"0 ZN 0p6     j B  B 3 rDo11?p`     f  jJ11?0` 56  @-1"0 ZN 0p6     j B  B 3 rDo11?p`     f8!  jJ11?0` 56  @-1"0 ZB  B 3 rDo11? : *B  B C xDo11?P* B   3 rDo11? *P B   3 rDo11?P  J B   3 rDo11?  J B  B 3 rDo11?  J B  B 3 rDo11?` :P J B   3 rDo11?z ` Z B   3 rDo11?` z B   3 rDo11? z p B  B 3 rDo11? Z JB  B 3 rDo11? : *B  B 3 rDo11?z j B  B 3 rDo11?@z @j B  B 3 rDo11?0 z 0 j B  B 3 rDo11?z j B  B 3 rDo11?0 0 B ! B 3 rDo11? B " B 3 rDo11?@ @  N .  #  . 2 $  C xx* ̙jJ11? n  A444"0 Z2 %  C xP. ̙jJ11?`p A111"0 Z2 &  C x1 ̙jJ11? p@ A777"0 Z2 '  C x<5 ̙jJ11? ?0"0 Z2 (  C x9 ̙jJ11?`  A222"0 Z2 )  C xh< ̙jJ11?t "  A555"0 Z2 *  C x@ ̙jJ11?6 A888"0 Z2 +  C xC ̙jJ11?p    A333"0 Z2 ,  C xlG ̙jJ11? n  A666"0 Z2 -  C xK ̙jJ11? .  A999"0 Z .   fN  jJ11?;_ @5  ?0"0 Z /   fpR  jJ11? ?1"0 Z 0   fV  jJ11? 4  ?4"0 Z 1   fY  jJ11? *%  ?7"0 Z 2   ft]  jJ11? T *  ?5"0 Z 3   f a  jJ11?`T e*  ?8"0 Z 4   fd  jJ11? j  ?9"0 Z 5   fxh  jJ11?T *  ?2"0 Z 6   f$l  jJ11? j  ?3"0 Z 7   fo  jJ11?  ?6"0 Z 8   f|s  jJ11?*  E<(0 Z 9   f(w  jJ11?0 go  Z<0 Z :   fh{  jJ11?P   E=(0 Z ;   f3  jJ11? *0  E>(0 Z <   fd  jJ11?  O E=(0 Z =   f|  jJ11? :  E<(0 Z >   f,  jJ11? :0 E>(0 Z ?   fL  jJ11?  _ E=(0 Z @   f8  jJ11?u G:  E<(0 Z A   f  jJ11?iu :  E>(0 Z B   f  jJ11? P  E=(0 Z C   f  jJ11?@5w E<(0 Z D   f  jJ11?5 E>(0 Z E   f  jJ11?IZ E=(0 Z F   f  jJ11?   Z<0 Z G   fH  jJ11?   E=(0 Z H   fD  jJ11? 7   Z<0 Z I   fز  jJ11? W  E=(0 Z J   f̶  jJ11?   Z<0 Z K   f  jJ11?   E=(0 Z L B  f  jJ11? o  Z<0 Z M B  f  jJ11?P o  E=(0 Z N B  f  jJ11?  Z<0 Z O B  f  jJ11?Y  E=(0 ZH  0޽h ? f33f3 " 0 0 *(   r  S  ,`0   x  c $ ,@0   H  0޽h ? GGG ] 0 P(  X  C d     S d9 3    H  0ηo~ ? 3380___PPT10. e, b 0 @ (   X  C d     S 8d9 3    H  0ηo~ ? 3380___PPT10.6@+' c 0 P (   X  C d     S pd9 3    H  0ηo~ ? 3380___PPT10.6@+' d 0 ` (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.6@+' e 0 p (   X  C d     S ,-d9 3    H  0ηo~ ? 3380___PPT10.6@+' f 0  (   X  C d     S 䤬d9 3    H  0ηo~ ? 3380___PPT10.6@+' g 0  (   X  C d     S ȶd9 3    H  0ηo~ ? 3380___PPT10.6@+' h 0  (   X  C d     S 8d9 3    H  0ηo~ ? 3380___PPT10.6@+' i 0  (   X  C d     S |d9 3    H  0ηo~ ? 3380___PPT10.6@+' j 0  (   X  C d     S @Wd9 3    H  0ηo~ ? 3380___PPT10.6@+' k 0  (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.6( l 0  (   X  C d     S <d9 3    H  0ηo~ ? 3380___PPT10.6( m 0  (   X  C d     S P>d9 3    H  0ηo~ ? 3380___PPT10.6( n 0  (   X  C d     S ~d9 3    H  0ηo~ ? 3380___PPT10.6( o 0  (   X  C d     S ʳd9 3    H  0ηo~ ? 3380___PPT10.6( p 0   (   X  C d     S `d9 3    H  0ηo~ ? 3380___PPT10.6( q 0 0 (   X  C d     S ]d9 3    H  0ηo~ ? 3380___PPT10.6( r 0 @ (   X  C d     S hǴd9 3    H  0ηo~ ? 3380___PPT10.6( s 0 P (   X  C d     S 0d9 3    H  0ηo~ ? 3380___PPT10.6( t 0 ` (   X  C d     S xd9 3    H  0ηo~ ? 3380___PPT10.6( u 0 p (   X  C d     S $d9 3    H  0ηo~ ? 3380___PPT10.6( v 0  (   X  C d     S l d9 3    H  0ηo~ ? 3380___PPT10.6( w 0  (   X  C d     S b d9 3    H  0ηo~ ? 3380___PPT10.6( x 0  (   X  C d     S y d9 3    H  0ηo~ ? 3380___PPT10.68* y 0  (   X  C d     S  d9 3    H  0ηo~ ? 3380___PPT10.68* z 0  (   X  C d     S ` d9 3    H  0ηo~ ? 3380___PPT10.68* { 0  (   X  C d     S  d9 3    H  0ηo~ ? 3380___PPT10.68* | 0  (   X  C d     S  d9 3    H  0ηo~ ? 3380___PPT10.68* } 0  (   X  C d     S DJ d9 3    H  0ηo~ ? 3380___PPT10.68* ~ 0  (   X  C d     S  d9 3    H  0ηo~ ? 3380___PPT10.68*  0  (   X  C d     S , d9 3    H  0ηo~ ? 3380___PPT10.68*  0   (   X  C d     S | d9 3    H  0ηo~ ? 3380___PPT10.68*  0 0$ (  $ X $ C d    $ S  d9 3    H $ 0ηo~ ? 3380___PPT10.68*  0 @( (  ( X ( C d    ( S  d9 3    H ( 0ηo~ ? 3380___PPT10.68*  0 P, (  , X , C d    , S  d9 3    H , 0ηo~ ? 3380___PPT10.68*tx]{l[?k8$N4mi IJ!$MH BЁ۸.C`]cICC0 Ilj 1жNi G[ i}=k1|w^yG_x~h|3>t !*?>933Vϸi!?ֹ | P!T5Pz@`X hZ= p:`)``9 ns&gV퀳|][68H\Db&ȸ+p 1f9ǧR3h{g[Od/\dϼ_XD1Nzsy Y#`G-GX۷sˢ;d|g*%wFb):\6:PQ2=}7DW\ &HnA-^ n!8wpTpLOBD.1JUBoY+d P5Nrw3o*$ w iģPTɃ&gQ1^NS*ʜBGyLa6@t) ~7a݅khXS󩪡s!utqwAM/nvZ̙ !"h\mZsMNJ09 MkGcǪ٦,];C]vGr W\qW\qW\D_/-.;_1~. ݅aX"u>FH-!@ _TG8,5cdG q@KVUI4JM^姻w c?QqzMjBX|h/Ēt}0:==*۞^ 7˔"OTƓ('_Up#11}wS7/7I!&ani)L3݇Ǚo6w}4veNgK.ꡏm3ϼ?l -ePr~P؝6fNyRˤ{NҾbrrd1BI$#4'~4jJw"=8l瓴kNsw KxBs34;Z`YNɃGwͩX|Hmp*-p* k싏%Dh0}=:oO^%"Ä^EdjOyRS*9l{#j].Oq˸e\2.t8Yȸ1B΅F(:(Y5|,YY uA;Kr [Fj2xeS+OWƟ?Me249YYPgY¥N/wdA8L9ė~A~XK)a|2d R1'cHOƐ:!͎e24;Yl2u6l/=C]_ԉ}emr:"#}Y@ _!m,Fg̨dddddd1K$ƊS+ˇTd״隲T)"NW"{vb>ߧ?@[CnFLChS|4#ofݧ̋ž;y둟ͷLŞ [sUd{>zܰ>=H{IBx'/TKiFGs鷺Q~^_>xKÏu' m.m>_[ڏ* vI< ߣJ&b|sś|\<kxsG sWVy{bE,/$a~Vms|ќ}3M|z:`Qm,b=4,9B$3]x´0`6Y#sΝRj9bعYW0l%i;> 2ʏ]q(Q   0 nq87#^|y X7<__?v}ww \ k_b pñvYkҊovjk ݶ&ńm| f9~pPh̲l("uE9PD<KR~~s^/5xa/YD[Jzɢm& X+(]}z˚w Z'}~BF!]y驩3.Bיj~bÿ$>ނ̲<\D[0LH3T=Bbo/ :C^44ʿñǾ1{M^kMnW W 3xsb5r쎃ظ;׽3<(lEsX[V{8a"_ 썾W $Əm [9wC{TaߙӼNa{ O-$1dw7cðĻ=.1[Ovpmxb4<>O,,EXX̏gpz0_6:U+@fk<nw]qW\qW\qW\qT25Ͼx{S߂ΰp=3\KطpoԸw|u7ǵSq?+${͏D_8FBEFFЕMD2gkھ~K&<\| 2^Hd6jr+:_yqliz$:^G֒sH'i#kMuo5藺t5'_poW\qW\qW\qW>+8rbzx]{pT?wflȓ$C j$DJbʆ\2n02h}8:?LH-VڱSZm;cUV[bƙZu-wνٳw7,aSxsyڻC}!W&Y"DONLLU h!B?P销)**@50`p, h,8k7 hX{b@+`9}O2eI(*7EƜCTm82 u=w/HJ>k 1O)O^ "K|}WaͤHߴP6u)yֿ C;mikt7_N4!;$`>7#-듩HGr!31Jk{0 (G['=/ d _pzr6? frzFpmCy0*|#0>`ɌE%CW.#+>x \:`Dv@<_ւ?d+uBheN*d]:FְJҥY*| Xf알gh&2 &p%Nؔlb x0=P(DMzr~【;VG -ovDm!"e88tIF::IŠYD$Y}[B\R{!Ԓp,TeWy-c48W`u |Љ+ e4dY)i§]cBCo c!6%-h3BЎ@ SB١v֓qߋArLkwSSǮ(OLrEϕtZѡK'x'x'7"[ka[&@ x|;70tt6be7 #du_qD} ^kL "_)qTzgx%3?l"Օ|g0\CIvrȨ9k;8?Qb)swRUoFHcx^7̻]^h^ShJU34u0/pm7,traUXcbiy+O&^r+k%9KbSWtIZ%y(JalNŇ$_7-C?<&a}$ k}1 ˈ ).nCPa(noUxpxTj`姣qkV[V.lmnOHTExd'i=%!j_x[+oPar&ǵN:RsP\OKa\KlHy f<bH4jReIKYRD%/eIKYRD3\k4D3\K4r.=c3YX2;qsCg@saA.Uw#F6drWg_E"dk5Yd,Mkm]K4_d1{$Xgb瀝{CgA`1* G>c0G ?tE]CWD?tE]CWD(u-ԵLC̏R5{~a(U 왡\yQM0? s 6iѵMom>l>l>l>l>l>l>l̵LCde%eb/Ӳ ˜F >'ise =37'Tj} D2;BL XD,j"5 AMĂ&bAkm%ebTG~  ˀ πZ+q_nŋv=Bssc-uب4f;`%&sADWQfJOĔ)%>SJ|"DL)R1ʵLCĔ*ג2 1S2拁!t-V?[f!ag%as0$66U+['Hg#k=!]Ğ.bOH'E "t{j\k4Dq-)Ɵ=`X<3XXyTYy+:ELf?TSk̑4W)+f~'"NE(8Qq/D_ĉ9e"Nq-)sbN {Fe)2'"l;ټ- êȚTFkF92sJ!F!F!F!F!F!F!Fkm%ebnes2WXnebg .(\Xi&wepm34303DHąp "E".D\.r И/-Rjn-bMknmrqoSEAVg FښS'?:K^m#zC>Y%_tS'S>&Gs ߵSZ)K+vzvS$dӿ'/H/YᶻMb+gάI+Ğ UٯeKH߶mHv܀ZE}YKPRߖ+k\W {;PtYV.w6k- %V4ǽ|wXJOots/Hy ky0$_T_(E߂Sr\T>3}b{W׷ zӁh:uq)K:lt\Y C_+Bɣ;WA sREPu[+ z$C}j1ڹ];u R׋t7zـ0 .,À1]*{ƃ M?B0QR*-֎{gΠۯn kVWtv C]pvSiR')a -{rD.v8l#c%є{|㬝F[Rˌ68yeƹXV-JDY{ˈx B2'64b4"gUO-mƉX[ܘ'kx .7~|h!>#JXROs)'O`>m!g̼-@]~||S>{ 0(Bk^W ߒ'!wsIB Dd %h > CAR%,.r!h;NY. be\6#ZV]#uNj+Zq-f}={#(fYǷ8SO=}4d,A= Fdllx>&钢 @/G*Y:^#*?^oh+&#f@7i(5?^ C+lwr~ 8YG?ܯ ,r] ~OtW#@;D "^ W# s.CnDnB^Y<'^ 9܂|ȟG^y-o֣{#M7#߂E[ ~ y#w "oϷK(lGފ܁܉L&ۋ܇/qyyyy3x$S%M>B[:zDxj/ڇ7 l7miB=Ō!+AgQBO¹ѥ. ]hC.VHzVEtYK-Fkچ-R7_EVۏ-Ã>2;EQ*rC=n2 LrdM5XDf.5F\n#b{|b4a C*-GmH j=jn[szJє` bW{7:B J(B"ZE.Y >V5eބ)pY"Pqh`2ᯑjc~cv9~ 2Ք®twf$ygGCGʉNUq l- U]TraFB$I$I$I$IT49dީ%̛f^;h^}1.lxl&ML c{u'ԤNjo7W^.}qevCPM܆P]B -dBvw (bA!OG<yU >NɗJyuᯬh)5-|9fO+7bT!A.r%\B[q Nj n쏭 ~zrq<]>sqƣ|qGp",KT-.U`6J2 }UPwCSJdIv.V|2QaWirSr!I؍O c";fZDSPS) [5l%}JơLVZ:p84y޾R+_J:u+8N=ZӑpeѾn/pI7|]G |Gϯ#B8q)|FD3Q9*|5Q3ѥBt "fֿBeh0Oo$nh"|`gkNgA^7]ojq)=o+*d+_G߰w& 5D:.+I$I$I$I$I$Me?38O^~&bN^:t6<0Z93f}siZ3(F 𵀟KH@^:۶-w vshcnmc??%tHC&wv>$(sEfwu HsqDޘh6sD{`%C3^ UT"_*kգG_ꑿj@C}K$I$I$I$IIy;hoP7w);^C8;lhmО گA.by" S堵*SRX/:^YQy9@F 9,+B^\!ӺХ~vŦfvPol|dI'/섟ꫯq5ȕӹb~._u?LnRs{#״wnnš?Q'.%/dkW)\w}4nI(əw}$I$I$I$I$IҥHNL W5zowo_]Q𦇣5ZٺjmָՐ q "ɉcFzi[,"m $I$I$I$I$IXᅢN`pb>>N|T|n) sKXﰳa[!L?I* z93rVe (QZ?Ċ~dKG!c'{l(aKO_+et},'C^Yc+d|U?տ1E^*gO݈$v)uW֋K8Yk &E4j rl߫E%]55 Y< yX$ITt&5͓/2>Ep*EY{W.{[bjv6̫씍V~d'lHn?=n,`HYNRoʁid^ r؋)7dzA_[@z )Rvӫ'G4Nlw8iSS:8}ޕ &ˀjob o}`hOD)c3?_ c/`=Gʌ}v+ 6gg&SꛜH{&9=3V_(V2 a?.f⨭l> R0;,mIn|@D^]fG k/d8E5Nun 崑wQT7b n"ؑVv?(IjP Uwj!G5:6g]R7MgաEUBA5`ԺH]=νf>ӞUڛp@)XQՀgC@xmk`{K4M:X+YI &Gc5*k'IF}O Qm*)NVӴRY?ı0Ji lwPkLǁUrv X+ P:b _[Ek:]%w: Gq'hJ(چsU5m]tޝlͻSQ9Tx@?Ui J>b%++{+I$I$I$IOP B ^b"Sml!4ecd \cHvջ u!ϒ(yTSHcNju<4t<q̳c5[-#sMRɪ}Lv0k>8>1N!9!c>^˅\ȃ #D|8/MFB!!ʢ;剡?Jx j=cI  ^RT|xK @2Upx9&HKf9gx{L;udGW;LJz^#>L^vp:fMi^V^^8Az7\=߁p kkZciV1iѦ-JboxRYc6 Y9BxFوe,g [dOF<[BH>Bx#d#rĴ#f9Bx#n#̫9R<LzAkQSۉͪQ-Fzyk-ԏ^~^(#GHR 93§R{2ԼڜQx,cf] ^Ke3Gm ^ԼڵQkF m'Γ6?zilA YekKV t We G oC9"J iRiu"ˣKh/9rkbxG􌾤6dO)cJ|15 PJD}/P]sp0$O,yn*K.S!.8%pxDžR9ճ`KʸSɿ)"IHWِ4 nK)N NM)[Ѕ «,-nunѓ4zx5UzO,zkM~-onnJ6z}0{}͗>n9r둓9z13G~t둓9z̑qˑ[̑kkiIUǹ-e2lQe>ZT)QyC{C;ƹo+bX3txG/+uQ>G/~{)]%o#ġ>׾+BUUKSU\Z8.<,ߚN5t9yÕk:e&}y^)3tґ#2sMlW>t<错k:yMܧwg얛M\.Qn*sջܬUrsrӂ&\mj7Z6 `!R״,qi'_³K/[Ȏ0/sM3v[Lv5sCgbڿl\vw"AEX(~׷z,`E? E]]-쐽lL e"uO vRy2ryrT TTaCjsqv=p (y{|~;H ~2%L<EG RUZ\*bkFuy-3G[o#7K_s';Ocw]A1Oh+'0T hp    (0 CS 343 OSFabian E. Bustamante aqualab01Fabian E. Bustamante98Microsoft PowerPoint@`{z @QZ@SفGSg  )'    """)))UUUMMMBBB999|PP3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f333f3333f3ffffff3f̙3f3f3f333f3333f3ffffff3f̙3f3ffffffffff!___www4'A x(xKʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮ՜.+,04  $ , On-screen Show$CompSci - Northwestern University`## .ArialTahomaTimes New Roman WingdingsVerdana Courier NewTimes HelveticaSymbol 1_aqualab01Microsoft Word Document+Machine-Level Programming II: Control FlowCondition codesSetting condition codesSetting condition codesReading condition codesReading condition codesJumpingConditional branch exampleConditional branch example“Do-While” loop example “Do-While” loop compilation#General “Do-While” translation“While” loop example #1$Actual “While” loop translation General “While” translation“For” loop exampleipwr computation“For” loop example“For” “While”“For” loop compilationSwitch statementsJump table structureSwitch statement exampleAssembly setup explanation Jump tableSwitch statement completion Object code Object code"Extracting jump table from binaryDisassembled targetsMatching disassembled targetsSparse switch exampleSparse switch codeSparse switch code structure Summarizing  Fonts Used Design TemplateEmbedded OLE Servers Slide Titles#,_#C Fabian E. BustamanteFabian E. Bustamante  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz|}~Root EntrydO)PicturesCurrent UserSummaryInformation({UPowerPoint Document(YGCDocumentSummaryInformation8