ࡱ> z{|}~zaLa]0|r( }}F=I;ˊEBJFIFddDuckyFAdobed      !1AQa"2q#B3RbC4႒ƒ$5rsDEU6ScT%!1AQ2BRaq"CbS ?RMS]T͆-T5K-)gP"᷋6"_Z4ڔ>5N0id) ҶO6ͺPeKe  ddO䭌rlp͔6OCdK|7ռSlzKԣmԏ_Վtz"q<ϐGl. G +GK‡y~&<8c[z(~8o 9JQٛ?CK7=:=[7tx в7ˏ,p-&nr7ˏ,p4{"#gn^\W:Ǖ٩"?h27ˊ'c3xd ?Y=#|nRhJzg$?|Rx1$I 'a7UsėWCK?R|jOծy-Fol5W~|cv/Zz?q|?3Q}2Oںs6fu8$H4˞A;ӭ7"'āpvJTUg[-mY?BG_ͮtY{9ge[@]Ė]AIQMV,|3)j.G:U%goN6M1>M=}Za#h?(MC)a`}C@ KihR)O@4c@؟ɠ zh`V[eFmDCVU*uÙC$ct'j>ѯй~:$?%3EEl~鷾:zo]xuzFnL%)IBkPN<ϕ#?\e̷aԎi/O^q5ATv 4%Su =vIG^Va ,D8 .\mIZ*RhSQЂ' -y>?U̡/\b"A¹օ+YJTZSTeY/fiXUb &\M1ҖDE-)Vҕ6}{=hJMW: yt].[E[FT}lK!@V !&ƻe,,{jJ}LA\n)Hm|¶0.Y"Sqz'ɖSkJ[ִ>Đܪ^h%{O{I0V:w?F"T?Ӡe 4}chP[-tQ䔨wPxh OѢC^jhPd`{iשE}kQ4P(x4Ÿ4&)Aѧ@ґW}T vE AC  WDxyk+9nvO8?M-Mo;Br'r%^t_|W`hm5ԳD?#K-z+"^18گyydZ>YQJG Zp#⸽!k2ބ\$֞kmQnIu&تp&.A;q~=)6`\ܖjR2A LdoH%oU=4):u&g⌒~B6>%έT$BqZ$xBUv[wg2 XlMtHȋCͮ*߉%)l:Kn!HJT*%5+~x"Yźݭ+qh зGGK ދ{(|4yMUy"XpLj&P 1M7! )e GNi%V i^3- I2򝰾@(mWbƉf?\BdY.M:ޞjyt`a=X2j.ؽ[nS@ӱSe@aңCQ'n-њG+$*MN}tz`T#=!#h@}ZOA|W&1\-LgxK!S+SxrѳEl-rxT8byI[)F) QE/BBԛ+qL$@H+Prhyf2..3.Hdy;ܝdHiO3!m{@i8 7ɷy [o;\ۻRDJnl'sm8*)O#ht)T ̳+ yֲ8W 2Kr-7?IBkdfyI %t+Ayl,\z^1 ]WVQrRGHQQ[MՃU 70YܧmRyU=1tibml1cGaRSD8-TQ؃i>2Yv4^Ai*)RH=YN{]~e;iacUtjwKD+iɚҕbb/r@Z hs޲Rϧ3Z 5 5?M ^Sŋ_ʇvoHbd$t Q%a&iMr-%Zhy}ڪ! y('ARk׭Q$δYTHҚ@kt`!!G @]`LTOQKxu? )NV?@y]O_oOR\5&VcZ(m>ը#j/g r=c+^%3ewrbChq=R쏸?[rsBA)iDQUR Hfu,+ ) 4^Ĥ(5?3dX!<C :T=Yd$(tM:\I[mbuxx[n%Ke!@1@7JvQ*/ 5,Îo66R\}疖mRrI\:܌4YKGEaĪpx>.jݖĻb4}9uZONqPkvJ}ނ*zR@SLCTJB@;TЧ$L|cg2a)$qYq]sv翧MAt< =<V޾u:PEUA #Z >ua]oNJE섚%qI|!.zzu>AЗI-O(|M5ȏI5#'qSԧ۵D qMAT {#YR2Ai"LS"( ]}B: >{mr .}$óVT5HrLɋ"Fġ MkӮmV#*;!;] ؊d|oxe {>4'3- S76ʬdABJZi3#LXhƢʏ5>7OKr};* - ?dWi+ y&.r/7;r {$[< V㭹дS]hR.ǛpeXjݎKeZ[!@),Tj(5MѠ_N;rpePd6.*4$!`!j7}Ўm`aRVo[-䅛Q6+ Jiӷ+Jqbss$ Mn$~!b*%tGo'YM؎+htkYsM2VhB}:Oj{VtMJ2|z ʛ%OҞzC@_”S_M_ϋo8O6rA}|P:u >AayKSإ{I){!8 EO]ii@4 ϖC8xĄ; B BP)ڐ(h+YI5yZw tԔ-TCMiD5#逎HRt]61$Os[aSۯQT;xq[ 'rmЕWkSr; )́m`ouJIRuR}ԥ=IgO`o緘c-2,sH :8e%PKNB}4$̡ר4#@Č %?s1qR'a7-ȵ⪥ ͂.8Uu(o&S֛r5\N>~+m.ujSs l]r хQ381(ǻH R-WЈHx]XUPE±, l[ݱOGKCϦ%xZIawl]lm)F]rk'qi=eEonv89]5T7eFS=*rUMJi:P+hʪƎ.anC9q !bDuoŔa#촥]54*AkhW~ bӷ_ 1#vK׹@UХ!?uI6Kddm2/ = KLq,l)A)*Z<Ε] ͇-ĆL!CθIԍx;Aֽt W]JT){xh_b|#-OnWZ[\?o&lFAi:{ty_msjnנt|KB2iexve-i~-=NPAUUtA!.*6іu# Fɱ$ȵy#2H'E@~36P"E>'HlBDtG[P=cRDK9uy*.Z۽ , wi)K*:$fʪ\OX^5|bF7!Q=oJEk^..=4bB)pcUgfo[Za.i&"; -2#>j  }a,PWNUF}ئA]q-m j*.S%Ŕ=uXvN-{<%ewnј{L,qlMQ.2YeE;P*B[Ɯ e9&.Y.yR h6<X?Zhm]A$BAԮNSh60&㍥p/ȏ^ 6_mPI&)1GW@F2Qܻ/1q,r:eHIm )ҚiU P@4cpWLBkNF2V<$P^m~B6n )eދ]t>zn9;oSU73Y*8KcRHmt*ztCy;\B`GiT)[hJGJIS!JdbB[r2DBSԍ\].)!*B OpAMfh2_۩4EyUo2i@}2gXdZ%_WM\nbE=Ԣzd6͗$ζMCz:БW4Yv[a[ W5uRSUJn9Ö? <<.q\}yU\[DB"&HOU) WMǸ4A4]8;-ዜ5WwkTO$tdU%;~ԓqnw*X9Jƻ*5KwkKUvHN״]bqIԋ@6m %co!$Mf@$)^oqdREv.(Wu,b  M7W@˶+cO%)q+NpO)ص'm-7&)[aӵ}!g蠓CDT)Y(=Ԍs>tZT)#H{QOnAEj(/,igM=LbYM-(qN&rYRz ^" ϊzA9 [eז"\Cl !d e[l~<'e<& HB *THm%@8)jJvXoHvYD<ː3BL+6/Me\V)K'w X{Z \cĜk U&EjG[Bj|({Sw~(1R-]mrz |Ի\إ 4W^ΟtRԁMbPZ !ń($ԒO`) _m5˹b,cnƃ`.ٰznZGCZIP\sŹ“l~ƗK*y% A:He ylָ{+6ذ R5|QmJ'ĨV̒+:1WKYjBnJЍ$ٮC<ˈe]Y*\2ψUJu.bwxoJY%kBOأ.NlGJw>mW׏/ ,㲷K#ʂ;'UT{ik9ctGgȬWRh!׷M54q4|PQet.4͆nb8w 0ßּI@뫲>o.UdD"7F 2 !H,ד$q!v+^@l^1ׂҥzq4ETL%x|Ŧn~w;JۚӬ;8 Td{̷92 3FÑ6y5ud=Z>>\siQU)aiᰑ[u»;6\Y.jr?%a!sYuNG}ԅP) [FYOC wSO_i׫Km>e#Gϴ ;-a`x4k1qSź_L[A~Co [UQ֨p IYJ4:#* q.@Ya-!`h"5%_ e>$"I!7(8#q;NƉE;꒪lM]VSʜ8KTGθ4UtHE!'iCC#QAuFcɠ5,/5ɷc9; ldž9FtVeTeJސ*p X~|r sZl%" ZIJ}U>'Njy9" Q`K^bGLmwQ%FT]Q\MR e=UR_ Qѝl4֕ mujo6M-P vrLy<Xl2!ҥPD!?7㨘W"aئWlȇwSLC ZMjp耯[N.n?6S˭Irrcj2b7XHmmxHA)iAdMOZ~N\.>l~yoe8Dlqږ\JjmX!BViXxY"v=`\隈JU\ XZ  T7wyMe JEM:!-۟`ޮNb-m^\ۑU*W.Ec[]RTŻlz7'fd3c-Zl OO =wPr.6 k ;ms3I.J[q> 0ZO} ܤPK}qGm7(v<"=l$ޗ .FQִ5W6Xb.-?zr- ݴ72ɎjZkiu06Nx;5Y/`9`z2HlӟoIK!CV{UJ[ʠ.m;OgaWuS>o9ěUͧ@=znJ0]yw{-cm=X+#eָ% 6A _N*]}b\Np[ePDW兜ج߈)2Zc=PK4Iq^~;w,nB|# geac.]{ۃo꒰QۊlVݮD7E;XW_O>zN6Km&7t\j68Dvg7[uպ՞5ݚYO_ELSC8 |m4Xُ$[nKRwbnpD$Ө ᶄTacy#)Y.21jF HRrP/~-zhm+J;|QU~+UU9yDUdz&P5`]2ƵJH%P>鹢8eG ]mh Z;HZzTRiCM\s®P$d³A;oR&D eIPPWU1n+{8!hw9OZ׾`ڰvENC5uS!~>A&K ]\9V pY1[2mm$K 6E.a+PBd;"EiAY*%l%"M4jq[d8R37<9Zʇq6h!?DZcV1cٽ.KOje jCGVEOT8 ZoMo~u|SiyjаR_11Ufu{ Ge$6ZZ4Hh?>)ϐ<x)[sՃmL]Z m'ru5ը︖V͛"My꼫"u5䐖-ժ#T=ƾ}¸F.޶bs!]%nx|_M?Ҡ?yc[Ony .ɰT\.(Ў–*ԠT^,uC?-{|:peoS%quNQ)Q!i԰k e"$SQI{9ӐXEUǑ>{؆ޚ?2i(}yo ~%n̍,e)/-\J uTJ[܎I+lj-%*,[֑&|ލ;nT>BAq !Z(^4ǠG^w*1}rXCj@> ju4A0Hl5# vBGP@mjz-Q8;xqc)Fכ@)d9R55y؍u'띛Dm=#A/C~=898ajt6_G<bӥNd%*Z{5Hc%JP=Ґ$u$>M"%_:K PК-D E6`<͚ۗs -2d.:awh4$S%WCx*um8 N|EqkT (uk180d pv x;rTkuA D}i%hboapxK0vּ2r!hBHZӥ5qBy2dYdi)eC{IЭ 9Љ( kXvOB{v3Vaͤ(I ӿm< X~ű䷆N:EHͺ(CoVhh\G XӸ +kʾvi6>BM&V6[O7P{*T4DѲH`$ -nH̋-0Gj[%;*Moqw"3R̸]0y>K[Q*;fpH[ʒʂ h v4,7?ջom}>S'(~(ɂp֖ॶkXҦkʒÑ('r@(L]yMYdm+i%;Iz¥.l6`ʒl.4gHmNBL5.  cĪ[=*qyW#b$xzq;\uNELLuo'wvQ#ZB-$gowmѯ[Q|N1|Z%KRϺi$j88*NRGaY-KskҞ\6VGfDJtgFJj%h]Oad7ϗa4%{_AB;A}1Ja؅ ,}޶X5#>IqHBUDCnЛf^UGRU&2c6U5M:.38>-w98I"}|⒩m7饴j6ؕZJ{Q3$SEB `P;<|~^,wXaA"UBjuI=4&F89%eNuWn$TTL>sǟE&eĀsBҒTښ1f'ĚYҠsyն!碩(i:i J%'MJMR YSԯ{+SUˉj,O6ȍvbאqTT|5.M+Hi/$&?#SݛmtФzޝ6VGTShRdq[:GOUNb/,I5=:1塓c(qGNVbhصvk`9cdKߎzz{}_Oϥi]G4եvx$O_fiqrsa"Uj7 y:g_cm<[y-S]oCQM}EGךfwub=5i:+U@6P/.4\N4g<* dZr\k]NJN4{]G]NJNCaX܋e'<]pe-fCNJGxxメ}Uy pdv(>8h:>?. _]NJ3͎?#\}~+,v "Mh5_BbF Tvܸ2_3ү܏!cEu?U麯ˁ>dxX:ʵ_d>o_ 9(վ%6G*n ?5kjq~W(a I>M:r=cu] p ^ӟʝZFo= ?e\$$WZ{Wq3r跾 a|ʼn'/KcH֫S2th?R,W9e٦u~&fa?!Ļً?},˗#-EI쯍c=?6,47#S; zy4zJy~D}C׹Z#Cynsd=j?ٶBAFcZHgG8 9F3iºe>i';ac=mzq<xvҎvImls7YG>ڣ6>dǿס0w"Ϗ}BŪ]&oXq$Բ.C] ;xhGթգ V bOM !Os}z3a>[*O]Ϙzw?k٠FAr~|[*0ڗJFIFddDuckyFAdobed       !1AQaq"2RB#3SbrC$46F7ƒT5EsDtUVG   !1AQa"q2RBCS#Db4r3Ӥ ?e4[2!6XpLRHv {q2~R1'3" `zˣA|0 Fdgo!+ğō@S 'Y {zdvkeC-ῌc_Nm1Gsa5B6wnS(q> _m #}@|p䇍kg}Gc>Ϲ>G~:7loB7dv;;Z>:a% [ gndAX}Z½؟@7g{/Kn>M잏rt OУ?6&j٩oyre>s,=qn,V":ɀ}% cFHkݣYY!XQ aU0/=FWOd#'`G:psWsO9~>W\E^(!T׸b652ةD^Gٕl窑+A]1pmUE_e[0IeS8eP2?$ZO<qi>N~1ө>?~tdԟx[OюC>?쟣:}nc'?F:u ~O~tatet`7юC|:0tWOG]w- A "0Vuv}tZ^MuOp]̈; \527-"39,5>q8F\gn{".=xW1_efBcqk6 Vn3\$p-64$D?S &|cy[E;|6՘' H?+[ ugDPƼ5Еy[|GON8-gIbMz( ΞJ[/$n~|u"VD HhBf`+0vkPDI{ j 2#}xc|u-Gfl4_ mqnW̽\2\\;~t2H/u] T',!eV<+Zғ\3*-e9ƇSxWSaCBF8N&&b-7WuT&6+%=ٍպS읿cS[ELJiX*1 IQB1hTvB40;eMN Bs*@l8oɤ`Qp *O\=gI媍JWJ'3,aWY_EN;OnDxxXiJ5}>HkBᳫ<p&n㎋Y赞 1k=*X?IIڧQPզzce%@}]elw=ۄ5151"\דIkE;+𑓧n1ƭ0BטiCJy&ydD*(I 2I&QJQZ|L@ UZ[4:$w1~n&,7":f δj{aT!2mv;2Ă9HbF3J\s#rߐc'EZw 0D94F\ֿ AROf%c %WC0] q--FE%=UėR$VTUzsb6m ooy W:q0 β ͢ Dl_ʧ &yퟜ])4"9VD)< qpyR՛&w]]/ԱFHQ@|*3i4hD85PQ_6'8FgftQJ >.LL!m VcONbi}dNC*{MH1*, ȞR0=7eZD^*V`@xM3,ADiؚ3YFҦrVƚ3ӥҧlK+" ,>B8k{14+Wvc#>X/iX!F3;4$PwiS"7)o7s://hی(yINuiQ餌3AHY>UTF9 xEe-Es &"EkpjVfh+xH -IFj1Y3֒,e55&Ѹs+Ph5 <^)%i%mLLq2$Y%d$sUӞpՅJqd{^HXGȪ'^'ḌEN"mnRT6Q֌F?Lj[rNC'[faN*J(Ek Omp)pHZJdG]aɶmM,g,jbI =\\f)v}An}; !@4)Dt=W$CVu˳k#'vt-v}H`RjsS] ui*Q]$()FsNrs

}J4J{FQ(+<=!HM3E rȈ;JI5GC aPF`&&S:tR p~5'$ YIM WL)/Wnvvhfe2@ HѢ&-kâToiBzeB+Hl=P"m.{h=O b.ʭtwsOMu^m10s *:(IH9`a W(eKWRˏJ?v`l:+j߫ukT& ]zz;}]%_I>oԝ#ld;[΄.fId1U8S .i V F*ʃ%k) {nZ^49*(E)éL-0[EؖƚIcıp G4UĬv'f Ŧ9ހ{\xI_Ho{M(yF&c\$,>^naI\q+9(?+Q@OBU3&(h0'|Ea+=Y8DS^t䜰*Ǩ$F9Ry1%IOA)lI!4 k\+o!7){S-J0inI=m~څ F;iU@?Y+. G1vʳ̾ p^2SWl$RrbC)Ma"E >OeK[3z˪y}ȔT@SᩧD:k}sw+q 6*Jd?qg3c1[ GI_ Fxr&?l{4`U-"$=Qn'z >I7/*MU;XfV!wV)iJwyQ&]ZvO3BGҵQZ ƒ+o m<"CrDO{aR~p G[ekw[}k+i36gZbMÛCB ߌ]N~k򸋸/]ry޸a^pjPh1R@NF"pz+ۋuouGR[7xVzXBTQ'<[10)@"-\*xb ,\j+1Tև@J+9KxT=I>U7.=+!kY uUm⡚ gI8 wTPd~'1/&:q._ruͷQo(cde7fmpOD[9v04!$9 V1Iˊϩ#l[^GH@T.XP23gۀTJ*e%էs)Z &,-p};q4sJՈU+9q,%וz^kfP 221=ح(m\˚ϲsvJVam$jU diL[Hy۰Rei[V5vA?& cAX.H|0D-:*C{ QGSǢ*Kjr2Oa 6{i?H,NJθpQNHm>~ ЫD\9W*a@i% g3߆P?u0Mrr9CQ066Ī YHFpMָMCY㳡kfN1#">2ڐ[pO_S4DQK}5ܟo7πӜZn)$)431ebζ^b1yr]$b 2YT:35OcqLeɶ:7ӉE-,SB1e[gXXDa9ҙT@Ԝat]5I`/-ukH`D=X[ VLccW^=5ۦgǨ *m1X݊,Ő3x %u3v]$]ieHO`N}!Dzik^W.{m=(Un$nS-H+},čoz3 P?\XmTׄ7eh{x+&JM̓1tRX| ҕbqlp:u"---f"+݈p-%p3iV)o4tǞt=l@.+ȘtV\97Ň}EJW}p^IۗMn#o {g=O*kLEXaI%Ķ”;_7ʷreZ.kr+w.6RUi$ oվRZL.]{YcVҬMJ6<>^b'&׶n-fT)>q*B ]Ms\O}|CH$ OщXf>ǷݵTBH[> F@ 镾=B ?~oÏN-y8#O2 b⢟ӏTK <\LO杹 YVWBo\̗WTiK >^7b6tsF}mG7wdCcɭcg~6ٸ (ȣVkF˷,vw8/HH]:rx[s .,٭a"3)zx{0F޲6VnHX1gb3sncU{a&6LFm=!p+\dM%="4ՀA7L^b2 #txq㟯Սe6ipK+0S:x)Tj4'3ϺɸoR^4:+Sٞ|1K#50D,0G5Dxm%QݨLGB̨g#=Ql <6OQG&s´m\xbyʭN()ٵ1%nYnCLPMHJ`} Ië_ 87O5>A{ph\+bd5FFOVHsfNu:m-2X[rn c (5zZۭ݀B>2RXGPOQ PE ӺՌ[Bֽ1ק",UuJ0:fs!-EN>7ɵnk@ {KY}!&rrS*R~he?X;+B$SGв 煹  )R>KVVG&/A`{s+;og- ,HjRAJ+@jt[hD?UzqeSO޹[q5F)@ZqRfsP9z~ڡ7x`t( ϻ LqlgItL Q єp(}I%n+RlQqEm](R=ScE^=V/MZn[<:ӰD2 Ιw}-R%7ی%u2TM)$EWn%~wb:#.wqmug h_Bj ?=Mj"74OG RAa?ݑׄQC d+i]nR⩨8\3Ƒ[1,44o"K K-u4,I N]gn4$ғ9˽zK+ \* W%@+@ :# h{Myqe=46sd@|kەq.ظ da$lyCoyf]#.[ У<^)/ ؇|zg0춲]n":2JRSiz5U[W|Lreŷ;WթneKqL #"+Z%i؊(a U*-9s uVN#VwV\jk8W]T 0[s<6v2bS LرDlqpkOIt-dw72H$ h\p y`.4}B< _ OfW&L~j(;@} *|pY2ț_/s%Y=]PF5+pwdk9bͅE%]ۥn6,;I =xo5F"Z=M6wG%_=OhbSjN*4ߠXVӋ"KY#xA7h0G0jA'Xn^L (sX5kF+ngN5k̩ mv kX ##:?CNB_ _L/v7AST hY3Ө#i-^S$v=_tZ( RơāPx# 2;X́(A/iƮ!zې'fb QEW[a6ۙUaz[]4t?=-64d]*G:TT+Ӎ}R}5t 5;;tED2*iGf ((6k ݷY[OwJA2~N @OiuQr^cJN{/+ Lc#R-ْȌGȁ\[[q,+iyn\'(bTbࡕmyC塑XP='wp=LWT7d7MJۢݣnz.}p]giY IJBFK( N+99fT5$Շyvh ki}HDvN/\xjQ{b7y9,t<T~QN1dv 燡>mmC: ? z3hI`0Wy1-Rtp[ݞMʠĂ  Npׇ)OLf V;`Z.O`vҠ\QMw "[r2X+5@] aND+gDm;Rdx!c8Ykw~9B%$-Z=A{xAvkPjx bŭ[> eЛB^ 5m02΁U[e亩VS$c5ҡ'{z<1uWJm]7t>׹C)IfѕYYMUդN8Gr*)["z}S2:լz.l9-jXU~uqkkefԪ+{v'BPP2ʞI:}{,5[Ȳ)h28\dje9eFiJhї"ylMku P֨WkLw*E)<3@S b2VQ_Pc6ld"KK= r t]m#).}#M((8`F5t]YRmwð6DKs$J׉45[pE? ^CBEoEBWാhNt@ϵIn&t_}j8Sv T)/۹r&m>w6.q_8Rrx3ִ)K2{ޚh[ $2EZB F( FOn{f3oynzOq B=a $v0,&+Uvߛ6t40yf<>|(Է2R:zWolwrd\I1CJQ-Zp>0ƹPy63t}L3FAVީFp”yC*|!MPEZFEeHiR>#fsly6z~/ӴerUȌ[iȴ]9[n=yZ.EW㟗ȈַXѿAtnq鸶SSib0#r7 7PO/c Bn6F'(Et0W7UlKOJTӿ;{GMun;Ƃ8gm gjQTS2r-kZj`{hsA/ݧ~.๺ QLQ0'S׍ϓ IO\}9WO;9zz8jڴ~I90@$޶K0e^U䓯;F:1l_{' GDYzr[mFO`nw,`{L]?u54Fy~2A&N=k3p?#z xct?Z7OmL_"~zKlC?#~7syA 'g|l~?٭֟0mLo6ȟ}Нpxts^ߤS/{ݿ.|dOm?Rd:tT~/ܟoc4O&i凘6}ΧE)aG-oA'hӪ1 q F;V2eܾ Γ:#HTL`D%'Web~g]mٝ{,U4gÂV a%pD88aDfcf@::{>@: #!*O<`ab cdehilmnopq z{~WeYW_}$$$r$La]0|ri$$$$R$I;ˊEB=iR$r~|[*0ڗB:> 0AA`333@T ?6D ʚ;q-ʚ;g4ididD0Xppp@ <4ddddph0$v<4!d!dph0$v<4KdKdph0$v 60___PPT10 ___PPT9@?  O  =nT Programming by Sketching Armando Solar-Lezama, Liviu Tancau, Gilad Arnold, Rastislav Bodik, Sanjit Seshia UC Berkeley, Rodric Rabbah MIT, Kemal Ebcioglu, Vijay Saraswat, Vivek Sarkar IBM vZ3 - [ Merge sortFint[] mergeSort (int[] input, int n) { return merge( mergeSort (input[0::n/2]), mergeSort (input[n/2+1::n]) , n); } int[] merge (int[] a, int b[], int n) { int j=0, k=0; for (int i = 0; i < n; i++) if ( a[j] < b[k] ) { result[i] = a[j++]; } else { result[i] = b[k++]; } } return result; } rGZG33 G33G33GGGG33 G33G33 G33G33GGG33G33G33G33\ Merge sortZint[] mergeSort (int[] input, int n) { return merge( mergeSort (input[0::n/2]), mergeSort (input[n/2+1::n]) , n); } int[] merge (int[] a, int b[], int n) { int j, k; for (int i = 0; i < n; i++) if ( jW  5 {Sketch of Karatsubabit[N*2] k(bit[N] x, bit[N] y) implements mult { if (N<=1) return x*y; bit[N/2] x1 = x[0:N/2-1]; bit[N/2+1] x2 = x[N/2:N-1]; bit[N/2] y1 = y[0:N/2-1]; bit[N/2+1] y2 = y[N/2:N-1]; bit[2*N] t11 = x1 * y1; bit[2*N] t12 = poly(1, x1, x2, y1, y2) * poly(1, x1, x2, y1, y2); bit[2*N] t22 = x2 * y2; return multPolySparse<2*N>(2, N/2, t11) // log b = N/2 + multPolySparse<2*N>(2, N/2, t12) + multPolySparse<2*N>(2, N/2, t22); } bit[2*N] poly(int n, bit[N] x0, x1, x2, x3) { if (n<=0) return ??; else return (??*x0 + ??*x1 + ??*x2 + ??*x3) * poly(n-1, x0, x1, x2, x3); } bit[2*N] multPolySparse(int n, int x, bit[N] y) { if (n<=0) return 0; else return y << x*?? + multPolySparse(n-1, x, y); } PG332/$6}Semantic view of sketchesQa sketch represents a set of functions: the ?? operator modeled as reading from an oracle int f (int y) { int f (int y, bit[][K] oracle) { x = ??; x = oracle[0]; loop (x) { loop (x) { y = y + ??; y = y + oracle[1]; } } return y; return y; } } Synthesizer must find oracle satisfying f implements gL(Z3ZZZ(E33-G33G33G33 G33G33G33G33G33G33G33G33G33G33G33G33G33G33&G33G33G33G33G33)E33 E33E33b\ Synthesis algorithm: overview translation: represent spec and sketch as circuits synthesis: find suitable oracle code generation: specialize sketch wrt oracleF" & wREx : Population count. 0010 0110 3$*&zint pop (bit[W] x) { int count = 0; for (int i = 0; i < W; i++) { if (x[i]) count++; } return count; } b{G33G33G33G33G33 G33G33G33G33G33G33 G33G33G33G33G33G33 G33Z  %~Synthesis as generalized SATfThe sketch synthesis problem is an instance of 2QBF: o . x . P(x) = S(x,o) Counter-example driven solver: I = {} x = random() do I = I U {x} c = synthesizeForSomeInputs(I) if c = nil then exit( buggy sketch'') x = verifyForAllInputs(c) // x: counter-example while x != nil return c7ZZ ZZ6  C CKCC  G33 33 G33G330G33G33G33G33 G3333 G33bGL : Case study_Implemented AES the modern block-cipher standard 14 rounds: each has table lookup, permutation, GF-multiply a good implementation collapses each round into table lookups Our results we synthesized 32Kbit oracle! synthesis time: about 1 hour counterexample-driven synthesizer iterated 655 times performance of synthesized code within 10% of hand-tunedL  Finite programsIn theory, SKETCH is complete for all finite programs: specification can specify any finite program sketch can describe any implementation over given instructions synthesizer can resolve any sketch In practice, SKETCH scales for small finite programs small finite programs: block ciphers, small kernels large finite: big-integer multiplication, matrix multiplication Solution: synthesize for a small input size prove (or examine) that result of synthesis works for bigger inputs75t f7 9   2 f  Stencil computations: an example An implementation idea  2Expression b*ini+1,j + a*ini,j+1 can be reused 63Lossless abstractionProblem does result of synthesis for a small matrix work for all matrices? Approach spec, sketch have unbounded-input/output abstract them into finite functions, with the same abstraction synthesize obtained oracle works for original sketch Stencil kernels concrete: matrix A[N] t matrix B[N] abstract: A[e(i)], i, N t B[i] C IC    -  ,4 +Example: divide and conquer parallelization,, Parallel algorithm: Data rearrangement + parallel computation spec: sequential version of the program sketch: parallel computation automatically synthesized: Rearranging the data (dividing the data structure)*" 3*"  2/,X}~P ` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dd@$?" dd@  " @ `3 n?" dd@   @@``PR    @ ` ` p>> P(    6%|  @` | T Click to edit Master title style! !  0<(| `  | RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  0.| @ | @*`B  s *D3f>" PH  0޽h ? ̙33 Default Design  ` 33` Sf3f` 33g` f` www3PP` ZXdbmo` \ғ3y`Ӣ` 3f3ff` 3f3FKf` hk]wwwfܹ` ff>>\`Y{ff` R>&- {p_/̴>?" dd@,|?" dd@   " @ ` n?" dd@   @@``PR    @ ` ` p>> Pf(    6^  `} v T Click to edit Master title style! !  0`v  ` v RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  0ev ^ ` v >*  0hkv ^  v @*  0Tpv ^ ` v @*H  0޽h ? 33D<___PPT10..r Custom Design  ` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dd@$?" dd@  " @ `3 n?" dd@   @@``PR    @ ` ` p>> <F(  < < 6ĺ  " @`   T Click to edit Master title style! !$ < 0L "`    RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S < 0 " @  @*`B < s *D3f>" P < 0 " @  >*H < 0޽h ? ̙33y___PPT10Y+D=' = @B +  1_Default Design0 pd(  d d N+hJhJ e"  + n*  E##EEhh d N@+hJhJ  " + p*  E##EEhhd d c $ ?46  +4 d N +hJhJ  [ + RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  d T$.+hJhJ e  + n*  E##EEhh  d T/+hJhJ   + p*  E##EEhhH d 0i6Ɍ ? 3380___PPT10. |((  | | NyhJhJ e"   \* E##EEhh | N@hJhJ  "  ^* E##EEhh | TthJhJ e   \* E##EEhh | T$hJhJ    ^* E##EEhhH | 0i6Ɍ ? 3380___PPT10.s) 0$(  r  S P0R   r  S  P  V  0޽h ?"` ̙33___PPT10i.}+D=' = @B + ~ ld  (  x  c $o+`  + x  c $]+ @`  + f  0"` ` f  0"`0f  0"`Pf  0"`Pf  0"` f   0"`0 @ f   0"` ]    <% @),$  0 z*looks simple to code, but there is a bug 4*0Z*3   6jJ"`  ,$D  0H  0޽h ? ̙33___PPT10.F4 ](+eUDV' = @B D' = @BA?%,( < +O%,( < +Dr' =%(D' =%(D' =4@BBBB%())))?D' =1:Bhidden*o3>+B#style.visibility<*%(D<' =%(D' =%(D' =4@BBBB%())))?D' =1:Bhidden*o3>+B#style.visibility<*%(D' =4@BBBB%())))?D' =1:Bhidden*o3>+B#style.visibility<*%(D2' =%(D' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*%(D2' =%(D' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*%(D2' =%(D' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<* %(D2' =%(D' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<* %(D$' =%(D' =%(Dt' =A@BBBB0B%()))D' =1:Bvisible*o3>+B#style.visibility<* %(D' =-s6Bwipe(left)*<3<* Dv' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =+4 8?dCB1+#ppt_w/2BCB#ppt_xB*Y3>B ppt_x<* D' =+4 8?dCB1+#ppt_h/2BCB#ppt_yB*Y3>B ppt_y<* +8+0+ + +  @0(  x  c $@+ @`  + x  c $+`  + H  0޽h ? ̙33___PPT10i.F4 ](+D=' = @B + }'L0 r j  (  x  c $+ @`  +   0+"`  ,  fA how_view_03l h <$@0 +  <H+ 8  ,$0 6sketchz   ,$D0 " fA how_view_12N@|  +  <+  T"implementation (completed sketch)##   <,+=  ]  ,B   0D) ` ,$@0z `    ` ,$D0   <4+"`@P  6spec   <ԧ+` }  = specification  <Ь+P  5+$H  0޽h ? ̙33 , TIMING|0.8|5.5 ___PPT10c .pJl+֖8D ' = @B D ' = @BA?%,( < +O%,( < +D' =%(%(Du' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(Dh' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(+8+0++ +  (  x  c $+ @`  +   0H+ ` tint[] sort (int[] input, int n) { for (int i=0; i+B#style.visibility<*%(+8+0++ +  0(  x  c $+ @`  + x  c $+`  + H  0޽h ? ̙33___PPT10i.F4 ](+D=' = @B +  \(  x  c $+< @`  +   c $+<` P<$0 + H  0޽h ? ̙33___PPT10.p^u++DN' = @B D ' = @BA?%,( < +O%,( < +D,' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*?%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*?q%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*q%(D ' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%`%(+8+0++ +p  `n(  r  S < @`     S h<` <$0  *h(H  0޽h ? ̙33:2___PPT10. g=H++D' = @B Di' = @BA?%,( < +O%,( < +D' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*4%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*4l%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*l%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*F%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*F%(+8+0+ +p  \(  x  c $,9< @`  9   c $89<` <$0 9 H  0޽h ? ̙33LD___PPT10$.++D' = @B D{' = @BA?%,( < +O%,( < +DS' =%(%(D' =%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*6%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*6O%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*Oo%(DZ' =%(D' =%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*o%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D)' =%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D)' =%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D)' =%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<**%(DZ' =%(D' =%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<**g%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*gz%(+8+0+9 +  \(  x  c $t9< `  9   c $9<` <$@0 9 H  0޽h ? ̙33_W___PPT107.#G+ED ' = @B D' = @BA?%,( < +O%,( < +DL' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*`%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*`%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D ' =%(DT ' =%(D' =4@BBBB%()))E5' =1B B`BPB,54*3>B ppt_c='`B@BPB<*D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-s6Bwipe(left)*<3<*D' =4@BBBB%()))E5' =1B B`BPB,54*3>B ppt_c='`B@BPB<*D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-s6Bwipe(left)*<3<*D' =4@BBBB%()))E5' =1B B`BPB,54*3>B ppt_c='`B@BPB<*D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-s6Bwipe(left)*<3<*D' =%(D' =%(Dg' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-s6Bwipe(left)*<3<*Dg' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*:%(D' =-s6Bwipe(left)*<3<*:Dg' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*:<%(D' =-s6Bwipe(left)*<3<*:<+*    \(  x  c $V9< @`  9   c $W9<` <$0 9 H  0޽h ? ̙33  ___PPT10 .pF+[W_Dz ' = @B D5 ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*2%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*2X%(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*Z%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(+8+0+  +< L0 @\(  x  c $|< @`  |   c $||<` <$0 | H  0޽h ? ̙33___PPT10.nJ+FDt' = @B D/' = @BA?%,( < +O%,( < +D> ' =%(D ' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*$>%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*>L%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*Ld%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*d|%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D> ' =%(D ' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*"%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*"'%(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*':%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*:%(+8+0+| +e  `d\(  dx d c $9< @`  9  d c $@- <` <$0 9 H d 0޽h ? ̙33A9___PPT10.sn++D ' = @B Dp ' = @BA?%,( < +O%,( < +D' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*d.%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*d.k%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*dk%(D ' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*d%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*d%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*d%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*d;%(+8+0+d  +h L0 2*ddp:{(  lx l c $^ < @`   `z   l P`,$D0 l dA"1Outlined diamondS" ?P N  `  l  P h2 l s *"` 8H h2 l s *"`h H h2 l s *"`( XH h2  l s *"` H h2  l s *"`H xH h2  l s *"` H h2  l s *"`h H h2  l s *"` H h2 l s *"` H h2 l s *"` H h2 l s *"` H  l <@" 1"`P `  *  l <, 1"` `  *  l <F 1"` p`  *  l <J 1"` 0`  *  l <l <91"` @`  *  ?l <,91"` `  *  @l <91"` ` `  *  Al <x91"`` `  *  Bl <91"` `  *  Cl <A1"` @ `  *  Dl <A1"` `  * h2 El s *"` (H  Fl < A1"` @`  * h2 Gl s *"`  H H h2 Hl s *"`8  h H  Il < A1"` `  * h2 Jl s *"`X  H h2 Kl s *"`x  H  Ll <A1"`` `  * N  `  Ml h2 Nl s *"`h H h2 Ol s *"` H h2 Pl s *"` H h2 Ql s *"` H h2 Rl s *"` H h2 Sl s *"` 8H h2 Tl s *"` H h2 Ul s *"`( XH h2 Vl s *"` H h2 Wl s *"`H xH h2 Xl s *"` 8H  Yl <|A1"`P `  *  Zl <A1"` `  *  [l <A1"` p`  *  \l <X!A1"`p `  *  ]l <$A1"` 0`  *  ^l <8(A1"`0 `  *  _l <+A1"` `  *  `l </A1"` P`  *  al <2A1"`P `  *  bl <d6A1"` `  *  cl <:A1"` p`  *  dl <=A1"` 0`  *  el < AA1"`0 `  *  fl <DA1"` P`  * h2 gl s *"`( XH  hl <DHA1"` p`  * h2 il s *"`H xH  jl <LA1"`0 `  * h2 kl s *"`h H  ll <OA1"`P `  * h2 ml s *"` H  nl <TA1"`p `  * h2 ol s *"` H  pl <WA1"` `  * N p ql h2 rl s *"`(8Xh2 sl s *"`h(Xh2 tl s *"`((XXh2 ul s *"`(Xh2 vl s *"`H(xXh2 wl s *"`(Xh2 xl s *"`h(Xh2 yl s *"`(Xh2 zl s *"`(Xh2 {l s *"`(Xh2 |l s *"`(X }l <^A1"`Pp *  ~l <,aA1"`Pp *  l <dA1"`p *  l <PhA1"`pp *  l <kA1"`pp *  l <XoA1"`0p *  l <rA1"`0p *  l <|vA1"`p *  l <zA1"`Pp *  l <}A1"`Pp *  l <A1"`p *  l <A1"`pp *  l <@A1"`0p *  l <A1"`p * h2 l s *"`(X l < A1"`p * h2 l s *"`(X l <A1"`0p * h2 l s *"`(8X l <(A1"`Pp * h2 l s *"`((XX l <A1"`pp * h2 l s *"`H(xX l <XA1"`0p * N p l  @ h2 l s *"`(8Xh2 l s *"`h(Xh2 l s *"`((XXh2 l s *"`(Xh2 l s *"`H(xXh2 l s *"`(Xh2 l s *"`h(Xh2 l s *"`(Xh2 l s *"`(Xh2 l s *"`(Xh2 l s *"`(X l < A1"`Pp *  l <A1"`Pp *  l <ԪA1"`p *  l < A1"`pp *  l <tA1"`pp *  l <(A1"`0p *  l <A1"`0p *  l <A1"`p *  l <A1"`Pp *  l <,A1"`Pp *  l <A1"`p *  l <PA1"`pp *  l <A1"`0p *  l <0A1"`p * h2 l s *"`(X l <A1"`p * h2 l s *"`(X l <A1"`0p * h2 l s *"`(8X l <0A1"`Pp * h2 l s *"`((XX l <A1"`pp * h2 l s *"`H(xX l <HA1"`0p * N p l  @ h2 l s *"`(8Xh2 l s *"`h(Xh2 l s *"`((XXh2 l s *"`(Xh2 l s *"`H(xXh2 l s *"`(Xh2 l s *"`h(Xh2 l s *"`(Xh2 l s *"`(Xh2 l s *"`(Xh2 l s *"`(X l <A1"`Pp *  l <\A1"`Pp *  l <8A1"`p *  l <A1"`pp *  l <A1"`pp *  l <4A1"`0p *  l <Dd1"`0p *  l <d1"`p *  l <d1"`Pp *  l <Pd1"`Pp *  l < d1"`p *  l <d1"`pp *  l <d1"`0p *  l <d1"`p * h2 l s *"`(X l <d1"`p * h2 l s *"`(X l <d1"`0p * h2 l s *"`(8X l <%d1"`Pp * h2 l s *"`((XX l <|'d1"`pp * h2 l s *"`H(xX l <+d1"`0p * f l 6g @  f l 6g `@ ` f l 6g @ P f l 6g  @  f l 6g @  f l 6g @  f l 6g @@  f l 6g @  f l 6g @  f l 6g `@ ` f l 6g @ P f l 6g  @  f l 6g @  f l 6g @  f l 6g @@  f l 6g @  f l 6g 0@ 0 f lB 6g @  f l 6g @  f lB 6g @ P f l 6g @  f lB 6g @  f l 6g p@ p f lB 6g @@  f l 6g 0@ 0 f lB 6g @  f l 6g @  f lB 6g @ P f l 6g @  f lB 6g @  f l 6g p@ p f lB 6g @@  ^z @ ` l P`,$D0N  `  l P  h2 l s *"` 8H h2 m s *"`h H h2 m s *"`( XH h2 m s *"` H h2 m s *"`H xH h2 m s *"` H h2 m s *"`h H h2 m s *"` H h2 m s *"` H h2 m s *"` H h2  m s *"` H   m <:d1"`P `  *   m <=d1"` `  *   m <@d1"` p`  *   m <8Dd1"` 0`  *  m <Gd1"` `  *  m <@Kd1"` P`  *  m <Nd1"`P `  *  m <dRd1"` 0`  *  m <Ud1"` `  * h2 m s *"` H h2 m s *"` H  m <Yd1"` 0`  * h2 m s *"` 8H h2 m s *"`( XH  m <]d1"` p`  * h2 m s *"`H xH  m <ad1"` P`  *  m <dd1"` `  *  m <@hd1"`0 `  *  m <kd1"` P`  *  m <nd1"`p `  *  m <rd1"`0 `  *   m <`ud1"`p `  *  !m <xd1"` `  * N   `  "m  P   #m <}d1"` `  *  $m <|d1"` ` `  *  %m <td1"` `  *  &m <Ȇd1"`@ `  *  'm <d1"` ` `  *  (m <0d1"`@ `  *  )m <d1"` `  *  *m <d1"` `  * h2 +m s *"`8 hH h2 ,m s *"` H h2 -m s *"`X H h2 .m s *"` H h2 /m s *"`x  H h2 0m s *"`   H h2 1m s *"`  H h2 2m s *"`  ( H h2 3m s *"`  H h2 4m s *"`  H H h2 5m s *"`   H  6m <d1"`  `  *  7m <dd1"` @`  *  8m <d1"` `  *  9m <d1"` ` `  *  :m <d1"`` `  *  ;m <d1"` `  *  m s *"` (H  ?m <d1"` @`  * h2 @m s *"`  H H h2 Am s *"`8  h H  Bm <Ld1"` `  * h2 Cm s *"`X  H h2 Dm s *"`x  H  Em <ld1"`` `  * N  `  Fm `h2 Gm s *"`h H h2 Hm s *"` H h2 Im s *"` H h2 Jm s *"` H h2 Km s *"` H h2 Lm s *"` 8H h2 Mm s *"` H h2 Nm s *"`( XH h2 Om s *"` H h2 Pm s *"`H xH h2 Qm s *"` 8H  Rm <D 9,$@0 n Te !?"6@ NNN?N$/ M32 bitsff n Te !?"6@ NNN?N  M32 bitsff*az @ ` n P`,$D0N p n @ h2 n s *"`(8Xh2 n s *"`h(Xh2 n s *"`((XXh2 n s *"`(Xh2 n s *"`H(xXh2  n s *"`(Xh2 !n s *"`h(Xh2 "n s *"`(Xh2 #n s *"`(Xh2 $n s *"`(Xh2 %n s *"`(X &n <g1"`Pp *  'n <Lg1"`Pp *  (n <g1"`p *  )n < g1"`pp *  *n <g1"`pp *  +n <g1"`0p *  ,n <pg1"`0p *  -n <g1"`p *  .n <g1"`Pp *  /n < g1"`Pp *  0n <x#g1"`p *  1n <&g1"`pp *  2n <@"g1"`0p *  3n <4.g1"`p * h2 4n s *"`(X 5n <p0g1"`p * h2 6n s *"`(X 7n <05g1"`0p * h2 8n s *"`(8X 9n <8g1"`Pp * h2 :n s *"`((XX ;n <H;g1"`pp * h2 g1"`0p * N p >n  @  h2 ?n s *"`(8Xh2 @n s *"`h(Xh2 An s *"`((XXh2 Bn s *"`(Xh2 Cn s *"`H(xXh2 Dn s *"`(Xh2 En s *"`h(Xh2 Fn s *"`(Xh2 Gn s *"`(Xh2 Hn s *"`(Xh2 In s *"`(X Jn <XFg1"`Pp *  Kn <Hg1"`Pp *  Ln <TLg1"`p *  Mn <Pg1"`pp *  Nn <Sg1"`pp *  On <Wg1"`0p *  Pn <Zg1"`0p *  Qn <4^g1"`p *  Rn <ag1"`Pp *  Sn <eg1"`Pp *  Tn <hg1"`p *  Un <`lg1"`pp *  Vn <pg1"`0p *  Wn <sg1"`p * h2 Xn s *"`(X Yn <wg1"`p * h2 Zn s *"`(X [n <zg1"`0p * h2 \n s *"`(8X ]n <L~g1"`Pp * h2 ^n s *"`((XX _n <g1"`pp * h2 `n s *"`H(xX an <܆g1"`0p * N  `  bn  `h2 cn s *"`h H h2 dn s *"` H h2 en s *"` H h2 fn s *"` H h2 gn s *"` H h2 hn s *"` 8H h2 in s *"` H h2 jn s *"`( XH h2 kn s *"` H h2 ln s *"`H xH h2 mn s *"` 8H  nn <8g1"`P `  *  on <g1"` `  *  pn <g1"` p`  *  qn <8g1"`p `  *  rn <g1"` 0`  *  sn <Ȝg1"`0 `  *  tn <8g1"` `  *  un <g1"` P`  *  vn <4g1"`P `  *  wn <g1"` `  *  xn <g1"` p`  *  yn <ذg1"` 0`  *  zn <Hg1"`0 `  *  {n <g1"` P`  * h2 |n s *"`( XH  }n <g1"` p`  * h2 ~n s *"`H xH  n <,g1"`0 `  * h2 n s *"`h H  n <g1"`P `  * h2 n s *"` H  n <\g1"`p `  * h2 n s *"` H  n <g1"` `  * N p n  `h2 n s *"`(8Xh2 n s *"`h(Xh2 n s *"`((XXh2 n s *"`(Xh2 n s *"`H(xXh2 n s *"`(Xh2 n s *"`h(Xh2 n s *"`(Xh2 n s *"`(Xh2 n s *"`(Xh2 n s *"`(X n <g1"`Pp *  n <o s *"` i3 ?o <i1"`VF * h2 @o s *"`i Ao <j1"`V- * h2 Bo s *"`i Co <Lj1"`V * N  p :V Do  p :VN  p   Eo  p  h2 Fo s *"` h2 Go s *"` h2 Ho s *"`  Io < j1"` p  *  Jo < j1"` p m  *  Ko <tj1"`m p  *  Lo <j1"` p   * h2 Mo s *"`3 Z  No <pj1"` p m  * N  :V Oo  :Vf Po 6g  Vf Qo 6g  :Vf Ro 6g G Vf So 6g  GVN ` p V To ` p VN p :  Uo p : h2 Vo s *"`g  h2 Wo s *"`   Xo < j1"`p S  *  Yo <j1"`Sp   *  Zo <#j1"`p   * h2 [o s *"` @  \o <&j1"`p S  * h2 ]o s *"` '  ^o <+j1"`p :  * f _o 6g - SVf `oB 6g ` zVf ao 6g  Vf boB 6g  VN p V co p VN :p m  do :p m h2 eo s *"`M s h2 fo s *"`  h2 go s *"`3 Z  ho <00j1"`:p   *  io <3j1"`p   *  jo <6j1"` p m  * h2 ko s *"`   lo <;j1"`p   * f mo 6g a Vf noB 6g  Vf oo 6g  Vf poB 6g  GVf qo 6g  Vf roB 6g  Vf so 6g S :Vf toB 6g G Vf uo 6g  mVf voB 6g z :Vf wo 6g  Vf xoB 6g  Vf yoB 6g  Vf zoB 6g  mVf {oB 6g  Vf |oB 6g  Vf }oB 6g   TVf ~oB 6g - Vf oB 6g T Vf oB 6g a :VN  m  o  p m h2 o s *"` h2 o s *"` & h2 o s *"` h2 o s *"` h2 o s *"` h2 o s *"` h2 o s *"`g  h2 o s *"`  h2 o s *"`M s h2 o s *"`  h2 o s *"`3 Z  o <Fj1"`  *  o <0Jj1"` :  *  o <xMj1"`:  *  o <Pj1"`  *  o <Tj1"`  *  o <PWj1"` m  *  o <Zj1"`m  *  o <]j1"`   *  o <xaj1"` S  *  o <,ej1"`S   *  o <hj1"`   *  o <4lj1"`:   *  o <oj1"`   *  o <Xsj1"`  m  * h2 o s *"`M s  o <vj1"`:  * h2 o s *"`3 Z  o <zj1"` m  * h2 o s *"` @  o < ~j1"` S  * h2 o s *"` '  o <ԁj1"` :  * h2 o s *"`   o <j1"`   * P)z  p ` o P`,$@0 N  `0 o  V`h2 o s *"`   o <̉j1"`  0 *  o < :p <l1"` : P *  ;p <l1"`:  P *  p <m1"` m P *  ?p <m1"`m  P *  @p <D m1"` P *  Ap <m1"`SP *  Bp <H m1"`SP *  Cp <m1"`P *  Dp <Hm1"`:P *  Ep <m1"`P *  Fp <m1"` P *  Gp <#m1"`  P *  Hp <t&m1"`  P * h2 Ip s *"`  > Jp <(*m1"`m  P *  Kp <-m1"`SP *  Lp <X1m1"`:P *  Mp < 5m1"` mP * h2 Np s *"`s> Op <|8m1"`P *  Pp << ^p <0jm1"`-yP *  _p <mm1"``P *  `p <Tqm1"`FP *  ap <tm1"`-P *  bp <\xm1"`P * A cp 0{mf ,$@0 bit[64] IPsketched (bit[64] x) implements IP { bit[64] result; bit[32] table[8][16] = ??; x = (x>>??) {|} (x< x) P7 dp 0m"`p0 p*,$@0 3table[i][permutation(x)]; table[i][permutation(x)];4433$H l 0޽h ? &nnn'n}nn5nnn)ntnn*nnn,nnn7nxnn-nnn 9nnn /nonn 0nnn ;nnn 1nnn2nwnn=nnn3nznnJnnnKnnnnYnnnMnrnnNnnn[nnnPnnnQnynn]nnnSn{nnTnnn_nqnnUnnnVnunnannn Wnnn!l*ll"lll#l/ll$lll%l+ll&lll'l,ll(lll)l0ll*lll+l-ll,lll-l.ll.lll/l1ll0lll1l=ll2l!ll3lFll4l"ll5l?ll6l'll7lAll8l#ll9lIll:l$ll;lCll<l(ll=lDll>l%ll?lLll@l&llA#mymmB mammC(m}mmD mXmmE$mmmF%mmmGm\mmHmimmI)mmmJmSmmK&m|mmLmcmmM'mmmNm[mmO*mmmPm^mmQ6mwmmRmRmmS?mmmTmVmmU8mmmV memmW:mmmXm]mmYBmvmmZm_mm[+B#style.visibility<*n%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*n%(D' =%(D2' =%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*o%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*n%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*n%(D' =%(Df' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*o%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*o%(D' =%(Df' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*o%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*(p%(DH' =%(D' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*(p%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*n%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*n%(D' =%(D' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*n%(D' =4@BBBB%(E' =1B B`BPB1:Bhidden*3>+B#style.visibility= `B<*lD' =1:Bvisible*o3>+B#style.visibility<*l%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*l%(DL' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*cp/%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*cp/B%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*cpB`%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*cp`%(D ' =%(D ' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*cp%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*cp%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*cp%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*cp%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*cp%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*cp%(D@' =%(D' =%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*dp%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*dp4%(+ L0 x(  xx x c $m< @`  m  x <4mU   bit[N] permutation(bit[N] x) { bit[N] result; int i=0; loop (??) { result ^= x>>i & ??; result ^= x<+B#style.visibility<*@`%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*`%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+>  \(  x  c $w < @`     c $x <`<$0   H  0޽h ? ̙33___PPT10.0c9+[W_D' = @B DI' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*$%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%P%(Ds' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*Qm%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*m%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(Ds' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* O%(+8+0+  +r   \(  x  c $ q< @`  q   c $ q<` <$@0 q H  0޽h ? ̙33NF___PPT10&.I@+ED' = @B D' = @BA?%,( < +O%,( < +DL' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*,%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*,F%(D' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*G%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*'%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*'u%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*uw%(D' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*w%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+  `\(  x  c $< @`     c $<` <$0  H  0޽h ? ̙33___PPT10.P.++D0' = @B D' = @BA?%,( < +O%,( < +D' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*(%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*([%(D ' =%(D ' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*\%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*R%(+8+0+  +  `(:(  (r ( S H/q< @`  q  ( S  <`  q "P@08XH ( 0޽h ? ̙33___PPT10i.F@+D=' = @B +ҳ L0 MM{DJ(  x  c $3q< @`  q x  c $4q<`   q "z `    D` ,$@0`  0`  `  0  `  0  `  0     <|9q ` ,$0 5x   < f2,$0 9countNz Pw   ;P,$@0   <p Pw 70   <@qw 70  <Eqpw 70  <Cqpw 70  <Kq,$0 7oneNz    D,$@0  <Nq p 70  <Rqp  70  <Vq 0 70  <@Uq0  71 @ <ZGeHNdIe ,$@0:z   ,$@ 0TB  c $DTB  c $DB  c $DP,$@ 0B  c $D ,$@ 0"  <ZG;(HI][,$@ 0Iz `  4`,$@ 0r  <,`q` ;+2  0C"?@2   0C"? P@cz 0 ! T,$@0r " <dq0 Umux 2 # 0C"?0.`2 $ 0C"?^0`" % <GFH^NI(i 4,$@0" & <GFHIn#84,$@0" ' <GM6HDIAT,$@0 ( <jqp<,$0 9count*z ZG ) kZ,$@0 * <xnqZG . + <rqG . , <XvqGz . - <yqzG .B . c $DZ,$@0B / c $DP,$@0B 0 c $DDPD,$@0B 1 c $DDt,$@0" 2 6ZHIzFD,$@0" 3 <ZGR'H4Ih$,$@0%z `p  4 `$,$@0r 5 <q`p  ;+n2 6 0"`pn2 7 0"` pP" 8 <GJ HIg,$@0" 9 <GGHI8,$@0" :@ <ZG@)Hf{IRkP,$@0 ;@ <ZG)&HVI)&P ,$@0 < <Ѕq p<x ,$0 9count*z Z   =  Z? ,$@ 0 > <TqZ   . ? <q   . @ <Pq z  . A <qz   .B B c $Dd Zd ,$@!0B C c $Dd  ,$@"0B D c $D P ,$@#0B E c $D  ,$@$0" F 6ZHlI ` ,$@%0" G <ZG;(HDIBT 8 ,$@&0cz  P  H  t ,$@'0r I <Xq P  Umux 2 J 0C"? 6 2 K 0C"?f  Iz  0  L  T ,$@(0r M <q 0  ;+2 N 0C"?  2 O 0C"?P  " P <G/*H9Id  ,$@)0" Q <GRQHINh ,$@*0" R@ 6ZH`Ib  ,$@+0 S@ <ZG HOI  , ,$@,0 T <q p< ,$-0 9count*z Z K U  Zo ,$@.0 V <0  0"`0 ,$@?0#  <0q e g,$@0 F(x) = F33H  0޽h ?"$% &#'"125x3/68 79 /w: v; vEF MKGCNPOQCJRISI]^ap_[bd[oecfnrsnt ̙33ee___PPT10~e.(P]+^Dc' = @B DMc' = @BA?%,( < +O%,( < +Db' =%(D,b' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*!%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*&%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*'%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*(%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*)%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*.%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*/%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*0%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*1%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*2%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*3%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*4%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*8%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*9%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*:%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*;%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*=%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*B%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*C%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*D%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*E%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*F%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*G%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*H%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*L%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*P%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*Q%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*R%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*S%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*U%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*Z%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*[%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*]%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*^%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*_%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*`%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*d%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*e%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*f%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*g%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*h%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*m%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*u%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(++0+ t ++0+ t ++0+t ++0+(t ++0+<t ++0+Tt ++0+gt ++0+t +! L0 ,$(  ~  s *< @`     s *<` <$0    <ftGyHz   ,$D0 (vS(x1, c)=P(x1) . & . S(xk, c)=P(xk) I ={ x1, x2, & , xk } P;( 3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f 3f 3f3f 3f3f 3f3f>T  <l GH @ ,$D0 S(x, c) ! P(x) N3f3f3f$H  0޽h ?/  ̙33 ___PPT10.;UF+יD$' = @B D' = @BA?%,( < +O%,( < +D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*7%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*7V%(D' =%(DJ' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*Vu%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*v}%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*}%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*+%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*+4%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(++0+t ++0+t ++0+t +  @P(  @r @ S  < @`    @ S !<` <$0  H @ 0޽h ? ̙33sk___PPT10K.Pp++D' = @B D' = @BA?%,( < +O%,( < +D,' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*@%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*@2%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*@2m%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*@m%(D' =%(DM' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*@%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*@%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*@%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*@'%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*@'`%(+8+0+@t +  \(  x  c $ t< @`  t   c $t<` <$0 t H  0޽h ? ̙33___PPT10t.-0H+FD' = @B D' = @BA?%,( < +O%,( < +D ' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*7%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*7d%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*d%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(Ds' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*/%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*/o%(Ds' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*oz%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*z%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(+8+0+t +l L0 kc/^(  x  c $`t< @`  t X  0  X  0  X  0  X  0 0 X  0 0 X   0 P X   0 P X   0  X   0  X   0  X  0 0 X  0 0 X  0 P X  0 P X  0 8 X  0 8 X  0 8 X  033 08 X  0 08 X  0 P8 X  0 P8 X  08  X  08  X  0338  X  08 0 X  08 0 X  08 P X  08 P X   0 XX ! 0 XX " 0 XX # 0 0XX $ 0 0XX % 0 PXX & 0 PXX ' 0XX ( 0XX ) 0XX * 0X0X + 0X0X , 0XPX - 0XP . 0tf0 Ggrid sten(grid in, real a, real b) for (i,j) in [(1,1), (n-2,n-2)] outi,j = a*ini-1,j + b*ini,j-1 + b*ini+1,j + a*ini,j+1 return out; O     f2 [ 033"`P  f2 \ 0"`  H  0޽h ? ̙33___PPT10i.PR+D=' = @B +Q3 L0  7L(  x  c $t< @`  t   c $t<`<$0 t X  0@pX  0ppX  0ppX  0pX   0 pX   0 pX   0@pX   0@X   0pX  0pX  0X  0 X  0 X  0@X  0@0X  0p0X  0p0X  0330X  0 0X  0 0X  0@0X  00@X  00pX  0330pX  00X  00 X  00 X   00@X ! 0@PX " 0pPX # 0pPX $ 0PX % 0 PX & 0 PX ' 0@PX ( 0P@X ) 0PpX * 0PpX + 0PX , 0P X - 0P X . 0P@f2 / 033"`HHxf2 0 0"`xHxRz 0P \ ,$@0` ] 0f3 0` ^ 0f3 P2 ` 0"`,$D02 d 0f3"` <,$@02 e 0f3"`l8h,$D0  0t P,$ 0 )grid sten(grid in, real a, real b) for i in [??,n-??] for j in [??,n-??] t = a*ini+??,j+?? + b*ini+??, j+?? ; outi+??, j+?? += t ; outi+??, j+?? = t ; return out"E     Q  G  0v P,$ 0 grid sten(grid in, real a, real b) for i in [??,n-??] for j in [??,n-??] t = a*ini+??,j+?? + b*ini+??, j+?? ; if (expression(i,j,n)) outi+??, j+?? += t ; if (expression(i,j,n)) outi+??, j+?? = t ; return out"E     !  Q  H  0޽h ? ̙33%___PPT10.Ud+S0D)' = @B D' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*1%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*`%(DL' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*d%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*e%(DL' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*e%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*d%(D' =%(DM' =%(D' =A@BBBB0B%())))?E' =1B B`BPB1:Bhidden*3>+B#style.visibility= `B<*D' =1:Bvisible*o3>+B#style.visibility<*%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(++0+v ++0+v ++0+v +}  $(  r  S v< @`  v r  S H!v<`  v H  0޽h ? ̙33___PPT10i.y@+D=' = @B +v L0 `h\(  hx h c $4v< @`  v  h c $5v<` <$0 v H h 0޽h ? ̙33:2___PPT10.3<5++D' = @B Di' = @BA?%,( < +O%,( < +D' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*h%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*h>%(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*h?F%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*hFh%(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*hhq%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*hq%(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*h%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*h%(+8+0+hv + 0 @(  X  C d46   +  S J+d [  +  H  0i6Ɍ ? 3380___PPT10. ^0 n(  d  c $d46   v  s *vd [  v XDSo what do we mean by a sketch? A sketch is an incomplete description of the final product you want to implement. It contains the high level features that you want your implementation to have, but it leaves it up to the system to fill in the details. Transition: SKETCHING, AT LEAST FOR NOW, IS DOMAIN-SPECIFIC METHODOLOGYH  0i6Ɍ ? 3380___PPT10.O/$0 04(  d  c $d46   v  s *vd [  v  H  0i6Ɍ ? 3380___PPT10.G4$0 P4(  d  c $d46   v  s *vd [  v  H  0i6Ɍ ? 3380___PPT10.G4$0 4(  d  c $d46   v  s *4vd [  v  H  0i6Ɍ ? 3380___PPT10.8tЭ$0 4(  d  c $d46   v  s *\vd [  v  H  0i6Ɍ ? 3380___PPT10.G4$0 4(  d  c $d46   v  s *vd [  v  H  0i6Ɍ ? 3380___PPT10.G4$0 4(  d  c $d46   v  s *tvd [  v  H  0i6Ɍ ? 3380___PPT10.0Y$0 4(  d  c $d46     s *xd [    H  0i6Ɍ ? 3380___PPT10.@7y$0 4(  d  c $d46     s * d [    H  0i6Ɍ ? 3380___PPT10.#@$0 04(  d  c $d46     s *d [    H  0i6Ɍ ? 3380___PPT10. ;$0 P 4(   d   c $d46      s *$d [    H   0i6Ɍ ? 3380___PPT10.q`a$0 ph4(  hd h c $d46    h s *d [    H h 0i6Ɍ ? 3380___PPT10.t$0 t4(  td t c $d46    t s *Dd [    H t 0i6Ɍ ? 3380___PPT10.tB$0 |4(  |d | c $d46    | s *T$d [    H | 0i6Ɍ ? 3380___PPT10.vvn:$0 4(  d  c $d46     s *)d [    H  0i6Ɍ ? 3380___PPT10.PT"$0 4(  d  c $d46     s *l/d [    H  0i6Ɍ ? 3380___PPT10.:B$0 04(  d  c $d46     s *4d [    H  0i6Ɍ ? 3380___PPT10.I`$0 p4(  d  c $d46     s *:d [    H  0i6Ɍ ? 3380___PPT10.0 $0 4(  d  c $d46     s *?d [    H  0i6Ɍ ? 3380___PPT10.>@-#$0 4(  d  c $d46     s *(Ed [    H  0i6Ɍ ? 3380___PPT10.($0 4(  d  c $d46     s *Jd [    H  0i6Ɍ ? 3380___PPT10./PH/ 0 (  X  C d46     S Od [    H  0i6Ɍ ? 3380___PPT10.yz 0 p,(  ,X , C d46    , S LUd [    H , 0i6Ɍ ? 3380___PPT10.FR 0 D(  DX D C d46    D S Zd [    H D 0i6Ɍ ? 3380___PPT10.P`*&$0 pl4(  ld l c $d46    l s *l`d [    H l 0i6Ɍ ? 3380___PPT10.32<0 ((  ^  S d46     c $ed [    H  0i6Ɍ ? 3380___PPT10.P.0 0((  ^  S d46     c $kd [    H  0i6Ɍ ? 3380___PPT10.` 0 p(  X  C d46     S pd [    H  0i6Ɍ ? 3380___PPT10.$ԥ "xYolS?I 4ßqx .~s.3`_E/@R>A;iҴkmҊ>~*IC[5}~ M1{{=~_k?{rНB-UWq_z9;B9c1I H :u*ܗjf^}oW:߮+'"x7%ι~듋 wWʺAK z>E_Q9 Y/s}PR,C7,@X裆\&DOkXc.ݼڳPۧ.*gE`9GJ.?U`gmcC hf`# lZ6`; 6`  N t L,%0ۣQ @H{ca阨cb0䏇Ԑ?(AgP c;ۃݯ'Ǵp1<W"~LKhңMD4Y"kF.gĎi9 tdYE u:$ERX /(N1Pj鎆}$x ==zԓMkЛ՟7E§hSKR4_#bSD=rf~E=h|@7&)҄Hayg ZNQnvB.g;l@i1,^(qW.9$&njibUum ]HU]ů:Vͻüf|Kn0}Z7%z%_n4e,\K|ܼJb3۶XA?<__?Ӣx[媪t;V-û393ik)A"섇&6}Z,\O;Qr˹zQ RǙfMl9k@@N0kyءmd4'T">Фg0qh,:&h4O:~?_RVICpXQ+_Wbj{^||AͿBG@0иgH5Ip"*IC61~AD!12ˌI}Y%n<]j\u]IߐquWzNGPuUxUi ˽]ʬϬ%)I:&O1_=eYi4%@V6XJ\se Z " "jhKQ_]O(e쒢/vNE XfdP[RǡMJP ʳhUI\i:9~H+$dsB YvX3؁okdB*ṼGiɘk?Ch:wCr -hfIdF9kt&8ifg)aXu>J1>#t )-F,=|V} ܣ%֗<( >906{{}ҫ֪OLGWR̊:,֊+(X+. r UܽLGH ^%߸%0VDøgӅ~HTi)Yv SsBF/k9 +3Gf3zs8a:-]Ji oB=oBOƓYqh=AQk=?;yʵq=VQq#[=Iڸԧ4cPdͧ> {^rdw۬?ћ^rvUxdRI/8m'?RZ:HM&Mm͟Ўuk")3sBϴ>6q`Hj&핫zqB_~Wzjk:(2qH7`04d& j&]=b:9)CW,cs4'yyfs%OpN;_-<;Rqug].BnT[Հ廅H/pE/dҘYa|Iƃ#*[m9D*̎5T#ǹ췓T\Td߯V S- {*}T)UIzD}_ٮ(_5KRyR҂$;dQlFN {9Aә}~}Ub-λpvxwyv(3:rQY]²%qN,{J *r/0S9B‚E:Hh#mZoF X&ag+]=mh#-| muv8"idF& Cqd‚FyC49RԲ1-22"3}M@|eJ#򥱽9:?mx@RvM1K+ٵ-.1򵎕Qsu˲ S*0ytW8F1ffbk~VmlSuShDzr@=ryҘQ“X?5Z0e^M`0:^giT k <Iu0Ueu2<y0W@PWc}0р.MT010Gs  #0O{0+0W "$ ') n/+C- M o/1 d3?Oh+'04 hp   ( 4@HProgramming by Sketching8Ras Bodik (with Dave Mandelin, Armando Solar-Lezama)Winther478Microsoft PowerPoint@аm% @@k iGg  iK  --$--'@"Montara Std Gothic-. +2 fProgramming by Sketching!,,!."System-@"Montara Std Gothic-. 2 "f Armando Solar   .-@"Montara Std Gothic-.  2 "- .-@"Montara Std Gothic-. =2 "($Lezama, Liviu Tancau, Gilad Arnold,  .-@"Montara Std Gothic-. 2 @fRastislav Bodik .--DfD$-@"Montara Std Gothic-. 2 @$, Sanjit Seshia .-@"Montara Std Gothic-. 332 @ UC Berkeley, i  .-@"Montara Std Gothic-. 2 @Rodric Rabbah  .-@"Montara Std Gothic-. 332 ^fMIT, .-@"Montara Std Gothic-. K2 |f-Kemal Ebcioglu, Vijay Saraswat, Vivek Sarkar      .-@"Montara Std Gothic-. 33 2 |IBM.-՜.+,0     On-screen Show UC Berkeleyn -Times New RomanArialMontara Std Gothic Lucida SansMath C Wingdings Arial Narrow Miriam Fixed Courier NewMath BMath A GaramondMathematica3MonoDefault DesignCustom Design1_Default Design Programming by Sketching Merge sort Merge sortThe sketching experienceThe spec: bubble sortMerge sort: sketchedMerge sort: synthesizedSketching: spec vs. sketch#How sketching fits into autotuningSKETCH8Ex1: Isolate rightmost 0-bit. 1010 0111  0000 1000!Programmer’s view of sketches Meaning of sketchesBeyond synthesis of literalsExample 3: IP from DES.&Template for an arbitrary permutationSynthesizing polynomialsKaratsuba’s multiplication Sketch of KaratsubaSemantic view of sketchesSynthesis algorithm: overview,Ex : Population count. 0010 0110  3Synthesis as generalized SAT Case studyFinite programs!Stencil computations: an exampleAn implementation ideaLossless abstraction,Example: divide and conquer parallelization  Fonts Used Design Template Slide Titles_TAWintherWinther  !"#$%&'()*+,-./0123456789:;<=>?@BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdefghiklmnopqstuvwxyRoot EntrydO)Pictures@Current UserrSummaryInformation(bPowerPoint Document(AxADocumentSummaryInformation8j