From owner-p4-projects@FreeBSD.ORG Mon Nov 26 23:48:05 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EED5E40D; Mon, 26 Nov 2012 23:48:04 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id AD08E40B for ; Mon, 26 Nov 2012 23:48:04 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 91C718FC08 for ; Mon, 26 Nov 2012 23:48:04 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.5/8.14.5) with ESMTP id qAQNm4qF085050 for ; Mon, 26 Nov 2012 23:48:04 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.5/8.14.5/Submit) id qAQNm4w1085047 for perforce@freebsd.org; Mon, 26 Nov 2012 23:48:04 GMT (envelope-from brooks@freebsd.org) Date: Mon, 26 Nov 2012 23:48:04 GMT Message-Id: <201211262348.qAQNm4w1085047@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 219850 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 26 Nov 2012 23:48:05 -0000 http://p4web.freebsd.org/@@219850?ac=10 Change 219850 by brooks@brooks_zenith on 2012/11/26 23:47:43 Convert CheriBrowser from blue on black to black on white. Expand the outlines of sandboxes to 2px and change the outlines to red as in CheriPoint. Fix display of .cpt directories. Add cheri and capsicum icons to the icon file along with a cheri point icon and an hourglass. Affected files ... .. //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/browser.c#6 edit .. //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/images/browser.png#3 edit .. //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/images/icons.png#2 edit Differences ... ==== //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/browser.c#6 (text+ko) ==== @@ -115,17 +115,17 @@ /* Beginning and ending colums of each sandbox type's name */ #define SB_IMG_SPACING 20 #define SB_IMG_NONE_BCOL 145 -#define SB_IMG_CAPSICUM_BCOL 223 +#define SB_IMG_CAPSICUM_BCOL 222 #define SB_IMG_CHERI_BCOL 350 #define SB_IMG_NONE_ECOL (SB_IMG_CAPSICUM_BCOL - SB_IMG_SPACING) #define SB_IMG_CAPSICUM_ECOL (SB_IMG_CHERI_BCOL - SB_IMG_SPACING) #define SB_IMG_CHERI_ECOL 445 #define SB_MINCOL SB_IMG_NONE_BCOL #define SB_MAXCOL SB_IMG_CHERI_ECOL -#define SB_MINROW (fb_height - 38) -#define SB_MAXROW (fb_height - 1) +#define SB_MINROW (fb_height - 31) +#define SB_MAXROW (fb_height - 4) -#define SB_SHOW_MINCOL 606 +#define SB_SHOW_MINCOL 604 #define SB_SHOW_MAXCOL 793 /* Start offsets for browser columns */ @@ -160,6 +160,7 @@ { 13, "badmagic" }, { 14, "directory" }, { 15, "application/x-dbm" }, + { 19, "x-application/cheripoint" }, { 7, "audio/*" }, { 8, "image/*" }, @@ -455,8 +456,11 @@ for (j = SB_MINROW; j < SB_MAXROW; j++) { for (i = sbdata[sb].bcol; i <= sbdata[sb].ecol; i++) { pixel = (j * fb_width) + i; + if (baseimage[pixel] == white) + continue; baseimage[pixel] = vwhite( - ((baseimage[pixel] >> 24) & 0xFF) / 2); + (((baseimage[pixel] >> 24) & 0xFF) / 2) + + 128); } } } @@ -493,7 +497,7 @@ value = (baseimage[pixel] >> 16) & 0xFF; bgimage[pixel] = (sbtype == SB_NONE) ? vwhite(value / 2) : (sbshow ? - vyellow(value) : vwhite(value)); + vred(value) : vwhite(value)); } } } @@ -580,16 +584,16 @@ { u_int32_t textbuf[TEXTSPACE*CHAR_HEIGHT]; - memset(textbuf, 0, sizeof(textbuf)); - fb_render_text(text, 2, blue, black, textbuf, + fb_fill_buf(textbuf, white, TEXTSPACE, CHAR_HEIGHT); + fb_render_text(text, 2, black, white, textbuf, TEXTSPACE, CHAR_HEIGHT); fb_post_region(textbuf, colstart[(s/NROW)] + TEXT_OFFSET, FROW + (RHEIGHT * (s % NROW)) + BORDER, TEXTSPACE, CHAR_HEIGHT); if (sbshow && sbtype != SB_NONE) - fb_fill_region(yellow, colstart[(s/NROW)] + BORDER - 1, - FROW + (RHEIGHT * (s % NROW)) + BORDER - 1, - ICON_WH + 2, ICON_WH + 2); + fb_fill_region(red, colstart[(s/NROW)] + BORDER - 2, + FROW + (RHEIGHT * (s % NROW)) + BORDER - 2, + ICON_WH + 4, ICON_WH + 4); fb_post_region(icon, colstart[(s/NROW)] + BORDER, FROW + (RHEIGHT * (s % NROW)) + BORDER, ICON_WH, ICON_WH); } @@ -768,7 +772,7 @@ dbufp += len; } - da = fb_dialog(FBDT_PINCH_OR_VSCROLL, blue, black, blue, + da = fb_dialog(FBDT_PINCH_OR_VSCROLL, black, white, black, name, dbuf); switch (da) { case FBDA_OK: @@ -921,7 +925,7 @@ topslot = 0; render: - fb_fill_region(black, colstart[0], FROW, fb_width, NROW * RHEIGHT); + fb_fill_region(white, colstart[0], FROW, fb_width, NROW * RHEIGHT); for(curslot = 0; curslot < NSLOTS && topslot + curslot < ndents; curslot++) { dent = &dents[topslot + curslot]; @@ -971,14 +975,7 @@ errx(1, "invalid action"); if (topslot + action >= ndents) continue; - if (dents[topslot + action].entry.d_type == DT_DIR) { - if ((nfd = openat(dfd, - dents[topslot + action].entry.d_name, - O_RDONLY|O_DIRECTORY)) == -1) - goto render; /* XXX: display error */ - retfd = nfd; - goto cleanup; - } else if (strcmp("image/png", + if (strcmp("image/png", dents[topslot + action].desc) == 0) { show_png(dfd, dents[topslot + action].entry.d_name); @@ -994,6 +991,14 @@ action].entry.d_name); fb_post(bgimage); /* Restore background */ goto render; + } else if (dents[topslot + action].entry.d_type == + DT_DIR) { + if ((nfd = openat(dfd, + dents[topslot + action].entry.d_name, + O_RDONLY|O_DIRECTORY)) == -1) + goto render; /* XXX: display error */ + retfd = nfd; + goto cleanup; } else { if (verbose) printf("opening non-directory not " ==== //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/images/browser.png#3 (text+ko) ==== @@ -1,46 +1,48 @@ PNG  ---9_sȑ#kjժ)66VӺu 6T -BΓ 6h߾} -B_4ibk֬lݺn))Icƌ zēЌ$r-… _͓yIz%I23}g.]z~%I]vuQJٳuQI9GJo~,Y2`>*V!CüwG^xᅐJN8QRλA*U*- Sjjv0>;)ߩ.[l?+.#-sʗ/O7|(Qo+uP߾}:য়~ -nȧ@$TRſHZZeggܹs'k$YJ {6lhaaaV~}_jf9@'%%$Dûuf7fftR֭UPZliv͟rʖif9MڵRJYƍ?˗h. -^.=j6l7ЂƶmۂZ*- Ma6GOF -[ʕ+I'NXZZ]wuV~}4hܹ̞  ^{ըQ#߲|r3+-#-/k*ժUw}^XbyV3n-h|`ff?(߱,8d[FF۷ώ?Y>zh33~8ѣG-55^xᅐw_tMflYſ7_6qwfʕm߾}ff6|xJ*Ur7TW^yr$Fw(n喀irԭ[7ok({7.. ǽp'LA1˹uӿy- .MQ6Gٲe1˨Qǚ4irW_}effCPׯ_ƌcff?o53?0)w?΁žcg@B}L<J^, B<ȑ#G/ܝm? rIsqkԨQ!P~mtvwϬ܎9b?~(>[mr]3gÊ럷eʔ1)u. ӏ?z/gffֺuB틄{WNlٲ-`u/wرߝ_zzz |qYf>}jA^$GNzVJy_|-Wr}??~ȳ˗@YZ5/_^f*|˖-өS h׮]ֱQFrz+Ƈرc*S6ltEEE -婧w97鬬,رC*SLw>Dg֒%K -8JHrry"͛*w{n?~<|ǎ͛5k滎K/T+Vz&Ѫ[$̂Zt86ޒ.Ny?{Ws-ܢ'j̙Aӹ7E8_֬Y]*>>@Ӈi - SjjZT5dh!d޽ڶmjԨryYYY!/¥Q)3vXkȑZ+++K ,رc5y<>α%J;>U=zNP؟K'NRA9rDwuW5j9sz9rj -nݪ6mڨ\rѣ$O?-P}5j{GGO͙3GׯҥKUjUtyӕ.]:iʗ/5j(,,,d=*U$)Cu_Կ0s6A6mR>}ZݺuS=teiȐ!ׯ| -s4IRʕ2an? ?Sۻw222t%h?~p I9SN!OkVqqq/jժ3.3sGyD}Ucwoqxl4p@M2%nI9=zhI9?O -#e˪N:!S:.s;ufϞٳgKT1coC=ѣG`+9/lcΝ*))IuQݺu5m4bz̙4hڵkݻԩS~gbf,)߼ 7СCE߾}զM8p@W\qEwY T3_ddVݻwMP"##.wgsK9sZjƍkzu֭[5aM0Aaaaѣf͚/;9 v?W|7]vr.w^s5!ǷhBƍUT)ر\û[5e+E|l"33S>$iĈL}Sؿ%55USN$jJ$7NR·{4ORԾ}{Iy!HJJ -9[nK-JAA;" UVB<#z!3icccVcra'N03+"`={YN')͚5 WBz~}͛uaÆ?T @EF}4hrmذ̂; jѢ++X - -} -Zjr{ꩧeo|Uݻ,9P-\}vΟ??ϝ;,[M6yk׮%of9nͫ I9m(9֢E 3iuiӦ𰰰bرfK3?\ʗ/_-IEի}'-X dǧ裏}znflͫu@'EQcs/k5w111ffPa[{gs4i.\hfM{:zhPzͫ߭4lԱ_ -VFFFPӟ,MX5k w+)))r7{6 . %< + + 5 + 2 + 1 + + + +m +2$)tp3xtwձ~o)+cwK^Y l۵s[k?n{lvg+\ +u2IW&ye.szʻQӟ4;INR+Ԛz?Y5n?qv;a~Q9$K 6+|zЃc?бwYx`}6M?9nn?羔(kӟtv+_yveY[}U=\@H9HX%I{jLd?9Q'q?=]'7\ַu]+ k_Zի2#eO|;kI|in+wLWզ~uޔcUo\{~n}[OOxCЇN{/~ޒ;IJ攔i%}o|߬\LC6C3.><}~_חpcD-d׽uvZO)]X_/xGgF_^`\=gm5+@Fue&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+@tE&@+L+?݆1d\:kjۓ}pomx+@N{iy1 4jEə 32dpE @Y3Y&5i>ޏUP@!V}kiHsh1jY~Cu)Ȕ;ѽD/ y[(+k=eŖmI;('SG[[5'wv4Ѝn,c4lVzWZȚ'kz+cӈ6Cr=m~wH޲ W&9Qt;i},7[+m#H-Ij۴Te~G+ǷV?kUjS 6 +@Vt~-[I]1h~enlNAêaciۧi_svǓ3(S&u犼uL}4IVhʤU|LY ]Jl~_&y%x::( +I(K]}Kg5V}mFzٻ}_&mah=9ȾFǿ[|,ǔsUJ{Ԇ-ocIm.UZ3]H22\j1VynYn2hvsFKlt5&nvv7!t#1.SYJ_S25NOGUrn^AT( _wk'e\ŶM)?)sϔXQ8.~)K7]iK_ӷ͙neE's/ʯ4jO[uFYMiC &e^ĜMI٧|YUЗSgƳ ~ځ&ű+Wݬ{UvF93ϭֻFWlHF=(c+exQ|dKRkkwJeŮ}i KZ5z>WzK<ݜ_5Y:O++mO Wj'μTӱc;:YYɐ̉,͙)ǀks{v9F9ћweY)sxr2fZ@\ No newline at end of file ==== //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/images/icons.png#2 (text+ko) ==== @@ -1,62 +1,111 @@ PNG  --: I KC$z 6\xW-K^}=.8H DmKTsIZH%m3-2# LIl,i3B$D0fEe1Ϗ-)M%U1-?|wsCdl"f J+*Ẓ{/p9 K~+"e#i Gܚ(b#xa>5aF-TU`K+(Jxώg#n5e=秿 trЄsKoeǛoy~$9:?W xl}M})"z巾-}vDMHDn߾]~[ߒ^wj;~ .u -CJ&dzw?{<֭[S+hoo'?E?Jfvdա7n+V~H$p^>D7 -ւy~6%,tQA*0\+&ΐ -ppx =~O.Mߛ?[Μ% YGuuPW-؟+dVD]MKH!Y f^MQpȸS*jkQ Bs@<'BTPًs+1h?N7&jy_7-d?' dߖ!F>j -]ݗoRA>!SA]==)AIF -ygdYcw5\O{ouu O"60zmCm-E?RW7~->k@<_Tzx`B=IJc#/} A" VS}8p-iYBqU^oNE[6x0x--(.c.^;]S>eTmi%%xJ<8*a 82ȉ$GG0t&dj.j/i)Y6B;`Nt/L4M* AH6ic6eqd5+,Z ->'%^'nMRqH<žξNaaYs1(x.X}r؁پu5wJ[* S*ob{c[$VJCG 4f*z`uW+*z0Fb(=~|H`Ke_*?q#axO/*7S(,ժʪsDHz juC1`q~㇈&܃OaijVO'FZzrl Q(` P; ˶1tK,H0%!II}RCA̱hHHT__na`2LIYa wViy Áa۰ (oC$[AmD&+[jlh0fBb(> 11%BPiM"_))GvuL(Fx--!]QX-FS)~?ۨ|HUz<@4v-pAut3 -l$fB'!S-_ c ?m - S>ETӨ%~SSj2$S|X@7T _C4Nʴޱ\-OU}=бcQh3EE^?R]],66Z KBp,OYYr^M*e$$60@w"RNn Kn`-%'f!PUL 9QOp]1:33,s.@M}=qU((vfT -'ĒyE6@u+g ޝOPAEe#W_ڋOc(6UQAi҅I$W2M Fi]DiY) 26D"n'!h_s Y7@ -Mš-G phZ),Xd"O KFF#9ݗ{i]\( 6ѓC躙{"AqpDc)t✕M˯wǦ&-v9?-|Z-%"v7)|F-˲97F$ UͫBe - "?RQYFZ6b2gt^={;ÏgO>o- TQRᩧ6,;3-l[b2HX:gKjۧ BU`т8Q*)#uw=}iR3%;-%jjj+ <.~ūU_QSxѐpQFF̳~JSRRrꔕ)e*J(PQO4JE0"(ŋ&&R`L6e )%nnf0RCD!Lۑg˲O@I$&β,+We5-R>&L͚ew?۶y\fd1۟"S^/$^w23-ǎehtm~P9-vL=ztJʲe -Ja2KK R8 >Y !XliI -r::DG@4]т#3I&ǒup8L$ax,Fm{3jkeϋ wݹm)Z.6҅Hu^@MS# Z)MΉ 8u(==q}щu߆Jy"+Zkqfv HCggcD8󱁷=>0SUUY||?->P} 0ŀgO1>[ghNiPz J{6/,_|ND!sh:Ubt='TٺeUU';'#X~}d:eY 3I>z^H 3蘶*tiI`@VstO:`@V_4֬Y3Ѵ*e)B>f¼|:|;>0_>mlٲ S;p6>p6>0/رcfpZt~ /7t|;kkkUgfΒH&?}-1w-B-kU+WPU]E&(*χM*36:ɓo~6o~++Xf5Keǎ?~***XWx"TEE4ܱW_ʳxv}]{z.ٴi d(..SI~ee`(ŋXx1 Xd!s.ތ-EQ)-+eUc\{x?Lk .#L@[QQAeu5BUL EUPPP|h=Rp0:董$InF:OvږB{:V^--Bc{1LrQ]SEk2njjXаW_قr(.㴵q}}tvvn:.B~-AYyx]q:],Oݜ}*B" P\ wjrh4MCUT4&N*$OUu== =PT_h4šk|O-۶4"7 #tиK/TUuv@1:D"9?XmkXh1Th2:u Uq]Cٲe(LƱI%m|sSbMklDd٧'yB\9Q[=k>="g?5NuUPúC#*|o,Y1~^[O>j>-O}*}δt]aݪ,nx Z9w9m&#vEadTIJ$Dp5z$šG]ǼIŚ.)$Tvm*XK'I5PPxGWd_c+PR$UV,پDW NVBW}fqW>.n&"-IӴnnnqdikEA4(s 587o}uQWWc+Sn*hg:! eɓ'Ǒ/^̪U,ӧO#rb10 -PP |L&id2RT:![Z^6mbttT*E:0 ,*aNCg%*DbTTTpQdQ%H 4M,¶;,g -e*: %)X7OYr$AG"(x'O"ձdelsal pu^}\Czj͛inn.Đ*_ק׆(2::իWy~ TUe…ʕ+YhuuuTTT:LMq `tt>:::hoo6:;;D~0!I3H$u5̗a :%I2C2Ta]כ)\^q-@uvŞ={hjj"LyWJev`|$ZN7_g\ No newline at end of file ++ + + 5 + 2 + 1 + + + +m +SOhn^x+Ԝ$jWw_ -{ 1D w6.4#"Qё"|W A?#H@iiutd+l% @բ;0v4fϺ俾+bwp}>>kboE8p+<WTn.ջ? ۛn@y*+ h@ qA@Iua+a ofS\%/~+^b]+ 766"RoJEDEK.1i^N\T-((iB0!Z)jS~Z٠D\7C/6ϔ*~wq!$3祿|M4hFTDPyUӍpJs1Y+#*X$s+RV",)șR Q+v+7uTH]+F%:d‰ &. !++v-0[pWqNJZWE?GT] <5.p>k;sÏQ' hk_J L9x+%# + +,jPζ`Z;4@'V_\jĩ)=TCx::Gu +L9W +L7(w+{d{5&\]½/!7̎!a7|+Zpe>ڞ[Dj.]u<;v"vtT6'"W̘Iu ;Ex1E FtB*xhƇY$'#jnpBڰa}:J<~>^ WPLGMHjfl8-OĤ@c:k}KmOxNzgd6h=2KI$v`\D ;#]4ߎ,Bs`{#,Y}6sjF% Uڴkݦ̸Z +W#݅@pt`7xs+h9&~5M`+ Mm6 ݉4nLNjc7`+ZZZq(6JA)00%l5sġ8 9d;IX+ߛATq^e rQكcoo+k$h)~L1~MhcD2;48yLviXdiS5*:"9S|ꐥ5dOZ&֤騧OFKߧp^SIwb`J\ZI0:^MnTԻQn[\;͝h +|n  ;(+Ƌ1r=u& 2C8gBEΩx\8 _D-dE(ee7UV7ep-17;Gzm.vlwb` SA,^SF=`ǚCiI?de_f );90(ԜܼJhזNkE1?ȈBk mR,ZkÑ]֔~۰w‰E7WDŻYEy1 O_}PeRitr/!|]66N.E jTV`-|+D!7 aVDQ#jK2j$Y\njIFaUMwSO!: j;gG=Y\ifM51Gù87GVo +:h?(=J.ljLvj`L1?lSpj}Wnق6',z8FI">)԰5̏UeS4j̸%,eWU^eȀz*d ZW+yٰ?"U DKzɵNAıo)UEi=2Ѱ2 $-K/ V,F2nsmWUW\)5J.&Sg7r+V&Hg +齜 +%l>+J]R^= I})3wVOJp.,+l tvX'VؗbM` ZbglSn}gʃKD+K=y/+.5H 9l>\ƎӐN:QZ׮.@*Jt +#٘:vw럀Ʋ[EsÑeѵϭ/+$v +^mމ;"º.X%-qH'ǥ{ c{oxONă_8Oh+YHxRiה$M¤QQAY;˕Z6j\N#L.dn cȺ|_3W2h}p=#db,`}kJvsS Qq` 4@FUa+Z>'+[cڔɎH'rU1i9JHE}"'q #+4 'LI)+~5۳oGQ*a}TYQ +'cѦ-#wm (_.o3֥r.;1 +tRۡ8{.3 vq 0߼HXƷϬO"wi^ +o/ZxEc(WB8 %$WTTd$hULR**;S[#؅+("sYw୷wb׫єuې7nRi#M jLbMxsj(2sEꜜ6sQʕyDž+ಅIDT^r3L;)v@@=OUpGXSa-DX!tʀSv*=^EG5ΣL&t,m9'Cr 945`ˮ<|-+C*b9 Ec9A)5nJ_R[re{0nTֳِJ)iDsT6*Ջƙ.6&n0mm8rTq9MWRFN-$nV$!Y`KZ&$ {8X2}3zw9RRZMUiDQ{3 5#u/4~6u6` ++`>qbnq?N;N\F-Ylr;f%tLi+rҠ\ RkhLH"hGv^+e$[G5&jfbԩSMV۷OTW\ꐈ.?0_889Ng]  kPnh Z&B\owX&n?>gXwqKy6b#|"a6 ,`_ *ZB9VM36 zw= Ƀײ}"ܵ++ئw|b2 f}7dF2Gw~BX][͆:H+ȡC5'KMYp5En W Kx>hs+j+vn-UP* Fq>ISݵs7u!pIΙ+619Vʒ'#BڏrȤU֙:?+V&lS,)$s.+KҒ@tpA}Dg+BEXtʀ%nSiAX5]lS"$"8#~̫EJ,ee/6"q D+$6ab,U&U }z'3@{WŤůw*-ߢd]EO)p^C5%EΫMqTY W!P%! +o9+J8iT*=qZ؀I$y%!R6Xnԉap!S){l8Sݽ(hVuc9Ä?97+5Fzj6i )8qELh @)'-H*'׭jAAePkFlI竖)UanfUGDRF֢>ة*^p.,a8滚o(%t ҃\+9z upIEH4Ge5N܉lZKG`df&NЁ7qOs  t&q;]x)(+":'蠥GcAJWvf'.NQR.z\rwK'6HCݑE ϝf+2OdFUgb60|.CQu3+MhDI` !~AB C@I0^6BVI۵ky8vl/I~ovvH׾k/}>wɏw)%= 'VF[`zBV1)Gdvz.Ūp4=ƢX`&$91.kԅe8.FZ}Iåˉ_>Lh`.׍Zo\JC(sA>=&0~)>m؇֞$ ½w™eYɘY H{nצ6oG/FӍ×2k1ΨD + a?oݹvoq Xsne:b|ՈHe15Xlώlx#ngnv47D0:49O(׸IxC<PQZ'bXϸC(ғ}ƽ$eÍqwזLB:+0>Ft]+1nE1aWmA߿[>I.9 oI'01rgKӔ]>cW`yv=pn- W\ No newline at end of file