ࡱ>  *Fv1>tVWS㓭]]PJFIFHHC  !"$"$C7" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?c{)%+ nj$ec P'#NewsK2fRup!ϕq0OoOmfV-դ Ws޿5WD~+?&Xob0Pu_<_."Xl  fz$pċ#U\t>PEPK{i½ØgB3cS_@|2ek=1Le3$l#9ݱ_Dk}OмHۅZ mܟa?'Zu=kE3݃G|QEgWxź?|Yt)?Wȕ -mʋ6k ~EQEQEQEQEQEQEQEQEQEQEQEQEX|#{b@Ѽ/i_[2!9dl TIkz%ޝ0hܲo89*+=FLdb2Cqϵp{l-Kkha,%) t4PEPEPE> Q-e&0.>yE|1/}QNZ ;Ȝ6NLNs~KKF2>#D7[ xImW]դK~cY.vd~MeצiGחf5~;x% 1mT]i}4xůe|, 1xs{GdW{ZMnͽW~<^|8t]{7t(tki$|#mԾTPYNi42;&HGlݫz<&m|2^[Y׵g#_&a`; 5wN,T,A9I }MsՠCHtZkٵ8 ^<פjb'[ x+y.[H~y(8 1Wdz5[?%F 1^OiFErxӦܘF@66n@ 2@Lưi\OuL"bF 0s ېn͟i[PMItw evN5%>"]k뀉$%G#^?N^>$P l+~9;3\n}*M[La/@g$UivP<\@>k oqBH'(ȮSWv6t뙒 yH1@BZ]o7,` Wl\Q{M;:=R4\ZYֿ?(}MybښC~\g :uAT*-l|kKo[F`͖CɯI; >MAs%@4[/göqk^IH6|oB|Zhh|YsclN1I0YcW,ɠ tuD#KHD .O+/>>+Sl5WRܶ (Qs88Mq(=575{}}b6w#1A(xh|6u]ixR{9K/t*z!EYԒjͦ -#I%=T)#^*Bɼv`0 3eaQMkޗ3Z~w?3X>gyгFS3rҜ?{S&:! T>vvy;f2<9 l]&a%PJnjKON՟fTio K'MU8b}3'_Cj>\[ѴBO   DCg&rn:k_CYV7i7KuwdTφV-k{i P K#\爵_H{O]^&bͻNy4˽)n/RM>%eD(nf*3@xm3Ip\b$} ԻDN,H ?|ajń2 M*ѩ6O%7pOFxZqxPWjdYDˌ0RQ㌎ROľ׵iu M(*3݀fYןnlEjwȐ}r^yg.cJƏ"kGK{B_jcxmyhp6w{uoO{#>`"O>xy$¬=hY<i\V G}85'<.|:\[ȶ+Y -eiޡ6WEVNUq4*:+>qI"/.,# ;VaX0 q@ROK{VPe](jo}"9.'yv0Ph ߵ\((5hbn=M`^]%ҹbU1օ@i:hHPX[* F?v0}Ubc= M[yJ"˵#8(: KCib7" s_=E>='MB ~pPap=*s7VisE4tcL6iZ`H V EW[&pI \p1An]"O/rZP:xo@Yh)̍uͻ`y[L;:",ړlII9tPMχt;TfUwC¤s#kJ8QaUF ( (>,h^;.}w2,lʣ fTЏo~'>z̗7:uݺ^Z<3`Fʕ< H`;#'wD9Rj\pHB"wæ-?~XSk]S#mUΗtӋe͑3*ʾ~?? Gjc?圶~\dPEoN>_A;~C ϿHZOȚ e}g n+<أU,=F>(7OM OChoDe#>?^eɭ\/&3a?J(i=iZ}}mX~ Wh ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( S #ƶ$\>N鎠u_Ϫk^l)Ӭ4e㸹9>Q@]<@k/![c*Bu5~swsL"˼CD.3Z( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (N;+~j:Ybkn|ڈs|ׅ؉ߘَڒەޜɑ}̘׭ŋxڵn…syim_sdbUgZPEVJD;J@81>6LFظʍ2,?9D>YTea{ͥԲۿϿppp```PPP@@@000 ytRNSbKGD cmPPJCmp0712HsKIDATx^홋EK*b&mkM/^E[E-iUOG(>PJ|%{]gf4I!9Cw3;W#1 E:F:@0Dcc0 3Jؿ16]?81w|`'=?azbc|:> 5ȶ>>0tܶmhd16 3n#56*X׳fo8HLa^3^0bskƳa3ug"~xoCaIGj"2RCal:6q?$aloB>+d q64~axV##j9Sx oEaZu&y2 o]xY<eʹ}{eؼ``}woǎv0ntz}zc|TfvM๾c~*˸ZȌR2ڬeq2^a(eSV)]ƍ+kڥTl:=_"5`D)CQĦ3YV7ցz} Q%ټWJb\[*rF0{X:JL&9-e$7k3\ZjkT2IRnQ3Xl6s=D2$7d|z*Ry=L:KflZLFi6'PԀ29X0i)6 (4clL@Fxw5<(Kc1.#$BfF:ޝ-+fYٺw@_>ߩ1f8unJc2V;5Me~YSshßN5;|P_ʆuwSLC15>׌^ Zx3SRc8L0* qԲeM~+u BI#pg8H%ȑY UF3ӻguEWƲiz䌨Ʉ6bw)#`p&[Z ^Ъ+RS %Y, TR1!0[h4"Mu'0A3"kLEgM ұ'٢| F{"X˚5(iLנ$KHWk.WSQ w0.z3pQd(1WL<B'SC>i>971v d=uѿ #&g4 ?% ;ѪUAZ&tx ҘU_ԫp+6j*b0'4fuchE*P]F6+<F` |}?UhBAqؙQݭ j*guن*X#8#lj^FՆ& Fс?[!q[Xh/ FHH`f(#Q Q|t F`F11%H`f(?: HqP4zIENDB`nk*dP>r-PNG  IHDR&gAMA7tEXtSoftwareAdobe ImageReadyqe<[IDATxu8{ ୀlx* [LV[A I H*hw<uayљdIWIևR}Xn>Mx݇;}L(16uDH%݇7O#>f.r%iAfIDHóGG:1'z;QVUl$5?LɌc3&:;|sW%~ f XӅD"L>:Ka2߽CaZPFbGRG;ap>jı>ג߻4BB @:ᆰH3&><65̿ dz'in{"/LTPVg%Z^Խ4{3kZ~;a~٘mOk]r'tfd64D8q.'KQRwqzi\Jl:Ӱ4c'1}ݑ8ϕohk|ZY324fTz|gܞ zaRfDBL-U2*MIǖM7^U[0e>b&LsT2pn}6S2[CMkk}lY^__qw6.MeI TΛV;A_5,m@Q2+<~ghegMsdk<9̳̋I~{ub4}~aJ5!#XsϹ,)A5N>q ϻ!u%Py3eҵΔpjmD'i,׫c+Ji`WUk̮98S'%wu$7'~Sbs;U̇MP1M)i\a2#缓&ǎsP29̫rlĠԩ@>FM!IW#FFLmTz&ՙ*E3.>]M9S- X^m[ֱG Нp&xbIxR2ŵ0)-yPU^{%[  Wjk3gevZh2}W` zG4湵|v*~PgY.W0)rI Qt|I JM/Ͼ(!LғKGBe+1a?#< T-ܿܭEmo\~*":~| f`Y־&EbO TagY*3@i|;!gF\ݩ8C&R4k2PV{Gl-=}`k[ah3B:*Le a(p(8S3).AX2{H~ߙ0}}T$5@5 Yބ]Àֳ[_ 8&Ǒ: LTи8-n0NchKU.C>F 030?B^Dm(> ն&I PG_^\ .0@m> u*HP0K"Y3[J.a[nWn~,tyQ5Ө/:ų.ǒ 09)'ESD-rs9]3RնkO*]^d>ClsN.Qvcڛix\.U\931˦ 2;`&Gq*ר U|n(k+ ar̹ac83ukar*+qFlM7G~sw?!Ce:򛻚yUEitMU0c&fZH3w|H g׊@_k n#η]ڦQ/>ջY:J߲dܱt&*'L?"ϻv-GѕqV!"JfV .+ _p%% B8qɳqLkbL6ƧAqT>\01eraҝI,tc'_~a3imD0ey59^N&34!|o]ån:|PL`}Xr7$8Z虓}R,(ca@Y>(I aψ@PfOx0',@Dí$ҙ„"F

g܇cA0R<u=yv5l@@%L&DK&Pp aWIG&P욓"  ؠĮS0[B$% L5E0}R "p&ÖewIr(Q%)SEk.y]6]IApmjUei\#L .TAi~6{0?)J&iY*&lҜpO/8u^.rͳ`{=v@}Mro״fYĔαu{1'hwjdl*ϧ3vY /Md(Hh;| QQ-:arhP*PcAbmHlw\>karI4㮅 @4`U +s~yI}=}M_ E׳g.;lW'$Ilfۥ0 n^s!L,^HuX#]GwX~v%N\]4oYێUܨ8'g ȓ#u!nztG_ca֡:xg| լ+mFK]^cSn]j6~:tM<@R(C4&&Ҏ*%]1^n@Z/ټÏ)%Fm>TvwiG9^XU71ܳ3 %5lPz m9&{wBrs>jPޓ!}ڶUGKö~231\\j.@%aׇԝsʤcbPϧfX>(ޔLTsDm080UMqvNSK U.UT $OvmgOY"[g\7Jv=D6 I8-8 !O,aA0{5v] adMʹWR3IstqנΌl,ߛ:q]'^Yils_osࠍ5DHJ ujZΨMrDqW.ԡ9P6qa8gFn:'wfzA[?;>j4¶ޘ9 (XEXY]bLKڪ)Ӊ# ylc3UXI8GB-3Ҿ3Nekb=GT7 v1VOvA: jsm/d5AKl߫\}TzWNv˪,ν'{J:3]5K|T;d]r4Q2P%18z_OƻS~mGWLwH|Рf9vj f!}j&dհ4[85 Tǯ8qde{e!144/-_8l}L'x.!fIjػgȌGliO\י}_;hvK2X҇d*6jهf1ǃ?Z3A-_<[]OzkH`$q涳' i*k Br빭? Ga!T2Sߕ܅UgYcEXfq,[h.z`X`Q]mw/$rơOA6އ [0t,LmV.a"S?Cka+5[׏5W&~q{~J!`*qHŏv"̜:`]Ѧ3}C5׳P]c$\߰:J|jm͇iC<ު/gH䙂 Lݻ0'l]prIylX$58Dqi:k#gNAn[n D)lCL[eGψq%f5K\@X?0u B̔DP qm -LRǘ(y{eC,.~MU_ 瘸?R8tWO챹S QM8&|ufGm&`mѿg 3G %hώ6JvYY&m u}TXduf}0cR~ʚ6Y(}f7+LqC5mǤ֤gd, Q0N +uum#X#f@u$ =:~,D7i}zda4P.gWn;z+zʵA`Phx#vŘAWZ\t0A}u,rsP[X*R[/)JIWySfMiIjy&k7<=uL"Lf%¤,yn$/cZ>gX^m0,OJn1dR1I4`'PL,;'m>mY 2?Z(E02@qI4k'ʾ0P̘AjV LZِcܯWXc Raa ЁI9[L( Rv[:l ck.ͣR`x00}VDzz3eÖROz7H&]D/[ WV/[x&Ta½]CPfEӞ] ۟.#Wat;2S풻bh)ZXlTiءn¤-_+܆ġ)^U!k$J 8TMѯVFX\֣+gj |w6iDW8=k{OϊXH-Ӏ$/LR~gn;qJOɼV+K|&3x$BN%^gUt<`mF^Cܧeޠ'l(; ?Wya2A ԙ46kNӌd+o,>0ba۟ꋤqXEbeRUY5fi_!Ldn8e8lB xllqظ֙f^zLvEdoGpG^=kZ }¤01n+]LWh\; Mؚ?O=taAeɓ#`%&MUR;lP|}S'&G|ay)lSƮw~|6"]+`n-+lzόɏL[`;fL*ΘU`\IV~q{ޕΪ[ۛKF=F.߬w}L{m?,\ 5+avHv*?a#68Y\<&!n< U_u* moTy LBNgTxWGY|rճO5Wct'Y$DP%Gm6+4-z!yɞ2#:'SR5kɻb.rTImy S/z(&PE$=$Cu &? /LI ѯw*@RSo*ε'[kVֲ#-O1ES=z"TܗMyǔ"iK=ӞjSu}&':t(+aF"UzΔ%Z:+bIJ Gg;}~aW4Et^Lэ81= ͟!twHqmƒjY_"ɳ3y[}D(׿I/=(YN\Uh[}n7ֱs)o۲(yj6Oˣ)6/lTd}E4^ suiZ=o,`=ջV#IENDB`nM,A]e" hPNG  IHDRBF̘sRGBgAMA a cHRMz&u0`:pQ< pHYs&?IDATx^yu}; q(hi馁ުTܷθD"QAF 0A$ dcxLfdyxs{}kWz?y#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0FǏw'+_9"\,1```%Gϊ#~}衇m'>t/}KOCC0#1/'?O}SSӟ}ca ```F@B3qɟIݗB|{xo:[oumݶ#G{# |9~(+/l]ϻO}3~v_<}*!q]wm;x7xNkξ7]0 0 0 0`~뮻~qM7m/J+NǾ{=ܳ7EvOz+Yw}n(h4|W),OesW՝)NK#}cۓE~"$[lꪫ_~k_WL<9Y7n/-Z|!ca ```F(~=;<̥OW/x)}k\r%kwlJ1isSp3;soߛ̢M)" ECSS M~=k_ڮX"Lb9 ]vٚ?e'pQ!=81 0 0 G0Wk |;7_U73Ţ={-MKvYD39 —>(##,bYX @3iX+0M_ۖ nz^wZ;lA? O|ƀ```.:}w;oyE}{X?SivL:"LH3o|c>dl@4mcvjL};cZ>0 0 0 0u4Ik{ E'.^x37޶%ŢES=g DCe֗|AJ3RMf]vŬ'T^?cNJlj'8(?ޟ?~x0 0 0krPM$cǎozӛ>pQZj6fͦ=ͤ?ODgU@O:Xя~("Ih6PvBԧ>ueTF3f/_>0 0 0 0u5P3zbDž^*mf}fBllATݝf-LDʳ"=jxvĠfEcP,MLLccqlٲe,݉s```Q0'ο#Y:cQH^eVQDN:iK/ݐT*ffӆ)-Wy|['?74ޝpF% TTAEXykQxl~c 0 0 00 򗿼3r~:ڕ2vn*{gB K/jã{:_Wcll_Z5ַu]*x*.rF ś````~ HgQlQyYyF{CUQ~zzz"SJ?{t*fB;^WOs1-5 B,/3;h~ؽ_```f"ŊDKqQu}C8˺{YL@ͩ7lذ2oMKf3:6H zٴl`OL{MByCP```gbFYLvPPe؅ .y}FC̡tuUW>[@'KGzv"}]b}b`uyCiz/ƞ```hҲԑP;5[ZFR7γơx|Jɦ$W{ww3#Kb/8n~x'Q(Ǝ1KPTB^|```@{*/-J5sYL)>e:ꨣ tvj{_Ͼ/X9i2!"P)4}7333P,m,E- yPƼx^```8FmJ] DnJ۬]vEjR0~7(4zΝ;Wq8K(v,ϛK,ʲ1/0N2 0 0 0c3ݱͨV^4u5/~̡VG?zgދivQt^:{\1 0 0  D*>߱,nvDzZfjjj,ZAC;e-[6=m7f8eJL?9Пu]&k?e:zfKbi{ yAqRa``n9ne1$ǡF&&Ė2pͨ'&&oF]ܐ:QNelD[qƓf;ҾG3ĬDRw{NvF曷_󱍦-LE=tlh{``` 8V6./)kr KMXV=Yڒ6:I\_җOzW)tLO)Kj~B^@0 0 0 00ʷ8T^Rg đ5mŲ[Y+OFzs1;i$|'>/+j~3EJ쳟Pf mHȮ? bP(kbWBQb`c6 0 0 00-'VlPk7"YCYC3|3wrFPosܙiؾ|lOShmQP,F ``` T]NQZNgk(uP R'B;ġPBiо??z߾U)]t1{ yp```rVov| bYC<6lprK΋/xfzzzeC=S誫ta-(o4;FQ( -Dz{<3 0 0 YCb?5 C b)YC2k(uf޽+jұi4Sh-Q9c-ET?9 [{q 0 0 0@= C}:݀:73ʷ/nBU]zl\4;;oks={o?E(PqP>l֭RڕEo:-y;߹yƍc((E/@ ηJE/ ? 0 0 0PŻdBy)YA* b9Y9ԋͨWEJܹs_-PW$|mN96W(PL(@/o6d"f``5c(߲>C5<%iԆfӬѾS'>4Shwܱ|O?qb^W(|(b 0 0 0P?yYq2zJI* Cy̩:=lH-}{]pXlپBy YW(T1KEs 0 0 @'Ⱥ C a(6&ō{1"YC{.½)-8=9݅lg,!馛/^xQ5cw +ޅ,,^>Kg``m2f Boq=~Hcǎs̡ C93;g 5-OHK+߅lz8x```2f-m򬡼M/o[_utQG-NaFVDzL Mr-{.do:fܼP Yp:zGl8]~/s```^/#+ޮRVzub+ټy؈:ݭly7 }vvmMPB%dBqt- xA````^:YF EG(ލ11%PdCyIYڦ=^Rv}@pZ&#@lhPl8mP~{```^-#-krQ^FV^JV܀ |%ek`۶m36l%eisϞoq[usedf E+'```a?;-~᱘H7r7F: CN6a(gqjlB}9M_۲o(݅l>wk8lr*-Ox< ```ed?q/510ܴڵkW Ez衇 Mrȉ?^= 0 0 0 sY0oՏ[GK9C8.PtLxP[[FE݋g``MBLܘPbERlWlkŋH??-'9{-Nvop/j7[jBC 0 0 0@qot:n6dY1 |B廒lo5?DŽڴ T6^xᅫ݉,P zsl" e.j]L*.#8!0 0 0 @Mʣb2Fw#$ ꋱ(ן}ٳ+V;r-K;Z-a^?^= 0 0 0fXq* ŝBþ[:O:e}]wufK.fa,*[61c((zƦQf yXa``@q_S;Pq_FN7_(-4 {իOMӬ5 >*na&- J;?g Ǔծ]5~Їc``(E<[(o<u~ߑ[=E6md .<š4[h>=ݱOKw$CqWexWEċ 0 0 0aw 3-!ku7a-K[|{r.ꪫv[ԟBQ`9 Ů1g?XFߋ``FQ(>U*Fn)mwG^{,'K߳lٲ=eP)ttETzBs9+:_(v;œH* 0T'? 0 0 00EX5oI߯(}"nd{Y/i9UVͤ848Y]wW\qn]ڂN0b#rCbP!``wbX:7nPed.l~ܪQw96cҥK`ߝw-J2ɚ3YL!bXYC0 0 0 0l bPBUPCEa-;L B׮]n#}z׻.<餓bRӻ5#Yy)Y+YqPe}ġ:x_ 0 0 0@6PB1KBp9 E3zBDVE}B,wka,'Kw'wǯ۔mHnoZFla(6'?P),FuG0 0 0e fYBDfӱM;ubvah6.w4c4ig[շ0t7+/LOĺ^-닳F`6.?@>B0 0 0 0AݞBBsYĠ|ʥ|j6[(Q'w";X{ [̒%KN^f΅ N% {G\S]vy۷o_nY3w&C!]^Cy#Q D)v嚚yC1```@._BBxVQt*OʞB :jq5tŋ9qt}}k: C;7'0Ɋq(PyI٨< 2x苈0 0 0g #&}{~5}ABf Bsg6>C\sW_}9{^׌fR1U,vq( b1g s jW*o}q```` Pfӝ,++T% ldb+W^mCqt7鷿sr(EY+u~1+f C%eQa Df_8 0 0 0031 U C\^_hy Ci#K ]βNP9 E+|X7hP1Cʷh,hgK/vby1 0 0@Q\>( E (ޒ>VX})4Q(,[jyC]wYB[^AK CyC1+ (ҲnQ9?׿kw4{f( B5Gg9 0 0 00|Atl; brI[,87Xb 'bPBg󒗼;BHm 廕5DF`{͜˷4,F[w/ʞPyeэƀ``>zbI>ܒўBf 5BPqN1&ӌ-ɦַ^:z|'QdPތz.Quֆh韋?Op\o}q```` U@卦Y>vPGKebٲe[S{0OO_zڵkuB( 5|:y9Y!,/)w*K *\hO7Hlto]J0 0 0 0p(Fݾ=&UqD84O(f uPLdiuFnjwܪ6EJw';q(6NOl6-E 5Cq(oHm *nThv;,/jf^ !f\0 0 0 0l )TW(ΛL7B9% D1({Stɒ%U=Crxe/{5k,-'k6sԝV7ni|_u͂P8 0 0 0 Mjt,f Ŷ5#iP=Z+4{ pt衇.N3֌njއkvc/?~Q=|Z-+˳: D!*nV#L'zF1l,p}a ```4+:)T`t(fӃrIV/]t_6+{>ctG}۷ooP|1=r*3Tބ8ku^g FەףVݸUP_ 4/lNH7```; YBf u:]5K_riYٙ=CqGmSYٮU CŽbؐ)uޘD@Trh]f ̚EN?Nk(*G0 0 0g o2o3l2]`:wcuB]NKa4c@f Mohݺu-7.DyCS.xyPq9YYC84@T.fk3P\k+j덅```@BMѦ>63~ iSRڜͧva=Cqtzot0hrF|VZ jT;7{Z\Q8 0 0 000c}yPD'Q-`۝=emݶ$Pz"^zu;PYCyWPy#C@PqPVCMN v:yLWZKj~[ka ```1$ Z:V55Whf sG,W_tG;|~7C ʃj9YYCPʁYQ2ӈq>g6}hW_Yz^xR7*uC9}(R3ƀ``nf u2K(jtٲ*}2 ғxZZ`.3w'+޾̡Ngoq?N߷<˩K\v;/? 0 0 N7,NcPcP|=C7pw.S C, 5 U*>۷i~OC1```@+?*-%4YBFa=U'=I/^gKɮݶf'R:/$N55ڤz^ XZ.\~?OcU 938s``?ZEF1h.Q 4 { 53) LOoYpf#5 5 Dġ<(PxlZFk{0\1 0 0|3eYjP04>>gak;a(7TuPe"Q95\w9=@}7 ]y3xǩ94```h5SխLnf j(0t09FVQ(Gn?"2ρ1```a ~D:9f C~U 0?L~| 0 0 0oP#3:=,/%F0 Uc 0 0`($ O؏gXf eeCkpa``hd($ C>-sac@ ``DU0$ CuP1E,k݄qIK90 0 0 0p0 節6.='|B:c,s:0 0 06O'| Fm>l{ ŋmvH?``04VXO|~㖓ckd[Au80 0 0  C0Tq)[{ y 0 0 00h!aH,m``aH*VLa``!aHreWڝ  0 0!aH!```!aHjzpgx= 0 0 C0$ C 0 0 0PS0$ CN5=r]]b``` C0$ C 0 0 0PS0$ CN5=3W<Ǟc``v!aH!a``aH!']9.1 0 00!aH!a``aH!'\?c1 0 0@;0$ C0 0 0 Ԁ0$ C@MOwW``}0$ C0 0 0 Ԁ0$ C@MOϱ``aH!aHb``jj@!a 'vWK 0 0 aH:ahc[*ęɱ^U>g~l|͎f1{```` C0T!J C^- 0 0 43 C0d)d 0 0 0@M C0$ 9ઑF 0 0 0 C0$ C 0 0 0@M C0$ 9ꐫC 0 0 0 C0$ C 0 0 0@M C0$ 9ꐫC 0 0 0 C0$ C 0 0 0@M CP_R!LNN9c}{kv*< 0 0 0 !aB K``ր0$ C)52? 0 0 aH!aHb``jj@!a 'WyF*s 0 0ЭaH!aHb``jj@!a 'n(x?W``0$ C0 0 0 Ԁ0$ C@MOUϥ``[0$ C0 0 0 Ԁ0$ [Z911ǖ qfrrrGϙk{m~? 0 0 0|!aB  0 0 ۀ0$ C)520 0 00x!aH!a``aH!'\5  0 0@ C0$ C 0 0 0PS0$ CN5=J 0 0g@!aH```!aHr ՚Z90 0 ۀ0$ C0$ 1 0 055 C0P@D|~1 0 00x!aH!a``aH!'\5  0 0@ C0$ C 0 0 0PS0$ CN5=J 0 0g@!aH```!aHr ՚Z90 0 ۀ0$ C0$ 1 0 055 C0P@D|~1 0 00x!aH!a``aH!'\5  0 0@ C0$ C 0 0 0PS0$ CN5=J 0 0g@!aH```!aHr ՚Z90 0 ۀ0$ C0$ 1 0 055 C0P@D|~1 0 00x!aH!a``aH!'\5  0 0@ C0$ C 0 0 0PS0$ CN5=J 0 0g@!aH```!aHr ՚Z90 0 ۀ0$ C0$ 1 0 055 C0P@D|~1 0 00x!aH!a``aH!'\5  0 0@ C0$ C 0 0 0PS0$ CN5=J 0 0g@!aH```!aHr ՚Z90 0 ۀ0$ C0$ 1 0 055 C0P@D|~1 0 00x!aH!a``aH!'\5  0 0@ C0$ C 0 0 0PS0$ CN5=J 0 0g@!aH```!aHr ՚Z90 0 ۀ0$ C0$ 1 0 055 C0P@D|~1 0 00x!aH!a``aHY L;111V>֯_?V>T3c8|F_{Fk;U|s 0 0 ,!aB88```Q2 C0dhM1 0 0НaH!aHb``jj@!a 'WTb܌ 0 0(!aH!```!aHjzW``΀0$ C0$ 1 0 055 C0P+*]Q1nƍ``` C0$ C 0 0 0PS004111~[*ęɱ^U>g~l.9f(dߋ# 0 0 0!aBFωs 0 0 ,!aH2eSF!``!aH!```!aHjzpu!``!aH!```!aHjzpu!``!aH!```!aHjzpu!``y C"311NJǖ qfrrrGϙ[n}bŖ```` C0T!J C^% 0 0 tk@!aR2K```!aHr + (``Fǀ0$ C0$ 1 0 055 C0PJ/```0d)YJf yp 0 0j@!aZ⚮%ib``!aH!a``aH!'\Ucm``Հ0$ C0$ 1 0 055 C0P^u 0 0@ CмxQW[O6|տ9cݕ/NNƚ``0$ 1dƐC 0 0 0@M C0$ 9_}1Ƙ``` C0$ C 0 0 0PS0$ CN5= _k 0 0 ̿aH!aHb``jj@!a 'W_16 0 0n@!aH```!aHr `Я\\]c``` C0$ C 0 0 0PS00݉~ⱥBQsǖc*Wncl```!aH/2^ 0 0 00!aHLQ'=9{n<7 0 02 C0$ C 0 0 0@M C0$ 9Я+>] 0 0 aH!aHb``jj@!a 'Wms 0 0/0$ C0 0 0 Ԁ0$ C@MO 0 0!aH!```!aHjzpfpxn<7 0 02 C0$ C 0 0 0@M C0$ 9Я+>] 0 0 aH!aHb``jj@!a 'Wms 0 0/0$ MLL:8y0 0 0 T1 C0dƐC 0 0 0@M C0$ 9P*Ǻ 0 0h!aH!```!aHjzpg4x^= 0 0U C0$ C 0 0 0PS0$ CN5=T౮:1 0 00!aH!a``aH!'\+>W+ 0 0@0$ C0 0 0 Ԁ0$ C@MOU"xN 0 0 aH!aHb``jj@!a 'W|F 0 0Pŀ0$ C0$ 1 0 055 C0P@ 0 0i@!aH```!aHr Ѽy2 0 T1 C0$ C 0 0 0@M C0$ 9P*Ǻ 0 0h!aH!```!aHjzpg4x^= 0 0U C0$ C 0 0 0PS0$ CN5=T౮:1 0 00!aH!a``aH!'\+>W+ 0 0@0$ C0 0 0 Ԁ0$ C@MOU"xN 0 0 aH!aHb``jj@!a 'W|F 0 0Pŀ0$ C0$ 1 0 055 C0P@ 0 0i@!aH```!aHr Ѽy2 0 T1 CsC{XR#ccccK83999֋̏-*?E```_!aH!/zqyXc``~!aHR2```!aHjzU.``ۀ0$ C0$ 1 0 055 C0P+7}a`aH!aHb``jj@!a '~\}9\b``` C0$ C 0 0 0PS0$ CN5=r3Wnqx{c(C*݉~ⱥBQsǖWݟm3 0 0 0P̀0$ 1T!J C^` /```` CdO/f s# ``f@2cZ⚮%v¬v4^Ƌ``` C0$ C 0 0 0PS0$ CN5=ߓx 0 0 T3 C0$ C 0 0 0@M C0$ 9JJ+)x1 0 aH!aHb``jj@!a 'Q{r``j!aH!a``aH!'\Iv%x/``Q4 C0$ C 0 0 0@M C0$ 90W;|O1 0 0P̀0$ C0$ 1 0 055 C0P+)ծ/ 0 00!aH!a``aH!'FjU<``!aH!```!aHjzp%ڕe``Fр0$ C0$ 1 0 055 C0P(^= 0 0@50$ C0 0 0 Ԁ0$ C@MOTb 0 0(!aH!```!aHjzū'W``f@!aH```!aHr jWRb`E0$ C0 0 0 Ԁ0$ C@MOx* 0 0 C0$ C 0 0 0PS0ԓ0tǎ1 XX~XR!LNN9c_ws+YVb``c@ Qa:;qx```wrxtLcBHx8Vx~אu8暽_~m۶' )?ef =~VTqPuq{3ƒ``hnUP<(U0g/y1rBb``VRF< U)vrc``Fۀ0$ 40K6ƪ?<_mݪ2^ 0 0 0 {URCC#:cH S7 0 0 0@Zš* Cc[ vP/DU_lRfG{ x^```jšfci gnA_kL"f0tW۾}x|AfOV.hVat:}Vѿhڋ_ 0 0 NP~0|yooHd}^{;;vM8 V̟NgP1x)4/rN^W```ʏ'=I+ӌ fD O>N:c(?CChPyPs8}Y=~Fk($9a8a0 0 0f`1׳Fqh0VX}7xY.S9݆VN*%߷Q*Tr~ߏ 0 0 0POAŏӫBPa[opW0t ',5z[9_@Z,njjy:M_y|c pϻlַOczʕ[:>vwlx{߻%K,08lyY/Mխ(wc/@S) 0 0 b}CPԳO]G>r>}/| ץ⴨a(hU9UTjuYc```@^F^n?CYxǟuI'j?G{]wޗeV*B6un:M*n$j36l?̾^' ```N tvZ}N޿czfNj(ۿKR0Lկ~38cq{c5{A{C=tQ C֬YӻCw}ni綾^Wa(ݓ)*1| ~Ş```` տ|:ġ-&jllN;pXdn7M[=^jun7&Δߧ]^sŘg}NH 0 0 0U 5lF_Ӡbwqo޼>)[ɋ.hY^oIpU|>^X```F@߫FAx| B.\a|||\ph٧y{{]1aengf>O^```b`OկiO!-!;%EsW^}ng£^{<9.]zbg u,?q*?%b^̻a``:a[}ۅ~{,#Kwq'o|:{h|zS3K_S->i!* 0 0 0P'{OT||5*wѢEgB{6wV{*<_f K֞wyKk9Y Չ```` ]}7ݡszC9dS3~ݪ>oy{ٛLa./2aԯk_׉```٬f6I*8qlD+_w]=Y:)n۞`SWFJcyf``f uu3r)|tc9f7ed[n}|t]wM]s5/{֤O6V}^=+_q3 0 0 x>N&evw|VESI_Z͹֭l P[c~6Ot CUgUȪT I````P w*._wN>^'tӧedSk׮E]+Ҭ+b\`,''?. >:1N 0 0 0404WWW CҥKw>wEq9Y/@ T```7mwL'/_r喴4.Of wկH3˺}Rz~~s9b``@9x I[ .\nSMt^x|wܱޝn[.MOJwV ck8^X7?nw```͢K'[`ǭz|O9Ҧlٲy@۵^{=i99\rAXNVK;/ 0 0 0j{}1;^šO&7nܸo衇}nפ0j4[]ſI```ol{SgLKVEJw'<5556>E^$H2 0 0 @L*TDU>VǶ>;=T% -[=۶m;kwVd>]җtA;Y:(vq:```]\N?޿ӽ5t!,8SϏed[n=ӃG>Cw7'ONN>n9Y1tbqsbX^2 0 0 @'aW#VOlw׵f]8#~{=H=>?SԾ~g JG캾`g``^vߞvѿM'݋I j C+VXaÆ;vlVuzXN{.lY 8s1jX?WaI%cBs````t T =N8fg8Ԯed Ӧ祛ndO~rg?=?y{lPCA^DFu 輠y.= 0 0 0@E~XN>oh9u;DfFjݺuioM=݇g>+_]wݵO{ olPN7D_+```` 4BDxLSN@A}O9͛6m9==}fwUG/}i_5gYA0T%je/r ?qE1```@'!ױ[~Xo5:AaC]DΛڳgOFVIV|_{N0ֶfXG 1F^ĆEs9c``3* U29cm'KԲF:1pUg}Ν;2nei٩yH_'?Ih'?oxR=K% BNu>g``EfALmF}Grbj|v8io 6f 홙Y5O9[om_7tӢfUPL7lN^0y3 0 0(4 <{oŝnQPr! WZf۶mB9/ ~؈:߾>9k#ABޑ]ܽϖ1c` ```7V<b~ϙrj6k(5 CNzS)M?YZi=~N?xqIY~lFim3,v׋cc 0 0 @(T!.5SA(~NPyP0TBv7nN6Цy8<Cmw}'滔A[w B6axb*v/BU71c` ```5hX}!Lrz[2V>ŢFkwo P;ņ۷oO}sܣz_ny䑕/f~o[oݿ1T'l>P'{ P'A pyn<7 0 0 0@1>AjswJ*_w,0] Aedgu9{hY}T94wwR({޷ŀגNP<&ӝfQ(Wv:ycƌ1```@1U#,rЉuNU Cf vikwر+}[BVNLwy犟Rڑޮ~Z6KbS&E3KƊQrA?e, 0 0 00|: B햅5:C5}֘=T% E8Ed|ߋ_o*O?c˿Ē|pE+ǡޥlXPit~~;c 0 0 fw+ƠҭF!YЉ4GGCNmݺu޽{g_,cO77S~󟟝'*Iq]nPPqcvL7Z:Pَ&MQ0 0 0(S%CP{(~ҴC}0T5G(/W(g ;Hj$kҾB{Gb Y95=C~_N?޴lͷb*{ 5|9 5X9 5_ituBb``hwKVĊ3: Aw=+[9P9 䍧˛NqGZ>h+vڵ;ݚ~+|O9׿t̤8;-)[WW≏mjzAPQTVo_dƀ``|fUA,D)ԧ:9(PcYqP|lb:CN\jI]th}҃l)򓟜l=4QbFN7qUs-M*^ͦ5ځ߽aT=1```@ޓÊ˶: A"P]9ōiד7n/-T^)u 'HM}),_9bP:Ǖ7_}Ĝ*zD|ױ, )e9 vͷ-c0 0 0c*1@PtvGr$*CP^FP\>VlOySO?5) ݳbWrDZN6t{i z^ǡ*VIs 0 0 T3.T55?Q|9, 卧ledyX=[4S>3\rʃSe?sġtL_o WCnHij7[(ߒQwrB(hZ]?޿a ```5.n5i~6ɑQ@Uwp7w"k,7 ޽{{ܖ>-[6 y~)ŝb3XV"_CQۺCPqP9 `,lBvbo7ҟoݿa ```0gABPq&P9ńN?^DP<ʷot;n={>ߗ1S:@ڞ.KZTNPYCP7Л&QJ:,6Li,:hߡNg CUPMBZ-??y0 0 0c !(b53vbb(TlX:vړm{_/ ǪDm:!uܭXZ`I SCj,ߕӍm6݋B(Txcnc 0 0 B%c͂PK^lٲic^zThz\=0 ^tlMXCwoKZšC0hYMohz|y```! ĘMF{ ~B1Sj)E-޾} 4_eO@s`Yؤ*-Y6 FnYyP1 Cњ<>6X ```` c`UgřB񵄣]bXBQEիܹs+_i_M:0ta(fSұ(؈-hbFO{ZJ*FPQ0"Eu;{q#./tB91 0 0ibY.?S}'Gұtn 5kVt_=>-'I؜ctE6@T܄:uӽ:YBV܌x>x````x vrIyPM]Ѥ`r ',8_w;={s]by:bS8b@1gE)//+ֽxg 55a(ǡGͧ-˳vDyQs\1 0 08Mcf -+aŊ]μKmot u9q(niT/@%5[^V CQ&kʞl,&x4yBN:zի}h;\1@IėG?Aܵlc:lL@ Zv H1#я?"ˈ@ @GcK:f(fM#`?EY;1' *GDH,EL*./+AT}|Vr0 0 0 0(oW] ?GjVŬ[.xӞ,ξ曧x??[ܲAmDgXb+;QD(.>Nq&QD9=2&Ţ9=9yΒW+Ib{,_򗧿/Q6~eeq8VQI9E #<4D30gŬDyZBCm8yYF>o>1```@ os))}yʝFv^,|߼߫ CPS!:-x~RHzcHzWĠW|;+#rR9@$3bo>Bѯ~bY̡<]j5Ggk9 0 0 00a/[|mh{'^A/_lCx_˸b*@>O:6H(fŒXY\v(pՋXbY`3T24ƀ``>V4{7o{ 2RZzmm'?#f4&n̦4ZR)xh6ϸfMocO:vc2)fҳX>"YK"m.l.Q 0 0 0@ mB^,mΥw4O/4hǏ~wAofa}RH4 Q,BQEqfYD:QgbQģ8Rt```3+lG3ؒt,O(V~39k_ں4hszO_ΟӱgSݘ.K;zCO`ZP36#BPUoNg.8bC8bK#0 0 0 sLdž4AbCMo7/yn:bENLOIhs BovUHR0?g-؟(bQYT<&yQ>Fc 0 0 00w8.JGl͒~Mh6-?OW}]}度@#PuR4:2 㨘qyUIc 0 0 002w7fʴ7?jUx#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0F#`0Fڌ"@"IENDB`F(  <  zhttp://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePagezhttp://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePage Phttp://research.microsoft.com/specsharp/Phttp://research.microsoft.com/specsharp/zhttp://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePagezhttp://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePage@http://www.cs.nuim.ie/~rosemary/@http://www.cs.nuim.ie/~rosemary/zhttp://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePagezhttp://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePagePhttp://research.microsoft.com/specsharp/Phttp://research.microsoft.com/specsharp/zhttp://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePagezhttp://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePage@http://www.cs.nuim.ie/~rosemary/@http://www.cs.nuim.ie/~rosemary// 0DTahoma"xCZ"̓"4"4""ԓ"uJZԓ""DArial"xCZ"̓"4"4""ԓ"uJZԓ"" DWingdings"̓"4"4""ԓ"uJZԓ"0DTimes New Roman4"4""ԓ"uJZԓ"@DCalibriw Roman4"4""ԓ"uJZԓ""PDCourier Newman4"4""ԓ"uJZԓ"1`DArial Unicode MS"4""ԓ"uJZԓ""pDCMSS10nicode MS"4""ԓ"uJZԓ"DCMSSBX10code MS"4""ԓ"uJZԓ"DSegoe10code MS"4""ԓ"uJZԓ"DCMTI100code MS"4""ԓ"uJZԓ"DCMR100code MS"4""ԓ"uJZԓ"DCMMI100code MS"4""ԓ"uJZԓ"DCMBX90code MS"4""ԓ"uJZԓ"DCMTI90code MS"4""ԓ"uJZԓ"DCMR90code MS"4""ԓ"uJZԓ"DCMSY90code MS"4""ԓ"uJZԓ"DCMMI90code MS"4""ԓ"uJZԓ" DMSAM100code MS"4""ԓ"uJZԓ"0DMaiandra GDe MS"4""ԓ"uJZԓ""@DLucida Sans Unicode"ԓ"uJZԓ""PDSymbolSans Unicode"ԓ"uJZԓ"`DVerdanaans Unicode"ԓ"uJZԓ""@0.  @n?" dd@  @@`` ` X P  D !# %')+-/1357 9:;< =>@BDE FHJ LNPQS U W YZ[]^`bdf hjlnp rt vxz|~   #'%     "$&(*,.02468?ACGIKMORTVX\_acegikmoqsuwy{}    OR$v1>tVWS㓭]]P#b$Up}!;܉b #b$k*dP>r-%b$M,A]e" hgB 0e0e @5%8c8c     ?1d0u0@Ty2 NP'p<'p@A)BCD|E? f ̙f3f@T[-As ʚ;eZ/ʚ;<4dddd|"xCZԧ""H"CZg4:d:d,x7kXjXjH"P"ppp@ <4!d!dfXZEe4": "H"CZg4"d"d,x7kXjXjH"0"p p <4BdBdfXZEe4": "H"eCZ i)___PPT12 %0___PPT10 ?  O      T  UR} !"#$_%&'z({)*+,-.X/~01234567|8Y9:);<a=>?@ABCDEFGHIJKLMZNOPQRSTU-VWX^YZ_[\]^_`aIbcdefghijklmnopqrstuvwxyz{u|}~y/       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm( PK!V[Content_Types].xml (|N0H+8 (8ĪVEBpֻ3iVwbl VLly Ё9!u{yL IuF^k2#z cẽN`0[mb` \!#s,Hё9}~TU 6Ul¼;{-dۡx/ ftΓCR}o v|i@T;\/E_PK! K& _rels/.rels ( 0nS=H^DtiUۛc a)hěBUrdk)Dd gIDr*dS("QlT3Q4b̜'օ9I]e3\0ťQ.D=vtr5aƓI+D#V0;f[e!/PK! *O8tableStyles.xml[[F~xfX7ب>۾c(Vf7;0`Cn%&ss͙X(Mf2R J3GX~q3[~޿W8dwL~$[?;?> M9q{IUQΏY LpUuLK蚮[2 ՜ن,58 ;oa*Y$ Q*&֏da&p#ELEI'Y{U쯿ȓ [JUXE`H/hԩvj{FgɖqxQL,iR 'R>>)jisJ&Q @y[lggH<ۑ*x0^|N_p =^CDx,8(Vx!_@9*J}k!F2tKG*(-I@1-o뺶m@\8kᨎ=V1_FR̅RL Aڠnt5l߮0wdD?GZkVOl%пKR*Mvز,l l-+ˬJjBZ5r(Yqw06PQ.`{)I=AHw6 pe uf9>NCAM#lPx"?iaT!"u"iTH;t.m 鬡ZmFHtEA51 r}4Nϭ>[ i<ƈ'+7Zǁug*eh`jN!mR›BZ6Nu;D:T|μ2I5lsAZ7l26RoDa&HF/Dr,ňկ[X~NQh〹 unCeZuZv!"v3ObX~|v9DX隸rGAH.zJE@zJX@p@@eV(5QK}dNEҏmi8SG"RC n6[ZppN@t_%B[ӀnB&k !T,tgxRʔGxo?3_ěf%3,Q c9Ncjc{FI=QiY:Nl_(Ngy6}ǺÏ͇f!¼Y6tՄ>_|PK-!V[Content_Types].xmlPK-! K& 0_rels/.relsPK-! *O8tableStyles.xmlPK  "` 33PP` 3333` ___MMM` 13` 333fpKNāvI` j@v۩ῑ΂H` Q_{>?" dd@(?n<d@`7 `2@`7``2 n?" dd@   @@``@n?" dd@  @@``PR    @ ` ` p>>#PK!(b[Content_Types].xmln0 EAkP }l} m $_tI$svs^챐KkH$Q -G$oo1# ɩ5 J# \Qg0?0omRo?Y8 Jm i|TX+N3tr@9>?4 ΠMfrAsѺo_p?yjŝ & Xg3PK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!i:M&!drs/slideMasters/slideMaster1.xmlZ]o0}u@HU۩C՞Mp%+6 #o)s}}ν_zaEd" YXL(Oy|i*%#32a%|{^N8+-B=XʼlaRZe9eEJ%Y<5GSZfJAbY%! ')_I^Ngw-/X Ө K%3>nwEĉUHDފY=GÐX1OwcJyx"tJ녪~s23#uoZOF7 j8y$_bU KNrxnp=iѥFuCX.5[J}A'G@|qRb &|vXaL=X A2xk :5^B ^nv$WJiq #W5#?IhBT @sWR \{ȟd=[#b: ;_#BX@Q-*Ӽ7F#T#x HcÁT,CxGp "UEeOijxm8 h8Fմ7߀(_Ѐ9XPbNE)QcA)}UnEa;Y¶T{*lIa-;*lͿUO|= x|0}Mmw8c?edSÞeosٛ::%gSI.iBa}d>-sx6fiRk9ass\"v6wvza}s$ԄQ焭چ$ffApm(WjŽK,+PLƬe` Saxo˴ҥM,B:J4R|&X6Ϭ#nkվJdYW3$ddO^I,@J! 봕nc%,NmP][L,@3YX26 PK-!(b[Content_Types].xmlPK-!*8 *_rels/.relsPK-!i:M&!drs/slideMasters/slideMaster1.xmlPK> ffe(    `&?Rectangle 2"ÆPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!drs/shapexml.xmlUN1}Z͆҈"R"~Mx+۹۹UEC]w3Ԛu`-$ S*dpyAYt󧫦FϽoY\ྚF"UβJ'уBڭEVB~Mո2U<ȩ:BMu 3-YgĴЈۡASZXSo04s!o5비P-G؎) 7Ocm /9g[ {yB}L^ޥasqX9 *Cmj|X"sFrDm{m tAӾCPVغߺnlMh!]+/-Ӫ.xA+XJ(bTXd36_r@VF9gbnlGo'V$'LJjÂ)x^8’C3mVj o1S!Ep< ۸i 4pL[1Zyq#*׈IA#Q nj;YύR4\_v%bNC86Ot;NYOlҵ Yc|QK݃ ;p KnCmK\,QCR_J,Ɖ1;`1jiYn;9Ͳ\Zl_heCjPx]*zˏZތ Y k>_Ջr֗}hc91PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!*drs/shapexml.xmlPK-!\wudrs/downrev.xmlPK{/ZB:2___PPT9  V   #    xZd?Rectangle 3#" PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!':]3drs/shapexml.xmlUMo0 tiuܡm@VMiYȒ!)_#i'zRZG>]cFhev(vʗ-sJ`ӹ(?]~V6uJt0 ķ*H6]; Akm<7 LXl}AqBKť;@ 3VG "\c }ʈ((ڀq :D-`G/_"Vcb0U9Jry5fC,>l10ջ$n_&&O&#FkWφ$\, YL)[(2 OL5c.#(QK-s 6 \RuR| bS@'G( NY>K1;;m.?c|0Lt4/S~q% lnyb!c¢*;ݭ/n"p85yVT)t9ژi3(Laz7Vʚd@q?`aWb v2Xps9`[vwĨFʸFn,&t [H™",W3,ݖN԰,qD :0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!d*drs/shapexml.xmlUN1}ZAF,J)H7qlwloࡪHyW7RNxəDar.9s0mPf|'ft* ABM% cKhJ'уBn~2V&8%}P̵d]ި ##F&ahTCZk6 #Z#CDB^a;f&'?ZQc0<W8ft.[ȭgvǙED FHҜ 2nRb989**q佶l :OZP*xjA!{^M!2]*/-Ӫe3 yLt ~"N(KZ;BLr6HHB P,͸6 *u|k:h;8I5MP-trYLa6y=Y%.YaM3pD&z.A1^8$'\%§!mf$1Ns(Q?/ylEn#3]k=V/"| 5[JU*RK<@_h8oՒ$F- r}rQq'V)>It[c|IQI4>x&Hս,#-\89i^QPK!3"drs/downrev.xmlDMO0 @HH\&fe4 b8{T4IX;~ֳ|96;Qw 8\ujwńNc)8Sji%.BҐ89f:`rۊIτ t2۷C#ӑR7 DC?ǍEEلsØ(( 2PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!d**drs/shapexml.xmlPK-!3"rdrs/downrev.xmlPKy@PZkB:2___PPT9  V   '    x%Zd?Rectangle 5#" PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!q7a4drs/shapexml.xmlUMo#7 t-Nb[]q9GFHW~}Ijlgs*98H>>q>~:VtƻB> Nʸu!~yI wG_c'yW&n>Dig-$| At.AD=rU deB,tF"Ϫ*<6U:2 tZ_?&ݷ<h&dB:2___PPT9  V   &    xd?Rectangle 6#" PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!b8drs/shapexml.xmlU]o: }p׋.f]0whuw@6M=ӲF II;IקayIhIɣw㷙)_,䏧)bWNrxϛ4v]vlRꦣQTn!vWBϰuAG$ QeQ [m&üуeͳ?ty|6_?QǑ0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!G8drs/shapexml.xmlUn1}Z%[Q6QP0w-_߱@ }sxMJZ <;r&QR,翦Ó+Μ,A9Joo>naݠf815SH<=YIP;nSB~CGjҌmjl* K]!TY B1Ӓ]Np-45C0ZK(:"|V,l-l*[*cmr~yAms޿BH0` 7 Zg*h9γ~Ğ`:M!pP-]IlV##3ZC N|Ж@缘UBIb%bchHrL:W0%XJ$bXXݠ$76(&/㓿@"FR8gbnl΅i%Y%c ]`G9y9zEA/d41=#W RVS(&/tY)_"hU]T#24˴%x dqH4NPFOԙf$!^Vs)V*vX Hl!xkmHB\,JI,`^ŲV"%zιē) z"qqު9 I8[H+d\L!^N _^H*|g(S8KKr7&&+3diYj6A075p(/C6|F]:-'ծ/5HH:݂pO&žyPK!U1drs/downrev.xmlDQk0Fp jnPksmMRL˹\er^Y# $TV*S x}0jtLګ)53Єe!~b;2j.^\|$3Q`GyCiOy;RkWB܏X>?-z%Mg'`ppJ910F | PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!G8*drs/shapexml.xmlPK-!U1pdrs/downrev.xmlPKwB:2___PPT9  V   "    x%Zd?Rectangle 8#" PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!]2[.drs/shapexml.xmlUn0 }:t4`n6 +ÞiYȒ!)~HIeXҺǛmmZh}_ /[d٥1+z3Q\}Fe'M&IUk}>Ԑ3,zMQ ն7ǽʭ,׳ LXp$>i(VKwLZ "S p64QPCt]<Ž_o@;L &2ԧ"?,6jp.Ŏϙ m /hx!} ?M'c(kyzQr AᐇX{*"äj^A9"bLER2wAf2_ ;A_7ڒ#|YEQԤ{]úd+I']& mLl'0utK% :UƾԴŎۿMT2#gUI14O;p7VBD_Cr?Ć]caWڱ vJBϐ_PԞ0uwaI%J-_!"Eux4 kr  I7PFTjkr*ĝ.< ܽ-y^|uW8m[&6__qxIJ9"S+&AҮA\Umj0%Op!\j;1Dp~ΖKq7dtLY'Jo,x_k'0:^^%~;uKb5uW+ʋkt =Ck1IUPKJ D4vg9R ; ;R 9~yPK!Ddrs/downrev.xmlDAO@F&͘xm& 5rC-C)ލ9N}yyoё AltmK_gjl% 0L1lmQbC *62 גlA/xraƅ [z8lNFm.|軟wA+u׿N@0|}N[jcK ek1/PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!]2[.*drs/shapexml.xmlPK-!Ddrs/downrev.xmlPKUB:2___PPT9  V      N?Rectangle 9 4Z T Click to edit Master title style! !0   J@%?Rectangle 10 4Z RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S    P?Rectangle 13"\VPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!15 drs/shapexml.xmlVMo6 x-?Uw-FEϴDE)R%)I7츋(msGp͛{K*S>xsřԙ+[Μ:hg{\pYYfﻬpoL#5 ckjNj/<ժ?ע~Ӭ-I~mY`p=rE 2G%`f$de' 1 E085ZTJ; V,aiJt*kkPZaR>n+0ClaAހ1;4"cd:BzS~$#$Q(15!!} vxp 1mxAl7xu룶+}kw!7~B G12Dcs csM< JBݿjK#az:/?uv!tڶݼ%8awu͸FbbBYz~O&`zQo<{d7Md,?\O@w3ט"+jkR.u&Plm5Ң;@M8IKk5˨;Ej|Ҵ`U" 0UњgkkLA24NU4i״%)s-y_v;[2ɡjAA5ʥ+EkfJa IqvZ35s_dk3pN5U0cC<@|-qW4*,WCB؞#`.y|9Wv" q{DL|XWT*0V n9zj"z90f t PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!15 *drs/shapexml.xmlPK-!OEdrs/downrev.xmlPKK R 4Z:2___PPT9  T*     Pj%?Rectangle 14"wqPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!H udrs/shapexml.xmlUn0?-q#Jq[ EY@ү|}iE_앸\wF7wFNyvL0yFgW9X6(s~t]h3av8Qܹi%ZelZ$ztP;nwi@!R"XJ’e й/R,.3mB26bvp_Hǚ֚u-t#։ G܎bӔP_0T9Ucmr޿vmubCLPBo0ezWIHBfk&ɨX(sK;@pT bO-9]F Y(/-Ӫ'5 1Ń)5FΫOX jJSnP%}|Eml΋4*ߒNi;ő&dS_aICs(Y)WάDO`A2LnL(|BkDx*f"1AVs)W+j|v!Qg2@Ip0$6^!`9 -joHs.:Et]V-LcB L.q'U~t7L1UrF28F+|L$oo^w\-C]om++hiVyQQO]`IxKg{ \XF'3ދ:PK!1,drs/downrev.xmlDJ0@PFU(K"m8L`$nA3ox첝hPJ(^7Jx{=ܬ ;pҩKcS!bb\0 pamY¢qAL{Mgm%]믌!}P$،YYqKUw3<c 7PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!H u*drs/shapexml.xmlPK-!1,ddrs/downrev.xmlPKfP0 B:2___PPT9  T       PM%?Rectangle 15#"êPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!{ɣ@ drs/shapexml.xmlUKo1W|AY"@#92^p+ۼ;3^ ͡%Rz<7nKyeMʓ&gd6Wf˙B[#S?zbp^EUBŸJ++E7*'4ApTEiBSf=a=vL%I:3#J(3@1ג%mި5!HF6[87$8f!Ezk=F#nlVDo[TThۦKyn}K6 .:n @ռ"jV·oҞ;H(# tgPi}j6a_/8"#˥ 1ʔwDR1_MN*A(eP( xTXQ, qZ@Rܾ@]Ui&auCk? a3Ax$A5}a(Ɩ,T&/\R̝[b'š0#3%gƑ6? d`>!ִTbU6[ 0q'TS珻"Aޝnjra+u;Q8Kt.W*O)S.<w3Wu 58[J#jAtE~%R^"nY[+`j5kGMV9  tm@k-Sg525g+4ST,*Y M–Jl18O/!p^RՑ9)^R3)E/Y|~@Y&%^#c-v֞?p6~߫tPK!"Kdrs/downrev.xmlDJ@Ea(Ԓv[D-ЂM4fw>g8X: $ VNVp,3j% Z^_-0l4\(!C sI Fvr R{0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!# %drs/shapexml.xmlUMo0 tiZA-A ږ-dHr>GJv0 2mQt{)O Be_kΜ]2Z|/r[\pv:+QZh+]j+<To_*q+3KVY& Ē$W4Tw!v=Kxu5/z>&_ qz)5ەQ ;ƟʶL&ە:%hʒafdzڧO`D85LË%g9]FaDȳd<6J9f| ՅpLR&rTm67HYع^Xdr$ H*w]RET:p^ Q3U`Td<CmTxK]KqVr 9>z Nf>, n15?¬9nEy&Wܳ ɡXBQ=DѷC\/?٬yTv f`N0o[YD!Qʆy]7o)ŌS.KwY9M[BxXFuf,큢s5%I+I k3ƔdXQ3+?(YI<ڌGKtHiemZ;;Z#L TR1X'B[gdDZ0cz|M#; lJ$`qXt"tcPK!tdrs/downrev.xmlDAk@Fe &JH]E Հ'5<͎I0K/7XW9 & NwQPsj%wbX-__Xhw{B#r BJ[2S7OH妗Y̥ƅj>.F\lWG<5U&oD1@_=r ܈A.PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!# %*drs/shapexml.xmlPK-!t}drs/downrev.xmlPKB:2___PPT9  /Verification using the Spec# programming System0 0 0 <  c $ ? 33331)___PPT12 $PK![Content_Types].xmlj0Eжr(΢Iw},-j4 wP-t#bΙ{UTU^hd}㨫)*1P' ^W0)T9<l#$yi};~@(Hu* Dנz/0ǰ $ X3aZ,D0j~3߶b~i>3\`?/[G\!-Rk.sԻ..a濭?PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!LD e 2theme/theme/theme1.xmlZms6ޙeױi;sftYlsww%ad\k;IX}{vWx"Ji1 R?J6;4%>iLǠ0uq`Iq&fXUA7+~J g4Y 7WNgp(10_԰ c'eϗ8h]-)ϼ]K^6\I:Iw7W/tW509sw: {:5"l۱4ϚlbP"MAF$tp:?D$ p6;B% jE~:%G9J{*~;8:M#dⳘ}Ns2J1 ca3d]@tyALGeߏS"!c]? Hu|ǂ,R.t{۠PBS@1+*e2PE3l 90(RѱqRPs)0WNX)EwRAQ"`o(8z8һq2Kpt,bGlXi :+m 5ȉxESfU"&*BF(p  Vf/#էNY%VRLY|G}X61g`"٘H^ ? fRޚc%kq ˋrΊP=.IZ/%o7g׸= +Ʈĭ e1V|20?*GE91)"M>1QH20p6ƳpUHtWcd;; |QƯL'A|v L2L! ea9;;[ . (<91ƣMXF# a7N f%TG-2*xv)0@tK6XŐ* |G04J-> ePRXYxf!q+6%Ϊ X_{|_ޥ[ X`6Da`+(Dp&JVV5/RFMP{l{?SUqOaʖt-T5XеV 2 m6wg0Vh[. Mn"&l[v<Ƨzm(=9lWtZP$@*+޶( Rz=@T!Bvj_P #+kt:A ֧hNb}(/Y1SvN6%8'J 9ٜ~r^I Zʅ>ɴ 1h9ٔ~h ~S4z"/?'λ:kaVrsL;D| ˌƚ`F(wЂR6]V*aq K-P=\T4=S4DU{@EP?P"<h\ގvLq;:\$ @Bp!0I(U% -eel@@+(.}/Nd/-"?ѷf.n/֯0=4bԧKN -wb&CNg{clAH>ù}+\[t5lh >juk ?.¥ޅ2دMe\_T=v.^.lك a"<űGi Fcsgx\-pϦcGšctnU$ܿ.3T(9 YYvNe6m}\~A>np[}w8Rip?E+υř/ !gj -elMe,SGm/C/}poPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 +_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!LD e 2theme/theme/theme1.xmlPK-! ѐ'j theme/theme/_rels/themeManager.xml.relsPK]e : PK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!6z!drs/slideLayouts/slideLayout1.xmlUMs wVδiK><;E j. 9>vۅ妖V3:<PR}X]L(qI`F),oV?{lF+MeWP3w ([k[31+-ص`L(>z>k\ Ădw0C3}Ќ0uH~k0[$ƯQ %63s/eIq; $#+h|fi6z5 KDZYUhlCbfm( #: <-U^՗YwF;7)]:{ w%7?94&xHyC ɇsLE&>AK^4yHuxt!8DS>O` kt>IHO 2Bމ}o%D)0V`68d@<,j%axM2=v$BN1$eB*̲o{ȁPVK/Nx쭄q,1_;˵+dZ(<4*#;Rtؽ8ġ;2uDY-k$4 {G_UG?K]қkl};c :ޢGwWlt4j&fo$U\2*ߋI^/PK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!6z!drs/slideLayouts/slideLayout1.xmlPKPK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!@i!drs/slideLayouts/slideLayout1.xmlUMo!W@ܓGUU+ۑ6êާ,l&JJ cޛ\m;z郲fO8FF͔?O>q"5rw2wW>E j6FWWU(Z' w7U;]]}:R^+!XI "raDs9/`΁--gX93PK0CV*j c%HlKLͻ[}/i('~R%e~q(~{7od{MVy PQga|]߽Xb. %0ۛ_ySΌY ef|֖^Dȹy]Ba-)t->C/عƽg*)$"{rl4+MVVjavwUO%-h}{L ,V2fXfi3[^NƔk-I\Ke1AyTàbCgD7o ay=/68XUQ3#|GW "eeѿ3+ VU[E5L̯̋5Le*[rբG-oOkE')Xv+t<$#ߌ`pH]}?K7Bgؕ}.{B D,LyMmQ|񃭒_nov؛[E[f &̲OX.+4#tpBK9)FNv #=#]s)y$BP# p͒?Ɉ4jD'0$}Jy{46px[1MM{EBLUy`V o-E^rP2"AƮ߸. *p|0(b]@;4S1" ItGwNl1{j{;`Oסr8@<ޠs=nx6x`Rv8MAG@B<@B !xI p2t;dB\2=)nG3B(mv× sߏykY!׬Ӷ|ۙʾs YN,w*:^'Iw6e,sJpLC{R3Ļ9ےݭt^wMGAR2S[Ofz>I\t`+ <CmDVf6JxIX4QʵbJVuybFpmwyeU:18:KWBڢUg[觊l++, (b^Uf+֖(7neaEˤI͘Bf1MP_ܸ򆐵D^-D>;[^IKC/"b!2>ڍk uKγ tuwVHe DS.8.]95 U}zꐟi WQ ;EK gհSRLQn]v.PR;x i˩/.8p-pĽQ5w)FOwxaDQ$ڈFPK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!΍`!drs/slideLayouts/slideLayout1.xmlPKPK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!( !drs/slideLayouts/slideLayout1.xmlWr8̾-?@<,ݛ4-boe#+{$[4{c|tOlR=a.2~Z32QJ>nZl_>iYleZWhT'/XijM W=Rž#< Kݯ/7<SnHL:˫ڱUC*k]ÿG,Lm@*#MjqCmLHeOqԋI0xD҉"=nX,ӽ~mFX,j{~+( L<}2o`o=.b8 f_WB/goыȓoD&X"6XUXfص}2gMY7#Q6)un )ߖߟ4MC;.-!=w|h|?:۝&.G>ֶ p[ڥ _Jf 1TkPK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!( !drs/slideLayouts/slideLayout1.xmlPK0puPK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!aBp!drs/slideLayouts/slideLayout1.xmlRN0#-&x^VjqvClk=x\uFVahb6LYs{,D%hgU{X,zw"Z3略ʡH[܋ዼ0X>F'Fx4A!Rn|9nU R=`?9K4l X˭.C]b `;Tjl~7oYSQx0 O *42z&+ S]d_T\Y?`RXTS_[9*O3_1PK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!aBp!drs/slideLayouts/slideLayout1.xmlPK`PK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!R!drs/slideLayouts/slideLayout1.xmlSn0?'s( R8m/Ill%" rJ%%%mC.|,g;z1R/WRծn_,r(ϟ6^ESI0 JyUQ7At-\xE7swZV#tj5:ܡ$cir%Y-dpg(EkYz}0qP"IǀVCNxAu"e1̰ E&0N6 1lL#'5;X|{],p/&U\-r&/&(pOQX:I~9Fe >,n\=&xAP&ҁF.H}} pQ5~-{A._vqfJ|Ü⛹B^& 4/S0u[9nB?PK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!R!drs/slideLayouts/slideLayout1.xmlPK0PPK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!󙖄!drs/slideLayouts/slideLayout1.xmlX]6}`}h`n_fgFLM1 ޛLZ ~_|iWl+t)9s܏C $/3a2ṒbE|]Uyrjcp*3'5*NEޭ.eh E>t|^gYśBHShsWiVVVjQ >5Kּnwy$/B%Y$ʕ1r.哦 'Ͳ Πy g_,vk]x`I'L8}_.v(们=zgYe&=xUC9LWI~{֒H_ =R5%+5`4}E&Oczt12CX"Xf.#I%{3|SFxWfi9mH:g@چCx>삜c  0\p(&fȳ3$3 Px+4M6d8Q `e8=İm!^6ȌӔgp"~7e Dz=xC[+FפZtz;}} $v~xNv6{M:wͮk9,M2Za((0;z쓫^c>xG۰6enz'۰ jݖWM$`x,wV W\Eu5K= zR)2Y_ڝߔz{eK_,;qӾ6[_sq DuvYاCJ07!wB46/8nÀI-,׫q2~3 u\g\Z**{10M8X;WkYp{[VRٲ4wiV?`S\D\.s!⭐#w߮ʶZekvR< 4\Eʘ.fRqF)INo~jVMWzL 34AyЈb8tީZOKSLxl8@v %ʭc[~>#+HwZ`o'nÙNIE9TKj.'_'6-b&|fuG+o}N[GHu}:zp0 %%IKF8LHK]nvQ9źD:ੲnv uy"xĸZa\ƕ;`6#\lrl"%DqGo^f=(aMT.^+r~qa>^HtmxٔN*.EcA^EKycA^IDb9HCDi#0RW`U@4$d4Hˋr$Jʢr"ZH~.Yoe~y}+Aу1ڗ?PK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!xS3 !drs/slideLayouts/slideLayout1.xmlPK PK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!я[!drs/slideLayouts/slideLayout1.xmln0El( vM7yjlHdT;$iBFу{8ׇJF/rja ę PF7ͽ*n1/9,xͳ̋+Ƣo;*Y'iW*M& ]ov;)/Њ8T~_J{5;F:$ߖKnRuʗ[lT4T4A!#:let !P]svc.kdu|u)䇝s ;,8Y9x@(DgTqRZn:ά]@F<{ [{Ţ(oK֒l~L?" dd@,|?" dd@   " @ ` n?" dd@   @@``@n?" dd@  @@``PR    @ ` ` p>>#PK!(b[Content_Types].xmln0 EAkP }l} m $_tI$svs^챐KkH$Q -G$oo1# ɩ5 J# \Qg0?0omRo?Y8 Jm i|TX+N3tr@9>?4 ΠMfrAsѺo_p?yjŝ & Xg3PK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!%!drs/slideMasters/slideMaster1.xmlZMr0wwhۡ`c`2I:`F=HCWCoktף$`ڤA'={2<{qh%0 YD>\`d  A>X ^{f+2 }`,,Xfo&4IyNߎaD~~Q%2F aEfh!R2F]H|^0_8Bc3P9)`aw9L;]0CX@2;Y"T(OPj=OP, !*2]bFe&{ @V) aYha&zBUC4f(?O(G@*$/x q40҈1#AF4Cr(: 4d 8i 8iz dA&pҐd1W< |B{@Fcl1*9PkFcn12oZ8d4HH Hk2_SoV{bVem ~q15.O|Uk<s|BRAo"K*-U֜xʜ} L3iUg:P<+ Na/OM= -9b^QhvW6,7k y#n]w9|$IdʕQZ#W`8m? 3m9) ^ڇUL`2ضW,@b^9t㝦wĜYcS!돋G$ܐ*gHivց#UnB4d}6=gS/a D72Q$.w0G"k휷]WSJMճWL*Y?si'tH^1)heYnjO]KMѠTػb9 ;Rlp&Ӥh~dUVe&U(pdyB{NlZSl4R PK-!(b[Content_Types].xmlPK-!*8 *_rels/.relsPK-!%!drs/slideMasters/slideMaster1.xmlPK ~#v#(    ^&?(Title Placeholder 1 `} 4Z T Click to edit Master title style! !<  V`?&Text Placeholder 2 ` 4Z RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S5   \?&Date Placeholder 3"PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!, drs/shapexml.xmlVn8/@Zb;ȅST5E$S nEC@ΛfywhK p&0e i=]sѲG[u6e R^e\ _c:0PeF)+tcMYgZ yA!kJؐ;eawx{$´y0#g\aQP[p HFUq|(ElA~\ZMU18_! ~9߀ @. B d bx9.cB^WbtP SHi"pk#Yn%Oa cڸ' >F#L=ėg|gNPwF=@ <"DaJ$*b`T$GD唑djyT|wʱ= pȢMhtH_K|&$9E7: i%H`:-ECF8  aB n( ZBߺ-%/Qi'F#6rHRzeE$ъʐ-ne VvgU]١ Clnc//8XIMjgy8?_ߎ.ƽjMnԻg,\úch|VƊqv6I ciY,@I:!=->mVqV:5 3"zjyWL5tT,1); U|J;}9+_쉟8 3׻Qn++XS5ԦlD=Q4R58/c5G%yiuOB"!|ױ eOcwԦ SFW*>f%8~V8%0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!F .vdrs/shapexml.xmlUQo0~G?X~E[ݠZR*:~qPllYCs|}ݗΈX|(FeJ~vV+0u):7_]ipcR61`T;i"-y4F3px9EyCWv-u]xVHQșQ{0tcMEXz|ܪu <4h?yʧ 0p7O%ޕ?cr!% ]"kјb_ˋ z"wKvPqq9)F2#aOCQ ^H)l!2̄ݭ칢|2o|PwxLǴOF;g;|R*sӄ{_ 5[SP704wVJ/ ( ִլ5&-xGe'ɐe4sF6z(SXOHP:ybɠŊ4!} B{X-T;Wx<?C+M҂6ihT dpTѩ+eSu_PwVQilrʃT\^?4V tmgVʹϾ-2&uznJEݷkR1dI֞?IINbnG9-t'Fl36oNZ2\]`'ۑmXս:Wg(r@k\PW "&rFˋ5]ɇ}DXBTH-ŅR1t:fJ{iip_zn?anˉTlnU=|ݛ^-[x}5?=H<~U_> SRL[6͖ 7PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!F .v*drs/shapexml.xmlPK-!drs/downrev.xmlPKR  4Z:2___PPT9  B   P   l&?6Slide Number Placeholder 5"PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!', drs/shapexml.xmlVM6 x-[Pba o~EQ+koGRvrl=08Ùyof諷V0*ɫ %Bq]6!ף7XTɤV"'aկ\uͺuxly-Zf_N(UڴaiƝV(rXGs҆lYvL`WW,UE1],fe4R1K4`8xXAGEA95;02vX<F$uy(XZO!jkm)(e2#u)rl-s %8)w&)۹/ ҧ+2A5&Ѐ&U#>J<^j2,|iȁ!FwLk_^/&xsE6@<$}=uwSA:-3'AnT` ;@x\-F]oORiY1_԰ 4WGu<-J3`עR׎wU+znуchɢ=>kà *ixO U st~sΗhN'bzLo"u?+ S0`e߷Ml"!+B>D GRx9U c* %{a&gbǃla S@[ueTtrQU)tQ>ȡ޳Zq^~1Xkf8V3/6P2?e܊ ',Teyop&'PyvPK!Pԏ"drs/downrev.xmlDN0DHHܨ (ԭ"DG}NDlӦf?4ְ\(]0; ]"edc`pk鐝(N5jsj)SדǴqlsI\~+ljz^l U=Ujַ7s"Ӝ+QF}|2E ŭKPK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!', *drs/shapexml.xmlPK-!Pԏ"drs/downrev.xmlPK `R 4Z:2___PPT9  X*   w  c $ ?"3-PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK! drs/shapexml.xmlϽN0wnvt@֥W>[۴o_}Hݰ/Δ(s4+R ȤJÐ O㉍h!\a5RyeqcX[L qR/2cӺ*%3vR]aMo>Qj2v AޱPK!KsALdrs/downrev.xmlLAK@a(X$ͦEivfgCvz^1|XNS# lz"mx@ńl L~(²3\`?/[G\!-Rk.sԻ..a濭?PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!ܱp]theme/theme/theme1.xmlYOo5#MvlM@6nzxgx#ۛto="!! č*iEP~qvVIdɌ=o<:$BR՚H&aۻ7\T8 0 i{3"oDn)nHS܄+xJ Ѝjcx(1N1IʩH>CMdKN&'5Bd tYF?GC Kmf~-bjҺe)q>h "w`M,eF,"nYk[NdD >67 o.nwů/Z o@Z;t0Ȩ g; o2PDf1Zk1~Ȱ RL3:T3f/4/$}AS>L1Ĝޛ߿yy??yrGKY߼~E5^/?^ KgxOi|[q>19B<݌a\Xo(´b; %NRA"}guk*H#0SV;]YJ+ҼJfMqVoBU$qc8Q8$ QHB*RǮ\B(`Zi;4_CcˬJ@cY=r"!+0~Dcƛxp\ErcV6m*!3q}!a"e՚-9TjY"U4oc?F8NCDeB=~Rwߧq gBSc\V3WmA+SbD^;Y}\_|{x^^?_{Y+B}mM/'1r[Y† `P3GERB$h2#Jr <3\I[aWԇ[$V'bn v*||Xĭɾ8̮]wRs/=,)''KQk5Wq&p8Ka- Sdܛ\17 peaSR!UȆB% f(lk `G׵d2!*;4mg_Rʧa1} ס T5Դ͔[+d,pVnul& [I<ЭRvU1)AO`-NW`q"U(?80 A7 9Kä5> HeD)eI2b!a#]BT s߳ )SCd:l]o{oY=1oyVV-E8Vk+ւƫ\80X4D)\ ?*|f< u"蠉A@T_q64)kڬuV7 t '%;i9s9x,ڎ-55xd$?ǘ[/P|݃)S|_ZϡH~, PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 +_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!ܱp]theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] : PK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlUMo1W|O6@ ZTHdxm6[k"V=f{rj\)_0b˗)~^]1Ȓ%ŷ&';q0-W",XMLZ85/Yi/Ez&\tW5싢IA A&4Mf&xvb܊;>r(؛vxХ($5,SN@chŶ.Y2y|3z&x?6 xZY`ّKB"vmلN1Op"$h\oz:aK'2u}9y*爔C^W=N$T_+5q^\m)=AQ~3Ej|U^}p<a Hօ~V3 o)fauK,J ɋ% ZV;7 N_Sܡb3(Pc AoL b#d*) 2 %xf{}7-RTr_! B$) c=5,O ;o~ D# О=:G :*8k>~Uq*JgƸss$:gXx3@S*{4܏1f1}; PK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPKPK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!@i!drs/slideLayouts/slideLayout1.xmlUMo!W@ܓGUU+ۑ6êާ,l&JJ cޛ\m;z郲fO8FF͔?O>q"5rw2wW>E j6FWWU(Z' w7U;]]}:R^+!XI "raDs9/`΁--gX93PK0CV*j c%HlKLͻ[}/V:H#a/x1 Aή {_lbs&y3˓/w{P4:ZMj*Q˜?@Гԯt&" *[rբG-oM,џ^3f`Gf7lFzYu҂-խ~r8WU-3!pf9AGO*?&MW;FiՒ[Y*75H(]ܖ_ݖwRo.0*:HFLAJ-OYJT *a8d˶U"c-˭TfiVNAػ')P!Q'\Nk7 'dp^'(2?'9I؍QRѯS)}̻4IghjYBD nkÔK-^;ڴK>HK{ X͛n|~jL}Z񇛫xC]tV~B%\0&hLNkCzUȝ.`vް:nYkdSt:F:{:FR9Ol㝡DvP!;xg(3c?Q(i7%aigZid ﰔLTQcT٤x3|mAӄe0"x]),2 5b8} G(Q uH[iSդT_M6h]6 `'m;95v.a%;u`痰%l 8!$`8啚2=Jh֍.p%R=譶dnqG0?1y };ˎ1[uIuـ`Qaf&Z8FAF &5rVifW͟_ywdz㏧np1rcniۧ{ m6[=)3 J4r3z_zdwO[ Noцgt(/zs/0%|f;>C68!{MP;MպD_\}嗽 >p[٥Mf 1T#l/PK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!U !drs/slideLayouts/slideLayout1.xmlPKBpuPK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!aBp!drs/slideLayouts/slideLayout1.xmlRN0#-&x^VjqvClk=x\uFVahb6LYs{,D%hgU{X,zw"Z3略ʡH[܋ዼ0X>F'Fx4A!Rn|9nU R=`?9K4l X˭.C]b `;Tjl~7oYSQx0 O *42z&+ S]d_T\Y?`RXTS_[9*O3_1PK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!aBp!drs/slideLayouts/slideLayout1.xmlPK`PK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!R!drs/slideLayouts/slideLayout1.xmlSn0?'s( R8m/Ill%" rJ%%%mC.|,g;z1R/WRծn_,r(ϟ6^ESI0 JyUQ7At-\xE7swZV#tj5:ܡ$cir%Y-dpg(EkYz}0qP"IǀVCNxAu"e1̰ E&0N6 1lL#'5;X|{],p/&U\-r&/&(pOQX:I~9Fe >,n\=&xAP&ҁF.H}} pQ5~-{A._vqfJ|Ü⛹B^& 4/S0u[9nB?PK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!R!drs/slideLayouts/slideLayout1.xmlPK0PPK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!a%q@!drs/slideLayouts/slideLayout1.xmlXے8}ߪ0˸Rf_&3S a7ݲ\T%U /Fy6BS2>/>{4\!Dm'$mbkXd'l<]F`Rwa=:wY&{e>Kɤ?}^qd3 BT>x8| 1`o*ޡKIf])&)ZhZl EF;)eEZR R4| 캽tۯW8HQLIz$dpԺG Vw³U%cVbX0~`Be珂h |(D1zN:YNLJ%:`D԰${}rubn:`]6bXWKX- P|I$D| m\DJ,](Sz7/TgN֊QIZ؊lO.Co]ӵiwF_/j? ?k4Mrkn̅NWG|^mz5o{ӴKFڹN^-eMAnk w:_sP5BOc#5Uw0 \~'^1Ҧ@EF<@GE!&]Y>:܇bJR i+ L$20] )Rad:}2(ckφC̘2CdTL\<0U;V/,h.fg}sI~l>lb4n[̲E=é 3`ד)O&f/0qt9SY~rZN[q[MSЬ Es0 叞Ƌ*FC bL^gn 6~lA~X.k޻riKe򤉐Ӻ_Vlˌ4[WtzxN,&ӥun\Yr49~ ?68" 3"hIXrCa痶ctBl1vB k ?lL8MX&y #:UA5P>HrmdYtvzuZv }Ħ]t9u]=dk޼mW64NkMl`[uǶz]X|z5jݔ &$`X'f+. %=e)b|zWeϲ\ +LQ]{*oe)_Z4y i`zQp"[|llб56W_1~wgꆖw5qJ|?FPK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!uq !drs/slideLayouts/slideLayout1.xmlPKk0PK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!%Xwb !drs/slideLayouts/slideLayout1.xml̗[O0';Xy&%%E7ljlӵ;i %Ms~fgJ4$JI-ԏh1.Dki/MnUqcСm'¹&XȊ㺑sT< @wziz/uԮ7RxvA;EN[H 5~K$n୕EļYb(]T4003HIrz4E[ʂ^;ъO 1^-4|57[M"$mMO,\9& ؎b ^gw<ߝstJdUXzY't ?^vgR,X#U\䭏iD1ģUP,Kd?Jlt`$nrVk ~9ŢF:ZsḙJ@ĸzD)T 9!w$l> pZJF P8G3cΕ0zOLcW:i!y^-7v5SVxˈBe#ޡnrQ+4KItKUE?B۠PA'(Cqu] q63)󭂨 Z; RNz2mTdn*ϕaKP}+ڂR0Wу`OlΗnJH Hn=IK-`( /y @-pw)ɟ [і7Mg%Ȗ7@-xK!y = ov[?pn}@wy܅+^pexs,vC tkVtt PK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!%Xwb !drs/slideLayouts/slideLayout1.xmlPK PK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!;VO!drs/slideLayouts/slideLayout1.xmln0El( vM7yrlHU;$I]Fу{8Z}Pra2\\|,D058-~=aʠ-viPŒW1(piH~[HId4\Ԡ )vQYNģHJ0SԜ@29uIu>,^|NJKfa k")1w+9Yzdy0z(ޤo%(_ϧP qZ6]) JG&A2*#~$& rv& J90cg <'yW|Ldc1baW+dyJ*3*J א @ËVEP D,Cۀ$D'h<|AI3SC!7ȫdMlA`e"&ê$5@?`t$6w3J Sfg, =A}|&}Rtg؝:W^mIrvo>zLd>޴Er#H;B_BcPK-!M[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!;VO!drs/slideLayouts/slideLayout1.xmlPKUPK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!d" !drs/slideLayouts/slideLayout1.xmlVn0?'zXvM/y!N>h[E$]4rAvG3\]Iϔn:1( LT]݈+ 5``tpm&Kﶆ%cdڰN2VjGkEv$aK|nj*-Ɓ(ƩzH=ϠI4췔^B1Ć&`WK^A[xM+-c$J.僲w"M>3 f |h[v1%Av/$ђ du6V_D`t[N2ㄈUP 7]N,ߕW֌rCQ͇V!E[Y1EVDN$Di%$T'N(rU;hYݏޣ/o]%fiYAZso9Ŏay Ӛ+(tw,xSV7Rm"Ʈ3 ayD@}| r aK}3 + 'y?" dd@(?n<d@`7 `2@`7``2 n?" dd@   @@``@n?" dd@  @@``PR    @ ` ` p>>#PK!(b[Content_Types].xmln0 EAkP }l} m $_tI$svs^챐KkH$Q -G$oo1# ɩ5 J# \Qg0?0omRo?Y8 Jm i|TX+N3tr@9>?4 ΠMfrAsѺo_p?yjŝ & Xg3PK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!i:M&!drs/slideMasters/slideMaster1.xmlZ]o0}u@HU۩C՞Mp%+6 #o)s}}ν_zaEd" YXL(Oy|i*%#32a%|{^N8+-B=XʼlaRZe9eEJ%Y<5GSZfJAbY%! ')_I^Ngw-/X Ө K%3>nwEĉUHDފY=GÐX1OwcJyx"tJ녪~s23#uoZOF7 j8y$_bU KNrxnp=iѥFuCX.5[J}A'G@|qRb &|vXaL=X A2xk :5^B ^nv$WJiq #W5#?IhBT @sWR \{ȟd=[#b: ;_#BX@Q-*Ӽ7F#T#x HcÁT,CxGp "UEeOijxm8 h8Fմ7߀(_Ѐ9XPbNE)QcA)}UnEa;Y¶T{*lIa-;*lͿUO|= x|0}Mmw8c?edSÞeosٛ::%gSI.iBa}d>-sx6fiRk9ass\"v6wvza}s$ԄQ焭چ$ffApm(WjŽK,+PLƬe` Saxo˴ҥM,B:J4R|&X6Ϭ#nkվJdYW3$ddO^I,@J! 봕nc%,NmP][L,@3YX26 PK-!(b[Content_Types].xmlPK-!*8 *_rels/.relsPK-!i:M&!drs/slideMasters/slideMaster1.xmlPK> ^}^ !^(    @v +  C (Group 2"+P~ P@  C (Group 3"Dzo   Z@?Rectangle 4"|vPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!n[drs/shapexml.xmlUn0?iS#Jusp#v>`EQkj)+_%)IE{%.ÝͶl-S3;r&QB"%g ʌ7ן?]5#0ڌndu:NTwnV[G4V:<u~Ԡ_Q5S"Z!TI BВ yMJ@ &F,]IaaCWTCZk6Z'bCB^!;/SVXyC-h[TTSlo}]3A !gV~ěJ:SapP-]Cl  3Zch;NזAg4A+\JO-6~ѿݡ =DkeZO>,bSLlh7SQt*@qYRޙb K#X "ɚ3@QqmQ;?;܉U"I{0uPY vqRO1kz w!Y欐 ]no8c֧l  qVqKdQ.Ӗ  :GDkT4ÄI8f}n$J%]W6Қf/pLmR̓VaDl<%\R)XlUm~D*qg3r{Zňᯄ8bk܉OAl:L1e  {#wNɶ_Qlu/Hj-W 67%4YP+ 8m8m8 v}LBRpkH}(ģPK!~drs/downrev.xmlDJ1EfZih*ݛ$t Iop˽˙/@>hgG0ڶ>ޫ{`!9K`c)niŖe % P1%Qd0\O6w }˥SOb jRwF@>mGJ3`RWwӪ~+Qk)`r |[ ,U&PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!n[*drs/shapexml.xmlPK-!~fdrs/downrev.xmlPKkPPB:2___PPT9  N       rZd?Rectangle 5#" öPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!¾O!drs/shapexml.xmlUMo0 t`nvȊ3-˱Y2$嫿~$$mOCCJKG}ٴVtƻB~JqB~?"&pXt!:ʛv <+dR7 jt ýڇ~ :j aF5^VnRi*\ -| ̭r;e@G ^k0  UD6(ڀ19D#B+,ǔ`C{,*׵ ťB],M wFWX";g#cKb8]TȀu`5h8pսشEIͬ)ryĘ%cu2wfX-dOkܢ'b_8X9ϵ '3}ú^9ODr[tִ 2wWl#tkRv,,*3i=3m|%Ǿ[pHY5>R[4K[Qݴz7VʚBp?Ȇ]aaWc穕g,9){k~w閏 sxF)[ĺYST}SѨw~;E5/r{0r71]؈l"y2Ij pY,i_Ieiw{CF^sb f[R,t üɚg?tT:| 6_^{Eo ;J݌x%s%"m;]B@OLR=#oj DixqSN4dfCž,g$ΪPK!drs/downrev.xmlDQk0pte:FYu 6mlZ9|otzr^Y#y#SZL-3p'a7SP 53Єe!~b;2bt5o[&ɌkT&>4Ѷrjߞ_NaǼTBX!Y~>w) }Vgd>jPK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!¾O!*drs/shapexml.xmlPK-!drs/downrev.xmlPK P@B:2___PPT9  N   Q~ P 0   C (Group 6"Ny   Z?Rectangle 7"{uPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!^ drs/shapexml.xmlUR0}LAB4a)CdH,jGs뻒xtHykk={fSk)9(Lp%g ʌo7ן?]5c0ڌndzNTwjV[G5V:<uo_jPȯ(\͚ x\M-SEƇj$!Xhɾ^@LX š{֬+ #6B^Ĵ.<@v_ zC-xSXTSlo!g[bb`,7 Z9q&hit6SXHs4ʸ{j|P"sFAi?$e+ī4=BYck"|xCZK˴3~0߱)N11^LYQбAfI~sgm($)I֜، oSߒ䎬IŇjGQ ^i Y!Ft{-awv$J6n, e\bڢqD40FLO:OHCƝ,A4X-_ռ%I7ּjcHڍg cb)W2XLf˶Vs%hNQPK!~drs/downrev.xmlDQK0C/X.2(U6׻-67%I|9|oL+N|cYl .nR' |@Z&#yX-//i{-v>Cu]&/k2觶#:!FWIᦕ$ICk*wQ`_u)o篷Ǣ^ D!4?l_ԋV085z>SjPK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!^ *drs/shapexml.xmlPK-!~edrs/downrev.xmlPKjP  B:2___PPT9  N       rZd?Rectangle 8#" øPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!pQ!drs/shapexml.xmlUMo7 x ɲbBցA Aϳ\\ԗ}gWS ϒCΛ7o_[+:D]!?NʸU!<]Iw}f8+dR7jtK^CK a5ꂎ%Jd<dUn![v 9HEg`e'{?H@;1C~h"F]x]}I)l_RT_b,)*q-qE3OBaV ̈́KbS|Q! vS"[-O,c"br(:,9% ʎ<Ǘ;UZ#@V`8]h"*<]|f|g̭I:kB rb; efϪ*^6e:/$/cYVo)Y0ٰ[(1$!w]"`㹟e]@XMkZI&^3Ϳrb fI-): fYbȋO2YL::g E_O9(ja {X-oo){6{b|Fu]&/j'c:M!FWIẕi̤ć:~8z4~!ݮӀx7_@8Ǐ*4Q_Q{BQPK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!pQ!*drs/shapexml.xmlPK-!-@vdrs/downrev.xmlPKP 0 B:2___PPT9  N       r#&d?Rectangle 9#" òPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!:A$$L#drs/shapexml.xmlUMo0 t`nvȊ3-˱Y2$嫿~$$]OCJKG}ݴVtƻB~JqB|y<"&pXt!:ۛt <+dR7 jt ýڇ~ :j aF ^VnROiB,A1BsŵNīE 1@BFCE0<rD\be7uhEEBb]@XoP~vq&­%͑ɥ 1}h.*d*pfD$BPyX{l"ˤf@9n l b:_ 7wG)uGg.肁:Odr[tִ@xN`l1kv,,*5= 4m}%3tHj|(J!i#0IyX)k{ a’D CWc' W,9){k~w鎏 x)[ĺYSTשh {]mw5 or{0r71]؈l"y2Ij pY,ioIeiws7b4.wS0 ؒbh<'MּIyc0 ״A+,zkx1FQf_^{Q2ˉZ{+/Ҷ5(oA$0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!r| drs/shapexml.xmlUN1}ZA.@ Դ)|כulo.|}&0{9{}5[INIP3 eƷۛ_kmF7n2^yߌ{='*Y;5DZ+ӣ]+D պ7G: WffC$W3TAX8C`%yJPLX š{y֬+ #Z/C^0;/SXh`)m},p)KyfK.F3A+CZ2Eth?9 e=`5u>p(9U1QZ(m tŰkn_%xl-"6&K˴3~0߱)N11IYIαAbI~som($OIҜ، oSߒ܎IڙħjӌӬS r^i Y>C>GX%L.Yi-98B=aLC (AFL3t'q/ˏq(VJn5oIϛHk_?<ҥv'˜xJ $3@ٲUm~D*q'/sr~oMV-cR!w'O:wb h*@VBhf֘2_^{o(ebU6A25p(/ JÞSWX'$ IE}XsBwPK!9Hdrs/downrev.xmlDOK1G!f-RumZ tqɒfދ'> k,PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!r| *drs/shapexml.xmlPK-!9Hbdrs/downrev.xmlPKeB:2___PPT9  N      t`Zd?Rectangle 11#" ùPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!bP'drs/shapexml.xmlUMo9  Hv1:)inai{h45@뗤v,jD|ԇ֊xWۡ)_*R.AG7YvqI Q5w^C a5肎%HpnЂqredE*8h1V`eQ̽Z (UpSAm~h"A !9"vQ &y f:~׵Z4@} wIp)C(ȥ 1}rDtQ!1vrAV{c~,!\EQ<)ӟl[,W㞃U|<_O`F@8ADT`5ɷObXwq»B^OSqQPK!_drs/downrev.xmlD]K0poĥVF]6Ƥ*xn'6I] ^{򬷓Hηx'ȔVp:+`>QYCaݬ1Sb4fb|s_6mO&vuC%u$Yp o.-@J.x_kOwX)?E.?_ԻF*]9U&PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!bP'*drs/shapexml.xmlPK-!_drs/downrev.xmlPK+)B:2___PPT9  N     N}&?Rectangle 9 4Z T Click to edit Master title style! !0  J?Rectangle 10 4Z RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S   P?Rectangle 14"PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!M.y(drs/shapexml.xmlUQo6~@HmgNU$X^`.|(K3Ej$}ᄏboX e [6fɏ )| SFer|/ﺙ.?2YF#_Ԫ%v@WYRѭGS^@Z=:G-5F^.c.hLIaEUZ+1`.Pm(G aD&jokSZQ3"REwY HW)p-1QE-q`Q*׾6cJ | JmQeWn" N%62aW$I8JU=<=nRV{:x[ĖzNL~"f}ai0 1%6]IV@|#٠ȅdhnn&YY㕜<֥Ըk kћ9%ER}&]hq/m⨽Wmރ.S/;|ǻ1\f0hg%)m{ /7wBDpt$(n{yJ4c2Ć % 1N`Xl: }ϕ%EQAmÀ=~y-S{>yQ$)=H)ǺoC* X?5^C$/!eլ | PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!M.y(*drs/shapexml.xmlPK-!=^drs/downrev.xmlPK`p R 4Z:2___PPT9  @     Pv&?Rectangle 15"PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!1':drs/shapexml.xmlUo6~G,1It]왢(K Er$)^QEHᄏl|h)ݘ3eZ)%g! S m*^>yp M71hd:Y j;*(ENŨ0e+$ɇҳ*3#:|T6Z9 ZOa"J3 f'@&pjS7F*6R5,`#W/>*,jWլ`fuGd[!;Mc/tv9`\"P^^_WP g$|}3*F gTl!Rb.ȝ6G] n_"CDoJYm wk M_8{Pgf !E3zR:ի0V ^rŻi;'¬$_»*xF85Jnb(!*юoLI7?-DI4z`u[ݷZ u= dL=N,ab_CxL\k*L$d !&Y_OښxrS@jc\AQ썄̱&S\ʘ34ymTG[U{hNw~*#^<L :TKSߵiEW*T"̹N߾N$q<=t4䘤.Ge=-)麥/-5ɄK5睓D~G"ԺL<_!W=|zjj!h- \es/Vc|!FR,+qrΜ)8acS8|bpPK!/drs/downrev.xmlD=O0Ew$XPCB 0P-,^"#ۤb^$3|J(0S>?^BDpt$\(f}}Z|=j08՜v a&7s=WnF.N4Pu6J>n{e(7Xw;_zSDk.'C$/!eլ |PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!1':*drs/shapexml.xmlPK-!/drs/downrev.xmlPK`pR  4Z:2___PPT9  B     P`\&?Rectangle 16"GAPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!Z oK drs/shapexml.xmlVQo6~@upm9vU i^`.LI"5r cb>}NZẀ3Szބ3΄2Z wOo멫6k7c^x_O}Znl%<_[Je7wziJvK,+δpL`$.yj7Xt:(kdVX$P3/pYk )2Gqn?;"JXC NeMr=FX/-G&97K~7"CL^1ypd< @p4F>b*pc4;r\} PK!-('Cdrs/downrev.xmlD=O0Ew$بURY*$Vc;M{,:^ݫsuVd6Y FqJN*% 3جVX)wر B }cyhz2n$y1Gqf(ܠǑ{jN0-E|9l_EK^Iۛ})q~C+ X^H^B˪YPK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!Z oK *drs/shapexml.xmlPK-!-('C4drs/downrev.xmlPK6`R 4Z:2___PPT9  X*  <  c $ ? 33331)___PPT12 $PK![Content_Types].xmlj0Eжr(΢Iw},-j4 wP-t#bΙ{UTU^hd}㨫)*1P' ^W0)T9<l#$yi};~@(Hu* Dנz/0ǰ $ X3aZ,D0j~3߶b~i>3\`?/[G\!-Rk.sԻ..a濭?PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!`{j "2theme/theme/theme1.xmlZmoF^c|M[Fq~ր Esb8عVev홙A^Di21:$^GfbqFQgJrT`wpuG]9eZ/b"d~ mr bΰшXoZm11R}:^b%ʔeʇpI<1>Oq7 es Q qV/i0핹p`&9V :!(k#<>RO .z#p Уn`nZNPn _gcŷ-󣫂<~T"M, gc< QdANZ@w5@p !QnD|$AG xPb@N4/PFCCŀڀBch<ڄm1QApa`]bH5yT"la `n7\ DwDjENoZ r|A(=SA_H+>꣺ `_f 0Y-%쿒gZw9bSb  E]z ՀU n^NHѹIt g¡jeuZS"eռFα3]gt/laMעIUe! ]k!vC}W ]}Cabp3,"`a¶eJAnc|ƎBܣ pvAEZm DݍZ,T-of.P _p=2F m}$׊Ac;:E,w#(R [_$>-'f{H&F8!hE,YϡU*B[`s* LNMI`U:lB7vEԟOmP9XT)U4s~L n'3{K%@y%gB u"`},H[jD{Lk 9X߱,qk 6dߓK'"As;F1h9Yk%7ɴCħ~eXZp@ Ѧ}*wA%,8a%zzV=P}o3P=H {gJGRMp4{۱r\ގ:|uU B !H.&Ը$?ңr |q0Ec٥%처EsSZG4OưFߒ]9^tvq:xIr">q-٭pR{*ƪobZ1tъ\zָ*h8C1+зe EWs֏]͝?pM3O \\iګ ꊱ~+\*].ZXvEOEpqagbŬ[+\2_f+\=&C \{d9*p0jat\^]16fp;wgEb8l:vZ-;;pYL\K[8HpHi4\fVow3-Ř8 O+\\ۿ]Zr\hޒ]ԝ]b:u .o2PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 +_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!`{j "2theme/theme/theme1.xmlPK-! ѐ'o theme/theme/_rels/themeManager.xml.relsPK]j : PK!M[Content_Types].xml|N0 EHC-jaj; +,Kq:=ig ,?ϵYD&oDzCwO-gkcg$./XQ{jsԈHt䒦AFP0skfx(壓8?.C(ũ{R(Mb˳7{-IF#{_R'dK0FFjr'"&@_'PK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!=!drs/slideLayouts/slideLayout1.xmlUn0?'vA68A E[B( iI1/H v3t qc%Yq8LU\ϳiFBI>vf_f;qҖt2-yK\J:52 حȇ8oi#>|&_V ?۴\bۺ6Ϡi-`Bےl.u,VN}83L"[ Ɲ KT,"NHܮL̐m(uH%:&{eXVP^ǎS -g0bȅbH#F8fz9ߎ.I뺗9xCYJ3[''ꂜb:N~Cd2O_Q15-Zn]U;O~l-NXw˨6 jA1-'/˃e,-DSW#ѭ$8Wg'I*˨Zh9%I0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!]Jdrs/shapexml.xmlUn7}/ 8" YQTC[gȕAPDjHr]F:Ð3i [*/)g>S m^z/ۙo.?k3^_ԲmYe]#y: "Qre LͲ]81Uf|293'Y g-xx1^5en'҉-W(ٌp(oZ6bp Xښ}@ $==f1˷D,]S ;.(瞾\.pGi9 f#r2OK7~5eT B$#Am"Uajsoawg=9"NqcPu/m@xbLnKEd{{=1]soul$a Xx,+M+,ۂ)bjpmO>e-Z-$H>,DHQZ|Wi O8fM@xQP}RQnٓmUD4zoD=X %|o٘NܧqQ^pX OQLiE4h_ I[sXʚpeLH@Xmqb35d;?V;zikͻ˫4^x;ԉĥĀ5B8AXwj_*3.ٗez"_X.Nuj gkiƋ Pg72j"K]+zY[L񥑔m 0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!hdrs/shapexml.xmlUn6}/ Zd},p#ϴDEyQIʗ|}ϐr.!9˙3ÏZt&}ΤmQY?^8AB(kdƏO?&Uͼy%l# JX^㤗&GZEm-LݪY:ұ?83Bċlؿ^n wOI-fglpk*8w}%Ei~{1SR,M±AEpVNu#Wf \m@ӗ&@vlY2 @(1< u[쪳ƽ,=aӻ2|G;ݴʭ7M|Do'<]o(;Չ Ĥ5R8Aض:3.՗_&!m Ы-c*Jm7O'B-)RakWK\誦7;-%_Miӎ.hG1@%!גaiê%3+A3PO\Io:}k*o3?8JoPK!drs/downrev.xmlDMK1E!_@HVS,#\8zu}L?R$ !T1PmN)RjOCFΔj*j| £ӌiv.߼!ތ'?޶{Flⴽ|Z(D/&SPK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!h*drs/shapexml.xmlPK-!drs/downrev.xmlPK3 .R 4Z:2___PPT9  X C  a   N ?Rectangle 2052  4Z    fy˼y˼?Rectangle 2053"~PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!=gdrs/shapexml.xmlXKo6 x-~?bHf[q=DŪ)R%)? )Ib]yd37cmZZWΧ6gR&+c¿ߜ9s^L(ew/򹚸av*KIҥ,d*[ [تtR{qPZv{*ELY̲"Kx=8Ӣıw2Jn{F5pejҕkş̊ | E4k8P^Zk6K)2G?VqﮆKd~Wхv@)zi9"fo#Bg7a$bmylǽn˕]Fv j=gQ3e%Tϫ)_VMx쭙/E%T?Q7S(~q$$!Ri]BghAYq^,h-~ƬRL]h,L255Y`>Cptzre{и[޾ ܿ zꢾV~]g"ԽYH]3;l̊`õiRZtR3Qkg6Y'Tm_¬@zͬYhb'f}9N#uW5z'f!ꌻc"3i(LPK!@'drs/downrev.xmlDMK1E!<ʹձi)bUk9y;yG .tys9`jёeQ8Bs}deRp& Sm{R )*(ChR)}^A? q 1Bj}ZNQ8>Ъkg NomPfX4{./j'Uz>Sm49PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!=g*drs/shapexml.xmlPK-!@'kdrs/downrev.xmlPKs9 f 4Z RClick to edit Master text styles Second level Third level Fourth level Fifth level!     Sn    ly˼y˼?Rectangle 2054"PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!s| drs/shapexml.xmlUn7}/ 8ْ,dFP Rg.b%$W}ϐ+[My̜f[鼲&}Τ)lsƿ. L)52w|lfaxl:fb-k?FU"{^ պ7ǽZ(o`l‘TW?4.'חèK1f|,02qZvA>76a;vH"k2O@NՔQ%WGES- SZ[ PS?KL Ih;OoL[[i%L9K} YغanMA ujpM8-hkoOҍ` #ڇe8`n I"k)ȗ 9pL1||Q0B;v&J`JҳGcOFb jqp->&I>]ZU 7ŀ)1(3E; I.<A]4c1)`>]SPb)E`[AJH7;Y}{no6o[#}v*> #6a-ATKZtrd\HnῺ(|\է5Ho3;8AoPK!Rqdrs/downrev.xmlDN0DHu jӊB Q!XEK|b;NXr43:yoj֑Y 7#lᔶXhΒggS̕;uX!G UMy(*2F!c1MBdܠ†**֭ps2,]Z)//`?~߉E* q7΀^ C$/!%d |PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!s| *drs/shapexml.xmlPK-!Rqdrs/downrev.xmlPK rR  4Z:2___PPT9  V C  a    l0y˼y˼?Rectangle 2055"zPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!tDC drs/shapexml.xmlV[o6~@pmJqW 8ŞiPFRdwH%Ίm>xxx.w8Tu)O8:3yR~љrйPF˔.v:[Y벭{gjW[ }V:R~7Vn],IneY|Л'iQ;%Y7nO 4٣kǟ܊=+LO$\oq[k[)rGqo7쮆KeXQۦBΞR{##Cʃ8يCl o1;:7"ca2^S~$x$fYA2Hyb؏.GORm$^12rHnjz]gHZ [YoE- ?Q7)(rfJJB=i,f #!4xwPN pOVQ d/+حܳ;S Y]lU@7 $E!:r_H]@  ̓Y`Gm)>FyHF8F/|"4P`Vg;A za[`IJ_>O^i?oӋ@/[ƖʞDbVun>?WM'hՎP!Uyl2 Wʥ|Yǩ6J٤\A|YGiiciDVȇW*aIS%}5 }-t|*s!} XB#}CJnܐV9HhH[w\!fP+3%#x&tJXA=A3G7!T<}e˿PK!G,drs/downrev.xmlDN0DHH\uhER"BpC6&&z,pj3 伲F,FRZ|]0b'aj!( 9UCvdbwNc\:3\`?/[G\!-Rk.sԻ..a濭?PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!O^2theme/theme/theme1.xmlYOo5# IMfhFmQY&jHH q Jĥ|@_g{f̒A7Rvޫ$ !)OAr=@$ Q;3]Z T8aSfD6}*P1I V*ۨdX^IanE6&֬Wk iR1 hfA|kk$_aPICI ;LCA|Lq=q9`4iF*oNpezc},nVIfO7KԀ޳+%Nc@Z7Ō^/>9ۭo7__,sE2%vOeշňoO}^ށ޷7e|֊(Pucd.'K1efܔaaz0יƲ"$ #$ʸCBîoEel=Xn9DxY0jigez͘5TK0R6W|XV քNAV^)݄ hHxDri>j'b;>Z3np;\vW+&^* LGRtW+ qp$KaO S~B1>'bW2!U؆Cf(l5L Z2PvFk^JTяGGhȦu>#*T"ځs^+n47̲VhnBu.ys*e7ʝ_3U~W@# sBYLÞEoͷ 朥18!Aa?R dʒS5˒,rĕ{H ꦚeNƟg0Mo^ 6&3(ahw>vY^콮"zbf])9[z)9Z[J7W eapep?Ao~  D%x ] ';hIͻ[mb6j9֒49yx-ڎ-55xdи8ǘߕ>8 wS &<?PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 +_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!O^2theme/theme/theme1.xmlPK-! ѐ'c theme/theme/_rels/themeManager.xml.relsPK]^ : 'hPK!(b[Content_Types].xmln0 EAkP }l} m $_tI$svs^챐KkH$Q -G$oo1# ɩ5 J# \Qg0?0omRo?Y8 Jm i|TX+N3tr@9>?4 ΠMfrAsѺo_p?yjŝ & Xg3PK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!' =9 !drs/slideMasters/slideMaster1.xmln0+;XjwũZU-㐨.} Fzd~S+UFg9xYk{C?6Bg0[rKwn6JTId88ыDT"*]x49DTФƗ8=PK-!(b[Content_Types].xmlPK-!*8 *_rels/.relsPK-!' =9 !drs/slideMasters/slideMaster1.xmlPK3 ]&U&%(  ?   `y˼y˼?Rectangle 2"PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!{oHdrs/shapexml.xmlUn7}/ Z89,dFP R.׻ܒ\]=C-7-"VCp}V9_[ѻ䶨S&ϦR@ mAy>3 <6~f >TCm{Nyej`<^ *] T]8Q'ɹ}T9PeEIRXa'$ihkr:`p7hʁӞDP/Po?cicAJs1<-q_#6QV7e[c˭+y7^V}WL)VBq'a(bA8NAϙT2 cN.Fx=z)n2RRleBnqex-Yt]rd1&dnuc3ƋBTR>*zE1XMO]VR@+lCRuȫ{jjK9y-S/9Sda6Ч^&[vPK!xdrs/downrev.xmlDKK1!\4ێMK)]HPN<$̣Bsj3|m$F&6ϗ0(l! WYެ0Uv0ꏡdb|ڔsWOlK&vuC"Ić [U_t~82|6w)3@cgE"EeJ31{V^]9 Q0FUPK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!{oH*drs/shapexml.xmlPK-!xdrs/downrev.xmlPK.R  4Z:2___PPT9  R   aL   `y˼y˼?Rectangle 3"PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!=vjdrs/shapexml.xmlUn8}/@u"q*E4n`.H5EjIʗ|}ϐJmXo89gŶҺ蔏9:7ESe}w6y )?H_];w-cm+`J6½5Ը+m>Z+^x8j`<N5)]KKR~]ZV)qrΙ >(d 7G# Š(~iт>moZ(}A@ V+ai+-PzJ?^Z"˨GYl 7Kۜʆ옲d?M&ӄCʇB޳Wb8N.8q7͈4[GiNP-8yVTҧa_#$GdrS#LMgCABE J%ȃ(j~r?)6oL$2G,9S4r:G|8LfI}}]skT*sXM9$'L4 jsR$.T-¶}xYU?)(WqbHQ A.d ݎ\f>>@f(uAogL@5.B$!<.ZA5rf}Ԗbo&d4_p|n_#g41Aa>&MQkeVP_:$tQF?FoK6n]CeE=vXߞ11eS:j)LG],MԍZǠsʥ>s>e1KZ`k giib⩭zE*z|Ҵ,U$ G i冻5$yGe8gb4}\`k-&yąw PK!sB-drs/downrev.xmlDKK@a;;iRD$63f&;7[=;_[0$ VզDm_o@@FQc #b~y1\߄RD9!T!XؖMi 1R*GCFIr'5&>TsqiGO=>N;q"ǻwvBH,nAN_VkBQPK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!=vj*drs/shapexml.xmlPK-!sB-drs/downrev.xmlPK3 .R 4Z:2___PPT9  T   aP   f y˼y˼?Rectangle 4"PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!>drs/shapexml.xmlUn6}/ Zd}]1VY$A-FE)XSJR{Tt[E<8Cq8sc^:Ð3i [*ۇg>S mIz>K2<6~f]e#JʺFuKDFle L];1Uf|<'3ΌhI@%AYb{4ߠ)8 ?a~qe7y=R> "|k5 (@K UJ49^Y~Ŗx.`X+\ٱUI=ez4 Xc`&p8@j^8;8Tϒ3A'\f34Ib2ߘ:0f<,'TgaVٴ)R,T-µ}ԢW?I7Sh6ᄡq!%^YKYmEAbGT$zc?FU$S2WĴ9s!iK2wnTYn\x9F鯑*0r)qou^P#6YNVޟoozmk=Ɩ˻˛0]}W(Q+ب0MNP&w]J"Ksu{1˸ZN0ˍDtZPM":>ZZȟH׊Vm[;k+ _#iB&鋷Z46#_%XIiǴ@{-:"\udcfD@[QFp֪PQ;c2ETp^jx\IdΌ(|\O o|lqPK!Kdrs/downrev.xmlD]K0CxoĥP[6!B}mm]_o؅^9<ը[6Jej#0Hl!yX-XH{2[vfb|s_6lG&vuC)u$ɹFeC=7T~z-`myQW6[노> j#if9u::%9Q0FU_PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!>*drs/shapexml.xmlPK-!Kdrs/downrev.xmlPKrR  4Z:2___PPT9  R   a   f y˼y˼?Rectangle 5"lfPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!c drs/shapexml.xmlVێ6}/ Z8o6XqZ]k}%j"Ue{ϐ ڢӷÙ33Nbi]at»o:I YƜ9/t&2goy[M]pYiմvN½18ˍ-ǣ}nWV:pTvKQh~SV񰲬{gZ$SxVvYt4ߠɬ8"?a| f7`9v@ VR?W@TXKrsJx%d`A %bzmykDd9Aw0 >Qȣʓg):!)4ɠ Y#C hTSn/.ȝ6B[SbfiCJ.Ȃ@*ʄ;2){ًBE*M2< if39M B}hᨫ%gG JL!`^lOt]΍ :Մo9 '5e%R)gaq.lu-TlG-3`ܬ0s:}D 4lHt*cmͥKQp PuQ.Y9{Q2O>O< ZR@/E ڍ9:OV@ APK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!c *drs/shapexml.xmlPK-!R%vSdrs/downrev.xmlPK[r3 R 4Z:2___PPT9  j*   a<  c $ ? ̙3380___PPT10.Q PK![Content_Types].xmlj0Eжr(΢Iw},-j4 wP-t#bΙ{UTU^hd}㨫)*1P' ^W0)T9<l#$yi};~@(Hu* Dנz/0ǰ $ X3aZ,D0j~3߶b~i>3\`?/[G\!-Rk.sԻ..a濭?PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!O^2theme/theme/theme1.xmlYOo5# IMfhFmQY&jHH q Jĥ|@_g{f̒A7Rvޫ$ !)OAr=@$ Q;3]Z T8aSfD6}*P1I V*ۨdX^IanE6&֬Wk iR1 hfA|kk$_aPICI ;LCA|Lq=q9`4iF*oNpezc},nVIfO7KԀ޳+%Nc@Z7Ō^/>9ۭo7__,sE2%vOeշňoO}^ށ޷7e|֊(Pucd.'K1efܔaaz0יƲ"$ #$ʸCBîoEel=Xn9DxY0jigez͘5TK0R6W|XV քNAV^)݄ hHxDri>j'b;>Z3np;\vW+&^* LGRtW+ qp$KaO S~B1>'bW2!U؆Cf(l5L Z2PvFk^JTяGGhȦu>#*T"ځs^+n47̲VhnBu.ys*e7ʝ_3U~W@# sBYLÞEoͷ 朥18!Aa?R dʒS5˒,rĕ{H ꦚeNƟg0Mo^ 6&3(ahw>vY^콮"zbf])9[z)9Z[J7W eapep?Ao~  D%x ] ';hIͻ[mb6j9֒49yx-ڎ-55xdи8ǘߕ>8 wS &<?PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 +_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!O^2theme/theme/theme1.xmlPK-! ѐ'c theme/theme/_rels/themeManager.xml.relsPK]^ :  (  I   x#&0e0e ?Rectangle 2pP 4Z  }7Program Verification Using the Spec# Programming System8 8 8   x@&0e0e ?Rectangle 3 ` 4Z  sETAPS Tutorial K. Rustan M. Leino, Microsoft Research, Redmond Rosemary Monahan, NUIM Maynooth & LERO 29 March 2008"t e t   F`+?Text Box 4 [  2    jA ?? leroPicture 7lerof  jA ?? logoPicture 8logo j  BA*??Microsoft Research bPicture 3S:\ResourceDVD\Clip_Installer\DVD_ART\BoxShots_Logos\Microsoft Research\Microsoft Research b.png  3333y___PPT10Y+D=' = @B + (     x@0e0e ?Rectangle 4pP 4Z  SIntroducing Spec#  R   x0e0e ?Rectangle 5 `   4Z  0Spec#: An Overview Installing Spec# Using Spec# 1 1 1  3333___PPT10i.Q>V+D=' = @B +I PH0(    l?6Slide Number Placeholder 3   h*       x`0e0e ?Rectangle 2  4Z TSpec#: An Overview     x0e0e ?Rectangle 3`P 4Z The Spec# Programming System provides language and tool support for assertion checking in object oriented programs. The Spec# programming language: an extension of C# with non-null types, checked exceptions and throws clauses, method contracts and object invariants. The Spec# compiler: a compiler that statically enforces non-null types, emits run-time checks for method contracts and invariants, and records the contracts as metadata for consumption by downstream tools. The Spec# static program verifier: a component (named Boogie) that generates logical verification conditions from a Spec# program. Internally, it uses an automatic theorem prover that analyzes the verification conditions to prove the correctness of the program or find errors in it. v P P Pv x#C  3333___PPT10i.Q >+D=' = @B +",  C;#(    l?6Slide Number Placeholder 3   h*   "   x0e0e ?Rectangle 2  4Z VHow do we use Spec#?     x0e0e ?Rectangle 3`  4Z FThe programmer writes each class containing methods and their specification together in a Spec# source file (similar to Eiffel, similar to Java + JML) Invariants that constrain the data fields of objects may also be included We then run the verifier. The verifier is run like the compiler either from the IDE or the command line. In either case, this involves just pushing a button, waiting, and then getting a list of compilation/verification error messages, if they exist. Interaction with the verifier is done by modifying the source file. dM    MC $ 3333y___PPT10Y+D=' = @B +"    0 (     l?6Slide Number Placeholder 3   h*      x`0e0e ?Rectangle 3P 4Z Goal: Support the exploration of Spec# both for yourself and for your students. Tutorial Structure: Getting started with Spec# Overview and Installation Programming in the small. Preconditions, Postconditions, Loop invariants Programming in the large: Object invariants, Ownershipd    /   K/     x0e0e ?Rectangle 2  4Z O This Tutorial    f>?AutoShape 5P`p  Z     f>?AutoShape 6  N     L?Text Box 7  g Before Break     L?Text Box 8 d f After Break     3333___PPT10i.VU+D=' = @B +" P$(  $ $ l@&?6Slide Number Placeholder 3   h*    $  x 0e0e ?Rectangle 2  4Z RInstalling Spec#   $  x 0e0e ?Rectangle 3` 4Z BDownload & install the latest version (April 2008) of Spec# from http://research.microsoft.com/specsharp/ Installation includes the compiler, VS plug-in, Boogie, Z3 Required: .NET Recommended: Visual Studio Optional: Simplify Programs may also be written in any editor and saved as Spec# files (i.e. with a .ssc extension). Visual Studio projects provide immediate feedback when an error is detected ~j Z| Zc ZN ZA)|aN    3333___PPT10i.Q06F+D=' = @B +" p((  ( ( l`??6Slide Number Placeholder 3   h*   ( (  x0e0e ?Rectangle 2  4Z \Structure of .NET programs   (  x0e0e ?Rectangle 3 4Z 2Programs are split into source files (.ssc). Source files are collected into projects (.sscproj). Each project is compiled into one assembly (.dll .exe) and each project can use its own language and compiler. Projects are collected into solutions (.sln). Typical situation: 1 solution with 1 project and many source files. Note that the compiler does not compile individual source files, but compiles projects. This means that there need not be a 1:1 correspondence between classes and files.   3333___PPT10i.V +D=' = @B +"  ,(  , , l?6Slide Number Placeholder 3   h*   ) ,  x@0e0e ?Rectangle 2  4Z ]Using the Visual Studio IDE  j ,  x0e0e ?Rectangle 3`P  4Z Open Visual Studio Set up a new Project (File -> new -> project) Open a Spec# project console application. using System; using Microsoft.Contracts; public class Program { public static void Main(string![]! args) { Console.WriteLine("Spec# says hello!"); } }bn P PmGGGGGG GGG GGGGG-G  3333___PPT10i.Q-+D=' = @B +" 0(  0 0 l?6Slide Number Placeholder 3   h*   0 0  x`0e0e ?Rectangle 2  4Z d Using Boogie at the Command line! !$ !< 0  x0e0e ?Rectangle 3 4Z pnOpen the Spec# command prompt (Start -> Programs -> Microsoft Spec# Language-> Tools -> Spec# Command Prompt). C:\temp> ssc /t:library /debug Program.ssc compiles a Spec# program called Program.ssc stored in C:\temp. This generates a file called Program.dll which is also stored in C:\temp. Leave out /t:library to compile into an .exe executable. C:\temp> boogie Program.dll (or Program.exe) verifies the compiled file using the SMT solver Z3. The /trace option gives you more feedback on the verification process i.e. C:\temp> boogie Program.dll /trace Further switches for boogie can be seen by typing boogie /help Z Z Zp, % :A#2  o 3333___PPT10i.Qś+D=' = @B +"  4,4(  4 4 l?6Slide Number Placeholder 3   h*    4  x 0e0e ?Rectangle 2  4Z N The Language    4  x@0e0e ?Rectangle 3P 4Z kThe Spec# language is a superset of C#, an object-oriented language targeted for the .NET Platform. C# features include single inheritance whose classes can implement multiple interfaces, object references, dynamically dispatched methods, and exceptions Spec# adds non-null types, checked exceptions and throws clauses, method contracts and object invariants. 8e  eA l 3333y___PPT10Y+D=' = @B +":  UM85(  8 8  x0e0e ?Rectangle 2pP 4Z  PNon-Null Types  % 8  x0e0e ?Rectangle 3  4Z  Y     8 F?Text Box 4 [  2   8 L ?Text Box 6%JE  W!    3333y___PPT10Y+D=' = @B +;  RJ<2(  < < l?6Slide Number Placeholder 3   h*    <  x0e0e ?Rectangle 2  4Z PNon-Null Types   <  x 0e0e ?Rectangle 3 4Z EMany errors in modern programs manifest themselves as null-dereference errors Spec# tries to eradicate all null dereference errors In C#, each reference type T includes the value null In Spec#, type T! contains only references to objects of type T (not null). int []! xs; declares an array called xs which cannot be null z  @  E< F 3333y___PPT10Y+D=' = @B +"4  ;30@(  @ @ l@?6Slide Number Placeholder 3   h*   $ @  ~`0e0e ?Rectangle 1026  4Z RNon-Null Example   @  ~0e0e ?Rectangle 1027" PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!tTRdrs/shapexml.xml\mO8~+_Ol_hV q{R*j?"7uhs;@ @Jc{<3x<9>#6* jߪOx?/U^%8x&8OahF án:J%w#}FdK:bzA2{5Fj,1X73Yܟv ]ժUrkx-f(?:U#Ah5g91m=;Ø6 ڱZanJԽ&\ EHUk46/a/jdZ"'yqՎ=f5hIrݕ'BK2}=U ˤ?0|ʹɒHȊ2seIpz`Ͱ.LGەB4!C<# Ep\$vmޕgjl$R*Ҁi MN#<~ll0U3l[,HĒ4ЛEK E^,AB9 A6\%kC788SfKC.xFT7*@o04z|`-!ʍ oxqohuv7n\^i[Krڪ][&gD7-rcjcŕFrۿw}m/V\ >.n L[[y;C] Mfŕ&͂ˮ[)(Yʂ\'Tk0W^G$ e5u)>a=e9",wI8mP( ĜN,8u8Is&E=JZ' 7Q>c )іڦ7AKHywk_Ku6Mk2[F>h^@xp*Fj V菱$k Y88ـA. 7 12c .Zm߆,K A:dk"x~(M̀BMo+@!Zb(h!5glZ ~;b}..ͦSHg BP%TƵrΓnT>PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!tTR*drs/shapexml.xmlPK-!10 drs/downrev.xmlPK `  4Z public class Program { public static void Main(string[] args) { foreach (string arg in args) // Possible null dereference { Console.WriteLine(arg); // Possible null dereference } Console.ReadLine(); } } P Ha 3333___PPT10i.T>l+D=' = @B +"l  {PDc(  D D l?6Slide Number Placeholder 3   h*    D  x@0e0e ?Rectangle 2  4Z PNon-Null Types   D  x0e0e ?Rectangle 3 4Z ZIf you decide that it's the caller's responsibility to make sure the argument is not null, Spec# allows you to record this decision concisely using an exclamation point. Spec# will also enforce the decision at call sites returning Error: null is not a valid argument if a null value is passed to a method that requires a non null parameter.       #EEIA [ 3333y___PPT10Y+D=' = @B +"  pHm(  H H l?6Slide Number Placeholder 3   h*    H  ~0e0e ?Rectangle 1028@ 4Z public class Program { public static void Main(string![]! args) { foreach (string arg in args) { Console.WriteLine(arg); } Console.ReadLine(); } } Z    *$ H  ~0e0e ?Rectangle 1027  4Z RNon-Null Example  B H bԔ?Line 1029  B H bԔ?Line 1031@  H R?Text Box 1032P `pp  args[i] != null 0  H R?Text Box 1033` @  t args != null     3333___PPT10i.T>l+D=' = @B +"S RRLR(  L L  p`0e0e ?Title 1  4Z 9Non-Null by Default  O } LC D,Content Placeholder 43"PK!^[Content_Types].xmlAN0EH] tA*ٓj2<&i˂E,-ZQy*@2:k}*da< us}UmYdCJAk6N8Af=UYi)!"-^@t+ S6ƕoQ9JBLVM\sUysnJ7U|Il2\PU&<.~[m'E;Vx PK!8! _rels/.relsj0 }qN/k؊c[F232zQLZ%R6zPT]( LJ[ۑ̱j,Z˫fLV:*f"N.]m@= 7LuP[i?T;GI4Ew=}3b9`5YCƵkρؖ9#ۄo~e?zrPK!\v5 drs/e2oDoc.xmlV]o0}=BD@jT~hNbH4ǎlCA1U+m<#9{b{8T T <(D^efN҄ N G x$EU\'к]We5m!dE4 ҭ%Ukbny="%#I,\v=ň['k@sF2ZSB춫!H"oLFp.7 ԵYM0Mu7 A8A,/Yj4$X,NV A<(DwЃ>H'13zg 2Aԉ0#ip*QB]MJGQQul(wɔ`oW-z|ݟ}8a8̙{^t=wgc6;2c |#tNC@D}'AR1G=Fy)5>XkXw:fa{ ͊##R0JjӣG_K]Fa4(&W/@r~u!S`L$gᒹPL+eReϑ[/FQy ^]bF1hcz~PK!*drs/downrev.xmlDKk0ĵ@z_[+#)__93 'Ӌ+9ZV:K@V\+8>^ |@[&?a]<>i;Pa&!җ 3;G`R;#r$ i@ۆx1 |z_snY}O7pڟZA W PK-!^[Content_Types].xmlPK-!8! ,_rels/.relsPK-!\v5 +drs/e2oDoc.xmlPK-!*drs/downrev.xmlPK} 4Z L s * "PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!drs/downrev.xmlDMK@aAm)xkPocvݱIKz|g\Nb$E\x[si}|* 3)b~y17tJc*.:9CI1ܵ.˦aiŽV ; u_O~gH&+vQ(/4YPK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!drs/downrev.xmlPK B:2___PPT9  V    L s *`"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!3drs/downrev.xmlDN0EH5HC u6`7IxI sGkՉBl<dKo |wϠ [l=",W3̭yCT*A8hrcY8q>8Cm>]l6jhUSy:dG{>~=eqX=ڃ17 現uyFdwB|IPK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!3drs/downrev.xmlPK NF>___PPT9   Without /nn,     L s * "PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!`_drs/downrev.xmlDN0DHHܨTJVU% pඍqxl$=|9VɇƱIrZD[Ǥ` zyk  T`b )Ceb8u-}->m+,N ;ZN_Խv>*u7f " GnUj>}7"%&K?PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!`_drs/downrev.xmlPK NF>___PPT9  {/nn,    L s *!"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!v(drs/downrev.xmlDMK1!fmAtmZ U*:nf7IGwx^rSc qtϝϏ{1!k#EX../Xkw ±F&%_KCyҵ.XL%NꀇV՝sY0PV}˳y]QWJ]_Gt~nyBhŤ]C7ӥK?PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!v(drs/downrev.xmlPKNF>___PPT9  Possibly-null T*   L s *#"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!tdrs/downrev.xmlDMK1!f݂ڴQ⥵uL7ɒv =wx^bt8PֳIr`rs"&dgRp 폼&u@8644R֐8qv>8L%NwN:\ doSۼ-)c5e#Dcv3U+(&'XƘ(/ŴXPK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!tdrs/downrev.xmlPKNF>___PPT9  wT*    L s * $"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!`drs/downrev.xmlD]K1E߅0lĮMK* mŷq3,n&K>7>޹ù٢ؓcףqtõǫ[!"kl#X3,;X PcWJ*CuĹ9o1k=2ܶr\7by`Gm K|%%?~]M"M?_ށ dɟ.4[PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!`drs/downrev.xmlPK NF>___PPT9  xT?*    L s *@%"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!wdrs/downrev.xmlDAK1!fQYY-"xnɺ6z7ot>^)ֳIe`z"&dgRpK*!KT`SJ)cca8w[:!]/A:l9/Xt_ Ѽ?`v_kƗg➫syB-l%DtɦPK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!wdrs/downrev.xmlPK }NF>___PPT9   Non-null T*      L s *`&"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!>ddrs/downrev.xmlDMK1!fmZD-~ xnv7moAĉBl<+ k6 g1!k<",W3,?NdDp,QM/%q{}pr F w|(G`WKuq bޟG}<sjm*u{3LA$s_yA-l]h cpdl r PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!>ddrs/downrev.xmlPK }NF>___PPT9  xT!*    L s *'"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!9&drs/downrev.xmlDAO1&fHIjV 1]bܘxC[w.mp7^r;R;I\qJ@z,&t;H",9ҟ܆ۤXXR_rMrb1(.2v|VܢqyAcO/vkĪݽ=ݺv<___PPT9  wT*  7B  L c $1#"@PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!gvdrs/downrev.xmlDAo0 "OmB@Ӥ v, n1iƩBv|~ϟfwL1 < Pu-;TdJ 6\:;%N%hrKSݐ4 =x=fi"p闢k-˅{zkYP<> SP^Yqy=V2DI1_PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!gvdrs/downrev.xmlPK7B L c $1#"@PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!gvdrs/downrev.xmlDAo0 "OmB@Ӥ v, n1iƩBv|~ϟfwL1 < Pu-;TdJ 6\:;%N%hrKSݐ4 =x=fi"p闢k-˅{zkYP<> SP^Yqy=V2DI1_PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!gvdrs/downrev.xmlPK7B L c $1#"@PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!gvdrs/downrev.xmlDAo0 "OmB@Ӥ v, n1iƩBv|~ϟfwL1 < Pu-;TdJ 6\:;%N%hrKSݐ4 =x=fi"p闢k-˅{zkYP<> SP^Yqy=V2DI1_PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!gvdrs/downrev.xmlPK}7B L c $1#"@PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!gvdrs/downrev.xmlDAo0 "OmB@Ӥ v, n1iƩBv|~ϟfwL1 < Pu-;TdJ 6\:;%N%hrKSݐ4 =x=fi"p闢k-˅{zkYP<> SP^Yqy=V2DI1_PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!gvdrs/downrev.xmlPK}7B L c $1#"@PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!gvdrs/downrev.xmlDAo0 "OmB@Ӥ v, n1iƩBv|~ϟfwL1 < Pu-;TdJ 6\:;%N%hrKSݐ4 =x=fi"p闢k-˅{zkYP<> SP^Yqy=V2DI1_PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!gvdrs/downrev.xmlPK7B L c $1#"@PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!gvdrs/downrev.xmlDAo0 "OmB@Ӥ v, n1iƩBv|~ϟfwL1 < Pu-;TdJ 6\:;%N%hrKSݐ4 =x=fi"p闢k-˅{zkYP<> SP^Yqy=V2DI1_PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!gvdrs/downrev.xmlPK}} L l ?6Slide Number Placeholder 3   h*   p L D@?TextBox 5   From Visual Studio, select right-click Properties on the project, then Configuration Properties, and set ReferenceTypesAreNonNullByDefault to true( i!p    333380___PPT10.!09="U P(  P P  p0e0e ?Title 4  4Z BInitializing Non-Null Fields 2 P  0e0e ?,Content Placeholder 5 4Z L class C { T! x; public C(T! y) { x = y; } public C(int k) { x = new T(k); } & nY    Y P l?6Slide Number Placeholder 3   h*    333380___PPT10.#`G" d\T(  T T  p0e0e ?Title 4  4Z BInitializing Non-Null Fields  T  0e0e ?,Content Placeholder 5 4Z A class C { T! x; public C(int k) { x = new T(k); x.M(); } \B   B T l`0?6Slide Number Placeholder 3   h*    T o?6Straight Arrow Connector 8"@  >" T p@2?(Rounded Rectangle 6"@ p   :Delayed receiver is not compatible with non-delayed method; ; ;  T 333380___PPT10.#`G"% "%% X$(  X" X p6?(Rounded Rectangle 9"@ @  N   " X p7?(Rounded Rectangle 7"@`  N    X  p90e0e ?Title 4  4Z BInitializing Non-Null Fields  X   :0e0e ?,Content Placeholder 5 4Z "t using Microsoft.Contracts; class C { T! x; [NotDelayed] public C(int k) { x = new T(k); base(); x.M(); } u   u X l@;?6Slide Number Placeholder 3   h*   x " X S `<xdGa N?*xYRounded Rectangle 103" @àPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!+=;drs/shapexml.xmlUO0~t "E0큡g&Nձ#)-ӖU}p~|rU+UFg1A`QsŢ)&FI@xB4cǼ l5|۝^~ tڢ3Wi;yފ7Hc/D 4q, p]uUUg\꣇ 簶ZsV@r q&}[S (ZY [\U4ESh 67 ձ!3*c펷j@iV`trޥڧZ) 0w E=R( iyLs PK!,mdrs/downrev.xmlDAK1F!&UemZVA[}Lk7ɒ;xuH1kNu0v9' 'JZ-0a T&羐2 9LГga3Zi",wVN:l=/4SCaxD~̪|ZRYj}y1 2ܫ?z12>}T2E ǩ@.PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!+=;*drs/shapexml.xmlPK-!,mdrs/downrev.xmlPK00 B:2___PPT9  ~(Allows fields of the receiver to be read) ) )  X o?8Straight Arrow Connector 12"@  "  X S @>xdGa N?*xYRounded Rectangle 143" @ÞPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!s2 9drs/shapexml.xmlUn0?fqAR4! ;9D٪)R ) );QA 5yZU-u)w9:3yg)|=pйPF˔Wϟ. KϽNesY wljqV[ uj+^x8Tu*Qj>)#KRvYV3-*F2gc!w;6] E]kl0#oM$Vm-V<EbR~z;v:_3FщD<ˠп8 H!F6j Tki>#C);磿!@K9k4 g)dΙ)^-EPH*1]:t ЄߔeK"YQmQ*u0;nkY(!ǐчs^e/z-E^'~uc53xz5tr~B>j8۰%ުK9h8jŏt1ag,t P Q[;}cWaRXǸ2F`>6ғ:\2ےخM] um赧 NVE=8%i$:q| L.2BS.6Zsޖ@r q^Mb|m{!p^ UȟaK^Qk3AK4tlD[jU3F+ofҊ-f i !/>R>2{Răd`L!{zzbwDݲP $}<PK!drs/downrev.xmlDN0HHܨO u)R['4mYqjVi @1k\(`zo5w RFop4)zuz҄7tf+XSRv0-H.Dh8 J[Hzw^4Yl>?{R  vOǏ؛S8PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!s2 9*drs/shapexml.xmlPK-!drs/downrev.xmlPK ` B:2___PPT9  1Spec# allows base calls anywhere in a constructor2 2 2  "  X S `?xdGa N?*xYRounded Rectangle 153" @çPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!OBdrs/shapexml.xmlUO0~RLc{P3r:vd;_thPw;|zn[Jj3yęԅ)k}ۛΜht6u-f6޷iA6}6U6'Nj/<5*9I#jJ/ԒT\/%rsE3Rl& dr$?IoMBA/SA4+^Zϲ*F'# HDrY X|y4Hb&dZH9ʸ%p\8O<šJRu5*,9S%ER@ËZi*nn1^}s(.MWMY R(7dhzǣвpF '776_/=Uo?z)7N XY *S9?`ou m5N2ր0 ZFP 5P1Y)ìRL]P3"lɅC*бvM;]},mA9>6>lKbcvms;v6Й7k/Ht",)p]tMݘu'θ{ss@ș0v9oE y8[HK&2pNvG3|䪦GL1Uz }" clKZ ;[~=4_VL1M/ ]}j%)=So`L3vv&  a)" d1p^מPK!!drs/downrev.xmlDOK1G!f"kӲ"j4v,I7o̶' NAsFDL4ޑ3EX../Xj?NdK\,QAPJ,Ɖ1;`1G^LZ/8Ъ=nXU&r"QNϯ}U_Ջy:]cLp2PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!OB*drs/shapexml.xmlPK-!!drs/downrev.xmlPK  B:2___PPT9  YIn non-delayed constructors, all non-null fields must be initialized before calling base Z Z Z   X o?8Straight Arrow Connector 17"@ @ /@XX X 333380___PPT10.#`G"a \(  \  \  p40e0e ?Title 1  4Z ENon-Null and Delayed References ; \  30e0e ?,Content Placeholder 2 4Z UDeclaring and checking non-null types in an object-oriented language. Manuel Fhndrich and K. Rustan M. Leino. In OOPSLA 2003, ACM. Establishing object invariants with delayed types. Manuel Fhndrich and Songtao Xia. In OOPSLA 2007, ACM.6t a   \ l?6Slide Number Placeholder 3   h*    333380___PPT10.b0E" `r(  ` `  x0e0e ?Rectangle 4pP 4Z  HAssert   `  x0e0e ?Rectangle 5 `   4Z  R P   3333___PPT10i.Q"C+D=' = @B + d(  d d l?6Slide Number Placeholder 3   h*    d  x`0e0e ?Rectangle 2  4Z SAssert Statements  g d  x0e0e ?Rectangle 3 4Z public class Program { public static void Main(string![]! args) { foreach (string arg in args) { if (arg.StartsWith("Hello")) { assert 5 <= arg.Length; // runtime check char ch = arg[2]; Console.WriteLine(ch); } } } }  P      4J' 3333___PPT10i.TX+D=' = @B +"  h(  h h l2?6Slide Number Placeholder 3   h*    h  x0e0e ?Rectangle 2  4Z SAssert Statements   h  x0e0e ?Rectangle 3 4Z public class Program { public static void Main(string![]! args) { foreach (string arg in args) { if (arg.StartsWith("Hello")) { assert 5 < arg.Length; // runtime error char ch = arg[2]; Console.WriteLine(ch); } } } }  P        4J' 3333___PPT10i.TX+D=' = @B +"A @l(  l l  p0e0e ?Title 1  4Z 7Assume Statements ) l  `0e0e ?,Content Placeholder 2 4Z CThe statement assume E; is like assert E; at run-time, but the static program verifier checks the assert whereas it blindly assumes the assume.V g:   g l l ?6Slide Number Placeholder 3   h*    333380___PPT10.2 U1"( Pph(  p" p p ?(Rounded Rectangle 6"@  N   " p p@?(Rounded Rectangle 5"@  N   " p p?(Rounded Rectangle 4"@  N   ( p  p0e0e ?Title 1  4Z d"Using Spec# by C# plus Annotations##$ #n p  0e0e ?,Content Placeholder 2` 4Z public class Program { public static void Main(string/*!*/[]/*!*/ args) { foreach (string arg in args) { if (arg.StartsWith("Hello")) { //^ assert 5 < arg.Length; char ch = arg[2]; Console.WriteLine(ch); } } } }  P     $4R' p l?6Slide Number Placeholder 3   h*   a " p S xdGa N?(xYRounded Rectangle 73" @PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!#0(K drs/shapexml.xmlVO0~-]`CU Mؑ픖~I[ICiZw.*Һ9:3yR~s}sęBB-Sw\'fج]R:\v/+vM-5tXڻ^m G ^%JOpO%),+ñ\MsȝZ[dmzg9(qh/, [[4b) daؖ) E',daN Ҽ:,F`VW/:?S^Ι_XE8{Hy%sΔDGTϱ,JBR/!%0=ҡjЮl.Z$С8J-J[ZfΟcs^_eZȋ/V?VNK g_Lk 0VЙ 9{ᰎ_ܟ(V%eAAPs(^`C1(fLqZL')7$aGk).Q3,l IU`cݪ 5:Yl8({ mZljٴڳoaj &z`6Ǖx4V+pNK0Ht"x,:k2?)2N;7\s@i9<֜,$Hͤ;eb4DWB[X䪤;ڌ1Ez\ 0}"Z6F9 5-UR5tL+] }򑱥RHRd`LvnR@%&2FºҬ^Z[- &mgѐ+M+uv6GQ[$u>V`v{s:\͌?ݮ> PK!?Ʃdrs/downrev.xmlDN0DHHܨSu*GҒo٦I8ffj3^\(&A z}x2z}J 6ۛ:>JT?Rectangle 5@@@0 N   B | \>?Line 6PP `  | L ?Text Box 7   *requires annotations denote preconditions&+ # +  3333"; (  !   x0e0e ?Rectangle 4pP 4Z  UStatic Verification     x0e0e ?Rectangle 5 `   4Z  R P    333380___PPT10.Q dL  (    l?6Slide Number Placeholder 3   h*   -   x@0e0e ?Rectangle 2  4Z aStatic Verification   j   x@0e0e ?Rectangle 3 4Z  Static verification checks all executions Spec# characteristics sound modular verification focus on automation of verification rather than full functional correctness of specifications No termination verification No verification of temporal properties No arithmetic overflow checks (yet) P@   @ACC ! 3333y___PPT10Y+D=' = @B +" (    & C 2AutoShape 15") # PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!"!aj drs/shapexml.xmlVn8}_@H}F")a@"r| [P X=ؔ4993lk6ʚ>9S&2xza֨(Ͽ~s3 5)/ChfKU 6ºZu^W&j^-*oa+Y6sfX%S>JÄ3#jp{,E`{aFG}F4҉g3k)J9gK%F[p @`{ϲBXb-\}.*d4:Atb`0&# ,d:MOeφp;Pyxݹ p(`2\w:~魮C%xn}Վ8uSt0;D9͹hX.J$E| 򁮷 cHLoF@VΞSkδچ%K~(ᩢs=̶Ae)Y[X2VV.Q<#& E13b\)i2J;F]J%A źPڕMYΚX00JNmFLW2,s(s(RvSeF'LIBYJ:NdpƀzӶJ 5](;.*j/Z f@ WS kȁ0`in У9NwC19O{9Ŝו]EҮCltO?z3 {+_NhM֞7cɝ;NK :DZ}X"sfq9 Z 6@*#!iyX&U$kʧQ:̅hģwkt9z Veqrjޚ mM <Ď{s̎ c,Wix~+h8)&I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!drs/downrev.xmlD 0EFpDQDp%_0cSl&%Z޸ryszFȇڱ8A]Ysv= BD.qL >`֘gz]b%C Lm.eІ,kSwwbLWNpi-ŚӃ nv3_ü(~mvSj8v+O?|PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!drs/downrev.xmlPK&  B<9999?"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!drs/downrev.xmlDAk@z "!h4z{$$}wS{fff G.1L ~t2Ƹ0wmK bTPyR"gZ胴,,\73ƚCC-%3氿w68]|Iߺv9HWf 'OPK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!drs/downrev.xmlPKB:2___PPT9  V8U ?   "8=,e,eG=xdGa N??xYAutoShape 83" @PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!/$u8 drs/shapexml.xmlVn8}_`kZ-QHˆ)VM v|rEQ'H39ԇF6T}ƙ"iʚVpuÙJ oC;u-brӶkiZ5½7"*chW* DlkDM[nmܲ,pcH4H{fb7ť%8fFn\F Ҋģ<( z!`zyB퀞-1% `ũt_bT,qWSUlzn&gxz4bIG|< _,IBhkS1 nG"N9ҬʮsV55 Fy$dwcu NfnS2P+Qnt]c$x&*i:aΎgЪJHzЕiΡDrHC9Q PK!+Rdrs/downrev.xmlDMK@EaxT 5vZ(i]f^>0&L;^̗ĉo-+H' k ;ˤLˋ9Sj!sTЄR!~b{U 1ZjCNN$[ j.&<|ŧ{N?|)u}5>?4tVp|pޠDhMA.~PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!/$u8 *drs/shapexml.xmlPK-!+Rdrs/downrev.xmlPKT B:2___PPT9  R   sB  C $6S>,e,eDEF*Q6RUVxdGa N??$$?,@+@ +@0*@G6L0*LLLL0*LG6@0*@+@/-?.?2|S/T-_T0*`T`T|A0*0*|A`T`T0*`T+GTz-T/^W0GzBt5+?,@          `Bl  3yPB.M%!>.5 ȓxYAutoShape 143"{  @i PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!1;drs/shapexml.xmlXQo6~@qEk)QRPM/PPd%6&K&~H,٢@+ǻ;)}tCY& DՔvܯ7NE-궩޿Ǜ(prn7U_CѿiUcwmw(_ѡ^0ԫCowhyrSN Rhuhc% Vhȧw/fHqhڏ>t]m!o+bڗ{ _>n1EZ]wᨺvdd),4Vۻ;$4 L̔Xi%d D"$ A˯WIO`:r,CҼz-"APh(bZgê46'H!zM@0_VBPX S eHORlB\|F sL2b0uXL>aDsL6O٣7gK&&sm/r$37p, ^"Y) \aX{qS%rP^T"/5"2T2G y\Z[+F?Ho$rKK3-$:Ⰺd-LLsj:d=ȦI$ B&Ls6U1YL8VR/nJUbQ"V+(VT KڵvĆIcCE7hKS`UZ"0ǩgUvceOշc\zK(&u>#VynĢE'MɞEsbo|,˷x6LQH[ц"TqLMFdLS,2ajcA&$w|(#&>b*6 i^\8ijDtymN9GSy У7L4 d+:nSωu`GcTNqNl0hQ$ FN^F^6=YTS[p,7yc 3vKOW)$8_qKKYGzCi jDch2  ǰOlN ̑=E%K3Dd3f6yE8PRueLga. -cCsy14Ca‰CM'#փ8"R7R'8ok,'` ;IU C;CJqgy]H(!=eccmy?l[ҁ 1 d1&ұk82Y $UdHSwioBWr4(9ѕK>pϙ3gS]zؒ oCPhW[;ɺ[:() F5-XrY-gVdDQ֧h ms! \MG6kGA4:zrX 3ˈye1lgCs^ ު {EX~u8tCwA kN4C+p& 8N~7PK!$drs/downrev.xmlDQO0M%M:0)qLymamm|Ǔs|ͨ;v%[k$<`d*ZSK8|@$f=[a`rfb|s_5lO&vg4]͕!uE\ckC=6T]o-էX;z^>RO @c)E+ OD`ɵ*GI~6_PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!1;*drs/shapexml.xmlPK-!$X drs/downrev.xmlPK^ n B:2___PPT9  R    "   p,e,eřdYY??řAutoShape 163"& @PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!鵇 drs/shapexml.xmlVMo7 x-}Z;j`X٠\i#. )Yϛv "밚]9ofîbkB+]_ /k,s)bRT;SȽ�o-*vE2|k*6h\R ^j'/@ . 9c)jj|Z# 3ױC~M# +*2`v|xחR]Qce}U]!OGS$lƓ%0: .βC/#6ǃ ƕwF'(ʲ첨/RTE"󫦝30L뎥VTJ-PR<1֠b撪xu\x*ǘdwRKo4rO6pmM(Vox]< m );7{lJsvv׾A}.D/ӳ8YQN|(N!iNEýqP_.jbdQaVH;6+Ql*DcNDi{?1 PQ3w)rœ*-N civiSNuV[r ΒSx\F{ ^F*F4]lO RZ&ظI?zԍRgRBwy# 8?"3A c qΖk>SLJ eFͯD~woe|nd7ЪLuI/rv8\نlJi@GauҫԖNE0Jha^Mq'Fvti|Bd* 'lYCҁKFl/PK!xdrs/downrev.xmlDN1E&CLI y0IdA=i;i+ oB7ܜ78YAm唶5v|3"YEpŘ N:"Al(+ UÆulSwPLRy:%ieeҐ顡oP˺[/_?B>gnx}ADo+QK0!kUR_M '?PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!鵇 *drs/shapexml.xmlPK-!xdrs/downrev.xmlPK @ B:2___PPT9  {static verifier (Boogie tool) A  ?   ^ q)Ҕ)Ҕ?TextBox 16  |"MSIL ( bytecode ) A    "   @r,e,eGudYY?*uRounded Rectangle 173" @PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK! drs/shapexml.xmlVo6~ZBm@Vv\PeH;+Vh$y}w1olo2Δv[W(l%G_yelC|cFAT#*FD*(EDƌ&Yv9jG]y3] "[ uR[+ $[xG7mLFYpC4j ŏ@x_kv(,9gǂ/dNDI8LWK|de6^èGBO^AD)ʶg 0lMNhAN[xlQ v83 GV". m~0M%BSCx4VNϟ.2'Skߍg $%9:@4 [kc^-xZ5*j'1eou8:p#)0Px6,|AWav6!nKѤ8O75CWp=u2jk!#0b0)V^DG\+qgoM OJ0oe~CJWOVʕ|3 >o_VI7-ӳy4_>@]*!Il|`kt>Td\pe/>np yg:=CM8{Peܖ=.^6Uډ)iOJM4ܭ[ydWG=Y)L[w B.~gtES-&"wpx p⤻g3ةBFmQnE MgHo'|PJmJ$W 2 }yf}J?nxI5NbB{/PK!oEdrs/downrev.xmlDN0EH5HS) u+@!*5$6vd6{Flѹ.ףőb+ 䛠|}>܁H>xR0Qb'c;*T`r*)Sca<6DIrۢ(C9@q gMi{SשVD1[֞Ea8PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-! *drs/shapexml.xmlPK-!oEdrs/downrev.xmlPK P+B:2___PPT9  mSMT solver (Z3) A  ? "    t,e,eGudYY?*uRounded Rectangle 183" @PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!y drs/shapexml.xmlV]o0}G?X~EhDb4q̱#zuҭ M|{mmF3e+]g! [ N7M6dM16`Z"vXEī_ QD`< j-?Qvl,y{K`qfE Rl$b3>ic-6Ȋ/1D|C|Zd6tvv9 'Ndj$$;>=L !!DrOF蠜{"JUeU;gUmF6N&=hAZ-Y5 r.*93 GxY'`. "ĝQKFFT D5h<[(*=CĔ0qS^un•;S/z`>ېh:9,)ÕpEXv>2MKBT47EM,_zc AaテZLaVhLʄ>1A}:ѵK oe~CJ筕uFȹ]{hG}nJ~h7Dl.Kr u&l,y$>=m[}8}]byc:=۽me8U2dYZ}>Whpn]j1{H2Ef% " %}LwAQvw?yu 礽=g-۩WBR Q/E MHo-|PJlzU#%v:40>"O,$kaPK!midrs/downrev.xmlDN0DHHܨSB !PAyil4߳YF׉dW0 7A[*x{?2z]`+C[*T`r+)Sca<]3Jq`yQҡ|`O} gLi/u)wNOƛk_eU%W v#ZŔ)*q<PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!y *drs/shapexml.xmlPK-!midrs/downrev.xmlPKU A B:2___PPT9  lV.C. generator A  ? "   @u,e,eGudYY?*uRounded Rectangle 193" @PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!(Yp drs/shapexml.xmlVMo6 x-XXe)@0칠("r]&>(#qy8&?lwcΔv[W(l%GzelC|cFAT#;*FD*(EDƌ&bm5MdOg*Phs:[Q,[MmEV>*#M7t=+/WE >M./ >]̗:D&0YdE6Lcϧ0ꑐgC]WbtP=Flt.DBE1~/ [ h'HطkDX< r83 GV". m0MWNMѨZvR}%q}Yb1xPLRm"1oxC< 7f'1eou }[oxqՑm?m(2M2_fER+w\Fߗ qC_&ItFCdaa(l|P[ )IJ<%:%(w?P0iS)@voH骳2vJBZlLzo/y7-ӳy4_>A]*!~$6 O05q_tO*2.7`o2C^N!zq,i!0h{DVi'F??+Qn4i[ɮ=R$"Z\>I"wpy p⤻g3ةBFm QnE  T*İg~i};Ղ Cx"7$O8&8e?PK!pdrs/downrev.xmlDN0HHܨ u+@GTj(oc؎l&oϊgg|9N(&A V D5v,'st8  Ts_IC$ۅ0 wE)Z tkߎk8lJ{^J84{Y+u~6\40m>/A+jVo0e SrPK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!(Yp *drs/shapexml.xmlPK-!pdrs/downrev.xmlPK b 6 B:2___PPT9  nInference engine A  ? "   `v,e,eGudYY?*uRounded Rectangle 203" @PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!6} drs/shapexml.xmlVQo8 ~?CIĘ;ú{dYNʒ!i_e 7lX6)H~웷Vr髄3e)9g>S m*Ay?tw߆哉[ v@W[׊WtNyepI$V4_*[wKG[:TRΌhse{SD$XhMlp6%+}&}1t+WNkh"rv(4I|Nщ\0Ȳ$_dIX5LHȲs>|TQ1#bbwyT#Yjd-t hEhǐ6/VꃩX8tA;qv_VUi#)DajKNJ:?CoD1zdh&)#l_GZ5*bγ;3圷!!Cwy_@n迍/"M/8 ev:)SMyFn+ nhgÚ"|n4q6MM-|aCcC5Bo0 T}+C#Y,A앸1W&QYCp 7mߠeo$ ͺRa҄~dq5 ک ߞy?eG`~(^#ǗϠJPij7M ۦߚTd\peξI^6C^Ȇ>.r:J)GkC`ILI+t>W\7anY[Gj\IHekprI[T1ւ6݅qc50ƌt(_ jc]Z9Cz[ἊmV_9Sb'SH?% pɾO"ay,_PK!_װdrs/downrev.xmlDQK0Co.:!L wmIJm7AstL>hg Im[ Xh%vΒ,7s, زD*ƾ<Ԋ &q`Lҷ\z$4 nPԠWE:4/U觟*XPnxyi?9f5 t.]M|_PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!6} *drs/shapexml.xmlPK-!_װdrs/downrev.xmlPKi B:2___PPT9  h Translator   A  ?  ^w,e,e?Text Box 5"ÑPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!(fW%drs/shapexml.xmlUMo0 t|gmPhuAY-dHJ׏&ih|iɧmeFx͙.22,Da aUߩoǟ?ԣP3Xlè2zjTV|ګlUmJhǰGK>m"^̊ 6{ejp[a&NBJ‹W(@̺ u{]*Qy[o? +XGGEdPmvtCщ$)G&!?\{_ F>ʝFJFTl&!")κGm̹Pƞ {; +gFWjHf BdCe CBp`c;L*Ǜם~oYk{#ftn~j,:Wp*' 1Զ!ShP\7=+w$Aqf@lL( !ӵ}R"cgLɩl#`{SQ"Uy;Z"xK}o~0~%j|R_@ЛԊ0TTnj]щV:^_:R кYIGXKZi0MWh<} ܺw$>µi8&YhpF(?P I$nQj?DzbָMcSU)$@R '%C 0{{1G{p0${ PK!xPpdrs/downrev.xmlDKK1!\ؤcbb:w; IlBsxVȇƱ@ .iҰ߂`4(tr|4̸=[J$ 51vb8uc>m+/N5vPS啛/Bmy]>Zw "E-ˑ@OoL!אm29PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!(fW%*drs/shapexml.xmlPK-!xPp}drs/downrev.xmlPK  B:2___PPT9  nverification condition 2    ^x,e,e?Text Box 7"ÖPK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!j+drs/shapexml.xmlUMo0 t|mPHuAӞ Y-dHJ׏ih|iɧmeFx͙.2tvY82Sߌ~Gf؆Qe r*],J+/ZWA("$Ln[Жa+3|CaTi>旅6{C"oѓ`POuStqgԩ׽|d,@ g*D>#^80>h%֯pYlВ\ř TVI2'g2m;yUq`j1)q,ik-QoJ9<7]#`1<݀պҕPuƕ={ v hpF(?P I$n~6qƦ.`qWRHg&6:,J$ Ga8b%] ϗTUpXפ{ PK!S~_drs/downrev.xmlDN1E&CLI5# Ql=o6.tysoO{ۊ8V0d KlW BD:&' 01ֱ !G&.2,SW9o1k=ܶ:ņӃ *V#772|{^J]^G?b_W&@T/ot!Wm29PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!j+*drs/shapexml.xmlPK-!S~_drs/downrev.xmlPKt` `B:2___PPT9  6 correct or list of errors 2   "    z,e,eGudYY?*uRounded Rectangle 213" @PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!,V| drs/shapexml.xmlVn8/ x-R۲BYlvl6)cSoТE8yh6ېQՈεbv~=j F1l<>5B[~v.?'t"W$>Ac6&)9z$VŨTpO[b{"EYWY~+  hHנkDXܷȆE9qPFU#+6 ƦS BC^*d'o'uHM,V@IJT!"1xC< σ?EL7w7:=&G>^>mw/- Of3bz@Jy"8_p}_&!|)&vH UL٢ACm-d0k4&݄U11AA:QZ>Mhp2@!J;U+ UhBƾ&c tq7ڱ ߾~oX-;4.[v' xz t&l,y$>=}}=q=]alFN!z}q,i!0h{ĭNtI#~TWhpnᝫ]i1{ƩH2En wD;+rAݡ+ut` H_ h+v(VG66zJeVhƞ(ѷ dy`wwwGWD1e<$? PK!SFdrs/downrev.xmlDAK1BCxo6=6-"JQZuv,I0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!} (drs/shapexml.xmlUQo0~`uj!EM+ZmPi+'qñ#P9ЮOS!sgw_>_jͶyeMƓ.gTfg>S m^z~sU3 ƏBhƝ/V6Ҁni Q;nwة22E3wh۹cx&)gFԐQ;66 wNhfoQAU:{f)'ٗ CP /{%` خr@[U Ma7siщ1T`@:JG# HG`d|!ɨq'@$-3v>QSa/8"kcZ/ ݔц!Ϋ OP9. h8joj@_&iYE:%0'쾙@OUQ#tha׃|RƸ֛o{fz4PqqvuVj'rnכZBi0#5=77֠.l-6p F ? ^OZ"ZΝ٥rK8Vx J;]u }<4ѳ ,Y}͙)o؋qf 3<-<҆&L\PK!5cdrs/downrev.xmlDN0DHHܨ](B *)psM#۴cqhFofvl>$GRtKcyq ,DEZuP,'3iwذ) &>PK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!} (*drs/shapexml.xmlPK-!5cdrs/downrev.xmlPK` B:2___PPT9  ]Spec# 2  $ B   T`|,e,eBL#C2fDE>FQRUVWYY?VX52fH: @  `2fZ: Heart 22#"@PK!Zf[Content_Types].xmlMO &2WR=cJ`F0iK`#̼vLw 9uSq:w`G ^i ½KI)c/ $oVjTMRc|}042ҥCƔM̏P~*ka/8^DkHbL8e i"K\XN\6rco4y@_;oPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!ҚnD drs/shapexml.xmlVn8}_`"57Jia( E $!e hHΜwְA;[ћ!gJWk,g! [ *N?vE^J+ WZ|+"nry"5px1h[͢{3]|<̊|{s-a wXd'WU6n8x(\Ӱ-O&#D+|xt(:Qmd29\_]! /+Pȵ!ܫbr"Rbsbc^pF3m)x~Y}0m)l6įOCƞ ۚ]3(DΞJު3Pd%W91e[mL7/~>[W( P׆_ b_ x:^V/> qA6{&vH\[Jmq 5j;,ј U scx} bWGF>T7_+aJ2vI*tr.ci^=ns&ȯ_hm"Z/ in>Cz]&l穕$(.`q}ՙTd\reϾ,0xJLz!zq,NIe7%0Y}LD4n;$>b SKd:"Hѣɒxora0ds=gkڻS$oDh t(NGVS>Tvl%^gJvł &x7?+ Հ+qjPK!5drs/downrev.xmlDQK0C/åVˆɆ ع뵹k㚛Įp-ۊ|0\O3ĕӆk;!"kl,g3,;qI6"A8+ UCuĩ;8o1k=ܶ2ϲ[ipzheCqm':qcƯW^/ADxϼ+Q qXC$ %դ rPK-!Zf[Content_Types].xmlPK-!1_a /_rels/.relsPK-!ҚnD *drs/shapexml.xmlPK-!5drs/downrev.xmlPK' E B:2___PPT9  mBoogie language A  ?)   x}0e0e ?Rectangle 2  4Z ]Spec# verifier architecture   3333y___PPT10Y+D=' = @B +"  (    l ?6Slide Number Placeholder 3   h*     `?Rectangle 4 0  N   .   x60e0e ?Rectangle 3 4Z b static void Swap(int[] a, int i, int j) requires 0 <= i && i < a.Length; requires 0 <= j && j < a.Length; modifies a[i], a[j]; ensures a[i] == old(a[j]); ensures a[j] == old(a[i]); { int temp; temp = a[i]; a[i] = a[j]; a[j] = temp; } 2 PG GGGGGGGGGG GG GG G G GGGG GGGG G:GG    x0e0e ?Rectangle 2  4Z O Swap Example:   3333"  U M 05 (    l`9?6Slide Number Placeholder 3   h*     ``?Rectangle 2 0  N      x|0e0e ?Rectangle 4  4Z RModifies clauses    `~>?Rectangle 50 P N   B  \>?Line 6P R  T ?Rectangle 9P   \frame conditions limit the parts of the program state that the method is allowed to modify.0] ELE ]    x0e0e ?Rectangle 3 4Z < static void Swap(int[] a, int i, int j) requires 0 <= i && i < a.Length; requires 0 <= j && j < a.Length; modifies a[i], a[j]; ensures a[i] == old(a[j]); ensures a[j] == old(a[i]); { int temp; temp = a[i]; a[i] = a[j]; a[j] = temp; }   PG GGGGGGGG GG GG G G GGGG GGGG G:GG  3333"5    P (    l`?6Slide Number Placeholder 3   h*     `?Rectangle 2 0  N      x0e0e ?Rectangle 4  4Z O Swap Example:    ``>?Rectangle 5 @  N   B  \>?Line 6 P l  L@?Text Box 9* F ^ <old(a[j]) denotes the value of a[j] on entry to the methodr= EEEEEE = q   x`0e0e ?Rectangle 3 4Z  static void Swap(int[] a, int i, int j) requires 0 <= i && i < a.Length; requires 0 <= j && j < a.Length; modifies a[i], a[j]; ensures a[i] == old(a[j]); ensures a[j] == old(a[i]); { int temp; temp = a[i]; a[i] = a[j]; a[j] = temp; } t PG1GG GG G GG GGGG GGG G9GG  3333"  d \ pD (    l?6Slide Number Placeholder 3   h*     `?Rectangle 2  N      x70e0e ?Rectangle 3  4Z HResult    ``6>?Rectangle 5  N   B  \Ԕ?Line 6 p   L`0?Text Box 7}pQq  1result denotes the value returned by the method(2 E, 2 \   xq0e0e ?Rectangle 4 4Z p static int F( int p ) ensures 100 < p ==> result == p  10; ensures p <= 100 ==> result == 91; { if ( 100 < p ) return p  10; else return F( F(p+11) ); } GGGGGGGG G GGGGG GGGGG  3333" |t\(     p 10e0e ?Title 1  4Z =Spec# Constructs so far     0e0e ?,Content Placeholder 2 4Z @==> short-circuiting implication <==> if and only if result denotes method return value old(E) denotes E evaluated in method s pre-state requires E; declares precondition ensures E; declares postcondition modifies w; declares what a method is allowed to modify assert E; in-line assertion!5.0 !   l@?6Slide Number Placeholder 3   h*    333380___PPT10.'" ME-(     p0e0e ?Title 1  4Z 6Modifies Clauses    0e0e ?,Content Placeholder 2 4Z Bmodifies w where w is a list of: p.x field x of p p.* all fields of p p.** all fields of all peers of p this.* default modifies clause, if this-dot-something is not mentioned in modifies clause this.0 disables the  this.* default a[i] element i of array a a[*] all elements of array a#G5C "  l?6Slide Number Placeholder 3   h*    333380___PPT10.)"} (  )   x@0e0e ?Rectangle 4pP 4Z  ]Loop Invariants   X   x0e0e ?Rectangle 5 `   4Z  Examples: Squaring/cubing by addition  no need for quantifiers Summing Binary Search Sorting Coincidence count gcd/lcm Factorial 6 P P    333380___PPT10.Q (     p 0e0e ?Title 1  4Z BComputing Square by Addition    0e0e ?,Content Placeholder 2 4Z  public int Square(int n) requires 0 <= n; ensures result == n*n; { int r = 0; int x = 1; for (int i = 0; i < n; i++) invariant i <= n; invariant r == i*i; invariant x == 2*i + 1; { r += x; x += 2; } return r; }L       ;"l   l ?6Slide Number Placeholder 3   h*    333380___PPT10.*0g"w (    l@?6Slide Number Placeholder 3   h*   (   ~`0e0e ?Rectangle 1026  4Z VQuantifiers in Spec#  r   ~0e0e ?Rectangle 1027 4Z Examples: forall {int k in (0: a.Length); a[k] > 0}; exists {int k in (0: a.Length); a[k] > 0}; exists unique {int k in (0: a.Length); a[k] > 0};     P   B 3333" E=%(    l?6Slide Number Placeholder 3   h*   "   x0e0e ?Rectangle 2  4Z VQuantifiers in Spec#     x0e0e ?Rectangle 3 4Z Examples: forall {int k in (0: a.Length); a[k] > 0}; exists {int k in (0: a.Length); a[k] > 0}; exists unique {int k in (0: a.Length); a[k] > 0}; void Square(int[]! a) modifies a[*]; ensures forall{int i in (0: a.Length); a[i] == i*i}; f   c P     ZV 3333"$   | d (    l?6Slide Number Placeholder 3   h*     `Sf?Rectangle 4  N     ` Qf?Rectangle 5P  N      xT0e0e ?Rectangle 2  4Z QLoop Invariants     x00e0e ?Rectangle 30@p` 4Z RBvoid Square(int[]! a) modifies a[*]; ensures forall{int i in (0: a.Length); a[i] == i*i}; { int x = 0; int y = 1; for (int n = 0; n < a.Length; n++) invariant 0 <= n && n <= a.Length; invariant forall{int i in (0: n); a[i] == i*i}; { a[n] = x; x += y; y += 2; } }C P ( # R8W)!& 333380___PPT10.T0ߓx"  '  @ (    lV?6Slide Number Placeholder 3   h*     `Yf?Rectangle 2  N     `@Xf?Rectangle 3@  N   +   xV0e0e ?Rectangle 4  4Z _Strengthening Loop Invariants     x\0e0e ?Rectangle 50@p` 4Z qvoid Square(int[]! a) modifies a[*]; ensures forall{int i in (0: a.Length); a[i] == i*i}; { int x = 0; int y = 1; for (int n = 0; n < a.Length; n++) invariant 0 <= n && n <= a.Length; invariant forall{int i in (0: n); a[i] == i*i}; invariant x == n*n && y == 2*n + 1; { a[n] = x; x += y; y += 2; } }r P ( # XW)!+ 333380___PPT10.T0ߓx"    `  (    l@?6Slide Number Placeholder 3   h*     ``_f?Rectangle 2  N     `]f?Rectangle 3@  N   '   x0e0e ?Rectangle 4  4Z [Inferring Loop Invariants     x 0e0e ?Rectangle 50@p` 4Z qvoid Square(int[]! a) modifies a[*]; ensures forall{int i in (0: a.Length); a[i] == i*i}; { int x = 0; int y = 1; for (int n = 0; n < a.Length; n++) invariant 0 <= n && n <= a.Length; invariant forall{int i in (0: n); a[i] == i*i}; invariant x == n*n && y == 2*n + 1; { a[n] = x; x += y; y += 2; } } r P ( #   ?W)!+  D@?TextBox 6  nInferred by /infer:p     D`?TextBox 7P mInferred by default     Zo?6Straight Arrow Connector 9"@@ P   Zo?8Straight Arrow Connector 11"@0  /@   333380___PPT10.T0ߓx" ! L D , (    l@?6Slide Number Placeholder 3   h*   %   x@[0e0e ?Rectangle 2  4Z YComprehensions in Spec#      x0e0e ?Rectangle 3 4Z fExamples: sum {int k in (0: a.Length); a[k]}; product {int k in (1..n); k}; min {int k in (0: a.Length); a[k]}; max {int k in (0: a.Length); a[k]}; count {int k in (0: n); a[k] % 2 == 0}; Intervals: The half-open interval {int i in (0: n)} means i satisfies 0 <= i < n The closed (inclusive) interval {int k in (0..n)} means i satisfies 0 <= i <= n   P P  P) P P2 P! P P P P   CCCC 6CCC G G C CC C    %A. 3333" "   (    lU?6Slide Number Placeholder 3   h*     `f?Rectangle 2p` N     `f?Rectangle 3 `  N   )   x0e0e ?Rectangle 5  4Z ]Invariants:Summing Arrays $    x`0e0e ?Rectangle 40 4Z   public static int SumValues(int[]! a) ensures result == sum{int i in (0: a.Length); a[i]}; { int s = 0; for (int n = 0; n < a.Length; n++) invariant n <= a.Length; invariant s == sum{int i in (0: n); a[i]}; { s += a[n]; } return s; }! P  !  8 333380___PPT10.T0ߓx"# UM5(    l`?6Slide Number Placeholder 3   h*   "   x20e0e ?Rectangle 2  4Z VQuantifiers in Spec#     x00e0e ?Rectangle 3 4Z We may also use filters: sum {int k in (0: a.Length), 5<=k; a[k]}; product {int k in (0..100), k % 2 == 0; k}; Note that the following two expressions are equivalent: sum {int k in (0: a.Length), 5<=k; a[k]}; sum {int k in (5: a.Length); a[k]};  V 9 N     =    8    3333"a $    (    l?6Slide Number Placeholder 3   h*     `6f?Rectangle 4  N     `@5f?Rectangle 5  N   ]   x00e0e ?Rectangle 6`@p 4Z a public static int SumEvens(int[]! a) ensures result == sum{int i in (0: a.Length), a[i] % 2 == 0; a[i]}; { int s = 0; for (int n = 0; n < a.Length; n++) invariant n <= a.Length; invariant s == sum{int i in (0: n), a[i] % 2 == 0; a[i]}; { if (a[n] % 2 == 0) { s += a[n]; } } return s; }b P . !  ' =    x`90e0e ?Rectangle 7  4Z O Using Filters   333380___PPT10.T" % A 9  ! (    l`<?6Slide Number Placeholder 3   h*     `:f?Rectangle 2  N     `9f?Rectangle 3  N   \   x?0e0e ?Rectangle 4`@p 4Z ` public static int SumEvens(int[]! a) ensures result == sum{int i in (0: a.Length), a[i] % 2 == 0; a[i]}; { int s = 0; for (int n = 0; n < a.Length; n++) invariant n <= a.Length; invariant s == sum{int i in (0:n), a[i] % 2 == 0; a[i]}; { if (a[n] % 2 == 0) { s += a[n]; } } return s; }a P . !  & =    x`V0e0e ?Rectangle 5  4Z O Using Filters    `W>?Rectangle 6   N   B @ \>?Line 7 p@   L]?Text Box 8@ 0 GF  1Filters the even values From the quantified range2 2 2  333380___PPT10.T"|&  (    l4?6Slide Number Placeholder 3   h*   =   x0e0e ?Rectangle 6`@p 4Z q public static int SeqSum(int[] a, int i, int j) { int s = 0; for (int n = i; n < j; n++) { s += a[n]; } return s; }* P ,/ "   x`_0e0e ?Rectangle 7  4Z VSegment Sum Example:   333380___PPT10.T"b '   @  (    l?6Slide Number Placeholder 3   h*     `?Rectangle 2 p`  N      x0e0e ?Rectangle 3 4Z B, A method that sums the elements in a segment of an array a i.e. a[i] + a[i+1] + & + a[j-1] may have the following contract: public static int SegSum(int[]! a, int i, int j) requires 0<= i && i <= j && j <= a.Length; ensures result == sum{int k in (i: j); a[k]}; ( ;CC$ '1(   x 0e0e ?Rectangle 4  4Z \Using Quantifiers in Spec#  B  \>?Line 5` 0    L?Text Box 7 | g Non-null type   B  \>?Line 8 @B  \>?Line 9   N?Text Box 10   hPost condition     N?Text Box 11f  f Precondition     3333"L( `(    l`?6Slide Number Placeholder 3   h*     `?Rectangle 8 @  N   m   x=0e0e ?Rectangle 300  4Z  public static int SegSum(int[]! a, i int i, int j) requires 0 <= i && i <= j && j <= a.Length; ensures result == sum{int k in (i: j); a[k]}; { int s = 0; for (int n = i; n < j; n++) { s += a[n]; } return s; }F   ' 1 B/?"     x0e0e ?Rectangle 2  4Z PLoops in Spec#   3333" ) E = % (    l?6Slide Number Placeholder 3   h*     `?Rectangle 6 p ` N     `@?Rectangle 2 @  N   3   x`0e0e ?Rectangle 300  4Z g public static int SegSum(int[]! a, i int i, int j) requires 0 <= i && i <= j && j <= a.Length; ensures result == sum{int k in (i: j); a[k]}; { int s = 0; for (int n = i; n < j; n++) { s += a[n]; } return s; }P   ' * /?0     x0e0e ?Rectangle 4  4Z PLoops in Spec#    F?Text Box 5 x  /When we try to verify this program using Spec# we get an Error: Array index possibly below lower bound as the verifier needs more information \ A'&   3333"* UM5(    l`?6Slide Number Placeholder 3   h*      x 0e0e ?Rectangle 3@ 4Z  Postcondition: ensures result == sum{int k in (i: j); a[k]}; Loop Initialisation: n == i Loop Guard: n < j Loop invariant: invariant i <= n && n <= j; invariant s == sum{int k in (i: n); a[k]}; z + Z n     -< $   x0e0e ?Rectangle 4  4Z XAdding Loop Invariants   3333"e+ (    l`?6Slide Number Placeholder 3   h*      x0e0e ?Rectangle 2@ 4Z  Postcondition: ensures result == sum{int k in (i: j); a[k]}; Loop Initialisation: n == i Loop Guard: n < j Loop invariant: invariant s == sum{int k in (i: n); a[k]}; invariant i <= n && n <= j; t  n     -  $   x0e0e ?Rectangle 3  4Z XAdding Loop Invariants  B @ \>?Line 5`    L?Text Box 6 ]  2Introduce the loop variable & provide its range.3 3 3  3333" , E = % (    l?6Slide Number Placeholder 3   h*     `?Rectangle 2  N      x 0e0e ?Rectangle 3@ 4Z  public static int SegSum(int[]! a, int i, int j) requires 0 <= i && i <= j && j <= a.Length; ensures result == sum{int k in (i: j); a[k]}; { int s = 0; for (int n = i; n < j; n++) { s += a[n]; } return s; } Z '  h ">"   $   x0e0e ?Rectangle 4  4Z XAdding Loop Invariants    ``?Rectangle 5   RH invariant i <= n && n <= j; invariant s == sum{int k in (i: n); a[k]}; H~0 <Z   :<   3333" - 2 *  (    l?6Slide Number Placeholder 3   h*     `@?Rectangle 2  N      x`0e0e ?Rectangle 3@ 4Z  public static int SegSum(int[]! a, int i, int j) requires 0 <=i && i <= j && j <= a.Length; ensures result == sum{int k in (i:j); a[k]}; { int s = 0; for (int n = i; n < j; n++) { s += a[n]; } return s; }: Z &  = h !="   $   x0e0e ?Rectangle 4  4Z XAdding Loop Invariants    `?Rectangle 5   QG invariant i <= n && n <= j; invariant s == sum{int k in (i:n); a[k]}; G~0 <Z   :;  0  L?Text Box 6 p @ LVerifier Output: Spec# Program Verifier finished with 3 verified, 0 errors&M < M  3333".   (    l ?6Slide Number Placeholder 3   h*     `` ?Rectangle 2  N      x0e0e ?Rectangle 3@ 4Z 5 public static int SegSum(int[]! a, int i, int j) requires 0 <= i && i <= j && j <= a.Length; ensures result == sum{int k in (i: j); a[k]}; { int s = 0; int n=i; while (n < j) { int vf = j - n; //variant function s += a[n]; n++; assert j - n < vf; } return s; }6 Z '       ">  1   3   x 0e0e ?Rectangle 4  4Z g#Variant Functions:Rolling your own!$ $$ $/  ` ?Rectangle 5P  ] invariant i <= n && n <= j; invariant s == sum{int k in (i: n); a[k]}; invariant 0<= j - n; ]~0 <Z     R<  *  L?Text Box 60  RWe can use assert statements to determine information about the variant functions.S S S   `Ԕ?Rectangle 8   N     `Ԕ?Rectangle 9 `  N    3333")/ @(  !   x 0e0e ?Rectangle 2pP 4Z  UWriting Invariants   L   x0e0e ?Rectangle 3 `   4Z  *Some more examples &     33330 D<`$(    l?6Slide Number Placeholder 3   h*     `f?Rectangle 7   N     ` ?Rectangle 2  N      x@0e0e ?Rectangle 3`P 4Z  public static int Sum0(int[]! a) ensures result == sum{int i in (0 : a.Length); a[i ]}; { int s = 0; for (int n = 0; n < a.Length; n++) invariant n <= a.Length && s == sum{int i in (0: n); a[i]}; { s += a[n]; } return s; } g  g  c  cccg  c  cg  cg  c  cg  c  ccccccccccccg  c  ccc  g  c  cg  c  ccccccccccc   g  c  ccccccccg  cg  c  cg  c  cccccccccccccccccc  g  c  cccB  2   x0e0e ?Rectangle 4  4Z fInvariant variations: Sum0     L?Text Box 6   <This loop invariant focuses on what has been summed so far.= =A =  3333"1 (    l@R?6Slide Number Placeholder 3   h*     `Qf?Rectangle 6 p N     ``?Rectangle 2  N   '    x0e0e ?Rectangle 30` 4Z [ public static int Sum1(int[]! a) ensures result == sum{int i in (0 : a.Length); a[i ]}; { int s = 0; for (int n = 0; n < a.Length; n++) invariant n <= a.Length && s + sum{int i in (n: a.Length); a[i]} == sum{int i in (0: a.Length); a[i]} { s += a[n]; } return s; }  g  c  cccg  c  cg  cg  c  cg  c  ccccccccccccg  c  ccc  g  c  cg  c  ccccccccccc   g  c  cccccccg  cg  c  cg  c  cccccccc cg  cg  c  cg  c  cccccccccccccccccc  g  c  cccgccB  2   x0e0e ?Rectangle 4  4Z fInvariant variations: Sum1      FR?Text Box 5   9This loop invariant focuses on what is yet to be summed.: :A :  3333"2 &(    l?6Slide Number Placeholder 3   h*     ``Vf?Rectangle 6  N     `T?Rectangle 2p  N      xS0e0e ?Rectangle 30` 4Z  public static int Sum2(int[]! a) ensures result == sum{int i in (0: a.Length); a[i]}; { int s = 0; for (int n = a.Length;0 <= --n; ) invariant 0 <= n && n <= a.Length && s == sum{int i in (n: a.Length); a[i]}; { s += a[n]; } return s; }b g  c  cccg  c  cg  cg  c  cg  c  ccccccccccccg  c  ccc  g  c  cg  c  ccccccccc   g   c  ccccccccg  cg  c  cg  c  cccccccccccccccccc  g  c  cccB  2   x@X0e0e ?Rectangle 4  4Z fInvariant variations: Sum2     LY?Text Box 5   @This loop invariant that focuses on what has been summed so farA AA A  3333"3hj WO7(    l a?6Slide Number Placeholder 3   h*     ```f?Rectangle 60 p N     `@^?Rectangle 2  N       x\0e0e ?Rectangle 30` 4Z public static int Sum3(int[]! a) ensures result == sum{int i in (0 : a.Length); a[i ]}; { int s = 0; for (int n = a.Length; 0<= --n) invariant 0 <= n && n<= a.Length && s + sum{int i in (0: n); a[i]} == sum{int i in (0: a.Length); a[i]} { s += a[n]; } return s; }  g  c  cccg  c  cg  cg  c  cg  c  ccccccccccccg  c  ccc  g  c  cg  c  cccccccccc   g  c  cccg  cg  c  cg  c  cccccccc cg  cg  c  cg  c  cccccccccccccccccc  g  c  cccgccB  1   xZ0e0e ?Rectangle 4  4Z eInvariant variations:Sum3      Fa?Text Box 50 P @; :This loop invariant focuses on what has been summed so far; ;A ;  3333"s 4     (      lb?6Slide Number Placeholder 3   h*      `?Rectangle 7 @ N      `e?Rectangle 3@P  N       xf0e0e ?Rectangle 40` 4Z .public int Counting(int[]! a) ensures result == count{int i in (0: a.Length); a[i] == 0}; { int s = 0; for (int n = 0; n < a.Length; n++) invariant n <= a.Length; invariant s == count{int i in (0: n); a[i] == 0}; { if (a[n]== 0) s = s + 1; } return s; } } / Z & ""&"&"&"&$"& "&"&"&" &"&"&"&"&!"& "L @    xg0e0e ?Rectangle 5  4Z tThe count Quantifier2      Fi?Text Box 60 P @P  Z E  *   L j?Text Box 8   TCounts the number of 0 s in an int []! a;+ + +  3333" 5    (    l`S?6Slide Number Placeholder 3   h*     `kf?Rectangle 6  N     `jf?Rectangle 5P@p N   >   xm0e0e ?Rectangle 2  4Z rThe min Quantifier2     Lo?Text Box 4   /Calculates the minimum value in an int []! a; 0 0 0 "   x`p0e0e ?Rectangle 3` 4Z V4 public int Minimum() ensures result == min{int i in (0: a.Length); a[i]}; { int m = System.Int32.MaxValue; for (int n = 0; n < a.Length; n++) invariant n <= a.Length; invariant m == min{int i in (0: n); a[i]}; { if (a[n] < m) m = a[n]; } } return m; }5 Z'*x) 3333"B 6    (    l?6Slide Number Placeholder 3  `  h*     ``of?Rectangle 3 @ N     `@rf?Rectangle 2p0  N   J   x`s0e0e ?Rectangle 6`P  4Z ~Rpublic int MaxEven() ensures result == max{int i in (0: a.Length), a[i] % 2== 0;a[i]}; { int m = System.Int32.MinValue; for (int n = 0; n < a.Length; n++) invariant n <= a.Length; invariant m == max{int i in (0: n), a[i] % 2== 0; a[i]}; { if (a[n] % 2== 0 && a[n] > m) m = a[n]; } return m; }xS Z  '# . O! !>   xt0e0e ?Rectangle 4  4Z rThe max Quantifier2      Lv?Text Box 5  3Calculates the maximum even value in an int []! a; 4 4 4  3333" 0(@ (  ,   p`v0e0e ?Title 1  4Z h&Another Use of Comprehension Operators''  '    w0e0e ?,Content Placeholder 2 4Z /Example expressions: min{ x, y } max{ a, b, c }D   0  ly?6Slide Number Placeholder 3   h*    333380___PPT10.+_" 7 } u P ] (    l?6Slide Number Placeholder 1   h*     `@~?Rectangle 3P`0  N     Nz?Rectangle 4 4How to help the verifier &  $    L|?Text Box 5PU lRecommendations when using comprehensions: Write specifications in a form that is as close to the code as possible. When writing loop invariants, write them in a form that is as close as possible to the postconditionL, >  + <     L|?Text Box 6 R   F  F ?Text Box 8 h  In our SegSum example where we summed the array elements a[i] & a[j-1], we could have written the postcondition in either of two forms: ensures result == sum{int k in (i: j); a[k]}; ensures result == sum{int k in (0: a.Length), i <= k && k < j; a[k]};  .~0 <ZH ~*-  3333" 8 d \ p  D (      l@?6Slide Number Placeholder 3   h*      `?Rectangle 2  N       x@x0e0e ?Rectangle 3@ 4Z  public static int SegSum(int[]! a, int i, int j) requires 0 <= i && i <= j && j <= a.Length; ensures result == sum{int k in (i: j); a[k]}; { int s = 0; for (int n = i; n < j; n++) { s += a[n]; } return s; } Z '  h ">"   D    x 0e0e ?Rectangle 4  4Z x4How to help the verifier &  $    `?Rectangle 5   RH invariant i <= n && n <= j; invariant s == sum{int k in (i: n); a[k]}; H~0 <Z   :<   3333" 9   $ (  $ $ l ?6Slide Number Placeholder 1   h*    $ f`?Rectangle 10260@ N    $ T?Rectangle 1027 4How to help the verifier &  $   $ R?Text Box 1028 R   \ $ R?Text Box 10290E$ xRecommendation: When writing loop invariants, write them in a form that is as close as possible to the postcondition.  y x y  $ L`?Text Box 1030f r"ensures result == sum{int k in (i: j); a[k]}; invariant i <= n && n <= j; invariant s == sum{int k in (i: n); a[k]}; OR ensures result == sum{int k in (0: a.Length), i <= k && k < j; a[k]}; invariant 0 <= n && n <= a.Length; invariant s == sum{int k in (0: n), i <= k && k < j; a[k]}; . ^~0 <Z5b   '  !P-<  #  3333"@:  ((  (& (  xY0e0e ?Rectangle 4pP 4Z  ZSome Additional Examples   (  x0e0e ?Rectangle 5 `   4Z  R    333380___PPT10. W f ; 2 * , (  , , l?6Slide Number Placeholder 3   h*    ,  x0e0e ?Rectangle 2  4Z O Binary Search   ,  x 0e0e ?Rectangle 3 4Z  public static int BinarySearch(int[]! a, int key) requires forall{int i in (0: a.Length), int j in (i: a.Length); a[i] <= a[j]}; ensures 0 <= result ==> a[result] == key; ensures result < 0 ==> forall{int i in (0: a.Length); a[i] != key}; { int low = 0; int high = a.Length - 1; while (low <= high) invariant high+1 <= a.Length; invariant 0 <= low; invariant forall{int i in (0: low); a[i] != key}; invariant forall{int i in (high+1: a.Length); a[i] != key};  P   !     "$8@ 333380___PPT10.T8c"q<  0(  0 0 l?6Slide Number Placeholder 3   h*   ' 0  x0e0e ?Rectangle 2  4Z [Binary Search (cont.)  - 0  x0e0e ?Rectangle 3 4Z a# { int mid = (low + high) / 2; int midVal = a[mid]; if (midVal < key) { low = mid + 1; } else if (key < midVal) { high = mid - 1; } else { return mid; // key found } } return -(low + 1); // key not found. } # P P  .7$$ *"#- 333380___PPT10.Tpء"=  4(  4 4 l?6Slide Number Placeholder 3   h*    4  x0e0e ?Rectangle 2  4Z PInsertion Sort  Z 4  x@0e0e ?Rectangle 3 4Z lpublic void sortArray(int[]! a) modifies a[*]; ensures forall{int j in (0: a.Length), int i in (0: j); a[i] <= a[j]}; { for (int k = 0; k < a.Length; k++) invariant 0 <= k && k <= a.Length; invariant forall{int j in (0: k), int i in (0: j); a[i] <= a[j]}; { // Inner loop  see next slide } }7 P    ">Y# 333380___PPT10.T`1" > A 9 0 8! (  8 8 l`p?6Slide Number Placeholder 3   h*    8  xp0e0e ?Rectangle 2  4Z PInsertion Sort   8  x@0e0e ?Rectangle 3` 4Z   for (int t = k; t >0 && a[t-1] > a[t]; t--) invariant 0<=t; invariant forall{int j in (1: t), int i in (0: j); a[i] <= a[j]}; invariant forall{int j in (t: k+1), int i in (t: j); a[i] <= a[j]}; invariant forall{int j in (t+1: k+1), int i in (0: t); a[i] <= a[j]}; //set an upper bound for t (t 0 && b > 0; ensures result > 0 && a % result == 0 && b % result == 0; ensures forall{int k in (1..a+b), a % k ==0 && b % k == 0; k <= result}; { int i = 1; int res = 1; while (i < a+b) invariant i <= a+b; invariant res > 0 && a % res == 0 && b % res == 0; invariant forall{int k in (1..i), a % k == 0 && b % k == 0; k <= res}; { i++; if (a % i == 0 && b % i == 0) { res = i; } } return res; } P    )  2 KE  333380___PPT10.Th"M@ p @(  @ @ l`?6Slide Number Placeholder 3   h*   H @  xs0e0e ?Rectangle 2  4Z |:Some more difficult examples&   ( @  x t0e0e ?Rectangle 3 4Z \^Automatic verification of textbook programs that use comprehensions. K. Rustan M. Leino and Rosemary Monahan. In Formal Techniques for Java-like Programs, ECOOP Workshop (FTfJP'07: July 2007, Berlin, Germany) A method of programming. Edsger W. Dijkstra and W. H. J. Feijen Spec# Wiki http://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePage   J  r ( 8 B >  ="\ 3333"A  D{(  D D  xt0e0e ?Rectangle 2pP 4Z  QClass Contracts   D  xv0e0e ?Rectangle 3@p0  4Z  R P    3333B   H(  H H lw?6Slide Number Placeholder 1   h*   L H  xy0e0e ?Shape 81921"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!HTdrs/downrev.xmlDJ@Ea7iE[bTZAhiΆݵMޥxs9`;u`Z'Qr| PN`SnQv|(bDBNM}uFgIyK1E_kӓ,זZI n.~,B?>>ftk:7a*Ǜ+ϨAڿ>}kv"{L%/PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!HTdrs/downrev.xmlPK <$D" 4Z z6 Contracts break abstraction We need invariants 7 7 7 H N z?Shape 12   class C { private int a, z; public void M( ) requires a `" 0; { z = 100 / a; } }~]    3f3f ]C H f }f>?Rectangle 8P p requires a != 0; ,    H  x@~0e0e ?Shape 50177  4Z \Pre- & Post are not Enough   H l`?6Slide Number Placeholder 9 S ^  G   H `?*Footer Placeholder 8Z  Z C    H N?Shape 12"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!fOdrs/downrev.xmlDAK1F!fmRҲւf$kۭ=oxo2m+N AڸZvq7:wLf ڟܚT X&2V Yߑcvb3R<ܶreh/4cC*X^eOQ)R7| "Q~_JsK?Rectangle 120 P invariant a != 0; ,     3333___PPT10{.˟'*+|D' = @B D' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*H"%(D' =%(Du' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*H"7%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* HJ%(+8+0+ H" +"C   L(  L L lw?6Slide Number Placeholder 1   h*   O L  x0e0e ?Shape 81921"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!Jd?kdrs/downrev.xmlDN@EM͘&[4J,FC[6+w>N{޴H>4* dK[)*S!:K `>L1dwtc%bC LPd0 ]G#ᦕI, 6jhYSx~]<Ųp0S~"RW9Q~ /V&?߾; c[69PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!Jd?kdrs/downrev.xmlPK<$" 4Z z6 Contracts break abstraction We need invariants 7 7 7 L N?Shape 12   class C { private int a, z; public void M( ) requires a `" 0; { z = 100 / a; } }~]    3f3f ]C L `@f>?Rectangle 4P p requires a != 0; ,    L  x`0e0e ?Shape 50177  4Z \Pre- & Post are not Enough   L l?6Slide Number Placeholder 9 S ^  G   L `@?*Footer Placeholder 8Z  Z C    L N`?Shape 12"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!fOdrs/downrev.xmlDAK1F!fmRҲւf$kۭ=oxo2m+N AڸZvq7:wLf ڟܚT X&2V Yߑcvb3R<ܶreh/4cC*X^eOQ)R7| "Q~_JsK?Rectangle 90 P invariant a != 0; ,    G  L N?Text Box 10 a< KWhen used in a class the keyword invariant, indicates an object invariant <L "   L  3333___PPT10..˟'*+s?D@' = @B D' = @BA?%,( < +O%,( < +D2' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*L%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* L%(+p+0+L" ++0+ L" +"D  Px(  P P l ?6Slide Number Placeholder 3   h*   ' P  x0e0e ?Rectangle 2  4Z [Object Invariants E  P  x0e0e ?Rectangle 3 4Z (:Specifying the rules for using methods is achieved through contracts, which spell out what is expected of the caller (preconditions) and what the caller can expect in return from the implementation (postconditions). To specify the design of an implementation, we use an assertion involving the data in the class called an object invariant. Each object s data fields must satisfy the invariant at all stable times  vE EDEEmEEE<EEEE  3333"E  T(  T T l@?6Slide Number Placeholder 3   h*   % T  ~0e0e ?Rectangle 1026  4Z SObject Invariants  G T  ~`0e0e ?Rectangle 1027p@ 4Z uclass Counter{ int c; invariant 0 <= c; public Counter() { c= 0; } //invariant established & checked after construction public void Inc () modifies c; ensures c == old(c)+1; { c++; //invariant checked after every increment } F P   7   *  333380___PPT10.W``"YF 0 X(  X X l?6Slide Number Placeholder 3   h*   ( X  x0e0e ?Rectangle 2  4Z \Breaking Object Invariants  T X  x0e0e ?Rectangle 3 4Z Rpublic void BadInc () //Not Allowed  may break the Invariant modifies c; ensures c == old(c)+1; { c--; //Error here c+=2; //invariant checked after every increment } P  )   +H&v 3333"G  P \(  \ \ l?6Slide Number Placeholder 3   h*   , \  x0e0e ?Rectangle 2  4Z `Establishing Object Invariants  ` \  x 0e0e ?Rectangle 3 4Z class Counter{ int c; bool even; invariant 0 <= c; invariant even <==> c % 2 == 0; public Counter() { c= 0; // OK to break inv here(in constructor) even = true; } //invariant established & checked after construction &  P   +6xV0F 333380___PPT10.W``"e p `(  ` ` l ?6Slide Number Placeholder 3   h*   $ `  x@0e0e ?Rectangle 2  4Z XBreaking the Invariant  d `  x0e0e ?Rectangle 3 4Z class Counter{ int c; bool even; invariant 0 <= c; invariant even <==> c % 2 == 0; & public void Inc () modifies c; ensures c == old(c)+1; { c++; //invariant doesn t hold after c++; even = !even ; } & ^ P Z P     &`W` 3333"H  d(  d_ d  x_ж_ж ?Rectangle 2  4Z  Object states  8 @ @ @5 d  x@_ж_ж ?Rectangle 3 4Z iMutable Object invariant might be violated Field updates are allowed Valid Object invariant holds Field updates allowed only if they maintain the invariant\ =  Q =Q 8 >~> ~ >~ 3333ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++"IA  h(  h" h ` ff?AutoShape 2`  N    h  x@_ж_ж ?Rectangle 3`px  4ZTL___PPT9.&@ 8The Heap (the Object Store) *  *  8 @ @ @&r h  G33  <?AutoShape 50  N   &r h  G33  <?AutoShape 6p  N   &r h  G  <?AutoShape 7   N   &r h  G33  <?AutoShape 8 @  N   (r h  G33  <?AutoShape 12` P N   B  h@ X333$?Line 13p_B  h X333$?Line 14! B  h@ X333$?Line 15pQ B  h X333$?Line 16@ P B  h X333$?Line 17O @B h@ X333$?Line 18 ? PB h X333$?Line 19 0B h X333$?Line 20@`E h f_ж_ж?Text Box 21` `N  Mutable Valid(> Lg$ @ @ @ @ h b?Rectangle 22   N    h b3?Rectangle 23% N   B h X333$?Line 24 &r h  G  <?AutoShape 4P N   &r h  G  <?AutoShape 9  N   (r h  G  <?AutoShape 100@  N   (r h  ` G33  <?AutoShape 11 P N    3333ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++"F J  l(  l l l`?6Slide Number Placeholder 3   h*   6 l  x0e0e ?Rectangle 2  4Z jSummary for simple objects  F l  x !0e0e ?Rectangle 3b 4Z>6___PPT9 4~("o " o. mutable Inv (o)) invariant & this.f & ; x.f = E;z nx"  !? " l r@"_ж_ж ?AutoShape 4`  .o.mutable o.validJ>(t &g & @ @ @ @}" l  x'_ж_жfLL?AutoShape 6   3Check: x.mutable or assignment maintains invariant(4>4g4 @ @ @ @B l \>?Line 7 @  333380___PPT10.މ{"K  p(  p p l&?6Slide Number Placeholder 3   h*   2 p X '?Oval 17 P@p N   2 p X*?Oval 14 `p  N   2 p X,?Oval 10   N    p  x-0e0e ?Rectangle 20@ 4Z class Counter{ int c; bool even; invariant 0 <= c; invariant even <==> c % 2 == 0; & public void Inc () modifies c; ensures c == old(c)+1; { expose(this) { c ++; even = !even ; } } } P      |WM  B p X>?Line 18 P2 p  x`00e0e ?Rectangle 3  4Z f"To Mutable and back: Expose Blocks# #$ #  p L1?Text Box 4 0 8  8 Z   "  p  x3_ж_жf?AutoShape 6`   "changes this from valid to mutableJ#>eef3e# @ @ @ @"  p  x_ж_жf?AutoShape 8@ "changes this from mutable to validJ#>eef3e# @ @ @ @"  p  x@_ж_жf?AutoShape 9p 0  /+can update c and even, because this.mutable,> eaea eef3 e, @ @ @ @B  p X>?Line 11 ` @ B p X>?Line 15 0  3333___PPT10i.W``+D=' = @B +""L )! t (  t t l`,?6Slide Number Placeholder 3   h*    t b'?AutoShape 30   N    t b4?AutoShape 29p   N    t b5?AutoShape 27@  N   | t  x60e0e ?Rectangle 30 4Z class Counter{ int c; bool even; invariant 0 <= c; invariant even <==> c % 2 == 0; public Counter() { c= 0; even = true; } public void Inc () modifies c; ensures c == old(c)+1; { expose (this) { c++; even = !even ; } } }  P         lP  t  x70e0e ?Rectangle 2  4Z TSummary of Example   t f`9>?AutoShape 80 @ ` p N     t N:?Text Box 11: P   S  t N;?Text Box 12 Z 3 The invariant may be broken in the constructor4 4P  #  B  t ^Ԕ?Line 13Pn  t N=?Text Box 14D6  @The invariant must be established & checked after constructionA A^      B  t ^Ԕ?Line 16`   t N`??Text Box 25 6~ ;The object invariant may be broken within an expose block< <<  B t XԔ?Line 26P P  3333___PPT10i.W``+D=' = @B +"bM me xM(  x' x  x`0e0e ?Rectangle 2pP 4Z  [Subtyping and Inheritance   x  x%0e0e ?Rectangle 3 `   4Z  Inheritance [Additive] and Additive Expose Overriding methods  inheriting contracts2+ P* P+* U  3333___PPT10i.QM+D=' = @B +VN ]U@ |=(  | | l?6Slide Number Placeholder 3   h*   & |  x *0e0e ?Rectangle 2  4Z Z Base Class     |  x0e0e ?Rectangle 3 `  4Z epublic class Car { protected int speed; invariant 0 <= speed; protected Car() { speed = 0; } f Zf4 T  | L?Text Box 4P    public void SetSpeed(int kmph) requires 0 <= kmph; ensures speed == kmph; { expose (this) { speed = kmph; } } } B _'!   +   3333___PPT10i.TUG+D=' = @B +"O ` (    l ?6Slide Number Placeholder 3   h*   5   x@0e0e ?Rectangle 2  4Z i%Inheriting Class: Additive Invariants& &$ &D   x0e0e ?Rectangle 3` 4Z xpublic class LuxuryCar:Car { int cruiseControlSettings; invariant cruiseControlSettings == -1 || speed == cruiseControlSettings; LuxuryCar() { cruiseControlSettings = -1; } } , Z Zl     `@f?Rectangle 4  QaThe speed attribute of the subclass is mentioned in the the object invariant of the superclass0b Y       3333___PPT10i.T&e+D=' = @B +"P f^ F(    l?6Slide Number Placeholder 3   h*   6   x0e0e ?Rectangle 2  4Z j"Change required in the Base Class # #$ #T   x0e0e ?Rectangle 3 4Z public class Car{ [Additive] protected int speed; invariant 0 <= speed; protected Car() { speed = 0; } & Vu P @&sW  `@f?Rectangle 4 P @ aThe [Additive] annotation is needed as speed is mentioned in the object invariant of LuxuryCarHb  5           333380___PPT10.TTP"Q xp X(    l ?6Slide Number Placeholder 3   h*   +   x0e0e ?Rectangle 2  4Z _Additive Expose  1   x0e0e ?Rectangle 3 4Z e[Additive] public void SetSpeed(int kmph) requires 0<= kmph; ensures speed == kmph; { additive expose (this) { speed = kmph; } }  P  Q4t   ``f?Rectangle 4 @ An additive expose is needed as the SetSpeed method is inherited and so must expose LuxuryCar if called on a LuxuryCar ObjectH U             3333"R ,$  (    l`?6Slide Number Placeholder 3   h*      x0e0e ?Rectangle 2  4Z QVirtual Methods     x0e0e ?Rectangle 3  4Z public class Car{ [Additive] protected int speed; invariant 0 <= speed; protected Car() { speed = 0; } [Additive] virtual public void SetSpeed(int kmph) requires 0 <= kmph; ensures speed == kmph; { additive expose (this) { speed = kmph; } } }< PsV4  333380___PPT10.T"S  (    l?6Slide Number Placeholder 3   h*       x@0e0e ?Rectangle 2  4Z TOverriding Methods  ~   x0e0e ?Rectangle 3` 4Z public class LuxuryCar:Car{ protected int cruiseControlSettings; invariant cruiseControlSettings == -1 || speed == cruiseControlSettings; LuxuryCar() { cruiseControlSettings = -1; } [Additive] override public void SetSpeed(int kmph) //requires 0<= kmph; not allowed in an override ensures cruiseControlSettings == 50 && speed == cruiseControlSettings; { additive expose (this) { cruiseControlSettings = 50; speed = cruiseControlSettings; } } }h P"0P 1  333380___PPT10.TG̿"4  x(  &   x0e0e ?Rectangle 4pP 4Z  Z Aggregates       x0e0e ?Rectangle 5 `   4Z  FRich object structures need specification and verification support simple invariants aggregate objects subclasses additive invariants visibility-based invariants observer invariants static class invariants & XC   PC       333380___PPT10.׉T -%  (    l@?6Slide Number Placeholder 3   h*   &   x`0e0e ?Rectangle 2  4Z Z Aggregates       x0e0e ?Rectangle 3 4Z public class Radio { public int soundBoosterSetting; invariant 0 <= soundBoosterSetting; public bool IsOn() { int[] a = new int[soundBoosterSetting]; bool on = true; // ... compute something using "a", setting "on" appropriately return on; } } R Z ZC8s   3333"U |0 d(    l`?6Slide Number Placeholder 3   h*       x`0e0e ?Rectangle 2  4Z TPeer     x0e0e ?Rectangle 3P  4Z public class Car { int speed; invariant 0 <= speed; [Peer] public Radio! r; public Car() { speed = 0; r = new Radio(); } 8 8P  F?Text Box 4P a Ypublic void SetSpeed(int kmph) requires 0 <= kmph; modifies this.*, r.*; { speed = kmph; if (r.IsOn()) { r.soundBoosterSetting = 2 * kmph; } } } :~0 <Z 4  C  Rf?Text Box 5  ?[Peer] there is only one owner- the owner of the car and radio 2?  ?A?   3333"6V P (    l?6Slide Number Placeholder 3   h*      x0e0e ?Rectangle 2  4Z SRep     x0e0e ?Rectangle 3P  4Z public class Car { int speed; invariant 0 <= speed; [Rep] Radio! r; public Car() { speed = 0; r = new Radio(); } B 8H "  L ?Text Box 4  public void SetSpeed(int kmph) requires 0 <= kmph; modifies this.*; { expose (this) { speed = kmph; if (r.IsOn()) { r.soundBoosterSetting = 2 * kmph; } } } } j~0 <Z Td4  3  Lf?Text Box 5  5[Rep] there is an owner of car and an owner of radio 25  5A5   3333",W ;*3*p ""*(  |B   BUC DEF QfR6UVW̙ff? L 8d p|x4lH0Pg8tDW3 G/  ,}X` U ! @           U Freeform 2 u N   B   b`B4 CIDE8FQ6RUVWLL?IP_d}UB6'5 2 4 @    4 IFreeform 3g  N   B   BCuDEPFQFR&UVWdLL?)&Q.VL@7B ;UeUu @      uFreeform 4+0   N   B   BCDEPFQFR&UVWPLL?SK)#F/(d6*5}cE  @      Freeform 5[mV@  N   c   x_ж_ж ?Rectangle 6@  4Z Ownership domains  8 @ @ @&r    G33  <?AutoShape 7 p N   &r   G33  <?AutoShape 8  N   &r    G33  <?AutoShape 9@  N   (r     G33  <?AutoShape 10   N   (r    @G33  <?AutoShape 11   N   (r    `G33  <?AutoShape 12P  N   (r    G33  <?AutoShape 13@ P N   (r   G33  <?AutoShape 14   N   (r   G33  <?AutoShape 15`  N   B @ X333$?Line 16@_B  X333$?Line 17 B @ X333$?Line 18@Q B  X333$?Line 19 P B  X333$?Line 20 @B @ X333$?Line 21? B  X333$?Line 220 pB  X333$?Line 23@0B  X333$?Line 24 B   JBbCDE(FQ&RUVW? B8nt /i].b@   bFreeform 25@^ N   B   JBCDE(FQ&RUVW? %etv NV+9Y@   Freeform 26SyJ  N   B   J@BC(DE(FQ&RUVW? ( g-NswH@   (Freeform 27  N   B   JBCDE(FQ&RUVW? ZU6l5VK^@   Freeform 28 8  N   B   0BCDEFQRUVW?DEC@  Freeform 29+  N   B   0@%BCsDEFQRUVW?s-F8Pf`+@  sFreeform 3000 N   B   0BCDEFQRUVW?jgL@  Freeform 31q.a N   "   b ff?AutoShape 32  0 N   H ! f@_ж_ж?Text Box 33  Points to owner (> Lg$ @ @ @ @B "  J`BC DE(FQ&RUVW? -{ERX>*N @    Freeform 34 Y  N    3333ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++"^DX p;h; &&P;(  |B   BUC DEF QfR6UVW̙ff? L 8d p|x4lH0Pg8tDW3 G/  ,}X` U ! @           U Freeform 2 u N   B   b@B4 CIDE8FQ6RUVWLL?IP_d}UB6'5 2 4 @    4 IFreeform 3g  N   B   BCuDEPFQFR&UVWdLL?)&Q.VL@7B ;UeUu @      uFreeform 4+0   N   B   BCDEPFQFR&UVWPLL?SK)#F/(d6*5}cE  @      Freeform 5[mV@  N   &r   @G33  <?AutoShape 6 p N   &r    G33  <?AutoShape 7  N   &r   G33  <?AutoShape 8@  N   &r    G33  <?AutoShape 9   N   (r    G33  <?AutoShape 10   N   (r    @G33  <?AutoShape 11P  N   (r    `G33  <?AutoShape 12@ P N   (r    G33  <?AutoShape 13   N   (r   @G33  <?AutoShape 14`  N   B @ X333$?Line 15@_B  X333$?Line 16 B @ X333$?Line 17@Q B  X333$?Line 18 P B  X333$?Line 19 @B @ X333$?Line 20? B  X333$?Line 210 pB  X333$?Line 22@0B  X333$?Line 23 B   JBbCDE(FQ&RUVW? B8nt /i].b@   bFreeform 24@^ N   B   J@BCDE(FQ&RUVW? %etv NV+9Y@   Freeform 25SyJ  N   B   JBC(DE(FQ&RUVW? ( g-NswH@   (Freeform 26  N   B   J@BCDE(FQ&RUVW? ZU6l5VK^@   Freeform 27 8  N   B   0`BCDEFQRUVW?DEC@  Freeform 28+  N   B   0BCsDEFQRUVW?s-F8Pf`+@  sFreeform 2900 N   B   0BCDEFQRUVW?jgL@  Freeform 30q.a N   "  bff?AutoShape 31  0 N   H   f _ж_ж?Text Box 32  Points to owner (> Lg$ @ @ @ @B !  J@BC DE(FQ&RUVW? -{ERX>*N @    Freeform 33 Y  N   ?2 "  p`_ж_жf3?Oval 34 I C x$>& @ @ @ @*2 #  p_ж_жf3?Oval 35"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!}'drs/downrev.xmlDOO1G&~fLiးRAPĿuwA7yɬ8Sw}\M n "&tkHÅ"̦W̌oݖλT2&2%Y}ߐcvb3lYnk9Tj$-VJlhQR~}Yoh:mַ7D.?/fu8_իᖁzP{Ǘgc 9PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!}'drs/downrev.xmlPK0   y$>& @ @ @ @)2 $  p_ж_жf3?Oval 36"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!:0drs/downrev.xmlDMO0 @HH\-Y5M[Y6M|iڊ&vz,h=om#b흆H WxSRa8:wDVˋwnK]*K\QCRK,Ƒo1;`1Jiv,̔J t[Qlyyylv5`δ7 <&f?ճᖱ?<>Cm \ȽA.PK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!:0drs/downrev.xmlPK @  z$>& @ @ @ @e %  z@_ж_ж ?Rectangle 38@  4Z Ownership domains  8 @ @ @" &  z@_ж_жf?AutoShape 37"PK![Content_Types].xml|N0 HC+jS8 @:Q۸ ??\o<7p]V޷O(I'6E=, ){Ō4>I)q7UuDހǏ)}nL"Mᴸ&g0eSA)΄2';2 WYu7{ɯΒzŘqFrj9K*(]mOlPK!Z,[ _rels/.relslj0 ``t_Pƈ[>,dgzjǎ?I'f#®Pb-\/Ƿ0Z]nLnp__3.iJV KQBiDžrL,Vʌ/7р4`ANar+m;E/'3U Aںv83/PK!ϣ7 drs/downrev.xmlDQK0FCo.YA1DD:ms$ >\Ym&ӳ9+a>Nuts,D {gI™l֗+̕mAClYؐsjM dk7[4禪WR\,E<+ߩC$/!āPK-![Content_Types].xmlPK-!Z,[ _rels/.relsPK-!ϣ7 drs/downrev.xmlPK  Tx owns y and z y and z are components in the representation of x y and z are peers"U>U"U @ @ @ @ 3333nf___PPT10F.]0G+D' = @B D' = @BA?%,( < +O%,( < +D ' =%(D' =%(D' ='@BBB%()))D' =1:Bvisible*o3>+B#style.visibility<*#%(D' =%(D' ='@BBB%()))D' =1:Bvisible*o3>+B#style.visibility<*$%(D' =%(DN' ='@BB B%()))D' =1:Bvisible*o3>+B#style.visibility<*&%(D' =-g6B fade*<3<*&+".Y ?,7, $$,(  |B   BUC DEF QfR6UVW̙ff? L 8d p|x4lH0Pg8tDW3 G/  ,}X` U ! @           U Freeform 2d u N   B   bB4 CIDE8FQ6RUVWLL?IP_d}UB6'5 2 4 @    4 IFreeform 3  N   B   BCuDEPFQFR&UVWdLL?)&Q.VL@7B ;UeUu @      uFreeform 40   N   B   BCDEPFQFR&UVWPLL?SK)#F/(d6*5}cE  @      Freeform 5mV  N   &r   G  <?AutoShape 6 N   &r   G33  <?AutoShape 7 p N   &r   G33  <?AutoShape 8  N   &r    ` G33  <?AutoShape 9 P  N   (r    `G  <?AutoShape 100   N   (r    G  <?AutoShape 11  N   (r    G  <?AutoShape 12p@  N   (r     G  <?AutoShape 13@  N   (r   G33  <?AutoShape 14@`  N   B @ X333$?Line 15_B  X333$?Line 16Oa B @ X333$?Line 17Q B  X333$?Line 18 P ` B  X333$?Line 19 @!B @ X333$?Line 20`? B  X333$?Line 21`0 B  X333$?Line 220@B  X333$?Line 23 1 B   J BbCDE(FQ&RUVW? B8nt /i].b@   bFreeform 24^P N   B   JBCDE(FQ&RUVW? %etv NV+9Y@   Freeform 25yJ m N   B   J`BC(DE(FQ&RUVW? ( g-NswH@   (Freeform 268 `  N   B   J BCDE(FQ&RUVW? ZU6l5VK^@   Freeform 27E 8  N   B   0@BCDEFQRUVW?DEC@  Freeform 28 `  N   B   0`BCsDEFQRUVW?s-F8Pf`+@  sFreeform 29-0 N   B   0BCDEFQRUVW?jgL@  Freeform 30<q. N   "  bff?AutoShape 31`  p N   c   f_ж_ж?Text Box 32B  +Points to owner Mutable object Valid object(,> L,g$, @ @ @ @ ! b?Rectangle 33F P  N    " b3?Rectangle 34 P k N   B #  J BC DE(FQ&RUVW? -{ERX>*N @    Freeform 35 Y  N   ~ $  z_ж_ж ?Rectangle 36@@{  4Z ( An object is as valid as its components) )$) 8 @ @ @ 3333ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++"|Z  (    l?6Slide Number Placeholder 3   h*   7   x0e0e ?Rectangle 2  4Z kVisibility Based Invariants     x0e0e ?Rectangle 3P  4Z &public class Car { int speed; invariant 0 <= speed; [Peer] Radio! r; public Car() { speed = 0; r = new Radio(); } B 8H8; I "  L`?Text Box 4  public void SetSpeed(int kmph) requires 0 <= kmph; modifies this.*; { expose (this) { speed = kmph; if (r.IsOn()) { r.soundBoosterSetting = 2 * kmph; } } } } j~0 <Z Td4  ,  Lf?Text Box 5  DUsing [Peer] and expose together would give a visibility based errorE EAD   3333"# [  (    l`?6Slide Number Placeholder 3   h*      x 0e0e ?Rectangle 2  4Z SRep     x0e0e ?Rectangle 3P  4Z public class Car { int speed; invariant 0 <= speed; [Rep] Radio! r; public Car() { speed = 0; r = new Radio(); } B 8H "  L?Text Box 4  public void SetSpeed(int kmph) requires 0 <= kmph; modifies this.*; { expose (this) { speed = kmph; if (r.IsOn()) { r.soundBoosterSetting = 2 * kmph; } } } } j~0 <Z Td4    F`?Text Box 5   T 2  N  Lf?Text Box 6  \Making radio [Rep] makes Radio peer valid Need the expose block to make it peer consistent.&] \A\   3333": \    (    l?6Slide Number Placeholder 3   h*      x`0e0e ?Rectangle 2  4Z SRep     x@0e0e ?Rectangle 3P  4Z public class Car { int speed; invariant 0 <= speed; [Rep] Radio! r; public Car() { speed = 0; r = new Radio(); } B 8H "  L?Text Box 4  public void SetSpeed(int kmph) requires 0 <= kmph; modifies this.*; { expose (this) { speed = kmph; if (r.IsOn()) { r.soundBoosterSetting = 2 * kmph; } } } } j~0 <Z Td4    F?Text Box 5   T 2  N  Lf?Text Box 6  \Making radio [Rep] makes Radio peer valid Need the expose block to make it peer consistent.&] \A\    L?Text Box 7P  Why ever use Rep? >~( <~ <   3333" ] D < 0 $ (    l`?6Slide Number Placeholder 3   h*      x0e0e ?Rectangle 2  4Z SRep     x0e0e ?Rectangle 3P  4Z public class Car { int speed; invariant 0 <= speed; [Rep] Radio! r; public Car() { speed = 0; r = new Radio(); } B 8H "  L A?Text Box 4  public void SetSpeed(int kmph) requires 0 <= kmph; modifies this.*; { expose (this) { speed = kmph; if (r.IsOn()) { r.soundBoosterSetting = 2 * kmph; } } } } j~0 <Z Td4    F@B?Text Box 5   T 2  N  L`Cf?Text Box 6  \Making radio [Rep] makes Radio peer valid Need the expose block to make it peer consistent.&] \A\    L D?Text Box 7P  Why ever use Rep? >~( <~ <  b   LEf?Text Box 8 p`  We gain Information Hiding, e.g. if we add an invariant to Car with reference to radio components we get a visibility based error  ~ 7   3333"E ^D k c PK (    ``F?AutoShape 7p p  N     ``I?AutoShape 8  N   m   xI_ж_ж ?Rectangle 4@  4Z Representation (rep) fields  8 @ @ @"  rJ_ж_ж ?AutoShape 5 @ FTo.Consistent o.owner.mutable o.validx+> `g g g g g + @ @ @ @   x _ж_ж ?Rectangle 6pps 4Z class Seat { public void Move(int pos) requires this.Consistent; & } class Car { [Rep] Seat s; public void Adjust(Profile p) requires this.Consistent p.Consistent; { expose (this) { s.Move(p.SeatPosition); } }% 1+G 6  R  RRk 3333ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++"_C p (    f@ff?Rectangle 5  N     b@?AutoShape 11   N     b`?AutoShape 10 p N     ` ?AutoShape 9 @ N      x_ж_ж ?Rectangle 8 C 4Z Rclass Seat { public void Move(int pos) requires this.PeerConsistent; & } class Car { rep Seat s; peer Seat s; public void Adjust(Profile p) public void Adjust(Position p) requires this.PeerConsistent requires this.PeerConsistent p.PeerConsistent; p.PeerConsistent; { { expose (this) { s.Move(p.SeatPosition); s.Move(p.SeatPosition); } } }% U gG G6< 6  R  RRko   x_ж_ж ?Rectangle 4@  4Z Peer fields and peer validity  8 @ @ @"  r_ж_ж ?AutoShape 6 @ FTo.Consistent o.owner.mutable o.validx+> `g g g g g + @ @ @ @:"   r`_ж_ж ?AutoShape 7p\TL___PPT9.&@ 4o.PeerConsistent o.owner.mutable ("p " p.owner = o.owner p.valid) V> `g g g g g g g g g g g *T  @ @ @ @ 3333ZR___PPT102.]0G+D' = @B D' = @BA?%,( < +O%,( < ++"` {(    lp?6Slide Number Placeholder 3   h*   '   xq0e0e ?Rectangle 2  4Z [ [Rep] locks       xs0e0e ?Rectangle 3 4Z +public class Car { int speed; invariant 0 <= speed; [Rep] public Radio! r; invariant r.soundBoosterSetting == 2 * speed; [Rep] bool[]! locks; invariant locks.Length == 4;4   3333"a skS(    lt?6Slide Number Placeholder 3   h*   /   xu0e0e ?Rectangle 2  4Z cCapture Rep objects     xv0e0e ?Rectangle 3 4Z  public Car([Captured] bool[]! initialLocks) requires initialLocks.Length == 4; { speed = 0; r = new Radio(); locks = initialLocks; }0 ,m 3333"b ldL(    lw?6Slide Number Placeholder 3   h*   4   xy0e0e ?Rectangle 2  4Z hModifies clause expanded     x z0e0e ?Rectangle 30P` 4Z public void SetSpeed(int kmph) requires 0 <= kmph; modifies this.*, r.*, locks[*]; { expose (this) { if (kmph > 0) { locks[0] = true; } speed = kmph; r.soundBoosterSetting = 2 * kmph; } } }  Z Z7$K)L"  3333"c v(    lz?6Slide Number Placeholder 3   h*   !   x`|0e0e ?Rectangle 2  4Z UPeer      x}0e0e ?Rectangle 3 4Z ,public class Car { int speed; invariant 0 <= speed; [Rep] public Radio! r; invariant r.soundBoosterSetting == 2 * speed; [Peer] bool[]! locks; invariant locks.Length == 4;4   3333"x d     (    l`?6Slide Number Placeholder 3   h*     `@?AutoShape 6P @@  N     ``?AutoShape 5`P N     `?Rectangle 4P  N   1   x0e0e ?Rectangle 2  4Z e[Captured] and [Peer]  )   x0e0e ?Rectangle 3`0 4Z ]y[Captured] public Car(bool[]! initialLocks) requires initialLocks.Length == 4; ensures Owner.Same(this, initialLocks); { speed = 0; r = new Radio(); Owner.AssignSame(this, initialLocks); locks = initialLocks; } The constructor has the [Captured] attribute, indicating that the constructor assigns the owner of the object being constructed. ~w Z Z GCB    LM?Text Box 7&z  Set the owner manually   B   \>?Line 8pp   3333"  0(    l?6Slide Number Placeholder 3   h*     `?Rectangle 40   N   2   xL0e0e ?Rectangle 2  4Z fManual Loop Invariants     x0e0e ?Rectangle 30@` 4Z public void SetSpeed(int kmph) requires 0 <= kmph; modifies this.*, locks[*]; { expose (this) { if (kmph > 0) { bool[] prevLocks = locks; for (int i = 0; i < 4; i++) invariant locks == prevLocks && locks.Length == 4; { locks[i] = true; } } speed = kmph; r.soundBoosterSetting = 2 * kmph; } } , P P B  \Ԕ?Line 5 0   L`?Text Box 6 6Manual Loop invariant to satisfy the modifies clause7 76   333380___PPT10."0z"e @(    l?6Slide Number Placeholder 3   h*      x 0e0e ?Rectangle 2  4Z RModifies clauses  $   x@0e0e ?Rectangle 3 4Z XIn our example when the Radio r is annotated as rep, the method setSpeed does not need to specify modifies r.* This is a private implementation detail so the client doesn t need to see it Expert level!!! Option on switches  1,5 and 6 Bp P~ oN. P 3333" {s`[(     p0e0e ?Title 1  4Z 7Using Collections    0e0e ?,Content Placeholder 2P 4Z public class Car { [Rep] [ElementsPeer] List! spares = new List(); public void AddPart() { expose (this) { Part p = new Part(); Owner.AssignSame(p, Owner.ElementProxy(spares)); spares.Add(p); } } 6b     0e0e ?,Content Placeholder 4P  4Z 6 public void UsePart() modifies this.**; { if (spares.Count != 0) { Part p = spares[0]; p.M(); } } } N   l?6Slide Number Placeholder 3   h*    333380___PPT10.50wv"f px(     x0e0e ?Rectangle 2pP 4Z  N Pure Methods      x0e0e ?Rectangle 3 `   4Z  R    3333"g (    l?6Slide Number Placeholder 3   h*      x0e0e ?Rectangle 2  4Z R Pure Methods    5   x0e0e ?Rectangle 3 4Z ipublic class Car { int speed; invariant r.IsOn ==> 0 <= speed; [Peer] Radio! r; public Car() { speed = 0; r = new Radio(); } B CHp,     = ^  `?AutoShape 6p 0  hError as we are not allowed to use the method IsOn in the specification as it may cause side effects.i ih  B  \>?Line 8 p  3333"vh (    l?6Slide Number Placeholder 3   h*   &   x0e0e ?Rectangle 2  4Z Z Pure Methods   s   x0e0e ?Rectangle 3` 4Z oIf you want to call a method in a specification, then the method called must be pure This means it has no effect on the state of objects allocated at the time the method is called Pure methods must be annotated with [Pure], possibly in conjunction with: [Pure][Reads(ReadsAttribute.Reads.Everything)] methods may read anything [Pure][Reads(ReadsAttribute.Reads.Owned)] (same as just [Pure]) methods can only read the state of the receiver object and its (transitive) representation objects [Pure][Reads(ReadsAttribute.Reads.Nothing)] methods do not read any mutable part of the heap. Property getters are [Pure] by default   J '  PG/*e,2G  p 3333"i (    l?6Slide Number Placeholder 3   h*   (   x 0e0e ?Rectangle 2  4Z \ Pure methods       x@0e0e ?Rectangle 3 4Z 0.public class Radio { public int soundBoosterSetting; invariant 0 <= soundBoosterSetting; [Pure] public bool IsOn() { & return on; } } 6 Z Z`       3333"j  (    l ?6Slide Number Placeholder 3   h*   2   x0e0e ?Rectangle 2  4Z fUsing Pure Methods&   q   x0e0e ?Rectangle 3P 4Z /Declare the pure method within the class definition e.g. [Pure] public static bool Even(int x) ensures result == (x % 2 == 0); { return x % 2 == 0; } Declare the class attributes e.g. [SpecPublic] int[]! a = new int[100]; Specify and implement a method that uses the pure method9 r # ) 9 9q#)9:("# : 3333" k l d  L (    l ?6Slide Number Placeholder 3   h*     `f?Rectangle 20  N     `f?Rectangle 3 N   2   x0e0e ?Rectangle 4  4Z fUsing Pure Methods&      x 0e0e ?Rectangle 5pP 4Z 2public int SumEven() ensures result == sum{int i in (0: a.Length), Even(a[i]); a[i]}; { int s = 0; for (int n = 0; n < a.Length; n++) invariant n <= a.Length; invariant s == sum{int i in (0: n) , Even(a[i]); a[i]}; { if (Even(a[i])) s += a[n]; } return s; }3 Z3)"B @ \>?Line 6 ` @B  \>?Line 70 @   L?Text Box 80 0 mPure method calls    3333"m  0(    l@?6Slide Number Placeholder 3   h*   <   x 0e0e ?Rectangle 2  4Z p Expert comment &   T   x@0e0e ?Rectangle 3 4Z F RecursionTermination ResultNotNewlyAllocated NoReferenceComparisonsG G G 3333"l D<@$(    l?6Slide Number Placeholder 3   h*      x0e0e ?Rectangle 2  4Z M Conclusions      x0e0e ?Rectangle 300` 4Z  The main contributions of the Spec# programming system are: a contract extension to the C# language a sound programming methodology that permits specification and reasoning about object invariants even in the presence of callbacks (see Verification of object-oriented programs with invariants. Mike Barnett, Rob DeLine, Manuel Fhndrich, K. Rustan M. Leino, and Wolfram Schulte. JOT 3(6), 2004 and Object invariants in dynamic contexts. K. Rustan M. Leino and Peter Mller. In ECOOP 2004, LNCS vol. 3086, Springer, 2004 and Class-local invariants. K. Rustan M. Leino and Angela Wallenburg, ISEC 2008. IEEE.) tools that enforce the methodology, ranging from easily usable dynamic checking to high-assurance automatic static verification =     =CCC{CTC  3333" m   `x (    l ?6Slide Number Placeholder 3   h*   &   x0e0e ?Rectangle 2  4Z ZReferences and Resources     x`0e0e ?Rectangle 3 4Z )SSpec# website http://research.microsoft.com/specsharp/ The Spec# programming system: An overview. Mike Barnett, K. Rustan M. Leino, and Wolfram Schulte. In CASSIS 2004, LNCS vol. 3362, Springer, 2004. Boogie: A Modular Reusable Verifier for Object-Oriented Programs. Mike Barnett, Bor-Yuh Evan Chang, Robert DeLine, Bart Jacobs, and K. Rustan M. Leino. In FMCO 2005, LNCS vol. 4111, Springer, 2006. Automatic verification of textbook programs that use comprehensions. K. Rustan M. Leino and Rosemary Monahan. In Formal Techniques for Java-like Programs, ECOOP Workshop (FTfJP'07: July 2007, Berlin, Germany), 2007. The Spec# programming system: An overview. In FM 2005 Tutorial given by Bart Jacobs, K.U.Leuven, Belgium. Spec# wiki http://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePage Spec# examples http://www.cs.nuim.ie/~rosemary/ 7  y   ),"=& &"&B"Z& &#&D"-&(&?&*"&( & & >!"  F(= "6"!"1Q 3333" OG/(    l y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~0y˼y˼ ?Rectangle 39 f  4Z T    ̙33 ME-(    l@y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~`3y˼y˼ ?Rectangle 39 f  4Z R    ̙33 (    l 1y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~4y˼y˼ ?Rectangle 39 f  4Z ^Make it easier to record detailed design decisions Provide tools to enforce these decisions Help prevent and detect bugs Reduce cost of software lifecycle A unique feature of the Spec# programming system is its guarantee of maintaining invariants in object-oriented programs in the presence of callbacks, threads, and inter-object relationships. "_ ^ f _  ̙33 WO 7(    l6y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z"   ~9y˼y˼ ?Rectangle 39 f  4Z \Eiffel    ̙33T ME@ -(      l:y˼y˼?Rectangle 2055r3   n* C  a    r0e0e ?Rectangle 2   4Z    ~<y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ME`$-(  $ $ l=y˼y˼?Rectangle 2055r3   n* C  a $  r0e0e ?Rectangle 2   4Z $  ~?y˼y˼ ?Rectangle 39 f  4Z R    ̙33U ME(-(  ( ( lAy˼y˼?Rectangle 2055r3   n* C  a (  r0e0e ?Rectangle 2   4Z (  ~Cy˼y˼ ?Rectangle 39 f  4Z R    ̙33W ,(  , , lDy˼y˼?Rectangle 2055r3   n* C  a ,  r0e0e ?Rectangle 2   4Z ,  ~Ey˼y˼ ?Rectangle 39 f  4Z | Tip: adding Console.Read(); to the end of your program requires that the user presses a key before the screen disappears. } p  }  ̙3380___PPT10.VLv y0a(  0 0 lGy˼y˼?Rectangle 2055r3   n* C  a 0  r0e0e ?Rectangle 2   4ZL 0  ~Iy˼y˼ ?Rectangle 39 f  4Z "How do I run it from the cmd line?# #"   ̙33 ME4-(  4 4 l@Ky˼y˼?Rectangle 2055r3   n* C  a 4  r0e0e ?Rectangle 2   4Z 4  ~`Ly˼y˼ ?Rectangle 39 f  4Z R    ̙33 8i(  8 8 l@Ny˼y˼?Rectangle 2055r3   n* C  a 8 3 0e0e ?Rectangle 2   4Z< 8 s `Oy˼y˼  ?Rectangle 39 f  4Z R    ̙33  <i(  < < l y˼y˼?Rectangle 2055r3   n* C  a < 3 0e0e ?Rectangle 2   4Z< < s  y˼y˼  ?Rectangle 39 f  4Z R    ̙33[ @@(  @ @ l y˼y˼?Rectangle 2055r3   n* C  a @  r0e0e ?Rectangle 2   4Z @  ~ y˼y˼ ?Rectangle 39 f  4Z PrintArgs.ssc & WriteLine doesn t require the argument to be non nullF F F  ̙3380___PPT10.T5 ME`D-(  D D l y˼y˼?Rectangle 2055r3   n* C  a D  r0e0e ?Rectangle 2   4Z D  ~@y˼y˼ ?Rectangle 39 f  4Z R    ̙33SR H(  H H l`y˼y˼?Rectangle 2055r3   n* C  a H  r0e0e ?Rectangle 2   4Z H  ~`y˼y˼ ?Rectangle 39 f  4Z PrintArgs.ssc May want to do Delayed types later in an example& B B B  ̙3380___PPT10.T5 MEL-(  L L ly˼y˼?Rectangle 2055r3   n* C  a L  r0e0e ?Rectangle 2   4Z L  ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33 MEP-(  P P ly˼y˼?Rectangle 2055r3   n* C  a P  r0e0e ?Rectangle 2   4Z P  ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33} ME0T-(  T T ly˼y˼?Rectangle 2055r3   n* C  a T  r0e0e ?Rectangle 2   4Z T  ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33 MEpX-(  X X ly˼y˼?Rectangle 2055r3   n* C  a X  r0e0e ?Rectangle 2   4Z X  ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ME\-(  \ \ ly˼y˼?Rectangle 2055r3   n* C  a \  r0e0e ?Rectangle 2   4Z \  ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33 `(  ` ` l@ y˼y˼?Rectangle 2055r3   n* C  a `  r0e0e ?Rectangle 2   4Zm `  ~ y˼y˼ ?Rectangle 39 f  4Z QBound on x and y is unnecessary but added to give an example of a requires clauseR R R  ̙33 MEd-(  d d l y˼y˼?Rectangle 2055r3   n* C  a d  r0e0e ?Rectangle 2   4Z d  ~ y˼y˼ ?Rectangle 39 f  4Z R    ̙33C_ h(  h h l`y˼y˼?Rectangle 2055r3   n* C  a h 3 0e0e ?Rectangle 2   4Z h s @sعsع ?Rectangle 39 f  4Z vThe verifier is run like the compiler---either from the IDE or the command line. In either case, this involves just pushing a button, waiting, and then getting a list of compilation/verification error messages. sound modular verification focus on automation, not full functional correctness specifications no termination verification no verification of temporal properties w w w  ̙33 ME l-(  l l ly˼y˼?Rectangle 2055r3   n* C  a l  r0e0e ?Rectangle 2   4Z l  ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33z ME@p-(  p p ly˼y˼?Rectangle 2055r3   n* C  a p  r0e0e ?Rectangle 2   4Z p  ~@y˼y˼ ?Rectangle 39 f  4Z R    ̙33{ ME`t-(  t t l@y˼y˼?Rectangle 2055r3   n* C  a t  r0e0e ?Rectangle 2   4Z t  ~`y˼y˼ ?Rectangle 39 f  4Z R    ̙33 xt(  x x ly˼y˼?Rectangle 2055r3   n* C  a x  r0e0e ?Rectangle 2   4Z_ x  ~y˼y˼ ?Rectangle 39 f  4Z #Fix = = > in ensures in cs603 notes&$ #   ̙33 ME|-(  | | l`y˼y˼?Rectangle 2055r3   n* C  a |  r0e0e ?Rectangle 2   4Z |  ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33X s(    ly˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z^   ~y˼y˼ ?Rectangle 39 f  4Z Bk is a bound variable of some type K, E is an enumerable expression that generates values of type K, the boolean expression F is a filter that further restricts the values of k under consideration (if omitted, F defaults to true), and the integer (or for Count, boolean) expression T is the term of the comprehension. The bound variable k can occur free in F and T, but not in E. Sum, product, max, min, count, & .     ̙33~ s(    ly˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z^   ~@y˼y˼ ?Rectangle 39 f  4Z Bk is a bound variable of some type K, E is an enumerable expression that generates values of type K, the boolean expression F is a filter that further restricts the values of k under consideration (if omitted, F defaults to true), and the integer (or for Count, boolean) expression T is the term of the comprehension. The bound variable k can occur free in F and T, but not in E. Sum, product, max, min, count, & .     ̙33q 0(    ly˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~ y˼y˼ ?Rectangle 39 f  4Z Verify & IDE / CMD Note no need for 0<=n  it will be figured out by the systemQ Q Q  ̙3380___PPT10. W@q P(    ly˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~``y˼y˼ ?Rectangle 39 f  4Z Verify & IDE / CMD Note no need for 0<=n  it will be figured out by the systemQ Q Q  ̙3380___PPT10. W@q p(    l@by˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~`cy˼y˼ ?Rectangle 39 f  4Z Verify & IDE / CMD Note no need for 0<=n  it will be figured out by the systemQ Q Q  ̙3380___PPT10. W@ s(    ldy˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z^   ~fy˼y˼ ?Rectangle 39 f  4Z Bk is a bound variable of some type K, E is an enumerable expression that generates values of type K, the boolean expression F is a filter that further restricts the values of k under consideration (if omitted, F defaults to true), and the integer (or for Count, boolean) expression T is the term of the comprehension. The bound variable k can occur free in F and T, but not in E. Sum, product, max, min, count, & .     ̙33 ME-(    l@hy˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~`iy˼y˼ ?Rectangle 39 f  4Z R    ̙33 (    ljy˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z  s lsعsع ?Rectangle 39 f  4Z Bk is a bound variable of some type K, E is an enumerable expression that generates values of type K, the boolean expression F is a filter that further restricts the values of k under consideration (if omitted, F defaults to true), and the integer (or for Count, boolean) expression T is the term of the comprehension. The bound variable k can occur free in F and T, but not in E. Sum, product, max, min, count, & .     ̙33 ME-(    l@ny˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~`oy˼y˼ ?Rectangle 39 f  4Z R    ̙33| ME-(    lqy˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~ y˼y˼ ?Rectangle 39 f  4Z R    ̙33Y rj0R(    lty˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z=   ~uy˼y˼ ?Rectangle 39 f  4Z w!Must check all paths through loop" " "  ̙3380___PPT10. WKZ MEP-(    lwy˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~yy˼y˼ ?Rectangle 39 f  4Z R    ̙33) MEp-(    lzy˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~|y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ME-(    l}y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33a i(    l y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s @ sعsع  ?Rectangle 39 f  4Z R    ̙33 i(    l y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s @ sعsع  ?Rectangle 39 f  4Z R    ̙33 i(    l y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s @ sعsع  ?Rectangle 39 f  4Z R    ̙33 (    liy˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z  s @ sعsع ?Rectangle 39 f  4Z LStep by step  constructing invariants' ' '  ̙33= 0(    l` y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z  s  sعsع ?Rectangle 39 f  4Z Changed this to a while loop  if it s a for loop we cant write assert j - n < vf; in the correct place i.e. after n++; 4y @ 1 j@'  ̙33 MEP-(    l@ y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~ A y˼y˼ ?Rectangle 39 f  4Z R    ̙33 pi(    lC y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s  D sعsع  ?Rectangle 39 f  4Z R    ̙33 i(    lF y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s  G sعsع  ?Rectangle 39 f  4Z R    ̙33 i(    lI y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s  J sعsع  ?Rectangle 39 f  4Z R    ̙33 i(    lL y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s  M sعsع  ?Rectangle 39 f  4Z R    ̙33 i(    lO y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s `P sعsع  ?Rectangle 39 f  4Z R    ̙33 ME -(    l@R y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~ y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ME0 -(    l@U y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~`V y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ` i(    l@X y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s `Y sعsع  ?Rectangle 39 f  4Z R    ̙33  i(    l@[ y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s `\ sعsع  ?Rectangle 39 f  4Z R    ̙33  u(    l@^ y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 1026   4ZB  s `_ sعsع  ?Rectangle 10279 f  4Z R    ̙33Z ME -(    l! y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~" y˼y˼ ?Rectangle 39 f  4Z R    ̙33 me M(    l$ y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z8   ~% y˼y˼ ?Rectangle 39 f  4Z rDouble quantification in requires clause  note that we bind I first and then bind j. Could have chosen other ways to write the postcondition.    ̙33 aY A(    l' y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z,   ~( y˼y˼ ?Rectangle 39 f  4Z fBinarySearch.ssc    ̙3380___PPT10.Tb jb J(    l# y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z5   ~* y˼y˼ ?Rectangle 39 f  4Z o1Note with double quantifier on forall forall {int j in (0: a.Length), int i in (0: j); a[i] <= a[j]}; // what we have forall {int i in (0: a.Length), int j in (0: a.Length); a[i] <= a[j]}; //an alternative forall {int i in (0: a.Length), int j in (0: a.Length), i <= j; a[i] <= a[j]}; //an alternative 1 P U " 5 " 6 *  U5G  ̙3380___PPT10.TP u ME@ -(    l- y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~. y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ME`  -(      l y˼y˼?Rectangle 2055r3   n* C  a    r0e0e ?Rectangle 2   4Z    ~! y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ME -(    l# y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~$ y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ME -(    l& y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~' y˼y˼ ?Rectangle 39 f  4Z R    ̙33- ME -(    l) y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~* y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ME -(    l, y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~- y˼y˼ ?Rectangle 39 f  4Z R    ̙33 YQ  9(      l0 y˼y˼?Rectangle 2055r3   n* C  a    x0e0e ?Rectangle 1026   4Z     1 y˼y˼ ?Rectangle 10279 f  4Z R    ̙33^ IA $)(  $ $ l3 y˼y˼?Rectangle 2055r3   n* C  a $  r0e0e ?Rectangle 2   4Z $  ~`) y˼y˼ ?Rectangle 39 f  4Z N    ̙3380___PPT10.WӮm ME@ (-(  ( ( l6 y˼y˼?Rectangle 2055r3   n* C  a (  r0e0e ?Rectangle 2   4Z (  ~ 7 y˼y˼ ?Rectangle 39 f  4Z R    ̙33_ _W` ,?(  , , l9 y˼y˼?Rectangle 2055r3   n* C  a ,  r0e0e ?Rectangle 2   4Z* ,  ~ : y˼y˼ ?Rectangle 39 f  4Z dSee class1.ssc    ̙3380___PPT10.WӮm  0+(  0 0 l< y˼y˼?Rectangle 2055r3   n* C  a 0  r0e0e ?Rectangle 2   4Z 0  ~= y˼y˼ ?Rectangle 39 3  4Z P  6 0 S  ? ̙33  4+(  4 4 l y˼y˼?Rectangle 2055r3   n* C  a 4  r0e0e ?Rectangle 2   4Z 4  ~!y˼y˼ ?Rectangle 39 3  4Z P  6 4 S  ? ̙33 { 8c(  8 8 l#y˼y˼?Rectangle 2055r3   n* C  a 8  r0e0e ?Rectangle 2   4ZN 8  ~$y˼y˼ ?Rectangle 39 f  4Z  x.f = E;  &     ̙3380___PPT10.މPUC IA <)(  < < l&y˼y˼?Rectangle 2055r3   n* C  a <  r0e0e ?Rectangle 2   4Z <  ~'y˼y˼ ?Rectangle 39 f  4Z N    ̙3380___PPT10.WӮm [S @;(  @ @ l)y˼y˼?Rectangle 2055r3   n* C  a @  r0e0e ?Rectangle 2   4Z& @  ~*y˼y˼ ?Rectangle 39 f  4Z ` Count2.ssc     ̙3380___PPT10.WӮmI ME0 D-(  D D l -y˼y˼?Rectangle 2055r3   n* C  a D  r0e0e ?Rectangle 2   4Z D  ~@.y˼y˼ ?Rectangle 39 f  4Z R    ̙33 P Hi(  H H l`y˼y˼?Rectangle 2055r3   n* C  a H 3 0e0e ?Rectangle 2   4Z< H s y˼y˼  ?Rectangle 39 f  4Z R    ̙33 p Li(  L L l`y˼y˼?Rectangle 2055r3   n* C  a L 3 0e0e ?Rectangle 2   4Z< L s y˼y˼  ?Rectangle 39 f  4Z R    ̙33  Pi(  P P l`y˼y˼?Rectangle 2055r3   n* C  a P 3 0e0e ?Rectangle 2   4Z< P s y˼y˼  ?Rectangle 39 f  4Z R    ̙33  Ti(  T T l`y˼y˼?Rectangle 2055r3   n* C  a T 3 0e0e ?Rectangle 2   4Z< T s y˼y˼  ?Rectangle 39 f  4Z R    ̙33  Xi(  X X l`y˼y˼?Rectangle 2055r3   n* C  a X 3 0e0e ?Rectangle 2   4Z< X s y˼y˼  ?Rectangle 39 f  4Z R    ̙33  \i(  \ \ l`y˼y˼?Rectangle 2055r3   n* C  a \ 3 0e0e ?Rectangle 2   4Z< \ s y˼y˼  ?Rectangle 39 f  4Z R    ̙33 } `e(  ` ` ly˼y˼?Rectangle 2055r3   n* C  a ` 3 0e0e ?Rectangle 2   4Z8 ` s y˼y˼  ?Rectangle 39 f  4Z N    ̙33 {s@ d[(  d d ly˼y˼?Rectangle 2055r3   n* C  a d 3 0e0e ?Rectangle 2   4Z. d s y˼y˼ ?Rectangle 39 f  4Z D1. Gives an error even when Peer & leave expose statement  Error not peer consistent and we have exposed the car implementation details. Radio is no longer consistent as its peer (car) has been opened up. 2. Remove expose  now we can see the frame condition error on SetSpeed  need to put in a modifies r.* (otherwise could make it public???) 0[ P [&Z   ̙33 ` hi(  h h ly˼y˼?Rectangle 2055r3   n* C  a h 3 0e0e ?Rectangle 2   4Z< h s  y˼y˼  ?Rectangle 39 f  4Z R    ̙33  l+(  l l l` y˼y˼?Rectangle 2055r3   n* C  a l  r0e0e ?Rectangle 2   4Z l  ~ y˼y˼ ?Rectangle 39 3  4Z P  6 l S  ? ̙33  p+(  p p l`y˼y˼?Rectangle 2055r3   n* C  a p  r0e0e ?Rectangle 2   4Z p  ~y˼y˼ ?Rectangle 39 3  4Z P  6 p S  ? ̙33  t+(  t t l y˼y˼?Rectangle 2055r3   n* C  a t  r0e0e ?Rectangle 2   4Z t  ~@y˼y˼ ?Rectangle 39 3  4Z P  6 t S  ? ̙33  x(  x x ly˼y˼?Rectangle 2055r3   n* C  a x 3 0e0e ?Rectangle 2   4Zh x s  y˼y˼ ?Rectangle 39 f  4Z ~This gives an error  visibility based invariants [Dependent [typeof(Car)]//sound booster setting is allowed to be used in the invariant of car ECOOP 2004 paper KRML and PM Compiler now happy but Boogie complains as we haven t unpacked all cars (there could be hundreds of Car objects that are trying to use the radio as they are Peer) (This implementation will probably change to only force an unpack if you are sure that you will not break the invariant  as in Naumann (& Barnett) paper ) 4 @ 03|B   ̙33 |i(  | | ly˼y˼?Rectangle 2055r3   n* C  a | 3 0e0e ?Rectangle 2   4Z< | s @y˼y˼  ?Rectangle 39 f  4Z R    ̙33  i(    l y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s y˼y˼  ?Rectangle 39 f  4Z R    ̙33 @i(    ly˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s  y˼y˼  ?Rectangle 39 f  4Z R    ̙33 `+(    ly˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~y˼y˼ ?Rectangle 39 3  4Z P  6  S  ? ̙33 +(    ly˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~y˼y˼ ?Rectangle 39 3  4Z P  6  S  ? ̙33 i(    ly˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s y˼y˼  ?Rectangle 39 f  4Z R    ̙33E (    ly˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z  s y˼y˼ ?Rectangle 39 f  4Zzr___PPT9TL LdNote  when the rep/peer field is assigned we automatically change the ownership Cant take ownership of initial locks as some one else might own it so we need to capture it 0. Need to know that it wasn t owned before 1. We are going to claim it Captured gives us both 0 and 1. Captured can get trickier  sometime we need to capture the receiver& e.g. if there is a peer field capture will have the effect of changing the owner.   "   "       ̙33 i(    l`y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s y˼y˼  ?Rectangle 39 f  4Z R    ̙33} =5(    ly˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z  s  y˼y˼ ?Rectangle 39 f  4Z Now lets make the locks peer Make the car constructor captured  capturing the receiver  I.e. the car object that is being created (capture what is least likely to be owned i.e. a car that is only being created)     ̙33 aY A(    l y˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z  s @y˼y˼ ?Rectangle 39 f  4Z *Still get an error message. Trying to set the owner of the rhs  might already have an owner. We must set this manually  Owner.AssignSame(this , initLocks) Also add the post ensures Owner.AssignSame(this , initLocks)     ̙33u Pg(    l y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4ZR   ~y˼y˼ ?Rectangle 39 f  4Z 6Remove the spares from this example& Boogie /help 1. nothing by default 5. this.* by default 6. p.* by default for all parameters Do e.g where we needed a loop in the set speed method with locks. 3 errors  lost info about what lock is Can say that lock.length = = 4  this is all we need as a loop invariant Needed in this example as the loop changes fewer things than the modifies clause allows. Also as we re inside an expose statement => it hurts. If it were a rep and we were not inside a expose block then it should be OK.     ̙33 ME-(    ly˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ME-(    ly˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33 (    l`y˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~y˼y˼ ?Rectangle 39 f  4Z @Uncomment IsOn Get an error on the invariant Change invariant IsOn & Not allowed. Make IsOn Confined OR Make IsOn a property getter  automatically confined. HT L  CL   ̙33  I A ) (    ly˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z  s y˼y˼ ?Rectangle 39 f  4Z public class Radio{ public int soundBoosterSetting; invariant 0<= soundBoosterSetting; public bool IsOn(){ int [] a = new int[soundBoosterSetting]; //runtime error if Invariant doesnt hold as array alloc of neg size bool on = true; //... comput somethis on "a" using on appropriately - if there was a call back / if we exposed the radio we could set the soundboosterSetting to a neg value return on; } See carRadio0.ssc for notes and Rustans version of CarRadio for the example Making radio [Rep] makes Radio peer valid Need the expose block to make it peer consistent. Still an error on IsOn as we need to make - owner must be valid& See Multi Object Invariants  chalmers presentation & . Adapt Chunker and Dictionary to car and Radio TACAS Heap 3D example (16) - adapt this slides to slides of chalmers presentation  terminonoly on TACAS slide is NB vp ` ? E      $*   ̙33 ME-(    ly˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33 ME -(    ly˼y˼?Rectangle 2055r3   n* C  a   r0e0e ?Rectangle 2   4Z   ~y˼y˼ ?Rectangle 39 f  4Z R    ̙33 Pi(    ly˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s  sعsع  ?Rectangle 39 f  4Z R    ̙33 pi(    ly˼y˼?Rectangle 2055r3   n* C  a  3 0e0e ?Rectangle 2   4Z<  s  y˼y˼  ?Rectangle 39 f  4Z R    ̙33r0(zL!Fڇj"Au4ش:}-`LQX~'¶]`hcs}"ڡY2Y7  b(399BLXgjiyѧLjq=Pr o#&BT^TflFszd:I M  HeEˉpy|W+ )e$*25<SD\JPZ-_fpptx }>ӇhǏ%Ǟ*Dٵnbh,  :   ^   Y" *& ) . a3 6 : > iB :F J M 5Q U X \ I` d h n nr v y -} € W ɋ ^ E  â ; ݱ  P ! S $ e 6  %  { $    6% 0 \4 7 ; ? "Oh+'0 hp ,8 X d p|$Program Verification using Spec#Dept. of Computer ScienceLC:\Program Files\Microsoft Office\Templates\Presentation Designs\Blends.potRustan Leino282Microsoft PowerPoint@Yb@?!@`sGg  pp  pA x(xccc9֌ֵ9cc9c9֌cc9c9cc֌99cc֌99c֌9cֵ֌9cֵ֌c9c֌9ֵ֌cֵc֌c9֌c99999cֵ֌9c֌cccc9c֌c֌9ccccccc9֌֌֌c9ccֵc9999֌99cc֌c9ֵ֌ccֵ9cֵ9c֌c֌c999c֌9ֵ֌ֵ9cc9֌ccccc֌9֌ccc֌9c99cc9֌ֵcc9֌99c֌֌9cֵ֌9c֌9c֌֌ccc֌֌֌9c֌9c֌9c֌cֵֵ֌֌c9ccc9֌ֵ99֌ccc9֌c999cc9֌cc9ccֵc֌99֌ccc9֌ccc9֌cccc֌c֌֌֌cֵc֌cֵc֌c9֌9c99֌99֌ccccc֌֌֌֌cccc9֌9c֌c֌99c֌֌cc99c9c֌c֌99c֌c֌9֌ccccc9֌9c֌99c9cc9999999c֌ֵ֌c֌9֌ccc֌ֵ֌c9c9cֵc9999cc֌9c9cc9999999cc9c9֌c֌c9cc֌9c֌9cc֌c֌9c9c9֌֌cc9c֌9c֌9֌9ֵֵ9c֌ccֵֵccֵ֌c9֌9֌9cc9֌99cֵ֌c9֌99֌ֵcֵֵ֌ccֵ֌ccc9֌cccֵc֌c9֌cc99֌cֵc֌9999999֌cc99֌c9ccֵc9֌ccc9֌c9֌c99999cֵc9֌9֌9c999c99֌cc9֌9֌9cc9֌9c֌c֌99c֌c֌99֌9c9֌c9֌֌֌֜1111ޜ{R1111֜1111֜11֜11R1{{{{11R1{֜1111ޜ֜11ޜ{ޜ{{眜ޜRR{{{{{֜1111{R{{11{{{眜{1111{{11{{޽11R1{֜1111RR1111{RR֜1111RR1111R1111{RR1{{!!!1k!!!1k!!!!!!)))!!!))))))111)))111111999111999999BBB999BBBBBBJJJBBBJJJJJJRRRJJJRRRRRRZZZRRRZZZZZZcccZZZcccccckkkkkkkkkkkkssssssssssss{{{{{{{{{!!!1k1kss!!!1k{{ssZZ9ksskkRRBB!!!1kssccJJBB))99JJss筭޽R޽1111R1޽1111R1R991111119911!!!BBss祥޽R֜{֜{֜R119911991199JJss筭{111111ޜ޽1111111{1111R1{1111޽{1޽R1{11R11R1111R޽R֜111111ޜ֜{{ޜR֜{{ޜR޽R޽R޽R1R1111R{111111ޜ޽R1{1111{1{111{1111R֜{{ޜR111199111111!!!BBss祥޽{1޽R޽{1{ޜ{{ޜ{޽{1޽R{{֜R{{޽R޽R{ޜ{ޜ֜{{ޜR֜{{ޜR޽R޽R޽R{{޽R޽{1{RRޜR{޽R{ޜ֜{{ޜR119911991199JJss筭޽R1޽R{R{111111R{ޜ޽11111111R޽111111޽RRޜ޽{1{ޜ޽R޽R1R1111ޜ֜{{ޜR֜{{ޜR޽R޽R޽R{ޜ޽R޽R1R{{1R11{޽R{111111R֜{{ޜR991111119911!!!BBss祥{1111޽R޽{1{ޜ֜{{R{޽{1֜{1޽{1{{֜R{{޽R޽{1{ޜ֜R{ޜR֜R{ޜR޽R޽{1֜R{{޽R{1111޽RR{ޜ޽R{ޜ֜{֜R{ޜR119911991199JJss筭֜R޽111111ޜ1{11R11{1111R11111111޽{1RR޽RR11ޜ1{11R11{1111R޽RR11ޜ1111R֜RR11R1R{11{1֜RR11R1R{11{1޽R޽RR11111{1111R֜RRޜ֜{޽1111{1R11111{11R1֜RR11R1R{11{1!!!֜Rޜ眽޽{1޽{1֜R޽R1{1111Rޜޜ޽111111֜R1{1111R޽1111R1޽1111R1֜{֜{޽{1޽R1{11R11R1111R޽R֜111111ޜ֜{{ޜR1{{1{1111R޽R޽R޽R޽R1{1111֜111111ޜ1{11޽R1{11R1޽R޽R{1111{1{1111{޽R޽R޽R1R1111R1{11޽R޽R1{1111R޽{1޽R{{֜R{{޽R޽R{ޜ{ޜ֜{{ޜR޽R1{R{ޜ޽R޽R޽R޽R{{{ޜ{ޜ޽R޽R{{֜R޽R޽R޽R1RޜR{޽R޽R޽R{{޽R޽R޽R޽R{ޜ޽111111޽RRޜ޽{1{ޜ޽R޽R1R1111ޜ֜{{ޜR{{R{111111R޽R޽R޽R޽R{ޜ1R1111ޜ޽R޽RRޜ޽{1޽R޽R֜R֜{1R11{޽R޽R޽R{ޜ޽R޽R޽R޽R{111111R޽{1֜{1޽{1{{֜R{{޽R޽{1{ޜ֜R{ޜR1{ޜ{{{ޜ֜{޽{1޽R޽R޽R{R{ޜ޽R޽R{{֜R޽{1֜R֜R֜{{ޜ޽R޽{1֜R{{޽R޽R޽{1֜R{ޜ֜{޽{1RR޽RR11ޜ1{11R11{1111R޽RR11ޜ1111R֜RR11R1R{11{1RR޽{11{11R1޽RR11ޜRR11R1޽R1{1111޽1111RR1111޽R1{11R1޽RR1111֜R֜{޽1111{1޽R޽RR11111{1111RR1111޽RR11111{11R1޽{1޽{1֜R1{޽R޽R֜R֜{޽R޽R޽111111Rޜ{{֜R{R֜R֜R֜R֜{֜R޽R{11ޜ޽R!!!111RRR111)))JJJスccc!!!kkk111ֽƵνsssZZZBBB)))))){{{!!!BBB֜!!!111RRRRRRcccJJJ{{{BBB޵眜ޜΥ޵ֽƵccc{{{111ZZZcccBBB111ccc!!!111111JJJkkkRRRsssccc999ZZZ999)))))))))JJJZZZBBBBBBRRRZZZRRRZZZRRRccc111JJJBBBsss999)))sssJBBB!!BBJJJ)))RRRsss)))ZZZ999!!!BBBƄ999kkkBBB{{{֭{9k{RRRsss)11ZZccZZRR999111JJJBBBJJJJJJεBBBBBBJJJBBBRRRRRRkkk)))sssccc)))オc)J1ZkZkZk9BZZZRRRRRRBBBsss֔B1k{RZ)199ssskcccccZZZcccsss֔)BRk{RZ)1BBkkkε絥cZJRR{ƄΌ΄ΌJJJsssޔZBsckcJ1R9ƭs)))ޭ絵ތZBƜ{k{9{9sBs!!!111֔cJskRR1B!sRB111RRRcJZBZ9sZkR)1))9{{{999111JJJkkk)))RRRsssRRRBBB՜.+,D՜.+,`    On-screen Show (4:3)NUI Maynooth hn TahomaArial WingdingsTimes New RomanCalibri Courier NewArial Unicode MSCMSS10 CMSSBX10SegoeCMTI10CMR10CMMI10CMBX9CMTI9CMR9CMSY9CMMI9MSAM10 Maiandra GDLucida Sans UnicodeSymbolVerdanaBlendsCustom Design 1_Blends8Program Verification Using the Spec# Programming SystemIntroducing Spec#Spec#: An OverviewHow do we use Spec#?This TutorialInstalling Spec#Structure of .NET programsUsing the Visual Studio IDE!Using Boogie at the Command line The LanguageNon-Null TypesNon-Null TypesNon-Null ExampleNon-Null TypesNon-Null ExampleNon-Null by DefaultInitializing Non-Null FieldsInitializing Non-Null FieldsInitializing Non-Null Fields Non-Null and Delayed ReferencesAssertAssert StatementsAssert StatementsAssume Statements#Using Spec# by C# plus AnnotationsDesign by ContractDesign by ContractSpec# Method ContractStatic VerificationStatic VerificationSpec# verifier architectureSwap Example:Modifies clausesSwap Example:ResultSpec# Constructs so farModifies ClausesLoop InvariantsComputing Square by AdditionQuantifiers in Spec#Quantifiers in Spec#Loop InvariantsStrengthening Loop InvariantsInferring Loop InvariantsComprehensions in Spec#Invariants:Summing ArraysQuantifiers in Spec#Using FiltersUsing FiltersSegment Sum Example:Using Quantifiers in Spec#Loops in Spec#Loops in Spec#Adding Loop InvariantsAdding Loop InvariantsAdding Loop InvariantsAdding Loop Invariants$Variant Functions:Rolling your own!Writing Invariants Invariant variations: Sum0Invariant variations: Sum1Invariant variations: Sum2Invariant variations:Sum3The count QuantifierThe min QuantifierThe max Quantifier'Another Use of Comprehension Operators Slide 68How to help the verifier … Slide 70Some Additional ExamplesBinary SearchBinary Search (cont.)Insertion SortInsertion SortGreatest Common Divisor (slow) Some more difficult examples…Class ContractsPre- & Post are not EnoughPre- & Post are not EnoughObject InvariantsObject InvariantsBreaking Object InvariantsEstablishing Object InvariantsBreaking the InvariantObject statesThe Heap (the Object Store)‏Summary for simple objects#To Mutable and back: Expose BlocksSummary of ExampleSubtyping and Inheritance Base Class&Inheriting Class: Additive Invariants#Change required in the Base Class Additive ExposeVirtual MethodsOverriding Methods Aggregates AggregatesPeerRepOwnership domainsOwnership domains) An object is as valid as its componentsVisibility Based InvariantsRepRepRepRepresentation (rep) fieldsPeer fields and peer validity [Rep] locksCapture Rep objectsModifies clause expandedPeer [Captured] and [Peer]Manual Loop InvariantsModifies clausesUsing Collections Pure Methods Pure Methods Pure Methods Pure methodsUsing Pure MethodsUsing Pure MethodsExpert comment … ConclusionsReferences and Resources  Fonts UsedTheme Slide Titles0\ _PID_HLINKSPublishingExpirationDatePublishingStartDateA0>http://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePage)http://research.microsoft.com/specsharp/>http://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePage!http://www.cs.nuim.ie/~rosemary/>http://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePage)http://research.microsoft.com/specsharp/>http://channel9.msdn.com/wiki/default.aspx/SpecSharp.HomePage!http://www.cs.nuim.ie/~rosemary/2018-12-08T06:59:54Z2000-01-01T00:00:00Z$_kC "Rustan LeinoRustan Leino  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      "#$%&'(),-Root EntrydO)EY+PicturesCurrent UserSummaryInformation(DPowerPoint Document(iC DocumentSummaryInformation8$MsoDataStore |EYEYPHWYEKSVNZ==2|EY|EYItem  !PropertiesZSEZCXEXMLKBA==2 |EY|EYItem  PropertiesEJ4TTWV0ODWA==2|EYEYItem  Properties This value indicates the number of saves or revisions. The application is responsible for updating this value after each revision.   DocumentLibraryFormDocumentLibraryFormDocumentLibraryForm