PK =wEoa,mimetypeapplication/epub+zipPK=wEiTunesMetadata.plistj artistName Oracle Corporation book-info cover-image-hash 413954880 cover-image-path OEBPS/dcommon/oracle-logo.jpg package-file-hash 455002653 publisher-unique-id E10143-04 unique-id 538200683 genre Oracle Documentation itemName Oracle® Fusion Middleware Administrator's Guide for Oracle Web Cache, 11g Release 1 (11.1.1) releaseDate 2010-12-14T23:12:35Z year 2011 PK7ojPK=wEMETA-INF/container.xml PKYuPK=wEOEBPS/part_bas.htmu Basic Administration

Part II

Basic Administration

This part presents information about performing basic administration tasks for Oracle Web Cache. It contains the following chapters:

PKMSPK=wEOEBPS/dcommon/oracle.gifJGIF87aiyDT2F'G;Q_oKTC[ 3-Bq{ttsoGc4I)GvmLZ).1)!ꑈ53=Z]'yuLG*)g^!8C?-6(29K"Ĩ0Яl;U+K9^u2,@@ (\Ȱ Ë $P`lj 8x I$4H *(@͉0dа8tA  DсSP v"TUH PhP"Y1bxDǕ̧_=$I /& .)+ 60D)bB~=0#'& *D+l1MG CL1&+D`.1qVG ( "D2QL,p.;u. |r$p+5qBNl<TzB"\9e0u )@D,¹ 2@C~KU 'L6a9 /;<`P!D#Tal6XTYhn[p]݅ 7}B a&AƮe{EɲƮiEp#G}D#xTIzGFǂEc^q}) Y# (tۮNeGL*@/%UB:&k0{ &SdDnBQ^("@q #` @1B4i@ aNȅ@[\B >e007V[N(vpyFe Gb/&|aHZj@""~ӎ)t ? $ EQ.սJ$C,l]A `8A o B C?8cyA @Nz|`:`~7-G|yQ AqA6OzPbZ`>~#8=./edGA2nrBYR@ W h'j4p'!k 00 MT RNF6̙ m` (7%ꑀ;PKl-OJPK=wEOEBPS/dcommon/oracle-logo.jpgz^JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222'7" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE!KEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEzE7V%ȣOΏ9??:a"\fSrğjAsKJ:nOzO=}E1-I)3(QEQEQEQEQEQEQE֝Hza<["2"pO#f8M[RL(,?g93QSZ uy"lx4h`O!LŏʨXZvq& c՚]+: ǵ@+J]tQ]~[[eϸ (]6A&>ܫ~+כzmZ^(<57KsHf妬Ϧmnẁ&F!:-`b\/(tF*Bֳ ~V{WxxfCnMvF=;5_,6%S>}cQQjsOO5=)Ot [W9 /{^tyNg#ЄGsֿ1-4ooTZ?K Gc+oyڙoNuh^iSo5{\ܹ3Yos}$.nQ-~n,-zr~-|K4R"8a{]^;I<ȤL5"EԤP7_j>OoK;*U.at*K[fym3ii^#wcC'IIkIp$󿉵|CtĈpW¹l{9>⪦׺*ͯj.LfGߍԁw] |WW18>w.ӯ! VӃ :#1~ +މ=;5c__b@W@ +^]ևՃ7 n&g2I8Lw7uҭ$"&"b eZ":8)D'%{}5{; w]iu;_dLʳ4R-,2H6>½HLKܹR ~foZKZ࿷1[oZ7׫Z7R¢?«'y?A}C_iG5s_~^ J5?œ tp]X/c'r%eܺA|4ծ-Ե+ْe1M38Ǯ `|Kյ OVڅu;"d56, X5kYR<̭CiطXԮ];Oy)OcWj֩}=܅s۸QZ*<~%뺃ȶp f~Bðzb\ݳzW*y{=[ C/Ak oXCkt_s}{'y?AmCjޓ{ WRV7r. g~Q"7&͹+c<=,dJ1V߁=T)TR՜*N4 ^Bڥ%B+=@fE5ka}ędܤFH^i1k\Sgdk> ֤aOM\_\T)8靠㡮3ģR: jj,pk/K!t,=ϯZ6(((((((49 xn_kLk&f9sK`zx{{y8H 8b4>ÇНE|7v(z/]k7IxM}8!ycZRQ pKVr(RPEr?^}'ðh{x+ՀLW154cK@Ng C)rr9+c:׹b Жf*s^ fKS7^} *{zq_@8# pF~ [VPe(nw0MW=3#kȵz晨cy PpG#W:%drMh]3HH<\]ԁ|_W HHҡb}P>k {ZErxMX@8C&qskLۙOnO^sCk7ql2XCw5VG.S~H8=(s1~cV5z %v|U2QF=NoW]ո?<`~׮}=ӬfԵ,=;"~Iy7K#g{ñJ?5$y` zz@-~m7mG宝Gٱ>G&K#]؃y1$$t>wqjstX.b̐{Wej)Dxfc:8)=$y|L`xV8ߙ~E)HkwW$J0uʟk>6Sgp~;4֌W+חc"=|ř9bc5> *rg {~cj1rnI#G|8v4wĿhFb><^ pJLm[Dl1;Vx5IZ:1*p)إ1ZbAK(1ׅ|S&5{^ KG^5r>;X׻K^? s fk^8O/"J)3K]N)iL?5!ƾq:G_=X- i,vi2N3 |03Qas ! 7}kZU781M,->e;@Qz T(GK(ah(((((((Y[×j2F}o־oYYq $+]%$ v^rϭ`nax,ZEuWSܽ,g%~"MrsrY~Ҿ"Fت;8{ѰxYEfP^;WPwqbB:c?zp<7;SBfZ)dϛ; 7s^>}⍱x?Bix^#hf,*P9S{w[]GF?1Z_nG~]kk)9Sc5Ո<<6J-ϛ}xUi>ux#ţc'{ᛲq?Oo?x&mѱ'#^t)ϲbb0 F«kIVmVsv@}kҡ!ˍUTtxO̧]ORb|2yԵk܊{sPIc_?ħ:Ig)=Z~' "\M2VSSMyLsl⺿U~"C7\hz_ Rs$~? TAi<lO*>U}+'f>7_K N s8g1^CeКÿE ;{+Y\ O5|Y{/o+ LVcO;7Zx-Ek&dpzbӱ+TaB0gNy׭ 3^c T\$⫫?F33?t._Q~Nln:U/Ceb1-im WʸQM+VpafR3d׫é|Aү-q*I P7:y&]hX^Fbtpܩ?|Wu󭏤ʫxJ3ߴm"(uqA}j.+?S wV ~ [B&<^U?rϜ_OH\'.;|.%pw/ZZG'1j(#0UT` Wzw}>_*9m>󑓀F?EL3"zpubzΕ$+0܉&3zڶ+jyr1QE ( ( ( ( ( ( ( (UIdC0EZm+]Y6^![ ԯsmܶ捆?+me+ZE29)B[;я*wGxsK7;5w)}gH~.Ɣx?X\ߚ}A@tQ(:ͧ|Iq(CT?v[sKG+*רqҍck <#Ljα5݈`8cXP6T5i.K!xX*p&ќZǓϘ7 *oƽ:wlຈ:Q5yIEA/2*2jAҐe}k%K$N9R2?7ýKMV!{W9\PA+c4w` Wx=Ze\X{}yXI Ү!aOÎ{]Qx)#D@9E:*NJ}b|Z>_k7:d$z >&Vv󃏽WlR:RqJfGإd9Tm(ҝEtO}1O[xxEYt8,3v bFF )ǙrPNE8=O#V*Cc𹾾&l&cmCh<.P{ʦ&ۣY+Gxs~k5$> ӥPquŽўZt~Tl>Q.g> %k#ú:Kn'&{[yWQGqF}AЅ׮/}<;VYZa$wQg!$;_ $NKS}“_{MY|w7G!"\JtRy+贾d|o/;5jz_6fHwk<ѰJ#]kAȎ J =YNu%dxRwwbEQEQEQEQEQEQEQEQEQE'fLQZ(1F)hQ@X1KEQE-Q@ 1KE3h=iPb(((1GjZ(-ʹRPbR@ 1KE7`bڒyS0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((_ğ<+F; sU%ԑ >,BH(uSU xþ1Wϲs${wgoQn_swB/'L\ܓFgԏZ ^dj^L^NmH Ҁ6(?nƓjh%ةlΣ /F6}pj2E3HgHЌ(UQR8oX,G8OB]>o9@$xWy'ڹOM=ҼWb"٠9-*r⬻zWokeh͝(F@n~X=q+⟇1b>ƑeIX.~C,o5የ-m;D Nʬ` `+CcE??Ki!R!cxw[ jvc}&Eٱ7T)8&þ/?os$wSn^bo:-4^js4JKm!#rv89>' O59t , \8r,Vk|IgxEv((RmĜ+bkz6,u/}-|.'<VÚ~tk,^cH61¢ !;M;Ėz[#CuAƶ+j_&*/;Q8d ǹHyAsM↷7l-6rò,%Fs;A*',}'f[]tݷs~UWhk?:4JE]WpcY=" ƚw/|_xSw(kycH#r28,X7D5Kh76 mɍ~0H;6194WpGӧգ%8Z&GdPƧo6kcO5Kv`{}fyq \`@?Kv=26OޝyAe Qɼ芍H8͟2敮j#;iѻm؏6+wTx;KYY\-%'Aӣ?|=\-ٴk+٬$ɷ[$ISPE*vyPTaĜT`J|IgxEv((RmĜ+~~h ާ2}0F9|g=m5+x1h $)\  sdx^JfbKXYPCaݎ6-mS] mgC&>d, !Ƥ(p窀 V?IgZk:kHꧽsxg7__hÍB97 +9nn_o9Wc/m8ր=Y#t9? /q'#  Y}icמ o-{cŵ%'s s G^mqRwا s@W>w* O2Frk]k1֛4mݬRIp8F`F@kMvN&R +7đTT!z.W~k7KWX ߰E$HS`ʞK QL.dk 9y) F0v^k;{k9wyyv<'+.+^h~Fg"yRM?:3m' 2v{_kٲM[oǙ ~mUp~܎Mz~#ּQ/Cz5(u9KxTFAF$~VxIz~"uR-c6)#$=2H>?}wݻ~}S3Şҵ42+W죝ݑb˝$lmۑ]E-em[WwQ艥>#\H$i8\qQ^'):Ѵ zAT,H e @z`QEQEQEQEQEQEQEQEQEQEQEQEbj??G_h߷nw}s{aE~4?֖0֦bّL cs:FխeZ|i4m$ldnxuzE~ιqnO yQGA9bVqlX?|'}X,Xno-FIZ7 rrעCgqysg ]ZD) /ܣgX'_~ Dž/{/n"I! `θ9M ]i6[<&SnH%~UXvqX]wk&vMDlppAX?Z&}z7kz/̄*pNNHvV~'ypo3g=Eq\~5g W@j<;j6?i\ԾIwT8ZJ(]k|(l'n4$_oo1Hq]'57Vrc@JGW \gg88tPM i,$+5w1 F>XJ!8 8 < Ac՟H{-000{8GyEy߈_xKScg2y)UW`eF#$ke>%gt];KeRv0''AOL8蚍j6,u/]|.9'QEx U? ^xCMYM{}-X:+@&s 5eÚퟴ1;uW?_9}OݾO9Qz$]`*m2[n!MgXљG;sLrH.Śg->GsYj ZR R\J|9F Xc=Y=%+:,JEduk>,][v~Ԯ%l$T`[ pToͬnѬVv񴄅 qj'h>W> nnCDKWaQ ωu}^*?<*/+ $#R6f(EދܼQ߷E0`̇i9囡Mpv:~ΞHy4A+Yi[ N8 <ɦ_ԘGgI&ii8׽}^Mx⧈P;!+'LE)HpLr9׺WKJ_;PK-ƃ/;Πv[6p{q0[Wk_Z;l cV&6*9}+ 3ŋ_t^5fHz^}Eۮ4mWQeSqq{'ˋ=6Px,O1 qC_3k[UıI 89ϡ87V_#/||Ͽ,kC0*c9m YDoh>#Liog7!GCRJxῌ}7S/l.KܶARwFrv^{_{~o /{syOcbs)#5sZNP70wXe*9d <5/S}_Y+Rt(mu$# eTi:Lmhu=J$[98䌩?NV+O|ֺ2пGr)#j}'JVmY HPg#'#./ zy^_OXg.uf'PljwāA_T~:&5+[XUĘ UI >woGh_w'#Ynۯ]WuE7HѧУxw2I,7d9v@-~$x^<+I]ehQx,띹ۜ@-e=U4Jg/YlR% d1+1'<;Y{O>1%A$P$VE # t5믷|Nayy |${u8# ǚ(& M-JGq Ӯ2~"]n4 xvOئuKٳ#`!+'^{_{~o /{syOcbs) x>ѯ5K{- cY$ Ϊw'kW>h(4qi/8GvC QԱcr&toZIg=LjLc%@9PQEQEQEQEQEQEQEQEQEQEQEQEQEQ^oKjևo[UEs;X]7׾?ovϛ;4(?/K[kWA䞝^@w=ekFkI;XFvhGo rElx7ecy5hR 9(?nƓjh%ةlΣ )j9д}[_u?L~6Y7#y *XA<QEWguw)~fnqsEyZ|S@3hR-(3؍7XzEW?{O}ú ]y yH~C6r+?nƓjh%ةlΣ (V Gm~')>MctL@qc]QEQEQEQEQEQEW [q 29 "@TP0%QEQEֿ>ᆳ67qL+T)r2HxR"iZv%'lognI9' ( ( ( ( ( ( ( ( ( ( ( ( (<Ě$cteϑ#b䍥rzT Wum/UMBV:nvY$;^ݝ Aʍ̀W?4H?}w۷;~9}4M;Tufb0@e #ngY^5sgB_3s?k.{xqg~]jZSYu84Ne%sfЫ8# hD%iĐCg8:kҾxE-+ 4};,[FGPq@Oxŷ:_ iEMCq$1&gU88t-7 YͫG$p߸10(f `3Xu\MkT ]}wzbA [hzi5ͨ-?&66nqxLJ4'/tO[OG*cIv| /Jex |ϴ컇c3@i ꋩ,p^*YZi%(]؀qG8$t&xwu" #Yz~bv9h:ķ֌'^ iR?aդ1LA-]akAcI<;;9,Ĝp3j淢i#ukXϷ̋{&r@|Egzy)//@?ouᦂ߁,qI r=++w5kX$-_Ga3 ,.6 6ˏk1Տ'þ1/ϲ}${wcwa^CIG$:Du|-o55m'F=~3ܥO  5 >hho/ڦMT(\@WwǑ+A7 .E# + [7Ú} \jRrEgO,xu9sa̎z ^\>"xH>4Zlĸ^%>P.\+(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((PKJ^z^PK=wEOEBPS/dcommon/cpyr.htmD Oracle Legal Notices

Oracle Legal Notices

Copyright Notice

Copyright © 1994-2014, Oracle and/or its affiliates. All rights reserved.

Trademark Notice

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

License Restrictions Warranty/Consequential Damages Disclaimer

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

Warranty Disclaimer

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

Restricted Rights Notice

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

Hazardous Applications Notice

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Third-Party Content, Products, and Services Disclaimer

This software or hardware and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

Alpha and Beta Draft Documentation Notice

If this document is in preproduction status:

This documentation is in preproduction status and is intended for demonstration and preliminary use only. It may not be specific to the hardware on which you are using the software. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to this documentation and will not be responsible for any loss, costs, or damages incurred due to the use of this documentation.

Oracle Logo

PK0hPK=wEOEBPS/dcommon/blafdoc.cssc@charset "utf-8"; /* Copyright 2002, 2011, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2011.8.12 */ body { font-family: Tahoma, sans-serif; /* line-height: 125%; */ color: black; background-color: white; font-size: small; } * html body { /* http://www.info.com.ph/~etan/w3pantheon/style/modifiedsbmh.html */ font-size: x-small; /* for IE5.x/win */ f\ont-size: small; /* for other IE versions */ } h1 { font-size: 165%; font-weight: bold; border-bottom: 1px solid #ddd; width: 100%; text-align: left; } h2 { font-size: 152%; font-weight: bold; text-align: left; } h3 { font-size: 139%; font-weight: bold; text-align: left; } h4 { font-size: 126%; font-weight: bold; text-align: left; } h5 { font-size: 113%; font-weight: bold; display: inline; text-align: left; } h6 { font-size: 100%; font-weight: bold; font-style: italic; display: inline; text-align: left; } a:link { color: #039; background: inherit; } a:visited { color: #72007C; background: inherit; } a:hover { text-decoration: underline; } a img, img[usemap] { border-style: none; } code, pre, samp, tt { font-family: monospace; font-size: 110%; } caption { text-align: center; font-weight: bold; width: auto; } dt { font-weight: bold; } table { font-size: small; /* for ICEBrowser */ } td { vertical-align: top; } th { font-weight: bold; text-align: left; vertical-align: bottom; } li { text-align: left; } dd { text-align: left; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } td p:first-child, td pre:first-child { margin-top: 0px; margin-bottom: 0px; } table.table-border { border-collapse: collapse; border-top: 1px solid #ccc; border-left: 1px solid #ccc; } table.table-border th { padding: 0.5ex 0.25em; color: black; background-color: #f7f7ea; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } table.table-border td { padding: 0.5ex 0.25em; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } span.gui-object, span.gui-object-action { font-weight: bold; } span.gui-object-title { } p.horizontal-rule { width: 100%; border: solid #cc9; border-width: 0px 0px 1px 0px; margin-bottom: 4ex; } div.zz-skip-header { display: none; } td.zz-nav-header-cell { text-align: left; font-size: 95%; width: 99%; color: black; background: inherit; font-weight: normal; vertical-align: top; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-header-link { font-size: 95%; } td.zz-nav-button-cell { white-space: nowrap; text-align: center; width: 1%; vertical-align: top; padding-left: 4px; padding-right: 4px; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-button-link { font-size: 90%; } div.zz-nav-footer-menu { width: 100%; text-align: center; margin-top: 2ex; margin-bottom: 4ex; } p.zz-legal-notice, a.zz-legal-notice-link { font-size: 85%; /* display: none; */ /* Uncomment to hide legal notice */ } /*************************************/ /* Begin DARB Formats */ /*************************************/ .bold, .codeinlinebold, .syntaxinlinebold, .term, .glossterm, .seghead, .glossaryterm, .keyword, .msg, .msgexplankw, .msgactionkw, .notep1, .xreftitlebold { font-weight: bold; } .italic, .codeinlineitalic, .syntaxinlineitalic, .variable, .xreftitleitalic { font-style: italic; } .bolditalic, .codeinlineboldital, .syntaxinlineboldital, .titleinfigure, .titleinexample, .titleintable, .titleinequation, .xreftitleboldital { font-weight: bold; font-style: italic; } .itemizedlisttitle, .orderedlisttitle, .segmentedlisttitle, .variablelisttitle { font-weight: bold; } .bridgehead, .titleinrefsubsect3 { font-weight: bold; } .titleinrefsubsect { font-size: 126%; font-weight: bold; } .titleinrefsubsect2 { font-size: 113%; font-weight: bold; } .subhead1 { display: block; font-size: 139%; font-weight: bold; } .subhead2 { display: block; font-weight: bold; } .subhead3 { font-weight: bold; } .underline { text-decoration: underline; } .superscript { vertical-align: super; } .subscript { vertical-align: sub; } .listofeft { border: none; } .betadraft, .alphabetanotice, .revenuerecognitionnotice { color: #f00; background: inherit; } .betadraftsubtitle { text-align: center; font-weight: bold; color: #f00; background: inherit; } .comment { color: #080; background: inherit; font-weight: bold; } .copyrightlogo { text-align: center; font-size: 85%; } .tocsubheader { list-style-type: none; } table.icons td { padding-left: 6px; padding-right: 6px; } .l1ix dd, dd dl.l2ix, dd dl.l3ix { margin-top: 0ex; margin-bottom: 0ex; } div.infoboxnote, div.infoboxnotewarn, div.infoboxnotealso { margin-top: 4ex; margin-right: 10%; margin-left: 10%; margin-bottom: 4ex; padding: 0.25em; border-top: 1pt solid gray; border-bottom: 1pt solid gray; } p.notep1 { margin-top: 0px; margin-bottom: 0px; } .tahiti-highlight-example { background: #ff9; text-decoration: inherit; } .tahiti-highlight-search { background: #9cf; text-decoration: inherit; } .tahiti-sidebar-heading { font-size: 110%; margin-bottom: 0px; padding-bottom: 0px; } /*************************************/ /* End DARB Formats */ /*************************************/ @media all { /* * * { line-height: 120%; } */ dd { margin-bottom: 2ex; } dl:first-child { margin-top: 2ex; } } @media print { body { font-size: 11pt; padding: 0px !important; } a:link, a:visited { color: black; background: inherit; } code, pre, samp, tt { font-size: 10pt; } #nav, #search_this_book, #comment_form, #comment_announcement, #flipNav, .noprint { display: none !important; } body#left-nav-present { overflow: visible !important; } } PKr.hcPK=wEOEBPS/dcommon/doccd_epub.jsM /* Copyright 2006, 2012, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2012.3.17 */ function addLoadEvent(func) { var oldOnload = window.onload; if (typeof(window.onload) != "function") window.onload = func; else window.onload = function() { oldOnload(); func(); } } function compactLists() { var lists = []; var ul = document.getElementsByTagName("ul"); for (var i = 0; i < ul.length; i++) lists.push(ul[i]); var ol = document.getElementsByTagName("ol"); for (var i = 0; i < ol.length; i++) lists.push(ol[i]); for (var i = 0; i < lists.length; i++) { var collapsible = true, c = []; var li = lists[i].getElementsByTagName("li"); for (var j = 0; j < li.length; j++) { var p = li[j].getElementsByTagName("p"); if (p.length > 1) collapsible = false; for (var k = 0; k < p.length; k++) { if ( getTextContent(p[k]).split(" ").length > 12 ) collapsible = false; c.push(p[k]); } } if (collapsible) { for (var j = 0; j < c.length; j++) { c[j].style.margin = "0"; } } } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(compactLists); function processIndex() { try { if (!/\/index.htm(?:|#.*)$/.test(window.location.href)) return false; } catch(e) {} var shortcut = []; lastPrefix = ""; var dd = document.getElementsByTagName("dd"); for (var i = 0; i < dd.length; i++) { if (dd[i].className != 'l1ix') continue; var prefix = getTextContent(dd[i]).substring(0, 2).toUpperCase(); if (!prefix.match(/^([A-Z0-9]{2})/)) continue; if (prefix == lastPrefix) continue; dd[i].id = prefix; var s = document.createElement("a"); s.href = "#" + prefix; s.appendChild(document.createTextNode(prefix)); shortcut.push(s); lastPrefix = prefix; } var h2 = document.getElementsByTagName("h2"); for (var i = 0; i < h2.length; i++) { var nav = document.createElement("div"); nav.style.position = "relative"; nav.style.top = "-1.5ex"; nav.style.left = "1.5em"; nav.style.width = "90%"; while (shortcut[0] && shortcut[0].toString().charAt(shortcut[0].toString().length - 2) == getTextContent(h2[i])) { nav.appendChild(shortcut.shift()); nav.appendChild(document.createTextNode("\u00A0 ")); } h2[i].parentNode.insertBefore(nav, h2[i].nextSibling); } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(processIndex); PKo"nR M PK=wE OEBPS/toc.ncx& Oracle® Fusion Middleware Administrator's Guide for Oracle Web Cache, 11g Release 1 (11.1.1) Cover Title and Copyright Information Contents List of Examples List of Figures List of Tables Preface What's New in This Guide? Part I Understanding Secure Proxy Caching and Load Balancing 1 Understanding Reverse Proxying Part II Basic Administration 2 Getting Started with Administering Oracle Web Cache 3 Configuring High Availability Solutions 4 Configuring Request Filtering 5 Configuring Security 6 Caching and Compressing Content 7 Invalidating Content 8 Using Diagnostic Features 9 Logging 10 Configuring Common Deployment Scenarios Part III Advanced Administration 11 Caching Dynamic Content with ESI Language Tags 12 Caching with Third-Party Application Servers A Troubleshooting Oracle Web Cache Glossary Index Copyright PK]c+&PK=wEOEBPS/content.opfO Oracle® Fusion Middleware Administrator's Guide for Oracle Web Cache, 11g Release 1 (11.1.1) en-US E10143-04 Oracle Corporation Oracle Corporation Oracle® Fusion Middleware Administrator's Guide for Oracle Web Cache, 11g Release 1 (11.1.1) 2010-12-14T23:12:35Z Describes how to use Oracle Web Cache as a reverse proxy cache to origin servers. It explains how to configure request filters to protect sites against common HTTP request attacks and how to cache content. PK=~>PK=wEOEBPS/part_adv.htmt Advanced Administration

Part III

Advanced Administration

This part presents information about performing advanced administration tasks for Oracle Web Cache. It contains the following chapters:

PK{}ytPK=wEOEBPS/diagnostic.htmvV Using Diagnostic Features

8 Using Diagnostic Features

This chapter describes the diagnostic features available with Oracle Web Cache.

This chapter includes the following topics:

8.1 Introduction to Diagnostic Solutions

Oracle Web Cache provides a number diagnostic tools to enable to you evaluate performance and optimal configuration settings. These tools include:

  • Popular requests reporting. See Section 8.2.

  • Varying levels of statistics monitoring through Fusion Middleware Control. See Section 8.4 and Section 8.5.

  • Displaying diagnostics information in the Server response-header field or as a textual string in the HTML response body of an object. See Section 8.3.

8.2 Introduction to Listing Popular Requests and Cache Contents

You can view a list of the most popular requests and a list of the contents of the cache, as well as requests that were not cache, generating the following types of lists:

  • A list of the URLs of the most popular requests received by the cache since the cache was last started

    Popularity is calculated using two factors: how many times the request was made and how recently the requests were made. You can specify: only objects stored in the cache, only objects not stored in the cache, or all requests received by the cache. See Section 8.6.

  • A list of the requested URLs for objects not stored in the cache.

    You can use this list to verify that the caching rules are caching the correct objects. See Section 8.6.

  • A list of the cached or non-cached URLs of the objects to an exported file

    Oracle Web Cache can write a list of content of the cache to a file. See Section 8.7.

8.3 Introduction to Displaying Diagnostic and Event Log Information in the HTML Body or Server Response-Header Field

By default, Oracle Web Cache adds diagnostics information to the Server response-header field. For diagnostics purposes, it can be useful to also display this information as a textual string in the HTML response body of an object. When enabled, you simply append a string to the URL of the object into the browser to see the diagnostic information string embedded in the response body:

Web Cache Debug Info: diagnostic_information

You can also select to display event log information, with a verbosity level of TRACE, in the HTML response.

You can additionally configure the diagnostic information to be within HTML comment tags for pages having a Content-Type: text/html response-header field. When enabled, the diagnostic information appears within HTML comment tags:

<!-- Web Cache Debug Info: diagnostic_information-->

For objects sent to browsers, Oracle Web Cache adds diagnostic information to the Server response-header field of the HTTP response message:

Server: Oracle Fusion Middleware 11g (multiple_version_object_version_number) Server_header_from_origin_server Oracle-Web-Cache-11g/11.1.1.0.0 (diagnostic_information)

The Server response-header field specifies name/value pairs for Oracle HTTP Server and Oracle Web Cache. The information for Oracle Web Cache includes version and diagnostic information.

where diagnostic_information has the following format:

{ESI_processing_type}{cache_request_type}[;max-age=expiration_time[+removal_time];age=object_age;]{ecid=request_ID,sequence_number}

Table 8-1 describes the diagnostic fields.

Table 8-1 Control Directives for Server

Control DirectiveDescription

ESI_processing_type

ESI_processing_type is:

  • T specifies that the object is an ESI template

  • F specifies that the object is an ESI fragment

  • empty specifies that the response does not require ESI processing

cache_request_type

cache_request_type is:

  • H specifies a cache hit

  • S specifies a cache hit of a stale object

  • U specifies a cache update of a stale object

  • G specifies a cache update of an object that was marked for removal but still physically resides in the cache

  • M specifies a cache miss

  • N specifies a non-cacheable cache miss

max-age="expiration_time[+removal_time]

Specifies the time, in seconds, to expire the object, and optionally, the time, in seconds, to remove the object from the cache after the expiration time. max_age does not appear if the cache_request_type is N.

age=object_age

Shows how long, in seconds, the object has been in the cache. age does not appear if the object is non-cacheable

ecid=request_ID, sequence_number

Specifies the request ID and sequence number specified in Oracle-ECID request header:


Using the Server response header information, you can determine whether a request was served from the cache or the origin server. In the following example, the Server field specifies that the object was a cache hit:

Server: Oracle Fusion Middleware 11g (11.1.1.0.0) Oracle-HTTP-Server
Oracle-Web-Cache-11g/11.1.1.0.0 (TH;max-age=60+30;age=55;ecid=23248098121,0)

(TH;max-age=60+30;age=55;ecid=23248098121,0) is the diagnostic information.

  • T means this page is composed by ESI

  • H means this request resulted in cache hit

  • max-age=60+30 means that the object is to expire in 60 seconds from population and to be removed from the cache 30 seconds from the expiration. This provides a total of 90 seconds from population.

  • age=55 in age means that 55 seconds have passed since population of the cache, meaning there are 5 seconds to expiration and 35 seconds to removal

  • ecid=23248098121,0 specifies the request ID and sequence number from the Oracle-ECID request header.

To display the Server response header in the access logs, you select the sc(Server) field. You must configure the sc(Server) field as a user-defined access log format.

For more information, see:

  • Section 9.4 for further information about creating a user-defined access log format that includes the sc(Server) field

  • Section 8.8 for configuring the display of diagnostics information

8.4 Viewing General and Detailed Statistics

To view general statistics, navigate to the Web Cache Home page. See Section 2.6.3 for further information about the statistics provided in the Web Cache Home page.

You can also view detailed statistics about a specific cache instance:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control. See Section 2.6.2.

  2. From the Web Cache menu, select Monitoring and then Performance Summary.

    The Performance Summary page displays with performance metrics.

  3. To see additional metrics, click Show Metric Palette and expand the metric categories.

    The following figure show the Performance Summary page with the Metric Palette displayed:

    Description of perform.gif follows

  4. Select additional metrics and add them to the Performance Summary.

    To obtain a definition of a performance metric, and information about the actions you should take when the metric is out of range, right-click the name of the metric and select Help from the context menu.

If after monitoring metrics, you need additional performance metrics, point your browser to the following URL:

http://web_cache_hostname:stat_port

This URL takes you to the Oracle Web Cache Internal Diagnosability Monitor page, which provides additional information about cache hits and misses. See Section 2.11.1 for further information about determining the statistics monitoring port.

8.5 Viewing Configuration Statistics

Table 8-2 explains where to find information for evaluating the effectiveness of configuring rules.

Table 8-2 Configuration Statistics

Type of StatisticSee Also

Request filters and rules

Section 4.13


Caching rules

Section 6.9



8.6 Listing Popular Requests

To understand how evaluating the most popular requests can help determine if the caching rules are caching the correct objects, see Section 8.2.

To view the list of URLs of the most popular requests:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control. See Section 2.6.2.

  2. From the Web Cache menu, select Monitoring and then Popular Requests.

    The Popular Request page displays.

  3. From the Show Popular Requests list, select an option:

    • All: Select to display all requests received by the cache.

    • Cache Popular Requests: Select to display only those requests stored in the cache.

    • Non Cache Popular Requests: Select to display only those requests not stored in the cache.

  4. In Number of Popular Requests, enter the maximum number of URLs you want displayed.

  5. Click Go.

    The table updates with the list of URLs of requests since the cache was last started. The table contains the following columns for each request:

    • Site: This column displays the requested site name.

    • HTTP Method: This column displays if the request was using a GET, GET with query string, or POST HTTP request method.

    • URL: The column displays the URL of the object. The URLs may contain additional descriptive information, such as cookie or session information.

    • POST Body: This column displays the POST body contents.

    • Cached?: This column display whether the object is cached. The possible values are:

      • Yes: The object is cached.

      • Yes, but expired: The object is cached, but it is expired. (To lessen the performance impact of invalidation and expiration, Oracle Web Cache serves some stale objects until the origin servers have the capacity to refresh them.)

      • Yes, but needs validation: The object is cached, but it requires validation by the origin server to be served out of the cache. Validation is done through a simple conditional request from Oracle Web Cache to the origin server using the cached object's unique validator.

      • No: The object is not cached.

    • Caching Reason: The reason that the object is cached or not cached. Possible values are:

      • ACL document: Cached or not cached because the object is an Access Control List (ACL) document for authorizing the access of a user to ACL-protected pages.

      • By caching <rule>: Cached or not cached because of a caching rule.

      • By ETag response header: Cached or not cached because of the ETag response header.

      • By HTTP headers: Cached or not cached because of information in the HTTP header.

      • By HTTP response code: Cached or not cached because of the HTTP response code. Normally any response code that is not 200 is not cached, but some non-200 responses can get cached because of a caching rule specifically allowing for it.

      • By reference TTL in ESI tag: Cached or not cached because of the nonzero value of the reference TTL (time-to-live parameters) specified in the ESI tag.

      • By Surrogate-Control response header: Cached or not cached because of information in the Surrogate-Control response header.

      • By X-Oracle-Cache response header: Cached or not cached because of information in the X-Oracle-Cache response header.

      • Cookie mismatch: Cached or not cached because the response contains a cookie that is not present in the request or that has a different value than the same cookie in the request.

      • No directive or rule: Cached or not cached because no directive or rule has stated that the object should be cached.

      • Not a GET or POST method: Not cached because the object was not a GET or POST method.

      • Object is too large: Not cached because the object is larger than the size specified as the Maximum Size of Single Cached Object specified in the Resource Limits and Timeout page.

      • POST body too large: Cached or not cached because the POST body was too large to be cached.

      • URL contains query string: Cached or not cached because the request contains a query string but the request did not match any caching rules.

    • Size: The column displays the size of the requested object. The size is represented in bytes, kilobytes (KB), or megabytes (MB).

    • Compressed?: This column displays the reason the object was compressed or not compressed:

      • Yes, by caching rule: Compressed because the object matched a caching rule that enabled or disabled compression.

      • Yes, by MIME type: Compressed because the object's MIME content type.

      • No, by default setting: Compression is enabled for the site and the browser accepts GZIP compressed response, but there is no matching caching rule and the response does not contain a compress control header in the Surrogate-Control response header or a MIME type.

      • Yes, by Surrogate-Control header: Compressed or not compressed because of the setting of the compress control directive in the Surrogate-Control response header.

      • Yes, by caching rule: Compressed or not compressed because the object matched a caching rule that enabled or disabled compression.

      • No, by MIME type: Not compressed because the object's MIME content type.

      • No, by default setting: Compression is enabled for the site and the browser accepts GZIP compressed responses, but there is no matching caching rule and the response does not contain a compress control header in the Surrogate-Control response header or a MIME type. See Section 1.2.5 to better understand when Oracle Web Cache automatically disables compression.

      • No, by Surrogate-Control header: Not compressed because of the setting of the compress control directive in the Surrogate-Control response header.

      • No, limited browser support: Not compressed because the client's browser has bugs and cannot handle receiving compressed objects.

      • No, needs Web Cache processing: Not compressed because the object requires parsing and tag process. For example, objects containing ESI tag requiring processing before there can be any cache hits.

      • No, browser capability: Not compressed because the client's browser did not indicate to Oracle Web Cache that it could accept GZIP compressed responses. Therefore, Oracle Web Cache does not compress any responses sent to this browser.

      • No, disabled for site: Not compressed because compression was disabled for the entire site. Section 2.11.3 to enable compression for a site.

      • No, object too small: Not compressed because the object was less than 23 bytes for compression to be beneficial.

      • No, routing only mode: Not compressed because the ROUTINGONLY attribute is set to YES in the webcache.xml file. See Section 3.8 for further information about this attribute.

8.7 Listing Cache Contents to a File

To generate a list of the URLs of all of the objects currently stored in the cache to a file named webache_contents.txt:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control. See Section 2.6.2.

  2. From the Web Cache menu, select Monitoring and then Popular Requests.

    The Popular Request page displays.

  3. From the Filter Popular Request By list, select an option:

    • All: Select to display all requests received by the cache.

    • Cache Popular Requests: Select to display only those requests stored in the cache.

    • Non Cache Popular Requests: Select to display only those requests not stored in the cache.

  4. In Number of Popular Requests, enter the maximum number of URLs you want displayed.

  5. Click Export File.

  6. In the message dialog, click OK to export the contents.

    Oracle Web Cache writes the list of URLs to webcache_contents.txt in this directories:

    (UNIX) ORACLE_INSTANCE/diagnostics/logs/WebCache/<webcache_name>
    (Windows) ORACLE_INSTANCE\diagnostics\logs\WebCache\<webcache_name>
    

Each time you generate the list, Oracle Web Cache appends the data to the existing file. It lists the date that the data was appended to the file, followed by the URLs of the objects currently cached. The following example shows an excerpt of the webcache_contents.txt file:

Cache Contents at Wed Oct 20 11:47:03 2008
www.company.com:80/images/lnav/lnav_products.gif
www.company.com:80/images/rnav/rnav_red_line_1.gif
www.company.com:80/images/bullets_and_symbols/blk_line_bullet_10.gif
.
.
.
Cache Contents at Wed Oct 25 13:01:24 2008
www.company.com:80/images/white_spacer_xp.gif
www.company.com:80/images/white_spacer.gif
www.company.com:80/images/miniappsnet.gif
.
.
.

8.8 Configuring Where to Display Diagnostic Information

To understand how Oracle Web Cache can add diagnostic information to the Server response-header field or as a textual string in the HTML response body of an object, see Section 8.3.

To configure diagnostic information in the Server response-header field or the HTML response body:

  1. From Oracle Web Cache Manager, in the navigator frame, select Logging and Diagnostics > Diagnostics. See Section 2.7.2.

  2. From the Cache-Specific Page Body Diagnostics table, select a cache, and then click Enable to display diagnostic information in the HTML response body or Disable to disable the display of diagnostic information in the HTML response body.

  3. To set diagnostic settings for the HTML response body:

    1. From the Global Page Body Diagnostics Configuration table, click Edit.

      The Edit Global Page Body Diagnostics Configuration dialog box displays.

    2. In the URL Flag field, enter the string to append to the URL of the object.

      By default, the string is set to +wcdebug.

    3. In the Display Event Log Entries for Request field, select Yes to display diagnostic information and TRACE event log entries in the HTML response body, or select No to only display diagnostic information.

    4. Click Submit.

  4. To enable or disable diagnostic settings in the Server response header, from the Global Server Header Diagnostics table, click Enable or Disable.

  5. Click Apply Changes.

PKctvvPK=wE OEBPS/lot.htmm List of Tables PK эPK=wEOEBPS/deploy.htm6c Configuring Common Deployment Scenarios

10 Configuring Common Deployment Scenarios

This chapter describes how to configure common deployment scenarios using Oracle Web Cache. It includes the following topics:

10.1 Using Oracle Web Cache in a Common Deployment

Figure 10-1 shows Oracle Web Cache in a common Oracle Application Server configuration. A tier of Oracle Web Cache servers cache content for a tier of application Web servers. The application Web servers app1-host1 and app1-host2 provide content for site www.app1.company.com, and app2-host provides content for www.app2.company.com. The two Oracle Web Cache servers reside on dedicated, fast one or two-CPU computers. To increase the availability and capacity of a Web site, these servers are configured as either a cache cluster or a failover pair.

Oracle recommends a hardware load balancer to ping each Oracle Web Cache server on a periodic basis to check the status of the cache.

As a cache cluster, the two Oracle Web Cache servers provide failure detection and failover. If an Oracle Web Cache server fails, other members of the cache cluster detect the failure and take over ownership of the cached content of the failed cluster member and masks any cache failure. Oracle Web Cache maintains a virtual single cache of content despite a cache failure. The load balancer distributes the incoming requests among cache cluster members. The cache cluster members process the incoming requests. For requests that are not stored in the cache, Oracle Web Cache distributes the requests to an application Web server respective to the site.

As a failover pair, both Oracle Web Cache servers are configured to cache the same content. When both Oracle Web Cache servers are running, a load balancer distributes the load among both servers. If one server fails, the other server receives and processes all incoming requests.

Figure 10-1 Deploying Oracle Web Cache In a Common Configuration

Description of Figure 10-1 follows

To configure this topology:

  1. Register the IP address of the load balancer with www.app1.company.com and www.app2.company.com.

  2. Configure the load balancer with Oracle Web Cache server host names webche1-host and webche2-host and configure it to ping each cache server periodically to check the status of the cache.

  3. Configure the load balancer with to ping each Oracle Web Cache server on a periodic basis with URL /_oracle_http_server_webcache_static_.html, which is stored in the cache.

  4. If configuring a cache cluster, specify webche1-host and webche2-host as cluster members.

    See Section 3.6 for more information on configuring a cache cluster.

  5. Configure the Oracle Web Cache servers with the following:

    • Receive HTTP and HTTPS requests on designated listening ports

    • Send HTTP and HTTPS requests to application Web servers app1-host1, app1-host2, and app2-host on designated listening ports

    • Site definition for www.app1.company.com mapped to app1-host1 and app1-host2

    • Site definition for www.app2.company.com mapped to app2-host

    For more information, see:

    • Section 2.11.1 for instructions about configuring listening ports

    • Section 2.11.2 for instructions about configuring origin server settings

    • Section 2.11.3 for instructions on creating site definitions and site-to-server mappings

10.2 Using a Cache Hierarchy for a Global Intranet Application

Many Web sites have several data centers. For networks with a distributed topology, you can deploy Oracle Web Cache at each of the data centers in a distributed cache hierarchy. Figure 10-2 shows a distributed topology in which Oracle Web Cache servers are distributed in offices in the United States and Japan. The application Web servers are located in the United States office, centralizing the data source to one geographic location. The central caches in the United States cache content for application Web servers app1-host1, app2-host2, and app2-host, and the remote cache in Japan caches content from the central caches.

Clients make requests to local DNS servers to resolve www.app1.company.com and www.app2.company.com. The local DNS servers are routed to the authoritative DNS server for the respective sites. The authoritative DNS server uses the IP address of the client to pick the closest Oracle Web Cache server to satisfy the request. Then, it returns the IP address of the appropriate Oracle Web Cache server to the client.

Figure 10-2 Deploying an Oracle Web Cache Hierarchy

Description of Figure 10-2 follows

To configure this topology:

  1. Register the IP address of the load balancer with www.app1.company.com and www.app2.company.com.

  2. Configure the load balancer with Oracle Web Cache server host names us.webche1-host and us.webche2-host and configure it to ping each cache server periodically to check the status of the cache.

  3. Configure Oracle Web Cache servers us.webche1-host and us.webche1-host with the following:

    • Receive HTTP and HTTPS requests on designated listening ports

    • Send HTTP and HTTPS requests to application Web servers app1-host1, app1-host2, and app2-host on designated listening ports

    • Site definition for www.app1.company.com mapped to app1-host1 and app1-host2

    • Site definition for www.app2.company.com mapped to app2-host

  4. Configure Oracle Web Cache server jp.webche-host with the following:

    • Receive HTTP and HTTPS requests on designated listening ports

    • Send HTTP and HTTPS requests to application Web servers us.webche1-host and us.webche2-host on designated listening ports

    • Site definition for www.app1.company.com mapped to app1-host1 and app1-host2

    • Site definition for www.app2.company.com mapped to app2-host

  5. Enable propagation of invalidation messages for each of the caches in the cache hierarchy:

    1. Use a text editor to open webcache.xml, located in:

      (UNIX) ORACLE_INSTANCE/<instance_name>/config/WebCache/<webcache_name>
      (Windows) ORACLE_INSTANCE\<instance_name>\config\WebCache\<webcache_name>
      
    2. Locate the <INTERCACHE> element, a sub-element of the <SECURITY> element.

    3. Modify the ENABLEINBOUNDICC and ENABLEOUTBOUNDICC attributes to YES. For example:

      <?xml version="1.0" encoding='ISO-8859-1'?>
      <CALYPSO ... >
       <VERSION DTD_VERSION="11.1.1.0.0"/>
       <GENERAL>
         <CLUSTER NAME="WebCacheCluster" ... />
         <SECURITY SSLSESSIONTIMEOUT="3600" ... >
           <USER TYPE="INVALIDATION" ... />
           <USER TYPE="MONITORING" ... />
           <SECURESUBNET ALLOW="ALL"/>
           <DEBUGINFO HEADER="YES" ... />
           <HTTPREQUEST MAXTOTALHEADERSIZE="819000" ... />
           <INTERCACHE ENABLEINBOUNDICC="YES" ENABLEOUTBOUNDICC="YES"/>
         </SECURITY>
      ... 
      
    4. Save webcache.xml.

  6. Restart the caches in the hierarchy with the following command:

    opmnctl restartproc ias-component=component_name
    

    This executable is found in the following directory:

    (UNIX) ORACLE_INSTANCE/bin
    (Windows) ORACLE_INSTANCE\bin
    

For more information, see:

  • Section 2.11.1 for instructions about configuring listening ports

  • Section 2.11.2 for instructions about configuring origin server settings

  • Section 2.11.3 for instructions on creating site definitions and site-to-server mappings

  • Section 7.10.2.2 to understand how invalidation in a hierarchy works

10.3 Using Oracle Web Cache for High Availability without a Hardware Load Balancer

You can make Oracle Web Cache highly available without a hardware load balancer by configuring:

  • Oracle Web Cache solely as a software load balancer of HTTP traffic or reverse proxy to origin servers

    With this option, you configure one or more caches solely to provide load balancing or reverse proxy support.

  • Operating system load balancing capabilities

    With this option, you configure the operating system to load-balance incoming requests across multiple caches. When the operating system detects a failure of one caches, automatic IP takeover is used to distribute the load to the remaining caches in the cluster configuration. This feature is supported on many operating systems, including Linux, Windows 2000 Advanced Server, Windows 2000 Datacenter Server, and Windows 2003 (all editions).

For more information, see Section 3.8 and Section 3.9 for configuration details.

PK3L#66PK=wEOEBPS/intro.htmfB Understanding Reverse Proxying

1 Understanding Reverse Proxying

This chapter provides a general introduction to Oracle Web Cache and its role in providing secure reverse proxying.

This chapter includes the following topics:

1.1 About the Web Tier

The Web tier of a J2EE application server is responsible for interacting with the end users, such as Web browsers primarily in the form of HTTP requests and responses. It is the outermost tier in the HTTP stack, closest to the end user. At the highest level, the Web tier performs four basic tasks:

  • Interprets client requests

  • Dispatches those requests to an object (for example, an enterprise Java bean) that encapsulates business logic

  • Selects the next view for display,

  • Generates and delivers the next view

The Web tier receives each incoming HTTP request and invokes the requested business logic operation in the application. Based on the results of the operation and state of the model, the next view is selected to display. The selected view is transmitted to the client for presentation.

Oracle Web Cache is a content-aware server accelerator, or reverse proxy, for the Web tier that improves the performance, scalability, and availability of Web sites that run on any Web server or application server, such as Oracle HTTP Server and Oracle WebLogic Server.

Oracle Web Cache is the primary caching mechanism provided with Oracle Fusion Middleware. Caching improves the performance, scalability, and availability of Web sites that run on Oracle Fusion Middleware by storing frequently accessed URLs in memory.

By storing frequently accessed URLs in memory, Oracle Web Cache eliminates the need to repeatedly process requests for those URLs on the application Web server and database tiers. Unlike legacy proxies that handle only static objects, Oracle Web Cache caches both static and dynamically generated content from one or more application Web servers. Because Oracle Web Cache can cache more content than legacy proxies, it provides optimal performance by greatly reducing the load on application Web server and database tiers. As an external cache, Oracle Web Cache is also an order of magnitude faster than object caches that run within the application tier.

Because Web Cache is fully compliant with HTTP 1.0 and 1.1 specifications, it can accelerate Web sites that are hosted by any standard Web servers, such as Apache Tomcat and Microsoft IIS. In Oracle Fusion Middleware, Oracle Web Cache resides in front of one or more instances of Oracle HTTP Server. Responses to browser based HTTP requests are directed to the Oracle HTTP Server instance and transmitted through Oracle Web Cache. The Oracle Web Cache instance can handle any Web content transmitted with the standard HTTP protocol.

1.1.1 Reverse Proxying

You can configure Oracle Web Cache as a reverse proxy to origin servers, such as Oracle HTTP Server.

A reverse proxy appears to be the content server to clients but internally retrieves its objects from other back-end origin servers as a proxy. A reverse proxy acts as a gateway to the origin servers. It relays requests from outside the firewall to origin servers behind the firewall, and delivers retrieved content back to the client.

Figure 1-1 shows an overview of how reverse proxy Web caching works. Oracle Web Cache has an IP address of 144.25.190.241 and the application Web server has an IP address of 144.25.190.242.

The steps for browser interaction with Oracle Web Cache are as follows:

  1. A browser sends a request to a Web site named www.company.com:80.

    This request in turn generates a request to Domain Name System (DNS) for the IP address of the Web site.

  2. DNS returns the IP address of the load balancer for the site, that is, 144.25.190.240.

  3. The browser sends the request for a Web page to the load balancer. In turn, the load balancer sends the request to Oracle Web Cache server 144.25.190.241.

  4. If the requested content is in its cache, then Oracle Web Cache sends the content directly to the browser. This is called a cache hit.

  5. If Oracle Web Cache does not have the requested content or the content is stale or invalid, it hands the request off to application Web server 144.25.190.242. This is called a cache miss.

  6. The application Web server sends the content to Oracle Web Cache.

  7. Oracle Web Cache sends the content to the client and stores a copy of the page in cache.

    A page stored in the cache is removed when it becomes invalid or outdated.

Figure 1-1 Web Server Acceleration

Description of Figure 1-1 follows

1.2 Request Flow in the Web Tier

Figure 1-2 shows further details of the request flow within the Web tier.

Figure 1-2 Request Flow to Oracle Web Cache within the Web Tier

Description of Figure 1-2 follows

As shown in Figure 1-2, the following occurs within the Web tier:

  1. The incoming browser request is analyzed for the correct HTTP format.

  2. The browser request is then further analyzed to determine if it is in HTTPS format:

    1. If the browser request is in HTTPS format, SSL decryption is performed.

    2. If the browser request is not in HTTPS format, the request is parsed.

  3. After the request is understood, it is filtered by a set of prescribed filtering rules.

  4. A cache lookup is performed to see if the HTTP request was sent previously and is present in the cache.

    If the request is present in the cache, a cache hit, the request is compressed and the content is sent directly to the browser.

    If the request is not present in the cache, a cache miss, then either:

    1. The request is sent directly to a single origin server.

    2. The request is sent to load-balanced origin servers.

Each load balanced origin server pings each Oracle Web Cache server on a periodic basis to check the status of the cache. The load balancer distributes any incoming requests among cache cluster members. If Oracle Web Cache does not have the requested content or the content is stale or invalid, it hands the request off to the application Web server. The application Web server sends the content to Oracle Web Cache. Oracle Web Cache sends the content to the client and stores a copy of the page in cache.

The proxy server is placed in a less secure zone, the Demilitarized Zone (DMZ), instead of the origin server.

Caching rules determine which objects to cache. When you establish a caching rule for a particular URL, those objects contained within the URL are not cached until there is a client request for them. When a client first requests an object, Oracle Web Cache sends the request to the origin server. This request is a cache miss. Because this URL has an associated caching rule, Oracle Web Cache caches the object for subsequent requests. When Oracle Web Cache receives a second request for the same object, Oracle Web Cache serves the object from its cache to the client. This request is a cache hit.

When you stop Oracle Web Cache, the cache clears all objects. In addition, Oracle Web Cache clears and resets statistics.

1.2.1 HTTP Traffic Management

You can deploy Oracle Web Cache inside or outside a firewall. Deploying Oracle Web Cache inside a firewall ensures that HTTP traffic enters the DMZ, but only authorized traffic from the application Web servers can directly interact with the database. When deploying Oracle Web Cache outside a firewall, the throughput burden is placed on Oracle Web Cache rather than the firewall. The firewall receives only requests that must go to the application Web servers. This topology requires securing Oracle Web Cache from intruders.

Security experts disagree about whether caches should be placed outside the DMZ. Oracle recommends that you check your company's policy before deploying Oracle Web Cache outside the DMZ.

1.2.2 Request Filtering and Routing

Request filtering checks either the normalized request (for most filter types) or the original raw un-normalized request (for the following format filter rules: null byte, strict encoding, and double encoding). If a match is found on a rule and it is a deny rule, then the request is denied. If the match is for an allow rule, then the request is allowed. For a deny rule, if the rule is in monitor only mode, then the request is logged (to the audit log and the event log), but the request is not denied.

For more information about request filtering, see Chapter 4, "Configuring Request Filtering."

1.2.3 Origin Server Load Balancing and Failover

Origin server load balancing is a feature in which HTTP requests are distributed among origin servers so that no single origin server is overloaded.

Oracle Web Cache supports load balancing and failover detection for application Web servers.

Oracle Web Cache ensures that cache misses are directed to the most available, highest-performing Web server in the server farm. A capacity heuristic guarantees performance and provides surge protection when the application Web server load increases.

For more information about load balancing and failover, see Section 3.1.

1.2.4 Caching

Caching improves the performance, scalability, and availability of Web sites that run on Oracle Fusion Middleware by storing frequently accessed URLs in memory, Oracle Web Cache eliminates the need to repeatedly process requests for those URLs on the application Web server and database tiers. Unlike legacy proxies that handle only static objects, Oracle Web Cache caches both static and dynamically generated content from one or more application Web servers. Because Oracle Web Cache can cache more content than legacy proxies, it provides optimal performance by greatly reducing the load on application Web server and database tiers. As an external cache, Oracle Web Cache is also an order of magnitude faster than object caches that run within the application tier.

Oracle Web Cache sits in front of application Web servers, caching their content, and providing their content to clients that request it. When Web browsers access the Web site, they send HTTP protocol or HTTPS protocol requests to Oracle Web Cache. Oracle Web Cache, in turn, acts as a virtual server on behalf of the application Web servers. If the requested content has changed, Oracle Web Cache retrieves the new content from the application Web servers. The application Web servers may retrieve their content from an Oracle database. Oracle Web Cache can be deployed on its own dedicated tier of computers or on the same computer as the application Web servers.

Web caching provides the following benefits for Web-based applications:

  • Performance: Running on inexpensive hardware, caching combined with compression can increase the throughput of a Web site by several orders of magnitude. In addition, Oracle Web Cache significantly reduces response time to client requests by storing objects in memory and by serving compressed versions of objects to clients that support the GZIP encoding method. See Section 1.2.5 for more information about compression.

  • Scalability: In addition to unparalleled throughput, Oracle Web Cache can sustain thousands of concurrent client connections, meaning that visitors to a site see fewer application Web server errors, even during periods of peak load.

  • High availability: Oracle Web Cache supports load balancing and failover detection for application Web servers. These features ensure that cache misses are directed to the most available, highest-performing Web server in the server farm. Moreover, a patent-pending capacity heuristic guarantees performance and provides surge protection when the application Web server load increases.

  • Cost savings: Better performance, scalability and availability translates into cost savings for Web site operators. Because fewer application Web servers are required to meet the challenges posed by traffic spikes and denial of service attacks, Oracle Web Cache offers a simple and inexpensive means of reducing a Web site's cost for each request.

  • Developer productivity: Application developers can use Oracle Web Cache to cache content rather than design and develop application-specific caches.

For more information about caching, see Chapter 6, "Caching and Compressing Content."

1.2.5 Compression

Oracle Web Cache can compress both cacheable and non-cacheable objects. You can specify compression settings from either Oracle Enterprise Manager Fusion Middleware Control or the compress control directive of the Surrogate-Control response-header field. Oracle Web Cache provides compression configuration at both the site and caching-rule level. If you enable compression for a site, then Oracle Web Cache performs automatic compression for that site. Fine tuning of compression settings can be done by configuring individual caching rules.

Oracle Web Cache correctly handles compression of different types of content and different types of browsers. It enables compression automatically for common compressible content types such as HTML, Javascript, or cascading style sheets (CSS). It disables compression automatically where compression either breaks the application in browsers, or does not provide any gain. These files types include GIF, JPEG, and PNG images, or files that are already compressed with utilities like WinZip or GZIP. Similarly, Oracle Web Cache disables compression for Netscape 4 browsers and for some file types for Internet Explorer 5.5 browsers due to known bugs with these browsers.

Because compressed objects are smaller, they are delivered faster to browsers with fewer round-trips, reducing overall latency. Compressed content is then expanded by browsers that support the GZIP compression in the Accept-Encoding request-header field.

On average, Oracle Web Cache can compress text files by a factor of 4. For example, 300 KB files are compressed down to 75 KB.

For more information about compression, see:

  • Section 2.11.3 for instructions on configuring compression at the site level

  • Section 2.11.3.1 for instructions on disabling compression for all requests

  • Section 6.8.1 for instructions on configuring compression for individual caching rules

  • Section 6.10 for instructions on configuring the Surrogate-Control response-header field

1.2.6 Session Binding

Oracle Web Cache supports sites that use a session ID or session cookie to bind user sessions to a given origin server to maintain state for a period. To use the session binding feature, the origin server itself must maintain state, that is, it must be stateful. A site binds user sessions by including session data in the HTTP header or body it sends to a client in such a way that the client is forced to include it with its next request. This data is transferred between the origin server and the client through Oracle Web Cache either with an embedded URL parameter or through a cookie, which is a text string that is sent to and stored on the client. Oracle Web Cache does not process the value of the parameter or cookie; it simply passes the information back and forth between the origin server and the client.

For more information about session binding, see Section 3.2.


Note:

If an origin server cannot accept any more connections because of the load, Oracle Web Cache disables session binding to that origin server and attempts to connect to another origin server.

1.3 Compatibility with Oracle Fusion Middleware Components

Table 1-1 describes Oracle Web Cache compatibility with several Oracle Fusion Middleware components. It is not an exhaustive list.

Table 1-1 Compatibility with Other Oracle Fusion Middleware Components

ComponentDescription

Oracle HTTP Server


In Oracle Fusion Middleware, Oracle Web Cache resides in front of one or more instances of Oracle HTTP Server. Responses to browser based HTTP requests are directed to the Oracle HTTP Server instance and transmitted through Oracle Web Cache. The Oracle Web Cache instance can handle any Web content transmitted with the standard HTTP protocol.

See Also: Oracle Fusion Middleware Administrator's Guide for Oracle HTTP Server

Oracle Business Intelligence Discoverer

Oracle BI Discoverer is closely integrated with Oracle Web Cache to improve Discoverer Viewer's overall scalability, performance, and availability. Oracle BI Discoverer uses ESI Surrogate-Control headers to govern cacheability of other non-configured responses. Because of this integration, the load on mid-tier and database servers in Oracle BI Discoverer deployments is reduced, more Discoverer Viewer users are able to access the system concurrently, and those users experience significantly better response times for workbook operations and common business intelligence queries.

See Also: Oracle Business Intelligence Discoverer Configuration Guide

Oracle Forms Services

You can deploy Oracle Web Cache as a load balancer with Oracle Forms Services applications.

See Also: Oracle Fusion Middleware Forms Services Deployment Guide

Oracle Portal

Oracle Web Cache has been closely integrated with Oracle Portal to improve its overall scalability, performance, and availability. Oracle Portal ships with several pre-defined caching and invalidation policies that ensure optimal use of Oracle Web Cache. Oracle Web Cache controls have been built into the Oracle Portal administrative user interface and can also be specified by content providers through the Portal Developer Kit (PDK).

See Also: Oracle Fusion Middleware Administrator's Guide for Oracle Portal


PK-#ffPK=wE OEBPS/lof.htm List of Figures PKW}% PK=wEOEBPS/index.htm Index

Index

A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X 

Symbols

\ (backslash) symbol
path prefix expression, 6.8.1, 7.5.1, 7.7.2.2
regular expression, 7.7.2.2
. (period) symbol
path prefix expression, 6.8.1, 7.5.1, 7.7.2.2
regular expression, 7.7.2.2
" (double quotes) symbol
regular expression, 7.5.1, 7.7.2.1, 7.7.2.2
$ (dollar sign) symbol
path prefix expression, 6.8.1, 7.5.1, 7.7.2.2
regular expression, 7.7.2.2
& (ampersand) symbol
regular expression, 7.5.1, 7.7.2.1, 7.7.2.2
<!--esi--> tag, Edge Side Includes (ESI), 11.4.10
' (single quotes) symbol
regular expression, 7.5.1
* (asterisk) symbol
path prefix expression, 6.8.1, 7.5.1, 7.7.2.2
regular expression, 7.7.2.2
+wcdebug string, 8.8
> (greater than sign) symbol
regular expression, 7.5.1, 7.7.2.1, 7.7.2.2
? (question mark) symbol
path prefix expression, 6.8.1, 7.5.1, 7.7.2.2
regular expression, 7.7.2.2
[ ] (brackets) symbol
path prefix expression, 6.8.1, 7.5.1, 7.7.2.2
regular expression, 7.7.2.2
^ (caret) symbol
path prefix expression, 6.8.1, 7.5.1, 7.7.2.2
regular expression, 7.7.2.2
{ } (braces) symbol
path prefix expression, 6.8.1, 7.5.1, 7.7.2.2
regular expression, 7.7.2.2

Numerics

1024 port, 2.11.1.3, 2.11.1.4, 5.4.2, 5.5.1, 5.9
80 port, 12.1.1, 12.1.1

A

Accept request-header field, 6.5.1, 9.2.2.1
Accept-Charset request-header field, 6.5.1
Accept-Encoding request-header field, 6.5.1
Accept-Language request-header field, 6.5.1
access control, 5.3
access log fields
bytes, 9.2.2
c-ip, 9.2.2, 9.2.2
cs, 9.2.2
cs-bytes, 9.2.2
cs-method, 9.2.2
cs-uri, 9.2.2
cs-uri_stem, 9.2.2
cs-uri-query, 9.2.2
date, 9.2.2
r-time-taken, 9.2.2
sc, 9.2.2
sc-status, 9.2.2
s-ip, 9.2.2
time, 9.2.2
time-taken, 9.2.2
x-auth-id, 9.2.2
x-cache, 9.2.2
x-cache-detail, 9.2.2
x-clf-date, 9.2.2
x-cluster, 9.2.2
x-conn-abrt, 9.2.2
x-cookie, 9.2.2
x-date-end, 9.2.2
x-date-start, 9.2.2
x-ecid, 9.2.2
x-esi-info, 9.2.2
x-glcookie-set, 9.2.2
x-log-id, 9.2.2
x-os-name, 9.2.2
x-os-timeout, 9.2.2
x-protocol, 9.2.2
x-req-line, 9.2.2
x-req-type, 9.2.2
x-time-delay, 9.2.2
x-time-end, 9.2.2
x-time-handshake, 9.2.2
x-time-reqblocked, 9.2.2
x-time-reqqueued, 9.2.2
x-time-reqrecvlatency, 9.2.2
x-time-reqsendlatency, 9.2.2
x-time-resprecvlatency, 9.2.2
x-time-respsendlatency, 9.2.2
x-time-start, 9.2.2
access logs
configuring, 9.4
customized log format, 9.5
customized rollover policy, 9.6
examples, 9.2.3
formats, 9.2.1
Combined Log Format, 9.2.1.3
Common Log Format (CLF), 9.2.1.1
End-User Performance Monitoring Format, 9.2.1.5
Enhanced CLF (ECLF), 9.2.1.2
Enhanced Combined Log Format, 9.2.1.4
rolling over, 9.8
viewing, 9.7
access logs fields
described, 9.2.2
Access Logs menu option in Fusion Middleware Control, 2.6.2
access_log.fragment file, 9.2.2, 9.4
access_log.yyyymmddhhmm file, 9.4, 9.6, 9.6
ACTION element
in invalidation message, 7.5.1
admin server process
described, 2.8, 2.13
webcachea executable, 2.13
Administration menu in Fusion Middleware Control, 2.6.2
administration-only clusters, 3.6.7, 3.7.6
Advanced Content Invalidation menu option in Oracle Web Cache Manager, 2.7.2
ADVANCEDSELECTOR element
in invalidation message, 7.5.1
aliases, 2.2
Apache Tomcat, 12.3
APIs
jawc.jar, 7.7.3
wxvappl.sql, 7.7.3
wxvutil.sql, 7.7.3
attempt tag, Edge Side Includes (ESI), 11.4.8
audit logs, 9.9
Audit Policy menu option in Fusion Middleware Control, 2.6.2
authorization, 5.1.3
Authorization request-header field, 6.3, 9.2.2.1

B

backend failover, 3.1.3
Basic Content Invalidation menu option in Oracle Web Cache Manager, 2.7.2
BASICSELECTOR element
in invalidation message, 7.5.1
binding sessions, 1.2.6
BODYEXP attribute
in invalidation message, 7.5.1
busy_error.html file, 2.11.6

C

cache cluster members, 3.3
cache clusters
adding cache members
with Oracle Web Cache Manager, 3.7.2
adding cache members to
with Fusion Middleware Control, 3.6.3
adding caches to, 3.7.2
adding members, 3.7.2, 3.7.5
administration-only, 3.6.7, 3.7.6
authentication, 3.3
benefits of, 3.3
cache cluster settings
with Fusion Middleware Control, 3.6.3
with Oracle Web Cache Manager, 3.7.1
client-side certificates and, 5.5.2, 5.5.2.2
deploying, 10.1
failover
failover threshold, 3.6.3, 3.7.1
ping URL, 3.6.3, 3.7.1
polling interval, 3.6.3, 3.7.1
invalidation and, 3.3, 7.7.2.1, 7.10.2.1
invalidation-only, 3.6.7, 3.7.6
name, 3.7.1
on-demand content and, 3.3
overview, 3.3
owned content and, 3.3
removing cache members
with Fusion Middleware Control, 3.6.6
with Oracle Web Cache Manager, 3.7.5
session binding
with Fusion Middleware Control, 3.6.4
with Oracle Web Cache Manager, 3.7.3
synchronizing configuration
with Fusion Middleware Control, 3.6.5, 3.7.4
synchronizing invalidation messages
with Fusion Middleware Control, 3.6.7, 3.7.6
cache contents
generating list of, 8.2
writing list to file, 8.7
CACHE element in webcache.xml file, 3.8
cache hierarchies
deploying, 10.2, 10.2
cache hits
described, 1.1.1, 6.1
cache memory
configuring, 2.11.5
described, 2.3.1
cache misses
described, 1.1.1, 6.1
Cache Operations menu option in Oracle Web Cache Manager, 2.7.2
cache population, 6.1
cache server process
described, 2.8, 2.13
webcached executable, 2.13
cache size
configuring, 2.11.5
maximum, 2.3.1
Cache-Control request-header field, 9.2.2.1
Cache-Control response-header field, 6.3, 9.2.2.1
cached objects
maximum size, 2.3.3
caching rules
configuring, 6.8
general rules, 6.8.1
HTTP error responses, 6.8.5
ignoring the value of parameters, 6.8.3
MIME-type based, 6.8.1
multiple versions of the same object, 6.8.2
popular pages, 6.8.8
session caching rules, 6.8.6, 6.8.7
URL based, 6.8.1
for multiple versions of the same object, 6.8.4
overview, 6.3
priority, 6.4
secure, 5.8
summary statistics, 6.9
troubleshooting, A.3
Caching Rules menu option in Fusion Middleware Control, 2.6.2
CALYPSONETINFO element in webcache.xml file, 6.8.4, A.1.4, A.1.7
capacity
of cluster members, 3.7.1
origin server, 2.11.2
troubleshooting, A.1.5
cascading style sheets, compression, 1.2.5
category cookies
described, 6.5.1
request and response value comparison, 6.5.1
certificate authority (CA), 5.1.1.2.1
certificate revocation lists, 5.1.1.2.2
certificates
client-side, 5.1.1.2.2, 5.5.2
configuring for, 5.5.2
server-side, 5.1.1.2.2, 5.1.1.2.2
choose tag, Edge Side Includes (ESI), 11.4.1
client IP request filter
configuring, 4.6
described, 4.2
ClientIP request headers
forwarding, 5.7
client-side certificates, 5.1.1.2.2, 5.5.2
clusters and, 5.5.2
configuring, 5.5.2
cache clusters and, 5.5.2.2
distributed cache hierarchy and, 5.1.1.2.2
for site, 5.5.2.3
sites and, 5.1.1.2.2, 5.1.1.2.2
Cluster menu option in Fusion Middleware Control, 2.6.2
clusters
adding cache members
with Oracle Web Cache Manager, 3.7.2
adding cache members to
with Fusion Middleware Control, 3.6.3
adding caches to, 3.7.2
adding members, 3.7.2, 3.7.5
administration-only, 3.6.7, 3.7.6
authentication, 3.3
benefits of, 3.3
cache cluster settings
with Fusion Middleware Control, 3.6.3
with Oracle Web Cache Manager, 3.7.1
client-side certificates, 5.5.2, 5.5.2.2
deploying, 10.1
failover
failover threshold, 3.6.3, 3.7.1
ping URL, 3.6.3, 3.7.1
polling interval, 3.6.3, 3.7.1
invalidation and, 3.3, 7.7.2.1, 7.10.2.1
invalidation-only, 3.6.7, 3.7.6
on-demand content and, 3.3
overview, 3.3
owned content and, 3.3
removing cache members
with Fusion Middleware Control, 3.6.6
with Oracle Web Cache Manager, 3.7.5
synchronizing configuration
with Fusion Middleware Control, 3.6.5, 3.7.4
synchronizing invalidation messages
with Fusion Middleware Control, 3.6.7, 3.7.6
Combined Log Format, 9.2.1.3
comment tag, Edge Side Includes (ESI), 11.4.2
Common Log Format (CLF), 9.2.1.1
compression
cascading style sheets, 1.2.5
configuring
for caching rules, 6.8.1
for sites, 2.11.3
with compress directive in Surrogate-Control response-header field, 6.10.1, 6.10.1
described, 1.2.5
disabling for all requests, 2.11.3.1
GIF files, 1.2.5
GZIP utility, 1.2.5
HTML files, 1.2.5
Javascript files, 1.2.5
JPEG files, 1.2.5
PNG files, 1.2.5
WinZip utility, 1.2.5
configuring
access control, 5.3
access logs, 9.4
cache memory, 2.11.5
cache size, 2.11.5
caching rules
partial page caching, 11.2.1
compression
for caching rules, 6.8.1
for sites, 2.11.3
with compress directive in Surrogate-Control response-header field, 6.10.1, 6.10.1
Edge Side Includes (ESI), 11.2
event logs, 9.3
expiration, 6.7
failover
cache clusters, 3.6.3, 3.7.1
origin servers, 2.11.2
HTTPS requests, 5.4
load balancers
hardware, 10.1
Microsoft Network Load Balancing, 3.9
Oracle Web Cache software, 3.8
load balancing of origin servers, 2.11.2
partial page caching, 11.2
passwords, 5.2
reverse proxy without caching, 3.8
session binding to origin server, 3.2
site settings, 2.11.3
software load balancing without caching, 3.8
connection limit
cache cluster communication, 3.7.1
configuring, 2.11.5
described, 2.3.2
on UNIX, 2.3.2
on Windows, 2.3.2
Connection request-header field, 9.2.2.1
Content-Encoding request-header field, 9.2.2.1
Content-Encoding response-header field, 1.2.5, 9.2.2.1
Content-Language request-header field, 9.2.2.1
Content-Language response-header field, 9.2.2.1
Content-Length request-header field, 9.2.2.1, A.1.6
Content-Length response-header field, 9.2.2.1
Content-Type request-header field, 9.2.2.1
Content-Type response-header field, 9.2.2.1
COOKIE element
in invalidation message, 7.5.1
Cookie request-header field, 6.3, 9.2.2.1
category cookies, 6.5.1
with Edge Side Includes (ESI), 11.1.10
cookies
category cookies for multiple versions of the same URL, 6.5.1
session cookies
caching rules, 6.5.4, 6.8.6
session binding, 1.2.6
session-encoded URLs, 6.5.5

D

data consistency
with clusters, 3.3
with invalidation, expiration, and validation, 6.2
Date request-header field, 9.2.2.1
Date response-header field, 9.2.2.1
deleting cache members, 3.6.6, 3.7.5
deploying Oracle Web Cache
cache clusters, 10.1
cache hierarchies, 10.2
common configuration, 10.1
load balancers
hardware, 10.1
network, 10.3
software, 10.3
reverse proxy without caching, 10.3
diagnostic information
displaying in HTML response body, 8.3
displaying in Server-response header field, 8.3
Diagnostics menu option in Oracle Web Cache Manager, 2.7.2
DNS server, 1.1.1
Document Type Definitions (DTDs)
WCSinvalidation.dtd, 7.5.1

E

ECID, 9.1.1.4
Edge Side Includes (ESI)
<!--esi--> tag, 11.4.10
attempt tag, 11.4.8
choose tag, 11.4.1
comment tag, 11.4.2
Cookie request-header field, 11.1.10
environment tag, 11.4.3
ESI for Java (JESI), 11.1.1.1
examples
personalized greeting, 11.2.3.2
portal site, 11.2.3.1
Surrogate-Control response-header field, 6.10.1, 7.6
except tag, 11.4.8
exception and error handling, 11.1.7
HTTP_ACCEPT_LANGUAGE variable, 11.1.6.3
HTTP_COOKIE variable, 11.1.6.3
HTTP_HEADER variable, 11.1.6.3
HTTP_HOST variable, 11.1.6.3
HTTP_REFERER variable, 11.1.6.3
HTTP_USER_AGENT variable, 11.1.6.3
include tag, 11.2.3.1.2, 11.2.3.1.2, 11.4.4
inline tag, 11.2.3.1.1, 11.2.3.1.1, 11.2.3.1.1, 11.3, 11.4.5
invalidate tag, 11.4.6
otherwise tag, 11.4.1
personalized greetings, 11.2.2
QUERY_STRING_DECODED variable, 11.1.6.3
remove tag, 11.4.7
Set-Cookie response-header field, 11.1.10
Surrogate-Capability request-header field, 11.1.3
Surrogate-Control response-header field, 6.10, 6.10.1, 11.3
tags, 11
try tag, 11.4.8
vars tag, 11.2.3.1.2, 11.4.9
when tag, 11.4.1
embedded URL parameters
caching rules, 6.5.4, 6.8.6
ignoring the value of parameters, 6.5.2, 6.8.3
session binding, 1.2.6
session-encoded URLs, 6.5.5
EncodeBase64.java file, 7.7.1
End-User Performance Monitoring Format, 9.2.1.5
Enhanced CLF format (ECLF), 9.2.1.2
Enhanced Combined Log Format, 9.2.1.4
environment tag, Edge Side Includes (ESI), 11.4.3
error pages
configuring for Edge Side Includes (ESI) include errors, 11.1.7
default, 2.11.6
busy_error.html, 2.11.6
esi_fragment_error.txt, 2.11.6
network_error.html, 2.11.6
ESI for Java (JESI), 11.1.1.1
ESI. See Edge Side Includes (ESI)
esi_fragment_error.txt file, 2.11.6
ETag response-header field, 9.2.2.1
event log information
displaying in HTML response body, 8.3
displaying in Server-response header field, 8.3
event logs
configuring, 9.3
examples of, 9.1.2
formats, 9.1.1
Oracle Diagnostic Logging (ODL), 9.1.1.1
Oracle Web Cache, 9.1.1.2
rolling over, 9.8
viewing, 9.7
Event Logs menu option in Fusion Middleware Control, 2.6.2
event_log.yyyymmddhhmm file, 9.3
except tag, Edge Side Includes (ESI), 11.4.8
expiration
concepts of, 6.2.1
configuring, 6.7
Expiration menu option in Fusion Middleware Control, 2.6.2
Expires response-header field, 6.3, 9.2.2.1
exporting list of contents, 8.7

F

failover
configuring
cache clusters, 3.6.3, 3.7.1
origin servers, 2.11.2
failover threshold
cache clusters, 3.6.3, 3.7.1
origin servers, 2.11.2
overview
origin servers, 3.1.3
ping URL
cache cluster members, 3.6.3, 3.7.1
origin servers, 2.11.2
polling interval
cluster members, 3.6.3, 3.7.1
origin servers, 2.11.2
file descriptors
privileges and, 5.9
file extension
caching rules and, 6.8.1
Filtering menu in Oracle Web Cache Manager, 2.7.2
firewalls and Oracle Web Cache deployment, 1.2.1
format request filter
configuring, 4.11
described, 4.2
Fusion Middleware Control
navigating, 2.6.2
Oracle Web Cache
Access Logs menu option, 2.6.2
Administration menu, 2.6.2
Audit Policy menu option, 2.6.2
Caching Rules menu option, 2.6.2
Cluster menu option, 2.6.2
Event Logs menu option, 2.6.2
Expiration menu option, 2.6.2
General Information menu, 2.6.2
Multi-Version menu option, 2.6.2
Origin Servers menu option, 2.6.2
Passwords menu option, 2.6.2, 2.6.2
Ports Configuration menu option, 2.6.2
Request Filters menu option, 2.6.2
Resource Limits menu option, 2.6.2
Security menu, 2.6.2
Session Configuration menu option, 2.6.2
Sites menu option, 2.6.2
SSL Configuration menu option, 2.6.2
Wallets menu option, 2.6.2
URL for, 2.6.1

G

garbage collection, 2.3.1
General Information menu in Fusion Middleware Control, 2.6.2
GIF files, compression, 1.2.5
GLOBALCACHINGRULES element in webcache.xml file, 6.8.4, 6.8.4
group ID for Oracle Web Cache administration, 5.9.1
GZIP utility, compression, 1.2.5

H

hardware load balancers, 10.1, 10.1
configuring, 10.1
configuring same ping URL as auto-restart mechanism, 10.1
HEADER element
in invalidation message, 7.5.1, 7.5.1
header request filter
configuring, 4.9
described, 4.2
hierarchies. See cache hierarchies
high availability
with clusters, 3.3
hits
described, 1.1.1
HOST attribute
in invalidation message, 7.5.1
HOST ID element in webcache.xml file, 5.4.6
Host request-header field, 9.2.2.1
HTML files, compression, 1.2.5
HTTP request header size, 5.6
HTTP request-header fields
Accept, 6.5.1, 9.2.2.1
Accept-Charset, 6.5.1
Accept-Encoding, 6.5.1
Accept-Language, 6.5.1
Authorization, 6.3, 9.2.2.1
Cache-Control, 9.2.2.1
ClientIP, 5.7
Connection, 9.2.2.1
Content-Encoding, 9.2.2.1
Content-Language, 9.2.2.1
Content-Length, 9.2.2.1, A.1.6
Content-Type, 9.2.2.1
Cookie, 6.3, 9.2.2.1
category cookies, 6.5.1
Date, 9.2.2.1
described, 6.5.1
Host, 9.2.2.1
If-Modified-Since, 6.2.2, 9.2.2.1
If-None-Match, 6.2.2, 9.2.2.1
Keep-Alive, 2.11.5
Last-Modified, 9.2.2.1
Pragma, 9.2.2.1
Proxy-Authorization, 6.3
Range, 9.2.2.1
Referer, 9.2.2.1
SSL-Client-Cert, 5.1.1.2.2, 5.5.2
Surrogate-Capability, 9.2.2.1, 11.1.3
Surrogate-Control, 11.1.3
TE, 9.2.2.1
User-Agent, 6.5.1, 9.2.2.1
Via, 9.2.2.1
HTTP response-header fields
Cache-Control, 6.3, 9.2.2.1
Content-Encoding, 9.2.2.1
Content-Language, 9.2.2.1
Content-Length, 9.2.2.1
Content-Type, 9.2.2.1
Date, 9.2.2.1
ETag, 9.2.2.1
Expires, 6.3, 9.2.2.1
Last-Modified, 9.2.2.1
Pragma, 6.3, 9.2.2.1
Server, 8.3, 9.2.2.1
Set-Cookie, 6.3, 9.2.2.1
category cookies, 6.5.1
Surrogate-Control, 6.3, 6.10, 6.10.1, 9.2.2.1
Surrogate-Key, 7.6, 7.9
Transfer-Encoding, 9.2.2.1
Via, 9.2.2.1
Warning, 6.3
HTTP_ACCEPT_LANGUAGE variable, 11.1.6.3
HTTP_COOKIE variable, 11.1.6.3
HTTP_HEADER variable, 11.1.6.3
HTTP_HOST variable, 11.1.6.3
HTTP_REFERER variable, 11.1.6.3
HTTP_USER_AGENT variable, 11.1.6.3
httpd.conf file, A.5
HTTPS requests
configuring, 5.4
listening port, 5.4.2
Secure Sockets Layer (SSL) protocol, 5.1.1.2

I

IBM Websphere Application Server, 12.2
ID attribute
in invalidation response, 7.5.2
If-Modified-Since request-header field, 6.2.2, 9.2.2.1
If-None-Match request-header field, 6.2.2, 9.2.2.1
include tag, Edge Side Includes (ESI), 11.2.3.1.2, 11.2.3.1.2, 11.4.4
INFO element
in invalidation message, 7.5.1
in invalidation response, 7.5.2
inline invalidation
configuring, 11.3
described, 7.3
inline tag, Edge Side Includes (ESI), 11.2.3.1.1, 11.2.3.1.1, 11.2.3.1.1, 11.3, 11.4.5
INTERCACHE element in webcache.xml file, 10.2
INV_PEER_TIMEOUT attribute in webcache.xml file, A.1.4
invalidate tag, Edge Side Includes (ESI), 11.4.6
invalidation
advanced, 7.7.2.2
basics, 7.7.2.1
concepts of, 6.2.3
for clusters, 3.3, 7.10.2.1
mechanisms
APIs, 7.7.3
database triggers, 7.7.4
HTTP POST messages, 7.7.1
inline, 7.3
Oracle Web Cache Manager, 7.7.2
response-header, 7.4
scripts, 7.7.5
previewing list, 7.5.3, 7.7.2.1, 7.7.2.2
propagating messages, 3.3
cache cluster, 3.7.1, 3.7.6, 7.7.2.1, 7.10.2.1
cache hierarchy, 7.10.2.2
Surrogate-Key response-header field, 7.6, 7.6
synchronizing messages
cache cluster, 3.6.7
invalidation coordinator, 3.3, 7.10.2.1
invalidation messages
ACTION element, 7.5.1
ADVANCEDSELECTOR element, 7.5.1
BASICSELECTOR element, 7.5.1
BODYEXP attribute, 7.5.1
compatibility with release 1.0, 7.5.1
COOKIE element, 7.5.1
HEADER element, 7.5.1, 7.5.1
HOST attribute, 7.5.1
INFO element, 7.5.1
METHOD attribute, 7.5.1
NAME attribute, 7.5.1, 7.5.1, 7.5.1
OBJECT element, 7.5.1
path prefix expression
\ (backslash) symbol, 6.8.1, 7.5.1, 7.7.2.2
. (period), 6.8.1, 7.5.1, 7.7.2.2
$ (dollar sign) symbol, 6.8.1, 7.5.1, 7.7.2.2
* (asterisk), 6.8.1, 7.5.1, 7.7.2.2
? (question mark) symbol, 6.8.1, 7.5.1, 7.7.2.2
[ ] (brackets) symbol, 6.8.1, 7.5.1, 7.7.2.2
^ (caret) symbol, 6.8.1, 7.5.1, 7.7.2.2
{ } (braces) symbol, 6.8.1, 7.5.1, 7.7.2.2
regular expression, 7.7.2.2
\ (backslash) symbol, 7.7.2.2
. (period) symbol, 7.7.2.2
" (double quotes) symbol, 7.5.1, 7.7.2.1
$ (dollar sign) symbol, 7.7.2.2
& (ampersand) symbol, 7.5.1, 7.7.2.1, 7.7.2.2
' (single quotes) symbol, 7.5.1
* (asterisk) symbol, 7.7.2.2
> (greater than sign) symbol, 7.5.1, 7.7.2.1, 7.7.2.2
? (question mark) symbol, 7.7.2.2
[ ] (brackets) symbol, 7.7.2.2
^ (caret) symbol, 7.7.2.2
{ } (braces) symbol, 7.7.2.2
REMOVALTTL attribute, 7.5.1
SYSTEM element, 7.5.1
SYSTEMINFO element, 7.5.1
TYPE attribute, 7.5.1, 7.5.1
URI attribute, 7.5.1
URIEXP attribute, 7.5.1
URIPREFIX attribute, 7.5.1
VALUE attribute, 7.5.1, 7.5.1, 7.5.1, 7.5.1
VERSION attribute, 7.5.1, 7.5.2
invalidation preview messages
MAXNUM attribute, 7.5.3
STARTNUM attribute, 7.5.3
VERSION attribute, 7.5.3
invalidation preview responses
NUMURLS attribute, 7.5.4
SELECTEDURL element, 7.5.4
STARTNUM attribute, 7.5.4
STATUS attribute, 7.5.4
syntax of, 7.5.4
TOTALNUMURLS attribute, 7.5.4
VERSION attribute, 7.5.4
invalidation responses, 7.5.2, 7.5.2
ID attribute, 7.5.2
INFO element, 7.5.2
NUMINV attribute, 7.5.2
RESULT element, 7.5.2
STATUS attribute, 7.5.2
syntax of, 7.5.1, 7.5.4
SYSTEM element, 7.5.2
SYSTEMINFO element, 7.5.2
invalidation-only clusters, 3.6.7, 3.7.6
IP addresses
verifying, 5.7
IP version 4 addresses, 2.5
IP version 6 addresses, 2.5

J

Javascript files, compression, 1.2.5
jawc.jar file, 7.7.3
JESI, 11.1.1.1
JPEG files, compression, 1.2.5

K

Keep-Alive request-header field
configuring for, 2.11.5
KEEPALIVE4MSIE_SSL attribute in webcache.xml file, A.1.7

L

Last-Modified request-header field, 9.2.2.1
Last-Modified response-header field, 9.2.2.1
learned rules in request filters, 4.3
configuring, 4.7.1, 4.8.1
limits.conf file, 2.3.2, 2.3.2
listening ports
HTTP, 2.11.1.3
HTTPS, 5.4.2
listLogs command, 9.7
load balancers
hardware, 10.1
Microsoft Network Load Balancing, 3.9
Oracle Web Cache software, 3.8
load balancing
configuring
hardware load balancer by registering IP address, 10.1
Microsoft Network Load Balancing, 3.9
Oracle Web Cache as a software load balancer, 3.8
origin servers by setting capacity, 2.11.2
described, 3.1.2
Local timestamp conversion issue, 9.3
Logging and Diagnostics menu in Oracle Web Cache Manager, 2.7.2

M

MAPPEDUSERAGENT subelement of GLOBALCACHINGRULES element, 6.8.4
MAPTYPE subelement of GLOBALCACHINGRULES element, 6.8.4
MATCHSTRING subelement of GLOBALCACHINGRULES element, 6.8.4
Max_File_Desc setting, 2.3.2
maximum cache size
configuring, 2.3.1
maximum cached object size, 2.3.3
MAXNUM attribute
in invalidation preview message, 7.5.3
memory
configuring, 2.3.1
METHOD attribute
in invalidation message, 7.5.1
method request filter
configuring, 4.7
described, 4.2
Microsoft IIS, 12.4
MIME type caching, 6.8.1
misses
described, 1.1.1
mod_osso protected pages, 5.1.4.2
Monitor Only option, 4.4
multiple versions of the same object
configuring rules for, 6.8.2, 6.8.5
cookie values, 6.5.1
HTTP request headers, 6.5.1, 6.8.4
Multi-Version menu option in Fusion Middleware Control, 2.6.2

N

NAME attribute
in invalidation message, 7.5.1, 7.5.1, 7.5.1
netstat -a command, 2.3.2
network connections
on UNIX, 2.3.2
on Windows, 2.3.2
network load balancers, 3.9
network throughput in clusters, 3.3
Network Timeout menu option in Oracle Web Cache Manager, 2.7.2
network_error.html file, 2.11.6
NUMINV attribute
in invalidation response, 7.5.2
NUMURLS attribute
in invalidation preview response, 7.5.4

O

OBJECT element
in invalidation message, 7.5.1
on-demand content, 3.3
On-Demand Log File Rollover menu option in Oracle Web Cache Manager, 2.7.2
OpenSSL certificate revocation lists, 5.1.1.2.2
operating system load balancers, 3.9
operation ports
HTTP, 2.11.1.4
HTTPS, 5.5.1
Operations menu in Oracle Web Cache Manager, 2.7.2
operations ports
HTTPS, 5.5.1
OPMN. See Oracle Process and Notification
opmnctl utility
parameters, 2.8
restartproc command, 2.8, 2.13.1
startall command, 2.8
startproc command, 2.8, 2.13.1
status command, 2.8
stopall command, 2.8
stopproc command, 2.8, 2.13.1
Oracle BI Discoverer, 1.3
Oracle Diagnostic Logging (ODL), 9.1.1.1
Oracle Forms Services, 1.3
Oracle Fusion Middleware
with Oracle Web Cache, 1.1
Oracle Portal, 1.3
Oracle Process Manager and Notification
commands for Oracle Web Cache, 2.8
described, 2.8
port configuration, 2.11.1.2
starting, stopping, restarting, 2.13.1
Oracle Single Sign-On
caching content from servers, 5.1.4.1
partner applications, 5.1.4.2
Oracle Single Sign-On caching, 5.8
Oracle Single-Sign
caching, 5.8
Oracle Web Cache
adding to an environment, 2.10
admin server process, 2.8, 2.13
cache server process, 2.8, 2.13
compatibility
Oracle BI Discoverer, 1.3
Oracle Forms Services, 1.3
Oracle Portal, 1.3
deploying
as a reverse proxy server without caching, 10.3
as a software load balancer without caching, 10.3
cache clusters, 10.1
cache hierarchies, 10.2
common configuration, 10.1
with a hardware load balancer, 10.1
with a network load balancer, 10.3
features
backend failover, 3.1.3
caching, 1.2.2, 1.2.4
compression, 1.2.5
load balancing, 3.1, 3.1.2
origin server load balancing and failover, 1.2.3
restricted administration, 5.1.1.1
reverse proxying, 1.1.1
Secure Sockets Layer (SSL), 5.1.1.2
security, 5.1.1
session binding, 1.2.6
SSL acceleration hardware solutions, 5.1.1.3
surge protection, 3.1.1
logging formaT, 9.1.1.2
Oracle Single Sign-On caching, 5.8
Oracle Single Sign-On servers, 5.1.4.1
Oracle Web Tier, 1.1
population of the cache, 6.1
restarting
Fusion Middleware Control, 2.13.2
opmnctl restartproc command, 2.8, 2.13.1
Oracle Process Manager and Notification Server, 2.13.1
Oracle Web Cache Manager, 2.13.3
retrieving status
opmnctl status command, 2.8
starting
Fusion Middleware Control, 2.13.2
opmnctl restartproc command, 2.8, 2.13.1
opmnctl startall command, 2.8
opmnctl startproc command, 2.8, 2.13.1
Oracle Process Manager and Notification Server, 2.13.1
Oracle Web Cache Manager, 2.13.3
stopping
Fusion Middleware Control, 2.13.2
opmnctl stopall command, 2.8
opmnctl stopproc command, 2.8, 2.13.1
Oracle Process Manager and Notification Server, 2.13.1
Oracle Web Cache Manager, 2.13.3
with Oracle HTTP Server, 1.1
with Oracle WebLogic Server, 1.1
Oracle Web Cache Manager
Advanced Content Invalidation menu option, 2.7.2
Basic Content Invalidation menu option, 2.7.2
Cache Operations menu option, 2.7.2
cluster configuration, 3.7.1
described, 2.7
Diagnostics menu option, 2.7.2
Filtering menu, 2.7.2
invalidating content, 7.7.2
layout, 2.7.2
Logging and Diagnostics menu, 2.7.2
Network Timeouts menu option, 2.7.2
On-Demand Log File Rollover menu option, 2.7.2
Operations menu, 2.7.2
Properties menu, 2.7.2
Request Filters menu option, 2.7.2
Security menu option, 2.7.2
starting, 2.7.1
Oracle Web Cache operation
HTTP, 2.11.1.4
Oracle Web Tier
described, 1.1
Oracle HTTP Server, 1.1
Oracle Web Cache, 1.1
Oracle-ECID request header, 9.1.1.4
origin servers
capacity, 2.11.2
failover
failover threshold, 2.11.2
ping URL, 2.11.2
polling interval, 2.11.2
load balancing
capacity, 2.11.2
configuring, 2.11.2
described, 3.1, 3.1.2
session binding
described, 1.2.6
Origin Servers menu option in Fusion Middleware Control, 2.6.2
otherwise tag, Edge Side Includes (ESI), 11.4.1
owned content, 3.3

P

partial page caching
caching rules, 11.2
configuring, 11.2.1
described, 11.1
examples
personalized greetings, 11.2.3.2
portal site, 11.2.3.1
Surrogate-Control response-header field, 6.10.1, 7.6
Surrogate-Control response-header field, 6.10
passwords, 5.2
Passwords menu option in Fusion Middleware Control, 2.6.2, 2.6.2
path prefix
caching rules and, 6.8.1
path prefix expression
\ (backslash) symbol, 6.8.1, 7.5.1, 7.7.2.2
. (period) symbol, 6.8.1, 7.5.1, 7.7.2.2
$ (dollar sign) symbol, 6.8.1, 7.5.1, 7.7.2.2
* (asterisk) symbol, 6.8.1, 7.5.1, 7.7.2.2
? (question mark) symbol, 6.8.1, 7.5.1, 7.7.2.2
[ ] (brackets) symbol, 6.8.1, 7.5.1, 7.7.2.2
^ (caret) symbol, 6.8.1, 7.5.1, 7.7.2.2
{ } (braces) symbol, 6.8.1, 7.5.1, 7.7.2.2
performance
metrics
Performance Summary page, 8.4
request filtering, 4.13
Web Cache Home page, 2.6.3
settings for Oracle Web Cache
configuring, 2.11.5
described, 2.3
troubleshooting degradation, A.1.3
personalized attributes
Edge Side Includes (ESI), 11.2.2, 11.2.3.1.1
WEBCACHEEND tag, 11.4.8.2
WEBCACHETAG tag, 11.4.8.2
ping URL
cache clusters, 3.6.3, 3.7.1
hardware load balancers, 10.1
origin servers, 2.11.2
PKI, 5.1.1.2
PNG files, compression, 1.2.5
popular requests
listing, 8.2
populating the cache, 6.1
ports
1024, 2.11.1.3, 2.11.1.4, 5.4.2, 5.5.1, 5.9
80, 12.1.1, 12.1.1
8080, 12.1.1
described, 2.4
Oracle Web Cache listening
HTTP, 2.11.1.3
HTTPS, 5.4.2
Oracle Web Cache operation
HTTPS, 5.5.1
third-party application servers, 12.1.1
used by Oracle Web Cache
Fusion Middleware Control, 2.11.1.1
Oracle Process Manager and Notification, 2.11.1.2
Ports Configuration menu option in Fusion Middleware Control, 2.6.2
POST body parameters
caching rules, 6.8.6
ignoring the value of parameters, 6.5.2, 6.8.3
Pragma request-header field, 9.2.2.1
Pragma response-header field, 6.3, 9.2.2.1
preview invalidation, 7.5.3, 7.7.2.1, 7.7.2.2
privileged IP request filter
configuring, 4.5
described, 4.2
process identity, 5.1.2
root privilege and, 5.9.3
propagating invalidation messages
cache cluster, 3.7.1, 3.7.6, 7.7.2.1
cache hierarchy, 7.10.2.2
Properties menu in Oracle Web Cache Manager, 2.7.2
Proxy-Authorization request-header field, 6.3
public key infrastructure (PKI), 5.1.1.2

Q

query string request filter
configuring, 4.10
described, 4.2
QUERY_STRING_DECODED variable, 11.1.6.3

R

Range request-header field, 9.2.2.1
readme.toolkit.html file, 7.7.3
Referer request-header field, 9.2.2.1
regular expression
\ (backslash) symbol, 7.7.2.2
. (period) symbol, 7.7.2.2
" (double quotes) symbol, 7.5.1, 7.7.2.1, 7.7.2.2
$ (dollar sign) symbol, 7.7.2.2
& (ampersand) symbol, 7.5.1, 7.7.2.1, 7.7.2.2
' (single quotes) symbol, 7.5.1
* (asterisk) symbol, 7.7.2.2
> (greater than sign) symbol, 7.5.1, 7.7.2.1, 7.7.2.2
? (question mark) symbol, 7.7.2.2
[ ] (brackets) symbol, 7.7.2.2
^ (caret) symbol, 7.7.2.2
{ } (braces) symbol, 7.7.2.2
REMOVALTTL attribute
in invalidation message, 7.5.1
remove tag, Edge Side Includes (ESI), 11.4.7
removing cache members, 3.6.6, 3.7.5
request filters, 4.4
client IP, 4.2
copying rules, 4.14.1
deleting rules, 4.12
format, 4.2
header, 4.2
learned rules, 4.3, 4.3
configuring, 4.7.1, 4.8.1
method, 4.2
privileged IP, 4.2
query string, 4.2
reverting configuration settings, 4.14.2
statistic monitoring, 4.13
statistics, 4.13
URL, 4.2
Request Filters menu option in Fusion Middleware Control, 2.6.2
Request Filters menu option in Oracle Web Cache Manager, 2.7.2
Resource Limits menu option in Fusion Middleware Control, 2.6.2
response-header invalidation
described, 7.4
enabling, 7.8
restarting Oracle Web Cache
after configuration changes, 2.11.7
Fusion Middleware Control, 2.13.2
opmnctl restartproc command, 2.8, 2.13.1
Oracle Process Manager and Notification Server, 2.13.1
Oracle Web Cache Manager, 2.13.3
restricted administration, 5.1.1.1
RESULT element
in invalidation response, 7.5.2
reverse proxy server with caching
Oracle Web Cache as a, 1.1
reverse proxy server without caching
Oracle Web Cache as a, 3.4.1
configuring, 3.8
feature limitations, 3.4.1
rlim_fd_max parameter, 2.3.2
rolling over logs, 9.8
rollover policies, 9.6
root privilege
webcached and, 5.9
round robin, 3.1.2
routing requests
to origin servers, 2.11.2
ROUTINGONLY attribute in webcache.xml file, 3.8
rules for creating caching rules, 6.3

S

scalability
with cache clusters, 3.3
search keys for invalidation, 7.6
secure caching, 5.8
Secure Sockets Layer (SSL), 5.1.1.2
troubleshooting, A.1.1
security
HTTPS requests, 5.4
security features
access control, 5.3
authorization and access enforcement, 5.1.3
HTTP request header size, 5.6
HTTPS requests, 5.1.1.2
passwords, 5.2
protected resources, 5.1.2
restricted administration, 5.1.1.1
running webcached with root privilege, 5.9
secure caching, 5.8
SSL acceleration hardware solutions, 5.1.1.3
valid ClientIP headers, 5.7
Security menu in Fusion Middleware Control, 2.6.2
Security menu option in Oracle Web Cache Manager, 2.7.2
SELECTEDURL element
in invalidation preview response, 7.5.4
Server response-header field, 8.3
access logs, 9.2.2.1
diagnostic information, 8.3
server-side certificates, 5.1.1.2.2, 5.1.1.2.2
SERVERTYPEattribute in webcache.xml file, 5.4.6
session binding
concepts of, 3.2
configuring, 3.5
cache clusters, 3.6.4, 3.7.3
described, 1.2.6
Session Configuration menu option in Fusion Middleware Control, 2.6.2
session cookies
caching rules, 6.5.4, 6.8.6
session binding, 1.2.6
session-encoded URLs, 6.5.5
session-encoded URLs
configuring, 6.8.7
described, 6.5.5
sessions
binding to an origin server, 3.2, 3.5
caching rules, 6.5.4, 6.8.6
serving popular pages from the cache, 6.8.8
Set-Cookie response-header field, 6.3, 9.2.2.1
category cookies, 6.5.1
with Edge Side Includes (ESI), 11.1.10
site definitions
creating, 2.11.3
default site, 2.2
described, 2.2
named sites, 2.2
undefined sites, 2.2
sites, 2.11.4
aliases, 2.2
client-side certificate and, 5.5.2.3
configuring, 2.11.3
default, 2.2
definitions for
creating, 2.11.3
described, 2.2
named, 2.2
undefined, 2.2
Sites menu option in Fusion Middleware Control, 2.6.2
site-to-server mappings
creating, 2.11.4
described, 2.2
software load balancing without caching
configuring, 3.8
feature limitations, 3.4.1
SSL acceleration hardware, 5.1.1.3
SSL Configuration menu option in Fusion Middleware Control, 2.6.2
SSL See Secure Sockets Layer (SSL)
SSL-Client-Cert headers, 5.1.1.2.2
ssl.conf file, 5.4.4.1
starting OPMN processes, 2.8
starting Oracle Web Cache, 2.13
Fusion Middleware Control, 2.13.2
opmnctl restartproc command, 2.8, 2.13.1
opmnctl startall command, 2.8
opmnctl startproc command, 2.8, 2.13.1
Oracle Process Manager and Notification Server, 2.13.1
Oracle Web Cache Manager, 2.13.3
STARTNUM attribute
in invalidation preview message, 7.5.3
in invalidation preview response, 7.5.4
stateful load balancing. See session binding
stateless load balancing. See load balancing
statistics monitoring requests
port number, using to obtain statistics, 8.4
STATUS attribute
in invalidation preview response, 7.5.4
in invalidation response, 7.5.2
stopping OPMN processes, 2.8
stopping Oracle Web Cache, 2.13
Fusion Middleware Control, 2.13.2
opmnctl stopall command, 2.8
opmnctl stopproc command, 2.8, 2.13.1
Oracle Process Manager and Notification Server, 2.13.1
Oracle Web Cache Manager, 2.13.3
surge protection, 3.1.1
Surrogate-Capability request-header field, 9.2.2.1, 11.1.3
orcl="ESI/1.0" operation value, 11.1.3
orcl="ESI-Inline/1.0" operation value, 11.1.3
orcl="ESI-INV/1.0" operation value, 11.1.3
orcl="ORAESI/9.0.2" operation value, 11.1.3
orcl="ORAESI/9.0.4" operation value, 11.1.3
orcl="webcache/1.0" operation value, 11.1.3
Surrogate-Control response-header field, 6.3, 6.10, 6.10, 6.10.1, 9.2.2.1, 11.3
compress control directive, 6.10.1
content="ESI/1.0" control directive, 6.10.1, 11.1.3
content="ESI-Inline/1.0" control directive, 6.10.1
content="ESI-INV/1.0" control directive, 6.10.1, 11.3
content="ORAESI/9.0.2" control directive, 6.10.1, 11.1.3
content="ORAESI/9.0.4" control directive, 6.10.1
content="webcache/1.0" control directive, 6.10.1, 11.1.3
max-age control directive, 6.10.1
no-store control directive, 6.10.1
vary control directive, 6.10.1
Surrogate-Key response-header field, 7.6, 7.9
synchronizing configuration to cluster, 3.6.5, 3.7.4
synchronizing invalidation messages
cache cluster, 3.6.7
SYSTEM element
in invalidation message, 7.5.1
in invalidation response, 7.5.2
SYSTEMINFO element
in invalidation message, 7.5.1
in invalidation response, 7.5.2

T

TE request-header field, 9.2.2.1
third-party application servers
Apache Tomcat, 12.3
IBM Websphere Application Server, 12.2
Microsoft IIS, 12.4
top utility, A.1.2
TOTALNUMURLS attribute
in invalidation preview response, 7.5.4
Transfer-Encoding response-header field, 9.2.2.1
troubleshooting
browsers displaying a page not displayed error, A.1.7
browsers not receiving complete responses, A.1.6
caching rules, A.3
common configuration mistakes
ping URL, A.2
running webcached with root privilege, A.2
site configuration, A.2
Edge Side Includes (ESI) errors, A.4
GMT to local timestamp, 9.3
invalidation timeouts
cache clusters, A.1.4
load issues, A.1.2
no response from application Web server, A.1.1
origin server capacity, A.1.5
performance degradation
over maximum cache size limit, A.1.3
paging, A.1.3
XML parsing errors in the Event Viewer, A.1.9
try tag, Edge Side Includes (ESI), 11.4.8
ttcp utility, 2.3.2
TYPE attribute
in invalidation message, 7.5.1, 7.5.1

U

uptime utility, A.1.2
URI attribute
in invalidation message, 7.5.1
URIEXP attribute
in invalidation message, 7.5.1
URIPREFIX attribute
in invalidation message, 7.5.1
URL caching, 6.8.1
URL request filter
configuring, 4.8
described, 4.2
user ID for Oracle Web Cache administration, 5.9.1
User-Agent request-header field, 6.5.1, 9.2.2.1
multiple-version objects and, 6.8.4
UTL_TCP Oracle supplied package, 7.7.4

V

VALUE attribute
in invalidation message, 7.5.1, 7.5.1, 7.5.1, 7.5.1
vars tag
Edge Side Includes (ESI), 11.2.3.1.2
vars tag, Edge Side Includes (ESI), 11.4.9
VERSION attribute
in invalidation preview message, 7.5.3
in invalidation preview response, 7.5.4
in invalidation response, 7.5.2
VERSION element
in invalidation message, 7.5.1
Via request-header field, 9.2.2.1
Via response-header field, 9.2.2.1

W

wallets
creating, 5.4.1
default, 5.1.1.2.3
described, 5.1.1.2.3
Wallets menu option in Fusion Middleware Control, 2.6.2
Warning response-header field, 6.3
WCSinvalidation.dtd file, 7.5.1
Web tier
described, 1.1
Oracle HTTP Server, 1.1
Oracle Web Cache, 1.1
webcache_contents.txt file, 8.7
webcache_setuser.sh script, 5.9.1, 5.9.2, 5.9.3, 5.9.4
command format, 5.10
revert command, 5.10
setidentity command, 5.10
setroot command, 5.10
webcachea executable, 2.13
webcached executable, 2.13
privileges and, 2.11.1.3, 2.11.1.4, 5.4.2, 5.5.1
running with root privilege, 5.9
WEBCACHEEND tag for personalized attributes, 11.4.8.2
WEBCACHETAG tag for personalized attributes, 11.4.8.2
webcache.xml file
CACHE element, 3.8
CALYPSONETINFO element, 6.8.4, A.1.4, A.1.7
GLOBALCACHINGRULES element, 6.8.4, 6.8.4
HOST ID element, 5.4.6
INTERCACHE element, 10.2
INV_PEER_TIMEOUT attribute, A.1.4
KEEPALIVE4MSIE_SSL attribute, A.1.7
ROUTINGONLY attribute, 3.8
SERVERTYPE attribute, 5.4.6
when tag, Edge Side Includes (ESI), 11.4.1
WinZip utility, compression, 1.2.5
wxvappl.sql script, 7.7.3
wxvutil.sql script, 7.7.3

X

x-ecid field, 9.1.1.4
PK05!PK=wEOEBPS/whatsnew.htmj What's New in This Guide?

What's New in This Guide?

This preface introduces the new and changed administrative features of Oracle Web Cache that are described in this guide, and provides pointers to additional information.

New Features for Release 11g

11g Release 1 (11.1.1) includes many new features:

  • Request filtering: You can configure Oracle Web Cache with request filters to take actions on incoming requests based on certain attributes of the request. An incoming request must pass through configured request filters for a given site before Oracle Web Cache processes it. By configuring request filters, you can prevent malicious code from exploiting software vulnerabilities. For more information, see Chapter 4, "Configuring Request Filtering."

  • MIME Type Match Criteria for Caching Rules: In addition to specifying the criteria for matching a caching rule to incoming requests based on the URL expression, you can base the match evaluation on the value of the Content-Type response header of objects. This feature simplifies the definition of caching rules, reduces the overall number of caching rules, and improves Oracle Web Cache performance. For more information, see Section 6.4 and Section 6.8.1.

  • Invalidation using response headers: You can enable an origin server to invalidate cached content through an HTTP response header. For more information, see Section 7.4.

  • Request-based logging: Oracle Web Cache stores every request internally and then writes them in bulk after the request to the event logs. In this way, Oracle Web Cache groups all the requests For more information, see Section 9.1.

  • Oracle Diagnostic Logging (ODL) format for event logs: Oracle Web Cache supports the ODL format, which provides a common format for all diagnostic messages and log files. For more information, see Section 9.1.

  • Audit logging: Oracle Web Cache supports the Common Audit Framework for providing a uniform system for administering audits across Oracle Fusion Middleware components. The audit log files generated by Oracle Web Cache processes provide important information that can help you identify and diagnose potential security performance and configuration issues. For more information, see the Oracle Fusion Middleware Security Guide.

  • Secure caching: You can configure Oracle Web Cache to support caching content that is secured by Oracle Single Sign-On authentication with no other authorization requirements. For more information, see Section 5.8.

PK PK=wEOEBPS/glossary.htm Glossary

Glossary

access log

A log file that contains information about the HTTP requests sent to Oracle Web Cache for a Web site. The access log has a file name of access_log and is stored by default in the following directories:

(UNIX) ORACLE_INSTANCE/diagnostics/logs/WebCache/<webcache_name>
(Windows) ORACLE_INSTANCE\diagnostics\logs\WebCache\<webcache_name>

admin server process

An Oracle Web Cache process that provides administration, configuration, and monitoring capabilities.

application Web server

An origin server that manages data for a Web site, controls access to that data, and responds to clients requests. The application on the Web server interfaces with the database and performs the job requested by the Web server.

cache cluster

A loosely coupled collection of cooperating Oracle Web Cache cache instances to provide a single logical cache. Cache clusters provide failure detection and failover of caches, increasing the availability of your Web site.

cache cluster member

An instance of Oracle Web Cache configured with other instances of Oracle Web Cache to operate as one logical cache. The cache cluster members communicate with one another to request cacheable content that is cached by another cache cluster member and to detect when a cache cluster member fails.

cache hierarchy

A deployment in which an Oracle Web Cache caches content from another Oracle Web Cache to a local market. Oracle Web Cache provides support for a distributed cache hierarchy in a distributed network and an ESI cache hierarchy in an ESI provider site configuration.

cache hit

An HTTP or HTTPS request that can be served from objects stored in the Oracle Web Cache cache without going to the origin server.

cache miss

An HTTP or HTTPS request that cannot be served from the cache and must be forwarded to an origin server.

cache server process

An Oracle Web Cache process that manages the cache by providing connection management and request processing.

capacity

For origin servers, the maximum number of concurrent connections that the origin server can accept.

For cache clusters, the absolute capacity for the number of concurrent incoming connections to this cache cluster member from all other cache cluster members, and the relative capacity of the cache cluster member.

category cookie

A cookie that enables the multiple version of the same page to served to different categories of users.

central cache

In a distributed cache hierarchy, an Oracle Web Cache server that acts as an origin server to at least one remote cache. When content becomes invalid, the central cache propagates the invalidation request to the remote caches to ensure consistency.

Common Log Format (CLF)

An industry-standard format for Web transaction log files.

cookie

A packet of state information sent by an origin server to a Web browser during an HTTP request. During subsequent HTTP requests, the cookie is passed back to the origin server, enabling the origin server to remember the state of the last transaction.

distributed cache hierarchy

A cache hierarchy in which a central cache acts as an origin server to a remote cache.

DMZ

A demilitarized zone (DMZ) or perimeter network is a network area (a subnetwork) that sits between an organization's internal network and an external network, usually the Internet. The point of a DMZ is that connections from the internal and the external network to the DMZ are permitted, whereas connections from the DMZ are only permitted to the external network; hosts in the DMZ may not connect to the internal network. This allows the DMZ's hosts to provide services to both the internal and external network while protecting the internal network in case intruders compromise a host in the DMZ.

Domain Name System (DNS)

A system for naming computers and network services that is organized into a hierarchy of domains. DNS is used in TCP/IP networks to locate computers through user-friendly names. DNS resolves a friendly name into an IP address, which is understood by computers.

Document Type Definition (DTD)

Markup declarations that provide a grammar for a class of objects.

Edge Side Includes (ESI)

A markup language to enable partial page caching of HTML fragments.

embedded URL parameter

Parameter information embedded in the URL of objects. Oracle Web Cache accepts requests that use the following characters as delimiters: question mark (?), ampersand (&), dollar sign ($), or semicolon (;).

ESI cache hierarchy

A cache hierarchy in which a provider cache acts as an origin server to a subscriber cache.

ESI provider site

A site that Oracle Web Cache contacts for Edge Side Includes (ESI) assembly only. Browsers are not allowed to request content from these sites.

event log

A log file that contains Oracle Web Cache event and error information. The event log has a file name of event_log and is stored in the following directories:

(UNIX) ORACLE_INSTANCE/diagnostics/logs/WebCache/<webcache_name>
(Windows) ORACLE_INSTANCE\diagnostics\logs\WebCache\<webcache_name>

expiration

A function that marks objects as invalid after a certain amount of time in the cache. When objects are marked as invalid and a client requests them, they are either immediately removed and refreshed or refreshed based on when the origin server can refresh them.

Extended Log Format (XLF)

An improved format for HTTP server logins since it is extensible, permitting a wider range of data to be captured. XLF enables you to configure the logger to generate different statistics of HTTP requests such as the IP address of clients, methods of the HTTP requests and response headers such as user agent and accept.

Extensible Markup Language (XML)

A language that offers a flexible way to create common information formats. XML is used for invalidation messages and responses.

farm

A collection of components managed by Fusion Middleware Control. It can contain zero or one managed server domains and the Oracle Fusion Middleware system components that are installed, configured, and running on the domain.

failover

When an origin server fails, Oracle Web Cache automatically distributes the load over the remaining origin servers and polls the failed origin server for its current up/down status until it is back online. In a cache cluster environment, Oracle Web Cache transfers ownership of the content of the failing member to the remaining cluster members.

failure detection

In a cache cluster environment, Oracle Web Cache detects when a cache cluster member is unavailable.

GET method

An HTTP request method used for simple requests for Web pages. A GET method is made up of a URL. Requests for pages that use the GET method are typically cached.

GET method with query string

An HTTP request method made up of a URL and a query string containing parameters and values. An example of an HTTP GET with query string follows.

http://www.myserver.com/setup/config/navframe?frame=default

This request executes a script named navframe in the /setup/config directory of the www.myserver.com server and passes the script a value of default for the frame variable.


Note:

You should not cache pages with GET with query strings forms that make changes to the origin server or database. You should only cache pages that use GET with query strings if they are used in searches.

garbage collection

An Oracle Web Cache process that removes stale objects based on popularity and validity.

HTTP protocol

Hypertext Transfer Protocol. A protocol that provides the language that enables browsers and the origin server to communicate.

HTTP request header

A header that enables Web browsers to pass additional information about the request and about itself to the origin server.

HTTP request method

A method included in the HTTP request that specifies the purpose of the client's request. HTTP supports many methods, but the ones that concern caching are GET, GET with query string, and POST methods.

HTTPS protocol

Secure Hypertext Transfer Protocol. A protocol that uses the Secure Sockets Layer (SSL) to encrypt and decrypt user page requests as well as the pages that are returned by the origin server.

invalidation

An Oracle Web Cache function that marks objects as invalid. When objects are marked as invalid and a client requests them, they are removed and then refreshed with new content from the origin server. Invalidation keeps the Oracle Web Cache cache consistent with the content on the origin servers.

invalidation coordinator

In a cache cluster environment, Oracle Web Cache propagates invalidation messages to other cache cluster members. It sends the invalidation messages to one cache cluster member who acts as the coordinator. The coordinator propagates the invalidation messages to the other cluster members.

IP address

Used to identify a node on a network. Each computer on the network is assigned a unique IP address, which is made up of the network ID, and a unique host ID. This address is typically represented in dotted-decimal notation, with the decimal value of each octet separated by a period, for example 144.45.9.22.

latency

Networking round-trip time.

load balancing

A feature in which HTTP requests are distributed among origin servers so that no single server is overloaded.

Layer 7 (L7) switch

A networking switch that provides load balancing functionality at Layer 7 of the Open Systems Interconnection (OSI) model—the Application layer. L7 switches base their load balancing decisions on URL content.

load balancer

A mechanism for balancing the load of incoming requests. This mechanism is typically a hardware load balancer in the form of a network switch, such asLayer 7 (L7) switch. A hardware load balancer is typically positioned in front of the Oracle Web Cache server. Oracle Web Cache can act as a software load balancer for environments where a hardware load balancer is not available.

on-demand content

In a cache cluster environment, on-demand content consists of popular objects that are stored in the cache of each cluster member.

Open Systems Interconnection (OSI)

A model of network architecture developed by ISO as a framework for international standards in heterogeneous computer network architecture.

The OSI architecture is split among seven layers, from lowest to highest:

1. Physical layer

2. Data link layer

3. Network layer

4. Transport layer

5. Session layer

6. Presentation layer

7. Application layer

Each layer uses the layer immediately following it and provides a service to the preceding layer.

Oracle Enterprise Manager

A tool for administering Oracle Application Server. It is a complete management solution for administering, configuring, and monitoring the application server and its components. Using it, you can:

  • View the overall status of Oracle Web Cache

  • View performance metrics

Oracle Web Cache Manager

A tool that combines configuration abilities with component control to provide an integrated environment for configuring and managing Oracle Web Cache.

origin server

A server that is either an application Web server for internal sites or a proxy server for external sites outside a firewall.

owned content

In a cache cluster environment, content that is owned by a particular cache cluster member. Oracle Web Cache distributes the cached content among the cache cluster members. In effect, it assigns content to be owned by a particular cache cluster member.

partial page caching

A feature that enables Oracle Web Cache to independently cache and manage fragments of HTML objects. A template page is configured with Edge Side Includes (ESI) markup tags that tell Oracle Web Cache to fetch and include the HTML fragments. The fragments themselves are HTML files containing discrete text or other objects.

performance assurance heuristics

Heuristics that enable Oracle Web Cache to assign a queue order to objects. These heuristics determine which objects can be served stale and which objects must be retrieve immediately. While objects with a higher priority are retrieved first, objects with a lower priority are retrieved at a later time.

The queue order of objects is based on the popularity of objects and the validity of objects assigned during invalidation. If the current load and capacity of the origin server is not exceeded, then the most popular and least valid objects are refreshed first.

personalized attribute

Pages that contain personalized attributes, such as personalized greetings like "Hello, Name," icons, addresses, or shopping cart snippets, on an otherwise generic page. You can configure Oracle Web Cache to substitute values for personalized attributes based on the information contained within a cookie or an embedded URL parameter.

popularity

The number of requests for an object since entering the cache and the number of recent requests for the object.

POST body parameter

Parameter information embedded in the POST body of objects.

POST method

An HTTP request method used for requests that modify the contents of the data store on the origin server, such as posting a message to a mailing list, submitting forms for registration purposes, or adding entries to the database.


Note:

You should not cache pages with POST forms that make changes to the origin server or database. You should only cache pages that use POST forms if they are used in searches.

proxy server

An origin server that substitutes for the real server, forwarding client connection requests to the real server or to other proxy servers. Proxy servers provide access control, data and system security, monitoring, and caching.

provider

Set of content—content areas, pages, applications, even data from outside sources—brought in one central location and accessed through a common interface, called a page.

provider cache

In an ESI cache hierarchy, an Oracle Web Cache server that locally caches content for a provider site. A subscriber cache then contacts the provider caches for assembly of HTML fragments. When content becomes invalid, the provider cache propagates the invalidation request to the subscriber cache to ensure consistency.

provider site

A site that provides a source of content for a provider cache and a subscriber cache.

regular expression

Oracle Web Cache supports the POSIX 1003 extended regular expressions for URLs, as supported by Netscape Proxy Server 2.5.

See http://www.cs.utah.edu/dept/old/texinfo/regex/regex_toc.html for regular expression syntax

remote cache

In a distributed cache hierarchy, an Oracle Web Cache server that caches content from a central cache to serve local requests. When an invalidation request is sent to the central cache, the central cache propagates the request to the remote cache, ensuring consistent content.

reverse proxy

A server that appears to be the content server to clients but internally retrieves its objects from other back-end origin servers as a proxy. A reverse proxy acts a gateway to the origin servers. It relays requests from outside the firewall to origin servers behind the firewall, and delivers retrieved content back to the client.

round robin

A method of managing server congestion by distributing connection loads across multiple servers. Round robin works on a rotating basis in that the first origin server in the list of configured servers receives the request, then the second origin server receives the second request, and so on.

Secure Sockets Layer (SSL)

A protocol developed by Netscape Corporation. SSL is an industry-accepted standard for network transport layer security. SSL provides authentication, encryption, and data integrity, in a public key infrastructure (PKI). By supporting SSL, Oracle Web Cache can cache pages for HTTPS protocol requests.

selectors

Oracle Web Cache uses selectors to filter through the caching rules to locate the appropriate rule for the request. Cacheability can be evaluated against the following selectors:

session binding

The process of binding a user session to a given origin server to maintain state for a period.

session cookie

A cookie that enables a Web site to keep track of user sessions.

session-encoded URLs

HTML hyperlink tags, such as <A HREF=...>, that contain embedded session information to distinguish users. You can configure Oracle Web Cache to substitute the values of session parameters in HTML hyperlink tags with the session information contained within a session cookie or an embedded URL parameter.

subscriber cache

In an ESI cache hierarchy, an Oracle Web Cache server that assembles ESI content by contacting a provider cache for the template's HTML fragments. The HTML fragments are then assembled. When provider site content becomes invalid, the provider site propagates the invalidation request to the subscriber cache to ensure consistency.

Uniform Resource Identifier (URI)

The address syntax that is used to create a URL.

Uniform Resource Locator (URL)

A standard for specifying the location and route to a file on the Internet. URLs are used by browsers to navigate the World Wide Web and consist of a protocol, domain name, directory path, and the file name. For example, http://www.oracle.com/technology/index.html specifies the location and path a browser travels to find the main page of the Oracle Technology Network site on the World Wide Web.

validity

Expiration time, invalidation time, and removal time of an object.

virtual host site

A site hosted by Oracle Web Cache. Browsers can request cached content from these sites through Oracle Web Cache. In addition to caching content, Oracle Web Cache can also assemble ESI fragments from these sites.

wallet

A transparent database used to manage authentication data such as keys, certificates, and trusted certificates needed by SSL. A wallet has an X.509 version 3 certificate, private key, and list of trusted certificates.

weighted available capacity

The percentage of the available capacity that the origin server can accept.

webcachectl utility

A utility used to start, stop, and restart the admin server process, the cache server process, and the auto-restart process, if Oracle Web Cache is running in a standalone environment (that is, you installed Oracle Web Cache from a kit that included only this product; you did not install Oracle Web Cache as part of an Oracle Application Server installation).

PK PK=wE OEBPS/esi.htm Caching Dynamic Content with ESI Language Tags

11 Caching Dynamic Content with ESI Language Tags

This chapter describes the Edge Side Includes (ESI) tags provided for content assembly of dynamic fragments.

ESI is an open specification co-authored by Oracle. Its purpose is to develop a uniform programming model to assemble dynamic pages in a dynamic content cache deployed as a surrogate or proxy between clients and origin servers.

ESI is an XML-like markup language that enables dynamic content assembly of fragments by Oracle Web Cache. A template page is configured with ESI markup tags that fetch and include dynamic HTML fragments. The fragments themselves can also contain ESI markup. You can assign caching rules to the template page and HTML fragments. By enabling page assembly in Oracle Web Cache rather than in the origin server, you can increase cache hit rates and improve performance.

This chapter includes the following topics:

See http://www.esi.org for the ESI language release 1.0 specification.

11.1 Introduction to ESI for Partial Page Caching

Oracle Web Cache provides dynamic assembly of Web pages with both cacheable and non-cacheable page fragments. It provides for assembly by enabling Web pages to be divided into fragments of differing caching profiles. These fragments are maintained as separate elements in the cache. The fragments are assembled into HTML pages as appropriate when requested by end users.

By enabling dynamic assembly of Web pages on Oracle Web Cache rather than on the origin servers, you can choose to cache some fragments of assembled pages. With partial page caching, much more HTML content can be cached, and then assembled and delivered by Oracle Web Cache when requested. Furthermore, page assembly can be conditional, based on information provided in HTTP request headers or end-user cookies.

The basic structure that an application developer uses to create content for partial-page caching is a template page containing fragments. As depicted in Figure 11-1, the template consists of common elements, such as a logo, navigation bars, framework, and other "look and feel" elements of the page. The fragments represent dynamic subsections of the page.

Figure 11-1 Template Page

Description of Figure 11-1 follows

The template page is associated with the URL that end users request. To include the fragments, the template page is configured with ESI markup tags that instruct Oracle Web Cache to fetch and include the HTML fragments. The fragments themselves are HTML files containing discrete text or other objects.

Each included fragment is a separate object with its own caching policy. Content providers may want to cache the template for several days, but only cache a particular fragment, such as an advertisement or stock quote, for a matter of seconds or minutes. Other fragments (such as a user's bank account total) may be declared non-cacheable.

Table 11-1 provides a summary of the main ESI tags.

Table 11-1 Summary of ESI Tags

TagDescription

<esi:choose>

Performs conditional processing based on Boolean expressions

<esi:comment>

Specifies comments not be included in the output

<esi:environment>

Allows variable access from an HTTP response

<esi:include>

Includes an HTML fragment

<esi:inline>

Marks a fragment as a separately cacheable fragment, embedded in the HTTP response of another object

<esi:invalidate>

Specifies an invalidation request within the response of a browser page

<esi:remove>

Specifies non-ESI markup if ESI processing is not enabled

<esi:try>

Specifies alternate processing when a request fails because the origin server is not accessible

<esi:vars>

Permits variable substitution for environment variables


Example 11-1 shows the ESI markup language for the template page shown in Figure 11-1.

Example 11-1 ESI Markup

<HTML>
<HEAD>
<TITLE>
Company.com
</TITLE>
</HEAD>
<BODY>
...
<!-- The following <esi:comment> tags are removed if this page is processed by an ESI processor. -->

<!--esi

 <esi:comment text="This is the HTML source when ESI is enabled." />

 <esi:comment text="Start: The quick link section. You cannot use the standard
 HTML comments because the end of that comment tag would disrupt the HTML comment
tag with 'esi' following the two '-'." />

 <esi:comment text="The URI query string parameter 'sessionID' is used to carry
session identifiers, The session ID is encoded in all links." />

 <esi:comment text="'Profile' refers to environment variables stored in
 GetProfile.jsp. GetProfile.jsp enables access to 'PersonalInterest.' 'zipcode,'
 'tickers,' and 'address' environment variables." />

 <esi:environment src="/GetProfile.jsp?sessionID=$(QUERY_STRING{sessionID})"
name="Profile" />

<esi:vars>
   <A HREF="/shopping.jsp?sessionID=$(QUERY_STRING{sessionID})">
     <IMG SRC="/img/shopping.gif">
   </A>
   <A HREF="/news.jsp?sessionID=$(QUERY_STRING{sessionID})">
     <IMG SRC="/img/news.gif">
   </A>
   <A HREF="/sports.jsp?sessionID=$(QUERY_STRING{sessionID})">
     <IMG SRC="/img/sports.gif">
   </A>
   <A HREF="/fun.jsp?sessionID=$(QUERY_STRING{sessionID})">
     <img src="/img/fun.gif">
  </A>
  <A HREF="/about.jsp?sessionID=$(QUERY_STRING{sessionID})">
     <iMG SRC="/img/about.gif">
   </A>
 </esi:vars>

 <esi:comment text="End: The quick link section" />
...
 <H3>Local Weather</H3>
 <esi:include src="/weather.jsp?sessionID=$(QUERY_STRING{sessionID})&zipcode=$(Profile{zipcode})" />
...

 <H3>Stock Quotes</H3>
 <esi:try>
   <esi:attempt>
     <esi:include src="/CompanyStock.jsp?sessionID=$(QUERY_ STRING{sessionID})&tickers=$(Profiles{tickers})" />
   </esi:attempt>
   <esi:except>
     The company stock quote is temporarily unavailable.
   </esi:except>
 </esi:try>
...
 <H3>What's New at Company</H3>
 <!-- This section is a static file that does not carry session information -->
 <esi:include src="/whatisnew.html" />

...

 <H3>Today's News</h3>
 <esi:choose>

   <esi:when test="$(Profile{PersonalInterests}) == 'Sports'">
     <H4>Sport News</H4>
     <esi:include src="/SportNews.jsp?sessionID=$(QUERY_STRING{sessionID})" />
   </esi:when>

   <esi:when test="$(Profile{PersonalInterests}) == 'Career'">
     <H4>Financial News</H4>
     <esi:include src="/FinancialNews.jsp?sessionID=$(QUERY_STRING{sessionID})" />
   </esi:when>

   <esi:otherwise>
     <H4>General News</H4>
     <esi:include src="/DefaultNews.jsp?sessionID=$(QUERY_STRING{sessionID})" />
   </esi:otherwise>

 </esi:choose>

...

-->

<!-- This is the HTML source when ESI is disabled. -->
<esi:remove>
Alternative HTML source that does not use ESI goes here. This tag enables you 
to disable ESI on the fly without redeveloping or redeploying a different version
 of the page. 
</esi:remove>
...
</BODY>
</HTML>

Example 11-2 shows the XML response of GetProfile.jsp, which provides access to profile environment variables.

Example 11-2 GetProfile.jsp XML Response

<?xml version=1.0?>
<esi:environment esiversion="ORAESI/9.0.4">
  <PersonalInterests>Sports</PersonalInterests>
  <zipcode>94065</zipcode>
  <tickers>ORCL,YHOO</tickers>
  <address>500 Oracle Parkway, Redwood Shores, CA 94065</address>
</esi:environment>

11.1.1 ESI Features

ESI can be used with HTML, XML, JSP, ASP, and any Web programming technology. The ESI language includes the following features:

  • Inclusion

    An ESI processor assembles HTTP or HTTPS fragments of dynamic content, retrieved from the network, into aggregate pages to output to the user. Each fragment can have its own caching rules.

  • Support of variables

    ESI supports the use of variables based on HTTP request attributes, as well as custom variables from included HTML fragments. Variables can be used by ESI statements during processing or can be output directly into the processed markup.

  • Conditional processing

    ESI allows use of Boolean comparisons for conditional logic in determining how pages are processed.

  • Error handling and alternative processing

    Some ESI tags support specification of a default resource or an alternative resource, such as an alternate Web page, if the primary resource cannot be found. Further, it provides an explicit exception-handling statement block.

  • Character set conversion

    ESI fragments in different character sets are converted to one character set. This way, all partial pages are assembled in a fixed character set. Character set conversion works in the following manner:

    1. Oracle Web Cache receives a request for a template page.

    2. Oracle Web Cache fetches the fragments, and converts all of the fragments to the template's character set. The default character set is ISO-8859-1.

    Oracle Web Cache does not perform character set conversion for non-ESI pages.

  • XML conversion to HTML

    Oracle Web Cache uses XSL Transformations (XSLT) to transform XML fragments into HTML.

11.1.1.1 ESI for Java (JESI)

Oracle Web Cache provides the JESI tag library as a convenient interface to ESI tags and functionality. In addition, you can deploy the JESI tag library on Oracle WebLogic Server. Developers have the option of using ESI tags directly in any Web application, but JESI tags provide additional convenience in a JSP environment.

Because ESI and JESI are open standards, you can use the JESI tag library in any standard JSP environment if an ESI processor, such as Oracle Web Cache, is available.

Even though JSP developers can always use ESI, JESI provides an even easier way for JSP developers to express the modularity of pages and the cacheability of those modules, without requiring developers to learn a new syntax.

For further information about using JESI with Oracle WebLogic Server, see:

http://www.oracle.com/technology/sample_code/tech/java/codesnippet/webcache/index.html

11.1.2 ESI Language Elements in the Surrogate-Control Response Header

Oracle Web Cache supports the ESI language tags, elements, and attributes listed in Table 11-2. The rightmost column specifies, for each ESI tag, attribute, or element, all the feature sets that support it. For example, the <esi:invalidate> tag is only supported by the "ESI-INV/1.0" feature set. To enable the correct processing in Oracle Web Cache, specify all the feature sets that an ESI template uses in the content control directive of the Surrogate-Control response header. However, you do have to specify features sets used within an ESI fragment directly or indirectly included in the template. For example, if an ESI template uses an <esi:invalidate> and an <esi:environment> tag with an <esi:log> element, the content control directive must include "ESI-INV/1.0" and "ORAESI/9.0.4", as follows:

Surrogate-Control: content="ESI-INV/1.0 ORAESI/9.0.4"

See Section 6.10 for further information about configuring the Surrogate-Control response header.

Table 11-2 ESI Language Features

ESI Language FeatureSee Alsocontent="value" Control Directive in Surrogate-Control Response Header Supporting Feature

<esi:choose> | <esi:when> | <esi:otherwise> tags

Section 11.4.1


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0"

<esi:comment> tag

Section 11.4.2


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0"

<esi:environment> tag

Section 11.4.3


"ORAESI/9.0.4"

"ORAESI/9.0.2"

<esi:include> tag

Section 11.4.4


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0"

<esi:environment> tag and <esi:include> tag attributes and elements

 


 


alt attribute

Section 11.4.4


"ORAESI/9.0.4"

"ESI/1.0"

max-age attribute

Section 11.4.4

Section 11.4.3


"ORAESI/9.0.4"

"ORAESI/9.0.2"

onerror attribute

Section 11.4.4


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0"

src attribute

Section 11.4.4


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0"

timeout attribute

Section 11.4.4

Section 11.4.3


"ORAESI/9.0.4"

"ORAESI/9.0.2"

<esi:log> element

Section 11.4.4

Section 11.4.3


"ORAESI/9.0.4"

<esi:request_header> element

Section 11.4.4

Section 11.4.3


"ORAESI/9.0.4"

"ORAESI/9.0.2"

<esi:request_body> element

Section 11.4.4

Section 11.4.3


"ORAESI/9.0.4"

"ORAESI/9.0.2"

<esi:inline> tag

Section 11.4.5


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI-Inline/1.0"

"ESI/1.0"

name attribute

Section 11.4.5


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI-Inline/1.0"

"ESI/1.0"

fetchable attribute

Section 11.4.5


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI-Inline/1.0"

"ESI/1.0"

max-age attribute

Section 11.4.5


"ORAESI/9.0.4"

"ORAESI/9.0.2"

timeout attribute

Section 11.4.4

Section 11.4.3


"ORAESI/9.0.4"

"ORAESI/9.0.2"

<esi:invalidate> tag

Section 11.4.6


"ESI-INV/1.0"

<esi:remove> tag

Section 11.4.7


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0"

<esi:try> | <esi:attempt> | <esi:except> tags

Section 11.4.8


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0"

<esi:vars> tag

Section 11.4.9


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0"

<!--esi...---> tag

Section 11.4.10


"ORAESI/9.0.4"

"ORAESI/9.0.2"

"ESI/1.0"


See http://www.esi.org/spec.html for the ESI Language Specification 1.0 and the Edge Architecture Specification.

11.1.3 About the Surrogate-Control Response Header and Surrogate-Capability Request Header for Cached Objects

To enable Oracle Web Cache to process ESI tags, you set an HTTP Surrogate-Control response-header field in the HTTP response message of the pages that use ESI tags.

Surrogate-Control: content="ESI-INV/1.0 ORAESI/9.0.4"

For each requested object from the cache, Oracle Web Cache appends a Surrogate-Capability request-header field to an object's HTTP request message. The Surrogate-Capability request-header serves the following purposes:

  • Enables applications to detect Oracle Web Cache

  • Identifies the types of ESI operations that Oracle Web Cache can perform

The Surrogate-Capability request-header enables Oracle Web Cache to identify the operations it can perform to origin servers acting as caches. The Surrogate-Capability request-header field supports the following syntax:

Surrogate-Capability: orcl="operation_value operation_value ..."

where "operation_value" is one or more of the following:

  • "ORAESI/9.0.4" to process ESI tags with Oracle-proprietary additions for content assembly and partial page caching. "ORAESI/9.0.4" supports all the ESI tags provided by Oracle Web Cache in 10g (9.0.4) and later releases.

  • "ORAESI/9.0.2" to process ESI tags with Oracle proprietary additions for content assembly and partial page caching. "ORAESI/9.0.2" supports all the ESI tags provided by Oracle Web Cache in Release 2 (9.0.2 and 9.0.3).

  • "ESI/1.0" to process standard ESI tags for content assembly and partial page caching

  • "ESI-Inline/1.0" to process <esi:inline> tags

  • "ESI-INV/1.0" to process <esi:invalidate> tags

  • "webcache/1.0" to process the <!-- WEBCACHETAG--> and <!-- WEBCACHEEND--> tags for personalized attributes

The values "ORAESI/9.0.2", "ESI/1.0", and "ESI-Inline/1.0" are subsets of "ORAESI/9.0.4". For this release, you specify only "ORAESI/9.0.4" for ESI assembly, "ESI-INV/1.0" for inline invalidation, or "webcache/1.0" for personalized attributes.

See Table 11-3 or further information about the ESI tags supported for each operation_value.

11.1.4 Syntax Rules

ESI elements and attributes adhere to XML syntax but can be embedded in other objects, such as HTML or XML objects. When Oracle Web Cache processes the page, the ESI elements themselves are stripped from the output.

ESI syntax generally adheres to XML syntax rules. Keep the following in mind when using the tags:

  • ESI tags and attributes are case sensitive.

    They are generally lowercase.

  • Supported CGI environment variables are case sensitive.

    They are generally uppercase.

  • ESI does not support the use of whitespace next to the equal sign (=) or between the "<" and "esi:"

    The following shows an invalid construction:

    <esi:include src = "www.foo.com"/>
    

The following shows the correct form:

<esi:include src="www.foo.com"/>

11.1.5 Nesting Elements

As shown in Example 11-3, an ESI tag can contain nested ESI elements and other HTML markup.

Example 11-3 Nested ESI Elements

<esi:choose>
  <esi:when test="$(HTTP_HOST) == 'www.company.com'">
    <esi:include src="/company.html" />
    <h4>Another</h4>
    <esi:include src="/another.html" />
  </esi:when>
  <esi:when test="$(HTTP_COOKIE{fragment) == 'First Fragment'">
    <esi:try>
      <esi:attempt>
        <esi:include src="/fragment1.html" />
      </esi:attempt>
      <esi:except>
        <esi:choose>
          <esi:when test="$(HTTP_COOKIE{otherchoice}) == 'image'" >
            <img src="/img/TheImage.gif">
          </esi:when>
          <esi:otherwise>
            The fragment is unavailable.
         </esi:otherwise>
        </esi:choose>
      </esi:except>
    </esi:try>
  </esi:when>
  <esi:otherwise>
   The default selection.
  </esi:otherwise>
</esi:choose>

11.1.6 Variable Expressions

ESI supports the HTTP request variables and environment variables used with the <esi:environment> tag.

This section contains the following topics:

See Section 11.4.3 for instructions on including custom variables

11.1.6.1 Variable Usage

To refer to a variable, prefix it with a dollar sign and surround the variable name with parentheses:

$(VARIABLE_NAME)

For example:

$(HTTP_HOST)

Variables are accessed by a key as follows:

$(VARIABLE_NAME{key})

To access a variable's substructure, append the variable name with braces containing the key which is being accessed. For example:

$(HTTP_COOKIE{username})

The key is case sensitive and optional. If a key is not specified, the environment variable returns the whole content of the environment fragment. Oracle advises specifying an environment variable without a key only for testing whether the environment is empty. In the following ESI markup, $(logindata) is a variable that is evaluated against a null value:

<esi:environment src="/getlogindata" name="logindata"/>
<esi:include src="/login/$(logindata{account})"/">
<esi:choose>
  <esi:when test="$(logindata) != null">
    <esi:include src="/login/$(logindata{account})"/>
 </esi:when>
 <esi:otherwise>
   <esi:include src="/login/guest.html"/>
 <esi:otherwise>
</esi:choose>  

11.1.6.2 Variable Default Values

You can use the logical OR (|) operator to specify a default value in the following form:

$(VARIABLE|default)

A variable takes the default value only when the variable or its key does not exist. If it evaluates to an empty string, the empty string is returned, not the default value.

The following example results in Oracle Web Cache fetching http://example.com/default.html if the cookie id is not in the request:

<esi:include src="http://example.com/$(HTTP_COOKIE{id}|default).html"/>

As with other literals, if whitespace must be specified, the default value must be single-quoted. For example:

$(HTTP_COOKIE{first_name}|'new user')

Note:

HTTP_HOST and HTTP_REFERER do not support default values.

11.1.6.3 HTTP Request Variables

Table 11-3 lists the HTTP request variables supported by ESI. Note the following:

  • Except for QUERY_STRING, the values for the variables are taken from HTTP request-header fields. In the case of QUERY_STRING, the value is taken from either the HTTP request body or the URL.

  • Variables are only interpreted when enclosed within ESI tags.

  • Variables with a substructure type of List or Dictionary are accessed by a key.

  • Variables identified with a substructure type of Dictionary make access to strings available through their appropriate keys.

  • Dictionary keys are case sensitive.

  • Variables identified with a substructure type of List return a Boolean value depending on whether the requested value is present.

Table 11-3 HTTP Request Variables Supported by ESI

Variable NameHTTP Header FieldSubstructure Type/Variable TypeDescriptionExample

$(HTTP_ACCEPT_LANGUAGE{language})

Accept-Language request-header field

Specifies the set of languages that are preferred as a response. The language is used as the key.

List/Boolean

Specifies the language to use as the key and evaluates to the language specified in the HTTP request header

Variable Setting:

$(HTTP_LANGUAGE{en-gb})

HTTP Request Header Contains:

Accept_Language:en-gb

Result: Returns en-gb.

$(HTTP_COOKIE{cookie})

Set-Cookie response-header field or Cookie request-header field

Specifies cookie name and value pairs. A cookie name is used as the key.

If the Cookie request-header and Set-Cookie response-header have different values for the same cookie name, the name value pair from the Set-Cookie response header is used.

Dictionary/String

Specifies the cookie name to use as the key and returns that cookie's value

Variable Setting:

$(HTTP_COOKIE{visits})

HTTP Request Header Contains:

Cookie:visits=42

Result: Returns 42.

$HTTP_HEADER{header})

Any HTTP request header

Dictionary/String

Specifies an HTTP request header name to use as the key and returns that header's value

Variable Setting:

$(HTTP_HEADER{Referer})

HTTP Request Header Contains:

Referer: http://www.company.com:80

Result: Returns

http://www.company.com:80

$HTTP_HOST

Host request-header field

Specifies the host name and port number of the resource. Port 80 is the default port number.

Not Applicable/String

Returns the value of the HOST header

Variable Setting:

$(HTTP_HOST)

HTTP Request Header Contains:

Host:http://www.company.com:80

Result: Returns

http://www.company.com:80

$HTTP_REFERER

Referer request-header field

Specifies the URL of the reference resource

Not Applicable/String

Returns the value of the REFERER header

Variable Setting:

$(HTTP_REFERER)

HTTP Request Header Contains:

Referer: http://www.company.com:80

Result: Returns

http://www.company.com:80

$(HTTP_USER_AGENT{browser})

$HTTP_USER_AGENT{version})

$HTTP_USER_AGENT{os})

User-Agent request-header field

Specifies the Web browser type, browser version, or operating system that initiated the request.

Dictionary/String

Specifies one of three keys: browser for browser type, version for browser version, and os for operating system

Variable Setting:

$(HTTP_USER_AGENT{browser})

HTTP Request Header Contains:

User-Agent:Mozilla/4.0 (compatible, MSIE 5.5, Windows)

Result: Returns MSIE

$(HTTP_USER_AGENT{version})

Result: Returns 4.0.

$(HTTP_USER_AGENT{os})

Result: Returns Windows

$(QUERY_STRING{parameter})

Not Applicable

Dictionary/String

Given a parameter name in a query string, returns the value of the parameter without URL encoding. The query string can be in an URL or a request body.

See Also: http://www.rfc-editor.org/ for further information about URL encoding.

Variable Setting:

$(QUERY_STRING{CEO})

Query Request Contains:

CEO=Jane%20Doe&CFO=John%20Doe

Result: Returns the value of fullname decoded. In this example, CEO returns a value of Jane Doe.

$(QUERY_STRING)

Not Applicable

Not Applicable/String

Specifies to return the entire query string encoded

Variable Setting:

$(QUERY_STRING)

Query Request Contains:

CEO=Jane%20Doe&CFO=John%20Doe

Result: Returns the entire query string encoded:

CEO=Jane%20Doe&CFO=John%20Doe

$(QUERY_STRING_ENCODED{parameter})

Not Applicable

Dictionary/String

Given a parameter name in a query string, returns the value of the parameter with URL encoding. The query string can be in an URL or a request body.

Variable Setting:

$(QUERY_STRING{fullname})

Query Request Contains:

fullname=Jane%20Doe

Result: Returns the value of fullname encoded:

Jane%20Doe

$(QUERY_STRING_ENCODED)

Not Applicable

Not Applicable/String

The same as $(QUERY_STRING)

Variable Setting:

$(QUERY_STRING_ENCODED)

Query Request Contains:

fullname=Jane%20Doe

Result: Returns the entire query string encoded:

fullname=Jane%20Doe

$(QUERY_STRING_DECODED{parameter})

Not Applicable

Dictionary/String

The same as $(QUERY_STRING{parameter})

Variable Setting:

$(QUERY_STRING_DECODED{CEO})

Query Request Contains:

fullname=Jane%20Doe

Result: Returns the value of fullname decoded. In this example, fullname returns a value of Jane Doe.


11.1.7 Exceptions and Errors

ESI uses several mechanisms to handle exceptions encountered during an ESI fragment request. In a given situation, you can make use of all mechanisms simultaneously, or use one at a time, depending on the business logic you are developing.

The first mechanism is found in the ESI language, which provides three specific elements for fine-grain control over content assembly in error scenarios:

  • The alt attribute of the <esi:include> tag

  • The onerror attribute of the <esi:include> tag

  • The try |attempt |except block

  • Default page for the fragment

When the fragment specified for the src attribute of the <esi:include> tag cannot be fetched, the fragment specified with the alt attribute is used as an alternative. If the alt attribute is not used or the fragment cannot be fetched, the onerror attribute is used. The onerror attribute is used before the try |attempt |except block. If the try |attempt |except block does not exist, the exception handling is propagated to the parent or template page. If all the ESI language controls fail, Oracle Web Cache displays a default page for the fragment.

See the following sections:

11.1.8 About Fragmentation with the Inline and Include Tags

The <esi:inline> and <esi:include> tags enable applications to adopt ESI page fragmentation and assembly. The following sections describe the tags and explain when the tags are appropriate to use.

11.1.8.1 Using Inline for Non-Fetchable Fragmentation

Most existing applications are only designed to output an entire Web page to HTTP requests. These fragments and templates are non-fetchable, meaning they are not to be fetched independently from the origin server. If a cache needs any of these fragments or templates, the corresponding full Web page must be requested. To use ESI page assembly for non-fetchable fragments, an application can output the full page response just as it does normally, with the exception that at the beginning and the end of each fragment, an <esi:inline> tag is inserted with a fragment name to demarcate the fragment. Oracle Web Cache stores the enclosed portions as separate fragments and the original page as a page template without the enclosed fragments. Fragments are shared among templates if their names are identical and they are from the same site.

Example 11-4 shows a simple <esi:inline> example. The HTML table enclosed by the <esi:inline> tag is the fragment content. The area preceding <esi:inline name="/news101"> and the area following </esi:inline> form the page template. If another page contains an <esi:inline> tag with the same name "/news101", the two fragments logically share the same content.

Example 11-4 Inline Non-Fetchable Example

<HTML>
...
<esi:inline name="/news101">
<TABLE>
...
</TABLE>
</esi:inline>
...
</HTML>

When an application uses non-fetchable <esi:inline> fragments, the full page must be requested for every cache miss. At first, it can appear that there is no apparent cache benefit for cache misses. However, non-fetchable <esi:inline> fragments improves overall caching by:

  • Increasing the cache hit ratio

    Because shared fragments can be extracted into separate fragments, the size of the dynamic portion is reduced. A reduced space requirement results in a higher cache hit ratio than full page caching.

  • Reducing cache update frequency

    Dynamic shared fragments require only one update. For example, a shared stock market fragment may expire much more frequently than any other parts of the page. With <esi:inline> fragmentation, only one cache update of any full page containing this fragment is enough to bring all full pages sharing this fragment current. Therefore, even non-fetchable <esi:inline> fragments can significantly reduce cache update frequency. The cost reduction is proportional to the degree of sharing.

To invalidate non-fetchable fragments, you must invalidate both the template object and the non-fetchable fragments to ensure the fragments are invalidated.

11.1.8.2 Using Inline for Fetchable Fragmentation

<esi:inline> fragments are by default non-fetchable. If an application supports independently fetchable fragments, it is possible to use the <esi:inline> for fetchable fragments by setting the fetchable attribute to yes.

Example 11-5 shows an <esi:inline> example with a fetchable fragment named /news101. A request for the page returns the template page and the fetchable fragment.

Example 11-5 Inline Fetchable Example

<HTML>
...
<esi:inline name="/news101" fetchable="yes">
<TABLE>
...
</TABLE>
</esi:inline>
...
</HTML>

See Section 11.1.8.2 for further information about the fetchable attribute.

11.1.8.3 Using Include for Fragmentation

The <esi:include> tag is another way to define fragments and templates in an HTTP output for dynamic content caching and assembly. It is in many ways similar to the <esi:inline> tag. It defines a name for the defined fragment. The page including an <esi:include> tag is a template that references the defined fragment. However, it also has some key differences which make its applicable scenarios very different from those of <esi:inline>:

  • An <esi:include> tag in a template only defines the reference to a fragment.

    It does not enclose an embedded fragment directly in the template. As a result, a template with <esi:include> tags can be applied to multiple users. In contrast, a template with embedded <esi:inline> tags must be unique to each user.

  • A fragment referenced by an <esi:include> tag must always be independently fetchable by HTTP or HTTPS.

    The requested URL equals the fragment name. In contrast, an <esi:inline> tag's name only identifies the uniqueness of the fragment and is not used to fetch the actual content. The attribute defining the fragment name in <esi:include> fragment is src instead of name.

There are at least two scenarios where using <esi:include> tags is beneficial:

  • Some applications, such as a Web portal, naturally assemble content from external sources. The application only provides a template that is used to fetch various fragments from third-party sources. In this case, the <esi:include> tags fetch and assemble directly, reducing one layer of redundancy.

  • Some applications offer faster responses for template-only requests than full-page requests that use <esi:inline> tags. If <esi:include> is used for page fragmentation and assembly, Oracle Web Cache can miss only on the templates when most or all fragments are already cached, saving effective cache miss cost. In many cases, it is also valuable to cache the personalized templates because these seldom change.

Example 11-1 shows ESI markup with <esi:include> tags.

11.1.8.4 Selecting the Fragmentation Mechanism for Your Application

Although both <esi:include> and <esi:inline> enable Oracle Web Cache to fetch fragments for the client browser, <esi:include> is more robust for performing this task and provides an easy way in which to manage fragments. Because <esi:include> affects the application flow, it is best to incorporate <esi:include> early in the design phase of an application. For an existing application, <esi:inline> is better mechanism because it requires minimal change to your application.

11.1.9 Referer Request-Header Field

When Oracle Web Cache receives a client request for a template page with a Referer request-header field, it forwards the request with the Referer request header to the origin server. In turn, the origin server returns fragments to Oracle Web Cache with the URL of the template as the value for the Referer header. This functionality associates the fragment request with the template request.

11.1.10 Cookie Management for Template Pages and Fragments

Session cookie establishment for ESI templates and fragments works much the same way as typical Oracle Web Cache objects with the following additional features:

  • Cookie request-header field inheritance

    When a client requests an ESI template page that includes fragments, requests for fragment pages are generated in Oracle Web Cache. A fragment request inherits the Cookie request-header field from the template request if the value of the Host request-header field matches the value of Host request-header field in the template request.

  • Set-Cookie response-header field accumulation

    When assembly of fragments is complete, Oracle Web Cache includes a Set-Cookie response-header field in the response with the cookie information from the template. For those fragments with a Host request-header field that matches the Host request-header field in the template, Oracle Web Cache also accumulates the Set-Cookie response-header fields with that of the template. For those fragments with a Host request-header field that does not match the Host request-header field in the template, Oracle Web Cache does not accumulate the Set-Cookie response-header field with that of the template and other matching fragments.

See Section 11.1.6 for a description of how you can use the HTTP_COOKIE variable in ESI markup.

11.2 Enabling Dynamic Assembly of Content and Partial Page Caching

For an overview of partial page caching, see Section 11.1.

This section describes how to enable dynamic assembly of Web pages with fragments and how to create rules for the cacheable and non-cacheable page fragments. It contains the following topics:

11.2.1 Enabling Partial Page Caching

To enable partial page caching:

  1. Configure the template page as follows:

    1. Use ESI markup tags in the template to fetch and include the fragments.


      Important:

      ESI tags cannot be used on a page that contains <!-- WEBCACHETAG--> and <!-- WEBCACHEEND--> tags. If you require simple personalization and are using ESI, see Section 11.2.2, "Using ESI for Simple Personalization".

    2. In the template page, configure the HTTP response with the Surrogate-Control response-header field. For example:

      Surrogate-Control: max-age=30+60, content="ORAESI/9.0.4"
      
    3. If the Surrogate-Control response-header field does not include all the caching attributes required for the template page, create a caching rule for the page.

  2. Configure the fetchable fragments:

    • Use a Surrogate-Control response-header field in the HTTP response message.

    • If the Surrogate-Control response-header field does not include all the caching attributes required for the fragment, create a caching rule for the fragment.

For more information, see:

  • Section 11.4 for further information about ESI markup tags

  • Section 6.10 for further information about configuring the Surrogate-Control response-header field

  • Section 6.8 for further information about configuring caching rules

11.2.2 Using ESI for Simple Personalization

You can use variable expressions for simple personalization.

For example, the following HTML substitutes a user's name based on the value the client browser passes with username cookie. In addition, the session information contained within the sessionID cookie is used to replace session information for one user with another user.

The same effect is achieved with the following ESI markup:

<esi:vars>
 Welcome $(HTTP_COOKIE{'username'})!
 Here is a <A HREF="/jsp/myPage.jsp?sessionID=$(QUERY_STRING{'sessionid'})">link</A>.
</esi:vars>        

The <esi:vars> tag enables you to use an ESI environment variable outside of an ESI tag. You can also use variables with other ESI tags.

See the following sections:

11.2.3 Examples of ESI Usage

This section provides examples of ESI usage in the following topics:

11.2.3.1 Example of a Portal Site Implementation

Figure 11-2 shows a portal site response page, http://www.company.com/servlet/oportal?username=Mark, for a registered user named Mark.

Figure 11-2 Portal Site Page

Description of Figure 11-2 follows

This page is assembled by Oracle Web Cache. A template page configured with ESI markup tags for a personalized greeting, weather, stocks, promotional advertisement, news, and sports fragments is assembled based on Mark's preferences. For example, because Mark chose San Francisco weather, the application looks up San Francisco weather information and puts it into the final full HTML page output. Because of its dynamic content, this page would not be cacheable. On the other hand, with ESI markup tags, Oracle Web Cache assembles and caches most of the content.

The following sections describe how the template page and its fragments are implemented using <esi:inline> and <esi:include> tags:

11.2.3.1.1 Portal Example Using inline Tags

This section describes how <esi:inline> tag fragmentation and assembly can drastically increase the value of dynamic content caching for pages that do not contain real-time elements. It shows how to apply the <esi:inline> tag for an existing application that supports non-fetchable fragments. The <esi:inline> tag helps reduce space consumption and improves cache hit ratios by isolating the dynamic content.


Note:

If an application supports independently fetchable fragments, it is possible to use the <esi:inline> for fetchable fragments by setting the fetchable attribute to yes. See Section 11.4.5 for further information about the fetchable attribute.

To use the <esi:inline> tag, the logical fragments in portal.esi are marked with the <esi:inline> tags. The personalized greeting, Weather Forecast, My Stocks, Promotion campaign, Latest News, and Latest Sports News naturally become fragments because they have individual caching properties and can be shared. The My Stock fragment is further broken down into five sub-fragments, one for each stock quote. In addition, to achieve the maximum fragment sharing, the common HTML code sections between each two personalized fragments are also enclosed as ESI fragments and are given constant names, so that the varying template contains as little common data as possible.

Example 11-6 shows portal.esi with <esi:inline> tags.

Example 11-6 portal.esi with inline Tags

<esi:inline name="/Common_Fragment_1" >
<!-- First common fragment -->
<HTML>
...
<!-- Personalized Greeting With ESI variable -->
  Welcome, $(QUERY_STRING{username})!
</esi:inline>

<esi:inline name="/Weathers_San_Francisco" >
...
<!-- Personalized Weather Forecast -->
Weather Forecast for San Francisco
<TABLE>
  <TR>
    <TD> 
      Currently: 50F
    </TD>
  </TR>
</TABLE>
</esi:inline>

<esi:inline name="/Common_Fragment_2" >
<!-- Second common fragment -->
...
</esi:inline>

<esi:inline name="/Stocks_$(QUERY_STRING{username})" >
<!-- Personalized Stock Quote Selections -->
<TABLE>
  <TR>
    <TD>
    <esi:inline name="/ticker_IBM">
      IBM 84.99
    </esi:inline>
    <BR>
    <esi:inline name="/ticker_ORCL">
      ORCL 13.379
    </esi:inline>
    <BR>
    <esi:inline name="/ticker_YHOO">
      YHOO 27.15
    </esi:inline>
    <TD>
  </TR>
</TABLE>
</esi:inline>

<esi:inline name="/Common_Fragment_3">
<!-- Third common fragment -->
...
</esi:inline>

<esi:inline name="/ExternalAdvertisement">
<!-- External Advertisement -->
<TABLE>
  <TR> 
    <TD>
    <a href="http://www.companyad.com/advert?promotionID=126532">
    <img src="http://www.companyad.com/advert_img?promotionID=126532">
    </a>
    </TD>
  </TR>
</TABLE>
</esi:inline>

<esi:inline name="/Common_Fragment_4">
<!-- Fourth common fragment -->
...
</esi:inline>

<esi:inline name="/Top_News_Finance">
<!-- Personalized Top News -->
Latest News for finance
<TABLE>
  <TR>
     Tech Spending Growth Indexes Little Changes
     Home Sales Hit Record High
     Gas Prices Dip Again
  </TR>
</TABLE>
</esi:inline>

<esi:inline name="/Sports_News_Soccer" >
<!-- Personalized Sports News -->
Latest Sports News for Soccer

<TABLE>
  <TR>
  Preparation for World Cup
  Youth Cup game on a Sunday
  Latest Scores
  </TR>
</TABLE>
</esi:inline>

<esi:inline name="/Common_Fragment_5" >
...
</esi:inline>

Example 11-7 shows the markup for the personalized greeting. The fragment is common to all personalized pages belonging to different users. Because the <esi:inline> tag assigns this fragment a constant name, a different user, such as John, would have the same fragment in his template with the same fragment name. Two fragments are shared if and only if their names are identical. This way, the same shared fragment in all templates only need a single update when it expires or is invalidated. $(QUERY_STRING{username}) is an ESI environment variable that provide access to value of the username. This variable is used here because this application uses the username query string parameter to pass along the user's name. By using this variable, the first fragment becomes common to all users.

Example 11-7 portal.esi Example with inline Tags: Personalized Greeting

<esi:inline name="/Common_Fragment_1" >
<!-- First common fragment -->
<HTML>
...
<!-- Personalized Greeting With ESI variable -->
  Welcome, $(QUERY_STRING{username})!
</esi:inline>

Example 11-8 shows the markup for Weather Forecast. The fragment is unique to each city. Every template selecting the same city would share this fragment with Mark's page due to the fragment naming.

Example 11-8 portal.esi Example with inline Tags: Weather Forecast

<esi:inline name="/Weathers_San_Francisco" >
<!-- Personalized Weather Forecast -->
Weather Forecast for San Francisco
<TABLE>
  <TR>
    <TD> 
      Currently: 50F
    </TD>
  </TR>
</TABLE>
</esi:inline>

Example 11-9 shows the markup for My Stocks. The stock quotes fragment encloses all stock picks in Mark's page. It is further divided into five sub-fragments, one for each stock pick, using nested <esi:inline> tags. Thus, Mark's ESI template references his stock selection fragment, which in turn references five particular stock pick fragments. While the stock picks are shared by many user's stock selection fragment, the stock selection fragment itself is also a template uniquely owned by Mark. This markup separates the unique information from the shared information, maximizing the reduction of cache updates and space consumption of personal stock selection.

Example 11-9 portal.esi Example: My Stocks Fragment

<esi:inline name="/Stocks_$(QUERY_STRING{username})" >
<!-- Personalized Stock Quote Selections -->
<TABLE>
  <TR>
    <TD>
    <esi:inline name="/ticker_IBM">
      IBM 84.99
    </esi:inline>
    <BR>
    <esi:inline name="/ticker_ORCL">
      ORCL 13.379
    </esi:inline>
    <BR>
    <esi:inline name="/ticker_YHOO">
      YHOO 27.15
    </esi:inline>
    <TD>
  </TR>
</TABLE>
</esi:inline>

Example 11-10 shows the markup for referencing an advertisement in the Promotion section. promotionID is the based on the user's identification.

Example 11-10 portal.esi Example with inline Tags: Promotion

<esi:inline name="/ExternalAdvertisement">
<!-- External Advertisement -->
<TABLE>
  <TR> 
    <TD>
    <a href="http://www.companyad.com/advert?promotionID=126532">
    <img src="http://www.companyad.com/advert_img?promotionID=126532">
    </a>
    </TD>
  </TR>
</TABLE>
</esi:inline>

Rotating advertisements that change in every response is an example of real- time content that renders little value in non-fetchable ESI <esi:inline> caching. Even the smallest portion of real-time content embedded as a non-fetchable ESI inline fragment would require the entire response to be regenerated and fetched, effectively creating cache misses all the time. To use ESI and dynamic content caching for these real-time fragments, use the <esi:include> tag.

See Section 11.2.3.1.2 for an example of using <esi:include> tag for real-time advertisements

The Latest News and Latest Sports News fragments are similar to the weather fragment. All the common areas are also defined as fragments. Although it is possible to leave them as part of the template, that would consume unnecessary storage space. Example 11-11 shows the markup.

Example 11-11 portal.esi Example with inline Tags: Latest News and Latest Sports News

<esi:inline name="/Top_News_Finance">
<!-- Personalized Top News -->
Latest News for finance
<TABLE>
  <TR>
     Tech Spending Growth Indexes Little Changes
     Home Sales Hit Record High
     Gas Prices Dip Again
  </TR>
</TABLE>
</esi:inline>


<esi:inline name="/Sports_News_Soccer" >
<!-- Personalized Sports News -->
Latest Sports News for Soccer
<TABLE>
  <TR>
  Preparation for World Cup
  Youth Cup game on a Sunday
  Latest Scores
  </TR>
</TABLE>
</esi:inline>
11.2.3.1.2 Portal Example Using Include Tags

This section shows how the <esi:include> tag can be used for fragmentation and assembly of fetchable fragments whose content are not embedded in the template.

Example 11-12 shows portal.esi with <esi:include> tags.

Example 11-12 portal.esi with include Tags

<HTML>
...
<!-- Personal Profile -->
<esi:comment text="Profile refers to environment variables stored in
/servlet/GetProfile. GetProfile servlet enables access to a set of environment
variables with personal profile information."/>
<esi:environment src="/servlet/GetProfile?username=$(QUERY_STRING{username})"
name="Profile"/>
...

<!-- Personalized Greeting With ESI variable -->
<esi:vars>Welcome, $(QUERY_STRING{username})!</esi:vars>
...


<!-- Personalized Weather Forecast -->
<TABLE>
  <TR> 
    <TD> 
      <esi:include src="/servlet/Weather?city=$(Profile{city})&state=$(Profile{state})"/>
    </TD>
  </TR>
</TABLE>
...

<!-- Personalized Stock Quote Selections -->
<TABLE>
  <TR> 
    <TD>
      <esi:include src="/servlet/PersonalizedStockSelection?username=$(QUERY_STRING{username})"/>
    </TD>
  </TR>
</TABLE>
...

<!-- External Advertisement -->
<TABLE>
  <TR> 
    <TD>
      <esi:try>
        <esi:attempt>
          <esi:comment text="Include an ad"/> 
          <esi:include src="/servlet/Advert"/>
        </esi:attempt>
        <esi:except> 
         <esi:comment text="Just write an HTML link instead"/>
         <A HREF="http://www.oracle.com">http://www.oracle.com</a> 
        </esi:except>
      </esi:try>
    </TD>
  </TR>
</TABLE>
...

<!-- Personalized Top News -->
Latest News for <esi:vars>$(Profile{news})</esi:vars>
<TABLE>
  <TR> 
    <TD>
      <esi:choose>
        <esi:when test="$(Profile{news}) == 'Internet'">
          <esi:include src="/servlet/News?type=Top&topic=internet"/> 
        </esi:when>
        <esi:when test="$(Profile{news}) == 'finance'">
         <esi:include src="/servlet/News?type=Top&topic=business"/> 
        </esi:when>
      <esi:otherwise>
      <esi:include src="/servlet/News?type=Top&topic=technology"/> 
      </esi:otherwise>
      </esi:choose>
    </TD>
  </TR>
</TABLE>
...


<!-- Personalized Sports News -->
Latest Sports News for <esi:vars>$(Profile{sport})</esi:vars>
<TABLE>
  <TR> 
    <TD>
      <esi:choose>
        <esi:when test="$(Profile{sport}) == 'golf'">
          <esi:include src="/servlet/News?type=Sports&topic=golf"/> 
        </esi:when>
        <esi:when test="$(Profile{sport}) == 'soccer'">
          <esi:include src="/servlet/News?type=Sports&topic=soccer"/> 
        </esi:when>
        <esi:when test="$(Profile{sport}) == 'basketball'">
          <esi:include src="/servlet/News?type=Sports&topic=basketball"/> 
        </esi:when>
        <esi:when test="$(Profile{sport}) == 'baseball'">
          <esi:include src="/servlet/News?type=Sports&topic=baseball"/> 
        </esi:when>
        <esi:otherwise>
          <esi:include src="/servlet/News?type=Sports&topic=soccer"/> 
        </esi:otherwise>
      </esi:choose>
    </TD>
  </TR>
</TABLE>

Example 11-13 specifies Profile to refer to the environment variables stored in GetProfile. GetProfile enables access to user profile variables, which are used as parameters in the included fragments:

Example 11-13 portal.esi Example: Custom Profile Environment Variable Setting

<!-- Personal Profile -->
<esi:comment text="Profile refers to environment variables stored in
/servlet/GetProfile. GetProfile servlet enables access to a set of environment
variables with personal profile information."/>

<esi:environment src="/servlet/GetProfile?username=$(QUERY_STRING{username})"
name="Profile"/>

Example 11-14 shows GetProfile, which provides access to the city, state, news, and sports environment variables.

Example 11-14 portal.esi Example: GetProfile File with Environment Variables

<?xml version="1.0"?>
<esi-environment esiversion="ORAESI/9.0.4">
  <city>San_Francisco</city>
  <state>CA</state>
  <news>finance</news>
  <sports>soccer</sports>
</esi-environment>

Example 11-15 shows the markup for the personalized greeting Welcome, Mark!. The personalized greeting is achieved by the <esi:vars> tag, which bases the greeting on the username parameter embedded in the URL. The parameter username is the registered user's name. This markup enables the personalized greeting to be included in the cacheable template page.

Example 11-15 portal.esi Example with vars tag: Personalized Greeting

<esi:vars>Welcome, $(QUERY_STRING{username})!</esi:vars>

Example 11-16 shows the markup for Weather Forecast. Weather Forecast includes a servlet fragment name Weather, which uses the value of the user's city and state environment variables in GetProfile to display the correct weather forecast for the user. Because GetProfile has a value of San Francisco for the city environment variable and California for the state environment variable, the weather forecast is for San Francisco, California.

Example 11-16 portal.esi Example with include Tags: Weather Forecast

<TABLE>
  <TR> 
    <TD> 
      <esi:include src="/servlet/Weather?city=$(Profile{city})&state=$(Profile{state})"/>
    </TD>
  </TR>
</TABLE>

The markup for My Stocks is depicted in Example 11-17. My Stocks includes a servlet fragment named PersonalizedStockSelection. The displayed stocks are based on the userID parameter encoded in the URL. userID is the registered user's unique ID.

Example 11-17 portal.esi Example with include Tags: My Stocks Fragment

<TABLE>
  <TR> 
    <TD>
      <esi:include src="/servlet/PersonalizedStockSelection?username=$(QUERY_STRING{username})"/>
    </TD>
  </TR>
</TABLE>

The markup for the included fragment PersonalizedStockSelection is depicted in Example 11-18. It includes fragments for three stock quotes: IBM, ORCL, and YHOO.

Example 11-18 portal.esi Example: PersonalizedStockSelection Fragment for Mark

<TABLE>
  <TR> 
    <TD>
    <BR>
    <esi:include src="Quote?symbol=IBM"/>
    <BR>
    <esi:include src="Quote?symbol=ORCL"/>
    <BR>
    <esi:include src="Quote?symbol=YHOO"/>
    <BR>
    </TD>
  </TR>
</TABLE>

Because the output is different for each user, the PersonalizedStockSelection fragment is not cacheable. However, the response to each of the included quotes is cacheable, enabling stock quotes to be shared by multiple users. Even when many users share quotes, only one browser reload is needed when the quotes are updated. For example, the PersonalizedStockSelection fragment for another user named Scott is depicted in Example 11-19. It includes fragments for three stock quotes: IBM, ORCL, and SCO. As described, IBM and ORCL are also shared by Mark. If Mark reloads the page first and caches the quotes, then the IBM and ORCL quotes for Scott are automatically refreshed.

Example 11-19 portal.esi Example: PersonalizedStockSelection Fragment for Scott

<TABLE>
  <TR> 
    <TD>
    <BR>
    <esi:include src="Quote?symbol=IBM"/>
    <BR>
    <esi:include src="Quote?symbol=ORCL"/>
    <BR>
    <esi:include src="Quote?symbol=SCO"/>
    <BR>
    </TD>
  </TR>
</TABLE>

Example 11-20 shows the markup for rotating advertisements in the Promotion section. The advertisements rotates in the sense that the advertisement changes for each response. By separating the generation of the included image fragment response from the template page, Oracle Web Cache can cache the template and integrate the dynamic advertisement into the template.

Example 11-20 portal.esi Example with include Tags: Promotion

<TABLE>
  <TR> 
    <TD>
      <esi:try>
        <esi:attempt>
          <esi:comment text="Include an ad"/> 
          <esi:include src="/servlet/Advert"/>
       </esi:attempt>
       <esi:except> 
         <esi:comment text="Just write an HTML link instead"/>
          <A HREF="www.oracle.com">www.oracle.com</a> 
       </esi:except>
      </esi:try>
    </TD>
  </TR>
</TABLE>

As shown in Example 11-21, the response to the included image fragment for the banner is not cacheable. When a user requests this page, Oracle Web Cache sends the request to the application Web server to generate the banner. From the application Web server, Advert generates the banner for the request.

Example 11-21 portal.esi Example: Rotating Banner Output

<TABLE>
  <TR> 
    <TD>
      <A HREF="http://www.companyad.com/redirect?refID=11934502">
      <IMG src="http://www.companyad.com/advert_img?refID=11934502"></A>
    </TD>
  </TR>
</TABLE>

As shown in Example 11-22, the next time the user reloads the page, Advert generates another banner for the request.

Example 11-22 portal.esi Example: Rotating Banner Reload

<TABLE>
  <TR> 
    <TD>
      <A HREF="http://www.companyad.com/redirect?refID=123456602">
      <IMG src="http://www.companyad.com/advert_img?refID=123456602"></A>
    </TD>
  </TR>
</TABLE>

The banner relies on alternate processing with the <esi:try> tag. If the servlet cannot run Advert, a link to www.oracle.com appears in the banner's place.

Example 11-23 shows the markup for Latest News and Latest Sports News:

  • Latest News displays the news headlines based on the user's news category, internet, finance, or technology, by using conditional processing with the <esi:choose> tag. Because GetProfile has a value of finance for the news environment variable, the headlines displayed relate to finance, /servlet/News?type=Top&topic=business.

  • Similarly, Latest Sports News displays the sports headlines based on the user's sports category, golf, soccer, basketball, baseball, or soccer, by using conditional processing. Because GetProfile has a value of soccer for the sports environment variable, the output includes headlines relating to soccer, /servlet/News?type=Sports&topic=soccer.

Example 11-23 portal.esi Example with include Tags: Latest News and Sports Sections

Latest News for <esi:vars>$(Profile{news})</esi:vars>
<TABLE>
  <TR> 
    <TD>
      <esi:choose>
        <esi:when test="$(Profile{news}) == 'internet'">
          <esi:include src="/servlet/News?type=Top&topic=internet"/> 
        </esi:when>
        <esi:when test="$(Profile{news}) == 'finance'">
         <esi:include src="/servlet/News?type=Top&topic=business"/> 
        </esi:when>
      <esi:otherwise>
      <esi:include src="/servlet/News?type=Top&topic=technology"/> 
      </esi:otherwise>
      </esi:choose>
    </TD>
  </TR>
</TABLE>
...
<!-- Personalized Sports News -->
Latest Sports News for <esi:vars>$(Profile{sport})</esi:vars>

<TABLE>
  <TR> 
    <TD>
      <esi:choose>
        <esi:when test="$(Profile{sport}) == 'golf'">
          <esi:include src="/servlet/News?type=Sports&topic=golf"/> 
        </esi:when>
        <esi:when test="$(Profile{sport}) == 'soccer'">
          <esi:include src="/servlet/News?type=Sports&topic=soccer"/> 
        </esi:when>
        <esi:when test="$(Profile{sport}) == 'basketball'">
          <esi:include src="/servlet/News?type=Sports&topic=basketball"/> 
        </esi:when>
        <esi:when test="$(Profile{sport}) == 'baseball'">
          <esi:include src="/servlet/News?type=Sports&topic=baseball"/> 
        </esi:when>
        <esi:otherwise>
          <esi:include src="/servlet/News?type=Sports&topic=soccer"/> 
        </esi:otherwise>
      </esi:choose>
    </TD>
  </TR>
</TABLE>

11.2.3.2 Example of Simple Personalization with Variable Expressions

ESI variables can be used within an HTML tag. For example, consider Example 11-24. Its HTML code uses PL/SQL for an HTML form with a text box in it.

Example 11-24 PL/SQL Code without Personalization

htp.p('<form action="test" method="GET">');
htp.p('<table border="0" >
      <tr>
      <td><input type="text" name="p_name" size="8" value="'||p_name||'"></td>
      </tr>
      <tr>
      <td><input type="submit" value="Search"></td>
      </tr>
</table>');

Example 11-25 shows how the $HTTP_COOKIE variable is used with the <esi:vars> tag to replace the value of p_name with the user's name.

Example 11-25 PL/SQL Code with Personalization through ESI

htp.p('<form action="test" method="GET">'); 
htp.p('<table border="0" > 
    <tr><esi:vars> 
         <td><input type="text" name="p_name" size="8" 
                          value="$(HTTP_COOKIE{'p_name'}"></td> 
         </tr></esi:vars> 
         <tr> 
         <td><input type="submit" value="Search"></td> 
         </tr> 
  </table>'); 

11.3 Using Inline Invalidation in HTTP Responses

Inline invalidation is implemented as part of Edge Side Includes (ESI) and provides a useful way for origin servers to "piggyback" invalidation messages on transactional responses sent to Web Cache. For instance, when a customer purchases a vegetarian cookbook on an e-commerce site, the confirmation response could contain instructions for invalidating all catalog pages related to the book, its author and vegetables. The ability to send invalidation message inline reduces the connection overhead associated with sending out-of-band invalidations and is a useful tool for ESI developers.

To configure inline invalidation:

  1. In the template page, configure the HTTP response with the Surrogate-Control response-header field that includes content="ESI-INV/1.0":

    Surrogate-Control: content="ESI-INV/1.0"
    
  2. In the body of the same response, use the <esi:invalidate> tag to insert either a basic or advanced inline invalidation request.

    You can insert an inline invalidation request anywhere in the ESI template. You can insert multiple requests, but only the first one processes. The execution of the inline invalidation is blocking. That is, if the ESI template contains other ESI features, inline invalidation is executed first.

    Basic invalidation syntax:

    <esi:invalidate [output="yes"]>
     <?xml version="1.0"?>
     <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
      <INVALIDATION VERSION="WCS-1.1">
        <SYSTEM>
         <SYSTEMINFO NAME="name" VALUE="value"/>
        </SYSTEM>  
        <OBJECT>
          <BASICSELECTOR URI="URL"/>
          <ACTION REMOVALTTL="TTL"/>
          <INFO VALUE="value"/>
        </OBJECT>
     </INVALIDATION>
    </esi:invalidate>
    

    Advanced invalidation syntax:

    <esi:invalidate [output="yes"]>
     <?xml version="1.0"?>
     <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
     <INVALIDATION VERSION="WCS-1.1">
        <SYSTEM>
         <SYSTEMINFO NAME="name" VALUE="value"/>
        </SYSTEM>  
           <OBJECT>
             <ADVANCEDSELECTOR URIPREFIX="prefix"
                               URIEXP="URL_expression"
                               HOST="host_name:port"
                               METHOD="HTTP_request_method"
                              BODYEXP="HTTP_body"/>
              <COOKIE NAME="cookie_name" VALUE="value"/>
              <HEADER NAME="HTTP_request_header" VALUE="value"/>
              <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY"
                     TYPE="SUBSTRING|REGEX"
                     VALUE="value"/>
             </ADVANCEDSELECTOR>
           </OBJECT>
     </INVALIDATION>
    </esi:invalidate>
    

For more information, see:

11.3.1 Example: Using Inline Invalidation

Following is an example about an online bike shop using inline invalidation in their simple Web application. It has two CGI scripts written in Perl. show_bike.pl displays how many bikes of a certain model are in stock. Since it involves database query and its result remains the same until a purchase occurs, show_bike.pl is cached. buy_bike.pl is used by customers to buy a bike. When this page is requested, show_bike.pl is no longer valid—an invalidation is needed.

Example 11-26 shows the code for show_bike.pl.

Example 11-26 show_bike.pl Code

#!/usr/local/bin/perl

# first, retrieve how many bikes are in stock 
# and assign it to $nBikes (omitted!)

print <<END;
Content-Type: text/html
Cache-Control: private
Surrogate-Control: max-age=3600

<html>
<body>
<h1>Bike: model 2005</h1>

<p>There are $nBikes bike(s) in stock for purchase!</p>
<p>Click <a href="/cgi/buy_bike.pl">here</a> to purchase a bike.</p>

</body>
</html>
END

Note that max-age=3600 informs Oracle Web Cache to only cache this page for up to an hour.

Example 11-27 shows the code for buy_bike.pl with an inline invalidation request.

Example 11-27 buy_bike.pl Code with an Inline Invalidation Request

#!/usr/local/bin/perl

print <<END;
Content-Type: text/html
Cache-Control: private
Surrogate-Control: content="ESI/1.0 ESI-INV/1.0"

<html>
<body>
<h1>Thank you for purchasing bike model 2000.</h1>

<p>Click <a href="/cgi/show_bike.pl">here</a> to read more 
about this model.</p>

<esi:invalidate>
 <?xml version="1.0"?>
 <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
  <INVALIDATION VERSION="WCS-1.1">
    <OBJECT>
      <BASICSELECTOR URI="/cgi/show_bike.pl"/>
      <ACTION REMOVALTTL="0"/>
    </OBJECT>
 </INVALIDATION>
</esi:invalidate>

<p>Thanks again!</p>
</body>
</html>
END

The ESI-INV/1.0 token in Surrogate-Control instructs Oracle Web Cache to process the <esi:invalidate> tag.

Example 11-28 shows the browser response for buy_bike.pl. Because Oracle Web Cache has already processed the inline invalidation request, the inline invalidation is not present in the response.

Example 11-28 Browser Response of buy_bike.pl

Content-Type: text/html
Cache-Control: private
Surrogate-Control: content="ESI/1.0 ESI-INV/1.0"

<html>
<body>
<h1>Thank you for purchasing bike model 2000.</h1>

<p>Click <a href="/cgi/show_bike.pl">here</a> to read more 
about this model.</p>

<p>Thanks again!</p>
</body>
</html>

Debugging Tips

To facilitate debugging, the application developer can perform the following:

  • Add the Surrogate-Capability request header that includes "ESI-INV/1.0":

    Surrogate-Capability: content="ESI-INV/1.0"
    

    When the Surrogate-Capability request header is added for inline invalidation, Oracle Web Cache includes the invalidation request in the response.

  • Enable the output attribute of the <esi:invalidate> tag.

    When the output attribute is enabled, Oracle Web Cache includes the invalidation result in the response enclosed within comments <!--result-->.

Example 11-29 shows the browser response of buy_bike.pl when both the Surrogate-Capability request header is enabled for the inline invalidation and the output attribute of the <esi:invalidate> tag is enabled.

Example 11-29 Browser Response of show_bike.pl with Diagnostic Inline Invalidation Information

Content-Type: text/html
Cache-Control: private
Surrogate-Control: content="ESI/1.0 ESI-INV/1.0"

<html>
<body>
<h1>Thank you for purchasing bike model 2000.</h1>

<p>Click <a href="/cgi/show_bike.pl">here</a> to read more 
about this model.</p>

<esi:invalidate output="yes">
 <?xml version="1.0"?>
 <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
  <INVALIDATION VERSION="WCS-1.1">
    <OBJECT>
      <BASICSELECTOR URI="/cgi/show_bike.pl"/>
      <ACTION REMOVALTTL="0"/>
    </OBJECT>
 </INVALIDATION>
</esi:invalidate>

<!--
<?xml version="1.0"?> 
<!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd">
<INVALIDATIONRESULT VERSION="WCS-1.1">
   <OBJECTRESULT>
     <BASICSELECTOR URI="/cgi/show_bike.pl/>
     <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/>
     </OBJECTRESULT>
</INVALIDATIONRESULT>
-->

<p>Thanks again!</p>
</body>
</html>

11.4 ESI Tag Descriptions

This section describes the following ESI tags, which are used for partial page caching operations:

11.4.1 ESI choose | when | otherwise Tags

The <esi:choose>, <esi:when>, and <esi:otherwise> conditional tags provide the ability to perform logic based on Boolean expressions.

11.4.1.1 Syntax

<esi:choose>
  <esi:when test="BOOLEAN_expression">
    Perform this action
  </esi:when>
  <esi:when test="BOOLEAN_expression">
    Perform this action
  </esi:when>
  <esi:otherwise>
    Perform this other action
  </esi:otherwise>
</esi:choose>

11.4.1.2 Attributes

test—Specifies the Boolean operation

11.4.1.3 Usage

  • Each <esi:choose> tag must have a least one <esi:when> tag, and may optionally contain exactly one <esi:otherwise> tag.

  • Oracle Web Cache executes the first <esi:when> tag whose test attribute evaluates truthfully, and then exit the <esi:choose> tag. If no <esi:when> tag evaluates to true and an <esi:otherwise> tag is present, that element's content executes.

  • Other HTML or ESI element can be included inside <esi:when> or <esi:otherwise> elements.

11.4.1.4 Boolean Expressions

The test attribute uses Boolean expressions to determine how to evaluate true or false logic. ESI supports the following Boolean operators:

  • == (equal to)

  • != (not equal to)

  • > (greater than)

  • < (less than)

  • >= (greater than or equal to)

  • <= (less than or equal to)

  • & (and)

  • | (or)

  • ! (not)

Note the following about the use of Boolean expressions:

  • Operands associate from left to right.

    Sub-expressions can be grouped with parentheses to explicitly specify association.

  • If both operands are numeric, then the expression is evaluated numerically.

  • If either operand is non-numeric, then both operands are evaluated as strings. For example, 'a'==3 evaluates to 'a'=='3', where 3 is evaluated as a string.

  • The comparison of two Boolean expressions results in an undefined operation.

  • If an operand is empty or undefined, then the expression always evaluates to false.

  • The logical operators (&, !, and|) are used to qualify expressions, but cannot be used to make comparisons.

  • Use single quotes (') for constant strings. For example, the following string is a valid construction:

    $(HTTP_COOKIE{name})=='typical'
    
  • Escaped single quotes (\') are not permitted. For example, the following is not supported:

    $(HTTP_COOKIE{'user\'s name'})=='typical'
    
  • Arithmetic operations and assignments are not permitted.

  • A null value evaluates whether a variable is empty.

    When a number is compared with null, that number is converted into an equivalent string and compared against an empty string. In the following ESI markup, $(logindata{name}) is a variable that provides access to the value of the name. If name is empty and evaluates to null, then the expression evaluates to true; if name is not empty and does not evaluate to null, then the expression evaluates to false.


    Note:

    If a variable exists but evaluates to an empty string, then the value is not considered null.

    <esi:choose>
      <esi:when test="$(logindata{name}) == null">
        <esi:include src=/login/$(logindata{name})"/>
     </esi:when>
     <esi:otherwise>
       <esi:include src=/login/guest.html"/>
     <esi:otherwise>
    </esi:choose>  
    

The following expressions show correct usage of Boolean operators:

!(1==1)
!('a'<='c')
(1==1)|('abc'=='def')
(4!=5)&(4==5)

The following expressions show incorrect usage of Boolean operators:

(1 & 4)
("abc" | "edf")

11.4.1.5 Statements

Statements must be placed inside a <esi:when> or <esi:otherwise> subtag. Statements outside the subtags cannot be evaluated as conditions. Example 11-30 shows invalid placement of statements.

Example 11-30 Statement Placement

<esi:choose>
  This markup is invalid because any characters other than whitespace 
  are not allowed in this area.
  <esi:when test="$(HTTP_HOST) == 'www.company.com'">
    <esi:include src="/company.html" />
  </esi:when>
     This markup is invalid because any characters other than whitespace 
     are not allowed in this area.
  <esi:when test="$(HTTP_COOKIE{fragment) == 'First Fragment'">
    <img src="/img/TheImage.gif">
  </esi:when>
     This markup is invalid because any characters other than whitespace 
     are not allowed in this area.
   <esi:otherwise>
     The default selection.
  </esi:otherwise>
   This markup is invalid because any characters other than whitespace 
   are not allowed in this area.
</esi:choose>

11.4.1.6 Example

The following ESI markup includes advanced.html for requests that use the cookie Advanced and basic.html for requests that use the cookie Basic:

<esi:choose>
  <esi:when test="$(HTTP_COOKIE{group})=='Advanced'">
    <esi:include src="http://www.company.com/advanced.html"/>
  </esi:when>
  <esi:when test="$(HTTP_COOKIE{group})=='Basic User'">
    <esi:include src="http://www.company.com/basic.html"/>
  </esi:when>
  <esi:otherwise>
    <esi:include src="http://www.company.com/new_user.html"/>
  </esi:otherwise>
</esi:choose>

11.4.2 ESI comment Tag

The <esi:comment> tag enables you to comment ESI instructions, without making the comments available in the output.

11.4.2.1 Syntax

<esi:comment text="text commentary"/>

<esi:comment> is an empty element, and does not have an end tag.

11.4.2.2 Usage

The <esi:comment> tag is not evaluated by Oracle Web Cache. If comments must be visible in the HTML output, use standard XML/HTML comment tags.

11.4.2.3 Example

The following ESI markup provides a comment for an included GIF file:

<esi:comment text="the following animation will have a 24 hour TTL"/>
<esi:include src="http://www.company.com/logo.gif" onerror="continue" />

11.4.3 ESI environment Tag

The <esi:environment> tag enables you to include custom environment variables from included fragments. When included, these variables can then be used with the other ESI tags.

11.4.3.1 Syntax

There are two forms of this tag. In the first form, <esi:environment> does not have a closing </esi:environment> tag:

<esi:environment src="environment_URL" name="environment_name"  [max-age="expiration_time [+ removal_time]]" [method="GET|POST"] [onerror="continue"] [timeout="fetch_time"]/>

In the second form with elements, <esi:environment> has a closing </esi:environment> tag:

<esi:environment src="environment_URL" name="environment_name"
   [max-age="expiration_time [+ removal_time]"] [method="GET|POST"]
   [onerror="continue"] [timeout="fetch_time"]>
  [<esi:request_header name="request_header" value="value"/>]
  [<esi:request_body value="value"/>]
  [<esi:log>log_message</esi:log>]
</esi:environment>

11.4.3.2 Attributes

  • src—Specifies the URL from which to obtain environment variables and their values.

    The URL can be either an absolute or relative URL. When specifying an absolute URL, use the following formats:

    • "http://host_name:port/path/filename"

    • "https://host_name:port/path/filename"

    If you specify the host name for an absolute URL, you must prefix it with http:// or https://. An HTML parser treats the host:80 in the following URL as a folder name rather than a host name:

    src="host:80/index.htm"
    

    To make this URL valid, you specify the following:

    src="http://host:80/index.htm"
    

    Relative URLs are resolved relative to the template page. The result sets the ESI environment for the current template.

    The source code of the URL requires the following XML format:

    <?xml version="1.0"?>
    <esi:environment esiversion="ORAESI/9.0.4">
      <variable_name>variable_value</variable_name>
      <variable_name>variable_value</variable_name>
    </esi:environment>
    
  • name—Specifies the name to use to refer to the environment variable.

  • method—Specifies the HTTP request method of the environment fragment. Valid values are GET or POST.

  • max-age—Specifies the time, in seconds, to expire the XML file, and optionally, specifies the time, in seconds, to remove the XML file after the expiration time.

  • timeout—Specifies the time, in seconds, for the fragment to be fetched. If the fragment has not been fetched within the time interval, the fetch is aborted.

  • onerror—Specifies that if the fetch failed on the src object, to ignore the ESI tag and serve the page.

11.4.3.3 Elements

  • request_body—Specifies the HTTP request body of the fragment.

  • request_header—Specifies an HTTP request header field and value for Oracle Web Cache to use.

  • log—Specifies a log message of the fragment to be included in the access_log_file.fragment file when the x-esi-info log field is set. You can provide a descriptive text string that identifies the fragment and the application that generated the fragment. By providing descriptive text, you can easily identify the fragment in the log file, enabling you to determine how often the fragment is requested.

See Table 9-5 for further information about the x-esi-info log field.

11.4.3.4 Syntax Usage

  • Specify only one <esi:environment> tag for each template page, before other ESI tags.

  • The attributes do not have to be in a particular order.

  • Do not specify multiple request_body elements.

  • You can have zero or more request_header elements.

    Use multiple request_header elements to specify multiple HTTP request header fields:

    <esi:environment src="environment_URL" 
       [max-age="expiration_time [+ removal_time]"][method="GET|POST"]
       [onerror="continue"] [timeout="fetch_time"]>
      <esi:request_header name="request_header" value="value"/>
      <esi:request_header name="request_header" value="value"/>
    </esi:environment>
    
  • If no request_header elements are specified, Oracle Web Cache uses other request headers from the parent page.

  • Do not specify multiple log elements.

For more information, see:

11.4.3.5 Example

The following ESI output specifies logindata to refer to the environment variables stored in catalog.xml. The file catalog.xml enables access to the value of the vendorID environment variable, which is used as a parameter in the included URL:

<esi:environment src="/catalog.xml" name="logindata"/>
<esi:include src="http://provider.com/intranetprovider?vendorID=$(logindata{vendorID})"/>

The file catalog.xml has the following content:

<?xml version="1.0"?>
<esi:environment esiversion="ORAESI/9.0.4">
  <product_description>stereo</product_description>
  <vendorID>3278</vendorID>
  <partner1>E-Electronics</partner1>
  <partner2>E-City</partner2>
</esi:environment>

The following ESI output specifies logindata to refer to the environment variables stored in env.dat. The file env.dat enables access to the value of the env environment variable, which is used as a parameter in the included log message for dir1.txt. The log messages for dir1.txt and esi-log2.html are written to the access_log.fragment file when the x-esi-info log field is set and the fragments are requested.

<esi:environment src="/esi/env.dat" name="env">
  <esi:log>Used environment /esi/env.dat</esi:log>
</esi:environment>

<esi:include src="/cached/dir1.txt">
  <esi:log>Fragment:/cache/dir1.txt is included, by $(env{xl_name})</esi:log>
</esi:include>

<font color="red">Including /cgi-bin/esi-fetch.sh?/esi/esi-log2.html in esi-log1.html </font>
<esi:include src="/cgi-bin/esi-fetch.sh?/esi/esi-log2.html">
  <esi:log>Fragment: /cgi-bin/esi-fetch.sh?/esi/esi-log2.html is included
 </esi:log>

11.4.4 ESI include Tag

The <esi:include> tag provides syntax for including fragments.

See Section 11.1.8 for a comparison of <esi:inline> and <esi:include> usage.

11.4.4.1 Syntax

There are two forms of this tag. In the first form, <esi:include> does not have a closing </esi:include> tag:

<esi:include src="URL_fragment" [alt="URL_fragment"]
[max-age="expiration_time [+removal_time]]" [method="GET|POST"] [onerror="continue"] [redirect=yes|no] [timeout="fetch_time"]/>

In the second form, with elements, <esi:include> has a closing </esi:include> tag:

<esi:include src="URL_fragment" [alt="URL_fragment"]
   [max-age="expiration_time[+removal_time]"] [method="GET|POST"]
   [onerror="continue"] [redirect=yes|no] [timeout="fetch_time"]>
  [<esi:request_header name="request_header" value="value"/>]
  [<esi:request_body value="value"/>]
  [<esi:log>log_message</esi:log>]
</esi:include>

11.4.4.2 Attributes

  • src—Specifies the URL of the fragment to fetch. The URL can be a literal string or it can include variables.

    The URL can either be an absolute or relative URL. When specifying an absolute URL, use the following formats:

    • "http://host_name:port/path/filename"

    • "https://host_name:port/path/filename"

    If you specify the host name for an absolute URL, you must prefix it with http:// or https://. An HTML parser treats the host:80 in the following URL as a folder name rather than a host name:

    src="host:80/index.htm"
    

    To make this URL valid, you specify the following:

    src="http://host:80/index.htm"
    

    Relative URLs are resolved relative to the template page. The included result replaces the element in the markup served to the browser.

    You can specify an XML fragment if the XML file fragment is valid XML. For example, the following specifies that Oracle Web Cache use XSL Transformations (XSLT) to transform the XML into HTML using a style sheet. The style sheet maps XML formats to HTML formats:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xml" href="stylesheet.xsl"?>
    

    Ensure that both the XML fragment and the XSL style sheet response pages are configured with a Content-Type response-header field that includes text and XML media types. For example:

    Content-Type: text/xml
    

    For more information about XSLT, see http://www.w3.org/TR/xslt.

  • alt—Specifies an alternative resource if the src is not found. The requirements for the value are the same as those for src.

  • max-age—Specifies the time, in seconds, to expire the fragment, and optionally, specifies the time, in seconds, to remove the fragment after expiration time. Use this attribute if the template page has a higher tolerance for stale fragments than specified by the time-to-live parameters in fragment responses.

  • method—Specifies the HTTP request method of the fragment. Valid values are GET or POST.

  • onerror—Specifies that if the fetch failed on the src object to ignore the ESI tag and serve the page.

  • redirect—Specifies how to serve the fragment when the src fragment resides temporarily under a different URL. yes specifies that the URL be redirected and displayed; no specifies that the fragment URL not be redirected and an HTTP 302 Found status code be served for the fragment. yes is the default.

  • timeout—Specifies the time, in seconds, for the fragment to be fetched. If the fragment has not been fetched within the time interval, the fetch is aborted.

    See Section 11.1.7 for usage notes on alt and onerror.

11.4.4.3 Elements

  • request_body—Specifies the HTTP request body of the fragment.

  • request_header—Specifies an HTTP request header field and value for Oracle Web Cache to use. You can specify multiple HTTP request headers. When this attribute is specified, all request headers from the parent fragment or template page are ignored.

  • log—Specifies a log message of the fragment to be included in the access_log.fragment file when the x-esi-info log field is set. You can provide a descriptive text string that identifies the fragment and the application that generated the fragment. By providing descriptive text, you can easily identify the fragment in the log file, enabling you to determine how often the fragment is requested.

    See Table 9-5 for further information about the x-esi-info log field.

11.4.4.4 Syntax Usage

  • <esi:include> supports up to three levels of nesting.

  • <esi:include> does not support escaped double quotes (\"). For example, the following is not supported:

    <esi:include src="file\"user.htm"/>
    
  • The attributes do not have to be in a particular order.

  • The src attribute supports both HTTP and HTTPS. Oracle Web Cache permits the template and fragments to use different protocols. Note the following:

    • If the src attribute specifies a fragment's relative path, such as src="/PersonalizedGreeting", the template's protocol is used.

    • If the protocol used in the src attribute does not match the protocol specified in the Site-to-Server Mapping page (Origin Servers, Sites, and Load Balancing > Site-to-Server Mapping) of Oracle Web Cache Manager, then Oracle Web Cache uses the protocol configured for the origin server in the Site-to-Server Mapping page. Oracle Web Cache also reports the following warning message to the event log:

      [Date] [warning 11250] [ecid: request_id, serial_number]
      ESI include fragment protocol does not match origin server protocol: 
      Origin Server Protocol=protocol URL=URL
      

      For example, if the template page is configured with <esi:include> src="https://www.company.com:80/gifs/frag1.gif"/> and the site-to-server mapping specifies HTTP for the origin server, then http://www.company.com:80/gifs/frag1.gif is used and the following message appears in the event log:

      [03/Feb/2005:23:16:46 +0000] [warning 11250] [ecid: 90125204378,0] 
      ESI include fragment protocol does not match origin server protocol:
      Origin Server Protocol=http URL=https://www.company.com:80/gifs/frag1.gif
      
  • Do not specify multiple request_body elements.

  • You can have zero or more request_header elements.

  • Use multiple request_header elements to specify multiple HTTP request header fields:

    <esi:include src="URL_fragment" 
      [max-age="expiration_time[+removal_time]"] [method="GET|POST"]
      [onerror="continue"] [timeout="fetch_time"]>
      <esi:request_header name="request_header" value="value"/>
      <esi:request_header name="request_header" value="value"/>
    </esi:include>
    
  • Do not specify multiple log elements.

11.4.4.5 Usage

The <esi:include> tag instructs Oracle Web Cache to fetch the fragment specified by the src attribute.

If the include is successful, the contents of the fetched src URL are displayed. The included object is included exactly at the point of the include tag. For example, if the include tag is in a table cell, the fetched object is displayed in the table cell.

The max-age control directive in the Surrogate-Control response-header field applies to the response; the max-age attribute applies only to that particular usage of the fragment response through the <esi:include> tag. If both the max-age control directive in the Surrogate-Control response-header field and the max-age attribute are set, then the effective expiration and removal time-to-live for this particular inclusion are the longest maximum age of the expiration and the removal time-to-live, respectively. If a particular page has a greater tolerance for staleness of a fragment, then set the max-age attribute to a longer time than the max-age control directive. Use the max-age attribute to increase cache hits by serving fragments stale until the removal time. max-age=infinity specifies that the object never expires.

If method is not set, then GET is assumed. However, if the request_body element is set, then POST is assumed.

Oracle Web Cache generates the following HTTP request headers for all fragment requests:

  • Host

  • Content-Length

  • Surrogate-Capability

  • Connection

The request_header element enables you to control HTTP headers other than these. Do not specify these HTTP request headers as request_header attributes, as a conflict can affect the operation of Oracle Web Cache.

If no request_header elements are specified, Oracle Web Cache uses other request headers from the parent page.

See Section 11.1.8 for a comparison of <esi:inline> and <esi:include> usage.

11.4.4.6 Examples

The following ESI markup includes a file named frag1.htm. The fragment must be fetched within 60 seconds. If the fetch fails, Oracle Web Cache ignores the includes and serves the page. If the fetch succeeds, Oracle Web Cache includes the fragment. Oracle Web Cache expires the fragment after five minutes, and removes it after another eight minutes.

<esi:include src="/frag1.htm" timeout="60" maxage="300+480" onerror="continue"/>

The following ESI output includes the result of a dynamic query:

<esi:include src="/search?query=$QUERY_STRING(query)"/>

The following ESI output includes a personalized greeting, a Cookie HTTP request header, and an HTTP request body that includes the date. Log message "Fragment: /Personalized Greeting is included" writes to the access_log.fragment file when the x-esi-info log field is set and the fragment is requested.

<esi:include src="/PersonalGreeting">
  <esi:request_header name="Cookie" value="pname=Scott Tiger"/>
  <esi:request_body value="day=05, month=10, year=2001"/>
  <esi:log>Fragment: /Personalized Greeting is included</esi:log>
</esi:include>

For more information, see Section 11.2.3.1 for an extended example of <esi:include> usage.

11.4.5 ESI inline Tag

The <esi:inline> tag marks a fragment as a separately cacheable fragment, embedded in the HTTP response of another object. Oracle Web Cache stores and assembles these fragments independently as <esi:include> fragments.

See Section 11.1.8 for a comparison of <esi:inline> and <esi:include> usage.

11.4.5.1 Syntax

<esi:inline name="URL" fetchable="yes|no" 
 [max-age="expiration_time [+ removal_time]"] [timeout="fetch_time"]
 Embedded HTML code
</esi:inline>

11.4.5.2 Attributes

  • name—Specifies a unique name for the fragment in URL format.

  • fetchableyes instructs Oracle Web Cache to fetch a fragment from the origin server when it expires. The template for the fragment is not included during this fetching process. no instructs Oracle Web Cache to fetch the entire template from the origin server when there is a cache miss, and then try to extract all the fragments from the template.

  • max-age—Specifies the time, in seconds, to expire the fragment, and optionally, specifies the time, in seconds, to remove the fragment after the expiration time. Use this attribute if the template page has a higher tolerance for stale fragments than specified by the time-to-live parameters in fragment responses.

  • timeout—Specifies the time, in seconds, for the fragment to be fetched. If the fragment has not been fetched within the time interval, the fetch is aborted.

11.4.5.3 Usage

Some inline fragments are only delivered as part of an HTTP response for another object. These are not independently fetchable by Oracle Web Cache the way <esi:include> fragments are. When a non-fetchable fragment is needed by Oracle Web Cache, it must request the object from which the inline fragment was extracted.

When a non-fetchable <esi:inline> fragment is not found in the cache, Oracle Web Cache re-fetches the fragment's parent template. This behavior implies that the parent cannot be another non-fetchable <esi:inline> fragment. If the parent is an <esi:inline> non-fetchable fragment, the response returned to the browser is undefined.

For more information, see:

11.4.5.4 Example

The following ESI output embeds financial headlines:

<esi:inline name="/Top_News_Finance">
Latest News for Finance
<TABLE>
  <TR>
    Blue-Chip Stocks Cut Losses; Nasdaq Up MO
    French rig factory with explosives New York Times
    Volkswagen faces Brazil strike CNN Europe
    Airbuss reliability record BBC
  </TR>
</TABLE>
</esi:inline>

See Section 11.2.3.1 for an extended example of <esi:inline> usage.

11.4.6 ESI invalidate Tag

The <esi:invalidate> tag enables you to configure an invalidation request within the response of a browser page.

11.4.6.1 Syntax

Basic invalidation syntax:

<esi:invalidate [output="yes"]>
 <?xml version="1.0"?>
 <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
  <INVALIDATION VERSION="WCS-1.1">
    <SYSTEM>
     <SYSTEMINFO NAME="name" VALUE="value"/>
    </SYSTEM>  
    <OBJECT>
      <BASICSELECTOR URI="URL"/>
      <ACTION REMOVALTTL="TTL"/>
      <INFO VALUE="value"/>
    </OBJECT>
 </INVALIDATION>
</esi:invalidate>

Advanced invalidation syntax:

<esi:invalidate [output="yes"]>
 <?xml version="1.0"?>
 <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
 <INVALIDATION VERSION="WCS-1.1">
    <SYSTEM>
     <SYSTEMINFO NAME="name" VALUE="value"/>
    </SYSTEM>  
       <OBJECT>
         <ADVANCEDSELECTOR URIPREFIX="prefix"
                           URIEXP="URL_expression"
                           HOST="host_name:port"
                           METHOD="HTTP_request_method"
                          BODYEXP="HTTP_body"/>
          <COOKIE NAME="cookie_name" VALUE="value"/>
          <HEADER NAME="HTTP_request_header" VALUE="value"/>
          <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY"
                 TYPE="SUBSTRING|REGEX"
                 VALUE="value"/>
         </ADVANCEDSELECTOR>
      <ACTION REMOVALTTL="TTL"/>
      <INFO VALUE="value"/>
      </OBJECT>
 </INVALIDATION>
</esi:invalidate>

11.4.6.2 Attributes

  • outputyes specifies that the invalidation result be included in the browser response, enclosed within comments <!--result-->. no specifies that the invalidation result not be displayed in the output. Specify a value of yes for a test environment; specify a value of no for a production environment.

11.4.6.3 Usage

See Section 11.3.

11.4.6.4 Example

See Section 11.3.1.

11.4.7 ESI remove Tag

The <esi:remove> tag allows for specification of non-ESI markup output if ESI processing is not enabled with the Surrogate-Control header or there is not an ESI-enabled cache.

11.4.7.1 Syntax

<esi:remove> HTML output...</esi:remove>

11.4.7.2 Usage

Any HTML or ESI elements can be included within this tag, except other <esi:remove> tags. Note that nested ESI tags are not processed.

11.4.7.3 Example

The following ESI markup includes http://www.company.com if the <esi:include> content cannot be included:

<esi:include src="http://www.company.com/ad.html"/>
<esi:remove>
  <A HREF="http://www.company.com">www.company.com</A>
</esi:remove>

Normally, when Oracle Web Cache processes this example block, it fetches the ad.html file and includes it into the template page while silently discarding the <esi:remove> tag and its contents. If ESI processing is not enabled, all of the elements are passed through to the browser, which ignores ESI markup. However, the browser displays the <A HREF=...> HTML link.

11.4.8 ESI try | attempt | except Tags

The <esi:try> tag provides for exception handling. The <esi:try> tag must contain exactly one instance of an <esi:attempt> tag and one or more <esi:except> tags. See Section 11.1.7 for usage notes on alt and onerror.

11.4.8.1 Syntax

In the following form, only one <esi:except> tag is supported:

<esi:try>
  <esi:attempt>
    Try this...
  </esi:attempt>
  <esi:except>
    If the attempt fails, then perform this action...
  </esi:except>
</esi:try>

In the following form, multiple <esi:except> tags with different types are supported:

<esi:try>
  <esi:attempt>
    Try this...
  </esi:attempt>
  <esi:except [type="type"]>
    If the attempt fails, then perform this action...
  </esi:except>
  <esi:except [type="type"]>
    Perform this action...
  </esi:except>
  <esi:except>
    If the attempt fails, then perform this action...
  </esi:except>
</esi:try>

11.4.8.2 Usage

Oracle Web Cache first processes the contents of <esi:attempt>. A failed <esi:attempt> triggers an error and causes Oracle Web Cache to process the contents of the <esi:except> tag.

Specify an <esi:except> tag without a type for general errors; specify an <esi:except> tag with a type for specific errors. The <esi:except> tag accepts the following case-insensitive types:

  • nestingtoodeep: An error occurs because the fragment include depth has exceeded the maximum include depth.

  • originserverbusy: An error occurs because the origin server for this fragment is busy and cannot accept new requests now. This is caused by Oracle Web Cache-to-origin server request queue limit being reached.

  • noconnection: An error occurs because the cache cannot connect to the origin server serving this fragment.

  • networktimeout: An error occurs because a fragment request to the origin server has timed out in the network connection.

  • httpclienterror: An error occurs because the origin server returns an HTTP 4xx status code, a client error, such as a malformed HTTP request or an unauthorized access.

  • httpservererror: An error occurs because the origin server returns an HTTP 5xx status code, a server error.

  • incompatiblefragmentversion: An error occurs because a fragment's processing requirement is not supported or not compatible with the template. <!-- WEBCACHETAG--> and <!-- WEBCACHEEND--> processing in an ESI fragment is not compatible with ESI processing. A fragment may be plain data that does not need any processing in the cache, or it may be an ESI template itself that requires processing of ESI features supported in this release. The ESI features in use are specified by the Surrogate-Control content control directive.

  • incorrectresponseheader: An error occurs because the response headers for a fragment causes the error.

  • incorrectesifragment: An error occurs when Oracle Web Cache tries to parse or process the ESI fragment response body due to errors in the body.

  • incorrectxmlfragment: An error occurs because there is an error in XSLT retrieval, parsing, or processing by Oracle Web Cache.

11.4.8.3 Example

The following ESI markup attempts to fetch an advertisement. If the advertisement cannot be included, Oracle Web Cache includes a static link instead.

<esi:try>
  <esi:attempt>
    <esi:comment text="Include an ad"/>
    <esi:include src="http://www.company.com/ad1.htm"/>
  </esi:attempt>
  <esi:except>
    <esi:comment text="Just write some HTML instead"/>
    <a href=www.company.com>www*.company.com</a>
  </esi:except>
</esi:try>

The following ESI markup attempts to fetch a fragment. If the fragment cannot be included because of httpclienterror, then Oracle Web Cache includes /cgi-bin/esi-fetch?/esi/tryNestL1.html instead.

<esi:try>
  <esi:attempt>
    <esi:include src="/frag.html"/>
  </esi:attempt>
  <esi:except type="httpclienterror">
    <esi:include src="/cgi-bin/esi-fetch?/esi/tryNestL1.html"/>
  </esi:except>
</esi:try>

The following <esi:try> attempts to include the fragment http://server.portal.com/pls/ppcdemo/!PCDEMO.wwpro_app_provider.execute_portlet/513104940/26 containing several HTTP request headers. If the fragment cannot be included because of various type errors, Oracle Web Cache returns an Unknown ESI Exception error.

<esi:try>
  <esi:attempt>
    <esi:include src="http://server.portal.com/pls/ppcdemo/!PCDEMO.wwpro_app_provider.execute_portlet/513104940/26" timeout="15000" >
      <esi:request_header name="X-Oracle-Device.MaxDocSize" value="0"/>
      <esi:request_header name="Accept" 
      value="text/html,text/xml,text/vnd.oracle.mobilexml"/>
      <esi:request_header name="User-Agent" 
        value="Mozilla/4.0 (compatible; MSIE 5.5; Windows; YComp 5.0.0.0) 
        RPT-HTTPClient/0.3-3"/>
      <esi:request_header name="Device.Orientation" value="landscape"/>
      <esi:request_header name="Device.Class" value="pcbrowser"/>
      <esi:request_header name="PORTAL-SUBSCRIBER" value="us"/>
      <esi:request_header name="Device.Secure" value="false"/>
      <esi:request_header name="PORTAL-SUBSCRIBER-DN"
         value="dc=us,dc=oracle,dc=com"/>
      <esi:request_header name="PORTAL-SUBSCRIBER-GUID"
         value="A5EE385440E6252BE0340800208A8B00"/>
      <esi:request_header name="Accept-Language" value="en-us"/>
      <esi:request_header name="PORTAL-USER-DN"
         value="cn=public,cn=users,dc=us,dc=oracle,dc=com"/>
      <esi:request_header name="PORTAL-USER-GUID"
         value="A5EE55B396E22651E0340800208A8B00"/>
      <esi:request_header name="Content-Type"
         value="application/x-www-form-urlencoded"/>
    </esi:include>
  </esi:attempt>
  <esi:except type="incompatiblefragmentversion" >
     This happens when a fragment's processing requirement is not supported 
     or not compatible with the template.
  </esi:except>
  <esi:except type="noconnection" >
     The cache is unable to connect to the origin server serving this fragment.
  </esi:except>
  <esi:except type="nestingtoodeep" >
     The fragment include depth has exceeded the maximum include depth. The
     default value defined in Web Cache is 3.
  </esi:except>
  <esi:except type="httpservererror" >
     The origin server returns an HTTP 5xx status code, a server error.
  </esi:except>
  <esi:except type="httpclienterror" >
     The origin server returns an HTTP 4xx status code, a client error, such as
     a malformed HTTP request or an unauthorized access.
  </esi:except>
  <esi:except type="incorrectresponseheader" >
     This happens when the response headers for a fragment cause the error.
  </esi:except>
  <esi:except type="incorrectxmlfragment" >
     This happens when there is any kind of error in Oracle Web Cache XSLT
     retrieval, parsing, or processing.
  </esi:except>
  <esi:except type="originserverbusy" >
     The origin server for this fragment is busy and cannot accept new requests
     now. This is caused by Oracle Web Cache-to-origin server request queue
    limit.
  </esi:except>
  <esi:except type="networktimeout" >
     This is thrown by a fragment whose request to the origin server has timed
     out in the network connection. 
  </esi:except>
  <esi:except type="incorrectesifragment" >
     An error is encountered when Oracle Web Cache tries to parse or process
     the ESI fragment response body due to errors in the body.
  </esi:except>
  <esi:except>
     Unknown ESI Exception
  </esi:except>
</esi:try>

11.4.9 ESI vars Tag

The <esi:vars> tag enables you to use variables outside of ESI tags. For example, instead of specifying a variable inside a <esi:include> or <esi:choose> block, you can use the <esi:vars> tag to specify a variable inside HTML code.

11.4.9.1 Syntax

<esi:vars>Optional HTML code $(VARIABLE_NAME{key}) Optional HTML code</esi:vars>

11.4.9.2 Syntax Usage

  • If the variable does not use the complete $(VARIABLE_NAME{key}) format, Oracle Web Cache reports the following error message to the event log:

    [Date] [error 12086] [ecid: request_id, serial_number]ESI syntax error. Unrecognized keyword keyword is at line line.
    
  • Do not nest the <esi:vars> tag within an HTML code line. The following is an example of incorrect syntax:

    HTML code <esi:vars>$(VARIABLE_NAME{key})</esi:vars>HTML code
    

    For example, the following is invalid:

    <IMG SRC="http://www.example.com/<esi:vars>$(HTTP_COOKIE{type})</esi:vars>/hello.gif"/>
    

11.4.9.3 Usage

Section 11.1.6 and Section 11.4.3 for usage of HTTP request variables and custom variables

11.4.9.4 Example

The following ESI markup includes the cookie type and its value as part of the included URL:

<esi:vars>
  <IMG SRC="http://www.example.com/$(HTTP_COOKIE{type})/hello.gif"/>
</esi:vars>

The following ESI output refers to logindata as part of the <A HREF=...> link for the Welcome page. logindata refers to an XML file that contains custom environment variables. The output also includes the user's sessionID and category type cookie values as part of the other <A HREF=...> links.

<esi:vars>
  <A HREF="welcome.jsp?name=$(logindata{name})">
  <A HREF="/shopping.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/shopping.gif">
  </A>
  <A HREF="/news.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/news.gif">
  </A>
  <A HREF="/sports.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/sports.gif">
  </A>
  <A HREF="/fun.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/fun.gif">
  </A>
  <A HREF="/about.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/about.gif">
  </A>
 </esi:vars>

11.4.10 ESI <!--esi-->Tag

The <!--esi...---> tag enables HTML marked up with ESI tags to display to the browser without processing the ESI tags. When a page is processed with this tag, Oracle Web Cache removes the starting <!--esi and ending --> elements, while still processing the contents of the page. When the markup cannot be processed, this tag assures that the ESI markup does not interfere with the final HTML output.

11.4.10.1 Syntax

<!--esi
 ESI elements
-->

11.4.10.2 Usage

Any ESI or HTML elements can be included within this tag, except other <!--esi...--> tags.

11.4.10.3 Example

In the following ESI markup, the <!--esi and --> are removed in the final
output. The output displays the content generated by <p><esi:vars>Hello, $(HTTP_COOKIE{name})!</esi:vars></p>, 
plus any surrounding text.

<!--esi  
 <p><esi:vars>Hello, $(HTTP_COOKIE{name})!</esi:vars></p>
-->

If the ESI markup cannot be processed, then the <p><esi:vars>Hello, $(HTTP_COOKIE{name})!</esi:vars></p> is displayed in the HTML output.

PKyIPK=wEOEBPS/highav.htm Configuring High Availability Solutions

3 Configuring High Availability Solutions

This chapter describes how to configure and implement high availability solutions using Oracle Web Cache.

This chapter includes the following topics:

3.1 Overview of Origin Server Load Balancing and Failover

You can configure Oracle Web Cache with the application Web servers or proxy servers to which it sends cache misses. Typically, Oracle Web Cache uses application Web servers for internal sites and proxy servers for external sites outside a firewall.

This section covers the following concepts:

For instructions on configuring origin servers, see Section 2.11.2.

3.1.1 Surge Protection

Oracle Web Cache passes requests for non-cacheable, stale, or missing objects to origin servers. To prevent an overload of requests on the origin servers, Oracle Web Cache has a surge protection feature that enables you to set a limit on the number of concurrent requests that the origin servers can handle. When the limit is reached, subsequent requests are queued. If the queue is full, then Oracle Web Cache rejects the request and serves a site busy error page to the client that initiated the request.

3.1.2 Stateless Load Balancing

Most Web sites are served by multiple origin servers running on multiple computers that share the load of HTTP and HTTPS requests. All requests that Oracle Web Cache cannot serve are passed to the origin servers. Oracle Web Cache balances the load among origin servers by determining the percentage of the available capacity, the weighted available capacity of each origin server. Oracle Web Cache sends a request to the origin server with the most weighted available capacity. The weighted available capacity is determined by the following formula:

(Capacity - Load) / Capacity

where:

  • Capacity is the maximum number of concurrent connections that the origin server can accept

  • Load is the number of connections currently in use

If the weighted available capacity is equal for multiple origin servers, Oracle Web Cache sends requests to the origin servers using round robin. With round robin, the first origin server in the list of configured servers receives the request, then the second origin server receives the second request. If the weighted available capacity is not equal, Oracle Web Cache sends the request to the origin server with the most available capacity.

If the load of origin servers is equivalent, Oracle Web Cache continues to use round robin, even when capacity is not equal for origin servers. Therefore, it is possible to see an even distribution of requests to origin server when the capacities are not configured to be the same.

To configure load balancing for a site, set the capacity of each origin server, and create one site-to-server mapping that maps all the applicable origin servers to the site.

For further information about configuration, see:

Figure 3-1 shows two sites, www.company.com:80 and www.server.com:80. The site www.company.com:80 is supported by application servers company-host1 and company-host2 with capacities of 50 each. The site www.server.com:80 is supported by application servers server-host1, server-host2, and server-host3 with capacities of 150, 50, and 50, respectively.

Figure 3-1 Load Balancing

Description of Figure 3-1 follows

Assuming all application Web servers have an initial load of 0, Oracle Web Cache distributes the requests to www.company.com:80 and www.server.com:80 in the following manner:

  • Oracle Web Cache distributes the requests to www.company.com:80 between the two application servers using round robin.

    Oracle Web Cache distributes the requests to company-host1 and company-host2 between the two application servers so that they maintain an equal load. The first request is sent to company-host1. The second request is sent to company-host2 if company-host1 is still processing the first request. The third and subsequent requests are sent to the application server that has the highest weighted available capacity.

    When the capacities are equal, Oracle Web Cache uses round robin to distribute requests.

  • Oracle Web Cache distributes the requests to www.server.com:80 between three origin servers using the weighted available capacity percentage.

    The first request to www.server.com:80 is sent to server-host1, because it is the first in the configured list. The second request is sent to server2-host, because server-host1 is still processing the first request and has a weighted available capacity of 99.3 percent and server-host2 has a weighted available capacity of 100 percent. The third request is sent to server-host3 because server2-host is still processing a request and has a weighted available capacity of 98 percent and server3-host has a weighted available capacity of 100 percent. The fourth request is sent to server-host1 because server-host2 and server3-host are still processing requests and have weighted available capacities of 98 percent. The fifth request is sent to server-host1 because its weighted available capacity is 98.6 percent, which is still greater than server-host2 and server-host3, respectively.

    When the capacities and loads are not equal, Oracle Web Cache uses the weighted available capacity to distribute requests. If requests were processed before new requests came in, then it is possible for all three origin servers to have loads of 0. In this case, Oracle Web Cache uses round robin.

If you do not require caching support and need a low-cost solution to a hardware load balancer, you can configure Oracle Web Cache solely as a software load balancer. This configuration mode is useful for managing traffic to a low-volume, departmental, or test Web site. See Section 3.4 for further information.

3.1.3 Backend Failover

After a specified number of continuous request failures, Oracle Web Cache considers an origin server as failed. When an origin server fails, Oracle Web Cache automatically distributes the load over the remaining origin servers and polls the failed origin server for its current up or down status until it is back online. Existing requests to the failed origin server result in errors. However, new requests are directed to the other origin servers. When the failed server returns to operation, Oracle Web Cache includes it in its weighted available capacity to load balance requests.

For further information about configuring the number of request failures, see Section 2.11.2.

The failover feature is shown in Figure 3-2. An outage of server-host3, which had a capacity of 50, results in 75 percent of requests being distributed to server-host1 and 25 percent request being distributed to server-host2.

Figure 3-2 Failover

Description of Figure 3-2 follows

3.2 Overview of Session Binding

You can configure Oracle Web Cache to support session binding, whereby a user session for a particular site is bound to an origin server to maintain state for a period. To use this feature, the origin server itself must maintain state; that is, it must be stateful.

If a request is forwarded to an origin server for an object requiring session binding, the origin server creates the user session by including the session information to clients through Oracle Web Cache in the form of a session cookie or an embedded URL parameter. Oracle Web Cache does not process the value of the parameter or cookie; it simply passes the information back to the client browser. When a client includes the session information in a subsequent request, Oracle Web Cache forwards the request to the origin server that created the user session. Oracle Web Cache binds the user session to that particular origin server.

Figure 3-3 shows how Oracle Web Cache supports objects that use session binding.

Figure 3-3 Session Binding

Description of Figure 3-3 follows

The steps for how session binding works for requests are as follows:

  1. When a request first comes in, Oracle Web Cache uses load balancing to determine to which origin server the request is forwarded. In this example, application server www.server2.com is selected.

  2. If the requested object requires session binding, the origin server sends the session information back to the client through Oracle Web Cache in the form of a cookie or an embedded URL parameter.

  3. Oracle Web Cache sends subsequent requests for the session to the origin server that established the session, bypassing load balancing. In this example, application server www.server2.com handles the subsequent requests.

For instructions on configuring origin servers, see Section 2.12.

If you configure a cache cluster, when you configure session binding, do not select the Internal-Tracking mechanism option, as it does not work for cache clusters. The other mechanisms work for cache clusters. See Section 3.6.4 for further information.


Notes:

  • When a session expires, Oracle Web Cache does not continue to bind the user session to the origin server. Instead, Oracle Web Cache uses load balancing to choose an origin server. To avoid pages being served past the client session expiration time, ensure that the session cookie expires before the origin server expires the client session.

  • If an origin server is busy, Oracle Web Cache disables session binding to that origin server.


3.3 Overview of Cache Clusters

In a cache cluster, multiple system components of Oracle Web Cache operate as one logical cache. This one logical cache is referred to as the cache cluster member. The cache cluster members communicate with one another to request cacheable content that is cached by another cache cluster member and to detect when a cache cluster member fails.

Figure 3-4 shows an Oracle Web Cache cluster that contains three cache cluster members. As the figure shows, the cluster members communicate with one another as well as with the application Web servers and with the clients.

Figure 3-4 Oracle Web Cache Cluster Architecture

Description of Figure 3-4 follows

Oracle Web Cache uses the relative capacity of each cache instance to distribute the cached content among the cache cluster members. In effect, it assigns a cache cluster member to be the owner of a particular object. This content is called owned content.

In addition to the owned content, Oracle Web Cache stores popular objects in the cache of each cluster member. These objects are known as on-demand content. By storing the on-demand content, Oracle Web Cache responds to requests for those objects quickly and decreases the number of cache misses. Fewer requests are sent to the application Web server. The result is improved performance.

A cache cluster uses one configuration that is synchronized with all cluster members. The configuration contains general information, such as security, session information, and caching rules, which is the same for all cluster members. It also contains cache-specific information, such as capacity, administration and other ports, resource limits, and log files, for each cluster member.

Each member must be authenticated before it is added to the cache cluster. The authentication requires that the administration username and password of the Oracle Web Cache instance to be added be the same as the administration username and password of the cluster.

When you add a cache to the cluster, the cache-specific information of the new cluster member is added to the configuration of the cache cluster. Then, Oracle Web Cache synchronizes the configuration to all members of the cluster. Because adding a new member changes the relative capacity of each Web cache, Oracle Web Cache uses the information about capacity to recalculate which cluster member owns which content.

When cache cluster members detect the failure of another cluster member, the remaining cache cluster members automatically take over ownership of the content of the failing member. When the cache cluster member is reachable again, Oracle Web Cache again reassigns the ownership of the content.

When you remove a Web cache from a cache cluster, the remaining cache cluster members take over ownership of the content of the removed member. In addition, the configuration information about the removed member is deleted from the configuration and the revised configuration is synchronized with the remaining cache cluster members.

In a cache cluster, administrators can decide whether to propagate invalidation messages to all cache cluster members or to send invalidation messages individually to cache cluster members.

Cache clusters provide the following benefits:

  • High availability

    With or without cache clusters, Oracle Web Cache ensures that cache misses are directed to the most available, highest-performing Web server. With cache clusters, Oracle Web Cache supports failure detection and failover of caches. If a Web cache fails, other members of the cache cluster detect the failure and take over ownership of the cacheable content of the failed cluster member.

  • Scalability and performance

    By distributing the site's content across multiple caches, more content can be cached and more client connections can be supported, expanding the capacity of your Web site.

    By deploying multiples caches in a cache cluster, you make use of the processing power of more CPUs. Because multiple requests are executed in parallel, you increase the number of requests that are served concurrently.

    Network bottlenecks often limit the number of requests that can be processed. Even on a node with multiple network cards, you can encounter operating system limitations. By deploying caches on separate nodes, more network bandwidth is available. Response time is improved because of the distribution of requests.

    In a cache cluster, fewer requests are routed to the application Web server. Retrieving content from a cache (even if that request is routed to another cache in the cluster) is more efficient than materializing the content from the application Web server.

  • Reduced load on the application Web server

    In a cache cluster environment, popular objects are stored in multiple caches. If a cache fails, requested cacheable objects are likely to be stored in the cache of surviving cluster members. As a result, fewer requests for cacheable objects require routing to the application Web server even when a cache fails.

    When a failed cache returns to operation, it has no objects cached. In a noncluster environment with multiple independent caches, that cache must route cache misses to the application Web server. In a cache cluster environment, that cache can route cache misses to other caches in the cluster, reducing the load on the application Web server.

    Cache clusters maximize system resource utilization. When each cache in a cache cluster resides on a separate node, more memory is available than for one cache on a single node. With more memory, Oracle Web Cache can cache more content, resulting in fewer requests to the application Web server.

  • Improved data consistency

    Because Oracle Web Cache uses one set of invalidation rules for all cache cluster members and because it makes it easy to propagate invalidation requests to all cache cluster members, the cached data is more likely to be consistent across all caches in a cluster.

    You can configure a cache cluster that does not support requests between cache cluster members, but allows propagating invalidation requests, as well as synchronizing configuration changes. See Section 3.6.7 for more information.

  • Manageability

    Cache clusters are easy to manage because they use one configuration for all cache cluster members. For example, you specify one set of caching rules and one set of invalidation rules. Oracle Web Cache distributes those rules throughout the cluster by synchronizing the configuration to each cluster member.

3.4 Overview of High Availability without a Hardware Load Balancer

For environments in which a hardware load balancer is not available, you can select to configure the following options:

3.4.1 Oracle Web Cache Solely as a Software Load Balancer or Reverse Proxy

You can configure a special mode of Oracle Web Cache that enables you to use Oracle Web Cache solely as a software load balancer of HTTP traffic or reverse proxy to origin servers. This configuration mode is useful to:

  • Manage low-volume, departmental, or test Web sites

  • Manage traffic in the DMZ between a hardware load balancer and an application using Oracle Portal or Oracle Single Sign-On

This mode does not cache any content or provide support for the following features:

  • Compression: Oracle Web Cache ignores all compression settings.

  • ESI: Oracle Web Cache does not assemble ESI content.

  • Cache hierarchies: If you plan to configure two caches in a cache hierarchy, then you should not configure one cache as a load balancer.

You can deploy a single Oracle Web Cache server as a load balancer. However, this deployment makes the Oracle Web Cache server a single point of failure for your application. You can instead configure a cache cluster using multiple Oracle Web Cache servers with operating system load balancing capabilities. Take note of the capacity changes mentioned earlier in this section.

In this mode, you can configure Oracle Web Cache to load balance HTTP traffic in front of an application using ESI or in front of another Oracle Web Cache. The Oracle Web Cache load balancer does not process ESI content or participate in hierarchical caching. For example, a typical Oracle Portal deployment has a built-in Oracle Web Cache used for ESI assembly. For these configurations, do not configure the Oracle Web Cache used for ESI assembly as a load balancer.

If you require other Oracle Web Cache features, such as caching or compression support, do not configure this mode. Instead, configure a hardware load balancer or operating system load balancing support, and use the load balancing feature to manage requests to origin servers.

For more information, see:

3.4.2 Operating System Load Balancing Support

Certain operating systems provide load balancing support, which can increase the availability of Oracle Web Cache, particularly in cache clusters.

When the operating system detects a failure of one cache, automatic IP takeover is used to distribute the load to the remaining caches in the cluster configuration. Because requests are sent to the virtual IP address, not to a specific host, requests can be served even if one hosts is unreachable.

In addition, some operating systems provide load balancing for incoming requests. You can configure the operating system to balance the load of incoming requests across caches on multiple nodes.

A network load balancer does not provide all the features, such as firewall or ping URL mechanisms, that a hardware load balancer may provide, but if those needs are met, you could consider using a network load balancer.

Section 3.9 describes how to configure a network load balancer on one operating system.

3.5 Configuring Session Binding

For more information about session binding, see Section 3.2.

To configure session binding, you specify a set of session binding rules, and then apply them to the sites. By default, sites are configured to use a default rule. You can use the default rule or select another rule customized for the site.

If you decide to change the value of the default session binding rule, ensure all named sites currently configured with this rule require session binding. If some sites do not require session binding, leave the value of default rule, and instead specify session binding settings for the site.

To configure session binding:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control. See Section 2.6.2.

  2. From the Web Cache menu, select Administration and then select Session Configuration.

    The Session Configuration page displays.

  3. From the Site list, select the site to create customized session-bindings.

    Select Global to specify default settings for requests which do not match any defined site. If you do not specify customized session-binding settings for a site, then you can click the Use global settings option to apply the settings you specify for Global. The default selection for the Global selection is the Disable session binding. You change the default setting by selecting Global from the Site list and selecting on of the other session-binding selections.

  4. Create a session definition in the Session Definitions table. See Section 2.12.

    - Use global settings: Select this option to apply the session-binding settings you configured for the Global selection from the Site list.

    By default, Oracle Web Cache disables session binding for all requests. The default selection for Global is the Disable session binding option. When you first create a site, it is set by default to use the global session binding settings

    - Disable session binding: Select this option to disable session binding. This selection is the default for the Global site. You change the default setting by selecting Global from the Site list and selecting on of the other session-binding selections.

    - Cookie based session binding with any Set-Cookie: Select this option if the client supports cookies and your origin server uses one or more cookies for session state. Oracle Web Cache uses its own cookie to track a session. This cookie, which contains routing information, is maintained between Oracle Web Cache and the client browser. The client/server binding is initiated by the first cookie that the application server sends to the client.

    - Bind using a session: Select this option to enable binding for a specific session, and then perform the following steps:

    1. From the Session Name list, select a session to enable binding for a specific session.

    2. From the Session Binding Mechanism list, select a binding mechanism for the selected session definition:

      - Cookie Based: Select if the client supports cookies. Oracle Web Cache uses its own cookie to track a session. This cookie, which contains routing information, is maintained between Oracle Web Cache and the client browser.

      - Session Binding IAS: Select if the application is based on OC4J. Oracle Web Cache forwards routing information with each request to OC4J through Oracle HTTP Server.

      - Internal-Tracking: Select if the client does not support cookies and the application is not based on Oracle HTTP Server and OC4J. This option is intended for backward compatibility with earlier releases of Oracle Web Cache. Oracle Web Cache maintains an in-memory routing table, of which each entry maps a session ID to an origin server. The routing table is not shared among cluster nodes. If you select this option and you have a cache cluster configuration, then you must also bind at the load balancer layer.

  5. Click Apply to submit changes.

  6. Restart Oracle Web Cache. See Section 2.13.

3.6 Configuring a Cache Cluster for Caches Using the Same Oracle WebLogic Server

To increase the availability and scalability of your Web site, you can configure multiple instances of Oracle Web Cache to run as members of a cache cluster. For more information about cache clusters, see Section 3.3.

To configure a cache cluster, you configure two or more Oracle Web Cache instances as cache cluster members, and specify properties for the cluster.

A cache cluster uses one configuration that is synchronized from the current cache (the cache to which your client browser is connected) to all cluster members. The configuration contains settings that are the same for all cluster members as well as cache-specific settings for each cluster member.

This section contains the following topics to aid you in configuring a cache cluster in a environment in which all the caches are associated with the same Oracle WebLogic Server. These instruction explain how to configure a cluster using Fusion Middleware Control, which requires all the cache members to use the same Oracle WebLogic Server:

In addition, see the following information about configuring clusters:

If you have want to configure a cache cluster for a configuration in which the caches are associated with different Oracle WebLogic Servers, follow the instructions in Section 3.7 to use Oracle Web Cache Manager to configure the cluster.

3.6.1 Configuration Prerequisites

Because a cache cluster contains two or more instances of Oracle Web Cache, you must have two or more instances of Oracle Web Cache installed on one or more nodes before you configure a cache cluster. The instances must be the same version of Oracle Web Cache. In addition, the respective passwords for the Oracle Web Cache administrator, and the invalidator user, invalidator, must be the same across the cluster members. If they are different, you must connect to the cache's admin server and modify the administration password, as described in Section 5.2.

3.6.2 Understanding Failover Threshold and Capacity Settings

To ease with configuration, take the time to understand the following key configuration settings for a cache cluster and its members:

3.6.2.1 Failover Threshold for the Cache Cluster

You set the failover threshold when you configure cache cluster properties. This setting reflects the number of allowed consecutive request failures before Oracle Web Cache considers another cache cluster member to have failed. In other words, Oracle Web Cache consecutively retries a failed member for certain number of times, before considering the cache-member as down. The number of times Oracle Web Cache is allowed to retry is termed as failover threshold.

Oracle Web Cache considers a request to another cache cluster member to have failed if:

  • There are any network errors

  • The HTTP response status code is 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, or 504 Gateway Timeout, or less than 100.

For each failed request, Oracle Web Cache increments the failure counter for that cluster member. This counter is kept separately by each cluster member. When a request is successfully processed by a cluster member, Oracle Web Cache resets the failure counter.

When the failover threshold is met, Oracle Web Cache considers the cache cluster member to have failed. Oracle Web Cache recalculates the relative capacity of the remaining cache cluster members. It then reassigns ownership of cache content.

When a cache cluster member is down, Oracle Web Cache starts polling the cache cluster member. It does this by sending requests to the ping URL you specify. When Oracle Web Cache receives a success response from the cache cluster member, it considers that cache cluster member to be up again. It recalculates the relative capacity of the cache cluster members and it reassigns ownership of cache content.

3.6.2.2 Capacity for Cache Cluster Members

When you configure a cache cluster member, you specify capacity for that member.

Oracle Web Cache uses capacity in two different ways:

  • As the absolute capacity for the number of concurrent incoming connections to this cache cluster member from all other cache cluster members.

    The connections are used to receive requests for owned content from other cache cluster members. The number of connections are divided among the other cluster members. For example, in a three-cache cluster, if the capacity of Cache_A is 50, Cache_B can open 25 connections to Cache_A and Cache_C can open 25 connections to Cache_A.

    More connections are used when another cache cluster member contains little or no data in its cache, such as when it is initially started, when it recovers from a failure, or after invalidation. During this time, the cluster member sends many of the requests to its peers, the owners of the content. In most cases, these requests are served more quickly than requests to the origin server. Having a higher number of connections increases performance during this time and shortens the time it takes to fully load the cache. After a cache is fully loaded, fewer of the connections are used. There is no overhead for unused connections.

  • As the relative capacity of the cache cluster member.

    The capacity of a cache cluster member is weighted against the total capacity of all active cache cluster members. When you set the capacity, Oracle Web Cache assigns a percentage of the ownership array to the cluster member, indicating how much of the cached content is to be owned by the cluster member. The percentage is calculated using the following formula:

    cluster_member_capacity / total_capacity_of_all_active_cluster_members
    

    For example, if cache cluster member Cache_A has a capacity of 100 and cache cluster member Cache_B has a capacity of 300, for a total capacity of 400, Cache_A is assigned 25 percent of the ownership array and Cache_B is assigned 75 percent of the ownership array. That means that Cache_A owns 25 percent of the cached content.

    Note that in calculating the relative capacity, Oracle Web Cache considers the capacity of active cluster members; it does not consider the capacity of cluster members that it has determined to have failed.

Set the initial capacity for each cache cluster member to 10 percent of the Maximum Incoming Connections setting.

After you have a better idea of an application's capacity needs and hit rates, fine tune the capacity. If these two assumptions apply to your cache cluster, then apply the following formula to determine the capacity for each cluster member:

  1. Incoming traffic is distributed equally to all the cache cluster members.

  2. Ownership of content is distributed equally among all the cache cluster members.

In the following formula, pick the highest value between the default value or the max_incoming_connections formula:

max(default_value, (max_incoming_connections * (cacheable_misses%/100) * (number_of_caches - 1) / number_of_caches))

In the formula:

  • default_value is:

    • 100 for production environments

    • 30 for test environments

    • 0 for invalidation-only clusters

    When the capacity increases, the number of file descriptors needed by Oracle Web Cache also increases.

    See Section 3.6.7 for further information about invalidation-only clusters.

  • max_incoming_connections is the Maximum Incoming Connections setting from the Resource Limits page of Fusion Middleware Control.

  • cacheable_misses% is the percentage of requests for cacheable objects that were not served directly by Oracle Web Cache, but were served by Oracle Web Cache after it fetched the content from the origin server.

    You can find the Cacheable Misses setting in the Web Cache Statistics page of Fusion Middleware Control.

For example, assume a cache cluster with four members. If Oracle Web Cache is operating at 1500 maximum incoming connections, with a 30 percent cacheable miss rate, then the equation to calculate capacity for this configuration looks like the following:

(1500 * (30/100) * (4 - 1) / 4

The equation calculates to 337.5. You would round up to 338, which is the capacity you would then enter for each cache cluster member.

1500 * .3 * 3 / 4 = 337.5

If you assign a capacity of 0 to a cluster member, that cluster member does not receive requests from other cluster members. However, that cluster member does forward requests to other cluster members, the owners of the content. If you assign a capacity of 0 to all cluster members, Oracle Web Cache does not forward requests between cluster members. Even when capacity is set to 0, you can still synchronize the configuration and Oracle Web Cache can automatically propagate invalidation requests to cluster members.

3.6.3 Task 1: Add Caches to the Cluster and Configure Properties

Before you add a cache to the cluster, ensure the conditions described in Section 3.6.1 are met.

To add cache members to a cluster with Fusion Middleware Control:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control for an Oracle Web Cache instance. See Section 2.6.2.

  2. From the Web Cache menu, select Administration and then select Cluster.

    The Cluster page displays.

  3. For each cache member you want to add:

    1. Click Add.

    2. In the Component field, enter the name of the cache member.

      The Capacity field is auto-filled with a default value. You can modify this value. See Section 3.6.2 for more information about capacity.

  4. In the Failover Threshold field, enter the number of allowed consecutive request failures before Oracle Web Cache considers another cache cluster member to have failed.

    The default is five failures.

    See Section 3.6.2 for further information about this field.

  5. In the Ping URL field, enter the URL that cache cluster members uses to attempt to contact a cache cluster member that has reached its failover threshold.

    Use a URL that is cacheable and that you can guarantee is stored in each cache. The default is _oracle_http_server_webcache_static_.html, which is stored in the cache.

  6. In the Ping Frequency field, enter the time, in seconds, between attempts by a cluster member to reach the failed cluster member.

    The default, 10 seconds, is a reasonable interval for most situations.

  7. Click Apply.

3.6.4 Task 2: Enable Tracking of Session Binding

In a cache cluster, all cache cluster members must be able to determine which origin server established the session, although the request was routed originally through only one cache cluster member.

For the Oracle Web Cache you established properties for in Section 3.6.3, configure session binding with a session binding mechanism of Cookie Based or Session Binding IAS. Do not use the Internal-Tracking option, as it does not work for cache clusters.

To configure session binding with the Cookie-based mechanism, see Section 3.5.

3.6.5 Task 3: Synchronize the Configuration to Cluster Members

When you modify the cluster and apply changes, Oracle Web Cache adds the cache-specific information from the new cache cluster members to the configuration. For those changes to take affect in all cluster members, you must synchronize the configuration and restart the cluster members.

To synchronize configuration from a newly-added cache member to the other caches in the cluster with Fusion Middleware Control:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control for the Oracle Web Cache you established properties for in Section 3.6.3.

  2. From the Web Cache menu, select Administration and then select Cluster.

    The Cluster page displays.

  3. Select the other cache members in the cluster, click Synchronize.

  4. Select all the cache members, select an interval for staggering the time that operation begins on the cache sand click Start Up.

The cache cluster is ready to use.

3.6.6 Removing a Cache Member from a Cluster

To remove a cache-member from a cluster, you must not only ensure that remaining cluster members no longer include that cache in cluster, but that the removed cache no longer considers itself to be part of the cluster.

To remove a cache from a cluster with Fusion Middleware Control:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control for an Oracle Web Cache instance, but not the cache to remove from the cluster. See Section 2.6.2.

  2. From the Web Cache menu, select Administration and then select Cluster.

    The Cluster page displays.

  3. Select the cache you want to remove and click Delete.

  4. Select the other cache members in the cluster, click Synchronize.

  5. With the other caches still selected, click Restart.

    All remaining caches in the cluster no longer consider the removed cache to be part of the cluster. However, the removed cache still considers itself to be part of the cluster. You remedy this situation in the next steps.

  6. Navigate to the Web Cache Home page in Fusion Middleware Control of the cache you removed from the cluster.

  7. From the Web Cache menu, select Administration and then select Cluster.

    The Cluster page displays with all the member of the cache.

  8. Select a cache except the current one, and click Delete. Repeat until only the current cache remains in the Cluster Members list.

  9. Click Restart.

3.6.7 Configuring Administration and Invalidation-Only Clusters

You can configure a cluster that supports synchronizing the configuration and invalidation requests across all cache cluster members, but that does not forward requests between cache cluster members. That is, in processing requests, each cluster member acts as an individual cache and does not request objects from its peer cluster members. However, configuration changes and invalidation requests can be synchronized among cluster members.

You can use this configuration to simplify administration of many caches. It may be needed in a cluster where members are separated by a firewall. For example, you can have a cluster where two caches are located on either side of a firewall that separates the intranet from Internet. (The network settings of such a setup—of sending Internet traffic to one cache and intranet traffic to another—is beyond the scope of this document.)

To manage these caches as a cluster and avoid sharing contents between the caches, take the following steps:

  1. Create a cluster and add members to it as discussed in Section 3.6.3 and Section 3.6.4, with the following exceptions:

    • For each cluster member, set the capacity to 0.

    • In the Cluster Properties section, select option Invalidation requests sent to any cluster member will be propagated to all cluster members.

  2. Synchronize the configuration to all cluster members, as described in Section 3.6.5.

3.7 Configuring a Cache Cluster for Unassociated Caches or Caches Using Different Oracle WebLogic Servers

This section contains the following topics to help you in configuring a cache cluster in a configuration in which all unassociated caches are using different Oracle WebLogic Servers. These instruction explain how to configure a cluster using Oracle Web Cache Manager.

In addition, see the following information about configuring clusters:

To configure a cache cluster for a configuration in which the caches are associated with same Oracle WebLogic Server, follow the instructions in Section 3.6 to use Fusion Middleware Control to configure the cluster.

3.7.1 Task 1: Configure Cache Cluster Settings

To configure settings for a cache cluster with Oracle Web Cache Manager:

  1. From Oracle Web Cache Manager, in the navigator frame, select Properties > Clustering. See Section 2.7.2.

    The Clustering page appears. The General Cluster Information section displays the default clusterwide values for failover and invalidation synchronization. The Cluster Members table displays the current cache (the cache to which you are connected) as the only cluster member. Oracle Web Cache ignores the cluster information if there is only one cluster member.

  2. In the General Cluster Information section of the Clustering page, click Edit.

    The Edit General Cluster Information dialog box appears.

  3. In the Cluster Name field, enter a name for the cluster.

  4. In the Failover Threshold field, enter the number of allowed consecutive request failures before Oracle Web Cache considers another cache cluster member to have failed.

    The default is five failures.

    See Section 3.6.2 for further information about this field.

  5. In the Ping URL field, enter the URL that cache cluster members uses to attempt to contact a cache cluster member that has reached its failover threshold.

    Use a URL that is cacheable and that you can guarantee is stored in each cache. The default is _oracle_http_server_webcache_static_.html, which is stored in the cache.

  6. In the Ping Interval field, enter the time, in seconds, between attempts by a cluster member to reach the failed cluster member.

    The default, 10 seconds, is a reasonable interval for most situations.

  7. In the Propagate Invalidation field, select Yes or No to specify whether you want all invalidation requests from any cache cluster member to be synchronized with other cache cluster members.

  8. Click Submit.

  9. In the Cluster Members table of the Clustering page, default values are displayed for the current cache. Select the cache and click Edit Selected.

    The Edit Cluster Member dialog box appears.

  10. In the Cache Name field, enter a name for the Oracle Web Cache instance. The name must be unique from the names of other caches in the cache cluster.

  11. By default, the Host Name field contains the host name of the node on which Oracle Web Cache is installed. Usually, you do not have to modify this field.

  12. By default, the Oracle Home field contains the file specification for the Oracle home in which Oracle Web Cache is installed. Usually, you do not have to modify this field. Note that the combination of Host Name and Oracle Home must be unique in a cache cluster.

  13. In the Capacity field, enter the number of concurrent incoming connections from other cache cluster members that Oracle Web Cache can sustain.

    See Section 3.6.2 for further information about this field.

  14. Click Submit.

    You now have one cache, the current cache, in the cluster. However, the cluster information is ignored until you have multiple Oracle Web Cache system components in the cluster.

3.7.2 Task 2: Add Caches to the Cluster

Before you add a cache to the cluster, ensure the conditions described in Section 3.6.1 are met.

To add another cache to the cluster with Oracle Web Cache Manager:

  1. In the navigator frame, select Properties > Clustering.

    The Clustering page appears.

  2. In the Cluster Members section of the Clustering page, click Add.

    The Add Cache to Cluster dialog box appears.

  3. In the Host Name field, enter the host name of the cache to be added to the cluster.

  4. In the Admin Port field, enter the administration port for the cache to be added to the cluster.

    The administration port is the listening port for administrative requests.

  5. In the Protocol for Admin Port field, select either HTTP or HTTPS to accept HTTP or HTTPS client requests.

  6. In the Cache Name field, enter a name for the cache. The name must be unique from the names of other caches in the cache cluster.

  7. In the Capacity field, enter the number of concurrent incoming connections from other cache cluster members that Oracle Web Cache can sustain.

    See Section 3.6.2 for further information about this field.

  8. Click Submit.

    The cache is now part of the cluster and is listed in the Cluster Member table.

  9. To add more Oracle Web Cache instances to the cache cluster, repeat Steps 2 through 8.

  10. When you have completed adding members to the cache cluster, click Apply Changes.

Oracle Web Cache adds the cache-specific information from the new cache cluster members to the cluster configuration.

You can add more Oracle Web Cache instances to the cluster at any time by choosing Add. You can modify the settings for a cache cluster member by choosing Edit Selected. You can delete a cache cluster member, other than the current cache, by choosing Delete Selected.

3.7.3 Task 3: Enable Tracking of Session Binding

In a cache cluster, all cache cluster members must be able to determine which origin server established the session, although the request was routed originally through only one cache cluster member. To configure session binding in a cache cluster, you select a session binding mechanism of Cookie-based. Setting this mechanism adds a cookie that tracks session information so that it can be read by all cluster members. Oracle Web Cache includes a Set-Cookie response-header in the response so that subsequent requests from the client include the cookie. The cookie provides information so that any of the cluster members can resolve the binding regardless of which cache handled the initial request.

To configure session binding with the Cookie-based mechanism, see Section 3.5.

3.7.4 Task 4: Synchronize the Configuration to Cluster Members

When you modify the cluster and apply changes, Oracle Web Cache adds the cache-specific information from the new cache cluster members to the configuration. For those changes to take affect in all cluster members, you must synchronize the configuration and restart the cache server process of the cluster members.

To synchronize the configuration to new cluster members with Oracle Web Cache Manager:

  1. In the navigator frame, select Operations > Cache Operations.

    The Cache Operations page appears. The Operation Needed column indicates the caches to which the configuration should be synchronized.

  2. Synchronize the configuration to all cache cluster members:

    1. Select All caches in the Operate On field.

    2. Select an Intervaln> of Immediate. (No other interval is allowed for synchronization.)

    3. Click Propagate.

    (Alternatively, you can synchronize the configuration to one cluster member at a time. Click Selected cache in the Operate On field, and then click Propagate.)

    When the operation completes, the Operation Needed column in the Cache Operations page indicates the cluster members that must be restarted.

  3. Stop and restart all cluster members:

    1. Select All caches in the Operate On field.

    2. Select an Interval to stagger the time that operation begins on the caches, and then click Restart.

    (Alternatively, you can restart one cluster member at a time.) Choose Selected cache in the Operate On field and then click Restart.)

When the operation completes, the Operation Needed column in the Cache Operations page indicates that no operations are needed. The cache cluster is ready to use.

3.7.5 Removing Caches from a Cluster

To remove a cache from a cluster, you must not only ensure that remaining cluster members no longer include that cache in cluster, but that the removed cache no longer considers itself to be part of the cluster.

To remove a cache from a cluster with Oracle Web Cache Manager:

  1. Enter the URL for the Oracle Web Cache Manager of a cache in cluster, but not the cache to remove from the cluster.

  2. In the navigator frame, select Properties > Clustering.

  3. In the Cluster Members section of the Clustering page, select the cache you want to remove from the cluster and click Delete Selected.

  4. In the Oracle Web Cache Manager main window, click Apply Changes.

  5. Synchronize the change to the other remaining cache cluster members:

    1. In the navigator frame, select Operations > Cache Operations.

    2. Select All caches in the Operate On field.

    3. Select an Interval of Immediate.

    4. Click Propagate.

      The change is synchronized with all the remaining cluster members, but not to the removed cluster member.

  6. Restart all cluster members:

    1. In the Cache Operations page, select All caches in the Operate On field.

    2. Select an Interval to stagger the time that operation begins on the caches, and then click Restart.

    All remaining caches in the cluster no longer consider the removed cache to be part of the cluster. However, the removed cache still considers itself to be part of the cluster. To remedy that situation, take the next steps.

  7. Enter the URL for the Oracle Web Cache Manager of the cache you removed from the cluster.

  8. In the navigator frame, select Properties > Clustering.

    The Clustering page appears. The Cluster Members section still shows all members of the cluster.

  9. In the Cluster Members section of the Clustering page, select each cache except the current one, and click Delete Selected. Repeat until only the current cache remains in the Cluster Members list.

  10. In the Oracle Web Cache Manager main window, click Apply Changes.

  11. In the navigator frame, select Operations > Cache Operations.

  12. Select the cache and click Restart.

3.7.6 Configuring Administration and Invalidation-Only Clusters

You can configure a cluster that supports synchronizing the configuration and invalidation requests across all cache cluster members, but that does not forward requests between cache cluster members. That is, in processing requests, each cluster member acts as an individual cache and does not request objects from its peer cluster members. However, configuration changes and invalidation requests can be synchronized among cluster members.

You can use this configuration to simplify administration of many caches. It may be needed in a cluster where members are separated by a firewall. For example, you can have a cluster where two caches are located on either side of a firewall that separates the intranet from Internet. (The network settings of such a setup—of sending Internet traffic to one cache and intranet traffic to another—is beyond the scope of this document.)

To manage these caches as a cluster and avoid sharing contents between the caches, take the following steps:

  1. Create a cluster and add members to it as discussed in Section 3.7.1 and Section 3.7.2, with the exception noted in the following step.

  2. For each cluster member, set the capacity to 0. (Select Properties > Clustering. Then, select a cluster member and click Edit. In the Edit Cluster Member dialog box, set the Capacity to 0.)

  3. Synchronize the configuration to all cluster members, as described in Section 3.7.4.

3.8 Configuring Oracle Web Cache as a Software Load Balancer

For an overview of high availability without a hardware load balancer, see Section 3.4.

To configure a single Oracle Web Cache server as a software load balancer:

  1. Use a text editor to open webcache.xml, located in:

    (UNIX) ORACLE_INSTANCE/<instance_name>/config/WebCache/<webcache_name>
    (Windows) ORACLE_INSTANCE\<instance_name>\config\WebCache\<webcache_name>
    
  2. Locate the CACHE element.

  3. Add the ROUTINGONLY attribute to the CACHE element. For example:

    ...
    <CACHE WCDEBUGON="NO" CHRONOSONPERNODE="NO" CAPACITY="301" VOTES="1" 
    INSTANCENAME="instance_name" COMPONENTNAME="component_name"  ORACLEINSTANCE="instance" HOSTNAME="web_cache_host_name" 
    ORACLEHOME="directory" NAME="web_cache_name" 
    ROUTINGONLY="YES">
    ...
    
  4. Save webcache.xml.

  5. Restart Oracle Web Cache with the following command:

    opmnctl restartproc ias-component=component_name
    

    This executable is found in the following directory:

    (UNIX) ORACLE_INSTANCE/bin
    (Windows) ORACLE_INSTANCE\bin
    
  6. Verify Oracle Web Cache is running in the load balancer mode from the Oracle Web Cache Manager by verifying the following status message displays beneath the Apply Changes and Cancel Changes buttons:

    Web Cache running in Routing Only Mode with current configuration
    

    Fusion Middleware Control does not provide an equivalent verification status.

  7. Configure origin servers, as described in Section 2.11.2.

  8. Create site definitions and map them to the origin servers, as described in Section 2.11.3 and Section 2.11.4.

  9. If your application deployment requires session stickiness, enable session binding. See Section 2.12.

Consider the topology depicted in Figure 3-5.

Figure 3-5 Deploying Oracle Web Cache as a Load Balancer

Description of Figure 3-5 follows

To configure this topology:

  1. Register the IP address of the Oracle Web Cache server webche-host with www.app1.company.com.

  2. Configure the Oracle Web Cache server with the following:

    1. Receive HTTP and HTTPS requests on designated listening ports.

    2. Send HTTP and HTTPS requests to application Web servers app1-host1 and app1-host2 on designated listening ports.

    3. Map virtual host site definition for www.app1.company.com mapped to app1-host1 and app1-host2.

3.9 Configuring Microsoft Windows Network Load Balancing

For an overview of high availability without a hardware load balancer, see Section 3.4.

On certain Microsoft Windows platforms, you can use the Microsoft Network Load Balancing (NLB) component of the operating system instead of a hardware load balancer. NLB is part of the Microsoft clustering offerings and is available on the following platforms:

  • Windows 2000 Advanced Server

  • Windows 2000 Datacenter Server

  • Windows 2003 (all editions)

You configure the hosts as a cluster and you configure the operating system to provide load balancing. Then, you configure NLB for hosts running Oracle Web Cache in a cache cluster, taking the following steps for each host:

  1. Choose Start > Settings > Network and Dial-up Connections.

  2. Select the network adapter. Then, right-click and select Properties.

  3. In the Properties dialog box, select Network Load Balancing. Then, click Properties.

  4. In the Cluster Parameters tab of the Network Load Balancing Properties dialog box, take the following steps:

    1. For Primary IP Address, enter the virtual IP address to be shared by all members of the cluster.

    2. For Subnet mask, enter the subnet mask for the virtual IP address.

    3. For Full Internet Name, enter the full internet name for the virtual IP address.

    4. Note the Network Address, which is a generated address.

    5. For Multicast support, check enabled.

    6. Optionally, enter a Remote password and enable Remote control.

  5. Select the Host Parameters tab and take the following steps:

    1. For Priority, enter an integer between 1 and 32. The lower the number, the higher the priority. Priority establishes the default handling priority among hosts for requests that are not load-balanced by port rules. (See Step 6 for information about configuring port rules.)

    2. For Initial cluster state, check active. This specifies that this host should be included in the cluster array immediately upon Windows startup.

    3. For Dedicated IP address, enter the IP address of this host.

    4. For Subnet mask, enter the subnet mask of this host.

  6. Select the Port Rules tab, and take the following steps:

    1. For Port Range, to balance the load from all client requests with a single port rule, use the default port range (1-65535). Use multiple port rules if different applications require different protocols, filtering modes, or affinity.

    2. For Protocols, select TCP. If your application uses software that requires UDP, select Both.

    3. For Filtering Mode, select Multiple Hosts.

    4. For Affinity, you can select one of three options. None results in load balancing of all requests across all hosts. Single results in all requests from a particular client being processed by the same host. Use this option to maintain session state. Class C results in all client requests from a TCP/IP class C address range being processed by the same host.

    5. For Load Weight, either enter a percentage of the load to be handled by the host or select equal.

    Note that Port Rules must be identical for all hosts in the cluster.

For more information about Microsoft Network Load Balancing, see the Microsoft documentation at:

http://www.microsoft.com
PK5>&>PK=wE OEBPS/log.htm Logging

9 Logging

The logging feature of Oracle Web Cache enables you to troubleshoot difficulties you might have in execution and use of Oracle Web Cache and associated processes.

This chapter includes the following topics:

9.1 Introduction to Event Logs

Oracle Web Cache records event and error information in event logs. An event log entry can help you determine what objects have been inserted in the cache and alert you to any cache-related issues. By default, Oracle Web Cache collects all event log messages associated with each request in memory. If the most severe message in the request is at or above the selected verbosity level, Oracle Web Cache writes all the messages related to the request to the event log at once. Oracle Web Cache groups the messages for the request together in the log file for easier diagnosis.

By default, the event log has a file name of event_log for the Oracle Web Cache and Oracle Diagnostic Logging (ODL) text formats and log.xml for the ODL XML format. Oracle Web Cache stores logs files in the following directories:

(UNIX) ORACLE_INSTANCE/diagnostics/logs/WebCache/<webcache_name>
(Windows) ORACLE_INSTANCE\diagnostics\logs\WebCache\<webcache_name>

This section includes the following topics:

9.1.1 Event Logging Formats

When you configure settings for event logs, select the logging format:

9.1.1.1 Oracle Diagnostics Logging Text and XML Formats

The Oracle Diagnostic Logging (ODL) format provides a common format for all diagnostic messages and log files, and a mechanism for correlating the diagnostic messages from various components across Oracle Fusion Middleware.

You can select ODL Text to create a text file or ODL XML to create an XML file.

The format of the ODL Text format follows:

[TSTZ_ORIGINATING] [MSG_TYPE:MSG_ID] [MODULE_ID;MSG_LEVEL] [MODULE_ID] [ECID] MSG_TEXT

Table 9-4 describes the fields for the ODL Text format.

Table 9-1 ODL Text Message Fields

FieldsDescription

TSTZ_ORIGINATING

The date and time when the message was generated. Time is either displayed in local or Greenwich Mean Time.

MSG_TYPE

The type of message. Possible values are NOTIFICATION, WARNING, TRACE, and DEBUG.

MSG_LEVEL

The message level, represented by an integer value that qualifies the message type. Possible values are from 1 (highest severity) through 32 (lowest severity).

MSG_ID

The ID that uniquely identifies the message within the component. The ID consists of a prefix that represents the component, followed by a dash, then a 5-digit number. For example: WXE-08513.

The Oracle Fusion Middleware Error Messages Reference describes the messages in further detail.

MODULE_ID

The ID of the module that originated the message. If the component is a single module, the component ID is listed for this attribute.

ECID

The Execution Context ID (ECID), which is a global unique identifier of the execution of a particular request in which the originating component participates. You can use the ECID to correlate error messages from different components.

See Also: Section 9.1.1.4 for more information about the Oracle-ECID request header

MSG_TEXT

The text of the error message.


The following shows an event log excerpt with the ODL Text format:

[2008-11-04T05:55:35-05:00] [webcache] [NOTIFICATION:1] [WXE-08513] [logging] [ecid: ] Cache server process ID 11679 is starting up.
[2008-11-04T05:55:35-05:00] [webcache] [NOTIFICATION:1] [WXE-09612] [main] [ecid: ] Oracle Web Cache 11g (11.1.1)
[2008-11-04T05:55:35-05:00] [webcache] [NOTIFICATION:1] [WXE-13002] [config] [ecid: ] Maximum allowed incoming connections are 700
[2008-11-04T05:55:35-05:00] [webcache] [NOTIFICATION:1] [WXE-09446] [stats] [ecid: ] Statistics initialization commencing.
[2008-11-04T05:55:35-05:00] [webcache] [NOTIFICATION:1] [WXE-09441] [stats] [ecid: ] DMS enabled
[2008-11-04T05:55:35-05:00] [webcache] [NOTIFICATION:1] [WXE-09447] [stats] [ecid: ] Statistics initialization complete.
[2008-11-04T05:55:36-05:00] [webcache] [NOTIFICATION:1] [WXE-12209] [cluster] [ecid: ] A 1 node cluster successfully initialized
[2008-11-04T05:55:36-05:00] [webcache] [NOTIFICATION:1] [WXE-09614] [main] [ecid: ] The following Oracle Web Cache internal files are pre-populated to the cache: [[/host:port/_oracle_http_server_webcache_static_.html]]

Table 9-2 describes the fields for the ODL XML format.

Table 9-2 ODL XML Message Fields

FieldsDescription

TSTZ_ORIGINATING

The date and time when the message was generated. Time is either displayed in local or Greenwich Mean Time.

COMPONENT_ID

The ID of the component that originated the message.

MSG_ID

The ID that uniquely identifies the message within the component. The ID consists of a prefix that represents the component, followed by a dash, then a 5-digit number. For example: WXE-08513.

MSG_TYPE

The type of message. Possible values are NOTIFICATION, WARNING, TRACE, and DEBUG.

MSG_LEVEL

The message level, represented by an integer value that qualifies the message type. Possible values are from 1 (highest severity) through 32 (lowest severity).

HOST_ID

The name of the host where the message originated.

HOST_NWADDR

T he network address of the host where the message originated.

MODULE_ID

The ID of the module that originated the message. If the component is a single module, the component ID is listed for this attribute.

ECID

The Execution Context ID (ECID), which is a global unique identifier of the execution of a particular request in which the originating component participates. You can use the ECID to correlate error messages from different components.

See Also: Section 9.1.1.4 for more information about the Oracle-ECID request header

MSG_TEXT

The text of the error message.


The ODL XML Format provides additional fields, such as the following shows an event log excerpt for the ODL XML format:

<MESSAGE>
  <HEADER>
    <TSTZ_ORIGINATING>2008-11-04T06:07:14.0116-05:00</TSTZ_ORIGINATING>
    <COMPONENT_ID>WXE</COMPONENT_ID>
    <MSG_ID>8513</MSG_ID>
    <MSG_TYPE TYPE="NOTIFICATION"></MSG_TYPE>
    <MSG_LEVEL>1</MSG_LEVEL>
    <HOST_ID>host</HOST_ID>
    <HOST_NWADDR>10.10.150.35</HOST_NWADDR>
    <MODULE_ID>logging</MODULE_ID>
  </HEADER>
  <CORRELATION_DATA>
    <EXEC_CONTEXT_ID>
      <UNIQUE_ID>-</UNIQUE_ID>
      <SEQ>0</SEQ>
    </EXEC_CONTEXT_ID>
  </CORRELATION_DATA>
  <PAYLOAD>
    <MSG_TEXT>Cache server process ID 13176 is starting up.
</MSG_TEXT>
  </PAYLOAD>
</MESSAGE>
<MESSAGE>
  <HEADER>
    <TSTZ_ORIGINATING>2008-11-04T06:07:14.0117-05:00</TSTZ_ORIGINATING>
    <COMPONENT_ID>WXE</COMPONENT_ID>
    <MSG_ID>9612</MSG_ID>
    <MSG_TYPE TYPE="NOTIFICATION"></MSG_TYPE>
    <MSG_LEVEL>1</MSG_LEVEL>
    <HOST_ID>host</HOST_ID>
    <HOST_NWADDR>10.10.150.35</HOST_NWADDR>
    <MODULE_ID>main</MODULE_ID>
  </HEADER>
  <CORRELATION_DATA>
    <EXEC_CONTEXT_ID>
      <UNIQUE_ID>-</UNIQUE_ID>
      <SEQ>0</SEQ>
    </EXEC_CONTEXT_ID>
  </CORRELATION_DATA>
  <PAYLOAD>
    <MSG_TEXT>Oracle Web Cache 11g (11.1.1)
</MSG_TEXT>
  </PAYLOAD>
</MESSAGE>
<MESSAGE>
  <HEADER>
    <TSTZ_ORIGINATING>2008-11-04T06:07:14.0118-05:00</TSTZ_ORIGINATING>
    <COMPONENT_ID>WXE</COMPONENT_ID>
    <MSG_ID>13002</MSG_ID>
    <MSG_TYPE TYPE="NOTIFICATION"></MSG_TYPE>
    <MSG_LEVEL>1</MSG_LEVEL>
    <HOST_ID>host</HOST_ID>
    <HOST_NWADDR>10.10.150.35</HOST_NWADDR>
    <MODULE_ID>config</MODULE_ID>
  </HEADER>
  <CORRELATION_DATA>
    <EXEC_CONTEXT_ID>
      <UNIQUE_ID>-</UNIQUE_ID>
      <SEQ>0</SEQ>
    </EXEC_CONTEXT_ID>
  </CORRELATION_DATA>
  <PAYLOAD>
    <MSG_TEXT>Maximum allowed incoming connections are 700
</MSG_TEXT>
  </PAYLOAD>
</MESSAGE>
<MESSAGE>
  <HEADER>
    <TSTZ_ORIGINATING>2008-11-04T06:07:14.0191-05:00</TSTZ_ORIGINATING>
    <COMPONENT_ID>WXE</COMPONENT_ID>
    <MSG_ID>9446</MSG_ID>
    <MSG_TYPE TYPE="NOTIFICATION"></MSG_TYPE>
    <MSG_LEVEL>1</MSG_LEVEL>
    <HOST_ID>host</HOST_ID>
    <HOST_NWADDR>10.10.150.35</HOST_NWADDR>
    <MODULE_ID>stats</MODULE_ID>
  </HEADER>
  <CORRELATION_DATA>
    <EXEC_CONTEXT_ID>
      <UNIQUE_ID>-</UNIQUE_ID>
      <SEQ>0</SEQ>
    </EXEC_CONTEXT_ID>
  </CORRELATION_DATA>
  <PAYLOAD>
    <MSG_TEXT>Statistics initialization commencing.
</MSG_TEXT>
  </PAYLOAD>
</MESSAGE>
<MESSAGE>
  <HEADER>
    <TSTZ_ORIGINATING>2008-11-04T06:07:14.0265-05:00</TSTZ_ORIGINATING>
    <COMPONENT_ID>WXE</COMPONENT_ID>
    <MSG_ID>9438</MSG_ID>
    <MSG_TYPE TYPE="NOTIFICATION"></MSG_TYPE>
    <MSG_LEVEL>1</MSG_LEVEL>
    <HOST_ID>host</HOST_ID>
    <HOST_NWADDR>10.10.150.35</HOST_NWADDR>
    <MODULE_ID>stats</MODULE_ID>
  </HEADER>
  <CORRELATION_DATA>
    <EXEC_CONTEXT_ID>
      <UNIQUE_ID>-</UNIQUE_ID>
      <SEQ>0</SEQ>
    </EXEC_CONTEXT_ID>
  </CORRELATION_DATA>
  <PAYLOAD>
    <MSG_TEXT>The statistics persistent repository is being reset by new configuration
</MSG_TEXT>
  </PAYLOAD>
</MESSAGE>
<MESSAGE>
  <HEADER>
    <TSTZ_ORIGINATING>2008-11-04T06:07:14.1556-05:00</TSTZ_ORIGINATING>
    <COMPONENT_ID>WXE</COMPONENT_ID>
    <MSG_ID>9441</MSG_ID>
    <MSG_TYPE TYPE="NOTIFICATION"></MSG_TYPE>
    <MSG_LEVEL>1</MSG_LEVEL>
    <HOST_ID>host</HOST_ID>
    <HOST_NWADDR>10.10.150.35</HOST_NWADDR>
    <MODULE_ID>stats</MODULE_ID>
  </HEADER>
  <CORRELATION_DATA>
    <EXEC_CONTEXT_ID>
      <UNIQUE_ID>-</UNIQUE_ID>
      <SEQ>0</SEQ>
    </EXEC_CONTEXT_ID>
  </CORRELATION_DATA>
  <PAYLOAD>
    <MSG_TEXT>DMS enabled
</MSG_TEXT>
  </PAYLOAD>
</MESSAGE>
<MESSAGE>
  <HEADER>
    <TSTZ_ORIGINATING>2008-11-04T06:07:14.1559-05:00</TSTZ_ORIGINATING>
    <COMPONENT_ID>WXE</COMPONENT_ID>
    <MSG_ID>9447</MSG_ID>
    <MSG_TYPE TYPE="NOTIFICATION"></MSG_TYPE>
    <MSG_LEVEL>1</MSG_LEVEL>
    <HOST_ID>host</HOST_ID>
    <HOST_NWADDR>10.10.150.35</HOST_NWADDR>
    <MODULE_ID>stats</MODULE_ID>
  </HEADER>
  <CORRELATION_DATA>
    <EXEC_CONTEXT_ID>
      <UNIQUE_ID>-</UNIQUE_ID>
      <SEQ>0</SEQ>
    </EXEC_CONTEXT_ID>
  </CORRELATION_DATA>
  <PAYLOAD>
    <MSG_TEXT>Statistics initialization complete.
</MSG_TEXT>
  </PAYLOAD>
</MESSAGE>
<MESSAGE>
  <HEADER>
    <TSTZ_ORIGINATING>2008-11-04T06:07:14.5912-05:00</TSTZ_ORIGINATING>
    <COMPONENT_ID>WXE</COMPONENT_ID>
    <MSG_ID>12209</MSG_ID>
    <MSG_TYPE TYPE="NOTIFICATION"></MSG_TYPE>
    <MSG_LEVEL>1</MSG_LEVEL>
    <HOST_ID>host</HOST_ID>
    <HOST_NWADDR>10.10.150.35</HOST_NWADDR>
    <MODULE_ID>cluster</MODULE_ID>
  </HEADER>
  <CORRELATION_DATA>
    <EXEC_CONTEXT_ID>
      <UNIQUE_ID>-</UNIQUE_ID>
      <SEQ>0</SEQ>
    </EXEC_CONTEXT_ID>
  </CORRELATION_DATA>
  <PAYLOAD>
    <MSG_TEXT>A 1 node cluster successfully initialized
</MSG_TEXT>
  </PAYLOAD>
</MESSAGE>
<MESSAGE>
  <HEADER>
    <TSTZ_ORIGINATING>2008-11-04T06:07:20.8036-05:00</TSTZ_ORIGINATING>
    <COMPONENT_ID>WXE</COMPONENT_ID>
    <MSG_ID>9614</MSG_ID>
    <MSG_TYPE TYPE="NOTIFICATION"></MSG_TYPE>
    <MSG_LEVEL>1</MSG_LEVEL>
    <HOST_ID>host</HOST_ID>
    <HOST_NWADDR>10.10.150.35</HOST_NWADDR>
    <MODULE_ID>main</MODULE_ID>
  </HEADER>
  <CORRELATION_DATA>
    <EXEC_CONTEXT_ID>
      <UNIQUE_ID>-</UNIQUE_ID>
      <SEQ>0</SEQ>
    </EXEC_CONTEXT_ID>
  </CORRELATION_DATA>
  <PAYLOAD>
    <MSG_TEXT>The following Oracle Web Cache internal files are pre-populated to the cache: [[/host:port/_oracle_http_server_webcache_static_.html]]
</MSG_TEXT>  </PAYLOAD></MESSAGE>

For more information about the ODL format, see:

9.1.1.2 Oracle Web Cache Classic Format

The Oracle Web Cache log format is intended for customers who prefer the traditional log format provided by Oracle Web Cache in previous releases.

The format of the Oracle Web Cache format follows:

[TIMESTAMP] [MSG_TYPE MSG_ID] [ECID] MSG_TEXT

Table 9-3 describes the fields for Oracle Web Cache format.

Table 9-3 Oracle Web Cache Message Fields

FieldsDescription

TIMESTAMP

The date and time when the message was generated. Time is either displayed in local or Greenwich Mean Time.

MSG_TYPE

The type of message. Possible values are NOTIFICATION, WARNING, TRACE, and DEBUG.

MSG_ID

The ID that uniquely identifies the message within the component. The ID consists of a 5-digit number. For example: 08513.

ECID

The Execution Context ID (ECID), which is a global unique identifier of the execution of a particular request in which the originating component participates. You can use the ECID to correlate error messages from different components.

See Also: Section 9.1.1.4 for more information about the Oracle-ECID request header

MSG_TEXT

The text of the error message.


For example:

[04/Nov/2008:06:11:53 -0500] [notification 08513] Cache server process ID 13466is starting up.
[04/Nov/2008:06:11:53 -0500] [notification 09612] [ecid: -] Oracle Web Cache 11g (11.1.1)
[04/Nov/2008:06:11:53 -0500] [notification 13002] [ecid: -] Maximum allowed incoming connections are 700
[04/Nov/2008:06:11:53 -0500] [notification 09446] [ecid: -] Statistics initialization commencing.
[04/Nov/2008:06:11:53 -0500] [notification 09438] [ecid: -] The statistics persistent repository is being reset by new configuration
[04/Nov/2008:06:11:53 -0500] [notification 09441] [ecid: -] DMS enabled
[04/Nov/2008:06:11:53 -0500] [notification 09447] [ecid: -] Statistics initialization complete.
[04/Nov/2008:06:11:54 -0500] [notification 12209] [ecid: -] A 1 node cluster successfully initialized
[04/Nov/2008:06:11:54 -0500] [notification 09614] [ecid: -] The following Oracle Web Cache internal files are pre-populated to the cache: [[/host:port/_oracle_http_server_webcache_static_.html]]

9.1.1.3 Request Details in Message 9720

Oracle Web Cache displays the request detail format in message 09720 when you enable option Include Request Details in the event log messages. This message is logged the first time an event is logged for a request with the following additional request details, including the client IP address, site name of the request and URL of the request.

Table 9-4 describes the fields for the request detail format.

Table 9-4 Request Details

FieldsDescription

[detail]

Request detail event

[client: IP_address]

IP address of the client that made the request

[host: site]

Site name of the request

[url: URL]

URL of the request


For example:

[2008-11-20T23:27:32Z] [webcache] [TRACE:1] [WXE-09720] [io] [ecid: 15431471130,0] [req-info: ] [client: 140.87.8.166] [host: -] [url: /images/image1k.bmp]
[2008-11-20T23:27:31Z] [webcache] [TRACE:1] [WXE-11331] [frontend] [ecid: 15431471130,0] Request matches configured site: www.company.com:80
[2008-11-20T23:27:31Z] [webcache] [TRACE:1] [WXE-11414] [population] [ecid: 15431471130,0] Basic cache key is composed with sitename www.company.com:80, URI /images/image1k.bmp, method GET, post body -.
[2008-11-20T23:27:31Z] [webcache] [TRACE:1] [WXE-11304] [frontend] [ecid: 15431471130,0] Cache miss request.

In addition to the IP address, site name, and URL of the request, the ID and sequence number of the Oracle-ECID request header is logged. The Oracle-ECID request header is used to track requests.

9.1.1.4 About the Oracle-ECID Request-Header Field

The Oracle-ECID request header is used to track requests as they move through the Oracle Fusion Middleware architecture. This information is especially useful for diagnostic purposes. Because Oracle Web Cache is the initial receiver of client requests, it sets the request header before forwarding a cache miss to an origin server. The Oracle-ECID request header takes the following format:

Oracle-ECID: request_id, sequence_number

In the format, request_id is a 64-bit unique integer for the request, and sequence_number is the hop number of the request as it passes through Oracle Fusion Middleware. Oracle Web Cache typically assigns an initial sequence number of 0 to a request. As a request passes from Oracle Web Cache to other Oracle Fusion Middleware components, the request ID remains constant, but the sequence number increments with each hop.

You can configure Oracle Web Cache to log the request ID and sequence number from the Oracle-ECID request header in the event and access logs. To display the Oracle-ECID request header in the event logs, you enable the Include Request Details option, and select the x-ecid field for the access logs. The x-ecid field is provided by default with the Enhanced CLF (ECLF), Enhanced Combined Log Format, and End-User Performance Monitoring Format. Additionally, you can configure Oracle HTTP Server to log the Oracle-ECID request header information, enabling you to correlate events at different Oracle Fusion Middleware stops for the same request.

Oracle Web Cache also includes Oracle-ECID request header information whenever you configure to display diagnostic information in the Server response-header field or the HTML response body.

See Section 8.8 or further information about configuring diagnostic output in the Server response-header field or the HTTP response message that includes Oracle-ECID information

9.1.2 Event Log Examples

This section contains the following event log examples:

9.1.2.1 Example: Event Log with Unsuccessful Startup Entries

The following shows an event log excerpt with unsuccessful startup events. Oracle Web Cache cannot listen on port 7777, because it is in use. These errors can occur if Oracle Web Cache is running and listening on that port or another application is using that port.

[2008-11-04T16:37:24-05:00] [webcache] [NOTIFICATION:1] [WXE-08513] [logging] [ecid: ] Cache server process ID 2427 is starting up. 
[2008-11-04T16:37:24-05:00] [webcache] [NOTIFICATION:1] [WXE-09612] [main]  [ecid: ] Oracle Web Cache 11g (11.1.1) 
[2008-11-04T16:37:24-05:00] [webcache] [NOTIFICATION:1] [WXE-13002] [config] [ecid: ] Maximum allowed incoming connections are 700 
[2008-11-04T16:37:24-05:00] [webcache] [NOTIFICATION:1] [WXE-09446] [stats]  [ecid: ] Statistics initialization commencing. 
[2008-11-04T16:37:24-05:00] [webcache] [NOTIFICATION:1] [WXE-09438] [stats]  [ecid: ] The statistics persistent repository is being reset by new configuration [2008-11-04T16:37:24-05:00] [webcache] [NOTIFICATION:1] [WXE-09441] [stats]  [ecid: ] DMS enabled 
[2008-11-04T16:37:24-05:00] [webcache] [NOTIFICATION:1] [WXE-09447] [stats]  [ecid: ] Statistics initialization complete. 
[2008-11-04T16:37:25-05:00] [webcache] [TRACE:1] [WXE-11366] [frontend] [ecid: ] A client connection to listening port 7777 is dropped. 
[2008-11-04T16:37:25-05:00] [webcache] [TRACE:1] [WXE-11380] [frontend] [ecid: ] Network failure during client listen client listen (details: internal=failure system=2) 
[2008-11-04T16:37:25-05:00] [webcache] [ERROR:1] [WXE-09707] [main] [ecid: ] Failed to start the server. 
[2008-11-04T16:37:25-05:00] [webcache] [ERROR:1] [WXE-09609] [main] [ecid: ] The server process could not initialize. 
[2008-11-04T16:37:25-05:00] [webcache] [NOTIFICATION:1] [WXE-09610] [main]  [ecid: ] The server is exiting. 
[2008-11-04T16:37:25-05:00] [webcache] [NOTIFICATION:1] [WXE-08514] [logging] [ecid: ] Cache server process ID 2427 is shutting down.

9.1.2.2 Example: Event Log with Shutdown Entries

The following shows an event log excerpt with typical shutdown entries:

[2008-11-04T16:19:58-05:00] [webcache] [NOTIFICATION:1] [WXE-09703] [main]  [ecid: ] Stop Issued. The program will shut down after all accepted requests are served, or a timeout occurs. 
[2008-11-04T16:21:29-05:00] [webcache] [NOTIFICATION:1] [WXE-09610] [main]  [ecid: ] The server is exiting.

9.1.2.3 Example: Event Log with Cache Miss and Cache Hit Entries

The following shows an event log excerpt containing events for a cache-miss request:

[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-11331] [frontend] [ecid: 5415484202,0] Request matches configured site: www.company.com:80
[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-11414] [population] [ecid: 5415484202,0] Basic cache key is composed with sitename www.company.com:80, URI /invalidate1/tcal_fct_invalidate_basic_2.html, method GET, post body -.
[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-11304] [frontend] [ecid: 5415484202,0] Cache miss request.
[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-11224] [os] [ecid: 5415484202,0] Site localhost:8888 matches site-to-server mapping www.company.com:80.
[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-11227] [os] [ecid: 5415484202,0] Initial Request is routed to origin server host-server:8080 using load balancing.
[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-11403] [population] [ecid: 5415484202,0]  begin cacheability decision for url: www.company.com:80/invalidate1/tcal_fct_invalidate_basic_2.html
[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-11481] [population] [ecid: 5415484202,0] Request/Response matches caching rule with URL expression "^/invalidate1/.*\.h.*$".
[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-13736] [compression] [ecid: 5415484202,0] Compression is disabled because the browser does not support compression.
[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-11446] [population] [ecid: 5415484202,0] URL which will be cached is: www.company.com:80/invalidate1/tcal_fct_invalidate_basic_2.html
[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-11415] [population] [ecid: 5415484202,0] Final cache key is composed sitename www.company.com:80, URI /invalidate1/tcal_fct_invalidate_basic_2.html, method GET, post body -, multiversion -, compressed no.
[2008-11-04T15:37:02-05:00] [webcache] [TRACE:1] [WXE-11088] [backend] [ecid: 5415484202,0] Following URL is now in cache: www.company.com:80/invalidate1/tcal_fct_invalidate_basic_2.html

The following shows an event log excerpt containing events for a subsequent cache-hit request:

[2008-11-04T15:37:39-05:00] [webcache] [TRACE:1] [WXE-09720] [frontend] [ecid: 417732382502,0] [req-info: ] [client: 127.0.0.1] [host: www.company.com:80] [url: /x-oracle-cache-invalidate] 
[2008-11-04T15:37:39-05:00] [webcache] [TRACE:1] [WXE-11331] [frontend] [ecid: 417732382502,0] Request matches configured site: localhost:8888 [2008-11-04T15:37:39-05:00] [webcache] [TRACE:1] [WXE-11414] [population] [ecid: 417732382502,0] Basic cache key is composed with sitename www.company.com:80, URI /invalidate1/tcal_fct_invalidate_basic_5.html, method GET, post body -. 
[2008-11-04T15:37:39-05:00] [webcache] [NOTIFICATION:1] [WXE-11707] [invalidation] [ecid: 417732382502,0] Object with URL '/invalidate1/tcal_fct_invalidate_basic_5.html' is successfully invalidated. 
[2008-11-04T15:37:39-05:00] [webcache] [NOTIFICATION:1] [WXE-11748] [invalidation] [ecid: 417732382502,0] Invalidation with INFO 'about-ttl' has returned with status 'SUCCESS'; number of objects invalidated: '1'.

9.1.2.4 Example: Event Log with an Invalidation Entry

The following shows an event log excerpt with an event associated with an invalidation request for the removal of object /invalidation1/tcal_fct_invalidate_basic_5.html.

[2008-11-04T15:37:39-05:00] [webcache] [TRACE:1] [WXE-09720] [frontend] [ecid: 417732382502,0] [req-info: ] [client: 10.10.150.35] [host: host:port] [url: /x-oracle-cache-invalidate] 
[2008-11-04T15:37:39-05:00] [webcache] [TRACE:1] [WXE-11331] [frontend] [ecid: 417732382502,0] Request matches configured site: www.company.com:80 
[2008-11-04T15:37:39-05:00] [webcache] [TRACE:1] [WXE-11414] [population] [ecid: 417732382502,0] Basic cache key is composed with sitename localhost:8888, URI /invalidate1/tcal_fct_invalidate_basic_5.html, method GET, post body -. 
[2008-11-04T15:37:39-05:00] [webcache] [NOTIFICATION:1] [WXE-11707] [invalidation] [ecid: 417732382502,0] Object with URL '/invalidate1/tcal_fct_invalidate_basic_5.html' is successfully invalidated. 
[2008-11-04T15:37:39-05:00] [webcache] [NOTIFICATION:1] [WXE-11748] [invalidation] [ecid: 417732382502,0] Invalidation with INFO 'about-ttl' has returned with status 'SUCCESS'; number of objects invalidated: '1'.

9.1.2.5 Example: Analyzing ESI Events

The following provides an example of the messages in the event log for an ESI fragment for a cache miss. The messages in the event log report information about:

  • How Oracle Web Cache processes ESI in the template

  • How ESI processing loads an ESI fragment

  • After the fragment is loaded, how the caching decision for an ESI fragment is formed. It includes information regarding the reason the fragment is cached or not cached.

In the following examples, TRACE:1 messages are for the verbosity=TRACE level and TRACE:32 messages are for the verbosity=DEBUG level. Setting verbosity to DEBUG includes TRACE, NOTIFICATION, WARNING, and ERROR level messages. TRACE includes NOTIFICATION, WARNING, and ERROR, but not DEBUG.

You do not see the following log messages shown in the following example unless you have the set the event_log verbosity level to DEBUG:

[2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11952] [esi] [ecid: 211577120190,0] Start processing ESI document www.company.com:80/cgi-bin/esi-headers.sh?/esi/esi-headers.html&localhost:8888, nesting level 1 [2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11331] [frontend] [ecid: 211577120190,0] Request matches configured site: www.company.com:80 
[2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11953] [esi] [ecid: 211577120190,0] In ESI template www.company.com:80/cgi-bin/esi-headers.sh?/esi/esi-headers.html&localhost:8888, the fragment's site name and URL has been discovered as www.company.com:80 and /esi/include0.html [2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11304] [frontend] [ecid: 211577120190,0] Cache miss request. 
[2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11224] [os] [ecid: 211577120190,0] Site www.company.com:80 matches site-to-server mapping www.company.com:80. 
[2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11227] [os] [ecid: 211577120190,0] Initial Request is routed to origin server stadk61.us.oracle.com:8080 using load balancing. 
[2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11403] [population] [ecid: 211577120190,0]  [[ begin cacheability decision for  url: www.company.com:80/esi/include0.html ]] 
[2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11481] [population] [ecid: 211577120190,0] Request/Response matches caching rule with URL expression "/*". [2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11446] [population] [ecid: 211577120190,0]  [[ URL which will be cached is: www.company.com:80/esi/include0.html ]] 
[2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11415] [population] [ecid: 211577120190,0] Final cache key is composed sitename www.company.com:80, URI /esi/include0.html, method GET, post body -, multiversion -, compressed no. 
[2008-11-04T16:29:14-05:00] [webcache] [TRACE:1] [WXE-11088] [backend] [ecid: 211577120190,0]  [[ Following URL is now in cache: www.company.com:80/esi/include0.html ]]

9.2 Introduction to Access Logs

Oracle Web Cache records information about the received HTTP and HTTPS requests in access logs. Each Web site Web site defined in Oracle Web Cache can have its own access log. By default, the access log has a file name of access_log and is stored in the following directories:

(UNIX) ORACLE_INSTANCE/diagnostics/logs/WebCache/<webcache_name>
(Windows) ORACLE_INSTANCE\diagnostics\logs\WebCache\<webcache_name>

This section includes the following topics:

9.2.1 Access Log Formats

You can configure the content of the access log files by defining the fields to appear for each HTTP request event. These fields are based on the standard Extended LogFile Format (XLF). By default, Oracle Web Cache provides support for the following access log formats:

9.2.1.1 Common Log Format (CLF)

This format is the default format applied to access logs. This format is appropriate for most configurations. The CLF format provides support for the following fields:

  • c-ip

  • x-log-id

  • x-auth-id

  • x-clf-date

  • x-req-line

  • sc-status

  • bytes

9.2.1.2 Enhanced CLF (ECLF)

This format uses many of the CLF fields and includes the x-ecid field for tracking the request ID and sequence number specified in Oracle-ECID request header:

  • c-ip

  • x-log-id

  • x-auth-id

  • x-clf-date

  • x-req-line

  • sc-status

  • bytes

  • x-ecid

9.2.1.3 Combined Log Format

This format provides support for the CLF fields with the addition of the cs(Referer) and cs(User-Agent) fields:

  • c-ip

  • x-log-id

  • x-auth-id

  • x-clf-date

  • x-req-line

  • sc-status

  • bytes

  • cs(Referer)

  • cs(User-Agent)

Select this format when you must determine what kind of browser is sending the request, and where the browser was visiting before the request was forwarded to Oracle Web Cache.

9.2.1.4 Enhanced Combined Log Format

This format uses many of the Combined Log Format fields and includes the x-ecid field for tracking the ID of the specified in Oracle-ECID request header:

  • c-ip

  • x-log-id

  • x-auth-id

  • x-clf-date

  • x-req-line

  • sc-status

  • bytes

  • cs(Referer)

  • cs(User-Agent)

  • x-ecid

9.2.1.5 End-User Performance Monitoring Format

This format provides support for the following fields intended for end-user performance monitoring of 10g features:

  • x-req-type

  • x-date-start

  • x-time-start

  • c-ip

  • s-ip

  • x-auth-id

  • cs(Host)

  • cs-method

  • cs-uri

  • x-protocol

  • sc-status

  • bytes

  • cs-bytes

  • x-cache

  • time-taken

  • r-time-taken

  • x-time-delay

  • x-os-timeout

  • x-ecid

  • x-cookie(ORACLE_SMP_CHRONOS_ST)

  • x-cookie(ORACLE_SMP_CHRONOS_LT)

  • x-cookie(ORACLE_SMP_CHRONOS_GL)

  • x-glcookie-set

  • cs(Referer)

  • cs(User-Agent)

  • x-esi-info

  • x-conn-abrt

  • sc(Content-Type)

9.2.2 Access Log Fields

If the default formats are not suitable for your environment, you can create custom log formats by specifying the fields that you require. Table 9-5 describes the supported fields. Fields prefixed with x or r are proprietary to Oracle Web Cache.

Table 9-5 Access Log Fields

FieldDescription

bytes

Content length of the request

c-ip

IP address of the client

cached

Integer that specifies cache status. Cache status is reported as the following:

  • 0 specifies a cache miss. Equivalent to M, U, G, and N output of x-cache field.

  • 1 specifies a cache hit of a stale object. Equivalent to S output of x-cache field.

  • 2 specifies a cache hit. Equivalent to H output of x-cache field.

cs(header_name)

HTTP request header sent from the client

See Also: "cs(header_name) and sc(header_name) Access Log Fields"

cs-bytes

Bytes received from the client

cs-method

Client-to-Oracle Web Cache HTTP request method

cs-uri

Client-to-Oracle Web Cache URI

cs-uri-query

Client-to-Oracle Web Cache query portion of URI, omitting the stem

cs-uri_stem

Client-to-Oracle Web Cache stem portion of URI, omitting the query

date

Date the transaction completed, in the following format:

dd/Mon/yyyy

r-ip

IP address and port number of origin server. For a cache cluster, this field displays the IP and port number of a peer cache in the cache cluster. The information is displayed in the following format:

IP_address:port

r-time-taken

Time, in seconds (including microseconds), that Oracle Web Cache spent communicating with the origin server or peer cache. The time is the duration between the following two points of time:

  • The time immediately before Oracle Web Cache sent the first byte of the request to the origin server or peer cache.

  • The time immediately after receiving the last byte of the response from the origin server or peer cache.

This field is particularly helpful in providing time information for end-user performance monitoring.

s-ip

IP address of Oracle Web Cache computer

sc(header_name)

HTTP response header sent from Oracle Web Cache to the client

See Also: "cs(header_name) and sc(header_name) Access Log Fields"

sc-status

Oracle Web Cache-to-client HTTP status code:

  • 1xx range messages are informational

  • 2xx range messages indicate success

  • 3xx range messages indicate redirection, that is, further action must be taken to complete the request

  • 4xx range messages indicate a client error

  • 5xx range messages indicate a Oracle Web Cache error

See Also: http://www.ietf.org/rfc/rfc2616.txt for further information about HTTP status codes

time

Time at which the response from Oracle Web Cache completed. The time is displayed in the following format:

hh:mm:ss

time-taken

Amount of time taken, in seconds (including microseconds), for the transaction to complete

x-auth-id

User name of a basic HTTP authentication request

x-cache

Cache status. Cache status is reported as the following:

  • H specifies a cache hit

  • S specifies a cache hit of a stale object

  • U specifies a cache update of a stale object

  • G specifies a cache update of an object that was marked for removal but still physically resides in the cache

  • M specifies a cacheable cache miss

  • N specifies a non-cacheable cache miss

x-cache-detail

Diagnostic information, in the following format:

{ESI_processing_type}{cache_request_type} [;max-age=expiration_time[+removal_time];age=object_age]

ESI_processing_type is:

  • T specifies that the object is an ESI template

  • F specifies that the object is an ESI fragment

  • Empty specifies that the response does not require ESI processing

cache_request_type is:

  • H specifies a cache hit

  • S specifies a cache hit of a stale object

  • U specifies a cache update of a stale object

  • G specifies a cache update of an object that was marked for removal but still physically resides in the cache

  • M specifies a cacheable cache miss

  • N specifies a non-cacheable cache miss

max_age specifies the time, in seconds, to expire the object, and optionally, the time, in seconds, to remove the object from the cache after the expiration time. max_age does not appear if the cache_request_type is N.

age shows how long, in seconds, the object has been in the cache. age does not appear if the object is non-cacheable.

Example: H;max-age=60+30;age=50

  • H means that this request resulted in cache hit

  • max-age=60+30 means that the object is to expire in 60 seconds from population and to be removed from the cache 30 seconds from the expiration. This provides a total of 90 seconds from population.

  • age=50 means that 50 seconds have passed since population of the cache, meaning there is 10 seconds to expiration and 40 seconds to removal

x-cache-key

Cache key value, in the following format:

"cache_key"

x-clf-date

Date that the response from Oracle Web Cache completed, in the following format:

dd/Mon/yyyy:hh:mm:ss [+GMT]

x-cluster

Single character that specifies the status of a cache cluster. The character is reported as the following:

  • T specifies a request to a cache cluster member

  • F specifies a request from a cache cluster member

  • O specifies a request for owned content

  • D specifies a request for on-demand content

x-cookie(cookie_name)

Cookie value from client browser request.

x-conn-abrt

Single character that specifies the whether a connection was terminated before a response was completed. This field is intended for end-user performance monitoring.

  • C specifies that the connection was terminated by the client before Oracle Web Cache could complete a response.

  • O specifies that the connection was terminated by the origin server before it could complete a response to Oracle Web Cache.

  • N specifies the response was completed without the connection being terminated.

x-date-start

Date before Oracle Web Cache received the first byte of the request, in the following format:

yyyy-mm-dd

x-date-end

Date when Oracle Web Cache sent the last byte of the response, in the following format:

yyyy-mm-dd

x-ecid

ID of the specified in Oracle-ECID request header, in the following format:

"request_ID, sequence_number"

See Also: Section 9.1.1.4 for further information about the Oracle-ECID request header

x-esi-info

ESI fragment log message from the log element of <esi:environment> or <esi:include> tags. It uses the following format:

"ESI_log_message"

The log message only displays for requested ESI fragments in the access_log_file.fragment file. When a request ESI fragment is not configured with the log element, this field displays as a hyphen (-)

x-glcookie-set

Boolean character that specifies whether Oracle Web Cache created the ORACLE_SMP_CHRONOS_GL cookie and sent as a response to the client browser a Set-Cookie:ORACLE_SMP_CHRONOS_GL response header field. This field is intended for end-user performance monitoring to track transactions.

  • Y specifies that Oracle Web Cache set the ORACLE_SMP_CHRONOS_GL cookie. Y also marks the beginning of a transaction for the client. All subsequent traffic from the browser send a Cookie request-header field set with the ORACLE_SMP_CHRONOS_GL cookie received in the Oracle Web Cache response.

  • N specifies that Oracle Web Cache did not create the cookie. This result can occur because the cookie is already set.

x-log-id

Login user name of the client. Oracle Web Cache cannot obtain the value for this field. Therefore, Oracle Web Cache displays a hyphen (-) in the output when this field is set.

x-os-name

Origin server or cache cluster member that Oracle Web Cache is forwarding the request, in the following format:

host:port

x-os-timeout

Single character that specifies if the origin server timed out on a request. The character is reported as the following:

  • 0 specifies that the origin server did not timeout

  • 1 specifies that the origin server did timeout. An output of 1 can indicate a problem with the origin server itself.

x-protocol

Protocol and version from client request, in the following format:

protocol/version

x-req-line

Request line, in the following format:

"HTTP_request_method URI protocol/version"

Example: "GET /cache.htm HTTP/1.1"

x-req-type

Request type. Request type is reported as the following:

  • B specifies that the request is from the browser

  • C specifies that the request is from another cache cluster member

  • H specifies that the request is from another cache cluster or an Oracle Web Cache that is not a member of the current cache cluster

  • F specifies that the request is for an ESI fragment

x-time-delay

Time, in seconds (including microseconds), that Oracle Web Cache spent communicating with the origin server or peer cache. The time is the duration between the following two points of time:

  • The time immediately before Oracle Web Cache received the first byte of the request

  • The time immediately before Oracle Web Cache sent the first byte of the request to the origin server or peer cache.

This field is particularly helpful in providing time information for End-User Performance Monitoring.

x-time-end

Time that Oracle Web Cache sent the last byte of the response, in the following format:

hh:mm:ss:ssssss

x-time-handshake

The difference between the times the client initiates a new connection and the time at which Oracle Web Cache receives the first byte of the HTTP request.

Note: Select this field only if instructed by Oracle Support Services.

x-time-reqrecvlatency

The difference between the times Oracle Web Cache receives the first and last byte of the HTTP request. This field indicates the time in reading the browser requests.

Note: Select this field only if instructed by Oracle Support Services.

x-time-reqsendlatency

The difference between the times Oracle Web Cache sends the first and last byte of the HTTP request to the origin server. This field indicates the time taken in sending the request to the origin server.

Note: Select this field only if instructed by Oracle Support Services.

x-time-resprecvlatency

The difference between the times Oracle Web Cache receives the first and last byte of the HTTP response from the origin server. This field indicates the time taken in receiving the response from the origin server.

Note: Select this field only if instructed by Oracle Support Services.

x-time-respsendlatency

The difference between the times Oracle Web Cache sends the first and last byte of the HTTP response to the browser. This field indicates the time taken in sending the response to the client.

Note: Select this field only if instructed by Oracle Support Services.

x-time-reqblocked

The difference between when a request was blocked and unblocked due to a cache update. If a request has been sent to the origin server by Oracle Web Cache to update an existing object, Oracle Web Cache blocks all subsequent requests.

Note: Select this field only if instructed by Oracle Support.

x-time-reqqueued

The difference between when a request is queued and dequeued for the origin server. This field indicates the time a request spends in Oracle Web Cache back-end queue for an origin server (due to the maximum origin server capacity being reached) before the request is sent to the origin server for processing.

Note: Select this field only if instructed by Oracle Support.

x-time-start

Time before Oracle Web Cache received the first byte of the request, in the following format:

hh:mm:ss:ssssss


9.2.2.1 cs(header_name) and sc(header_name) Access Log Fields

Table 9-6 lists examples of HTTP/1.1 headers that can be used for the cs(header_name) and sc(header_name) fields. This table lists only some possible headers. It is not an exhaustive list.

Table 9-6 Examples of HTTP/1.1 Header Fields

cs(header_name) Fieldsc(header_name) Field

Accept

Cache-Control

Authorization

Content-Encoding

Connection

Content-Language

Date

Content-Length

Host

Content-Type

Referer

Date

Cache-Control

ETag

Content-Encoding

Expires

Content-Language

Last-Modified

Content-Length

Pragma

Content-Type

Server

If-None-Match

Transfer-Encoding

If-Modified-Since

Via

Last-Modified


Pragma


Range


TE


User-Agent


Via



Table 9-7 lists examples of cookie-related headers that can be used for the cs(header_name) and sc(header_name) fields.

Table 9-7 Supported Cookie-Related Header Fields

cs(header_name) Fieldsc(header_name) Field

Cookie

Set-Cookie


Table 9-8 lists examples of Oracle Web Cache headers that can be used for the cs(header_name) and sc(header_name) fields.

Table 9-8 Supported Oracle Web Cache Header Fields

cs(header_name) Fieldsc(header_name) Field

Surrogate-Capability

Surrogate-Control


9.2.3 Access Log Examples

The following code shows an excerpt of an access log file:

10.10.150.35 - - [25/Jul/2005:10:27:42 -0500] "GET /~user/personal.htm HTTP/1.1" 200 2438 
10.10.150.35 - - [25/Jul/2005:10:27:54 -0500] "GET /~user/personal.htm?UserName=Bob HTTP/1.1" 200 2438 
10.10.150.35 - - [25/Jul/2005:10:47:30 -0500] "GET /~user/count.sh HTTP/1.1" 403 289 
10.10.150.35 - - [25/Jul/2005:10:47:34 -0500] "GET /~user/sbin/count.sh HTTP/1.1" 200 321 

In the first line of the output, the fields have the following meaning:

  • 10.10.150.35 is the browser's IP address (c-ip)

  • [25/Jul/2005:10:27:42 -0500] is the date ([x-clf-date])

  • "GET /~user/personal.htm HTTP/1.1" is the request line ("x-req-line")

  • 200 is the HTTP status code (sc-status)

  • 2438 is the size of the object sent (bytes)

In addition, this section contains the following access log examples:

Except where noted otherwise, the access log examples use the CLF format:

c-ip x-log-id x-auth-id x-clf-date x-req-line sc-status bytes

9.2.3.1 Example: Access Log with Reload Entries

The following shows an access log excerpt in which there are two Web browser reloads, followed by two shift reloads, and two more reloads:

10.10.150.35 - - [25/Jul/2005:11:04:24 -0500] "GET /cache.htm HTTP/1.1" 200 250 
10.10.150.35 - - [25/Jul/2005:11:04:26 -0500] "GET /cache.htm HTTP/1.1" 200 250 
10.10.150.35 - - [25/Jul/2005:11:29:24 -0500] "GET /cache.htm HTTP/1.1" 304 0 
10.10.150.35 - - [25/Jul/2005:11:29:25 -0500] "GET /cache.htm HTTP/1.1" 304 0 
10.10.150.35 - - [25/Jul/2005:11:29:30 -0500] "GET /cache.htm HTTP/1.1" 200 250 
10.10.150.35 - - [25/Jul/2005:11:29:35 -0500] "GET /cache.htm HTTP/1.1" 200 250

The third and forth entries return an HTTP status code of 304, indicating that object has not been modified and does not need to be returned again.

9.2.3.2 Example: Access Log with Status Code 404 Entry

The following shows an access log excerpt in which Oracle Web Cache cannot find any objects matching the requested URL /ows-img/chalk.jpg. This error is indicated by HTTP status code 404.

10.10.150.35 - - [25/Jul/2005:10:49:44 -0500] "GET /pls/coe/find_via_post HTTP/1.1" 200 1119 
10.10.150.35 - - [25/Jul/2005:10:49:44 -0500] "GET /ows-img/chalk.jpg HTTP/1.1" 404 284 

9.2.3.3 Example: Access Log in Combined Format

The following shows an access log excerpt in which the combined format is specified:

c-ip x-log-id x-auth-id x-clf-date x-req-line sc-status bytes cs(Referer) cs(User-Agent)

10.10.150.35 - - [25/Jul/2005:20:09:47 +0000] "GET /manual/sections.html HTTP/1.1" 200 -1 "http://www.company.com:80/manual/mod/directive-dict.html#Syntax" "Mozilla/4.78 [ja] (Win98; U)"
10.10.150.35 - - [25/Jul/2005:20:09:50 +0000] "GET /manual/mod/core.html HTTP/1.1" 200 -1 "http://www.company.com:80/manual/sections.html" "Mozilla/4.78 [ja] (Win98; U)"
10.10.150.35 - - [25/Jul/2005:20:10:06 +0000] "GET / HTTP/1.1" 200 -1 - "Mozilla/4.78 [ja] (Win98; U)"
10.10.150.35 - - [25/Jul/2005:20:10:14 +0000] "GET /manual/LICENSE HTTP/1.1" 200 -1 "http://www.company.com:80/manual/index.html" "Mozilla/4.78 [ja] (Win98; U)"

9.2.3.4 Example: Access Log with Site Information

The following shows an access log excerpt in which the following fields are specified:

c-ip x-auth-id x-clf-date cs(Host) x-req-line sc-status bytes

cs(Host) displays the output of Host request-header field, which specifies the site information. In this example, requests are sent to Oracle Web Cache for site www.company.com:80.

10.10.150.35 - [25/Jul/2005:20:05:51 +0000] "www.company.com:80" "GET / HTTP/1.1" 200 -1
10.10.150.35 - [25/Jul/2005:20:05:56 +0000] "www.company.com:80" "GET /manual/index.html HTTP/1.1" 200 -1
10.10.150.35 - [25/Jul/2005:20:05:59 +0000] "www.company.com:80" "GET /manual/upgrading_to_1_3.html HTTP/1.1" 200 -1
10.10.150.35 - [25/Jul/2005:20:06:02 +0000] "www.company2.com:80" "GET /manual/mod/mod_dir.html HTTP/1.1" 200 -1
10.10.150.35 - [25/Jul/2005:20:06:05 +0000] "www.company2.com:80" "GET /manual/mod/directive-dict.html HTTP/1.1" 200 -1

9.2.3.5 Example: Access Log with ESI Diagnostic Information

The following shows an access log excerpt in which the following fields are specified:

c-ip x-clf-date x-req-line sc-status bytes x-cache-detail

x-cache-detail displays diagnostic information. In the following example:

  • T means that this request is for an ESI template

  • H means that this request resulted in cache hit

  • max-age=10+15 means that the object is to expire in 10 seconds from population and to be removed from the cache 15 seconds from the expiration. This provides a total of 25 seconds from population.

  • age=0 means that 0 seconds have passed since population of the cache, meaning there is 10 seconds to expiration and 15 seconds to removal

[25/Jul/2005:02:35:37 +0000] "GET /cgi-bin/esi-headers.sh?err1.htm HTTP/1.0" 200 42 TM;max-age=10+15;age=0

9.2.3.6 Example: Access Log with ESI Log Information

The following shows an access log excerpt in which the following fields are specified:

c-ip x-clf-date x-req-line sc-status bytes x-esi-info

x-esi-info displays log information from the log element of <esi:environment> or <esi:include> tags.

[25/Jul/2005:03:03:35 +0000] "GET /b.html HTTP/1.0" 200 4 "This is a sample fragment."

9.3 Configuring Event Logs

To configure event log settings:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control. See Section 2.6.2.

  2. From the Web Cache menu, select Administration and then Event Logs.

    The Event Log Configuration page displays.

  3. Specify the following settings for each cache in the Cache-Specific Settings table:

    1. In the Directory field, enter the directory in which to write event logs.

      By default, the event log is stored in the following directories:

      (UNIX) ORACLE_INSTANCE/diagnostics/logs/WebCache/<webcache_name>
      (Windows) ORACLE_INSTANCE\diagnostics\logs\WebCache\<webcache_name>
      
    2. Click Enable Buffering? to enable buffered logging; deselect the check box to disable buffered logging.

      With buffered logging, Oracle Web Cache stores log messages in memory. Oracle Web Cache writes them out in bulk to the event log when the buffer size or the flush interval is reached. Buffered logging increases performance by reducing the number of disk I/O operations.

      If the Oracle Web Cache server shuts down unexpectedly, buffered log messages may be lost.

      Oracle recommends disabling buffering to see the event log results immediately.

    3. If buffering is enabled, in the Flush Interval field, enter the interval, in seconds, when Oracle Web Cache writes contents of the buffer to the event log file.

      The default is 10 seconds. When the interval is reached, Oracle Web Cache writes buffered information to the event log file. Even if the buffer is not full, Oracle Web Cache updates the event log. Oracle recommends not changing the default, unless you want to lower the interval to see results more frequently.

      A value of 0 specifies that Oracle Web Cache will only flush the buffered event log when the specified buffer size has been exceeded.

    4. If buffering is enabled, in the Buffer Size field, enter the size of the buffer, expressed in characters.

      The default is 2048 characters. You can specify a maximum value of 32,768 characters.

    5. From the Verbosity list, select the needed level of detail for the event log. The levels are described in Table 9-9.

      Table 9-9 Verbosity Levels

      LevelDescription

      Warning

      Provides abnormal-operation events.

      Notification

      Provides normal-operation events, such as startup and shutdown. This is the default.

      Trace

      Provides events for debugging configuration.

      • Site resolution

      • Site-to-server mappings route to the correct origin servers

      • Compression

      • Session binding

      • Caching rules

      • ESI processing

      Debug

      Provides detailed events for troubleshooting. This level is intended for Oracle Support Services.


  4. Set the global event log settings in the Global Event Log Configuration section:

    1. In the File Name field, enter a name for the event log file.

      The default file name is event_log.

    2. From the File Format list, select the log format.

      See Section 9.1.1 for further information about the formats.

    3. From the Time Style list, select either Local or GMT (Greenwich Mean Time) to modify the format of the time stamp style associated with entries in the event log file.


      Note:

      Oracle recommends using GMT whenever possible. Local can be CPU-intensive, because of the conversion process from GMT to Local time. This conversion process is supplied by the operating system. As such, Oracle Web Cache has no mechanism to improve the performance of the conversion process.

    4. Click Request-Based Logging to enable request-based logging.

      With request-based logging, Oracle Web Cache collects all event log messages associated with each request in memory. If the most severe message in the request is at or above the selected verbosity level, Oracle Web Cache writes all the messages related to the request to the event log at once. Oracle Web Cache groups the messages for the request together in the log file for easier diagnosis. For example, if verbosity is set to Notification, and Oracle Web Cache encounters an error at the Trace or Debug level, Oracle Web Cache writes all of the event log messages for the request to the event log.

      Select Disabled to view results as they happen, especially when the verbosity is set to a level higher than Notification.

    5. In Include Request Details, select Yes to enable Oracle Web Cache to write the information from the Oracle-ECID request header, or select No to not write request information to the event log. See Section 9.1.1.2 for further information about how request details are logged.

      Select No if either of the following conditions apply:

      • You are concerned about the performance impact of event log entries for request details.

      • Oracle Web Cache is running in a standalone environment without Oracle HTTP Server.

  5. Specify a rollover policy:

    1. In the Rollover By Time section, click Edit.

      The Edit Rollover Policy dialog displays.

      You can use the rollover options in combination. For example, you can use both Rollover by Time and Rollover by Size or both Retention by Size and Retention by Time. Oracle Web Cache performs rollover based on whichever is reached first.

    2. From the Rollover by Time list, select Never, Hourly, Daily, or Weekly to specify how often you want Oracle Web Cache to save current log information to event_log_file.yyyymmddhhmm and write future log information to a new log file with the configured log file name.

      If you have a high-volume site, select Daily or Hourly.

    3. In the Scheduled Time field, for Hourly, Daily, and Weekly, enter a new time in the left-hand side fields and menus and add it to the schedule by clicking Add. Table 9-10 describes specific configuration instructions for Hourly, Daily, and Weekly.

      Table 9-10 Configuring Rollover By Time

      PolicyTo configure:

      Hourly

      1. Enter a value in the field to reflect the minutes after the hour. The default 0 means at the start of the hour.

      2. Click Add.

      3. From the Time Style list, select either Local or GMT (Greenwich Mean Time).

      Daily

      1. Enter a value in the hours and minutes fields. The default 0 means at the start of the day.

      2. Click Add.

      3. From the Time Style list, select either Local or GMT.

      Weekly

      1. Add a time by selecting a day of the week, and entering values in the hours and minutes fields. The default 0 means at the start of the week.

      2. Click Add.

      3. From the Time Style list, select either Local or GMT (Greenwich Mean Time).


      To remove a time from the schedule list, select the time, and then click Remove. The value moves to the left list, where you can modify it.

      See Section 9.8 for instructions on immediately rolling over log files.

    4. In the Rollover by Size field, enter the maximum size of the log file size at which rollover occurs. Specify 0 for unlimited size.

    5. In the Retention by Time field, specify how long to keep log files before purging the oldest ones.

      In the Every field, enter the quantity and from the list of Hours, Days, Weeks, Months, Years, select the duration. A quantity of 0 means unlimited time, which means Oracle Web Cache does not retain files based on time.

    6. In the Retention by Size field, enter the total size of all log files before purging oldest ones. Specify 0 for unlimited size.

      This value must be larger than the value you specify for the Rollover Size field.

      If neither Retention by Time or Retention by Size is set, then log files can grow without limits. The log files could end up consuming all available space on the disk where this file is located.

    7. Click OK.

  6. Click Apply and restart Oracle Web Cache. See Section 2.13.

9.4 Configuring Access Logs

To configure access log settings:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control. See Section 2.6.2.

  2. From the Web Cache menu, select Administration and then Access Logs.

    The Access Log Configuration page displays.

  3. Specify the following settings for each cache in the Cache-Specific Settings table:

    1. In the Directory field, enter the directory in which to write access logs.

      By default, the event log is stored in the following directories:

      (UNIX) ORACLE_INSTANCE/diagnostics/logs/WebCache/<webcache_name>
      (Windows) ORACLE_INSTANCE\diagnostics\logs\WebCache\<webcache_name>
      
    2. Click Enable Logging? to enable logging; deselect to disable logging.

    3. Click Enable Buffering? to enable buffered logging; deselect the check box to disable buffered logging.

      With buffered logging, Oracle Web Cache stores log messages in memory. Oracle Web Cache writes them out in bulk to the access log when the buffer size or the flush interval is reached. The buffer size is set to 2048 bytes. Buffered logging increases performance by reducing the number of disk I/O operations.

      If the Oracle Web Cache server shuts down unexpectedly, buffered log messages may be lost.

      Oracle recommends disabling buffering to view access log results immediately.

    4. If buffering is enabled, in the Flush Interval field, enter the interval, in seconds, when Oracle Web Cache writes contents of the buffer to the access log file.

      The default is 10 seconds. When the interval is reached, Oracle Web Cache writes buffered information to the access log file. Even if the buffer is not full, Oracle Web Cache updates the access log. Oracle recommends not changing the default, unless you want to lower the interval to see results more frequently.

      A value of 0 specifies that Oracle Web Cache will only flush the buffered access log when the specified buffer size has been exceeded.

  4. Specify the following settings for each site in the Site-Specific Settings table:

    1. If you want to apply the settings from the Default Settings row to this site, click Use Default for all Sites Settings. Deselect this checkbox to provide site-specific overrides in the other fields.

    2. In the File Name field, enter a name for the access log file.

      The default file name is access_log.

    3. Click Enable Logging to enable logging for the site; deselect to disable logging for the site.

      Site-specific logging only takes effect if logging is enabled for the cache. If you enable this option, ensure that it is also selected for the cache in Step 3b.

    4. Select Log ESI Fragment Requests? to log the ESI fragment log messages from the log element of <esi:environment> or <esi:include> in the access_log_file.fragment file.

      If the x-esi-info field is selected, select to log the events to the access_log_file.fragment file. The x-esi-info field is automatically selected if the Format Style is End-User Performance Monitoring Format. If the x-esi-info field is not selected, select Don't Log.

    5. From the Format Style list, select an access log format.

      See Section 9.2.1 for a description of the default formats and Section 9.5 to create a customized style for your environment.

    6. From the Rollover Policy list, select a rollover policy to specify how often you want to change the frequency at which Oracle Web Cache saves current log information to access_log_file.yyyymmddhhmm and writes future log information to a new log file with the configured log file name.

      For high-volume sites, select a policy with a high frequency.

      See Section 9.6 to modify an existing policy or create a new rollover policy.

  5. Click Apply and restart Oracle Web Cache. See Section 2.13.

9.5 Creating a Customized Access Log Format

If the default formats described in Section 9.2.1 are not suitable for your environment, create a new log format:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control. See Section 2.6.2.

  2. From the Web Cache menu, select Administration and then Access Logs.

    The Access Log Configuration page displays.

  3. Click the Log Formats tab, and click Create.

    The Create Log Format dialog box displays.

  4. In the Format Name field, enter a unique name for the format, keeping the following restrictions in mind:

    • The format name cannot contain any spaces or special characters other than underscore (_).

    • The name must be unique among other format names, rollover policy names, and session names.

  5. From the Separator list, select the separator to use for separating access log fields.

  6. In Print XLF Directive field, select Yes to include XLF directive information at the top of the access log or No to not include directive information in the access log.

    Directive information typically consists of version, date, and field information. For example:

    #Version: 1.0
    #Date: 12-Jul-2008 00:00:00
    #Fields: c-ip x-auth-id x-clf-date cs(Host x-req-line sc-status bytes
    

    See http://www.w3.org/TR/WD-logfile.html for further information about XLF directives.

  7. In the XLF Fields section, select an access log field name from the Field Name list.

    See Table 9-5 for a listing of the supported access logs fields

  8. If you select cs(header_name or sc cs(header_name), sc(header_name), or x-cookie(cookie_name), then enter the header or cookie name in the Header/Cookie name field.

    See Table 9-6, Table 9-7, and Table 9-8 for a description of the headers allowed for cs(header_name) and sc(header_name)

  9. Click Add.

  10. Perform Steps 7 and 9 for each format you want in the access log, and then use the Move Up and Move Down buttons to order the fields. The order in which fields are entered determines the order in which the fields are logged.

  11. Click OK to apply changes and return to the Access Log Configuration page.

  12. Click Apply in the Access Log Configuration page to apply this change.

9.6 Creating a Customized Access Log Rollover Policy

To modify an existing rollover policy or create a new rollover policy:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control. See Section 2.6.2.

  2. From the Web Cache menu, select Administration and then Access Logs.

    The Access Log Configuration page displays.

  3. Click the Rollover Policies tab, and click Create.

    The Create Rollover Policy dialog box displays.

    You can use the rollover options in combination. For example, you can use both Rollover by Time and Rollover by Size or both Retention by Size and Retention by Time. Oracle Web Cache performs rollover based on whichever is reached first.

  4. In the Policy Name field, enter a unique name for the rollover policy, keeping the following restrictions in mind:

    • The policy name cannot contain any spaces or special characters other than underscore (_).

    • The name must be unique among other policy names, log format style names, and session names.

  5. In the Rollover by Time section, select Never, Hourly, Daily, Weekly to specify how often you want Oracle Web Cache to save current log information to access_log_file.yyyymmddhhmm and write future log information to a new log file with the configured log file name.

    If you have a high-volume site, select Daily or Hourly.

  6. In the Rollover by Time section, select Never, Hourly, Daily, Weekly to specify how often you want Oracle Web Cache to save current log information to access_log_file.yyyymmddhhmm and write future log information to a new log file with the configured log file name.

    If you have a high-volume site, select Daily or Hourly.

    For Hourly, Daily, and Weekly, enter a new time in the left-hand side fields and menus and add it to the schedule by clicking Add. Table 9-11 describes specific configuration instructions for Hourly, Daily, and Weekly.

    Table 9-11 Configuring Rollover By Time

    PolicyTo configure:

    Hourly

    1. Enter a value in the field to reflect the minutes after the hour. The default 0 means at the start of the hour.

    2. Click Add.

    3. From the Time Style list, select either Local or GMT (Greenwich Mean Time).

    Daily

    1. Enter a value in the hours and minutes fields. The default 0 means at the start of the day.

    2. Click Add.

    3. From the Time Style list, select either Local or GMT.

    Weekly

    1. Add a time by selecting a day of the week, and entering values in the hours and minutes fields. The default 0 means at the start of the week.

    2. Click Add.

    3. From the Time Style list, select either Local or GMT (Greenwich Mean Time).


    To remove a time from the schedule list, select the time, and then click Remove. The value moves to the left list, where you can modify it.

    See Section 9.8 for instructions on immediately rolling over log files.

  7. In the Rollover by Size field, enter the maximum size of the log file size at which rollover occurs. Specify 0 for unlimited size.

  8. In the Retention by Time field, specify how long to keep log files before purging the oldest ones.

    In the Every field, enter the quantity and from the list of Hours, Days, Weeks, Months, Years, select the duration. A quantity of 0 means unlimited time, which means Oracle Web Cache does not retain files based on time.

  9. In the Retention by Size field, enter the total size of all log files before purging oldest ones. Specify 0 for unlimited size.

    This value must be larger than the value you specify for the Rollover Size field.

    If neither Retention by Time or Retention by Size is set, then log files can grow without limits. The log files could end up consuming all available space on the disk where this file is located.

  10. Click OK to apply changes and return to the Access Log Configuration page.

  11. Click Apply in the Access Log Configuration page to apply this change.

9.7 Viewing Event Logs and Access Logs

To view events logs, use either the Fusion Middleware Control or the WLST listLogs command. See the following documentation resources:

To view access logs, use any text editor.

9.8 Rolling Over Event and Access Logs

In addition to configuring event and access log rollover frequency, you can immediately roll over event and access logs. During the rollover process, Oracle Web Cache saves current information to lot file and writes future log information to a new log file with the configured log file name.

To immediately roll over log files:

  1. Navigate to the Web Cache Home page in Fusion Middleware Control. See Section 2.6.2.

  2. From the Web Cache menu, select Operations and then On Demand Rollover.

9.9 Using Audit Logs

Oracle Web Cache supports the Common Audit Framework for providing a uniform system for administering audits across Oracle Fusion Middleware components. The audit log files generated by Oracle Web Cache processes provide important information that can help you identify and diagnose potential security performance and configuration issues.

Oracle Web Cache records the following events in the audit log:

  • Startup and shutdown events

  • Inter-cache communication events, such as:

    • Authentication or challenge events

    • Subscriber cache insertion to subscriber list (success or failure)

    • Invalid address information from subscriber

    • Remote or subscriber cache authentication event

    • Addition or removal of cluster cache member

  • Request authentication events, such as:

    • Login to Oracle Web Cache ports

    • Denied request due to access control settings or request-filtering rules

    • Identity denied to access cached objects

    • Invalidation in response containing wrong Web site information

    • Client certificate failed

    • SSL connection denied because no client certificate was provided

    • SSL connection denied because client certificate presented was on the CRL

  • Configuration services, such as:

    • Dynamic configuration changes applied

    • SSL handshake failed with the origin server

    • Authentication with the proxy server failed

For more information, see Oracle Fusion Middleware Security Guide for further information about using audit logs.

PKPK=wEOEBPS/img/owcag025.gif9xGIF89a\###'''JJJ @@@lll666𢢢<<<000 ///```pppPPPyyyrrr___Ϩggg???vvvQQQ{{{qqq|||̭===888GGG)))ᔔ\\\WWW...BBBLLLaaa$$$333ر;;;OOOooo˝,,,zzz^^^777tttʈuuueeeZZZ(((XXX999iiiCCCkkkɅmmmUUUwwwxxx555[[[444FFFSSS:::hhhbbbnnnEEEMMMNNNjjjDDD***+++VVV>>>]]]---HHHIIIOfO~~~ddd222TTTfr_%%%fffuuhϬYYYyuuqf ~uv`*T 0 ʦ@&y UZܢNG+@ff-vD#(+VO  Q,b5AOp@AulQ} 8)5Z18Q T΀j/ Fk )o—$id;ZZ"ihMv8ȗE}K \̌ IHdSN' ɧT#2O,:q^dS|` 8vlOUfU _8TP9N-TD Ո0Y kG ;_ OPfQdc<|nr:8Ϲw_"_SF_uLOeaӜ5'5HXXϺַPvˮ l @xW@LFX?9NȻxӹNJZ`SLh&ƉHOx?GO҇p{ ?1 JsN*f.j8{F6PO#y@z MXv $%/y\rZx/d6wv<@on~A|| 8ր; X6(HH}I-0rAa)+Ȁ @ b Qa798x- ;8b4%BXDXwt Y>7dwSHUh (,: >yЇ~bo?"w'цup~X.jS >8R5n4oOab'SrQ9qGx R%#*Ę|$aO#,9y@Hb .2X1gq1'NUrX'G{9  ِِ 9<` $Gnw47s( 2939`s,a ƀ !Yf9 +xE )@P @E!Q ? '/s$DY3F IyRp`W@*Е^ v<Œ `@G|@p(1{ qY{0i6&FX΀ Ǡ@ɗq#HR۠Pـ Alp戈b;0'p0< ϵ1BEXAy@}@9@}pP8"xKpx:p,v/ ^׉Ky|*|p  JLI0@ a VB2YG @B:D{ȁ,N:`:0a(I#ȹ0ǡ.4Z`ރzulڦXOZ s0|)+zP`Pd-eZh-WJq vz 0yѧW)z2-j#.y*zN1; Z ɖ*jw|@ }7N{p yګQp:|: nJfڨyW q:ny){`PSZE1p30PRp P 0 9  kY@)),ڭ@)aI$  0@`0(H*P z0 B PA@ #{A=#+۲4# )0*zJ`p  `@ٰǴR*Π0   %'+ ؘ,k @8 E,mo,uyM G  >G{+I ^ @ءv8)  bpu1!!)SP 7ZN˱ "Һp^@[0d#p hq99080 IN;0~'ԛN2<02<4aXMkQ;U{Y{qȼ񵜻K30Wh!P$yPxX\U1 0-;ujȝ-Ռ3KD:@lQ2 k]`𰨽Axu)G" B%  IN+/LLQxwy1Ƞ_>M=Ս} pQ+ٟڣ]鍀'T#(>$]jFP!$RܘN刌O$ᢾԊn">$֯qGwKG=}޻~i"A&rjB.G'̾]B%Bh"ЮhYz}\P`CP 5x 0͝"0 D0 <, p껠 Ap0y.!XS.-B!2gL/4Fe" }D4`OCyPi1 <  <" @<"ҽ꫻ Jz@@/lM@ !jX3|vgXy#^nu&sEE2b¾8m&ZGfR!F%OzzYsU~ԑ0 p C r_-$i… b^L?]&G!Cw oeI*S8O?25Lc%`$&(X SQ BQ\ Wa~}TVJ}JaR lΝy/QEPXK+8-@+xeƌ+a jgL肿SC@0Waĉ/n$M3BGQ@RzM 'HQeSL? D!x1rISH/2ֱ-lc^ʮl0", @-0#1$2B A)P"+ pO?㰽 &+(l\q4H kZ ğX1l3 t$HH M'd`0v`,icpi(HRd@v[n[p\ qp]xw^z^|U.A^Kɏ7\V[ ƍ`BLx=OL Ddi Ix)2"5QW䀭I&肎R9DŽFxVZuiEj;=sjk7 D =vmR/-2 M"R8tpVwj>' k~z{9`{ ^{×Zn"tDL;E;3@\Õ$$%v<0$@rPB# ==t#8Ri@\B{\ZrAENkRmkŒxD$&\F0Z0b>4Yb92>ϴOc쇿4o68@̽LW0\F-*IG"40l{<2<P(L3T#%)ZABMhKINA$lQrq(A%+j:4 !ȅU0 D+Pȑ C7>hC t/P!xP>ZABQ]zW浮40uLAFkiPr^#-J<1"+֬X0KPD 4!|cGΤ&$mF@U*Wm% \c-*! A5O}.=~!40—[!0!?Yafw*p\x/=0[KthD3Bs|S'&(&< RW%/1 J0hr9J` X|10ՙ%'Ɏ'-ɖxuON1@0" C K$2'9Ԓd*&A袲[M9Q.DI(GNy\C k  D Zax`dQ@a Z0<2HH%bQKLi(}u4%O[tl{ꠉ5PPa{'ޗ VD;>k_r9]J4Ѐ !'+ UkJl&R{JAЪ nNx"sD )63SǢ%y=]c';_?^3u=$`,HDN`onK?J~ g (m ƑEځ #ɗ4Ԣ  WSv_jf`J[ʫm!%W1};qUUx<۵Z y3"?zʇ^/#9y=)}nL}4ڲcX&EwhLFE<)W<$J烶zBQ=3>5%3`{`)Dr?Ȋ88s4tB8ALA\AlA|AtAkhC>>z@% iqB+;H.BAG~>4j@#3B9`>q8Xh?)8.,D0$,1T4234 B6;͑4 >)4к x?@l2DU8DET"3#HԻ\C{7<("Y=H4Q6C+R@D16>N<`@ng";\|%]T֣" 4hNT@Ə Bp  A8Z@ W$Xs,CT!E#]=P&XhX  pƀ+*, 9> ghpL=XӳŋT@vB|L-8&T|:@8#Ř4E#!R$$с$|Dv$_H`3hXF(h4KH>K ʷH?8[; d^tÎQh/0 ä DC\L JǤM?ont^\IKiMX&8 ޱ@ܤ Hgzც e0۬hOhSIXȼJ؍xЄN+LсXPiM}LUІe(H!48FB48cG4S( GM*  TH퉂( c&; ?,EQ rB֤j53l]m}oE+d `lL Sh EךnW_ +x= N]2g-v}}F'=ر @|7A׀ wMr.عKS eMOߜXE;%2 MhMdŠYOYi>XmZu" 9Pڨ8AZIZcC8ڤKZcI ?M6@T8׵uC(HR[h(![:.ԁP4PLL\M }>Apb\XǍ\';9Н xX%۳]I-*ؕeۂ׭]>+^L\5^èT- ĨU^M[WMRH[; b$@`sZ D݂x6p'I% =[ ߖ*+_ka~)8Iv8;5`y &`F VƤna'>[|a!ΣHAI7t 8&nb'~b('!< b-bJb.b0$/c2.c5c3Nc5 4^c7~chc87c:c3c*c@dB>d5dD^dUdF~udHdǕdJ䵵dLddNddPeteR>e<5eT^UeV~teXgeZee\垤8^e`fEfb>3fd^ef~f(hfkc@g ajh@I3n;pN  Q櫈gIFugLi q A@^]%x }%H0?*` DϡŌ7r#Ȑ"G,i$ʔ*WT/!˘2E"&~n/h񣈑$*)/ E.]扔7dQJdPEAТ  r0H "a uq@AF%F\Q Q|84ԪWn]%LײGl[!O@5T)SPRU+W`Œ5VMo3~34(X@2 Q2tzxf燚+Gl 8 BXt4SPCuTRK5TTSUuUV[uUXcuVZDwtaup3 05A t( ^+r@aA?XHB@Kd@Q&)Eafa9&,!Xl `O6o aq"r":WnɈ(x(*[laowpar 27s&v`{*Ԩ*AZnJ[aH܆y\͑ݨGNkGZ]S",-Iֺۭʹv꩞Ê*ݟO/8HUit9]%  V~dVky j)kiA@g1AG XegıUrsj^R g+x *ZDAa6KtKK٩F X@hRcr}a8|S6=}8# 8ms~'ZRyW'@Yp? P\P$E9$s]q@qhSzevzՉ;|Go9 7myK]2kڗ]wЩuSTh>vA4>G#`jv</ h= z:X$-9r\ֻd2p;"T@Ϯ6o4;!b-cCFxHĄ"43́޶ƴʁaQӜBF@}[#Hnd)fJQUFcP9%&G#`E<`EPZL~E8F~fģ!1aK̡ܷHFq, \+H6g#9fjh1c/_5:EG&p@eAZO[4̍32b WQ!1#Μ̍P&x`JK‐F(gd.qiD%2pmiҝ^ժ9!eKcq=Ԯ h?%E$gʗ?!(Ki^XBM {ތSC@VT%&'1*|M>~I즎 ,z kBRFP2Ԉc ?>WU֔!Ք1Vn^%֚f$V0BT)αf-wtȬ*m>fW)LSE13+.hveKG1;3gGA*Ak;ݻWmk3[;R9C-QԦ>5\gMڹN/-YӺֶ[C}5-Kza3ٲ.E/:x ms6G>7H8j  `! d@2! Nd !4[H!Ґ7 n辸 -Ԡ Gh.bL \`>NЋFPE `xƃ^a9ȇU J0K 7Q(ppjsB?<z">"*POt h%Q ̢?;" ϸaTs,~Hz^SOkh2}آ^s=Et=Wa>/Sֿ>K 0%"HKЀ??ӯ 0/e~w??Y  &`5:zDu(^ fK0v_NR ?p P ֠ R^  .&Mai7 FB,!f!t5_yL!!B0Xi>h@!  bA0Dj !$K(,a|&f&n"'v'~b&@ X @ D,J: !"/.(G@ ,6c (V5^c5)iD 3`0!::#Bq 9֣>#??#@@#7 h أB]C>$D`݄ 3.$F0f$G2 tHv8n EJC7?$O"@5LdO6%ģ`:B. .hB.BI:%XA9 %BAA\#/|eX% C"YQ "& ]ڥb \+Z%`e!(ĥxbvfd `@"Tf$[ւ9?Уg檌?C%0B(DB#B@lt\B%820%r^'*@Mbw~'x';PK99PK=wEOEBPS/img/perform.gifGIF89a9::868222e5d8e99g[m>@=/j%M|=Aa6`^8feTT8T3ee9j8o23Tdddv3d[A=Z_=Kr,v\cA=xA={g}j!CCCOSokUVrDdgd_mmm*46?+:*45:9:*CYe|p 31K/J' k;!ŸiͨFw,29ӭ퓅/]$3ҜLR2al!aۨPJԢr0@.\ afrTXͪV,_u<ӵ:9CPֶ,E ׺xͫ^׾ `KJ?`0V%?KZDcUYX'H.v?ᴧuֺ_cU I2зFlKFcU"[b'-iKZFM}fB +c![ñ?٭@zC%̼68Ļd"(ex N:-a51)oM a-51]` h2!LaJ ԸWcÍbXl6~faB۝6?6 Bu2ܤܠ T>4¼4:P4Ǫ0HhB1p J$*ąK^hܙQF݃ ȇA [b(Rpyyׂ/SL|l-… -xohU$*I 7h1h?q7X7z: %wrgn<= R psg&(1=r_V70Ddy yt|f}f %v-Op}*POWog~hBfavg[dFxSRqnBwhVo%F idž-X5\\`p s,0 `F3e2`* V{ F_ݣ&1q|2B vNECZPچ3}FlXTLKkX($:Sa4FÓWmːGpkX,,TY*A[ }xx-l'xDNTE|8!k:!x @_+C]|lAUZv FDD B"9$ suT*,ْ.0294Y6y8:<ٓ>@B9DYFJLٔNPR9TYVyXZ\ٕ^`b9dYfyhjlٖnY(r9tYvyxz|ٗ~9Yy٘9Yyٙ9Yyٚ0i  @_9Yyșʹٜ9YyɜٝW"5 t pY9ٛYyٟsxq_WREY9zzڡ ":$Z&zZ w ? r p&:J@YC5> ٞ:P)Y;@ z`c8,p"{SPn*0Y u@-DP ɰ>*JTq™ r@ ; 3i:Aa3p"E z ;EP-E4+`4K %XAۛ:ūEmp @ #Ip@>0p [H6H6 \` kiL %`ʹЀ`0 S0 MΚ;\ ]P]-0 , Ll<{ɩ(%-7+0L., P2}3(!h,[=ă:@āZ'\ {- N! {R Nk{\ [m++<`r@_ kQp +` ]|qp*<]A. !Zk긥+:|0 2 *)A e:2[E%KԱܰP e ZkjՃR ,>| 0Bc˽P EIHKٛ$4jܼ΀^@kд !n_nl ΪV1[ Pmi  ;6Ϊ<ȼo,<~BFɢۡ㇛`кMHk E^ G{"ݐ墵EF`CKBcmN,YKжy,{{.M ➭%%^'R[=L_{,;~((. +e`^8zK!K B~=þ<k̊ EPJ̰n8 쥳)ĚJ! }K-I ͅ^אxN_hi} {m7cI}@_L#=sJ9EP㰐&Q0DpQS` HJw͌|et ^I RŐO ]o ОMPo0^M"?} >@ CP` ]3/[*pvJ: prZ b~UDES܊ 1p*`t^I;pS.p:` Щ꠶Ϥ>: ` 04Q:Zُ?_o։ o~'9d=QD-^ĘQF=~RH%MfRJ-]SL5męSN=}TPWpR*dTU^ŚU֫D~VXe͞EhA`… śW^}E4X`… FXbƍ?Ydʕ-_ƜY3aѢ+hѰ`:.ͭ][lڵN[n޽}2_K[ ׷|l\tխ}]vݽk?l;,~_ǟ_%V>`矦9A>%B /I4İC?%J %JX„ [-S5芮&PGPjGp $HL~& ,)}\pFs4O212M5y2& i t&|! BjZ=j
~o-'MRH]dLL#T@q%T_ɱFɞ IVZ6ap93 ;S%@bźs\ծ*ݥ&[YV%RlG2irEJ}S[ű{&FȵvV *nv}|O ACIEt6%8lؕ ~|-W "e<):c`:A[jZPQ$~,~@g)%^CuM `~JHj~ye@:1uW]xw%/,{ͷ}cp]fuF\:]zWV UH XX%_9^D">!B?ظi&]Ў P(4ă'ϝir鯤EdnyV'c '%>)DMa n;[%/߾&V{fƟL^8=v=h+X W?!}&X1k]s*PDBPc  J%^f!X3d zN p!!xVA dЂ Ch>"Q'EoO/jE )%Ax q5"^ q D%jTKS+yJ]>5I۽֍nhj41An:fPHDXr #]AѮS6-[ b0A4n)(ũ;搵2\] lJYCaf] h xz/e!hI w] S@RJN8nH`z\D Їh1J$G%.n ɹR۴DH>ڗi'ՉctBFP(_CF*h8upZRP'<`ӪA!pX[Ul[5CPDuǡ\] oW:szS «,Tr?3D:+Oh;1j $P BS뤵%vѨqՀaj#O'}сE`|clN~r%C [ `Oi6灖VO -/ھ;8QR(xrZu8f)(qSP-ӠJ'>I4Ya=a{"D?<ˡ1&0@IQ&dž*U61Qw#'8,p[GmH.oeXqKo~ԆNUc ,X'i[n+ v@j/Np5&m v3iC#;ea< #Vωf n|^5xi0BTG09T\DJzRvŭTZI6(k#WQE:N Z*Gl_s ts5^iW%,ceAX3<1mk+-({8H H>Zb.0Xx'8%Q~iDS2%TOȾe)j25 AI0BujꐗG=usGTBv"hD.Iɇ##?:jL>􃱙GG:Kq X 9[/2)]#wB*ؽ>眝:W"9>}ww rtxvxmgV78uM%?yW|eLZ' $ 95?}"οPnԪv}vt^wQ%1L@{7_?Sժ腣WPUi"~燽/9sqg*'~C KtB%5 Tb'>"4 ?\*H@c>@i`s?0雿4^y/TiУN(3CAlA3.T 4 !| #$D %up( xúނ;Ыa!äP;r LBC J3|ٿ[p86 8 CCZCC R3RH#Cī8 TTErEXEXVd WtTEH^Yŷ^LEZ\WBfgD\ddE^FgWFjFkcGmE2E`Fa[ j,GT|F]h$FzGnxGgm4s@أ $(J5LR0)4W(-˲V c%]%Y %0KDڵuZvN(%TU 3UAC\%^I%$D$J13ɠA9EdjJzdEsƂxGkGswYƷhw4F#kuX{Pc˶KKKK$KuLK˸˸LKdK L K`k ʤ]ˬp FDE$FDF ͩ$GJՔ4M[;t }8 : /lHa.)S@g+*BZLTΥ *=:PIv*#h؟.bNѪ47,3<*_OLƱlMqDǬLcd DGJʴLmlF8SДHЉPxP [8FuP -FJǫ,<˳\elQ[dFQM)Q@,LÉ*$ć|`/\.MD_*NԮDUL%Dk9IN\$. #.|$xD).O<rCd;StO$+<LvP~=J|T̔ PMTuDeT U eGH}T xl$=ԮA- SGGVJTJUMk@%K#3(H$JH3^] @FV]GQϻmF4 >qx 6dmԭ|^襉 ^^i"[WSULc~5vcQec|UcgԻS5,Mcaޅ $~HYzUMTGNMdAW Q4(iqzH NdOq PG`QvR~eQXT~xdZQ4$F+YH`Dǹm-.n\f|lg|i^5ffgfhfd<޳,Ѻr6?ZUB>bJtdv\T`D6 HwJw&PbROd)FqP`%_xVhe)6exbd6fW^-%QVd>В>Ǔ閆4]H%Hsc;5TgVHAe(NfDhOc4 (VDbmHfsfꢎF8_8dGCxjvݦhPZVj͑PGxQ~d )GOe&\lCxd4ljkVz UTOFt\{NJ}aYvm}~;Bi]~hG$nnfHs8D6GvG6Tgnjjd~V\|nn4TG%evn XlހfhQ&e`nnCXle-ݶleo/ GȽdEUYt-MDq.OqOE& >U`eHmpo8fpb_q|=oc\J.#k"kDjgsЀnW|r>d $4Cfn"5$s.r5W~5Pn4np9?9o pp EmEL/`"eQMtQLپBui@8.Jf[pYh>ZL88vHRsXD2ƴ$NaXn5g JjJ~8Nal7f,fgsm\uDn?qq$fvu/woOshp\tvvOr/l1qX$GiUՂD>`S=tF^;q=U;YxuX7iﳖq|V`jE.fg{8|ggAAv&|ݗyVo~A6wpz x$>bzotw$fw)~gtg{}hWG3NfEYMِ{^|G +T=~`%@,VNV2L'tzH}hrOGFy@fCCs\OnaևF[X}pVx`w.B~}džd;O}P?)I_U5Q5F/Qa'РA~ O@B$Å)jlc|FP߾{αɨGriФrIժT|P+T6xR&í[hU tS$ݣ~0D +cƒ?\ z'.<@[FۗϴiOfMi_=tJd]k׾g>H ol=(9G셭g=zwߛW_B8ܭ^K0ͬy/@;OT]gVyuRgᥗ~՗9@S[ F#5Ȇ!Hzh wک"bQE-jWhώ=EY$GiZ>*I>2eQ"X#t̝wx`~tdndfChrfl馛aP#tPJ+,CM#eKLQvVX P?XT qXPi;c@GV= hV^ )yњ[6"VeW[ `cԤ8=8ĎHpix+Rj鮬BC#ŔJW'W' #/k#f=)0##|W:evX^'qyu(ֈq[.uS|?‚>RLj\+3H2!!U?> RT)sɶڕJm)jutL%7V݂8=!mpL+O4rB8o 7jZx]!\c= K=Mouk<\Ju"ϻkDR餧O꭫:鰻~쪫$n^A=,u |b"KDa @4~,*LH`2dY8:N8Qԥ*L}S թJTU:Eru^%gW=x"SQ JŤzփVfr=bT@hO֨ V%~ M+AZ(X7* T]k}}-lc+Ҷ-ns򶷾UYAڣtO"j2K VHNDjT'.x+񒷼,4/~ ߝKu7JwC+ ==0#, #803 sd5=(>1S.~1/ց$>ic#1,!QYNN./)Sʫq?vs;XV20dNpuX}r,Gyvs{.tĮIφoEksYI~,>Fsz4Cm^#g9$ 1L+_:/ VC552-la{6ke'fg˖lkc܆-mgg;>8>x|@(ծ5!)wЬ9ڽs|$'  ? ޓsqlQ8N6r-"urrP|̂ Гf ש 72Y)O=];헺I_CD |ҧHn|C}C֧Obs.ft& rHr$I H$,=d]zheW؂ %^?n(2g3R]bFa3~ :caT gpa]_BJj--$QdZ#~'Lϑ( rŌ(g(h !(`2&`¡ c-(@Lp)9n䋟XFa`:hY=d*b****ꩪj- rq(nd)WfN0l(2! )1``6'f:3Jh``4HC .YU夂x(r+O)T䥛e[ޥ܄i:#:,b>h)4&b:0>4"!Lj>x>̂B-,Ί|Jݏi`60, "-#ȒrFlڝ:4- lGp5z$ؚ̚C7|~B#4,"" 6h BsF&&-6&&MEm,,ݝ*1Bj͈fN+Tnfn#(T\ @La^C.궭-'c)>,g]NJ,r>#24.+ؽkrn k9hʹQf.>7to#=>$l/]N箁\oN A x(1.݂mf., mr#ʴDD؊m9vov^? t? T"]qB0В20*pڭt &pmsBTpR#=qH p70B1&2 :/! `Jrh> 2224tr"(% 'A&o2I%)?d2-n2zH:@$S ؃2Or%_#?&p2> *p0 Ģ+_q:w2-Bv`=SrzB.ZL x@ 3'1 w6@[4@; "ǔv2H/1\ Ӱ\\CF0-ǔ,ӯE2D\HC52IH'@KtECJ4L CMHtOD@G"KGwt HkLHOY6a8๮Z1[;pZrB&/w^,F hT?r7'4 ԰r/rR[#'B"oDd/.ovhg#ecvLk5Os6d2u1t2=eC5xnF6kpjsB6YXo&kpR'Nnb/ fwhZֵ<3DC5\3C @b36B+je TO':HuD 8i6j+82;KVv4AC&B36h#] 7w= 3\p@46Z&,\8^8,e[& ^aE6fv9vqt8-z+Ijp֖D߁hqO$:$~go/vckcw,#AoE9K6qqC3鞴yN4F_x9_AiwN?T`Gk/xg8x3M;:{._LڦF+f \Tdžˎ>\纮csp`@ؘ@6`,4N聯6f32 x +&[;kt){{08drq- {,_3H8_2*98g27w}}(@:9olj1 0 yz`Jl]|<6ގȖ]D^cyݣd67 = чx1:]i]hH~e (77;-\7}`3ND-Hfpy_xF:\K }y)2ZBéhFe(.~*㋪j?>WOѼG6qz9ߟx57,yxۉaW'b)x*y~IOg/(`"o#wC+ohS *)κ73Yˮq+ ˹zpWo@7`AT-l 40!D#6TQPCX w_OKIp$ʅ+'ӤA* ʄi̞7 RhΞ8\Y4&"#؏j?}W;kW_LXV~;sEw԰wջo_ rlƒk{sOGWL˩/[(rgB^ :Ͳ5K52}Yǖ-`Ygc-:t8qn'WysBwUd映unIS7{>”LU:׊ 6?{Pm Zǿ Xg*Z˭~K0PCPj!OI,DzBDD /=*Edj Gw;zG|HE!MBR5[\ l >ǀ{ |||Ru,Ȗ.S|vs .00)Ԝn>IFfG!TRÞTF$af$QE-5S,/ 3/,03$s *jp eؤj*=+Cy P\)W`~T}k&} q5v3 s ue`Fh?YȣeGg x }vOn 衃.B1G馛iǞY.wݳ[# KHvn9$%lzLz붗>̨GjS_:&b 5))G YDVq]Y#$ZWmA0! 0fVF%Sx: D>d'ѮZEjV~PÚ:  S '\A }X5I*!!zH.bGs"/y^r#E0|+3R\pZ*$ ID 2H;jXqHRf P<AJ?!#˝sB @ ,XO`P]7Aj) @ ! 00?0: gى @!.ti;6OȂ'ΩNgFQNxyBy'O1ma2o5Yw0ȃ:9"B ,#Cg-~ X#piK]1`*FqjT% ;dD! TjF JE`j˴U#q*A_uF7yr垳b?UumG8*1ؘPs^SȜ:C+-!MǞ|mMQJemwAheuj,zwK2`P }cE=-V )jUN b6ˏ"6-Sӝn5FٺƵzU[[ׁN 2F(6}#W"Iꩤk,J'XX٤m7NGw~?2a 벴j)g$9䰅1,IҴS\RxQF{ I+y2F <%u0){|F\3Kft'%.Q. ~61UDU{j;j5>,lIO 6gNLFOSg+/9XD7ϫ9PW#sPӝAjQԥ6QjU5v_GMS>hhZodcQ0v#Hl١xkiO !XVr fIζ{"?/};FBMיTʱv"-7):p+ܜtUTT<MQ>f^w#ov&O>rusF6I"+8-)L[́k]#[z9:J$8vo>/;gi%ёɬ"0t& &Kv%g?>m1{ˮe97x?EOЀ|IylⱼN}|XIV7켎ׁe/Kcu;cv~uYO}+&Wz{ݝ<_'6 U lN)xfn- /"P1ta bOd,̂*.NP0^.֊S+GI!odV/O,.5 cp e'%BE_  O 0󮐺BL#C"tA  m` A&wQ",n!Z+ m"d+t;a ڨ ዜ$'oPOHC] R|.jZ!  !Bj,* ,* ۾mka%%-%e"1'Hep-հZ*G,X1bB a u1bkRf"/r R:>'z ȹc0ۺ|m 10mp4HN13' ֐mrJ(a A + Q S2+R!6/&32az-r 8r.=r..1hX-;s;;s;?2tP92@@ oDz,?{Q,@ ͒,k79R. 89. $%-(M 'Bm>TBb=*/NTӀ(23b *+ R*ߒ!@r@t+]q3! 8 *-19PDBAbqKjcf,P-`rc&t&L43OF'$(f=NrI{.*#P R|q6!Q4#B- -JK/#.'0b P0K1 31U 3V]UV0q0&|ԳFhg/>CtZfIŲ+@cQ.!%@aY 8rH6S':pt=;SNf.4/ȣ9BRuURO`uV ViU`aCXtW=}LgFkZ$PѲ_SIb:ҔMULYL]&[f18n-==s")^cEg_#Cg%zR?1( l^iGhS`jj6aYkk7o6rj6QmR6feVfnVX [Ti?sdivp'dGdp݅r0b6縎BDSprKpE$`&oWns;n?nc}$6B7)7U,Wd1 qDU v]kk7xa7 '7SrgCGuvɵvںI{QFۼzT|qgZ_waO|{/T$CR+wsvt t 8txh SWumBv#l5c0,1/qrrY&%0UYXt؀ax_c$!bӤoY>q6Pq-'?T0!B_Ba9#ӄh:ǐa-.8x،8x߸x帎8xKg-D/ϢiԂa$ABHYbP"8Ǖm+W2 (MD=9kNb]Cgӑe t, p,o1a\u+c1,CVג"ݒY7U 4|{|͙D03v Z"iO[~K4Ss5[Ayczݟ-gՠu7z8 2̛ރ,qM;ݮN_3C6 [W^>k>3?ɨ xx A,@b=6@{`#Y88ZxȐ%"SPōq 4СD=4ҥL өT'OAZWbuiٴ]yv+PU%W[liBO,'~ |d[a'9dS]|._,&Lt@@)l/yf$QI4w2Xb#]IO] ԫ[N5R ֨XqǚI,Y#-Ohg_V,*ؒO`u 3P?s:Mv,eg Zhҏ> nRM$bCO*pH\p A4?"E %Y"PgHF}eZ2Q]nULE|rwfue'TFIQpi&`uF9W S.cs9Yf*6ؤE)K.bE=CM  A<ԒnM2ݗE P߭&ZA͙x= UnyEloaz"_$]4(%Vx!e^fx Kk/U&Q4*C<Оə,[s"p;qc;Tv-4Ar&r* AxJ&a?ȜY:&Yn7c ]TԮՊ u!\T}1qqm^"Mrj,Ep܂a-9Sjbۨu xg g V6Ng|[B11֚ =AEψbw{KmOWeT*EVkqٙg;v3_[X%=>7 -~S7h@>܃> Tyӻ8_prʪ@m9p(|Y낖pU?LQpB^ZB9K@Ѻ! DNn崇81ə(K| (pE- NjWDGF?RVpCbM 9icӞFL9H楕-|5vyU ,լd9Zo VlMcH;4j)P3yMӶ:#`JBӼdrUz1[5Ys|UbYEb l3HaOpN:4 կ]` iy͞n[5UeG?J>eJs}{]R @TV$,XYϖUBJBJ̚I?P^&XZQ_Ϩo3$dS~d7gl AU )aZY(KO`l7 lw#נ/>Ъ2`@k@H4`^x)3`ZZExt&_ یimaٸ8[vb)aT2Tu.R`Ŗ] R{'NqY::@{c낻ECwЇfߺW)e+NmROO;V M5a |ܣG>kV|FA+Z~?$3hlf_zۂr}c!'n.ty}g<Ͽ6sq3hrqu]kf1{+#HĴYHȏV3as{܎2rz7u[39#G:~ vQ0~fLRl"|µ P+xi^o{!ƀ/NLKb<J A/̿WK Ig)gZI-lyʬ2p o6b I0ԇMI2_oG.n3'H|p ^ [zyf}5*z*7(!d6`x$){3ף;)w B󁨦ߺ:ϼ顸7Fw3W&V{gnD` |{'f x`s) AB?Hs}$@yAgJB$e*%ftHtt?tCsE7|.[Kx{ՄÄNB|@y ycWR y C~BwB75Cw ^x} %I`ywo}FAx3,9USsi?-` 6?ͷB(E ~ttGwex;#vygr@A(fO燷8Bht<6 yZ`*7TFnx-GX6Ј1Xwv1VG(t؁@a~'oXRWRP vÓ;P?+zNept* x.{hmaR$%"S_jYɳ؈4T@jCΧ~ڇ.GÊg|;~lH xx>P|hddFFDWrN*BRQ'XIED{͈\ ѨW8(^Iiy˄5#tti4)PAI]IK)㳐በ"u|dSh{?/È q2pe~wيA.FuqYشMMN隑Ԕq7NKK 雿 ) KXx(f>WMuVQ UQ_NjB0sRWEAFjjj9j_F9 4;W#@8OUaՃUY%׉pcghVv?m>X ?#IP-r^6nƸ`3Z=4C57#E㍒x8tCy\P jUY5YXd]Y%qfZ`b;Opڝ):H S ʽ{K07owjȒ ,ZAUDlet줈l|&) ˭m E> afL<"ZR?ȏEQo6xfU\Q)@-%ZmIDD/ ԩxwƵ ŜĮMN;=FcTR3'-Ủ, Lqm cf6\t,]QGQY׉~lS`WdMCٙٛٱՕM;8K 8Q Z*#ʡhF؅1ZD۾,B'H,Xh)sڈ-J 7,x YRJYUYY{* :^]gZХB1v]Ž $sW|HTrsmt=(ۛJ aB]B۸5#` k$n__^jEJ-+ _2fGz*찰*7.=uK++)a0j8Wh:9UGIL 4ˡ\4f=3_aZ\ P @ KP^4&k۹j d믧 cq{26h`N%bn$jЍrTҨŐZӐ@kg\D1f` ^fm;vk˜6hq3Ph ZR.*N=Mm_l) ʙXL:~:kkh{xH0Oe= b7; #/\ $XA .dC%NXEQDž=IS[ٲK/eƤr͚*orϞ0qIсPOSyJAN:#AX{zW[_a';dȪe[qV܊R 3_׎Tҟӧ f ?Xm+sʚ=gСEi UP5k[#YT ߃Bmݭo :xqF+7~&~\yvlYt Oʼynկg߾3P{ɧPB Ԫ@JP TA!t0B '@ 1P ACpbJ:t:貫;3@AEE{Q4 |#A6qJ*ҫ"ʹg2L3īFs4O7rN:< lQA fGO>m>i KD]GsTQJ'R{.K}s-E`QuU Xa}GZ!{\wOnHhBcۓPAM0TRiFHIAS}eE013ã뾔ןV|ѷomO`I%b!q5bU \-2֠/RuD6dj3cykfo9gqy{zhh6:igiy X#LtѲR7sUu51G~߁ FX'cy:껡\-;# "q G|r+ؠҽ'k-HĶlW̛NlYkf^8ƞ2! iֽ`$#M BWq?~㉽~5,wX<\m6dm_/s]ezCS@'v} \'5B=81z3(?! 67?hD+*pfXCHxpװ Qn7p3xE,sL>"fFkf,}G&ձnt=`A#_q1;.vC㈹S!ERH| yHHJ`@EQQ e)MyQn;^|ZM"G |Q  ڼ19Z ܪAF,`306K;$$GR&D-)IINt339*8:AOu/ ::(5t>|pc =7KP}/L0vТLݥP2gW,k *ߟj*> dƴ 4@T@|),T9ҿk+:J/ Pm`c34CBoUNT|ʛ# 9ȁzӨ_W`ڰ}XTK.~~$7&– l @Yhr}YB?aZ'*-A\#閲n_v0TƛF@$AuC!fwJ ijԬ|>'mA{z.kSioA*-{$_WU U1Ή<[:`CVy,%9` sW0`,?LE-`^N b&)Tߪ>pꁷWqC#^ j8YI- !Jfm\Y!r[PA.`|J#q31Ue: 2-32$dU:5<@#ZZ]g:+t~3Tɔ|8k_tK?Ygmb`O~ƈ9@ lqA@,Z>#tVFwir ldxQW_~&kҞj1U~v_L(Iw܅vn&wEEDG}%}-.ERimwo'\eVJc|w)~dxTj1X\ERuM 4նTmi Ƿյiy\y{d\\;.P"ev?,s< !qg0=Ѣg'Xȸ :S5:k#K#ָS}^}IfS ~wVw]ȡ:wg#\wǍrzdmj2ߺ񟏼0{w})'#Lvj7YO%>sf/_~ dPGO7[ K5ǵ<9NΊ g= {YL39Ӯ⊎+@<k+0/[@ d)@1Vj? @@wD3AA8zϡ=t=A \\B#;"} R#"|B)ܼK󱮺@!B¿B/̙0C24C1,4T3dØißC7C:C;C5t0C2×çAA,RA&8¸B0G ɐ)qLԐMTىp.R DL#2 {SļcĹ R\DJJmb܍`D,O6DEEH^L ploMDHE IGvLL w-"ɸ9DlAl9m [\ oLj8ch) )1HFS|0T*Wܹ $4FGH\E\Gt| QGqTɾ@X fܔGj'~kH ɷŕ\q< $boJހG_IL ISҸ# >pDJ[ nƺCɄ(8}@X@|cCˢT@ʟHq4IxQl:QȦˬL M ̰Ih[cLtLFe4OtGɌIa˪Ņ<T}gh/1T0XAT8tJM̋ENM O\ߘp ZL3LuaANζPνD<(Lt< ,|01,Z? TωOL P,PyPImG,$PΥL hpP,jĹP`JGΖMM#ʈ-MHL&J58 ] }l LKʴ"jٍ-Ҋ\EiJ҂ҪMRJ4O%\D;]FI+/ XNdӶQ$RN"(<}z'}&s96}h%ŔNH79 ERLMJ N "\JM9 g۫6 d?k|Y9U,OPdʛU$NVpѽL z\ SUZBy#-[ q#6bU-Ji1qhMZ B U9{B1[֭%~ѕu :eT2͉kS@ڇ [A>S8S0Vh@>f )E4|MMhE|ԩVIJ΂V \ܥHP)U4=U#hA-\ 2ܟ#k CZ7ڿuPl-X0sSKf؞lۙ2-z֠)*%*[B m]kYҨr qmHl؅[uX%=e]x2YjH UuՈZo=O!]J]4Y@)0yU?=\RLD%,NzDEMY m`{`Ѹ Lm\_ա^t)B4`ڼ5|4Cܖt]Y_)) `q!`-=*\ge]#<$ Eն,35Ћ(+Ym  ;j7zS[ZsQ_~t%3~Z^*d+?d^5܂({b1$ 4#@ȁ+ۏ$\Hv4}c}aee]M 9;fT}2e CZYzZ2]~7;.`>Yn%W!KuY}sXƋ؞ʩxm r^v-uvMF[ O*>歭Dx6[8&hi~u鎍xU.*]iXs処K)֊6an %(W NRfjaam}g~g~ih3?C^m3-ó3`em8^]>BLjamc\ F(rcY[V4}=Yrd*뺾hdDߘref NYgdbÆ633Ydzs_ȞO%TmdPi Q H6vi)bUضh Ry1od%g6n뽠%e=@t^nnrd%imVc n S>n8:ɭBY4ck; G͞an jQ?Ӄ)X *>A+43˪1Wn  E5[6fMl$pݤI$R~F8ku5ӻ'.ad7c ™Ms5 Nj;-nf2R?7;^^60}N\FtEpLlM_\VGB-22;R)RVWpbVYHWS^KNxod:`TV:KBgD%aEZ X9 ~HPru6%Q1v_X_l+GvPXj@W`? uf5PCq4m|abLMjwM#ǍLƀmlso6_^.jn77zڼd`OumKb/3jvwtzey w,6$xO{I!r; ;.q|'vwthZ|ધBnkՏC=nwNJ}%bZ$zw&wd.#WrGJ4FvXn 2Ys헱j`:wt'p "Lp!Á|q"ŊW_A= Hǎ&GHʖ)K%K.eœQJ8 ~'",Ug`ݿMgT+!9^m5} Un_}Gk+/,t; †#Nx1Ǝ;HQ2d|I3EΞ ~)z`hҠOtU~J 9\ZѣZTaXÝ:\ W5K9‰,^ e,yﻷ.sv7x;Ï/}W"Hε`BlVRo' ChW\tuX_砇ݷP#t~26MTcM2H:hc ՆYmnG! '!]#|` .[r }DHӀx kk)h&o6'P AXCԂu頄O䝓!zbBEar.bnrzAih۟Jv ٠OhUhZ+aJgvYʉlnk?DR-I] 5z٤f+Bo8#N ħ)Unc^ihe3ܰ JP jj)Bfln~" ņ9YSzp#ܲ nnB'lXs$.5\xSLc2`Fǒl̎mh++hnB\Wfw\ۂ,ATQNm²R޹$ )m 4?,tЫzg"iJ[yDqT6g v;SܢIQH^|zs{y?Y~Y[=ܢ"{Qgj }`(Y z ^ۤBy{Ov*-{Hx"srӡ0uSZBԱ5"!lhx Q :0h9et=_YY4E|)J Cdǐ[ 斺%/q]0cL&3LeB|4KWER  ;oeb)T*\X rsb'=fN-'.*'Af@,(CǂIo`C+ʥ{Z4<%- iJғ2_@җz0o/V)O#Ӟs*HԣVH]j־| a_)SDZ5.;QNj5WXzn*F5+[ԶՠY< ָxEy{D5w+[JÊȩZذ GP,jjd?K[2hKKZҚ6=gW[ײVMlkK6Ene+b3/n)k-T!fٙf].O?QN~$wiÑI_A(q7(ܥ>kQ2Mlo!w4$'< USe{y_] "B}54#Hj&@v+ #/Wj+>64Bz%U]Tю#WS9@1(}iƳG_IzE ?r3f`[j>);[BsŒ87.~BtcܞO™Jyi嬥 3e 70C /O <&%ϟ߄K)]i@zj ?â妧/Wo ZljQzt2l8:Pֵ/B/+l2sgu`NqZ>fqH 2:`k;Yu7;(6%L߬ƒyfj ZwNQZ{TƏ\j0>Ph ١R [-cl*[T͸F7>::GvN9 8I;[B?$GXp%Zfrp:aE) J!"!o4#$nKPiY :h! >4!:U$rpE4bG ! ,,VN kda:c"*D(cr!mEr(0J2,a?c*F!E+.+z72a yb 'R&ZJ|̲""C44?3CBIr * H} *"!-+#ddՙq又WHu(z3I! T8@d!f;A2b7+c;^Zn& NHPRdqt=DB>b-ܥW^IF)"AAfLB~%X6$P9 ;re\ Eyd 3# Zq4c1pv\eA" ]@fddz)e}^H$GIʕ6Q7boSXZaFOg#xz]%qas.$cbRuBv6 *KeE%"CL\~d b{Eog}'tg8 bX-gÊ-|, '5A fCT#cgtʤ+z}2XXFxFFCEęh\=*U6L!bh֨.$ r~"QV'[g"6]))'1i0@4:06YPZ"W#,2ީS1cU@m njXf*zXGlf> YeU@6c>Fw,ft"bAIjb#Th&Eڄ%Ě"©@$T*^ܣ_2:&䂾+b<Mig+DInR:i:궂RIbkq`TO¨*^iB>jRz%bZOhO]ZJ+jҪj)2@&VꬮfUx@b{'Zf[haf"-&mq^f"u<%l:q㜖*z!VFDbUH> ℍ,iDnGlVi"fMma~ޚ)溑N:6iD,>- DǢOYy2gƌ{nV+B^e*a<UTE^c>kWYDҮoF$DG^aC B`%rϊ/q,'2}U&[Uة1ʦ@Ω>UHN>.?ir\r4G X$F{..|> Y ~E4ѩ,:[V @_`6EWbYxc[*ja/ #Z 9&+-1:- E @J,H)Kjk ,:%s.vNgk1!5oh,LQO6 :7Ke%#V-$ .2_![Y֮*cY9 p,pI_WD1UllRT2jW4WdSg( !2Rjgsoj:%.2[rkkjpa&uhR1t:4w!1`Q!)iiNFaΨ> U5s\*z6qh\f/^a/Vt2n4.E*[d7+M2p ND8#t ;Bs O4L EvrZTMslM3&D#d|RwN~ZjtN+N薝5 Nl0W F`yt_kG2'u2>]WЮY+[z$ tDk|26,)atN+rYtj'qaPfKcQvS6v_ssG~E-Wa=u)n45F+oAtR_6.î*h?wc6XG7`s~mH f'loQ5nw8[lxf4ku {U>#v+ |Js~ ~a(Oeo5RhR+٦+|ʃC8HExFvYxZuT1w u}/*x~1 zwW~ vMCUc#7m 88Edi'[:f')vP~OyTO :j jxS8HǶW{\V9yGw p9uMe_ub77y97IST:ʸk5]nq!QIQ0*Gzy7 |vw?@2B)jKG>iyP 9 zIX\7\@ ~GW7˩3_Uq6KX<0:!:Gh${{úёAۑfo3υ-hۼػ!53F{CkPZ_'l({o+yŸդp֒5MS˳SS̻|<תhG"8z{|u{fГ<+{16s]L;PK1?`PK=wEOEBPS/img/invalid.gifMGIF89a:3f333f33f3ffffff3f̙3f3f333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f3333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffffff3ffff̙fff3fffffff3ffffff3f333f3333f3ffffff3f̙̙3̙f̙̙̙̙3f3f̙333f3̙333f3fff̙fff3f̙̙3f̙3f̙3f333f3333f3ffffff3f̙3f3f33333f3ffffff3f̙3fƭƭf𠠤,:H*\ȰÇ#JHŋ3jȱ#FIɓ(S\ɲ˗0cʜI͛8sɳM| yJѣH*]ʴG!JJիX:*`ÊKٳhӪ]˶۷pʝKݻxu+@ KÈ+^̸c} _ȑ>̹ϠC} W"G V  ۸sVu! 5PꮭC|ؒY:YIžp韱sM] >p g̚l`_V<i=W` vQ`c#hփUh!zw@{7@|_7H[~m`Ex]/5#Du%G2LEGI%ŁHQ Zdj$hx B8 7 bd0 u ,HjzC@pXBHD YC&$!HJZRldW(vҋ$&=yFNR'OJ q,'lc.ט[Qe/`/L2aXK( ,Ijnɺmr 8Irz4:v~X@JЂMB jaD'JъZͨPZEF HGJҒ*z(MҖ0-)Jҏ8ͩNwjPJԢԧ}hDԦ:dTѠBXͪV[G%ݪXJV=_RֶֺE\V^`WpH$} {X-d:5A1X.]`HY'lj]-d;VaElYYɶv'}ow*0mIהiKڵ>qjաmwg/vk覷j[־}mxQ¶$lu#_,g'`mR8߭cC{VE%\Ӫ j?->pU]#+Nw[ uzm"fMbON0a*Ud)Mrx|"QK4kfreyU3 fl>O 7K\.<qe/FGO3 Ånr!}iy΃޳yL`B[|t5 ֹ3N?hQԯƺeTM_ֳl[l}je/j\3[Ά(CYf^n7sN]o6gm ǒ.͂+[i/z>p=k+߆8w8NӽҖ0~/Cr~) ?p.Lፋܬ6QkAo;%$m[}W;]O=V:׫.v=eOgrpǺo۽jIk;uO7<?t3v<'cS<7oXsxBhDXxHJ ؄NhP8TVx病Z|\؅zf*rfv'z]jhwjo\7gmoXw^1ц[exNqELc*gs76mF%Buc~c#&7؈xXȆ(xV]WVn力Hv\.!Vej8aq؋ĸ[ƇŸUbs=dGV`%r izyxHy؎x8WHxwwXUx [ؐa8i{ybuّV x9'&yt(7'Gx[6Q+'c,p&g.4X(^XtCo@ \2w؈rmQ7(T j&ZՔ!whf`ȔaمX^j9a(9_L X֔s iy"Xi 7qxms3'x uw]GG{DYe8㖙wIcedviI+ƌ9ؙ9ni 5)yǫsJ|xx;g)vJiڭ9ֹ݉`qF߉ΉJ_R陲Y{( GIayE2I*qʮ&i;H;^ʘqz .ɆxY{/F9' ;*e" v(ōJt֗*`ƈ]NڠiqeJPNۦ4tl{Pn]#x%h}ǦzKx[}isB5S{9{S۸0R;pŷy f" R[u{Qy幮Y5P{Xۻ;;Jg(};[{;|wK~W+wAw$~w蛾껾+NW߫zؽ {aKۿg:i >|U{1h {{ F,g$\!n#l(#-0S524Ô@,[$^1L|D\-u2L\Б;`eM}Gy;Vt @)LmAѴL!Oa1ҿe$=(=K/"@# DӖ:M>6D8@]\  K-QM TM@ p1 P 1|QuP'=Ԕ?jSyD MG J`k@t<@ \U e]֝m$WAk} G~ A ypt]׹PPw Ƀ]Y]d$A qU ]mݿ- $Mک- !JH!B`aU wԜ,\#a؃98"԰p1M}D ՝1T! A @ MHm+}Nm.Ɂ-d>Uzp>PNݛKU7NlS2">n\t \޳MM Aw]pԐ ˆM!dk80L~-~~XN a_N_>NȟhMT~n\$) pP9\t}m\ ƒ1m2P LMVVNr{Len!,ި!}Rpn uHJ 1"! ؇G[M1 QԀ1CTW"?8eLťNc\!GՍU_JMEAHۃHP\\j=.(U@/F[^3!Ss| n<3-8mU變>m6|- z-v٤Z\OE8kjd'oqaz_M"e^ݝ悯E}pk L-썤. ^O >?2`A@d`zmn.0$* d߁< V X ć၍ EVҬپ*$LK1e|a9D!@Bd0OH ISQ6ZUY3~CRyb%֐|[q[.]yoLl=ra:&f,sqcȑAXd`'KeϭA&vbʎլkرeϦ]mܹuտ'.+^P?#KAD3k$C]ƢES^33c˞ݱ2sޝ0+ FȓAVP/h2"XJp]PqcpA %|HطC$puif(@BD$ X*A  4Jdu RāXޅ5iAF+BB$| @GVyd9jO*D hz }CpAxeC\) 19 @|\#曆6\d S`ʶ 4vP@hv4A<YꬌAp&M-pP 8*fyPyxA B w0m[l#;|Ú@; 8 TI 0 ȸLkoV$pG<ybՂg s5Blզ";TB$*לҜ(HA& 6N#~\ ( M_$@AmjQ @EKbܦx]Qb v@/DΡmF ԩ3 = v q*b %??$@N.z=諸ҳI0z[~C[`ں*8д/}{z/o=B«~+kK #,/Pv #X-=C_A/~t-23G}] N>? "/#@J )XJ&F faѝ^66 ` !2 U1\ "$ "A XBJ@JFTC"O,/zx=3p+> 7@Red C\)Ix,-"v3Ũq>/ACv}jGkk1;'ңbWt ~e ydLX+al|<%$ğ'CP PqG+_ؿLv&&HYAC=.lf Iiu<`)fjPA)@s t9]n~D*fAu+3$YG/}m?-3"S$9F8|CRPeb+8Ɗp;r0@}s B&"$윂 yvu<;`TdEX'W # `M*N$Ab5@~!cИ62I x-n2A e)2M-X!U1f.\59en~s,ѹ3=~fAzY>4Y1Ѥz41%I7Җ.3MsNB-*F:5kUϨծcmYӚ@u|r5#a+F-e37~n-mPڲ6Ym& ÍNv~Mz~7~NO{'np#S!>x GN(?CR0?9s;<7gsݹS7\e[;n_7Z-:$_eoفv2oyq>wsulwP'AN^!x(7_o<2,Og(-:AR;N-#Ȱ myfW:aåyQBAQߖjƦnAJnvaCQmkzBѓ?I!cZoaA1"lb)j=@! ک*zZpIJ2+:ګ PڭIL  @~F>Ѭ1'3ZPPx30ګpCD2!)v0X-f2BqEb8@:J@p02 Fb&!5~0- 'bW'*P:0T[r:@)[Icb; 1vK xk& ɡA{7/t j+oH+ ؊Ȑ+c[۵!Ṵ+K㚴-jӤDۺnuw лbk:7[KKCٜ!%  ! -&y"״p 3K+2Q8q  /+A7* :xl!/ ٫­2¬HY a !S9cG(Q5qšS=ezq0,;jS2A2BS\LBLD )̖b&1sЙȌG`;TlQ-A;TœxsϩC3,ܥ-ԡhЏ6aƋn+`"> 6`#| Ń(.6М fsCjҳsZs9wm"SLʈ-IP.Pu ^ z2-P@ D6` g g;_* 9r U<ЄBq *4*3^^4OPR>T^P&+8㑚 3P/V>d@0'n. `ZnprZ{)r-<0s> Pxi> 罱; XwݪI}w|<Q M(e}(ޯ$K1 Zn&M8@%â=bG@ N&C]i;+Q֡,Ƀ>>#++ G5{:kjC}"܆~10*Z[S:ط &sO ]  J& 켨k2 !\$x;>̡ԆHη13_BS<%bG6BJGcC6~ќsx5?Z@05l&n0 gme&k0KEQb" ` \@h z}k *9Щ mOYK ) ͷ,LlAԶ8T!հD8 mGaO߮9N"0Y VKXDaK-+IioM*_w BG0C\ X `Cd,PA^`₈4h \PA%hAɇ P iR(c%ZQI8TSQN=*Y+ a  &&f٠AE *,p\ r@[eZ`aS %`cĊUaL./PB۷BV/_cZX9H4;K׉u'-|`oQb-(J 2ŒE`6u켛f"D "20Pftr_woJPDp O84D!A "14,6X" rH!,H&TqEdB X(! )@` $؂M,pF4Qkd@QO9(`%<7G@1渢r(d@#HHFR"V%)d'=ICZA<eLIT~Jd$&P.#0QNtYRKPư)yF2'T⠓r${ӭr*^&f(MTf,b 2\(@8sZ6PO(0YSt#8Gp/YiƯ4з'ˋ1|v$)*6 G$z.@-z2` ~Vɀ߭wCsUvl{tU6Yfp}=ҟ_y*/x^XIdsɀFA9Jwo"?<&=+)ے 0 4Z5X@(gZ5 &p2l5-7HC7 (?(EӴy:R,g"BbS4¶}cxo)H?1:Hiˠj,Ģ7x ()7a$1 .;b [DК4LC$ָ ?-{-*H|I$++Ft.&X&CCdgˮ?.>* DEE=o;1VlEX2Z%uk-{r 0kDc>n">`FW gdhFBܰzkEݨO{y%/{FiLJj" ?Dl 䲷2ȈLG?HtHRkItIɖD@`8 W9HIh(Jmb ( @i% ckC/qppU_d1d3'9dqb @0j4䒢.d SIdbh[֕ FIbTN>V~'XC y+u Hfen_Rpqby6:X*b™`){fn_VFQ`K "b  ,v0(bE~`fKMQ`851/6qe1&uF[5&(p:"/85!&Vk' +"*i9'*i 'pjjjic>pgt@-k$۳FZd1*]#(ܷEcgEfb9oi?k9aaЂiV&.@8X'l.%F^m0aa>I6&⒮f~mQ nnI薾^~g݆^>kYyokokMo!6o,NiU$7?W/gƲ l /  G?kfcp?$q8Sk,pFrnr`z"7r`Err@Vk wr "TB r,g_.G%@7126338qs Ɖn"qsdjrtF tt]v?C/HftrqL-F&N$ _uRQS)GOu]uTBuW!-!X$YuR4VK\^[O_`ab&V]vest/;Jvn1zvirIrj6kGbmu /w;tuwf\rw{nǬowT&x8u"x7wtO/ol?և緉'֋~ws1JFDy@uyPy"oquv.oo^xyK y'z/Wdwzz.=:狺Ɓy" jӵ/cqG gm,_/ηzz{{{Ǿ/zy>{T鹯W|"|Ͽd绬}ߥ-z?*_}2w| 6ݧP< SvƯ SXŵj~~~| $x7"Z?}Q2|h&@8_,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2g!D͜:wg-J.)ԒHR өլZ%NkG`ǂJ,چb(mm[p[•K_z|`e`dž.cʑ1O&\Y IӒ.]V`P5 f=`֯cܽiLqm/MwḋGON9sΧ6͠3>>SSSWWWNNNYYYFFF)))Ϭjjj[[[<< "ȗaCbϿ #'` &0ON d  !CA AE0!h#t$ @%c xLA'& *rd^5 *@`  %E*yfAApb)b@ \P$x8矀֕ I 44@hq% }BXi.@jjRJ @;eM+j- A*qM\, -0 (I*T 7` ^1`~V+ ` 䂷^뮰W.R9»&X - j€ix  lq~@a -P'%$ߘcc9`U.i@]!(-@A)sA'^uJG\Ѐ'0A^PDoJmvr1i}bPD|W'@n %X tچje&K0#}wn PTb U|Jk' ^<2F+۴uBȽF蟮5 |±vj7bZخmn r + (yXuCZ#-!I-O  tԂ T\U",j dB^I'%8\; A+*ycA<Ő Af-h@gD5@֐2! 0P` 谇`T 0D haL_DP>j#] $E\;Y&s,jLhPDh$3JQ &ނhUю"%GX*`?J{"+P}`"l +)OtCՀ,ӢL.HPLҨP剬?&P\DUHPJ0aEh͉hxMj4M\SȤN+r[5׾dhCSZLsEbY"qs+ 4 ,I0ЯnmfG (ږtr=#޴NiHWҟ0Mgtg DNN_DT.|)R[ m^[@:˂@uc#$ si3xFcudP/Q5_X{Mku?*{h|kݍ<Ȗ bڍsF<uoEP,`@pE6:'_yy=7|oj/@<>>w7] G@~Ǿѳt? )P>ƞk^w #՚"owq}h'ޑVk?Ȇ=_a;aF}?''hOPslxn @*}ⷀW~ mu{X7~7Hbo f:#!Hw6)d-hqdsVk7mn$=tnve'lVk/"x}*WxL8a]$`7tpbXT'0SUh3d()ӆpvTh1u/]Dkj!DXQn)4p(n!A{4DQhrJ gVr 8ȉrBzhr'};ag'-芍1kk# #.Ȉ72 th~ʸ_EgyUoia{q qTvKg3T6m:GNjpʨ"nA"FS6k#7ɇo (}JVm t6؀y/4%z}@#)n%%Ix[w},iY,b%/qn6(.Gyv\?9u uTVMGyy!f,[hxgswN_2sm ƈRp623^)"z9 /BgonQnȨȘ?/5x? 'LeY{9Y(byCtFGgL92jxVyx\18u9Q-:)9JIYiopXٖITyw~R-s@#A▧Ik#hǛ_rvci`$"$Sٟ)W_]]1G*iXS\fw6pBmF5c'#Ғwv-J3T8ug݈yI}"Rek&n8qVq$hM1h"ɣ))&-G*16%?$Z!XeYgO1㱦xPzԧ71y4u~Z-HɈ!7爉t8|UQpبxOሌʘ%mzqF)Mِ 9sn ׎ @`(9ʒ.1v4i^)MvDž03~*\A>}DP8QH~&K^ZR[N]h^a~[fqi>, |lܠ|x!z Ik ɜ/VɗɴsD:p2}[.t^'ljniɗTIyQȆ4,ejJٷ&,$ '||d 0V `+(| XҔҒ X9u A ʲ7d~) 6(NR+p}Hԩpʫ(~n(=[p:LDp~L 0?Noo_[`&/($s}1H/jqH (ا*$nJǞA 0 be g`^՞YoY? [P p mP P#|b,Pc%wګͅ܃m&`pg0 (P@dhѣ.$pըέ]IP1`$ U atA6X&\aĉ+4Nm%ۢ:6)_d*_ubuVn.M0B"Faw &}^\qɕ/gβqg7Aw 2}`8z+eUSTqE[ti܉ ? >&"# p}`qjG(kr(&ψϟ-`@4>4L4T?gsM8sN:DqMD:tPBPDUt-QH#NF+RL3QI;tNJ5uTRKOS%t7C5UXcu1TU VgW`e #o5v\wus WuYhg No>|rS[#w jJM ꋠ>H"F/}V}@3~6Gbw]n7+j N?F~;&HWx㗇{[o Fh@k8|+A|{ΣD`Ep}K<7$@@PDw})A x< o~{n8w!(^!^  Ddc8|]PP~-}5no+HD}!HD r! F]1~D;uF/p:T#끠pd$9%nq)A%9u.%ND:* 8I5RKaa01m*m9VR\N.yK`"Ɨ$f1e2Lc&S$[6-SHf>jfS]3"MeZhg94yӜ8 6dZ\6g5kZ΢ֳ}h]KѪ=-mSk굵}lC#pBܾ իr 8.uk]MFE] wkU~Z*WծUz^W~_׿ \`7UXk?8su0%lVbZt'y#H4+? bS1f\c9nc !ZLd$L 0Œ`dH,toPFHe$A|rL%{GR";C$`Yܸ̑$&|菤##CF:gyˤ Ĩy KƝٙ @2k$jVhb|7it(92,kw?~,2Ma.&t+F$ ?m;$}ǁ^߉ugvB`@ 'h}FB@CFjp@p#ž:_A/ܬb ⳍt&Aȋ;=g#(%@Ku@ء67.@@@$2q*>eoei3΁ hm6w͊v=ZZݗ rHG NC:>MΝ/m/!` wEK+vi>+8M;ܝ {kw%/9艹 Pᆟp7?! hHO?/4|gq"I7\7jUC]s:;$zi8S?> ӹ"z :U$7wk{+ ZCv+4xG+ A{K ܏  p);Hy#8I}ɵ؀z 3/õ')=@K+&kK5$)5d5#d$C?x";?,g8xC7ClDEAܘx>GD<ā\?GXh47DTM,N4CJ47y>cyӳUKE]dU6PvS8 _,i0 =Ť1Bd kK:S:Q=J!urFC‡Fll7m|@XGǵ)ZN|#FEx?fsǤGivӺW&Y,0 7\HHC/C* /5c[[sB\HL #IKItUD}ǖZIxEIɷBIʡ{IPbx[\K5Z( X3 JaJ"K,Kh 7Hp4 SП%0eO@b9`L-U܍f^H'S<! Pӄ[A - h_ӟFK  =k;PxH \k@dx`#d1dF^DEd]Ũb =IudE`QVRM1Nf \Fяʴ ߇JRJDߍe$ͳq_QN孹dL6f/❼$kyMR̼LbDL2^Md>d9ԴL;LMp^?qLrL=L&eK6e|Vf=I甚i%ܤz-hz-N4!YW9 Eө|DŽՌ6aQ>R >eΓGeQhUe!M"эQ_MWToQFVdgAInif~fޓf%`&Uܾi\zB9KԍCe] _F :nMdkF}Vik57z_r m6 CF18 s``^;uW^2Q^4(FN@,.e0?xo[v!pΚ2~l@qpp1.Xf XXqB t0[)c#r"g#$G/_1oI&ו.0v2%s%s%5s=5.g^! ls@tA?q>'tFoB?t'<_m!2KL7bAtKtPsttAkQhFqPO%uwP\IS$=(:==Ev31u\mvvYv>vd8W@FȄ_ЃE@&EpL=tWw-wuva IH15>0G({omED0GT\pHx}~?O9Xv f}dmy=8 W"2h|`l4ꒋS^ gӮml1J}ul‡ލ7W+onҧSnqړB;vǓʼώHSwbK4ar7}(Ws 1(!V؞x:!!]("z$X݉}"1fӵ(cz5w#|/#$qE'oAnSF:i<磒UZI:&yerY(%zTrJce`+&*Z&Y"yќ} :z(ڨJ=9lQvib0]@餖bb-:*R*x*q>Gx)gj*W+W*[ޱ*?D\,J;-Zlzk >-nA骻.n.%/k"$߷ ox p}8D[,wj&Tl-^[ܦr+<y/;3H3ds5۱/m"%M-lAF*uD] 6[{2i_ 3ٱ6vlGkZ@M@x- Q,WMK7ϔ[]k PDAE@A 4"A`t Epa9̻,p/')|(?/bD2 3@u1KhvoE[>_D{?O. < ؿ/[,#( R# r`'\t[Jaeo.|ZPB2!s8鰇>(Dܰdw"ؚlA:uh(Bq:R 8E+Vщ]E.nыeьXG7uF;OD8@BD!C DQ? II:2,%F򑛜';iIQb4%'JU b)&Xre-GKY̥Dv_24&0rLe&Qtf3"L\Մ5̇#7%Z~e9t3";)vBD0Vx;ֽ/}]ۚ6v:\ Htl]@>.FE>8X9pmcZ$%({/Le܇h` Xoܛ2.+2@.X=,وtB`%93LvC{/W$ @b5׽~@#閟(GD$@x;21LoD60`EKD!%l &DKض- QOD$\Uɬ~\ Y+Lִ8q-Zm C6Gk9ngSSri?eզ6tm$t\ͭ8Ԩ~z Tx@)Vu- NJUP:xD ><¥wRg81NX83K\%'yt:nΏ{| ?Snr*Yr=ym>s<<߹ϑ31klڣeUiC?`@XDkWqN,@UəYaLi]"DXqaףy!Qdp%?aaa=?ġD@TPC|n,r-b5"*GpHСIMTGUΠad+ZG.iT `D l@T8"MV= U# c6y-r4GbQ!2fbɰ@o?T#Xan B#DTFDQa:F@; Ue$Xq<&@=$IcHa%YUU.C<#BWHECcNm?d}Mq@dQMY9SU!TLc>Ip@JVJz6$d"%PP.cQ:RB,bub7TvQ?+j`CtHp_y? mNf +JD)OCFM[FuX7BhBK@kzRzo_djĝYVV&fϝgrjmC-BV Bf4av~f&8&HG8OF^#a:N.dHG\&[a,~igEB~wIiVl4#o2"XH MeX{i|.)6'冹V&QB1~΁N#Uhg'B>fUEgxp " |"h4E x"m[QM:h u\wX @[Wx.i8qUɢiULPm4[DPN'(N.fW wL3hgwgi#㼵+T՗5l$>*g{hg;=AA=8/}UOf;ZSTX@Lto;.pnכ2 >v꦳߆nd>Ȱ}~n?>y1n!3I_A莾/ 7K?8zo: >A_/ z?Ą 4x!A1hbD)VxcF'.Ix<.DfL&BȴygN0hXFPCmIipaÇ;6uiϟV5zT!CPv -Jk$]un\2("abC!!i&:qbt}%x&^i'`†.X,فBjY`@s$AExږi׶ݵnM%LiKiNvr/s$mIzQhqȗ{84A!>!u1>@=@v0+mB6p9AL# 60'*ED1;1E"$Š2d+FB yj쮼LTJ&22( 3CXdw-9Ȗ{9ˎ?2s3QegEɄ咙bꦥosPvƢs:HNL3<0z:v~{C=0;Xi"Hv25K8-+'05;2p'BTQ/>J=>ZIi?K*|xwǯw_x;U]"}k\=7ޟ+(!ߍ羻g^|??U))ׯ| G{@y\<+N@%r^/D} Ds@%bGXl: lP>^ wB6-h =CpA KÜ  p'Q'>aD,b/+/Li&G<,vH9RTg) \!#O2̔EI9En$L0FM+D)Iyw(Q Ul-iK6){,?8]r,1o9>oYJI 鎙IMlӂݬENӎ|6ip6P̓3+-M2AI vs"`<IRgL~>#((h@ȄNtH,# (zbԝIi齮~t"QZ(N1j29eJGΓ<}Gԣ4S ө≦W)Pe$H>U*`XZVfݟRִg]U4R^qk\26[Lҵ*=԰D,U/"V.} S螐*e%9ZmI/ܪ'=`®0pY^l9Y69BW%F܊\2`J-4KA>}嗫2›jķ,rKq2yo$'MN{8AߋWMVU61mR5 j.v dkG‰p&bR9NOS6@m3T /ALS#q| </'!r#{ƽ\rTE$S`=4(NyMUpesr3q$\flsd"/#ɼ?9YVỈh<&)kiC?HOH7<jn ][cݞl}.zNu{P]PS(hp^@}h_{ߞ%exmO4N& ~"DL9J @.O3؇zy)GTv>/F,+ j`p`//%Z+ "P`uV@GKOa@"b P_w`aV箮jPf} OO  pP@ sUΐ  yh PkZE`0sLМB'" " QMq"1'@Q"&-91=5A7Q;?1CqMGqK_iQm#uQ"<"|Q1'q#q1"ѥT@kwgoqs11qq1QQ;%'xQ'  2"wR !!!B!!!"5R"#"'*"-2#1r#M#9#=2$AR$K$'xLf&&e'owr2\lR'{'}'Y(r'w΄g$&$c2%Qr%U%Y%R*w36,G,0 >,Cқ" D.F@2,f6/f/0a.2/>`0I@3A :3?38@33_OF`22 12F"5' @7w7 R31#F`s2RS1W8+4`86 ;;;`2E64h/n5>:R ` . ?@3.` @ =>S=3ψ3 @;C<80$4AAUt=h>Gs? !14@EI>[x>3s)r <ԃ ԋz9A!Z=E]گpE@Ts:5A@} @ މ=}uH""RT^eh0EPΝ @aR\@r @:~@ y:Ny , &W|SYɯ9BAy!v&pa0`S @/]a0RA( @R[Y:"4ķc^ܝ:]>W,A@9C!^A$`L`!  @ `6(^W^L!:+@'^'A L@:` >4z8o@?t@d_z?"WG|B' ԬҜzpD5:$XS PJ@ž2dxq$F '0Y$%> 4СD=4ҥL:} 5ԩTZ5֭\l` 5jTAʌR8{fO\;JQ Bf)DO$*A> l ("L /cάy3^K>:լ[~ 5Xd͢U6nݡf77S6F MT[?H JbF`aʤig r~?ۿزgӮp=;p724`F!]҄ '& JhP"E`b ?D\a!Oz%c>dB~C B=C) ,8A`H<`QZq B9@,O@1K}^NPJh(QFwK6RRi%Zr%b&&n)guޙgg灦^ GhJkVmPNZde_9fgfo9xҸj nm~dH:ʤNf,КjzjN/Ƞ- p[%niV:jlˆ,֛6'7 r"o* K,n̊ltbL-7>$ tB ir& ,-?nl1qN@4aZouשM.*Sʲ,kkmduvߍwR`,d2NoO}o7Dy?y\r /G{3^> yꪯ0Gn7ӟsC|#z~Ǿٜ5nSo9_=[tٚ lnU'P ?d~#o惫]xԡq.h p$XX+o~Jj'>Ipnjp,J21 m[6ũVB_C ~v J?|ѳB* 1{H8.ɯ{"Tl7 tPCp!jq+ h-1<܉6@t#6`#uǫHȼۑo6ʉ x)qZ F >OwC6H$h,e2 .X#a#gP&0 :@) Lpi2:Q9T#eRS ?e l* H@0IdaIn'LX@msIVa B΄` $qKxs  $?(H) iO@=%f&5\\;Fa9ed[\4\3[:7de9m6f::z98^^Tdddv3dZA=[^9v\tA=EFHT[gZlxjURtAaooo45544:954 K^[Se>A9]&E'Y']=^5[,e>|8}Z9Z*d'r6l>a={:Z3e7f3M[Z^WpVioKm\o}joffcuk}IpEifZ57[l[l[lnnk~~4845::ZZ^pyeEG\TZX\]Tfkmvűffv7774^:f^\_=F?]8d|=^^4e|=e9~8HA]boRuiQIe^rdZZ~|p88WdVadarҊ7֜[ېfע]ңdټ}^sĔȇ쩻С΅ֱɃŌ֌ړʧΌ֓ɩЧƏСҲզɃŌ֌ڑǼ̢λщŷ!, H*\ȰÇ#JHŋ3jȱǏ CIɓ(+[ɲ˗0cʔ͛8sɳϟ@ pѣH*]tePJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKWjӻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠC}Y .bH^ͺװc'}7f%GXmJo٭Mk a.سkߞqi{ooIOE9<^Gswl_[O>0u됀|hR 5JѶXy_ɗ6U`'_`%,^0(u s  837#8 Bm0xF3%+ǎ!64[AǢbu3yN!J &6(nPLB zW}"ΣZ"աxI8KADjꩅ= x Fi13;ʪ-0Dʏ $$;tƨwntP+gtGq 'zrK3p[(b*rlEo4!Mx:>^Ԧykȸ"ƥ'y2J90̒. 4f0,3ψBor+B3;HbI0!R{d ZS0nR7m2(0qܽ3r(18Ku]j -thByjnw3)ʼ(Kƭs`xɎ%(d4\Ѹ^tKB1)Х-a \^CqMqvُw3zzK\la>>vf¿1uO /]1ͣԵ@?Ap#PVB=5C-Ѓ29̠hTWys1@+ZEi%ʊTWm9rӔ_;' }(p2_ⅎZr*"0%ٍ(e@%xJ\w\c{͜3)th7hQܹ(7%('LIW#NV|Jڮ&5XASQ~]e$C&4+.LiÏ8ϤtE + {{Q8P@V<C1RP~~N(^VqnWqi|7rziU+d_ qWX(y6zw jvvilWr0ձrGF6G {k4Wf^`^F {U@]wƧS6 Qb ||HgABChcG3JB]Qhd/8)o(D5ѡ""dgkŅFjR&(1GeK>eyCƍ)/U)Q8lzmd&r{-p E_Iag ^@: 4`G PJR0h+An" Cc%+ 'n%+2ф M z+e}8,K#+4X!WRD$b>y9 f& I[ʀgg :.IR9TY%`HED0^Ub9x[fidjlٖnpr9tYvyxz|ٗ~9Yy٘9Yyٙ9Yyٚ9Yy ٛ9Yyșʹٜ9YyؙڹٝYYy虞깞ٞ9Yyٟ:Zz ڠ:Zzڡ WaP0&Z(+j-)z12ʢ3z6.;05ڣBCDzF4[,:;?[F'3 jSѱ:aR+R `YGWS+TQO+0T] W pj[Sauk0AP <p" US![A^a[  e q;OAPQ+*k[1[۸pOѶSw&Y P0mй ۹Kқ:kJ &{W뺨;9 !0 :+o+ۿۿ;W;,o+[ l!#\ll" )+.,/0|8|54l><¦[[`Q {+{й?LWF,+oP  $^l2+K&-O<|+7|2]b Ƌ ɓlȒ3Ɉș< ʝɖLɜ\ɉ0EH*[&;bsV6 ܸVK̬tY۸V<̶ͬ; <ͼ[  8<,ϋ&] M%l =І\] 瀸 ˅ ` k`;@t@<  U f|) LԬ`2-̮`P<9 :\@il +ϚwР׌נ'Mς}ymF،mׅ׍ؒ ف؄}ٕ}]#]sIK`* K PMi{ӹ{eidѡ Aa tʬ5=y<ռ[͝K {[N ˝dYLӞK] Ƚ̺]= ߰-ߐ~M֍m >.^m߈;ұP P+ѳ]%p=ƍ{K}mW{ӮPP  YplS H. m FP> >#>vs^yj>炾~牮}Nn莎>N~+_|/2{[^]C|F]`XL]ޡ \͵̽MF~]8F=M:ݸmʹ޴ۮ َNjN.n|~+>~>p  `E߯ ߦC>^ ƾ<Nƹ7pͰ έ @k<h= wQOSOMznYW]__Oo/्ZLK̴p밾}p) v.O8<M?mDmmjXL@@|Oխv??oOï?/OOL;`pܐ_|)z/*O\: d1mAnOaNm } qc@; =ʀ|@P_>V/N=Ez`ҥRuBjѦDr-t*V]~jv,ڬj-kU[ ƪg6sZj`„wob7\={7ڋ9Ū\^Fx$dbL/=$CI>{X&iÙh}!Siݸi3w\׽Ym`˕1׻h֊C/nٓ_^~|÷~?$p> o@\P/vꋛS&#.4@+ON+npGo8PD s9`rC.D#IFjl.|AȀJW~Ӡ.r)c<̏7M5DNDsN>Ks:;4OB4Բ;sA-P=P<+GB  7䰲;D+  4XVeUT!˨E`zVrEN}E XǍLR/NVZiHCfp֘iVNsygy矇>z駧zzw~=n{'|?~~,|B;{秿~?gG`8@x?q5 8A VЂ"v vЃa[hH.o9qЅ/a a?І7ġ~죇9qs$aB&.щJbD)VWbE,nы]#1g4c˸F4QmF:1G=~HBҐ9PԠAP6ԗ|ߚyKfhF5QP^iHMpGER4-L0Oy Mӛ *piP*R&N1i?yĄթO*.J9ڏ^%zU5$5H1UOԬok\OW~5k?@D3Enr\6׹υnt;]V׺nv]v׻eqS൯%9f+Lo|;_׾./ъ6q*m 5[t$mdKUZu0 \` s¹$0#"//\actımlkӭt+.mM؝'~JQL~XbqWDrdX$J}`^2YWNWcKeMYԲ*S8ή*! FF% W·fu*яQ_AS~e^:А53%MJ.sԡ.h>QUxu]=kXZֵumk^ק.7Tٕ6LM)`٥lvGh?;.rmnww=nr;G>tY-eۏ[w-;(:+Gxp7/x2 >9=>rU;,qxu%9O>r)w9_r3ss\>9kNs\E͍C9ӡtHzӣ^ucW~|wFwo{>wnMZY~&a)液3wʲoG^CW|5yw 7yZ/ ˜eyk45z\Т-d1|G~|'JTwXRKKCnWTc_/~wo~"rZ3 ~?Dcs=r=5+-c Š$~:?XS @Azyj7 <3Ak%{0*b%!$ 4#D$T%d&,!ѫ8;=JĢAhA IJ,<;V4/ +B{:l5d6tC = [4;C Ǜ)y,@V,[ڝYhDJZGHDGDHLMDK8 .C-K)C>DESB6zD@7UE]D9_t9a b,]iFVN]ժe%VUJFec7l>(m}bgˠpVfvꦆ꧖de{.lKCٞ#~cfeK}`eʨʶ^kf뷖븦kuC70?>3sP4EpǃF/M9ϨOZ-O! Ks Bn,p1PȠ^LHߨ*^Wa.5DG1hSGHOWW;!fqsFvuNu^fogDbRMpEut;guFNf6rGw.ݎ9..y/O]J^~G|HW s[z:_uwTHO&au[z63wqPB\>ϦǾ?UPRZx{s]Eԧ`{3gPP?Gf/ǿ6Ugst˯u6w|iҽn{{k_q1WjϏJcyEοY%G~h&^7cSSTVtRGw|:)w԰Bfo`RF~֧Fyg%O{$_};wܸb ,HŌ7rHǐ"G,i$ʔ*Wl%L cfh&͜f'РB-ȳ-U"tiSF,+aB{XƪE-k,ڴjs /ڒmҭk.^GcTiߨ v :8Qlkl2fcByТGx\% D9$!!cj=vs‡goƉ3oe[±-J:$i195.n]cuF| :F𭴠hBx!qYRv.C^wx"qh*"1RvXXW$\p ϐECF"M&$P:%d~a)a=6#a' hy9#tYe9gOs'y'}' u'&Q%:*P5vOnyQjZ4X):*z*J=0Z?bgrn녺Ƒv(">zlOTr!4 JZ{-jm)$_~ .!]"y lY FpE// <0|0 +0&CN2$3G|cs!s\vTjdo^r!Cѥ 3ϢŻ==4Ek%IMG7m4LG=5 |ΫJj*WaagG5nwbZ%-7u}7yޔbOu^Gҹ-}|dwdvj&Kn!xg.|{B `hO:ss$i>L,۾rӻ ݿC7 s|w?T,[Pb`;$}ΐ>c~B[]U;f\'D+6E,[H,<@K9AbCE%@y`m,X`Q@ZQ!R/3aJWRBhX*g3@>~D-чMa垔VLC3݌GIKh0cEj4"V%0c}4e+#%9юYX+:tԣItEƋ>v܂M,3Ñ'C FJQ'S9,jĈZ8rʱ!iZ kSrYM x\+L.sYDZі)]AˢȤάIˬJj<TWMS8Þ*y0.M3²/6+^fs\y@,qXS''gF"Xr3eBR'Iֳ).*^ƀFOZu 1x9xN&Byl,:s#̯FPMXp6'4yNg*Oq9:ֹiem3l &Zf'g9GS *53| fR6\RV"tg+Ɨt4l!\ )fsBZ !\FĎˑxEMCE,%+>zPi-@A5Eu эp쉷 yڄ۹Ƣۏ}H`R*M; $Z4:5j4̈lBWۈ+ZLe4G0S PHKg&*7WcCVMMC#Ę"`V O#ګc|bу瓛=e?:PdJmWݏf)h5Q~фjtC:`mƎpdaX6c81}D6O?՜Ƽ P,ުz{GoJգzb6V!-cMܟĴkSeSf:)f({3և"Y}ioj:ǵ,#|ƶءdܽJ-/ygNV ZMxe-bNś <v!^ qz9U ?  yOFaY$!sYPHY b a!."QTazUZ \%Ԧ[1|`'Oas0FƴiDf)6ȍCa"0:G!UW-Hc|h`@m-t> 4nJ8sESee⬸Qiqyda?-UPCp;#PvQA]aҝak$ZWYY'c"R-BIA,`Ff$Gn$FV$NȂ$II$JJ$KK$LƤL$M֤M$NN,0W@j LlaUVa1"F<5Vqa"D2P9 II;C,؂AH ZJZeYe?e[e\Z%\%]%\]%`%^`_%_`_.c6fb6a%b%eeVc:Yfgenfb&eF` ?OxDS>J=ނ=z*BlD$ pp'qqq&gq.r6's>sF'tNt&ouRvVs)bk6 M"MdHHFL-H@V؏O}~O'~(ޏ"v4hF(N(Zhb'ogO((hzgOxnZ= HU^m"b$TTVUbw0)n| )P MÑbL>M6iVBzi閊)iii)~i*i)zk£U2fcdcj|H2<>2tz)V''j&gjj*jjv:'.j6k}6'ZDD̡6b݂;J>CYm)}KK\ iO%qk䫽k"ķkk l&2l.6lNBJ,,k+îkbȊl"lǶHhrΉ錦=>C D>(Ʀ>l Z 5>ppYZΊF%d*f~׆-؎ؖ-ٞ٦-ڮ҆ IXmYRTulmk,4bpm\ A'}7[`fP֠֜zu.ꞣ?.tN.L&zby(>jGl*%8ACA38jޛ3\=೹QI!́Sš#W#-ŮOl]D`D&@;C<%ؠٓYE`%gah],a]Cph.@ T)ވ}GF>(-; >p BTQ\~Q-U@}g޾mY">pRP0M\KЮa6 \HP"p V7ab gի(pqx8cD)>12 Rz<=t j2<@9!i`pmBq|Fmn2urP0qKdTEv,{$GEN.2//203LP$[zD@99B ς2@ CXs2-9XNSy T3@-3Y (e1$mj== ->>s]s>@4A@tA4B/B7A;tB3ޖN-~z)e;;<_E=3CtA2$sKdVp%Ix%X%%3f]b&aBffe_*aNMoMtPOtQOwiO3P[g&T۴iz&U4O`t<9Ȃ \5]5:W texbl'asgsva'6b/b76c?cGquJ[\_[H,-C. Pg~Kj6kk6lǶl6m׶m6nn6oovlS6JIoA'|iO~Ntht hJhjhvczvv_xwwkyswKwt'wpw#J$.@LxS?8GO8WO}D~GV1)*)=i*n)iҸ8ixy3Ďx8/o)nd߱YX.-ly99yt9%4=৚999Ϲ9߹9﹟9::SJwFG,k+^kg:zrs:kxBˑ9 Ĥ..;#ʯóG;OW;_g;ow;;;;;{ķ3К+溂%kBn.<*|k,SlgW<_mGjZg,\>goHϿ:>鏾>ꟾ>믾>쿾>Ͼ>߾>>;dI,nDFnGLWu.@ 7mn7IjQrnJo}Bm䏄-в2G0??N@8P=&T(P@JNEGp3' b߹(Ĺ~Kʓ]cǐ%XS`aO?:hQAG K*rd~3sѡ0V}fyn\r &n]wջo_ۍpXgI9ٻwŋx~:-UhID4*A_xXnŪwoC=}iV"\v?Zolc3ZmUxwyѧW}G;;MN>@ t" *;)BH+ͣo[ 9TJA٬*-!aB KPND*qKh R!,.칇/Һ3Ҋ:'k3̃h3 Z3DqS#6a I;+JK%}G!TRxG )clK)JTS%@ L?# Y\YLIyKUV{;mmbӔM]MɫjD;g{Vm}SIlúM$rh)eSƄdsp6DGyI_j~QڷXN~0W磅/-X 7ָAXdGMN9dWVX`8bΧ`;>x-]fc̺{nk )EN((G^[K[K̒qҹ\ ۰dȑbn!'N0!4r(r79A]I/QO]YoaZPMk$߁vjHx)h1^dv!wyL^ﯧ;>oȻ*]v~_g~J{4`x@& t`!@ F`1xA f`AAbpݮR|;nAP>ΐ{1^p\}D 1D%&KtbD)FSbxE-f[bE1c4cM jG9(p-dA ZB}X 1!HE.t#!IIN%1IMn2i̋QJ9¯/dKYΒI7e/Ka4f1yLe&tf3LiFӴf5yMmf$^PX죍ZBb(G 9/Y_m rT}ʳ/Aʞp/B,P.T ŧ QNE1QnGAR%5iI{ਅo|@󙢽pV>r:)#4 LŎC5Q|j.,*A?NuGM v6IJHj=`(4ڜN:c6ֲ*=5Xn^$n֝$Y3*ԒU%'].gNo~CpQ'Js16oUT)N><[5̌pY-wyQKZ_5O~sk\Ǣ\sלC7zZջyNH@xs Vmrrh$im%d.+A|mQL{>}T<=Unc1˒V}ÖaURsxoݶ+Mع;medY1~Em0符oăN%kw}B2eqCɷ 'J̟%a~.Pw6lX$$hў[$Lw "$'֊Kr%dr Nnjꪰj-j|K+'* 44MWtjƘ.6>/+ꍝ`Xr"Xp^ ܭp4\m 4$'؏2o}!+JXK6JŤ,&ת/)Vb nLAppRK K+٭@&25NBq#@K+jj$,0 IpBixlḰpڧB j$(, ͊˨/ 1o%Q, Em /,ȜW|jN0ĔڼL/O\.$,B^Er0k(>.G, /alOD@͞ZSp pp)TiKIED *RR4֢kk8jqmSPP# *_dL 1,$+'&N*/n +gNinOmjNMZr05MڞkޤP9j.QnV (f ObSb+ӂ#FME'p/<$-ׄY~  $7S'3xs'Sfݎ.F.jRHC"bn=pHP(&Ud ̞A R#h+b/DT|Ʊ:OBSڠp@G%lEFGVHΓ=LMDtXS=^-n[ /nTrT!spo̮6dGJ NV zVe%e]6e}"f}QM[߯fbg_i hh5Af5Ezjgeh1JMˮVink=i)`-x 6`6a J6Ҁ`e j{B tmkVdn6r_v p-Wpp lBq5~qqVs`@aAa k_6cqWww `D!RWuquwaWvivgy|xs`7xwyyɇ]YBkwu`W`a`rsW a A`a6<+@څ}ճ?އ=5cg=]1~䗽ŝ=I~ͽ忝1~cm~U>k^ܣB%T/?E];>0_M̩] `ъA@B .*C>>בEأYǽQ9>_!)_-_1_/9_=;?I#An!$Q>^ơb]!n!A@ cA>v@a맿 {=3 #??_?m<"_?~wA.X!ć+6Ha‹-/-}ŏa>{Zt+>읻9n\qXtiofʙ8z>`=1O;BNl pC,ez'܅!vu}guWeNB2z]/СL\|qeJȖ+csАb胏>NchNP\ԇ%y!0>UO]MU^pqշ2cAZU&}ѹia6ӟz) ʘJ)21:KQz)jizjK@,t>bgL:dIf>͙^>8*zVYfڰ "6\s}Y*ꡩzj+颛ۮ񲻨[oj(fO1O7SN= ϧDS;5M]XURh>_γO6e@x}QM%,`RWP^e1>ŨcqC2mAJҍ5m4R?Wk []c4Y=e}mSul6Ks7r0Ա@l6-i2+p]ޜL_](#,rǟO_M6^]wծ-{>ڵ~;{t>?]=}wM<8,cMS=c93]PAs `1lّc,?(1wq*X Ep{(x{T`7p,Mh0,` CBЅ4a eCP6!w8Cp;^enMQ׽o|렲tEg}r=ǥ| VBpI @)(Q/|$ Q!!iDQBD"HFR(ސĞPPU?F!#a<v>b\= h۫XUD4KTڨ3rc(B.&P#,kilvf5Mls,8MrsD'7vꔧ=xsg=yO  >L3VlLFgs+C^S], `_~YG>7mXK]|ov\k~vwvv|Ɨއ~xj'ZA|׀'lr{G{'u {|yu,GrPt.(tz}uUG{yWX}%PuwtЧć'z(7x7{|Hz7y~~[~YLuz%胐'vGhx=(x{~Wvwq2sXǁ*w}Iu28Gvx:gQm~xx x~{|duUt) XX|8*7|vеY0hGRxxȂtj|q888r8|燅#Xu؂?HbSMs8Z@/1I)I ,z8wšM{ %H}8;\)kJnt9ȳYjzXr˽ ^o; j+FǴN @ rlp LkF'e=.ͤl, e1 eå̆9| -ꇅ鑪͛۾k"B Ѐؠl$?,Ɉ h3Lb{h>ٚbꌀw\_I<*Ă@ I`Y l nƮܤ:l DzZ1;xwqƆMZP̠}|ܼ`+׈-0 ё̟G{ ͔ >~΋w}˫m ܄8ԂӦ^C ]ZR~T!yWmV)u]m۴>hrwڠ]ތקIȾ]Zh jbJx>+k,И}=~a4Ca,þa*R;U+[j#*oW8ُ#C,,O,Ԛ퐌TV,ؐ|ΙoZKZ SZZ?ZOf|_ w8^̼ܰw[L{fZi}^kշM8𱅱njZYc# ¯Պ+s9]n(=\-iOwEؗA\C0‡ )8`YI`D;:)Ɓ+S'p\?9uO,XC'TӂOa4J(UjuUP*I[Ţmjׁ[j[]L=݂K0MŐ|XȖ3hXWqŲfnӽU+g!*výVV@W.-{K!!wUԸuj{w{0X_a "EuKE? $2 ȾDi=u C#HN nːÁ@o>H4Q '̳xȵs䊭-S. plH(jjcK'bsz.2L/r3"M4\3M/3M38S=ݤSN6l=|OB PE,Q?mF'%cGN+GZJ#r*;Jլf5Ҋrg_ x@#!@W \͢ ^j-OcHn[0p}V[:Wdhl>@v c"zD<]!}GJ8eiaZQy鵭 .XK7Wf3!ú*Wz gH9U&-dvv]O(O K\>3Oɖ[EU[.<53m|Dmda Ȳf3(jj<{#ZOek,Ɇ"NN:w o:fκghqZU'w7ً))"VZ\(^%ZsA/ c[=>H&U#C]<'L;좉~z{j~YHZʣ&jgU~,r>`.q6,US:nRHDפh2MYMMmF~-{FZRVͭ#Y3핰{RQ!/EØg< ,k~ջ x2<8Tnjb[t;2#²Gfg<ω 9"]/%_X]n2=cV[|vPmjqñJ}֕|G$N9$TX@Zk>(IB )IQIcI}. 6S)}4H'$\r>݈ph# Gk4a_SR,#aq[X2GZ6&aDC` pCN.W7Cg+# 'eZ"KX?+V\΁lqm g&!ǜ5`BCC-[>$$xտg2$ӌǣp*<0wʻ~l ŗ¤h.PEDShSPM+ÔJ*+eFj"tEy8n7D oJR1vPf99( pr%DdbWc0eHeې@,gWDo>xu8;ЎQU;ШR$u;-kհDC\:pfQ+(/Ll_Ԏ^ewCpVG*b]KTqєF(kK9l1 69h5es=+lK 6]`U| E3T <Hu8+e͟6džFTtQb’`ɢ U(YIL՘S0(s /VN_e1M_pIa8:ŕ`>:uOqĥA](GoaUV]i3nCn:I7}*!{ܔKYiqJ}V/*]!޼BxN#9v 4M\(-sKOP9-$e5P1_`zO5t}Y$R.0",0{@(?NH$ ڤ l)cͪ?֯0v;Weq%e.ZE)6\x-*rLnmaB-LznXaG'\:z P sܺ'eA 5z4!9VيG1y`5';={%Y&yѼ,dKx;IiB2;5FZPD["CڃQsL>,f~ J\5E._zPAߕ{Jkńr1H`2$0uÔ\ٚqg#`.VLǫS22rB[lZOYsLeMg,o>oX_EWl`M3@,<L=29Z9Lk@58)sWоbc"= :5:\à?Ӈcrl=r+$C!"[@DN*oX=310Hp 'A $p(4jga!9˰*7Jxzb~A&+>( @l˒AԸ2Ēh-ܓkk3\ˊD5c H-#zy<3s3P)V\rй깥%8B;~ h31@+S6LzK*FACı{/jD&@4y*Ԥqy3(83~;=Bx%}ۯ<;( ,,܊cd+\iH.Xk!rDȐdC=ҲӊzX8|J7 lY,06- {`cJA/KHWK$DX#H0|B<15c%TȧrP(tC呈b-)G;:&*.1Ec5rC#:Lk9<y 14 X"vdKg!IsCr{ꘐֲʢ? y!ɱؿ1Rza(3 B[.S&+3 c$$uɥX ,LG#K<c$K9+6T9zHJ!“B?X*;#ɤ5tHG Fd3Yc%#t9 'OQ;Ї(;чTirQak/T' 8^t*<(QS3"]=8rJ{I8-] pC&PG;ɅC4B^J @E $l d4! qTsIͼD-0M #T+ 43,2XT4򾋓J,!Lk"G}H]7zE ɪ *>ҮT.V]0]K+ 9hA<,#I"n1?"mۈV JDԪ(MIJZFIL(ǹh9QѢ)2gG\S ԑXuסc83<͎U eԊqt3RJ*&La@]Hk$J5Kk:a)U(ɼ6+P;1Ȕ~ ó{BJgLFLؽ [fRZV{[6LZ# v4N30*AjW(;B+a*RaCL" (WwO=}pSjIۦ '3Ѵ<CNūoA׌O-%ߜY1B,K!->:]`M/ڳM^$Gc̡E*fU>HcĊt(_!"&-܉I} <['Z :;M<]ф:BR4MЂp*GE":`1`n‘ݒCߪ2o4^٠N> }LÚ e)΁H K3U5Zlܿe(ƥ^1<5];6C/&fTBb"v_ Z}@ [cM^:δ#>:Th&gr(׌uQ"RtYIX N30-­ eMtν*l恲fȱqXg~X[8UQυd@<N\h~h.cӤ.D^JT%+ Ƽlc6.-3l*83^O< eaip A.,]kWz)[(-ԼWgsəj^.$G<*j998чр|;e-2C \?a#Bk^_C@e,.F k UÆ֮!#jHBi[(58$gI&Ǽc#ކ6QW[L-QBcnq#0舟 JQ{TϮS`N4 <ΐQkְR;+oNR%ľI&hfVFnH- fG &slVA: zB)> 25~S-M:]%_S8'(ܴXoql9šPb>`[s#EٷQ By)_Lu ]b!jBёp_~W鑁{빖 'M8&UeRĮSgsPfjFpj@7=@Y;?t)vkL8Wp7#77:[矦֛K8uƠ6wƊ^tS l%Mw9gBjk,rzelM-+F(ݝ oʯ5w{31cGmT<ִrStQ$Ȗ%gr E:$#vy \ E[*I55G&.=w5cxSk'54 \2u#r([!}[_W]5/!s._.)gQ}zzvB/QEJ)Oi, ; Km"Ts`cȯuH =ߞ{-vPh܈Kt3 r'zfpk:r0| lߘ(dMBf'>} 3fm V3?N96<7}~F7,jF~WCLQh緇j>A:6O6_)gck䐱UT&߃Dŷ飝ͦ,X@\=} -Bhƍ0Pf"6|(QHsUn%8G [ri繈-%"EzԞCAu}Z5=RUbĦL%\hVaZh׮emYjE9Wo]w}S`f= Xl&+cʓV\d͌=;0ϗti ilצNlps=ݻxV i[ U쭂1{sձRˆ!n {N.#c&|۞h7i 7YKRe%v ~ [Q3>StU1DAȦ[S*%'0+qpF\IR^S- VۅfElUWm"q-e{fdvۏ6}2gy;fx7ű^`6ٞlzU Ey`=s"EV謍Yu+'K3=1P.ēړDAQʆwѡ~W\HQ@+M`]g1'Ολ3TM?R~POS_G 3sEx+f–Rb.9xKB6UF&ʥn&j1W WǤf A t3La+ґ׮Q]N1h;(H*tH/rhBtd-]CV E)G9# 혹 I>}$ YP5H3diH25#!A0G6tR d'K9]+UʖV# UbZeKXK hl#kI*5Ɛw+QTB2Hl7\jӋ̛(tR3i2 fMSLu&f_rcePpzR8!FP[CP.ԡU(YZ'цRF!Q J}hF:Qr$==,~l e㳠D+NLaNmӞU!KpA JRo5$ O4 M{x4qs+馕< # ;%DZB5uh( j(uKՌYa(Z@N L,,K*ʩb:b>U͂elh#+Zji[Y#DV$ؚ۪&nuߞR/2,J5m3j{շ7THk]-D;X`AG'0 ļ28n+Bb◾~70 ,# 60}??xpQ&, Gư3as*ԋbĹ801e,4i_bܹ#+ZrX,A6'xn)V6j^37_ps Kg:>*ֆ@D5r{5Ҍ4,R@.ZAԅ"/Gl1:ގ{3LXv鰉џim7}h4{_GEgc eRՄaq` ǡ056n!Å~46sܾvfud--<̷\;f `?T^8Á-솿9Tq*t/.+Ѐ!Xr}(?Dgr{)Z9/-ܝ(i>T{lP*jK*As=4L8^̣Z:Tub/vɾh衿K$(NwݏL$w,6\dMJ;O&PηH*Ol:bi7[g @ Uz֡BW4T}:~CFb`c 'k}XbgRt(J} }Rg?܇o13+_  l2aTC8PAT^9`^#A?B ]%ޗ&N"&fb'n"(bq"{9||T! ,u6p`Ş %8: :` ¡1]2Z6# 3~a0څ_> @Mݟ0#…¥##ĝc%TH!J." !T."U8#5:#Ac5v BJ95B&$<6?t ;dHB p[C;^;ˇUQE"l0O#D-#52%!!F/N5>CĂ"X<eYY9YIC;pAH>ح%Imn[fBKo6%%ThW"=zN:fb |VdlV%"_eUxNcyQh6Gv vҧl&mgnp'KΥg_Y饅e}J}*ـb*n>X!zهzE?$E(NrI/pm:بI('] I}$"iR(5)EKI/gA,@0)T-Wfhd]wv'z _yVh\*FZ$JŚΡw(MA^|^qqiLƆbb' IjTh©18caffhrfNrB~&; k#L^$`hlXQ&V+fkrz+~mصZkjҗkjX%k^봖kj뾮kz+5pW ‘AwVlA"&* _WdF,2r쑪JE*aT>ʶ싮Inìl܂.7 eUmRJeR£S^D:-BEܢv??C>8f?Tx-zؖmؚBڂ۪mܦmܲݮ-ڲܲڊ--mrdbm.m.-­Znjcvm-䚮܆rz.n?-~ڭn!p2 ,R`Q%Fo4_ zFm~)&)1,j&†F#1$Co4ZcT2oEY>Qd㙳BLvYanڲnNnؖnFڶ.R:f.>0p3p:n벭 m00؎m?-ڭ[pb í C qKucUzP66c>Z {E ~1N=r/kl#~/C'F$o!!o^7j. pn W0%[p%n߭9j0?p 0z6q+=$V2&{..r-g2m;,K8B,0s3;iô9x~Ztziյ,$6ޭԀ~(`fL % e2+Tson/Y%.-V?Wm6@K-Fp&Նm\6n*]2+!/0mGC.g0"snpv'HDcFr C*K[ʰ(s:1NK40Sg 9-HsY3Tq*gh\3T`3U"^fⵞ g +*=F\N?.-Cnb5@@e"C>3L(nt rؒğn%gCSnis2M0GkGl톮O/66ikvn;f,-|HC2C,^"Zw4d8'&嘒qxs3`Xs^qzwZ=j[Z)x~1x@S38連c+a)p[E-04GpLny-ƴPsnn#7B1̃ܶq4 SC&v 1Ҹvlx Tt-mo-rCqk28C9@|NEՌJ,cɖq{j6?:,!yU޹<|}T'rݥ]mj$K4ۂX 1K:P::cU]"ޭxvi@stקA>1-b.É!7*'vDccݔ071.C%;0FKnOS;QO2No{"9c.xv{%m,h#Sky,8B꽿Wt4@;OܓB%opp6l?vL+>T68<"ic@W`_[|;x8g1#,30 sImr6jE_J'9|oStEVҏ8=<4W-էM˭.SsykJ'i{2/j&CB #3l^"?J`@"@0?/b"~9 `s!61nk' >ʯ퇾C#X`fz'Fh}3*;0td_sܦc.O qG{_c/ؿr,ZCky2Cۣ#)ݓ *VE:Pjx#ka^7_<\/_~ 4Ap EtA w_G2_ɓ rK-_R܇hYs&J  ~`hԟ0 tO#2Մ_aSxP+ׇ^UH٬[yvږ[b-̷ϞsǍKf.V` /='cɑ)O\e͙9ogѡ9;h̦W?1דSמ v˸7{4oiNscwo>EgO9cgG^ ~0a}EțOUaVdaywy 8hZ=T.J**„Fܫa!(İBķjJ1&bkjİ,lQOq#{:hCd' ip,{q)D+öfʻÏbg; Kl L6CM8ߌ9:S>sϯ2!<42rH/$+-%Ƕ:rRD%5 C42S~Q(J2CSS|Vu; JFdh_XاewMȕ/YN?EzQnrI PF[r3}R,J߀QLrӬ0Tx1UT ^S1*!êPEtwK1 +ML֚muޙsyb1b ,#*V;]jKYi)ij#!>4l|Ueli,F(>p W| e"Rb S͊tj4x'}ԭyq'KM|QxC#_z" vTa SxT-\ $P-TPnBl`}ȝ/Yee2p<=QHaYB6疚lSՏ e|#5mF`4맾#ٍD6{41tT'"HG.#%YIJ^r&1JzYz';YJNFҌkKLISm _+;5j|e,WReιǘ*ySL59sAi3a, C=3[,C[FUM/?WM9.SfCR/G3R;F45 UB!P:hD) QNF5ьB4H=:҉)%)HUҕ^-MKiZ~/q< 36ΠIeGeLR6؄R*:'F7uh! ;:辨U嬩j5}Z; C`WʳeT)/`ZU6IḇՎd IٛTL+a83v:sf*0if8m?R616-;|1'85wMġycc@8&q,As[4%ucnu*ϱ}ѵ=75dV& V|ͯa#K$2B h`O`NPCE_` F8 BUb2&,G}ϟp!{]WA j iv|CH6r\ڲd7![r^O9:dqE>~ScUژ :< f7ggo-KlYx4Lj:$cd+U(!$,!2φM=a Zl 5_hG}TY0e(.lرoP[isHZ򳕑)u#-uyH+?TdChۅfpVwWE쬨rV}nAճKƋ>fBk,48e xYp)| ' 7nh1j5j؂y[Pv}.B<6Ǘ"sTDmdKBk{kcI֌6Qg.ױJ $)r4,V._-^wu;1ۃZy&qT5a`)H;xi!| X#2ڊ;MPGNwuԂc}a9Hx#{+#w{cc)yY%cR[W'?|&=-s@}jD`EZ38?\kW蝤n'Du?Oei`&вCܔY<ϙa,B=Nf10)n6`bH9/8#VzRF|hb")vP|±Kk)K'ޢNG/ +%! *ꩄ%NMLͦceL9JX ^>%:ȏtb$O-BɏQ Q qo gY mB L52p=<0Qi'n.J&d*(q$Rg,̝h$ &Ɍ{ %DoD%V,Aegl31Đ!lyQN*  (. xh+?;2 $LY^aQ!$ !rQSNs-p$k(AK>ٶ+pE)7b`f}j"%' KkK.0#@O # j #-!l ///g0!2c 0 zee&2zb'wq~D UtcT_TSaQRNS6{$5q_6F!,/VH;22jc̎/S&R.K;3s;;sπ:,n=13S:%>t/7-?Ovu'qJuH0Ev2g4Y@> Jkvq.)g#Dڳ:ALcTF !j L <ǤMC1bHIshIII4:PrIP䠔@dJ44EJq(+/bC3I6+~ɭղb |2\nQ /&(R.)1si @>UbG3ctɕRUWZUU]U3VguwrV)IU{5dnIxUa{|5WQ)b5*s79< Qgخ-;kkӲbae!Tơ& Cb]k]]5PC^ߕ^a*___)#`k O1 j:8a= 5$6zi¤nOd[+[KVb,CkfR6dAvdbff'g\LTE\7bhAyi|fd+YDʍ @C8CbC|9z3v6(Clmc8>m8Vnvc1cnm6m4zl6n*DL\%c6dg6gJ{gvy(y,g0Wg`-La .Oˤb3Mǟڪ5Jf2B.۾ꮋ5}|wLxM}%z!eTSsݚGhrMvRke3k867}ȉk0| @PXQ˸)lh̲,v,7(kHlΞfw(gQ@ >Uh lqj)z]0A%c)qmr {uFj)qԲVذf:覮~LӈJV}xp׎A3EhN_ E3j sJvȇW'~\D NK T) afBXNqP D!옎Rkkapz tFsq RjܼeJB@ө{zQ(vD8e&}PW v:xiߗkfO=, x7 Vظf)ofD;AYH˴658;tKx˫դlQYR'O1uG-5ٙkeiH?ZG=ZE#$r7؟x^u.<+Nmsnzw#i~92m :T;$`* Ž(RM2,%U!6#` .6ĪgYv~ gfE[FDުyF2G8Ap.$B+N#$^[ ziw#蚕OU$dG N!:ˆs 哥,I06samB $m̎.4 :mC+Ѳ]Ѩwh`fE#b:s sù!3Sg=ȭ (#8  Y(TW.^vײ{RBi K&Qlp [Ǡ-"¦^"72+2KYF)h{%N%a̜ڶYgNnKs!aQRǿso\u{:e)sa,"sub1! E] -ȍw}Ɯ˼ukJ謧 }nˮcۜQ;fn ʫ.F c,2} O* Oү)q=/$dBX9?O}[_I k1:ӹyǡ׋sdҬkrY #!ġd#YiP-)UQzZa՝WSӯ>TY<]^Zw˻W|ۏ_|4b^E|bT R檆zhè&tjת_Ǟ4ַaۮ=oΚ8떮8nu.m6胆65wX7l#6X>ydD"$UwzX^[fOཧF9&FG$K晪u}mieyg#\z>`9*gOw裐r![]8B`aة]Sb}\x>+\ zE֊ݭh밽 [6[oVKn2km*'}b,d)Zy݆ˮ_(O&*N8$p2f:C<b>)v_0;fra' *,r4l8ל+c@,46,P촲%5?jGrlW˜__`2 x*V <ŝܐ(^z鵢_]E'^3x?.G^g旟 w菋W~`ꤳn및;S_㟡v[?/y#7WOk)jXٳ-?MQ7w>"[^8F}t/0Z -P[94AKP_1 G?d{tQ`@+_&V,~yч;o03|H">0X(F` >AqAU|TIt;jp"H2OP豽*@a<Ԁ'Z!|cE>$$"{pw>̤&bB$/^X:{(L dҏzb3L#X;nAnkD*k? "O~Gr40 ?{e?vjZg : v$2yd%B$  !y:r1XD<ҘjLiJuAyO.G9 ,M|u~XB#@X 4)@Q賞4fZϊ=uN *AQ, JhMJժbl,^N`)M)HRD',I xZTHmNju^sJ"Ck*]zxqnMb{ml %CƱ s kC,cׂ (DB )TMl.G-Qcu U$̓*gR$D(YLcvn.YB`n"5"^BX,hjwGAѫL?S"Vf$`K9A.֏"J@FXkIa/ݛ_{՞=iQ'>ŷ"1"ַ1XǎL/b : Vr/f,BmV>}r|tRrL:/IG"_^]%hAЇ4%D7ю4'-i zѕF4)?o:љ5hMwԢN;JgPKdыAf;֣6\V9`Wifc+Ѭ6e;{5~vlhS<Ejk:R Hب 64oI>ӣ#xQ=o5Ƶ!/'])n[6q=\v}lm[ē${'D!ĔhnNts|IL_fN+IgV͸k^;Io՟ufG#ϸؙ-vu k'Oiy[&ޫ=P ӵ'kv᱿Wx?}<]8qmf' f171dݒ8fH,|.O-l)F cy%z̓)*Qo}4kX&W~tc%|Hwp W@ u!G0.0Q|GDmTwm'tۖm- X7'!'!H~]l7985]Br8'ow܃; {yFx xtF1u@o4F&N4 `s 0˗}5'Gygz{Hm'0PGntUǃyȈMx}A{(3vshOg5b"Dbk*+d"[ف` RO Gk8mO1wu%(z%}0~cmBw8Xnjm'n8H8vpĘ4Ȁ{C(pH=**767V5 4k(';rב*hsXugׇ*.3Uy$|+8Xn#$-!'r5yXnt_eMw|G_uuZv)f(WѸ'Ĩ(yq1#`omHr"(yq=*_x68XG pJɔ9d^&󊱈x(y\s\"ʧ q2(pGw)SyR,S'5xrKؘ<yF>g+w3bYyط")wyuIA="6gA<6xE6|p~1qy9xXjz9',R~a"qZZDxW++ ~ '}׌3l *{{Zty@k@o շuBE'D:GLFB}2z&Uj'Ev(Z'Ihd)-^gNU[bPZxXxdGQNb)/.2b*-,H-GJV"Zשz.jJ~CVLꙧXY|cE5\c545ʫګ5CZFZw4j2-44DbJ*3͚:4EsNi1VjMw8 d=ӳڮS:9j=*;z=9tdqUSID7kD)mgNOPff%"d1+ٰ3R6QaBnԭ4pI7gdfÀ_ d0;u1~D3겫(s6\Ȳ}^FXEt+GUG 0uaa6H=0c}F$fY۷Bı"YDž?aZKDK[L HrL;^Q^F^E"* JKgP~[D|bgJ&!NTdyu/O 1O\pZM[Z ^+ZEBc_*Dh;DoKQY%uRR/`1 lU_WWI%0滶 Z[WtJ@wZe޴hY *QVpVV᫻{u껹yվt  (*vB{ bp6[=YDi{)F 2iv!5;JVK\}#eɵ\ ֥Յ Ü{ecŰŔK-(w;,R{KFơ"*kK7KGi`s4V N Ghpa;  mkr Ep\buƅǴ;= Y!uڿD*HK,o)Y>g|ʼ,TH"j!]|ok/wlTFgiivͨil8Lh|i&ΫٌΞhΣ΃ih|ilϭp=l G|u㧴U9qΑ:sұzvh.~ 7y~ʉ%m%nY{ģ˜:>ܱ.# ?qvX~:h YlSZlw/%~xJb*ךJz~Y@*;kq{LTg&&}Hw{|l"1=שbr=HҨgy'J\{֠ ʲz{WrLڏMm -})ZBH,݉lc=ّKoL¡k!;d|tYjOu+ f+y'}qzrEqvs 4~ѐH-c7sHhwIi)ӼG⨉p+8ɩm D1x-2R(+36-N9>o/Cq8yrpK*TWf>mN4x 2^5N%qnl,)^S"ˎmI"`x̛pK&#'VL KY$ɓLj.=6m;9yVA钎%|n.iF6Ap ݲ:TkU€a!]Yn%^m͝z"`ٜ y(+oq=V͖H UX"k@snᙠ)dI[ guz!- wu!xqw9P._-M*#?]ox8)9!MPZpqv31nA1sGߓ?>Δ#7@јz*E"ҼaMsU_n0O~q~DHРƒ >tq=!6hQ"}ۗo_H~$E~-]'L5męSN=}TPEET)sn>}"Ti3frBc͊E[6Ymپ]׭\s֭W/߽X⌊6(bbʄ0l˖9r Q4R=x2in][lڵmƝ[nNm6>|!?&xPyr-/wե[~]{vؽod2,oA6Y><:W(/~*A70B 'B` *p|{5 G$1: ?6s20:q0[#OG!1H"42"{,j8=p*IrBuL3G1o;@ ;M%\N9݌%N8@,)CcBsG4RI'RK/4SM7RZi-QQTRO55UTWUUVEQ?9|rʏD|IPBwDuSa%Xc=q|eUgٕBV *D0 5ڤmZ:͸t=)%UteyOS]}Mz]~`~UeAF8afa8[ %6rW:_z%^={QueyenUgn)a:hOn? ׎>X:d߬Vf[kX *}AZhm{FLn0[:pZ]p7ꮻfq\ c`ӆ<ԅZu2nh_ 'okjmf^|s*zz~{$?E2oԇ}dWIA&:`؆v0Xdnl^ QBpx paYC*!D"шEtH p5df$uЊ`DB"_ a샌f0K"F:VI(hoLːӮ8 G,9Ϲ  i[|p+>@NnғeXt`5nbFbHK&(%ui|-v9LaqP6GP mv됷BKn(Ia-ЩtҜg9Gzs&PAIVH8EnϛwS*$Dd䲡$'<ӣ\[4hRTJ@94+ȳdQ7iNuS4(PmԧGEjRUs΄S1BKITP.mM K_'JRjZպ֟խEek\eyS̩5SUViJd63ГUpdfг唩KeϡYfֳf=+s@ɰgEβVݬ9 G~ԶE ivD?now{>wBj4u|=ƀe7mt;=`'!?yW:~yg|!yʭ]uGUoZiC^5 +;ds,yR~ŧ2[@E,l|'͇|Gӷ~w_ޟ-*J֧7ѯzȉOd 7e+#G>$4@D@Z$9T? \?c7M2B @)d j?BT!Tt.lAAD BB \*Tmy*8'd1*pI*<+B,$B-4,-. $C+C3l8}X(=QZ0PA;ria =C>?C? B$CDDDdEt=|DAIJ4FKDMDEDLDO EPQDQ,TDU$EVD}h1X,.YPVSO^_4E`E_ bFatEdEcLFf\ctFb@j9[XCoop$Gp4q@=4^^>Ab8dc:ff>db^^4^4^44cfc8f:c8f:c88f::^^ccffcA=cd=MMMcdbcdcfffhhh|||48:4488::^df>A>d8d:fc8f:8:4>8:^cfcf^^^cffccf48:4488::8c:f^A=df^dfd=d8f:^^dbdcffd=cfĆ=Ƀ4Ռ8ې:Ռcېf^bcfɧֱ۶Ƀ֌ې꧶ɱնۧɃ֌ېɃĄ֌ې!,3i H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]˄*8K(9*SԩKÊKlͦ\N8*ׂZzjݻxJDm )NQj`\NU ڧti]~ʘzCMӾNJgXqW,&e2]zrXZ3yqRѲ-ͼX9nϵn,9ZR/θ_Ϟ4qZ_]Xjr,0.fGG]`ށ&(fpm}pm]=%DkR䕂$hP4uڗ]A)JFwjL<#L)t_fA2bl,_hXj֢@ubg@uY)b%IxS,fLE*Ko5衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬE*무j뭸뮼+k&6+Vkfvކ+kn+KJD/+L qOl_1wmC/D m& ,7(,+6q:s.0̲B"tN?=. E^2(j͵肽4z3b+ 4ҭҍ-v 6r[0|և66Xwvs#^2W7=o!6 !my_Or[zp`ȵv˾z?ԕ#κw&'3Ш/:⛔ЈqkLQz3D2o38v^}{@@}׿ρO*`>&`Pp p_F.Nz^ >5Aa 3о^c0ܟiXopۄA֯W[۹P"s >rNk إr+!WFqU4 M`ыWaC6(C If ղcx:ڏuh+BQ\1yת$^2r^SdlDjT Uf"KHk&Es \DfhFÁqxӜ֮΍8RB3}T_27KbΎ3ާLf\Sbpof,gA3$?Xfg'2*Mm_ xO=K􉳣ьg8lN~a8W PSn/U+)J\FY72/ĥٔ)С~6MhP EtS bts{H/~4^1A?^ZIJДo= *N0vL%GYWKXH_W_XSj*[:L5vb;zB6D}g 8 ;OGD:[sps-jǡ҆焉|; )wYِZ=ܪ {9p罝UI;{6yM[ԓE\X7`w[EjϲO&p6avA%n v C1(NW0N1`,XO7nN'?Q4Y/E>2N &[vr]L<Y58D1Bet88p `F0<D3BL PNЀ4A\1+gy˗^'|*d3Q:K)LP灄Xdp ;0A,@OP' ^:.H=vAZAivL,i guXjZS.5M2hksg quA$M$/l 3iQpZ Ėܧx7$VH͉ЄDrZxolr5BfzF! UTm@9.0򙓅j+ I ?'s|ƫn@XrqRA =G''>vBߡ,hvd.&'Z M["D  a/pȷ9><3xZ:baO/p5'zӋ5? oZU7ٝgA_w{-dj7o{+hW7Moc .wzMi[߼H3, oWGuZ6u'\jufxgƧvw|iWv|gv7 xmxqIl u&j~VzenWext :Xx  x8'ozo\{HpvpG Fv pigg''A5@u&-Xxyzxgyg yGD{fրIg Ex(JPRu/sZWr>WrЅ٦lֶ}olȊ|&H *gl6pw0wv.l,H(kV׌'a6sZfB9DYFyHHLٔN7P9TRYXCdZٕ>y^by`9fydj enI\YyYbm)xyw|i}:ٔtIhgg7ih֘i~i@Wٙ{9n)ys87 КosPilіll؛k̆(Am֦YyٓiKy9Y6)ߙ4`07 ?pY1py))i6 W qgwI) z噔ܹ㹝 ٓ z*ٗ09 #W-.ꁯwpwwwy5J'!P 6QКM F@](QZڡ9W Q T6?P`H^61 h:Pd6٦F|I6IL,|!h7}g}*p}'} &oQP(JqJQupdY#]5ٝ : u#j[ɝ": g0ZI?ɧx$:`0T\zi0h)8y89p6 zD 1 ʫ0 \?jy_yLJΚpj *y5I ':yڭ5 }#Ɇ/Z ZHk)zʥk ۴7]dexrH`xXx}n%)h,ox{̈́8xoc]x|hƧ:1!aźLZz &hh3 &A5[}(X6X`wzf8Cg7h6hHehSM+@fp;l'ފ0ڷLjʼȷH(M?,g}D>+q»s/=A<Y?~$`b>d^c^̔jX L*nw.v>{tn}_+olzʢ? C 뽄[ L2iIQEQLwo},ȓ蝋yi~+\G ;  m,lzWmp8ޣ]~nh>&J)K gcτvfw:A:{ISo#oSaj NzpӻbZzyx Fjl.M:+'Z-:nvxG|$qnjrʽ̪:ΝXϹYǚZZ*_2选zdJ<>O2Z7-iM ˮ 8*˚~F+I T`(4_?35#[6?/=* o=A\;I˴߿۵g/\諯t++(ʗ G( @+VϸR?/aj@ DPB [DC`DS+ؠbɚEVW*Вb-eϦu,Zeޢ?L Y>X1q*3g V b5i`p3lr8h 5|mm +EW,+(iC !& ۻ][&7)~mJͤ/9cD1HiR;7N% Ce[R1/pgQ`c1' $C갡 [rFo"V`&,m$zJQB&rPW9xJ>#;}=M廈@?iPzT,L-SIW9IF(T;O9(꿶*Ӱ]=kZ&R}ɭok\:Wծwk^կl`dUְE X6ֱb!;YVֲ ;PKٸ61PK=wEOEBPS/img/owcag075.gifGIF89aSPQɍzɗpѶ΋ѥsHT+/Naͷmvk30+ˮqnnc1Q!!qְp֚jsQ.cccNkm%3Vv2ipkokccJѺױQnIVoiRITY0QQD4ktǕ屮2/ݹΜz黻xPZTbQfgTywVٹשfNzul”izʴ& ewfuze$55"#!ʶewlBfVfw_5tedwgH >Zf^xyǙSx݆w{iWrqtitXh[XC|PX1g{zȑgip;Pk3}]{ew޲\ζߺȲij7.9ӯ@rJXaŭ`x5LZ=ﵵ{{{sssƭ{rų*;}r{}q{s}r|}sn[^=klIss´oᄈ˘!, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIͅŒi2X]<LѣHR#CjXD9r챪4e09D} f &˚uٮ.w UG942X LxBۃ9z,ӽ}LY0CRm̹rс(n8! g"ª58yag-6AgM ۳G`cռs^-qXΦt09c;#[{n˟6@.vs %@}sYVNtMf r7rSOlZC_B>Շ{?ku8.ke؃ _9&ZdHwc.#RX \ǖŰx{A僔9!@LZR?V{DϖSVR2vfxYal8Ô Ŭ@qC$lM) 3Y[1Atjf^ ^X  0ܧ'AL`P*a1 pl(f1k+Y'P*hS?IG(|)ĦӚNA.*hS"T~U ~ԑt-Գ^7?{TQ? T0 s.ؐMPU5?3TzyVP@m..ε9VV\=ZT^" nŖʾsNySeAL ^SYn+] @hc7%}3rm8a2!TRMiΑ؀ 4%1͋T>AR EuR)jxxmdb,pUܾ5%_:& j24i_ 2Ƚ>x"9N`Ox<E ӧ]xN 5sf҅~qY(DF+څ: -+Gk8(r e\KV,lc څRNQyYM(d /9''K[))K0&Cd@l0#*T^Z)*qA?*<?"y?U)4e@NcI ]@3:rou9HF9l1eB9 E,Mz R1#Djt v&"}x\'$980Ч @l\#2aa[M85(!g 1l)Klx͙$㊕I?| pSV<+rNmŀNu9<~IYdDpA0DQPLazM( 24`09Qb QTg8u4rsN**p^65&x'# #tP\qxYg2D@@UXSRͮ.U#JֲrՀ)m\*eKtkIذ XF!u) 90a6L<1,do:Lf+fkB)lv&hyƤ} jSZi, -lS"V>-JVےk;w$=rw~$oK] ,v7z$E+^u!}|)6E~_1.x =0A <*}?+N`bX~0<W0UlXp[^+xe1SX1m|`Bo c69%l_*CXβ.{`L2ƙ6ps*:x3>π~4ABЈNF;ѐE 6@Ҙδ7N{N&RԨNCMjUհE L8εw^Mb 0f;aMj[n{ІB! a8 N7++z{9o(8ܵ5nd/ZćoۚHA a!ָS_VƗmh s X )w'ӻ@7GߗDw @xg[ sa(ǯm49ul= ܱ=/uCNv5@Z퇯Nh_v}zҏ?MԷ~ vwa~|w} 7On<TxnlXZ-pu k~x}VWbnu7}k;Ǯ߸YlgVw8qf . P Ȁȁ!H PP8 k xx-8h .Ȃ>*?HCH mkP 'pxv8}Nwr7swxt }Ps'~_v'Sxr [|s8~ҷ Nuu_xj}nXvy0tf H @ (X.@ X؉؉ Ā8 1k؉8  ܠ 8H¸8ȉHHNovqi}7 Kt6}٠3'N Dž`~3ujT7s@PW ـ}'|ɇnvɷqxf8X ˆ@ 8 P Xi 2 Z4I PX % >p $& Ψkygnkw[([t}ox uhvhr5qֈr67}h׆ոvNG~7g8xM8W \tg~Z|y6y i8y6{%a @ ` F D % iI(FI  [p))x İ0 @i9itJ' W_~S|߉wr7ۉPߗaiug xܧٝ |xnxWWMhȐzw J ]  F Z`P &/ %@ i` P @  p P@  , L `8P@ 8P@ 5 `PE@ `@ s@ /? p 0 P ujC:̉k4wr)'~ԙt޸|g|)zuʧgް|9 ˇK}xu,rKW|PZWJyx /pY K pLJy zZ0 0 ) n[`L ZPpy0 -0,P8DX| ޛ˸ *P$* %ȁ $(Y c $ ;NpÜ؀\8I)L䜂(+̀KFs˰eX 2P1e bL@CS z  6 ]&|e 9K6 2ȉ(p[``tP  6 iмMfK8|r  @e@Q(lZPؼ * ؿ`  L[ * ¹β-ȿ<&ϝM­ڏȿl Z]tǚpYv&0 X `L e δ n>p p&e-eeP &  } ŀ ~ ] w߰~P >\ S0|tk;  Mλ ݀[ Ƞ8=l@[%ζ>P 7t 뼎ΰ8^^N p<攼`΁@N  _$@0Ν[.P* op nP \.$os`z= _vk`l|~@ȀP@ː l ݮsHll0n>r/nPn c|?u?~f/rO6 tqτPF΁_ pp Z`& @]р p`*    @8 [&@8P <`?pnl?|$YI)U#/){,U͛4mS&N>$̡ImULQJU:УF}ĆP2!! m^&2+/cxE]. 5Zp¡1l*#^jmp/СAa0'1>_U/xE&[gvp -l^[qlN<]KU}/{yf?>pWgϧ_")*ſ? p<4/@pA 0C+p"p,Ъ Rd溺!czYƉ/alqh/KT@`,CʂH9$C8fqbn"nhCjƍ/L 7T.לG>G$ Cd.YebfF,NB 8DRm/$U[uU|VZk>ƁL*ZFt$kjzb7qxFaC@'M7MFѢG%E&p fqfP dk9Caj̓YB .PD\!fyҬRM bY7Ռ^V3z/fkfsOK4)"^MZ!oA1d#Nf 'z18nI([QRH5>` ,&X(_]QMh 6 `C6ЃJm fLV 6UYl5(\`qԃStU[w=JG$"(m^"##j6zga9^ j%7)ײ΢W&ydaFv9b`Dǵ KQ 꺸X⼦mƩXGP m[F^*Aƒoo(q|Kep|AFQ JfTY!73-C"f\׹jfIdbd" '8C6TQd F8#tЂF!.GDIcDh1ET JbG($!`(Z1j$xNot@F\>`eRMUMK/t <% ѨOn;t+boZXB(B.Lq+f- Q"eݰcc!<8L]S:sfЀ3Cd4X _50Q0` 9)qOH50 1ȑlYPXt+@5@8v^h4E1āHvJPe@pax|x$ .ETG5pn$HF<U"F7*@LwZê%Fox eexS`ih4DOG`wNyLa*Ջk>KTlcmt 6iD@&`f ?E L ꀀNP!g{!4@:`p94#b {! t0=T( A"F`@(Achra5a lex-EaP̶ț,?3N5LXB  шhHpCQF{Dd5vQe"@\QqB4L난N&x8 Ph$)fZ@.(hTfKI; QSlTceLA󜋙"6|cas %ȅ %۔ c cK85-c 洪@F/1Bz05ēwaM Xu4 a_H Paoؠ0h؀ Ex#*!8CҀԢlB  ,J> ʨȠPa c@ tM0E arA w#jv. gFTl"b9_ (\-@ c``.$ 4WhDÈ葎 \ ò.n)h&.؏ |(00/98ʑЦH'<(VF^{yD^Ng|0- B@4,? (y-9da & 8NX+d!C"bl xC.@Ĵ?P^|p_{ ^<`؁6d؃|j@/$ C?!؀Ђ Y~P=s1$I:Y$؎S$]ИHa٦;˜:4 툋  D8BX: SMkB(T c`"p8GЀ"0DAp !{0P<(@Ⱦmp0ہ0=< Ȃ?xc "Z 蓁>DsS(d#3h=j,;?"uDghNh.'zЅ,T- ?L](<d ^('4G)4GFnjGx v?+EG R1!u<Q_4Cl"fȜ́rBX< ɒ@1P0kHPЬRȅ0 ,Z/PB,OЁ:mL0C༰fPحă(+Ь9`PhT?+K@!ȃ<˥tGMЁP (>J-h->$|fi@D(txMٜ׌MٌMXˌPnȭ}XXi$}2WXOP0TL#xApWQLu=kX|uUW(&m&X׊ (&W6(V,מ)mMcIVZQCӌmmVC]X}1ȆmMY衆AMȂxmzYHI fz}Z6J%S`Zz-y?ڜX\@PBSqUURW(]HOXH !MmWaeW%Ƚׂ-MHZb5ջ~ߕRu~mM}ݚZ^.uV݈ [\= Ϯ}R}__XMW_____+(V E_[^^` -͋e`_V` Nѽ ^,`O}` >av,-^P`tja6aFa6 b#^`>bp &~bv`ua(."b,~O )a=a0;c4Nc5^c6nc7~c8֎c:c;cebugFvrdpeye~~d$gUyz.{>hugzg{N`eZcb9&مn."iXVi>i&閶iiNi&i9NjDji꫞jjxj.]jk&inj뼮kjbH~kFiiÆj.l6ivƆlfFf̖&잎k)-._Xmnm~m؎mٞmڮm۾mm6Єmmn nNn^nnn~ninnnnoo.o>oNo^ofPaao0^J Poopp/p?pOp_pop?p p p ppqq/q?gosXssHA-~qqqqqq r!r6 G`8iaPa&c)$/iiԶXr.r/r0sW#`;bH'?+r83l.? 1s=s>"?n8ƻn6WᖈsE? 3g`n^sJtKr2q$G]HXtS$t4s-@X<ut[?T'a4όC?D?ub߈]_)8 /?785[v>tGHU CoƏb_wsbP_Vov PmDž5xj#mv\Tw(b0]pQv'fwvsrd(fjq X~]P88h@q8`>0 6`~Fz3(xqoq$?s 57PGwVwx`]w@wY902S*`@);P$`€281{(*X6H8/wctAPaX-0%ZAGP( ($((2`5HׅxZ(I@|Jzozw4?lOR|_oSWGspǀ=z XQ|Q829x(Jj0A,a(!1k0(3i͈#G#Ȑ"G,i$ʔ `Q5bvKf]'РB-j(ҤJ)ԨRRj*֬ZJ?=0idw]̸ !A&hM2< @ä́PIB@מv9¨'Jecžpt &4ԪGA҇fR1^7p/n8ʗGQdSatE6mVx̗2ٱSJV"S]Pӏe^Ox QN! :`p^ ]XY+/1[ t{*a7#5ZJH$c5C2 P 1Axq!$M:yWye(=uOʌ 0X2祷i&}嘌 4c2A[O){' u ba\QvD+\OYb]w&*ILsD)(B+z 'L0Q'0AXLALdEP&lފh:-ՆcN󌝼ӭ;.Bʅba^3a3uf껯:ɬy{0 + h ꫮK܊WL\㬙/!LJtv)2ˁƚrj^"|$,pE2A =q0в3M_.p'D[}5Y#l?˽;=6355m-4;'/uD<3QjFہ >BA_ݍ1;n?~93?K㡏 9&m:ݹa/-:l-Z:NU-vHަ;|Q\N/*2.FzbFQł$#ov!ƟtƓ =7oܟ }`>HaN`` I$ I@) dꛈP& r0s쥢٭F9P@4Z~/bhAC<pFD}@CZSb(C`*tA:r 6 ~$Tdr hh`D @-`90"P=L  8(f f`$u`Sl RY2h٦W!V~ }c#x~@ " C`(ЄwAĀ !@li2j_*W}sak&; y80$p Hz`Ǿ1M`A+`Oc4jG_2`+&VEXC(Bg;HN,%Pl'„[I/q.G.P4ґ9$ DP& HBrZX#*?PP7B@OXwnױ7٩騶;n"DfwH1FPh݆Rj\#QTڷg; *\5Rp 6rZc7[@ ^ܓ g<3F@D(D`Pal7b>tC1`KBfW 2G#AA3B1l Ap( T~z]ԼH)@;GP*")Cr)>(@ρ#Ȧ9ivj53Ee@ 4@hFQ? |6Ұ:l Jhnv!i(:6`V [0.NP@9PA3!L`< 9M?׮8@g;IT.ռkG\ |)@y $<`F#h BH `}YPW-@{8[ }4c'Erp ;U${EG> P5d{* a_PX$Eᅘ!vx  79=s4&D )C;`N)C!Gh%g G-PLBahA;ѧ!?bIE y7 QtSv-||D'^ .Q6 ,]H}BX C`~lT7;C¸H{U ڱ]O4y([ dAP u X|jLA;AH4C1aAفLD@?E.L@PA B;aFa \F.  PBLJ=!%$5@;euNtp@1Bx)6xDe [OO,ȀI=e# TIOp@Xڭ[5A$ vQ]"C% 8"Wj$A8@ $"`ؠ2qH@(@|E=BA;!:^D a7U\ BJ\-)B@@=a]~5 \5؀᛹A1$Bb"g4wae5C5C@nYA,8B}/»[_],"*] d.&rȌ.- @ @FA @̀%aJ#@ Tف XrA  lG0!!aAP D?!$B&P > sB=8<lAו)ȑ x-h1%84A Hz4 .$XML ԁe'0آفA@&Ȧ"8C)| ~'S%(V~'S'h:耶((B~NpO  0@344C/$؀!@O0@nE0dO' 8Bn'd8t5H"x6$04!*(8|ipLxӟX) ٧ҐA:iFjS*ܡ^p(h&ɑ*ba@HCq @|%*}PIH@DܫD| .n D Yf5ܑpIPXI@BUȀpj2}H GL .<04e)G xD3zO$`KYbX0DAɆA?`GD 8M˾ΐPM+vPj0éj?\^;ī8E@FA LLM V)uȥG0`0(!aaB<PAH H #^9 EҮő̞Qվ.꿮FC \@8L@Bt L6t |tzl/-D  ̢P`/__>#%cHȀ>Sl O.Ooi`DMU4G!g^T%M_А7$!KCF -)mT(G).X C ;( PR `[gB L *\g J0(iR0"@ /e#T%#hR[w UjXCU$DA,9d!S!"LBL t1{(a#`At*7;*s!Rr|PS&@%bXRF(2':*3'h2;hZQ3'1hZdf!.sԧjaj%j8+1:{SN;Sj|^ׂD|2 tjL5@lHA'PBAr%B*ȇH "\2jHPj+j4e6tI@A`+H O_fHO>?| +9.@lvu?@q p@C@uqaZ+515Z-XAS+%ܐhʵ`![1CwsNS5iMN<+sjE4Cܵؕ*7 ؁ ]ɂ <A`+h5.0@~;8a@(F?pٚs-D-Vrz0~7788'/87?8GO8Wۀ#vI|VGiA(@ BM?Ah!<vR k.`[Bub^X;x8Pn.$o0/҈/99ǹ9׹9繞99::gO\>|hD . @#Z54@`[4%@"6S^jb%k G-P Q*4ΒoRk遑W0,8Mr/x4Z5~NS-zX2B4#ixTa];XwT{"0BA]\4.l(3yε|sjo;} e<˷b̷9@2I+v< TC-ӛ /_)L /ȷ<= ?OW[~'JI~:۫=W_{2</?>/5>>x>/\1>~>>/ Š=݃~$}S/BTLINX?M ,W.`τn1dܣ<דTGiOM\]vL &DHЅC$fB^uQY~(fWLD_L3iִygN;y'x,b9jTSVzkV[vlXcɖ5{֪_VÆ0VQ!%,<0|ш^Xs /ԐP}dzsf͛9Dױ]F%=kWhYvvlٳiמ.jĨ1倷 vFr0sM Y.XGCXDt<ΛSw.gE# ye˗ٷw^У{tiӧ0+F{7IdpC[d 8 &7Bb;#rBCOjH;qƗ`$S&<>sa$MCM5*R@_` YFdrC` a 0'Oܐ~z`47r9~3É4(!/&1Bj$Xr$ET@(b),]}XeU`C >HP&8iG&X r€F _"9n R`j~LڴKiH,+|I]8-f >X,-Yxaiv@_j!K*\_ 6U1ݱ_O v&0~``ȩ0iZS{?ZE뮽b|ȹ[LD<:0x>o4gyd76`n?YX'M~-$!煗q*_s %!?]OPc#~Pԩ~3M(u6}a}l/'>[yY輔uh~ ЃA.O7@ ؈4PH` #I`W(J.X%0= U|$?bl$ I'!G`^LP2]9E9DAD { 4@` zu@;3]LB;MiT#؀JqXG;p!}:ͅ*GAAF2L(%h7\@ YIZ؃%tt2|DC-`"iYK[b6.yK_f/`? Ґ'#e8hQ>JA  .Lj& pP@ %Z&r*SJ>k)>OzeSY38A rA((``r.rS`9 I4 A?991@+JITE Y9No /FF|]P_.(5xZ⏩hQ@ 0i2xD铧iUZw s+т*D@+l` Ps?3ӬBka)[YzX_dM/[ZӞ5'*{}:=%Ŋj?H -_VU.j}QVyer t#;Jֶv+[ofJ⒖UZYҰ^3|1\~Syb]U$>w%M53h9nַixgYlM$ *i,F]Jm j(E!1cyE2#+AFld)SyOi 6H/I#F ꃍq>XQ jv6ϖ<vƳ>ІtQh?7Z9s g$L4/85\iRgzT/7.Q] ׳:Q_dLF󒐄0:ZuXm~sgm"][LHE3x@"Pt`*Vc |b؆ X=dlk1v 4p=A) H hL$oARPѸ\\⣪HVŪ/"tO{5pD%ķ5p`*f(C="F@نC@wLH%:h_L*|Li }1 '}I"p ~' @@p3v sa |v5d #й5q,c pF3`#&@/* /h[ҭp 0 $0Fob<V/p Z[[j[u[U[U\[[˕\5]5\U]5!imU\M4A!`_?@<_?!6@6av m @Ha_=b`@N);BOAdIdB}'r^H|r \ٞL _?,Tt^$0(&g-0 ke 4Zɼ9k5ЈtP(Tp?(\άVdʕFo/,XȎ8 6WtAsGwsKs;7u=XsAtI7tgtC7u[wuqu9pá>x>xw $DZK. .&fdFuB a8eE &˽h$291W}$}}%EoE73Bag")|v04-A3qfrrWq-- (0"& @N3` g TN6& *2 >qx I rpF0c+ol"?,D'W/ p@h Z Ph-2u0 d.IjtO! )7^î ǼK} $&8&B( `1x `\  ޠx B f.` D =J>T%?#@5YٙYٚYٛYB y6$>| x"@ @ Bؠ&j FP`fT"j ~ٱx(0胎S?[ 5[ݕ[][u!bg!`Ǝ DIˤ,[;R[ۺ۹a[Ǜ,E{{羢5zŷL!Dc.T̤yx[J;_ٽ0 b5\; *aLL fYΧz`?b|¡=ۯ],*lݩb=*a +3CcbJQ>|0.Bt!ŧNh`@@(B׀GO l f`)`  B8z_!܍CUwvMA#i~*dz`" *' :@Ϣk.B~aQgս+@:Lv *z@!H ߧ"`62*A~ +y7\n `&aF upA @ *@0yh@zS@6`pA R')s%& .`i@ ځ~T|[. #|~@AޭA^*|#:-"/BY19Nx91ƍ [;v%"M![. oXBi!N8/.#nȓ!؜U ed`0e 5֭\zRY]Q̄Atڽ{Ht "BG \R (Bzh@ $ wA?1:ޠ( ʗ)5xBAeJ;<2g'@\ eC `15f YU矶@)fLª=4xDB@C(,Ҍ5aC-v< K -8Fy UE98B}@& JrN3(G q#@TJBG#-A}: 7mT!7jE(zF1- Y!qBa9Âc`8B{? BNJS1 V> ir YϝU3[p\wAE Q E -#XT-Dя-$чTssU+-JVaHhQ `I?c G`!J&j" 5M'YKh(F9D ^-6E$( 1kaRBƼ@B {"/ xpA{xфE!\)Q&\YhrĐ (|ӀK.4 e 4,'8 @dxeD&! T` ;!eG2<P`K#$((0WDD2t0e"d10x9<`e8  aPI ;\N5|aA`\:FcwB*`('"jHn%2c.SkLotAV CTrdtEy+;F% 0B@`O36L"I!h7" {BeDspe `"EꐵébHpi`@ 1,ȅ2pհ@0aI1`Õ8M#6 ۸ 7;(:. 1B: թc$ `T`DUP4rɬjuT0ew,YϊV ^щuҷtH!,`A(;ʁp0EkGM [F"d0 Ȏ3) qb$w C'rӎ>=L~/>o#@ԏ*<}w-N+dx5`!E6Bjap,s^G' '~4 q@G7c//o/0!؁ %h')&H+/Ђ0H5h!vݧJi_wUFVg;ڣ=S Cۣs=L==c=#fElDǦvR a(cHe(2hikȆmi oHu(`{ȇ}X2h;(#w)deh(ЈȈH8]؈Wp lE ~6/{q/ʀ(X 0 ȋHݡ/(>@ɨ87:,Iamh>fz86Kڱ m)Θr#Uhr(ڶIRJ(Fܘl/nH[H[SwH H t瓏 1h wɑ !Uim&Y)gs ɐ1y⣅lՅl=?#)w?V*نb 2'Ozڨc [ aB" pZ8q 1``C"q Ͱ1 S@KS @Qt6Ii G  >8jP)hc7#! gK[) iI a ,: 1VA`  #P4 S vduu@;bY=I`ϐ ʐA8)cxvdhQ! P ` 6 y )yN|PA2)Ð)`M^?0;8P@( *)`0~~ǝ/Zv|Vl ɶc `Π0 2 )6Q * r@ӵ e"qrB@EBeh2 V Y iIO%J R KjיN Jwq3Zqu!  !) `6 0i)j7@KaڥK0#  ™De 6`!B:PP zХvG}H; H I~ۺzizkq ˰$ Y E_M 3W: ,G  0{ ; OK @CC89!b f `πMɭ-Vgd>PA Š% p 0`ɐ  y `P= v| F#0P#N "K!PP0 Ӏ..4 q  ; d @ڮ? P/)OD 7 °qY/@d@{F@P[F0e!ΪZ:x?X˼ Vx>*[)%fD9{^u)s7 =f4q`ːRYl 2 Kb+ktim~p9( ]0ˁ+;VY)  wr- (paf\t& +(2im$U7L""eX09@ 4 GRTpUx: : `  hhzq:IR|ITLr5|%zbwⷾ:'PfpN#`f` Ro' {0S{ܝPcm/ :晹˻˹  ,Ll̽ z̾e,ӬˆזLgƗ|NIbp~66oF r<'ʮc66vdVχ9}9gj!nb+|N14 g(|cY sf!M%݆q&x*/ \L~B ~pu2Pz0qP` ( -czvH/(ּUlI\],). yFU(* S-5y`YՕtׅ,cK~ ca7jٓ$zMٕ=5 ͭRi׍VY=Cléڂ>g ..Ǣ-- `#&hB" V r3 ! a a Iě"&,ŭ(ܿ9fhQ !y"Pe3Хp$0 ћ=P+SQmھn-w P wip  6`- 4 *Si,| б;! Adsp ]"p0xDp€jЗ"!p ?A `0;Z{و/zM㛊UC x @9N0PBѐ0ej{ P) @ ! p10w ]◭OSYԋ;  P ϐЖ !dDJ w  $pI"AǠw XB `C\:/V58O?`Ί@ PD-^Ę! 4~IaĐ%M8J-]]CX̄A?EETRM>UjT$ǨYk^Xs+Jm]r%[uKҵW^.udz% :tbƍ? 0`nŋ/$]P-޾5tjYߚu Tc.\`0a*%}w`[[5>~租EZޯvV?Ѐ{,#̧>G_%h]fCfAvЃQMЄ'|JU֔` e8iS) ܅BZX|ЈGD⹂?őЇO!4&%ъWyhC ʧhxŽYCaոF6EKv8F:/oBEF>я(YbNѐ10C쏏d$AXQ$(#ĭPe(B:had*+TF!QeIiI'ҖFeɡҗ/(O]d әϬ,UKdVS*b/FhvӛM/B(GЗr#ʚ,##oӞ=C5e:s4azgȦ(bRPB@@RhBPtEiJ8L6q(.tq,L7 @CHV t4±HflaTiVܐD%QBП e@&hp`@TC`k(0*DqtG*ql[9nTcXÏ.Jl {6L z[er uFַ]q o|8Ns(CZ@J@2p~ ؃a28;H;VMdac;bOĆ$X&\B^C l8#&(Ʒ G ;`1^5W9&c!b, =&3{ېH 8,NbJ0%0H1dB0H d! C (b oPc"?k`~rgˉq9i:@l vI0|`d0.P`4 X# 8dhxt&fR޶5(?*:p< Zj0 18@ 5 (J| b@/d# |C0^Pʐ G|K 0`mcؘ dHX!4nܤVv)x0@!+`Ppx8Ёac0\cpX4DЁP\|ShBPmE\t <?EHPgD<1+["A%ǃlGUN3p8 DȋY$KlHL36PȎ4;=rtIH:CILED{ɝT#M$<$l"$4 ^9aJixJJʨJʩJdʨDh bH#V4K؅\jDc˛˼L" LKHKDKJ-#@8HZ HD\$^ILb(;{̸x̆'Ik 5u{#(q,pbdHY08 qp7# `[ cHOG@51]X@c[`S0J(4x1s(0X#8p+/CI䊐^? Q5>nL8ϋ:^+ #3 6ІGcuTWD(=?8DQLҒpMd9 "`@= 0{K#(yq98{xB01L22sܵP CU"h4h^?kOЃ EznhP-YP~hh```#H:O zPT`W0 tU + xEPp4XNX/c?%@y|? Kx:ڊ(66~Ml4.@ .9`e#H.Xe L4]*s ؂TM O>   z p#FP'l^XaI%A#h,Hm&؂Xh>% fȆ&W8uqd ;!;`M8ry []<]ӳO11 Ptd]uH^?9GO%R p^*Sˠ ꨖjXqY n]ۀ`  xgxT`?Hgh (;yp0ȉU8- hK1ǿ&\ : fX@ix8MtH@gh 6=P qH3HE@m849x9yPn3x&;$7W9cE>^gHPPF  ?T8yڐǔXFYN-J2Ҽ^8cPM^qpMidTg|}kspg`tpg]W6l|ņiPIeh1OE26catxuo8ra_TR3G=w{tЇ[Gjh-4o2b`p`8%tUPmTt883:/X~g8N~bGo(Z/җiKoLt006Q$zt(@He*v0uOyMPbgI' 9h3hP,hm3)И Ѓ2RD5b;.J`wIΆGz>'~bvL2$h``$ҁby)0K8\*Y`{]y@pOhHLvH.أM$y[1(NxK.X낻ȧvYt8! `i*/!h~"y.aPfƫ_y "hC!xxb  5ÆB(q"EHEL#G^xK ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ>׮]~(fWLD"ժVb ֮^"9Fmc]NJȠn+w.ݺvKRYQjG}<[ZӨS"Nx1ǖ%Qmz/cάy3Ξ=5W)SP6Nz5k Mڶoέ{7p+adJ̅DF\3aƒ֯;QYiw-~XkC#ޒ Q- g6(&1s`: X@2h>f. ӌ,z=+Gᒡď0#Ѓ=)Ў(A MB`8pN (PH @h!  3UBdjTHwsPZ(-- Q^$6p)KR'/-Jj5FuLbT)QaU"$QjS$UeJSjZj5^duDT#PCbr,!`&86R v@*4T(@` X#&>$S7"RQFrJ$)!(qaW%;C-^,dS]Dmծ+^U*o5!F @ ;U; 80xGo@# l  ` ڂC̀DWuIKJU7HPE䥮u"@s ϥ%=TF!vco+J&Z=Xf|daLX)}RVo< j+Hʶ4lr^3f:ߙ "n 8ޤ( As5F w|H+0X2XH #XJM j($><5P(#}p¨kMtEYF"`1T$ИQ(p/H Ѡ{ݩ!>@RA'T@' o 1804E4 'u8 b aMp a)Ġ 414|b F{>#@ oĠWf 0=Ϛ0YMFIV1]]0@ Ā!C.4B!TCM0,A8=4#4 d*iACU&8@C?܀&T  A9hAp?0A A#` 0E Vu`0Dh<\BP :B.h?0(H( ~@*CC)9AޱA!p f[!٭˙V$ 0@L|jH(̀@MDwb%<L*h+=4  6.~. <4`#DB#l Ȁ2,/B1P/T@hT98|4B"p@|0152LAQ# pMPa_<@)-t/(06t* <0"!9N`|}TDjU(:G\Iن//h&<( 4PN-/V-ܤ %! (@Ё5b!5b#/P<"@2#@&<1NhAE l"=" Ȃ Ȁ&( ` D8A_A P$*JEҏG:yE(G P@Ï@& LVu%PjNV@-( $C`ZxC2 EvWcv~%wQjL.'wB84vWrw'Rw0/rg0ģV=vާz/(R,.?p{Rh|rf_ėWx$-<t <@(<$ A#Sp&I.H-HA`sCY[nȤPiRi1$Xr)2 Җb)vDdZh &)jgi&E1))b9׭)Ri^p[|&uEfA@.AA&rE1 |bV@h *`AA<(38Mh"4pT!k BBFCеzk5xz+*]!.ʨ]cD$lRBfNTtA(SAL<<kV2uD.,@@Lp~lȂl~lz,~hIC^ɒlȚʬ//llɂ,Ҭ,l$@1/mȢ,Ζ#,-ՂΞk"2FиY͜MYڴ ۶;čڶ@P츁NmjHnj2R }un.hddn솢,EnޅgGbC@@SWP@%b AuiJ…䟪pvE"&A#<. DA.cDFPoO^EC p lVAȁ-A$gjH hەH8KXFU}HC $A҂dt°A4!= BW uGDo#qfWpLJ$ DȀa"I0BV(4A@@eрCq.+#1bආKB@( 0݌I4*JwEq&'~M.ct@=P2AL 5 !.#LEEuqLuj-op7FL/s0 0rЇ[/.;21쪖4$3qxx3{~-pu5nYW3C0 m;;s<>s??t@ @tAA#?$@2p?c @+|6ïD+QM _E  ƭbe* 9Az6' c B`X6<.#t!r>9bQ0:puVhD6ٞp pp͚; B:^7瀡dc*:0Bdэތ0 m0P$Aq&!~)1θ<`"er|F`O2 pia5"e86$2`c\p֙ 2,9g)Y;Р-Q1B hcZ  A#.j2h XC ,Rp.!(#g4%#H3<"U :`Bzu@]p`DCzG !$ H)G aH@b5CpXD:7rH_<<*[fzPG8OCxrJO(6@ ppbs%> 4AK̠4# AXEA$!Eg>/ `u D%.Q=FF`%TF 1h *{.B!2<e4@CP39hB`$#9Z@9k= D`qj` Y)%n#pF&Β!a"A8@c?yD#%؀NƊLe.:t3M| L`F PH@R%z7:h;441kxY1"BBzM vPCNaAdTC*9nLScJ#2*QUj䕮t8I  -,cۀIi % O/@<D<3ʝNU]ϗ2Jh"t)@fh;,PqC(4M 4pNұFA{d(֠b:C5@?4`툣-tР8k|tPV1k`3Gb0CHkڔ H FVԋ^43o ">5mfp\hZm48 Su! Ey+֖W(ybmo{Q>}5plH, v|a 1a oAb%6Qb-vac;8^;PKA=3PK=wEOEBPS/img/owcag036.gifGIF89a@@@㙙eFbbbyyyjjjuuueee666梢===IJ ]]]drrr+*+¼NNN###III|||ZYZ莎RRRи~~~2FEE҆lll:9:VUU212nnn㷖itYB~ZyyqUST(((`_`قxwwoooãgggKKKcR`^_u777fffWUV0//XXXonoddd뾾؍GGG꟟OOO444HHHkkk! !SSS867т&%&PPP;;;.--@>?BBBcccLLLwvv???\[[333|{|}}}DDD<<<mmmsss󦥦˽mzfnmm{{{Ģlkk~u||~}}Ҿ!, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜP6L, M@ fD P@bΊ-6h:ի& i†:l!hӮToĮ6K?i<oڿ+Ta !jڰf8차Y4MD10re~R?QK^ UP$5oCbVC@2SIΒ!@N6 шJQ _d@Ι{~ 2 _D4lÞ@(zFpH`l @lh<*6v8hD<҉B Th' 4"Z8Ocb0>jI4" ?: }G*PVաjEЖ#XZV~ iݛغU-DDsu+`+Vldkb X qlZ֬umbVV6ĬAƶ2]leM .#^֊t"tnUdt `nK\ ȭmEH[Dts[Ngͮv[-ZX` @v1U 7kd}xK`ȗ @𿆸w -He.x.@ф?L@,. D}"(a@( pB8XqAN\|ze(j$M<, H(cɠ"`jH)2ʠX/-hGIe'CYcw $). X|q`Q<c xA16@잀 !P@ h0 VK XE,X'Q Y-`!d3Ig/)\amR+1MpňdQ9+@ލ4P-hws"1<"`¥ p w9s}צ.εHՀ!C0߆H :! D[`$Af &"PDh~7T݀ 10D",8V 5y+g@A P@}[@+|`7`̐ @ $P J E>o35#&yR2P2t{#w9qQ{[Dt d ̠L9w, 1!0U p[l2pR¢D"P Prb$PV1m0 VuVx5h P q eUV@ 4Pud2ܑ0IYbܑ %X2ȉ}[ÐP 5 w T>0Eurz-0"lo05p"P#P0:n/ TmPm m@` P 5$`Pl5X  1UAq 0N_ ( (o@ 0` K̄8.|P P6=)0x#9g&,Y9.)0 Ep/ 06*V+s(sPV$9y@E@ 4  m)} `#@#H#P e50RY9@A)~ـV@8`1 :G7 O7 * @]7PS@KyU 0(ts`W*` * %(:7bI)PIyVjpYW%SYET3pn+%dsY\3qUWYUb7y\UJWXY[%ՠಡĞ ZlU[zZ ` /@12ڣa1 Py>Z.Jq\jL0M VzXZ\ڥ^zSb:FFjlڦnpi &_dzxz" ~:Znyj :Zz4ب}%PzZ@ :!':bګzȊ]P :ZکڭX ~@n0 nn`0+0m]:p *jRjZ n !0D ÊǘLې=~ MϤ%F R/଱G{CpP7,+ȭ -޶ݩm썲7 ;߬wߎb %;>^~S; 0$^&~(nh>(7a~ǀ y 3?0h!Ʀ` &.{NPRn%\^`l0 # uy4_  p$  =~H+O p阞难霎,  2p` p4{]. $p /α>#0Ni7Z=8 'pIs! @G;LdH(_NPR?P/N @Z,130dkHO&D 3 SMO?UWl-:pi#;/2yi9p LEH?O/VqW?^S/@ bQ035A 2 N.=Q]ߏHؿڿ/(_$XAbh%NXE5n8"G!E$YI!EpS1eΤYS&ROAU!I.=تÏDj8UY+lW7ZYi 2PSqBzPԪwUeX_q[a@>m!ױ\gu&Fe$z 9̡Eֻ!ǩrLzeױ3o\ hٹu.i!>|5o/GKvg̥OQٵowO-:NuF?-"p@{!S?Ork) .PdB аCب1DSTqE[4@@^HoA1#Fcؠ 0r`oTrɐa̒Xd6A8 A9 :ɱrM6+ A!LSN4`O>! > 9SHJdӯ`:`Cv 'c IRRTdV[m2@dav@Rr(6x6X_ cK~ F``fE$p\!aH1#H{,`EQl)w^z-#w}k@"CJD! >4 Zx#(ef$",*+o![vecfYT551ie"CAdh!#x!Z`e\4vB Y"`djfl6l%v{ @sn9nx#"x5TNA|U@aڀf!Y6\!A!{cG@R$d!8TDP0*҂!) DdHx5L@xHbH(QJV#.` a->_"C"2f́ Dړ'@XKh#A$g9yNtSd8E~: >b x H0$\a2L &$Lp@(FtA`P!"0чA Ȅ*TQ L 5ԙ, Lڀ$h 'TjfSvFUSj9ߙxzhAD{@20&(F"ĀP@ ( N `xFMꕯ5& P( p D&/`V`0 S3$ q& ڔ@mmpUdA[L PHVD-%(FP'B &B&Li` pvFlm{`-晀 @a5`Qh$&F$ (@ kFQbg70A'kGXo#arD39j^3L d8X `te,gYY '*RqSe0@3LPa @ N`_/a=m0 ЈqF{a=O8_'KGvAS6he~=XXbkjs$ \Z׻u}k]' - fҌ>[0g&Kڭ(DڊaB0ZA  ¡ ѭϮ{ tFG X = ` ksDDx-8`mE=q\#'Pg +8Gl,3 ?-R@D'ȅ/1L BL@D~OWip["dWG"qs;+ iІfjNL@0wR'v^'| xai G'A TVF&Q.aW=G6a$yisC<Fܠ.$ _'~| ) F- !̀Rn{`t+lw}`Y_. a%Wzo_Hb=bc˅%(4AA{YPP'&5B6xWЀ9)UH(ȃzs5;@B/.,f(' aHx $ ? EhH& &;DD_h<e^?0MPPA܉֓B(*2K8ETLEU p̈C8.8@@Prb4S@fgT;6x[. <[Z0WPV(DPhGw|GxGyGzG{t_@c d80R(JPyI[(_8C`U('Ȏ0: jx[؅B(iQHu0o(r -s :tXI JJ$ۈ̰E[ 0#$Z8xxH9EB0$Y0XjSe*`8aI(ExtI\V 51T,dŠ10?@Kp^pK;ąW,8)CTuȀHGXcSZh]PmP}skk Є p6`E 'pP KPb؄{N#R (P|`LLLD@>ʎ1F<@#5>pzG0FyjxhGڬɦBxS8S98U D5)QBhˈ!0Bpa``Q>VpRh 0_EŴaR8I^ RaȤ J(cUbXOXO؅%hX`(hFp u]WvmWwmWc!0I0@%؄QBp("0݈cXFDYFY\!($~-IxcM)Ƅ\HMEZГCe`eafbfc.fd> ch&BfB0>\hd@U@d PP$:SiG8K,!4XY0jD`p Rn=sȆȁl)e]ʠЅ8i gf[{gBgPFp \ȄH 0aX"dp Jcp1(C6ه#؀''RehO`B0d%xll.l>lNl.~O@ۗ~阎@`C0쬍Ui@ P8J@v00 ].Nn^nF BZɞlhl pm  Xn.PB8TɶnhΓXo-No6)nuHV o:o~T!ixd@pYp`p_ g GDX _qk%ngq_gnp&qqir&G#? Or%or+W_(fjr0s1=+?sr 8s9Ds~IHs?s@tAtB/tQpr56WtItJtKtsXYtitaNYuZM*c9_u`va)PUr+qat}Whh\!-vm)r!f.ss?0/%vp=Ixrwpfw}w~ww;7svPRXlOxv (ݰa HtxL_5]eNf_ƀpxxݐXu[W脔Fi@yaayizW?iyPz(wts(W pzzِa wO~zpy!{xtw{o { |Oyo @ȏ|ɟ|πA|O 'r_w/w%Kx HTOTpƯr~0G} "h dG X^(c!uQ>|0[P>`` Ov_sw|g!y+bQ J d")FAh" /D< ` B~*@oQbĈv9*F,b*J(hf͛s3h3o`Q) 6b̸r# J.CȽ$BhA{ P옯] 6̭l2̚-3Т7y4ԨEp#زgӮ=T20"@.J`O+OdE #UoI\Ke$տ=I,ˆ4H@W I„)Án a[BXD'h 0G o08!YX ?RX?Q/Pd7>CA Jp}e*L`D))SV_e"B 0A"a -H2L@ @ tB6Q`bchʈϕqcl#Ё7i$# D +Ԡ 3I "0"J% Lp,ָ^  F;C"bMC2rA3@a D1MML蔧>5P;HTID$2.$@~Z Chj@s)D RleaGB/KP"Cļ&Y "@\BA ް0(q Pm @ D A&\d hlt1G)>J}7@4&6\B8v]@ l\ùЕ.uވp@|a l X.{!:C/  `c" +&΂F$NScO ָf.~ `+p+xGz|HOR#/9"$E$@8Kv dVb/s27e(8^#"Ht0 T!c bhbJJ=g<+7)ntfDDPҖ43}lҞ6c%WTUџ _2:ҭ)1r]׾:]al iTZK[56]Zp6&>wΘ-;AԠ0gǎh؎5-smli7.\=(wp4/#!asެ]4s8C.r!3^L]/6Q.é|"B.'00@ 7s68nSQtM洌.c7A j@4$A| @>`\Cihy48Ah r `0;:99N8׮}Es_[C۞|_Go3~Ec̤N&@E9AX!1 '|!HC&̂  &"&]͜ [x] UF]E``D΄ ?  `` hl? ?X?], |(D "X-N? d!ơ!֡9ٱI\"[! )AI΅\#Q$Z$Q%F%Q&&^@'~b(BLb)$%&')j% ZA!@?4^0̀.tz/H +$T 448&M` B9ƌ E#E;#;@<#=#>c??@E@$@dBZBޣ,^4H9\_ l `@DB`V. Ú^haz  %QQ%Re"?:0H0Y TeU UZe `%hV΄x%WVXYFYZZfUeYe\\e]!@ CbPxJ)C @NB \ @C CTaqVNNS1 kk&lfk@%`hE#'>! i1^Aaa@q tt(٤=NB Ovif>%zz'{gz^*H f!![9Vh>eD̍&.(6hA2gDܧ~b6&.P_(R>%Z,j.w&x:B($%iQJh QT}3Ш偍whxz+h l)v~)ri]Hʨ/DN)U)]) 橞)iAwI! (LL@!h0"鳑v(΅6~*~*n2?-1o]+HCpcn>@D +K|l: T*byhª)&-ȂuL- E4E8LFĶZDEFķr+ʅkq6l# ǨX7 t 櫾+v "樱(*^_y@&%Hwd׫^&T!%@%`T8@%dD%+@- TB#TA%D5@"AJp7d,V1@&DȲ h@&v  -֭-N" ?,h#n@+8mH APMSE5 t 8N L_^]~CY d?؁*H۴)n {@+@Q |'A؀ԗ $~ lڡg)jjToQC+tJ, MHJE¾l DRDB(@)0@ h! B)L@0@G *E%44@ HH-A |hU 60[pTx!s‚DEɍȌ@"T읔o nOnb\5-<O J h z:B(@-P1.4 (0A&T]!A-h3G߫ |r( ؛E $*'@,kL0v6QL`P2/333?T$55 0p6g36054<3S33lqb*E@-GD),@@^ ܂ !<*BD*(*(Cd[.zvnvoӋ&$@< B B6 Ll]A8 X y0`-d! (̂%@/['Ap.LHd X@'@?(y7#Wv;#;&v[6B+NGܖ'@@DFXB*@,B B Bj BD,xծd@l&<q!9- mYB}XS?yxD@B+A,/(@+(@s7@7?@tBhB$? W(Sxϝa< j:hk+!$oـןπ؋={ k.\;C a+\K=\ ;#h6>'/Sc&O~߫%=o|q'(h0!y @D=2AȋϾA%=>~'A о^/K1` ыTFI0x. \Diw+1}??$a>/}\D' ,0DL_]Ӧ/Y8Ј?B%mx #>ִyJphPC5ziRK6ujԥ zkV[vURn0 @ɝDq?KL!=UCa DD,b!bŌ c hBR<ɖ6tQwv 4^׶}[*U?yxpÉ=PӚ$-ԁ?1T߬b~ J? nB0C\CMi'+)Q`ۿoT H4;6")6`] Z͸EސЦ J炪Ɵ j"@ 2IO\) *i0a 0<2%1"I P$* !"rQ` a "8$"NHc* `pbL4@)"7 TG=Dk1r#C7T}V@,Zm=U[kp)""*Ri&CAZɄ6hzXq@ j >:Yn BhYT\AcJ!Tzĕl胐 @bq 9<"ZTRYwшBݥX՞ڧY$^馝~jEUU]YlW( L?TphXP@""Hb> $F`D B`WQ6p\d' ظ\1}9PdcW ]6@Q7hPEHZB6 8!E6'P l pݯl=XzEIARE/JXE `AF7qH 5Ԍe݇"D~ZE,8pC "A*A4fq$Ralp ~4K&dJ8$R T#" (b..$Ơ ÐQ A1/" ?,6@u@@,,xHe_ @8PO{ |,q@ ZP~ CV}}H4'ޕDB9h !.5#@!E(b$ S!rx2i2!.PP"AM9PCaDdm-AmA<}b lmPsx@+06p`` [XU,axe xpE\aEўXtQieJ A,Ec!0b '2q$4@5\m >21ad" @N@'8k+eGյZ6z׋ p5F] ~_7/s1!lB=Ayx8;ѳ슃P10h[Ps8J(⋭1Fx BD1xcA{ x F56oDD+@v 8l0؁B&0An!2_< 6F Al+. B ]hCщVsR@ @M|<>wa5jqΈBrAg "-dp_C<ь̠H5lg?і$3@*0ȁ:}O;?VP3CpA Ԣrj$Lj HBv.?" (^q_9NqO\  L۰ ߦ69wSx"qzO0 4.)dL!5<Qԩ>2H 4u`^viWŞ/|A[8)E \`H`K -C <τpE_1_d^DWYz׿7NψL ?64pPC̲K Y%0K!V-p \yh͂`/L>;?CQ t>Rp V )B'm h B@%'! c@%@K,0NO  P E \RYp.Z ݥ!ha@ x@R *p)h@,@$fJ@ RJAc*aOa (@Va^OSQlW @Q @6 @pA">q)&̓60BQ QQDЭB4Ad(n` AT:OAڠ x  4T`\ Ar0!A:!`,B1 K2R%W)JAll!ĠFm1$KL$I$Q Y)'V "@>&۱F!`-8-(+J"R-ג--RώR) */m0@!:p!L(,)h2S373;39S2.2) !26V!@DRah.l8,?," nJA:S::s.@094Q$UnCbE_FcTFgEI`^B NB'$ /4CTH#3~,edIJTJJ*zGBSPHTL&IO( @K" KBKְ ODMI)N?ONtGK5/ WR;+PUE Q1Q)ԼS,M UQ,/.VL?2`g(д S1T5NS` n` D¡\U)aVZLT ! Z:WUXTTTC. , `:(.Z_h0[Xŕ 4$ ĀA d Rc;L'l@-⣢<` \BMK] n ؀:8@)a8 %;hL ViVF! > e `M\*l@l`"@ Mm`hYT@^h*ʔd3oiV\;()` \nroAr+ Ws7s!7`6oK,2VuW8!|u`7N4aP* _Ɛw{ 9 @t/LMx;WyEu]ʳp5eJz{W{W{Fq܀f`|MqH x'~~o@B 7Xu@ ؀ GN `*A#X;6W~7&Q(B-SuSXWWGy2>(Ȥn?2KO9{ƒB.HXj"O  U2Q#1XM\8 PG l! *|QP zXavXM2"`,UzGr؀ U)ؒXን>Q4 ! d@a /ފx(sIW !A.;?Lv! ^uceݐWa/ !  !Wv%};9 <`6 ٕ٠}"LWݠ`^F@A ,(a` .y@U"*Ğ BA fA|6 V-.n#()8xuB zI) f >!́(S DAڬzP`Zp#Yjpae@́ 9_8 WbRkO .a#b@#(6`!0j(@4 4 _c[g۵f%G4&S9w!4!  * 2"pd!",!r""@V\` z B`L`#.@BJn#`7a@\ 4rA4(6!DyMF~!aJwǟ!Nm<ȋȏɓ\ɗɛɟ=<%TZ `~@o a>#*#f` ;" \$M& P !PJ"N"" A##LuP @L` 1~rX+@au<#.0a`VX >1 akx#! 02D8!ű$\ʙ< RAם]ݧt/]}Ww4;K!x ́0`k0K a,ӵ!“<o! @ ҠTeCa˺R NC0`"0R Ff0 'ب0@R*`" h-"~0@2$#$TqhrF ?r`[U/ &Daہb9<8mTT p>jtKOS_SN "pڀZ`A l S`o$!ta,"paHZ;d>yUja^ $ 'jd--hArd*um`A# n 0- 6 A 8 ?X`y3Ν<{ 4СDŸҥL:} iE9!ǂ$I fwʆN݊6ڭM)qܹtڽ7޽|G PІŌ;~̸8KI|^,AD(ຕP!Їј a>̈ ? 7}QAP0 A> l Z`x,xd7'f{iq.n`"4AD-@1B2 HCma~NTCLcn8Y(&Ds8L#2Hdh IdFdJ.dN>yS9SCQ;YU'- {GQ$ lXonWŔ+Tteb_d:D8<-D01h`/<Þ/q<\#v?HTB'H )b&C #``pBAjO3?Oyl! H#m aB$MP 5PB*#HPh3"Nz-SB9O.PF 8( Ɗ)\CRO{_RJ$qhG%}AJ7G`p)j@Ї+x??<"?08&#yXP`H qrPDFXB,$ b)mPB{P@8P ',(B5XysNFЈi I5A]`h4d@CAF`Fd3?  FLcP5d` LC|xBUd6\r% (aTp L ՈB,q7%e5 tP#H8HB$.06Qg5"a#? ^BJ1ٰS@bs%qC M |@DC;@,.SDK_ StaT(jj(D|ǘV0Ǩ5,Ԥ*uLm*RUPcx9P0Rju\j5* A@5FP^Ţa2g4at]׹@ j[=4毄-axa BrqBk= CJ@g? aq%WQj_ r蠂Xҋ:Mْ0n Z w.%K  OJw=Y:VW]u! woԠM@ v']wA Ce x@\7mz_:xz0+ k(E)wujxIbx9`kbUH`yǦ1!d9 Xd0@r}ǀ,`+"2< 4Uq\"gVf)ذ3<"~ {)AXhHЉ>4 D6҉DX[hKPҚO_ ԜvTq"jRWԫF1O F !k0 fu} j`էt7jc'ٿo mR@(`TZe=o'܃vN]hrQ?}6d7Nh{K|[&x o@  (t]Z{rI+\!7M^\Qis0m;#bs"<9=A9х>JGz 8ПN:ϹPɞu񨣸.  p8 hz>}z'<?;挗sK~nx@Bk~F "-b<Њo;~4uh~sO[Ё5ph!:ǁ`K!Yh} @4v-_9~̣?ǘU0 ?@o ` x.w~UbǁEwV[c8%h')+Ȃ-Xā.h`u"ӁU`P5mGIK !=~D!_' R@?X_CGRhgE oq(sHuhK4`90 P$@ Π+I   7P$΀Jq ni`o (b8_[?aHhLj8oQ(Hhט{x}`7X]0"p- :+p "P (` J1@ IJB( 7pp K0 wc4y&@ &lӕMpph+Ǡ)+ɒ-, o!4(ćj5u0 0; A@ C4 P@ DP;+q CUn !a BD$đO4 +$ /).yXn2 )|4zhȍ`6:3@ 6́@ @ @ 9 (f$͐  4q(? *2b}LHP &IȝUQ.UYU靨Eѩ @@N@ B`0^YCI 1@EDYH@0@`0XCIMt `቙g?@5j796!J0 7 Ip 0  @ 8 b wdȠP? 7 O w;PP h(8P z#͐Bn8   :B9$ 5 BAd?B𪾺ԧP 7٩V! .}: 9@L9|0Id ; |I}Yn  H o#K$ *t1(H@/ 1+3K3k[1 =0}JCA+7ޥIn %K(,KJǞ> %:*`lk˶mo q۶0:*[3H}_K Bf FnШɸE NCk۴+a/" j=5q+Kk S{:V [ GPR d ћ7պ |6r# ۽>O+!=` SY{7Pk+KKpWĻ>A[g5 L~`][M~`P    0WKF` ʿHJ k::)K9J Od*E;=?.` +pQ,SLUlT<,˿*K 'cLelf \OlQ sLulw<0n{G L.)ȍȏ ɎkE 1wKI8ɟ ʡ,ʣ,ʪ0s0 ^ʯ ˱ ˂$Ǩ\H˽˽Mgɬ L<"^ "x+٬ԋDo0$APa} >nB@l|ÓAblL|]| =K\Oq%чϧC++WI ;0n`.K%P;< P@P|GTL#}º˜\(}Umw=<{O0-FmX kNQ@DȑLu ԥsd!=Lʁ-أl\ha]ֻt j9 ٜٛٝ yM:{M׬ͧVOؿ3֍Kgm¼8IG۽ۿ E.Rzuگز=N}/Ja¹0ttMM@9ǍrY4'Mmܯݺ4݊]-G0PIG=~ޞ lfan}&l 0sL ˾ƀ9;=`[խ <1Mݱ-^KaE SN#.YԼ a˪`lE]I[" Gunwvp3^]!]mKG2l~p"msmnF!G@n꧎꩎-䮍T!^ҴMn >s[ pa`lP0 _P [U` hT0@!"pNZ~-q  ӎ`x SpJpUX . .mGq`r 0ـC ^ђ!B9Rs܍BAY`GIK^_1<3\Mp@S l`: m6]L =6i t  i* p%5zA*T(UV]v5@a'UeBu#YEEp!V*ЌQ }ْ`„;3&Ӷ2!C q5Z#r~bp?"+)M˳ 8]ԪU®T>aRsGNL0ͦ! /R0V/;'PiN /*!@D0Am ?) ւH$4C4Cۨ OD1E 0*QGZ 'q a'.GdɄqeE!rA~ #G\f4''bx/OFGH?(z"SM7SO;JGMJB I=BqW_5VYguyUhI5< UɝɂGOA᠇V jZ (j6P!\H0DbQ5ItKrOWϒths b'b+60XJc.$:A9eWfNl\E~l^|J?#0N 6Y$\`|ßt%EuI'_A`B<#B@0NpdA ƒ,68BpIh@,Hc  $p@)40 _ aANX {f)'nvӛg89!D.TP@= B9VrRuڔ 8XbHSTV>L1bꌜjE A`;XְmږA `W#peX8u+O%%23X}bHB&%%J&5^ײXi.np;\7pm u8l28|5i3L 7‹L2h iS[  `$ֻd?0b@@NP# @ YqjhLPK4ɇ/H 2L8, ?  {8ƣG}Q_ }e_t] 022 $ 췵1=K=عD@ bs#("( XA!QCpDAZH. Z"Ek h(pAhY a `S`pxo @8 ر1T9* Ѓ49p;< gJ@,;<=D@졙@ AB DD/C$@$ ҨrJJJ JʧJʮJʙʭJJJ K,6lE Tʹ Hѣ˥ûX@ř˔ LL)́8NH4\\L|LLʜLLLLLLTEˁӬ˺B͢`8B*J, xMڤDřܜݔMX\!lO죾l5 >xȄ P6%T0 `u%LbP ( 'P('d&u'&]@?@d@o!8VaGx'sᙘX| =xOx0؉VHFdZ&a U`к2GH!\cX2>8McB` ͫ>EfpJ˝E&^opK`I# p0@Z(@Jk{1X5Y8(_!E]eߍ`.an56fNF M@C@hk>  Xd"iJ( pJ@!p0)I`r@&i(U(`p#Ȭp- H@h8X\`U]a݉ncFȃpnUhiہhبIDȓ(Rk=fX* H!D4mHAG͞иV 0qF&bl V=)mvmp 4 eh؅~ Jxk p#oTuUTd.^6 M` EhюU]͉x] .`nV9ɮH`&XHX`_ܙp GGP4Pw؜Ie4(CILS *g0;Tm@P%*IEXHx?h9RƂ-ru0aNHoLp*/6 V[ps8hx]r0qq5Fo4q2! &؄ x0rxMȃF0 ?hxu@Dh>Є 8"2@veg=>SЄWp_"pxX'[ < Up h6'jcDOǓ/oI o5 ǿ&cB#cϮݜgUH~+ڃ&h0 v_%8@#x 8D`2Vօ&W]vUV"C&}PB' )%u]ji5ZG"֐nA)O" ,bt@cx`B&9yԐ%bs0n¹z# "2aC?8*op'-пb`1ߨU25GasV5MG= At(Skk]sXTֻ+C#:VTtM᪷/ yɹ(CHn=w@\0ڋu=C>|w"0 .Q=gPӧeyj}EO={Q+BA=mk%C0oc;H_ P~@nC?UP6?9}p"͸` _CHR`ZV 7! ؁ e1_ ` "l7.H "@a a ǁZ  <' *a!;e_m<a:Cax81- r19!19aTCua}aj"Ux'b(("qIZ4b#A$A $@2*# b&. TBb?@*á &nbA 3pc7z7c8~,LP@̀$-p,T.4B9\$@5R 6f۱ :Cʠ !\ CPE Ld4CH@(3W5,A!@j1T@!$)Bv]JL@'O~' ]}5%.Hh@-1D.@ʹAx8A0 ԕ+TP LZMڤIC9%$ ^.c$A)`*&)_^e ܥ]FuZeDfrfgzgg \~S@U@j& fk"flEkj!X'Z%Ye\P'gqq"grf@AgtFg A2 bgvjvrr@2 Hx֙|So6og@@d|>c]*@~~/l h hh'`yz2zg]*C$!?). @舒h艢h芆n&Nh4e^pLi"i*23hʚ0h'<"$jriVC $k]6i院)>)0E)M)Z|cicn4iR؛!C(`()J.□jdP)N橢jꪲꪒ@"4ޖnjU2*BLj* 1A"k*2R؀@'ej* izk T@A%l$kk뼺k+X@"rf+n @f"y%@lF%x&B@ hrlzǂlnl(%$Ђ1@,,@ :AHeb[heX@@6"m*2mHB&@ E@@͉R9؞#\--Xm]-AZ ؀(@(@0Ă4 4¥Z҉-: C )`8rn-d$@#<$/,h l4U>n $Cd\@oUm0YB@.njo?@.UooHsd @Un~ț2p#p+p+V pF A{pp nvElIYZa˰qd] [ M0[)0 91,U[1^TB-@-,A5@dle]h%$?CN1&Vq  Jz & 0,_b c-BF p6& 8 q_%g+7$ 4@ (A.حpB[r r2ך].+  B$K1+3++s8'A-d7dHCRp1{38.-@\11B-@4T*Wr>9f/U$B@!DA ( BB B8.3E#E;\ 5 F ! ЀF,BPӀF \?R5G$5@VӀ Qk ā3&8lU4MP",3H?8?\ P459\Bd5DAAB=? ?79 @5)$X! @!F-?ā @ B? CV#_?B!B,A@ 60@&X xCt+A_ULxBlF@00xxDԂ #{@?{0dUC-xPlmY;4xL,O0 xlÒ'$4 :y=PWkKj y$;C߮TS|iHs|{ǃg|X|DaȿE(S˻<2#@||@ħģ@3t3 -AH`}ks}{׃= %xm o}/^+ 1! D~ ~_,*vs'ACV~%!pk-@}X5>> 4~FCU 9L4L7>w P$S[?txq} @ " ȝ}z.?S@A?@8`A|PaC!F8bE%Т%9dI'QƁB#.Ɣ9C7aԹgOn.9hQG&U! :A7 f%!7;lYaO|D9ƕ ԟPwջרSUs._\98qc5d<sg:F <`"(qkaDFMl 3ֽФ4VqV83k?ߜ[zu+|8vY>kř/u־}t/ y>CС&3P@* 9$JC ,oETtB㻰â4-DDtijFjE,\G+qǂzDG0ǐxNDŽ{A,(D TYU<вP00Ǖf dŲ<R'iNoȅ AZ@gVAG1 @~DŽfn1P>k6J`V"i N7r )yaÖ:;r}41U ZIKd9f>.ɕ+T8*u9햨=H q`',!X ,\AdImHpKj 9Ɯ}~̩4PUv*T0&8PjfG Fg6  QI1C|1!m*yr*n-AI2#Ix%Q1E,  jBPd@EPS ~ٞMG]p IwFXxY/N ECJ+\` P1A n@Ih< Y/pC<ΐ@ ?퐄P4Eeц9,MtD=)ZR @P `?w8e4јF5mt#3"4q X4}AO f`Ŏa, !q6ȀlV" ,sL`" 4)QJUt+KGͱ8 IXAтP0!9ZKe.<1&(60 B0%,CHB5RcPEQ f ؁ tS !8g4Os6(`Rx9POJqDHM(@Adc ! 53Ā (."s퐨E5QT.HArPd>?Є)n8@H@1.iOb Y%@ ] n"DqxD's4A $E,Az U- YNe1YJPTAK`x@,g< VguIN6"pXH\Ct%'d  _RBkZfנ4Y| >rH  _7?\q? b!L_́X JbXL]lWu5 "8%>h,Pѧ0 CG@"pMS~xi @Ip 2rϡp8O\5[WA/ #'d"7QH@%BNHCT@")H 0 pE 2 ʳyr#8_h` %>!Td##kFA!ɓ\,X NXŊPynLFnjB BR! Jp8*'²LM"=':ٟAv'@p%nxVۓvum@u;>KSr{/禷Խ%v^-0T&$ " & ra)-+vR `bB"Tl* l"L aZ`z&. 6apQF \! ]Ԁ@愞ZDTĀ6@AP `G&`0 p ٰ 0p0p`, ! 1qQo<d gL B!D@a@8! ,d@2|R@p`!z !!( ΂ (8A lT!L"Ȑģ1qٱ1q1q1 ) !) X@(Q!L"f~A @Jx $ nA nX<@@~q @~(`Z `$!Q.a ʠ bAň&B<,,2-˒N!2!2.݀5@ "R3n@!`H NJ!& Mh4t!6& B A` aL,!6J')apP*\~`l@h02+Щs:::3;s;;,T)\H.!H"! ,B\ ,"&Rd a>`!Nb2 N4!ޅ!(&`hC="!CtEE[!*@NCk5C=9B^ HtHHH4ItIII4JtJJMB `R* PN5 Z F@!z "V-0@_6`v`v U_Q@U6n*aKkby!H@~H` R>!<"```@L]aCAhf !N*jj66ikkk6llv?6m &LJ,ck3(@Y!n!!B .:!PB5"a!Pos9s=sVmETr On."CyR'rvmvq7wuwwywm7tG7x}VQŽջ=N}(=˨۽ޱ. }>a ~|U}!׽)T~x'5KP}7>g)RLQ>U~UE)2hmq]yT">C `zE>꣞R(:>{@">d@>~~YGVJt mD!?T-F ~9#q/?DLQ?UQ(Va?>,@.mq?uUABc# ????ɿ?ٿ? )[&& (S*\ȰÇ#JHŋ3jȱǏ CIɓ"i +H"B?+H,h@$BIhAU#f 4%ٳh]˶۷pHN 8JN ̉ÿ 4̱`蟱8'4@9 nUC@sĭsͻ 9+D9Ќ6x.r a? ~ׂA7_BOYF?_FD&6@BTp 6F( b%dA ?&T mq 1 ?e(D 0`?4HEPF)TV2 Ӈ 3?Ps?3b =P@ӌ9ڐ@Ir@ S@ U&vVF*餔VjiI|\C &L0 <3h% X0PABs3iTC$!L"̐|&t!pcA fv/E} nL@ }бB$"[UtQDo?Dï{ x:w T  ZPowzd E2AQ0"WB*->DHXB!ATAtG 'B ɡ?:q8ĈPh^q;X217~eZSrv`# Dg ݒF*!F;16юyTG@4 "TDKR!PPa tЅ x{I,UP"e)O)k68 U0`t^0aʆ >`<`5X8B*, kp(>O~B^8˹!` N E30jюzT Mnz3(MiCzHЅLgJӚ0HvӠ* J@J8%d :PTT\4lP:Ԣu A5GֲMr %:(AAȫ^׾UXךU6^M 8vdZCGضQPYxp 8,8@,? p+hw`0@ >5F!`zԝD薷olP P #0ҀF սnv+ =`pp` A'dЈFAxB|`pƈ4aP?2X#7ms!,58% b6mz>1@bرXP`s9jPCEF,ՔC˹e='/qb "G@;F O6VWt5hhC7 ! '3c(-O5M tG]gSA`[k g];}=Z֢&_z81`CǛmdgfdE, u-1Ȁ"*gUt{@ApcBn p%|b&jMxPCY{ ƀ"`r׸&<89"i'ðM DH:A_TJ/30.Dqf14h5hԧ A<7u&@! /:WHvojڀEP|Ox1|uj` sFy>n@ 8eޛŏ~Ǝ]Bv{_coj~Οzmw*~C{wWr|wh{Ug(%{g Ai/zQRz "6Gx#T (0H=S}y8UǂH1؃ 2x%x)|mKԁ.ȃ>vhDT9x-Lx!uwiVd“D b q'npX =f 7ej: F8X(F)z(:ixjA0 p8 8iCЅ^hzSk1ipgxNh'pXxȘ8iGj pؘ7h(Ȋ{w蘎ꨎI1&p3hGi("p niҐ4`pnPWnaّz yTn` ؒ. _KԐ%)I`:@<ٓ>@?t$3I5 '9dV%@Iɋ (PN7?iUWyjjFa9XLHÒ.XKrYt9gim'@IL8)F[ɕG~ b h*p)?iS)ə癠iE )9YYNw}yj+wYyy|) К3Yɘќ4G9BI( CD)IX3yY}c ٟXsJ ڠi~9|*:XdXpӡ6PZ9&*#ʄ.IWU乢ڞ*4ʄ#pS摣&EsH:4> PE0TZVzXJ5 Tb:dZf:$^*`NE;ئnp*s|ڧ~ʧ x S6 ;PKKggPK=wEOEBPS/img/nav.gifWGIF89a::::%%9)30782f$J'f !z6j:f''Y"1L..a87h>>t mu-M|xRvt8@O0Ju2jhC?&ff:f:f::ffZV4nXzfic<:y/|vhמkO/OϾO_=FϿE4K'v '5Z DCυBb?xLVD($>8C`! )C4hcD;" =vr S?rD,1ϒPꗣ?TVO*m7\dAET *ق4QSZI%AB9~㍗-xod>? (@tM_zlDM,Ӥ%- *" $4 3jЪ*1ϪgJ).q)kNY²^y2w_8AG.C3IhtMcZO \5h6yۮADa+{?Bf90J,cMlP9 %A>Ƀ :)Ȁ8:%ǜ =D}ܡw0as/ 29kls¢{u` B Mq?h|'S?I 4 sf3ALaJ d7ρ6~9A`S<ģ)!m&e/Ϻ]Ӻd*8*NyڗwbC` z<(QK)l+cGTD_3qIoZw*}3DJ~ 5@_h -6 7L J&& l8`B4h"">qri2! ABNsBArbH"v8Y$$X bBm!*T!D!!J,IƒJ% Rx>1F{c@8"!qobB'*$£h,%*(p2)F  x?, K"2(#2 aɂD1M %&pIS61@LU9:T$cYUZrx' D10"/dVL"O!(1(? :s0ISHU(rPu6l*4Qg>IR4,E( SH8)j a[\>MDjܔ wY#r6;wS24рvuQ/tBG* G@ŨdzTr2)AF-+K ndyoԝFuLbPHT +Uu(^ G:3k TmhUKaV jh8wG 8=jB|ꓟ|EMc)qe(` Ŷvaч|Ӎ?8أ$b,gALMOS<"xK[2li(wh-/|NE?ˆN&BʍsVuDžlH51 @ΰ<ȃqBCK҈.qМ!C 61Ep>!$A ZP-V.su$C1d\QNԤ qC|U'U=X8*XLE *7YF1ьgd1A6)DɊ<BBҥ# PH%&&eXBd+j_b\&J5 4mZnAJC j5޵ E&iǤt$g8'y~5%RRaUZkaE!qUR_[#uP*_XXZl^ඡY4-lg"PPjv佃V\ȫ]XqCJ5H!89 IdsizQ0OaUM>d<.?uڡ|8B2+Sr'/Jioy 0{`$F54` [0iv}|Ub=~[ǖ13os^ƞGH'xϿMgt1{Cl,9!`iۢ`\0'C^V! /qe̳AgR[J7>GE%*Q$$>rFd3 Yȝ-Jk_fyk[~k&lElTmWQNW}/}$1(rik&Snn>J~eXwQ&oHJf4gE,VUnpqWfRwoyJr)w+p-ׂs3WsWt[W&cztrSU7LS_0XbvNrӅ`c(w~ga'x5҆xbt&v燆ևye%` v+Y 0" Y q0e0D`Xp 8d Ei |C!Yh`f@c >@? 5h f  @ 0{0k0\x8?rdzh @ {08*x20k؍sP  pP0+)+er/X3ið `P /S.C22&. @ dPPP 5236`/g7{ Dcd7ɑbs3/?5~( 6G@P9`s~( >)y BYPs/e>o B\Y`yxØA 3w`x% X)V`$1Y6қI#Pyșʹٜi4N zzx Q9Yy虞Y _gਫ਼BOQYٙ~i .@П9 **Yr{90zI&y95 ɠ Y^`  *-ᩢ PP&'10 jp` # Z@DJJj  >'**@C4 *0lzf*4p ɀ {Xp7Az *Jj^ڢJyj .*J *`o.M 0e:qXS-j*pEZpZ&+ɧʇ @Yd0|X LH:PPP\YڬjqiLڧN g@DP 窫њJ\-z\_urJz&p }Эtc X: KPeBlJ*Jk;ʴ*J7u<5!Dڵ^)%,@-OMLHApȒcϙzzAa{9[姈K@;PKoEF'PK=wEOEBPS/img/request_sum.gifwhGIF89aP899888777]e:f3}4]9e44^99e22|>@=4^^>Ab9ee]]3^4^44ee9e9e99^]`^ddcA=cd=OUY]]\NUxoUYeedyyu57335599:393^`e>A7\:Z>d:f9~Y}9Y8|^4c8e4d3d3H[^^K`WjNt^qjWfZfffwntfZc|:>:78:8:^^cfweN^Y^]ofdeceff5:55::4]:f^YA=cf]^4`ec hPq*-Thӥ>ٜJիXjʵ$*۵ٳhӪ]v+ٔaemKݻx:dܱ{ LGD!CTߝ4>=ϠCvI"l+9t=8bdž2_ˎr.i7 ~+_|Xɒ9!O@aK͐1k @/>5l< FEQ4ye`$;h8ҧ?֥VO?tpv 6 $O8MĠA^f{xk<궋}(N;bld[^nL8`fY_0mP[l!'/1 rYHZrsXA1⓯XS뫆lQ 寀s?G]HOA#M]A3tǻ#nKK–4H y =y6f@HD|HD"=e"p=!xB.^Gٗ chb!/Hc0~т!nE>zzA.-A@%crC-<#W"CE=QU2p:X 8rf"yr)zC h+EUe= ] 'LYQWz;QNh (lQOqƙrBb@ NXrFH*>Ka =ɁJ[sW )1Iъ#D/-DaXaHGJҒV4ڂ AꁢF)zR(NK52E#>w4Km3(ȶaHIeѪZ@4G=խzU(X ֯ ]0kWn+\V<q$^WР"' `KMbK\xX_'K ͬf7zֳahGKZ\|uaeWں\m9B+ֱͭnw-pYM.[BQ:Ѝt;P0ͮv z xKMz|Kͯ~LN;/jSN !JatSp@lDe01cvqATh`y% v/Peyhyʙ e̩9@L,fșm&ȝ7y:q+snhHrHFIμpeֲx#,ҟfCC9CaN/Q}*s Blj8֒>rikb {]lX:ΈlQ#zծqQg@VNhO,rÁO[nvmmY֛t) JQ3jpaKS:Vsshj+ x|p { ƍ,l91gxp%&WuH4M/|I_@ξq/w{q3? {q[|,U_'|۾sC4~vOxopDArN]4לdް܁`˽Zoq>Gnmo;u~- "Wǀx|;>y;=FP_07Ҡvt"XɿjPTgHfE&yeo HaGpf7{ v=l "FsdGxk7]V'({'Gq>$S(؁F6l&G67gthȄg&'lW1WvFxHb05؄a(?XfG poSuyxj>4ah( 0WwbN؇6wZq~9W`ȇ:m]Hmbŗ؉FxHfu0qU؄xvH{^eWHa{kXvp;nŗ9gҸTHθ{Kt&y{WwɘJ>`ԸuǍX{'wX莹p6G瘄s8dp膒xޘۨȑi{Yqd0Yרgx֒qk7{HXtxk؃hLvxq9w;ܘǎ7&Y,Xw'.)s79ho h"x0Ei8+p FFf|i)9Ɨ8 铒fZmY9(}ASG )Tb٘Q7nBl7 yIg(l~f ˨ْjyhI l5y/?yY{6֙xh cq)X,W90vH17g9l8/țk7}/HI tw .cVmp :r  {9u).8zd- ɖ)">jeEi/ܙI Kduc[P6_JMzwDbXO!&+eʦH'jf%#hjMF6){&6r ]&kZZ,*j}$iإؐYljj 5lC]Zo l>ztr3Z6xqnSʠ,h(FVzCҪu8תj^׭z27D=/ Ϊj*5W6xD :* S9&wi J9KDieƺu "Vw*~ʭJ~q(˚VxǺ{"6'0֭!Kzꫂn(wZ ;gφ򊴟ٱ97cZm{z[qv_ǰ^J+?w'p+mZq;QwbLHuK ړh% ks;YyP[K6[{WzdgfG(ָ1dr'=fl˹ڹey;qkۖD-k9kh)M6}gٻf ͦnO6T: t{w{ֽ랺뽄vgy9K QjЦ d; mYFoL{"q,jRv6ef얳cmKlW( wV+˾fϻCyĪ}87z|Pǁ(xgNܓߧumLJ%wee'uz+s7uc{Z\cQ|arȷ1x{gYRt{w:lr\7xFpy7Ct,L n'bY쳯GʊS}['~\Oًi0 qO<ʇ|˕zB(l7eNwL,b:Za[~Ԭ|\H\fJz1ϗ>x'H2xi6a7Vǩ=XwڧL+thxȲVi=XKY <#|ѵ(ΩЈ*#qj|.s&⦯D-i/Mӡc&ک;7*l{*}&ׅ*~6Cg4ʝ6 9W-YwƓ^.:^и\J qnO9leΜ׾nn.zʣzVmjx"u-۳*mTKFḞf] bkEXhVN f ˛1d*;ki&~5[m5I̊7>_d_ѹ ?Ko*_ix6)FIuWzLر0;̛

x Ob+kFw4Wuo˷ՙԷUAv;U_=:  afKvr{a9m/\C_:s)kv9<(! R`gi\y8hzg'k՗\Ox=ĕ|\vӯ}U|w8|٧dg}lȋi/ V!X_v@2%<m0tH%MDRJ-]SL5męSN=}|oN'e# Ӂ[I-B^'O(/.\@ŊTQH5\YGU՟W P8R`^i jr#RcpEVD*RYnmBn'W+{WśV$Uz]]绪Z+iy@G\r͝?e ?Pzvђ9[c&BnY<8_{ +Xչgz\# 2+0OCp S P? 1Ю4d? {$⓮Fo1GwG.+;""r*+|ȅ&O#I!DϮ(T쒿,IC6CD6pI4#2s@"Qz%M3EC1QEeQGmn,-PK& :r$!ASOObHklJ?5@jS 6DJZCONM]ce{}VRP,4^es+W=}ōS}Q b4]ue]w&ς5@q+4շK|G<Hf*=,B x;( ߆ Q=&ݒ`).>*=Xϩ*1b2-k(>C4uKߏ;w&h>Z60g+},Yzj:kEIN ƭNkfm߆;n离n;oox'xG>ygy矇>z駧z>{{on'|G?}g}߇?~V__P̞]$& ܛ8A}c ~l.tr:Ld$+M!cA8Ix$Ѕ1D"wP 5xA$!Si $/eQb8³|Kl[9A=>"{; zӾ 4 T93+5F3cBÓ=K2@5+ B|0 3*3ݳ:­#97$0;yKC={0}4?53: [B-D>U=6t6[@C.3={BsA;>3!9SFK<[P@ tB6+4dFJ >S)>kDhBM$SpDsd<+jPbK1E/n Ɍ"HA??TE[;ӾDù93:ASKL}G«LR/bj` j(hlǤLADonOQNʷCN\1E5="Ln؀b6B x\vHHxt@.(OЅ%5LЌ/`Pe4b $/ A,EfGO$CTNL#E'L9Ȑ6S8HE9H(ttM%U7PRhk;:A;L9Dc; C4utMNQ;tL̄/g`LӾԇ=$: Lʓ|A%ԓSǔTD[ЛSN˖+?$@̯PEo+F>>;9ɾ}`C Oi/Hp:Oegf3N3\M*B^ @U|L>KalUHʑ|@H>-΀W\%ӐLHʓTVu؀|P=mGLEdA6>18fztUhfVsXL$ ){_ &(*]Di6aACIcZ;UP'$- !фD+ƍdlU:Φ n# d61BY G19qk ($$Ǎ 1$&W2kjV%oO16!WHqR`" , ;4OҪUeb4aUMBer $`ř uk& wY Cs%.v)* D!G"jRbyzfBz)"PD=o(s+-1-2(GqQ+D(:Ƴ8 #S+eN=)լqqUj4k3Vh\ oVT$Z?K,$KF2Ш1b\H6,\}*Bm8jEFK1pYf P6JZ kMS\r,eSh}gײ6 +sH1)$E=#`]>c -ghn1]"|JCDӕ͇~Ɨ`sUF>=$xԄs$ I/Ja?R* |TNElﲷ=oT'#L\N .J~pqB"$qIՠHU5.2BtL&[e0 ӌe6vDY4n&)ڴgZ/䙕-ZUV_*\b%Iz _Nx*L4cBJONm%9.i.*9$(MjZ@^5ly$Aq҈l8*ڪB_I)RN4L-=Ց nʈ3cu!4&ם,?3` F+/‹ʯ6#^: vٿm\m2U)ע^2&Q>.rEIGϼ5'˱؊gjYu9EB:uAZhG>zUW.vat T:H[_lR>W ;(|+8|~BݔMe!a s(ȇ >?(i/dg#X7!3HDe❅d8}Wׅ{Vfn&K}A,L/V?%Cʸh,Gh!4l6Yq?DHбS1Cn,RҸ4ǩܾG\tAŮ Z)[Č5] *A!`Y%ɜ9[J1 tUX4 ٕx\biGdZZmaW)!f}!],I`]at!R]ڴ[yO>VeuaZ)`N!."!6 >bL N!ȁ"Pzi$NDwQ y +&b\dms#Y&Qa]a^_i[o7yWTmҝV#5^きMc6v0~=^I(ɔPГ 4Il#>t1imW= X_*I1}2BC-$56", ^ ~1DəʢK^46EŤ5z$>p_pK% A4 іxP'H=RTFTd@ -.X:XY͚U["Cb؈e`EYXd1Qm[탽yH(dbBb6&c>! V"fHY8D(IBͽeMRThvVpDFґ%YGfhBٜfWD+VWq&qڝr>qІB"PUQfua UB] NmJ%j>`H=BV|'̧f%q~ʔ}|(Ax5a_W~ٖHࡂF{F@rU `(^Go dWz員<gj\(VM"9g.!N  %NXٖf^Jɀ'jrfdHINZ;d!I }T>ۘ(ON=i։3\F*N*V bLG"4!b* ]f1i~zHaϠ*F*z\U*jR*M+uj =DȎikm I[IjئqɴMU$O-߀*jB_&VƤ3k+LZBg  kOglZU fv,Bz읹O lGhUL@iVFS҉b9EPMPqe+l.,^F-Ԇ#r>-N\fmɘÑ!Dsn-վG-)ڲ]׾-_A ܲںmPdATkZ]xZźRmT~Q!Wپ9Eԥ܍>SN m>td+k犮XnꞮn~®.~b)ޮnRb눮nncyluNV/^f/gH/n/v}/o{/oo///oү///ʯo_ p?S/kC=80<:8?Cg0ow000 0 0 0 ϰ 0 ߰ 001wp:b>(1/!qo.Ob^1oqorrkR?(/q1f11qW[oq' >qCq!!h"CF#?J2"1K2%V?,>(q C2 ())+3"(_%#1&Cr0q'w>d2- (x0>#r@2o!,7s9(%$q$o266=tK4aM??O_R=>r#uNsROL U5V?uarS4ZCk Luc;?H ua'WcR64XCdSbSc#vfeWQ6S%EdT;sU6R6f?v*ncih62ZZO4>0!@pC 4o7] e_ 5B7sk]F8?ost,G8CJOʅC44RS2z7V=_Bb#$H5nV{6Q|v}h6b8NG>Lt6,@2Cp-[|7VxYw~73wnAO2:̵<BkDt4t7Cx\8W?t5ʐ>BI>>C;y?7{S״>NB',u~~gya4볗x$ƚ< 85\a#v{K A8˳CCy?9WAxn@6:@tOt8˸?/+4Fcz|Bsv[2s*٤2:`77CvsC8`fz'a0Ϲ>k9N3;v'BB dC 9XTGCJcr\?C1,KB5;U8˃w ~;/;L;VW$hC/;=C<]]?I? Dyfl/= 5K;A?z&˶=ƣguܟ@>s}6hNW 4{}ħ(ݷ{%=C>姜n{cq/r+t[kK @E_zI(8:(lOtP4ϴگ RCv;P?lc+>߿FB+P3;yk?7+8785s@ʀc3K<2G8`D%ZĘqcGrdz:q"E2/ jfM5ʄ9QΜ>?ShQG9"UsiҦ>4Ԇ5_UO* tѲFMmہkvk6nźSε 2_֒#O[W//Lq`NJ}pd /o3|8͙ΥQzG^֩a}[ݭwj֠k#ߜгC[wmǥ;N{vԛ;wEg }k|;@?+o=c 3{O<9; 2tp=n[nD^9^F]M98"Ch}!H"&')\R,.L.3R}"Z54.,N2T!1(P+M7\G,tN@t4PHeRLl471 A3ERQ߬sJ=MKHUD#5HoI }~tLNEUI5$b]uY6ĕVX\lH1єہfV[ύ3q5Vm_͓IqIOvr$6^8=b,8^_ ^7~%h~vSu\jXVGYp4TOav5)AN1Nq'ԉk~9]+rnGS7&!R"wz=yGA 妴mBv۲Vjg x_Mbdb|7lһ/зm#nz֣'TC:]y_CfZJxL=|D_|QTI~` zA(Nl T,E,;,i!듘w4od]&Xb΀'khOpBL}Lǎ8?aUb`_ʴi+`I0` MTR1rC@G,=In y^'p\XA.M8iDHu8A<1N1Rk!,W0}PTeCrI%`HN*`_Wk[WJJ2u¼5ЏtV4Iђ"!"_Ң%1p |؃%<8fAP z/"JC2#B2KuF%Mx ԤH&> ̰MMKTJf LFocȥ/]/?MײR>I$z &%iBNLE(a%SPR<| lt#< UR 9 |#bVt˖15er id2YŽ݇fk8'E" +fOS"Eih@^ИGqOiL0L*Gk_ }&hMҊM-VضqѵR8Lږ-#19X Wtqɼ<$z栅g>NG*}8 ȯ_BeE3[ھ|]^Lp0VqH! 916>-KY2h, 4' aBYVXhv u,ܨV7acvs^\[pMc7JammhX Mj+=5*/ǻ2N.ҁ^rZ-9n3tyZϜ]%wG:N=H&)N emJ,v 1MbGo%;YLGFBbiu+;=i`hzSBݕ驙JΨk]RP#qm%XWd~IŲǕ𪈏`~SζVdJkD7wY" wx U® ͝dK@nTOMϏp  r !HLo !K0!2# q,9=#F+X%&[efB1qR2Wp&oHD&(O(&w(e2(r|^f)2*i''w){*(+w*R*+R+2*2,+/-ے-//Hhrno{/00r3100`B2/11S1G2933+3;S3=34u4Ms4Q+4S5A4ES16YsU.K5`?77}38s88839s9993:s:::3;s;;30.HM #.n)"=-<->">'>óWXȦ<3(Г0?? T= *S0ޓ"T!jHH@"@BC)tC A5CTA?PkC.fmAC-u1G7tt6Fs"jG HeFIT>}tIwTD~.bKkJ \*C/BH\! A`4GTLT*"NN7/x4AGŊkVnKKK:! @ .,,Jdt)a,AWTBjjFQ U]U]i F\!T z~WTUuCT htbY*O+Pf~A [Q"J BBbF40)J G%ZU*u_PR_j X! aXtTB^bc3cG4HaKU ĀPVrV ՌԉPW"QTR)TE!:^W-Aa9(lN}W=jT'$A jWma5W-)Nn᷂4Wn!*WmW@<c WVm\^vOBk[(Ywjbq5uP&%UggpV\b#^A]4^jOlj6kqdklkȵrI_-X ^%aAyz6lW  RFaL{7Lv%wݷ-l,wC2ќKU tH2W[-*5F"w! @>@v^)wkW8x ȵ~}p}Ub+vnANW4{eXb T#znaօYƺj}5~)68~Wh$Ws5 KMIv@evvU18q;xw?v"{]BX8be8aXixUxWT7q巑(X%an[sHBu|JADa?U$*8"Cvy*SWyAw|J2MiL]&z0کݔͳ1zJ/r:cYךϵмZڬr$$3ez/կz':'t3B#@ʃ?c42DG :.;yK9J6F8FcADK<5cc;#8VcBCo[8,{A6D7 e?DDV{EscG3AC0{KOP!sʤIRj>^*℧x?OO {>%RI]'ӝvmI6DgP |h+>@(-PruTFxa}Փȑ=^%˾Jfd1;[̡rM(O$06 Ш@1|&Ŵ4< &Uu\=a}L8rRT'0ɋfx-4bzgz}"wBVCDXhNbٓRN >V: ' >[zHcxm%]9>ϕYc9 U$dޑ7 v'nGcR} m Qd|tPC 1&[HbL زK7mͨꪭZhN7T}ҺJG-$TI瘚udLRϒ73mFR)ehi%jk)mfHkKXYZC2U, 1j+a evh>^$RA<+:ǒW !uϚ*< Р Dk4錯CUX+$c9|i gl/I1M6h+':? 3)$#o\V,\Jqt#qI4sw屽5-%ܑ!ۏ+XT# |>OY^D.1m*Q8FWV> Ikh5G9~x7wR)6\Poiu;T3=D[mi~BHW?DdٚkveVz/i6q Z%@St=.&qNqLY ^  K|Qc( $t3qG5Y }A򐆀 J7}tB QXBb*>Щ81 @l*9HxB4#j~~r0,TPCH 0ySFCU%3!"ǬpC4Bn@Z0tLRԎA,{3S)Gy"rFL"bD@Tޭ %+4\6,[cB[ҘL'SKfe3uMTҚf5"LۄH*,U4K`af:p~3Dg08Nsd?3I.X3k mhBF((&ZQ:kaCҏaSFICT"զVLZ҈ve.9Hh: PZ8趷cpAn=lLQ3궶?mlO[ީfLMb4Զvt"k[#h8AXi9&dMZc8+>ďc8!"dXgrxueVĚ[F+G84hL8ltf\H{&CO8C>lHy^vf1^;hQoǶ?_ݞyfw2^yh@Wv?~;߼O=V}_?>%|>6!fVsi 8l_gI+n|cFRP753p['h7Ή"k ~W_(x|K̷/q'JgiLoz_&uڀgpz9xvn&t%ȡfhGQ|+-,1|0|.HArr=dnwp@A|LH w%2wRH.2)lnnx TyZ!voyȀs7vv%)0 |xopp._{moHkȈhAg))khx7Eٰ+nsQ+4ggmq ,?wc7}*Ɖi4HFhhHm{nЇ|xUhea/J_5|ǧWwOH({7}5wVxS4,b8E" s8l(Xgq(rHΈX 7>@iRl /-Wcwvv/)˜I0rtWw1e!$QdwpHH A77E1TT)o1tن8YdfeIkٌy$%6Pm0ozfaPA%na{!tgX,!D駏7W}PxU~sXEvoԉ9@wvs!d٘C}fi4Vd)hsgG)g6)%hInHPu%ucyiIթs˹yIha0cŝYnc)Y'Yy'bU[I. ef J]`_F```v`VVa%&`Q`,`j`:`$ڡ6:%`P$Z2Z B &`Bʣ>_Kڢ&`0Z(vSCz:ڢZ & &LZ&JOZg M Gʢ%jpa `:?Ja:O y>)jFTʤgj< [GZ]a*rZljJQꩉ*Ɉh;FK^CԪ5B#%:tA>SM'qRU$>G|0>ʬTԲ+Gͪ>H I{9NZzf(' qJ(7dBB *vrKMʭگ-X JJ$s+J:;7Ԫ6rgٛϤNJ?@쪫{Ų+[ڄБx1TҰ:>RSIK55FSZuëct68< 7MBrQiT'A PK"HR,9Wٴ,4WKk73WҪh2BP95J :{g S+>QAi;rPhk#8M% {RyS_U/;+X[x=K.WgS?9{Ug@mжgQN4 m֢9;mm nfK53b0+PAkPqHV1F%ۮR-¤7OWKB;Ka$,oM$%SHTM @S.MpC#tpY{ .kSDŸ#;I4TҚSI;R UED('G1CXF|kf UG+" =2q=rwhP!vQ>[K#W>p/AS 'k5\,NWqa@|^'K|9;u)G!cG>+TAL?E 0vWGAu;Q7Tͱ{e*s!0%׫:"R b1wGjPk͜ ,Qm0zg}X~p %éW"8<<ʰ'"(75=B< !1!4'#5q9=FI1E!UM5Bbg 3]s9^vb6,Djy*R+P΀1s!".1ʜP=(*y 졶|^=-BƲ))! (?8;R a " (R!L;û;'BC)r!J"oA,r*"/qZ(O$ɝ{Y"/ ؊]Ï]z)`w`gJp80Ћc⪌l&hQ'q`]1S--F˷.n%+~&Bmh)G!**s4)*'2rF~ZN+M.F5Ҕ16l!㓢XAҵfh~ m0xH N71& D= ݈.y߬-a50r[rka'N22+L22/#303G%3΀ζO,64.S43Ic< ְ W )d)wm[NZ"m5۹6n#we0-@ 1b, Am l!/+}=#$8|P;9Wµ-1?d :l'#::CN3 c;D. G;( Sr;&/=1*Vu ^!;_;4׆>%\jk?)̀utp.wt}(6r)v (&L~A$AB8H'>ҫ\W:O:ȎcJsP$EFpEYEYEU4GOY@tRF0tvTXwO"6 # ">#D4A2.=&9"O OTڣ,k6K;MYK쿣O໴JkCHaÄ JċncF!5*Y}>.@N'Yhc͒8S0K O<΍/"ϖ]4}KN<;ܛ{[+ycYTecrUhJA4?%3t0 'C+CI4C1ZLP1FO]{qE6BilCI(:˽Z+;,KR-rLRK2"3(̪DM3TSN031sO7;SPP@UDMBH+-(z2SNOA't>-TTCMuUU[eUWcuVYkV[suW]{W_vXa%XcEvYeeYgvZiN5v[OSnvSq"n \u/b]ޅw^z9rWy&Ʒ܁xۅM;އ+x+?6W Xd->9ʕl9_FyuiVLqfYdӵ!]1Kkz釟.f7Iwx5Z蝸fhާ"PV8fUֺݺYg;eT 7Ozttd-Lp#qPC1j$YH{Bw|!?O+2aBi}6$ 0@|wH& "ØN`? XP~TXVܕ,n/IHAs +xP# jznр $ Or{xCur\GE Vp i.vHH*Q4$ޞEӥnu#FƸ n`/k@v?ư .>s,c0b 0y*zʧLaBI (#铑]:as1W@Qʤmy2\(hEt YXөޤ=Z0΀C]6wZKqT8=:&8xя{ܓIݤ:ժTG`YnVp]h&GѩZF 2[Tv#Amur\Z}a_fȹ;MOZ 5&OqT%ux Uu'j.`v|ajWoDJos~5[9;ha͖.@9ILi!鉯~WtDŽp:*$c4zZѮ0j ΊHYȕVPĭ\ ̿6T ! ":NCwHuyeq^RS[ ؑtZ NJNO7^X10-|P-lzBqr{ z ÕG{^'aJy9T()gft eqk׫xrkҙI|-.Z1|Y0XdV͸V:Jk;c)*)1> )0= A t8"B((0!! B,BB#%%%OOOwwwjjjJIKuuihhhttt999VVVFFFSSSffgBBBbbbpop***(((YWY TTT@@@SQRLLL444A?@###HGH869222---666lll???𠠠Т```pppPPP<<<000///yyy___rrr߫|||^^^˧zzzā;;;QQQѡfVNMN{{{fL~]\]?>?kkk\baa{zzDCC|{|B^]^\[[yuuqzzmʄdddooomlmαfBPNO534Ϭ>>rqrsssiii101ťqqq.,/_^`AAAfFmmmtst>=?GGGƛONPBAC!,z H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8s =$8?UPJJի J24 hӪ]˶ہ9 'DOE mM|ㇿDǍZ*PHvϠCN_!1iD cd>JtWrYa+_μLԌM7!ߐ=_$TP?2fZ=\˟O}懐8^t8qgSdWeE_zO}Dw߄VhgmUQg{hyցYL-8z\Ӟ0^(4H  ??UWcyShXfeuUvFP@87a'eSC'Lဘ trM堄jBT塌6%:ТVj饘ă j$^*jxuBOy"XC:ꬴ֚cHwIZa=k,N8EO8YI@۝U\g_ 涱CǦ CuFpڔYđ?i N6#C`ݚ0ݮ a9Tf\BTu$W@,Bx唆G%JbD06pg9LN $4[)xr" }m <$gmejGb`.L G8(F+>Y` D "P ɪsp1ME(C?&:P|dZ'+4Zz0`m ߔ5xLEPWx"x̣h2XZx=/@}K+31}Qġ5qz}H@~Pa(GIR@p@(HB&sD hh@cO~&!*d'e8Ќ40ț@TMcv S W > IzFԦ>cr܉SIc2C>)wA:/wi/yg?ώz ŨHϏ!J5ѓ%3DVT,}iZHpi5PFͩNr=8(fq` } X:*RԥZgAB%lK\-eWiS`j) j.3+FjVP4DN$YNpsfO%ڗ)N kv!$3Kb4 [X, Gr 41@4?YE YR>F-I7Zڪ,}dAm/fsV]m#G<+W$mq{ dAuN>,JjbW3J= g4T-xr`E PS(Dӌ@ZA__NmxPx &9]j PS.qd X#&Tx@wBVM08 M3Є+TIβlRʖ@E%pC<W&:Jt,! W@Hf k'd+ SN4yX4JBЂ4UJ$ci j#^SFlO C!ȷj1$̵br2Mb[؝ o <'K%D677HE:{^}?F~bp—}ݍI<~Xs a3ʉF)j]!EU)S͂'z[h!YD~X | 糖%`,!75.컎#os+6X~+i`DQ.7&t2U4Np8y@ַ.0` DJɴ$ep~JUrDY$UJzKZxj6Fb! hrAa C<2YjFڬ;[`(LC]*II`e9 v,iKsgdNDFy&e $PE/g~ 4G&agJs$I+>v6D "3Pw }LW}&A!B<6( HhlfwNLF/ )g!(;OsR&y ;~OH|[{.q!87^7~YyDZFcǠ6PzTZ:*( ZoP/. #@ p 0P 8jtZ AiCj|ڧKD 7>oZ@{[rK$ޚ{<[d}iQkGۿ+O[(L!;<#D Lľ }҈{ ; 63 l5)sl[*-p-&(XNЊ 1[{(̮8l!Q!yVpYvd apvZ*@lEVз~v !}zD3Hx؂Rl\V( O]_,y4 *U1ڑ"$ TQ|F)ډ<ŋȡ!Nxʝ``d*ճZJxTLǺ|E+ɧK`Hs. wؗ}wȷܿTmR(*P`wRpS,#ܱrk sQȆ'QN@# {̝Lϳ-mܼ k;!p|:dž :7wk"bqOfL[^ҝr"W^^kY@G X|LG(wF<^bwM.\.pQ Jؘ|xOa:|~F'n'Iq^ qlP5tUƉL&&B'4כnAǂ~L`6`QѨ!Cs#&B^,*%НbY p?Rv]$5lAю|~s |!&+0ܰ/!RNOR`Y d lN~Շ:d; a<򗈍i6z}Qg`''A2EjhϮ4/T?0|&X,LT[0!QɧI(*zڧͯzgΆF^'-+'(qhΧ )w+7";Prt qg;!W? .dÅ$hXE5G!2$ r`ɲ#\ ِ#0sbD'E,$$DN*DJ\BWaŎ%[6!nUXu̥[]tP-*9=ڷc̝c#@J<*T*3/ SId+0>`,0)[pF|*ڡ^ψJ<Dm B00'JR>t(h3f.=-AK6 "T:0,DŖ4OR/\OƲt3!.r’ȅx5 mء mRqK ~xnUVâ= #A'¢U`YPODQd ч@-h&-5N3Nl!ִP%;eH4}!0AՈC!dY4Lݿڏ|8mza 0w!oG! ;\{T6ٴzSh6U"{gzh3JjpX aj: 8ðO!HAzA$=APz^ptinN+SLgi)™M}r3<12B}tK7tSW}u㍙:vǪrA*ZsaM!<;aMvB ;-ֳ~{'GDB7{2=]T~"z܍`f Q?p&dB6>H P0VfdևFP!<(:֠@H $ j Blv 6JِAv7Eps?!PMYrM=?(z0Ie˂ݱ?!)d4fqY֋6y*g0A[re0Yc&ގAޒGff=X!^P FJRa)5AΡeY^t-}iLgZӛt'}f4ʳ^2+t"q~>3*XEdBE2@Hfv]cO[/f\J*"յ{l[؆HpmD:V$lvG6jl|[ߟr" ChMtJcC((XX?l2['@ؑ |(#(J*C>#8ALA\AlAD->.@X8%@@ 4.p?z B@#؁rr (@<@(B)B`-8h A#B λ$,!pԿlC7|66xB0C"423̡2>C37Ȅ(xGt<1OW8 ")vX3{&:$ч҇#,< ZRmR$+`IB̐8}8OL3L^Ql ǚ[14[8*jˮ^{.6}F)Ӹ jJK5TZG :bΏ(h;\>؂I0/0xGk̖!(("!@XʹQ$~RӖiݘf.^Va2fE*smYyV l !*O|T*45p$脠: (X# H]m؏@0*/ܘKXD.Q]$RSTŌ{'@tXY-ِYjWYYGY Z=fZYGN貧9I;"{:TҖpETqQ'|.8#uۊ٘y ya [٥-ڦG٢o;T> \M@a P|D15 Ņ YA\%S\bq{E.ܮi܆YcPܫ"U-\yYi3.2MrF<]lޚK"3^im1^?.]x]Фr^].5Ҥɺ9|==.Ts |XoЭ߅x+0#Y޿Qs*_PՖH^m۽mu :7(Ws";!a$!ܝ[}M" p߇ΩY[+ة;0 _3)Vۨ5 bE5 |N&Κ'bka@ⱈm8 , ܢ: dV V ABC$_}n-b|83 ddWd!TR"1=ub9;Ufdh~Ya f=fbfnf<ލ=fqfgrNguWlgm^gxr2gAgyg|z{ggg.h^v>w>hnKz^hh,/n${/%h&*+pΖ@niq:ic h i>+=- %Dh~hhJ PViٛ.#Fj E9`d@ljپRXi"^h!)ؑX갞#W>΂A􇔥k®JhDk^h\`®k=M^HnÍXݖ&hin§wJnn0ā gs*nnưqz=PNoovoo/p;6(opA)"wp G/ p/bLȁG&OqXw*Wqhqzq_qq)rqEr"Or@rcr%rpr(r0rBr+rrr.s 's1?sb3ss4?s6W7os.ss9r;/r@q56BtCqE*B_t1o!vatIpP?k/^">Q5"XPwpYjϸ TUw6kHu+uM "\0vbpi_ul~Ba΁%ijg.Sup$wt0y5Q!(owwt~#zLLі~qi b( )jmKvsx6yQ_`ϐ/yQ_ygyty5εܝ7t0 ixN 9^ ry/pJ" Q;sJCΆߩ'rP8^^ls(Mv %l]ٕoJ X;sw|oJ#zJxwPf?H}exW{gO/a~k~'~oyo2hJǥo:O%*.#@EGg „ X 'RhQC' r,@G,i$ʔ*Wl%̘2gҬi&Μ0Cƿ'1(j(ҤJi`I 1yj*֬Zr+XT}1ڴjײmVRw.޼z˱/ۡ-kFZ0Ȓ'Sl` +/.m4ԕ3|3lTm6ܺwdufӭ8ʗpEgn:I:W =z.o/oQK.SN d{/iܚ5Zpd <0f)Zk0 ? `L0` $0 &YaFwFrU).D& @Ah 53XVU}4ls4 [ҡ5a]{Ӱ;Kwa6 2l3:4ns4Ju\xsV%8:xܥ\9^oRn9~>kM^:딞.c:c#ے^;ޮd;`^<6_ -< >+4}K-"L>0H/O$Ap??s`ߚPHJ2pE2Ouk )tA$Qk&;XBDAkf,)Ot*y{ә'@ivg, "*щRt,'0 (H#4/'fƙGp .E:Yҙ^I)B͝VĚ2)P%saiPLd5HU*T+8>5V aZҭ/WiӱFdY+Z2AV5nZ+ַU+qYWd~W*ػ<5\ؙ&y],d3uF٨S-ٜ\57+Z԰;EhS;5RU_+۔4%f 򶷾-pwZܦ.-q+kܖ 7].K\Bw%ҝ` Crp\ֲU⭮Jk^6D\:)H,aY8q _G.{u (XMM`B&t+cXP(&>1S.~q}n "$B("c#= pdY>0q>(Ar$?AHp"B8rO \e7 Ho\d?geA::OV.9ƒdTh_*('oГ` j*oh*ƣ)koVAlvz=yؚәVp!T 샐#B8Abɍ‘|3IhpclNrFj>|icÇm#þo|fb^#>5b|!3wq< \q܀}>4 c",C |jC pyu$G=`);.a`\,mDgX2㫂':i{G>џ? *5.!zqJ F֭Ry$(./w1>1]wgny@}~<9kN3#<-S7?>'xfxV~& bcwͿewOaNHїm*c&] X>U#IV8!!q TAҁ)H^vO!qA@BH<]% \VڙԡH\|uҚ=B< \ Q!Yb ㌠m=-) aGGܰIYYa,ܙA,1 QAT]]D1ߝ5_Ia2 ^ݑS`h@A \=ATbhdN"-֢-"i;PK=77PK=wEOEBPS/img/owcag005.gifn,GIF89aZZZkjkXXXRRR###(((TTTIHH;;;edeEDE lll@@@&&&444222666MLM+++򢢢///ࠠ<<<```pppPPP???___ 000yyy|||999߯oooOOOzzz^^^QQQCCCwwwGGGvvv rrr%%%ňiiiV---hhhbbb}}}vuvyyrbab;9:ӭPOPOMN]]]fB{zzfy\kqh]\\NMMKKKmmmcccuuu?>>VVVkkkggg534cbcfr_fO̞][\sss͟popBZYZ>>111nlm~~~~ϬzzmO211f9uuq...qqq}{{{yxxĸutujijʟRfYYYYuuh!, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͌ 2d("vF@ͣH*]:p?!":ӟ*ׯ`~|Ÿ 9E`a_ @QV,@e@?Jm+^EvB`ֲOwJYVY"f=#m|۸]NEaŸܬ/@wB'r /($|*\BqܽOn[*f3Aޛ_sƙ':4jןU|U]}9% )s` H` 9f#'q!͕ qVi^<㏷ ^z'\TiaV†Z weTL@:BQmvWlTaUaQ9Ov@ou)衈&lDcFlIj?@j,`9uUZct[cy* U)Qrja>Te pB}lo BZtS``O$tzOZ'cѦB pBYPnff!U)/ '4ۅg,k"PY[ )\_䒟?4`?%1 K r"\hmryY#' D&+Пka!}3Mi[DWmXg\w`-dm>'lK k'TB!ШNۥ:EPVADP7u4,P8᭹T,d@|yn߉f`-FP$):pP.`QeBP/ (dpB~''ꮥYf_sq0}rPi/`A0A"X $ $S Ms8;ɀ WFMxBE{9XDrP9aeX2hL6QkH:ڱ{!$` IBTX$'IJZrvc&c(GIR4 Mr GZ̥.mلte,?b$0aL/JgB󚷔2Gkb&MhS$g9yNtvӓ\9ESlg=xO|Rdc?Mz$1z4T`hCPJte(A/s?@ZK ̠IH!S;}LJM>"'=$f1qb 95NM LH*h.[mvU} Zֶp+[iի ׾4]KK`5d(U>0k.{iW4"hGKZݜ7g@7p@⤧ljU Z~ kCp$a nݖ͛B0{(( ֹwHK[ڐV}noYZʖ]<^%q\b. LӠpx{Y[6W^Ө? aI., kk^?l$b8-0QžoɈ"[Z"HN@Za*[Xβd(GjE/-c3X3w iF?<Q6WAk0^ƳgK͂ ]2'`f EK:͎"}fZt ꪉzԔtqujTKRիU]}Xglִ=kWzח5 lI {.6d+Q̾-X+MOŒ[ iwLіt3zoh2.]}{wjKӺ&8+\@ ^6ū|{<8 ~IN\8Ql,1N\C~e﹏T>iC/?2s_KuoGPD'ե+}KɺnOO:+kS=V_л~&bM\}@{wL؎{.DX%)!=^@ %I`қOO>Dyo/'PKhkN|ЏO[Ͼ{_L=dQ濏 ec(' uCPgjdR('&p*C"ġ .ZDCe)a*Q~qdQd4-$.`QB"Fa@<$ &,H%p$!N!EQz4R3@?A.pDHN!e&>)B芍L$?4,t"@QD? ;S;'?IFDsaD (SCGEn>DR!B?ű(H(;RH-S%Pܘ*#1@2 9S@#=SAd*A, 9BD|C!Gl>3$ACr4& (<3;K' !3Ck>)4Y@;!lB>i*,4AQ"'D,dЋcz(!;Md9!fYBJMBYy)#P/#4S&q&x=Hs' &g.qQe>N6bDe6 a(!ъe3Ł&;|B=d&0,cқ+JfmX3$12dC`TBb"%:CG0 y*i*+j'v'R K$8x*u&9cBzA+h3q&-S*/ ֘033$!`2:AO!OQ60N,RA$SG"$i4c2D0X-]{E ;B!/PA#A.C"1z1gA"3! h %P\шg"' g'x[tw !bl%=!é,C }8;˻`D5Ȼ"Vš10 DG`dImнO[P*asT&y&P CC'?h"4rHCAԍ%`KB)|"ljQ24:H -:gnE+FK ;|>;`; D;?)9 :s1v#=W$C!9Wq{ZAN-pGYHVǮ'= VQYS,J&»,2d;ړ8 r!rT;$Gs> p#u @|ܗA30 |xA,̄+QbuaN:&lzq7({z1@OX;3994^6 >{"6}<g1|R>T^V~XR-d^`b>_|^߶Jlnc]ag>ƨO@Z~X:^~cNmfjɚH ={>Z.~ꨞkChݘ 7|N)>P>1pwr$dϋ.)ھsDѸH ^UMRn`@1|XۮN }]Hp @KA@ H%6K~{apPL._Ni"~A4yP4 Pܴ mC~$Lq ?ؔo1ыԢIq$NpRu0 @KS-P_&nlE\NGH YA|Q ,[I0I2``oQntH? 6=R(rVP=@ ֠ Dp=E=Êx}e_O-O/A6pOq6A .dC2XWE5ng!CD%ڸ!BdҥK"xW 9u:Ϟ#8x2 I5HSQ"U(N(9pDQaNG$iծeIt2kӭ]~oØ3&\ЫUT+>b@O+?nJ5ՖNq7$ebũ-kÌe)遨U~&l@>ȸ*rQߊ9祺H9ĆM'  EOlVgxpǰS>LjC &hx pC* C/81x( :aH3(MNpA Ld'1<35h FQIeX̠@%lҠ8 $p٭FD5EYƸ箛ᘊ`k¤/,+sPe?K,\sC}tK7tSW]F<8wkvk Ziw~xb^M\wCz~z꫷:_6{h7|/k<Ango\qD71B+`蔷Dv),xA fP`=A0%ȟ* ү)a ]B0&!F"@`A~(@gAP 2(opI+PhD$*q\ayx,~|`RB#KA T+3fV\raBj hX|6Hc =&ZddDBp~-~Sc._> $%id3>3_" rl8,<CЁ8e[J.r@zs $lI! ɠS LAeވgCD@-EմfG7ɧN*X*s6h7tGZgϊ.I2 ˈt=KX lOiQv$ $35?zB)_'J dyHu5}T 8m AHm5J$H]V(@K44OS5sՒ]SUz!SUDɣJNKYG=q@[L::@P 1d>{bmrۈPlACZr4xJ=?3Ydi d-PBX@o}{F"7;hY7քuBljTG)`TbjX#`HT"ف6mp[\{ ^ȱ7 ͎ m,вAbhŷDF>4# NCcf\!TNp4%xM^r{vX\3ym~s }n$䛶ύ>Wwӝ pzխ~ug8Gz$cW~v|]D {͖Z{N{p rw:_w'wB bv|<)qr4pNk[]eȻ` A]z^}Ihm x[ܻ7vK}`~!DA>PC3`P0B#L%a=A:d!}/w>‰d!C?s2~:@/J89P ~~)9xD(Ex.Vp206TTmh[;s;_<$S>;xA JȀs@90(AV\AT n#<36rA0Խv B|  H0  8pA(xNȂv HZCEӳ?K 7̼o EQEOĀDSCT{ɲIy4d.]dHp,xJJJJJ+2G 8 <]dG,1FXh%|KKKKdh($Ht @F$@_HȾ(0,0a(xaI:#HI3”FɆ(8KLMt h^!!0Ȁh"I+L\(hނL&XB'Hd\-ڳ ΁+?R&+~LOL hMOdMhM Оh xQ]C4L|σO&XO TXj8=$07kQI)] =Q M] Q"N Dqz =#"PBR'_07'SzR0E]}X  mKQ_}ۿ0 58_5%ܺ_[ۃx (j Y'5[79Pܯ{8Ս > 1HXb-b.b/c2.c2fC0Pa%_ Nc *M3 u"&Y=NZ/#h %xn"B>C,PF-H䢝d,LЯL~eQZRfNSFTUdP~eeCjeZnZ[6!\ee_6d[a&~0f^Fdb.eg~MfVfjekSfffoZp~qge'x6q ~'8gtX_zFn@cO`({XF<z.gh!M 0I6mx&IN0$)0G>iX/"87F@fIN>WQ?dsԞiED^l6j/(dLv^fפjz.hꙍH5403@9؂~jk7hVxQ7`;xjNX8l.>Xnlk6kVkvzlmϮОFVlf>rFmRcfm^' nnFRnNn ]nZinQnfmVn֟%n֟&@ovȂoV 8XoƝ>]o6onE1@7=~o.&K"p OJg?4?Kgs4q/8_2qXq$r r#3$/1%_r!kr{r(G1)_.*rr-..*/Údiܡ1' Zs6(7&8^sJs;#<"=%2s4Os*sCD!E_itztHWI JtXIA?@5ttPQR/u9HuUVWuNOpЛu]'X_vvbO cdO[\wG[ v?vlkvn m/ps:hi/w+v{e(wwwwpww|sOwi'}'}xsq+U=j XK3D)~: XDòJVo*1/:yW^o: xy}yyyΛ;PKMFs,n,PK=wEOEBPS/img/owcag063.gifhTGIF89adddJJJ999===bbb,,,CCCEEE&&& 555LLLlll@@@$$$Ƴ666Р```ppp///PPP 000___޽???ך|||󕕕vvvQQQ^^^(((;;;zzzOOOwww###GGGoooXXXVVV[[[kkkSSSmmmgggfff}}}aaaiiiyyyZZZttt777>>>qqqđuuunnn:::{{{WWWyÂ\\\UUUrrr)))sssTTTFFFNNNRRR\fy\ʙ]]]kqh+++ȄuuhͨOtup~~~YYYjjjyy_hhhǜfYf3fNkxeHHHyyr3ϬWfV?xxx111zzwf?~~e!!!...AAAfr_6B ~~x}f9fBR⸟9fR!, H*\ȰÇ#JHE|IѣH*]ʴ iҚJJիX~@֯`ÊxY͞MZmݲUv`ܺ] -z[ٱɃY7H|dʖ/oLP̗9,Z iИ;k.Ш% Yb4ij& ynW`/<ܰȃ+|96nËx7hĔ˷k~%*]O~PB 6FXR$"aZWt(.mH s%(0 h}Pl&X0ETЁBE#F=T8dDi Q[ZT\:@)fB%8?ly$%dH.h,w܁埀%*8 #T`p? G~`A hG&=>ڨ ))P I*Ӧujh)g-W*B% Ci鬙n´(P| C fY?ځn&A$8 )x r ?L뀗 &@ !AZ2ęB 'w ™<Нy$٦,j~?i @۪@͠eLA;0+{綱jjnK`{3&Fqw``6 x A jf/ Y[B[ڴvArtx?w瀳*(?/fގ* no[*`^鎕l 3rkOu jv; @π'</hX T_!ը\UE8L}@遗v|L^KXn ,Kh$l(f<o(጖Thm+nJH ^kk2mjׄxE ò[NyJimRVu"ԮUR`(S7zlX g){' ,a!FL)Mv-,89;S1#exb%W– s'()%(TZ -paO;'SbƄ?qY3ܼ xXвu$`oehe#yӠuAtV]|<6" @9"żBLhn !Mb>vejRKuHR"uBkvAf0\?q.M Mz4|VEےAL~H:Z3H( }hsqP01dR7/ٝ aHg^/Ҋ=@}NmIkSh Ȧ$h(|u8=rP@1ѐo!rS}\8# ]N}o(?p un)Z+#hG ql#nŔaB̪v,o`ֻ~nXޝ$\pPPDHƏx@Kϥ (*@9bG S> Lw~z;Z#x[}"YBMD ;Ux1Z%ymt߇d!W~t~~Wr~W8*F"`N5bRN3$"$ +L#=Z!0$0E]a=&o{8 s"ra%@)ђmu`qY4C3藓뷓3*@?*xbSF%A70$% C8 c+@ ) S2$364Nc34qh>!*xVg6il~we5qZ?k91sC2.oLa)f\{%9YYPChp gRv-iw T%yUg aJ$eIw T`% &7FO$xGY;qV 83 N!57zI\St3> r4F]A@ 0Wx*xVOdGm)vր  2 8lS2%?bggXFw    mP+w- Ci@d,6YT.q723]cpzV*wG'Zx9Qrd8ZzeZtWy.\0ګʪjXzfFp qEWUzzoZZpWS >qYq 838r0Gsl6W;lIj(ZGljwwJaSg#Ppisq{;aBMm@^ɰip! z `pmp i@_%%64YIVe2@o0l W0 2 / 2^-Q'|󢳻2  \ xpI9*.0FO낁-R20t[2b;㑖_SD"G+ S2 $k(9_Rdqbz6vٳ?C[GKmi+0h [{vjU{Y];1Х 8DCƞjrkvیz۷27bIvtv;ۺ%pk[^A.6Ȅ{+gT34@n0 me @ ,qiHN\2` W0 W0b0½Q1 '|Q)~2|Ì@ 5<{k =lQ?~+/3,nہ `QKp zQmc\Zz|ǖ! s KiȂ! 0 JȘ|o,;v Pɬtə\ |˨kM` ʱ˳i p˲A ̼$1ll*p ʼlʽ|f;C`vpͰ$ٜ^=/ έDμ?L;eܞ,AϻX| ]KL Jp-=Vѵ<`ȲMo-gBI%%02=4=f'Ҁr@k98!Ў-4&]e442^|7:换9&~^D>"#|H8U .D(6%幗#)<*=׫s*3MDR).55v~|78.;i%&b+Ɨ&{.5)p]As$< Du -136N➞{r|..<*W&i5n (^I<ʾĭr}3>!!h. MHN縓n'9~254Hg(4H>2bB`}>> +?LH' 3"/N>I=Hҏ(&~K8 @Ds5~2\?w4|~j{~m!)R(Y/\9ԝ{>%=3M_S1 O&'BІ"$.*<#7:^ub^-Y<'P ,$2ދm տrίk ;674H1S*i4oa.9kB4QC0]U吃)T $h  A?,%H  &Zb#+$=$P9`(::P(LTSQNZUYn a`)vlYLٵ`ؖ?oϲ7ݼ|ZaP:@Ѓ <|CdC!C}Y?:@ ~F_HqwPA?P4lM?&Dt|ځB)FXAMؽK;sϧ_~ _`6п*0A2;^@p@X B@VZCydK69EY)Vk)=JTX @ȸ(I .fF!B,ɤ2Q! ,g@Is$S$zjګz%ExǛR@Af=n{o?Vb5/e6֊W|qw|͔!x\.y pC}tKoSeƹT@--mt5ukEvuZ&T>vMFt4.+ӔhG=ѨP>+U9zis=4 R"iMmz(މSUzԃ UKe!qjedC˧FzE8u1m9DAfT:`QXcBciFLI B"\+4be ʣ6|KeT[yYfoFm5O)jV_G 7IX❏Mʎ|y*>Q٦-^S͟\{!; h|K}۷?qo."@Kl@Z<,c@gAs@ t@ / dJ@ @4.{*['c+ si1h˙q'" DYHLA- .;73:t3 3`!xzDCPGc>;&K4G +|77 p 8*zD S@;dsMd6 k3qk n#&M"p sk X[V,D(;D\#.%PElDx0P-.atDb{Fb.: F8˼˸oԸ80E@4;G'"*b>^-_GU;D./j)F.J-24ĉDdtt0-.H#2FDD_,6иsɨ#ú1:gXa[h4 K;Ŧk34%<C Ģ' H00p.2DG,@Ď4K @ˌG/,FK85HHdľe!J@ ?=`ΉL*롽Ha>{ 1=>=თ[[/-#p/HctHaT λMLć/pI4#2208G(ϯTHWۯD:LjzH5OJO3JOr˸O.,OX6??xJO\OZD2M`,L$QJ<.tޚI5-DPU_<* PTPj %H<,R\Q'=鄳DNhKR@.h: @0J3M5]S 0=Ͱ>U45S HHDFRE],BGEiTGBHTLeJTLTN:kZPPMUQmEQUUZMVm `XEZPD\> U^..@O`]VƱJh8R?fּɪVp WqpE!n=WtMWu ZWwU*xWy]"yW**W~2WŠ}Xӂ LX}5Y}X*ZXm*X}2 Y5;YF0XؖYډyЪ>Y?{}wp2u Ō N:N :<٫ p ^<>X;ڨ ٩m>4 [3!.$W ii[ZO[0A[Y %\P\ōɁ@FašǝYɕ.\ZR e\y[3*IT!'ТȎ =إ S݊۱-]'*P, euީB^u\'[%]إ镌Ai \X^P-6N \}_ 0]]5c]p2$ ٩ ؈` @ `FXZa~aVa6aaVa#n;#^4 X&b)*Rb)רjW,bb1^.c46 4nuc959H8c>Ɗc@d9X d0d@dP`pd dKC.MNNnOPQdN^S~TUVdTXYZ&[6eYV]f^v_e^abcebefff6hFiVf+ `lm&n֏opΏqrހst^vfmgogqgsgugwgpgrgthvwy6zF{V|f}>耖肎6F%+hvfiijik闾W`gi6NR^\fdvjjjj._+AXgk k.k>k6 kR h+ pn+kZc;4x6¦5\a2T@쿢hA0ώʭ`8e@s>mϡ1cʪJq[)޻j QqzƐ( v=܅ %;m(n)QonMnhf  #,뮬|V.2(jnXx.%11^Rf#49L!q0A|qp=6,Tq:p m穯Apc</qplH Tqo`r!w!"pը B *N8-Bj1hQh9rbЎ.G8aѨs0shl;G2%%sq p8Jfks>-gl,7 -/Pʹp91Ϙ!sW"t'y.6z dm'BQ+`fUh+X]&u0 ) b 2XtVqu)u'qH1\UWmfpwDt!QE穇xw@`wI1Px0l킇ً%n7FQwF* ItV! |G T4ծo޸m0y Rn @G'y_~)zJq:_`'F]Sw_󎶇 Agܶn+Rb_U+`vowO]Pmp :` tQ Gu=ǟ]|x d o\Yy܀n*F쳪=]9mب2 ~H ܺw7KI80QA\ȷ=pKw RڷsX[,vpv8b)?6}*>?۰.l^yAT : ~A8!Zxob!zT8"%xA"z"AV`\~@=#@YX$I)BE:L) >`T7Qmu]|&xilRIAV%eY8^)Cu&D'U!J:)NErŤ J}B_Xz*B,9ѫ%hQd^IIuZƙɔ "䅚B9TBLeB[ f6 ³.B%+ЪAVzPB k//a@PD!0w0H F[|aS^qb!T[ڕSovyƸ&EXD&Cf lgEBVmlheLk2ݘEC4:/o06e}6c7P?dDqfdlq'TNuK7}D gE%i+8 p[iDm8L^f5Gt` X< >{-Q@S:вu-5Т3]B^!OwK5-(=?>߂?D-cv" o5P!0;#??} m hG|y$h ,N o(3 Trbׁ= v1 p3;2ev"=e%,@Ã$0! t`[C|n*K ݋@0VocD8M@'e7C ҸLM`̉#9,MqbETX/Cgљ1f,$'Bk=S#!= z|)nDUWLN}A"^tK<8\$RZf6RbʕnyoIpSVo1-L2JK=$K-^lKc:eOMSKh6t/ qA /7КzzHݜ8/[(FSOn m%G3̡ ׹S3LJ[?΁$K94#B] A3$\i GrT-b%-YKN Ct,@rj%!NUȞ<*MlS(DӔH.-iM#{tuZ_jne]\l+kek[궳[r9\ڮĽ\ly`^)@kkl:7[$>4}grf.Yc=fJXDhQ^bi肆5 ksH%}l{߁8˝Dv ˝ZeWsѮEB)F{Uc~VZoQbLo1߈ H GU'"47&Pm)[uJS}>C7 ]A`Eܙ `58DA9`m "aZB6D ԃ2[  :<:Cr :r}AAB(AbHa ~A%^"&f&n%6`?p)%4"$~K̢a+>C Т/FȢb"$c2b+2>c,1z1[,rdcڬ (r(Ah8M%<4N#Tcqyt#VQ":^:"[ ?4A#0Z+c>nZ]@*P<aAB/+,"|c<$="E",*)B.@G $1B+<*L@x,HtK#>B=^]D&(!0}dA! #BT.dLReU>?֟P"A?e1]ZI$EZ$Fj$G%3B"QIJKLRLf$N$O$P:&%J}OQeR.eS>`rMraVj%Wz%XG>f(eZe[e\l*Yoz#pb&}l&ܡidM'uzuvvw~'wgg6ʑyFez{xYyyWzGC}Y~~._ǀ^]l\L((_OA\,}f}{DȀ \A|`6އ2((pШhuhYj h(||B%*B^$G.i#\\A)^)B)lR}M  $.*6*jTsƣ4<*fA'<(RX,J*biƧ?(*-JezGB(4L!zjF2+4i*kjnDZ*j*#F+pL0%k^̵bi&roxkk̸i^̹BȮB(/+ͻz+ᠶ #/*'+lNl꼮kk 3v\j췊l|,ׅ, 6Ƚ,p,ʪձl,f̮H/b--$lϞRNm>-.gԫJ-r%֒F ͊ζˎmg퓜mǦ-˭-ʶ:V-F@JN-am΢n..n~h-"Ƃ-Э٭~Xn):b.z.~ƫv,H.>6P-2n?<.VJoo/"[އBnNUo^r厮zmĞ؎uB֪/ nΪV/JbVU$"rе'bx_o R0P@Xpr ܠ#ז@,f/e!8@p0@=ʁ/1p8@ x%аCH TL]ir|U1\qjqUr1z1{gqaȪq?ߣw,rĀ|!2"'rq"7## 2a$W%o_&m&o'l'(sk()sD (2+ ,Äϲ-m-߲.l./ <0/0s1D s0'1332K23/347s5?sDDsj1Ss6[7cAp4K5{8s:?9s8s;<;3<<߳>s=3=?@t@=s/A'CC4BC4EKtDoD[tEcEwF4GoG4HI3IIJJsKK.4NYNҞOuƇsQ*QQ/z6|d0SG5$vXG Tg9u!ӯVuQ!0X55"{YIG" [ǵu"\ߵT}DZ`[HD(6`;6(O vV5fytmO`[@ <je j 0GtvDAavvii[@j PGngof[kυNDAMD(e͖1^ pp[$cl xowwgo uD uO<6՞4]lLwqOq[!yx !A O_0$UCD8N xkxv5`wxx7_̂\|'S@W<|x۷8K p縀pøAT}߷͋C/HDA챎Ogx;yE9H8#T yyyy@G MvgW|wwwT7U XDTI::G:cHpW:7ɆOl\vznu#C:pu"C5h$!zn!:`tz!zaŭ;yG'{g;YȠ?;Wm@; [;{g{UHw{Wp7یM1{O;D;0;G;߻A;S;{ |;S7k%lM]c~Dps{NX^>~ >70~ھiS ~D~* \ >wezkcD~[N <ӔkDQ@SQF8\?i+qwQtR3xaƒ(`B(80hDM0@#IxB LAD8PQ(RX0L R8߇(D@&G$""EF@uK4IP +l{o^{p` ;{&E]:@LA܁$:8*aE  `Ń!H4Y jWA,<Ŭ† .4DDZ6{` ICXf0?:QOI4NX7SQSq ;N>J <\, (.$k :@A: s`Cp!H5LgjGK@a/j"r::*|Rʻ( ") 8*G |@B Mh$ (2$@/3˨>"D8 B!#JQa?Cj-8?ѼH!=<ß̃:"FPE YTR5=֎Q,I zRTkiaݵ$+p|X.%nXG;`З9"c`8HCT HG>d4FN&9 8(IYJG~ҔT* dEV$L,PK[e.'K@y`. 02i:^0L 0k^6IIA YNsn3fmNt@8<ωI_*`#@ ZЂ~afT $`P>ԠGyLwF9JuZgT^,@(oJYR#hIae(Sto@?9PLGZT!0mJ:'"y(aXZְ6K *I`VUn?ʗqQTmeRD.bxUlY7P %H#.UlXYURL}4qYʵ{yjbS.Z ưk] @/ϙFu W9@v WB<@ѷm#~мJjYk]Wە#y. I^ ""xx[؆׽5.rK%F_ґKh5]鮍 V,v?kb(փ E#W"ȻDe-@ (0DެW]Ỷ$*&eXö^X! iB}Ar:1YlհԲ!!AyT[OԹJ@ex-b7>LojȐrD8&UYk滶8 6A4pͮSyft@sʼnr&`xCw77Rv}ٯF ;:^AMo\~J~qu3>Rx I hlhJ|e d/-F`,4CS2߀bk.r/+ @4_2@ӂ1v7{7s7-7397L:hls qӠ48;ǓSQS5"ȓ=3QS,8 ꓥ*3<B T> 8/#4I1˫s?F֠N9>#ZBѰrC94(OD 5(AMTp%od^!B@@s8 ` AbRntrYĠA&`PAkc'HGjHՀa` X02JGLFgJ  4#N ʠ ! ":NTH4II'3؄Ox~ s JPX=J*_=wX?wxTF@:lѓ]k Z@y6X9bi'b*YOШDWw!擣{e;7yyttoYirv٘E8~Y,i٘}v9YiWIכyNf} әY|y99^qSY ڟewנ]ڐ Z1洞yE? Z%iWӈ&G٤ycz(s幥o֤+/k: LzBEe: kژzP7e٩Ы9i٪(t]OZ|s::iS&`+P;;!+=۲WQۤzۏ{]^z; ;Y0ٶڝ1y3פeP> V7Sy338%9]n:/+;W )[۽[۴j'q{{{zۉƧ| zXɚ=ڱ&?79:-qy“cW>{[O ť{;|Z[\Jym8ËPڛ)a{8G^p{/܏7\`[PuXʙ X e%P[<Ǽ܋Ӝ ƑS߼3\9_\Б/蜳YǓ|||ey$Tc:ϸ(8 AӁ;\%ΫWa=d}qz] |{9?<ӆG{փ85ݮӹ W\ȿ]Jۉ9]ƹ}=B݋d\S݋joP^]=#ܬ]\=ı]eڇYy3){䩛eSbݵ)<7c>=j l]W !>%1I;C7ݧ މ}Uzؕ[s{uv'`^J` 緞7.+-(u=~RJ~ꅝsuԻXIoʠ५ 1]G?/H 0]>"9 LS@ f/@` )S @ƞ jH  ƞ R>  < `à!F` 8Ѡ  43nyyb@ ,~S < :|1ĉ+Zo '.z2ȑ$K:t0Jb| 3̙1HX3<{)QD2ㆤL:ԖOZ*ѦT;z-W[. 4#ڵl/:7ܹt5ಭ޽" 8| ; † L pM٪;{ :g$K!:j3LE Q1ƫkv=2ݼ{ X+6$ ɛ;=:nKwߊܻ{^m>{_q|ۿ?1`Hn` .K`NHamQna)F"C+Hb(Љ+8"#)>D&x9h#8#AIdF*Y#::O2%SZYHfI%\fJ)ieh~l9C'C{gC?Xy'D&ڨ2 bK=nD~*zZC*ꩠzj J*ښ+ꪬ*, 쭾";k*l,Z-F{-j;.zkϮnN{jy*BdoP˯Cz )\zp9qWrr,r#L*[r-r. 6׌>Ά^s M))A=4E#zIK^]R$`uwAbGvr8`AnsWPvݸu(mw ~rMx⦁*(RLN9@yB` .z뢧@"XPٟ7!λWxzaF;/`́(P@{{ޮ^w"@'AB x_wo p[J 0 `@olqs™σ(7}l !h@$@n Ap/! x P,| )߰A~T h6HH,\,tt5mE<˘F\ H+Ґk;@3&!HfDj#wZP @%M" 0Qʲ )Cri%Y p `\r ^IaJSj)T2s0pF8մMUvB(89?!Ȧ2ӹuR?3PySħ&9!ET< ҠDNND)IF3FY<i"E ĠI!)< K;NV ?hțBrX$ӟr(B!Qd,cTH@}iK:E%YAf!zՅ4 >`:f=Jū*(60pS P&|zE!VMa ht: $KYZfY}v B j`Tv '-(2a /kaWc v8mAB =On!`S?үuЉ] /hs']#kAh0m [Dȃ!^%y;=Qϡ{  >A: !"Bt-]?:(4T选aظ=vmmc47{ǣvsOMTկkm\Ѽr˭sifm.Qmm~gܾu^ԍi17rPz[7m[{;RB ]o|ޢ]k[8 >\)3⣳ZěmSC]RxגNȡ6bO\cv5?jǸͧq syw&0{~s>9;[ZE*0G='F.ˆyOslG~xq~?7}5 eSB56}7skyvV'z>Gwe qB56x>"@HʷyywW7zh%" :-8`/bc8*P9SHUhWY[ȅS?NV&ogǁG{G?8Wz  9]ȇ}PdhA(` '~؃!{ї~ WuhyȈ(HrHȊH7({g~%uP8Ԋ(54(Lj聵W~$xP荅x(3aa/7igf6n{8zɐ39>7r3:`0Kp"B ɀqȄIv7fc pA @p? ?0r @ 7 I^@e\`Pv _8%1H :& |`Z jC @B {Y `pdZUep+ؕ_iPwA:`/ 40 3y Pv8𓱦 y` U0  `aXɘvva:  /p?pA)%pA3Ěk` I@vep ǹ=wy v  kX P C  \ 7)`y{9.2` eF!̩ݕ|꧍6<g4pʩc;HZQԤȗylHxzQ)ҷPuMʬL玓8IP<ʭ#h萲mXzp U@ʮJ5v|*x~zzu 8':ZPu] r(Hj Zp˱JĚ{Cб+*:jW*˲9k.K;ŪI:kZ {|09pS{I;Êjv T a:Yk U2@=mc+*{` .n-fi W[劯4 Uk$o![3ĨUX0UL x`P ۼp ` AI0;,5DNpM%V,bAeZe ' R0;PK+hhPK=wEOEBPS/img/home_status.gifGIF89a*8008038d0d03d>@=>Aa0\dTT8T3}v3v38Tdv3dZA=Z_=v\tA=t|a33?:03 >I L\[S>A#A&E(G*I'Y']>_0\)`-M0P2S5V8Y:\<_*d'p't3k8l>a1r6z5~s>|T3Z_Z|tAv\@cBe@rBuDuK|DgEi0TCGJG]]]]ZX^ZTqbdgmgkvswtvűvstxy~\_=\8|=|=RY\ddldldldldl2727.015;<A F#H#I$L%Q(V*Z,].a0d2u|Y8dadaңdֆއㆲ䉺薵嘶桻⡽梿ŌŌ̡局֖ԡ֤ҲŌ̡!,* H*\ȰÇIHŋ3jȱǏۉIɓ(S\ɲ˗0cʜIMܹϟ@k*F!TAG~JRK>ڭUN Ӯ1Y@Nj"+SĬ.YݰnҔN۸o)bVlQˡ{b$*\̚/M]T!L$ev3dSu͌4eMzjyI(J+XH4*L:4z玛^IPz;~,믟T99T S_zG(MSJ@hx@.9?(/;A_~x[씐)Ȃp M8lka #-@P`q0JR W ؂tēf:Un 5Á# x C 0pyS0@uq0GHC|-B+8'P ZHbx8C]wEhE'r3 6S )@*X= t @ưD&jƃ@H[TR%^[+ F#B@HxP3K~kT)Q4f/y7e\.S:虍uk6qմ&ުFrVML:v- ;PK꬇PK=wEOEBPS/img/owcag026.gif.{фGIF89aߪNLJ҃___ۜ,ؕvk8)kLw[|Ѵzike˔lK5k???%=ɵk)fUDyW开ޢԊXN6 .*#aǼO8ġ3גӛrY?]zμxzqհvtʗ״Žj_f@ڟٟ`Pҫݞs~W&^a;ԯ:xZ͡Ͽëq} ??ta#7wm#9u ˕B 9H!3I?5`wމt :J0$0{_5ۍt0`]3 (`s+HJY׀>J3k> /Q > 0afu`3lL?$f!f+o@C+Ph8LD1f c㧠~HWE\l@ X䑟)酓OZ @>K+D10CBQl> OU@!LRA?xۏ6@wO+xV@5 AFytmILNlV!t:ɕF,yg1 |j@*F"YkA sFktY R$rfPٰ 4O"ϥLmM'{_7=T|@e*F0-܎Än"z)?w2ASf)J$d@Vfٝk/I^fR5fA 4zb{k.Pb^MUw+7L$H }O C8IzAT& S@4lzCŏ NZ$~gg  P;} CQȐ6y '=U/ CEHVx—$q|e9_G [&a%v|M7Vt# 1\P:7vP`@$vQ> p)aZzx#D>LX1c`B2e!A"p*рlpxH:`:%JQ}WoFdS6[:0ϲƳ )64af:R&#eG~ &)5M}]f($ X_L% B!*r;̧>1 'd@q1:c'1L Uq iĢ(Jz i0i#Ɂ'|aǎT@ *HҢtF-LiPT]@M XjmБͮzIWNJͥ RHZִBAp\ӊx׻~ ` ع5n:d'KZͬf7z hGKҊ6MjW lgKͭnw pKmmjۏUtKZͮvz xKMzW7ͯ~@ LN;'L [ΰ7{d΂,WubgL8αw1~"y/./\ EdYlXβ.{`q2f#"$m!Џ ;ELBЈNA,ԇ>OW}DpfW;N#T0 QpVհqܫ5Im) ϔ;]؎EP#wF >"Ń* 7 *tp h1n@]|{X!  <{tqu~'5A&DavVs&h6GomW6` pgro  `47 V GqFsVq)nn6gt{yrr/79\YyH}OPfi&?f`vH`0p_xha:sYy  }nkEa۹gcVٟITcy )I}bapGQzڡ ":$Z&z(*,ڢ%I  `,3*4zIo<ڣ>]ZB:DZFzH LڤNPR:TZVzXZ\ڥ^`b:dZfzhjlڦnpr:tZvzxz|ڧ~:Zzڨ*Yzک:Zzڪ:Zꢸګ:ZzȚʺڬ @ pؚںzp:ZzJd@ :j J z4;[{ ۰;[{꺰@q ";$[&|pp,۲.0/K 2{ :7KSpSгW7HJL۴NPR;T[V{XZ\۵^`b Xp  T=7p|pr۲) s{0m = D7c{۸ `pi & *1W kз2k;[{{p`Pj["[›p D rKk;;+{؛ڻ f[k0뺰 1@!@[{ ;pvn+{<\Y{+7+6:K۹r&.0lkV۶o :u+p; ܾ0HJĊ[[|;\'KA@@q˾b^,ے=ῬF]WъM~h57~_XNX ١-F]&Rj>^,n`^m =|9n]fn>꤮ ޯPޮLM璮p'm aB=\^Ӯ8T^ϰ> @̽h뻭nL 7ϽW[P n = h бpMHm&0 >} ?̀ ݐ붐l>Muo z=' ՠ~m@^?ꯀ _I&0L?еm YP,_!MP _ͼ@Oovo޳qϙ \^ϛa`.M,Ь _dT@) LQ h M6 _akp7]*<<0/߲lP pJm a)a) A *B_%NXE c9ѣB]6$HI)UdҥE#O) %ZQDE3abJRQNTA8UzHf".`UY v艓" 6P(СFRIِ ė[H`:H.>cȑ%G9n,ԭ)M\ԫYFMZD5[ [EVNH^C~e၍+&εo=⌛9ywT%Z;rڦo}=i (@(chXC{H"]@0*(+#*4l05622BGx)1A2ba>j3<1e5T"],9 !z'+:JȑfȌSJ :H@~ MHXs(,pAуBrtlTHG dl!o”HE ThSZcE uHQI5T~MQXgSWI O%Ɇ'g][uڻe؂</4>τ\N;+T!Vɖ?ڑtAa$(H ~Ewl+`@DYn6؏y`7L[NHhpf|ًrf!GeT22^yɣwмoJL kNZҹEZ.Ƙ]6Fb="XƻhL'ڵ Oqa/zqZ=}]\"^ Kh/w9;FJxSڋ\ŚQnGB"u ]x5WvfӾiFA,Ԝr%pZ2Y[);؈`M!BȎS5cC$rTͪy!ίv٠T\?~σCuSMeI"_~;ImCiW=T⫎*U1԰ Dub^ 87ms|G# @PT7$B"""ej[LԗuxrG~ Kir'b;40wD z7}R*?ć)ͦ"dxI#v *C agȒLd8 ǁTdwYF5F!SR9r"tcB9C*֨XF#r> RYB6Xbb@VI"4 (oV̐B_Th rPaLm׷~CFR&EiGMδAQԜVu)ACQi0)pB%Eb'k(3k i)HFΗA>f2RhvEYT#p T*AqtC,*^z,3S>lpui6ӫPfxxyu'8$bD6kRXжG,Xrj˥^IjR*F*ke+:iv3MAo QY7[ 6!Iikkʖ3)4xX W`AI)ԛij'L\uH8E6ŭH>5)\&;Uv$Vee.K|?~]&JhL,}Fo ,I7[l$CeYDutVRٲ^ /l0څؔ)c,",Q;PY.dv Yb\%j9:$-"LWlVaLAM)3 ČeXZ1NһPmUk=j31I_aGcvI2awC6>UX7u{vj Bd``> q^ U8Ha5ȲAkm[k8xoKPD0Dc5yJ8t@WK䬰Qg:1vNFs6wW+8\9!<)ޕps@pe"zp(zԱGso[4{i~r_*9dDH{uW esPYs‚@.行.Y?iQIAAu/ڦ&!Ġ !+Aْ@8 >VB-B.B-l樻ߣB,l qH2C9C:0B:t )KcSl EW|EXl C٥$Y@?\z,Ŷ@\Fb,FcDR2IFXC`FhcFjFk HTFh?Xmk GqGr3o9 HGrGyiFsG@|L aGGDs}-ԟxX@C-TG}TH%E5X(JPITOTP5PJ; mP]UVmUPUT-S+UXu6uU\U]SX#e4M_m]-Vc='a!~XUdVjVUVhe._:cP>>dJvdc]A=c?=3-߁O/6dI0dAHd?9d;^:dPc(HL;fQ(a&~-cbG.O`f29@34`G`*1n_xOw`M?s]O_sN`gᐱxCgheP`<ؔFt繐mG↮glCxgdNʜiU6nPaf\D,gl ` pe>f1&>b5QvWhJ0cD^R(Mdz&F߈vJz}ހ攕끈nv6x&ivh&=A1.lGANV㐱h]X+=aCEixbARcȮ>vh@f dc* $=xb4 OON 8(veag% Nd6φoo<nch(nN.БM%.g^3iLM#vmQF8_5^F Cn2F\6apߪp;InI0w-e]P]HguT߼p&bI u^_(CЁawRsn_g NmF;HFDffk5s_ttwlƦk/PgGOlp}okrO7/ m[exYO/^M~p?/jltOviOCXnvr:O_b.&cd.~lN(~;l]wNaH;8czOx? fH?tAnMt_xXdx?O6x'xAp~fߕ{u_iI}C`j?cAnI@q^}^l1_< >^g?o'p<c:pz/e?oO>F_Ewc᤟ok{k}.zi ́ G!@ xjXtȿ0Ai~wPp;47!FP.:"NaKI2AŌ:w'P8rŐ~19(L:&iQPԹ߀XUk?Q-VL'CT˪Eo;mpi?30Gl5Vm vm ~UrƄt}gӮm6BPC7pXwqjđ gBpSn:ڷk;xI'n4ܠVŝ0TGeGqBa%eyDO Es.D!v ةW-SMt3GgDnzt(F( :(a]꠻քV YeXY!)F3a%Xajag>J`24CKt:dhuO uf6 G hRfI'CĢjFyє<Ćl)/ |0 +0 ;0&M`,Mp4[{1! 1%|2);#Şr,25|sm,3=3Д0 eI4M]QK=5UO= ꦯHa=lP[}6i6^SI6q\pu}7y<}-0z >8+x8Kv[~mO9{q嘋~祛~:>:~[=zj~H=>{ә|Ǿ{vܗ t=833叿Ao?ً?~w>뷟>o[=ޏ3`>|w ds'@ 0ܛĶ³ֱplVB!Ұ6!s<T!F<"%26KRqig-* 2(1f<#5ךUMC[(G1,s#91(St# 6;>c E24#PIImt#MrbO$IQVimY3|%,gXGu@9X,!/)LNB%2k]dY3)M=SulL&6sii+&8)jJ<2&N2zS|'03~0 S5o@Kb,PI@&&g ؗ} ٷ t%\>1,!F>2c< 8(Q  ߦ < &6Ŏjpcn~3,9ӹv3=O 8 1k#ie,s8dEx2J6bct FOQԦ>5SUծ~5cMj`2F`h׆VtszMEMӵ1 m-ԁ6ms6-q0(p-Pнf4eeGVb41:%yH+?838#.C$;m\U{_:%b`&fq>9Ѓ.F?:ғs? #a+<$O9#uMP!s+=7ϹӮm,  Sbg8r #~agطCs@й#/SLϸ.Ajىy,Jϐ&q]<?=~ykZ)==vf(/3]Og&'~^8c%)qG;og=[01.̱݆9G䉀Օ9LTGjf$A> \0@a  pd%`>`? Gν`aa_p,,Qp6LKC2 Q@ Cr 0 x!-aUQnp }4$$Fb܃W$^!0"mWu!Cԋ9H Ga> 6G * @ E+:+`>`? 2aQ!2Q"u,B7ʒ,+Ta9,#8v8ʐ"..kXJcPpe5F(>B^08 !GBF"Bޠa9c>D26ܡ>#9m$B6b34>$ .;r]$`+N6;v=2DQ~Rc_?:HG-a@ Q0 Ba "GAFi$ !6$H*]e_I6Q48 C#JP4Mդ\;CP*QQ)N H bBB$G`EFCRDzΕEh$Fe>"E~Z]¥J$D546$"fcN@Lab&bTccBKI暔!1"Gh%j !`f0 a?!wff!YfD@&kd4rho&PP~^ U3K'WO,'ssF e" XgBX GGNhjJj{R_41]f9^?ԥn ;rQD=c"O(V'(vS! 02@H(  @"BZ rh*X)9 Vfh>`& @Y坨 U#XOˆ|m@\.8Ct$%O$叞Ud!&d18 lZI M, ȱBlS+O.B>Hգ~a@'T➥N]B~*M|8e 'Dկ#J>D@ HوnBȵ:*-Fj k+%0ZūQR+kW-C[ɃV^lhW娃jxSBĎ*plE>v;}?rȒͦ]g^:pD %Tf!)"ɂ!::H64^}Ӊn-v~-؆؎-ٖٞ-n",A,r8P’24e_=lp!%Xd^.fn.v~.膮.^!4J :PƂq" }kctn.T@.#i8VBL#8FJPoVu:P g.T!7?/M6+/9Ƥ)ް%e+uJ)B[fƩ0'/07?0GO00ݩ."4hY`~G؟2LB8嫢c?WM oN,]-Gp?̯JpP p ;m2̥pPWY{"|Dp??u1 {N0qfOdܭ/ c楮1  2!!2"';#opk)ͥ2/^&$äMa 86@'g2ín1P.'A&2 -) 1fJC8?d',n2[4B/*+.xe B7;3<dz<3=׳=3>>3?#;2W$*Zꮟ_MZE޽ e;vc6CZC[3bjc"{0NXJJ{M{!3k e,pQ9w2?5QQ5R'R/5S7S?5$ tNr%B\В$^@dN3 ?(& yX a4bj4qPt^5fJJ3]Xt"e0QOInCe_6fgfo6@[@AoN QU׭|!t8-+G(8沉IZ*%8Fw4L6uaW)*˵24?{t߂*o?Tsv_3Fm^, Q2etB*p{{7|Ƿ|7}׷}7~~7 x@U,ASʱɁL1">0Z2kr/a765ېmBp?/uk/{x1m}-bC;ԦY)wcy\"8h/*Bob8#o@).0/&ׁcL^so?l$.,?/ot" AØϯ//+h7zA98-ɤiW5j'%O4[/RI;:CL$Dс[w:ُsQWٹ:V1y?T+'ì@E7԰P''P;;/HE{ 햱U/{ 8Ee:m{׻|@ıߣ@-vmB%@M&{0ѻ7|`C: tJE.59mr:o.|:>>?p .nR߯qkaRѓ_3_&Ĥ9_n\ >BHs=t?׿ۿWz 4xaB `bD)VxcF7DLaȅ &$)Yt↕7tȣ<I zFcC &*~ dA`U2av_( l sֵ{o^{pFxB6vld/m&1ʓ77Dg &:sfY/9`Y6(pZMۧt\C*Yh3Dm\FjT~{v۹w|xv,oo &av?$.&#,þ3M/GHw$J-YfHά33B$Dբ08TU]V]}XeZQE 2`=SGE4L]!t'Ot\)Uؖnpr=t%P_z%XIER~gԽP0\qȇ~%-5n1,xM/_]H# nV!7ޙ}g?duG>餕F(V~ꨙ9-$iaޚ뮽X]聅>mNi~G#o;h>.Z\صBOnn9Й-A=GYRcEZAk3 '8vtǜl?x i,u_g^`8 gx`z_77t}G_-B]${ \G}8B1 A>~P# Ճ ~!$8;dB!c"'=Vo"`?TO ^>zP=zG(b?c#&-Y$ C6~tTsV6l|#x@N wx;$jTԣgB-s\dXĉ1ud l!d$'9;]&;Zo9@l\! ʨ!2t FG1{^&bor!5ܣJg*M a+ 0YH+kO f~0 &Yq{\/ʤ(KgdL4OfPl -4a<`ÐA]Nők)Bf>*(Cf8PFv3)E`EGP .LȠ\)OQ+ R5҅4-\PZ9YuGTbʩ *YYЪ5oĢV"qTX2VHyZVq\ kB,;Y؞ѓcK~e@Y73ұE:Y&lfY͒Ti)TE[zk=mAÿmpaڧƖ,xr+F,!+),!:F +\W#0Dr{F2Uj_w4` !ҏ Bߩ|%oT ]bWdgD)&!I\b)VY#dAEcFU0:&(a-@x wЏ;d@?`d[@f`@~aOd`EsJ-A,?ht?Ё ]hCщVg]M@ f#O9+e]jWmߩH/vS }^58Z#s6HR Bczlg?і]mk_6eL`(Tp?-_yL7`S_VpIр'Nr?v#'{Yt`?". rQ]0J9q!I^rX,N ۔?9ՏQ#Dv{U Vu~[fOqOD!B;g a^viWv}-oya![Wo.w=z.{@VL^0X).9iI_zӟWYz׿(qϟw}/8g{$yP!{CCP>u>uϛay۷F.\](C砠 LlǸf`N(* ?CPGKOSPWWR^mjM,obvO'}Jjz&֐p,w  m ‹ ,͌z l ۰̎ǴNJQǀL &m #LS P kϙ-b% "1Xh3Oq>qBQFQc1T1$XQ#0:KwlonntL'YpضQA''Ce i$6aPRCy)WI1afEg*AQDMNdN &Mޤ!$kPO<2QO.P2g [74/!2Lr"%]&2\%+&q&1&A1'h'/b-@*".*+R+++,R,r: @>@Rh( (&") i)+Z) -ڂ*B00S0S0 \A 2&r҅S"E -B.4CS4G4K4O5SS5W5[34k D,ӫ6 2)ӅV"Z231!jc.&dD999P.!v13K777I8seB,=S=ד==>S>>S=ђlL6s7'SKKLTLǔLLMӔK p-i?1./Jg)J!lfP*4.o ڒ޲1~Ng'y XG P^ M2NQ" (R.RP I?Ft:TERWUhUm+S&df~Zt^tQ!LWIgzW VO1禆g`ud5;1Y$A]auua]}@^}`]A^]]U^U]]U]]]5`^u_׵__յaa6bubb]v v6a%vaUW(Xg[[guS~55([[aFzjGt~^(nrJrr|֧g'\ŵ?Sh׶hX }gh*ngh i6ȍnvlFgt\ h5ChVqk