From 977a2f7d6bc71d08fc37d1b0b58b27fd88f7341b Mon Sep 17 00:00:00 2001 From: henrikjust Date: Mon, 12 Apr 2010 12:09:49 +0000 Subject: [PATCH] Writer2xhtml custom config ui git-svn-id: svn://svn.code.sf.net/p/writer2latex/code/trunk@57 f0f2a975-2e09-46c8-9428-3b39399b9f3c --- source/distro/changelog.txt | 15 +- source/distro/doc/user-manual.odt | Bin 221468 -> 221447 bytes .../filter/ConfigurationDialogBase.java | 589 ++++++++++++++++-- .../comp/w2lcommon/helper/DialogAccess.java | 1 - .../da/comp/w2lcommon/helper/FilePicker.java | 83 +++ .../comp/w2lcommon/helper/MacroExpander.java | 2 +- .../writer2xhtml/ConfigurationDialog.java | 236 ++++++- .../comp/writer2xhtml/XhtmlOptionsDialog.java | 6 +- .../writer4latex/ConfigurationDialog.java | 54 +- .../writer2latex/api/ConverterFactory.java | 4 +- .../java/writer2latex/xhtml/XhtmlConfig.java | 82 ++- source/oxt/writer2xhtml/OptionPages.xcu | 10 +- .../W2XDialogs2/ConfigurationRoot.xdl | 2 +- .../writer2xhtml/W2XDialogs2/DeleteDialog.xdl | 9 + .../writer2xhtml/W2XDialogs2/Formatting.xdl | 2 +- .../writer2xhtml/W2XDialogs2/LoadDefaults.xdl | 10 + .../writer2xhtml/W2XDialogs2/NewDialog.xdl | 13 + .../oxt/writer2xhtml/W2XDialogs2/Styles1.xdl | 14 +- .../oxt/writer2xhtml/W2XDialogs2/Styles2.xdl | 18 +- .../writer2xhtml/W2XDialogs2/Stylesheets.xdl | 22 +- .../oxt/writer2xhtml/W2XDialogs2/Template.xdl | 13 +- .../oxt/writer2xhtml/W2XDialogs2/dialog.xlb | 3 + 22 files changed, 993 insertions(+), 195 deletions(-) create mode 100644 source/java/org/openoffice/da/comp/w2lcommon/helper/FilePicker.java create mode 100644 source/oxt/writer2xhtml/W2XDialogs2/DeleteDialog.xdl create mode 100644 source/oxt/writer2xhtml/W2XDialogs2/LoadDefaults.xdl create mode 100644 source/oxt/writer2xhtml/W2XDialogs2/NewDialog.xdl diff --git a/source/distro/changelog.txt b/source/distro/changelog.txt index 49157b4..15fdc2c 100644 --- a/source/distro/changelog.txt +++ b/source/distro/changelog.txt @@ -2,17 +2,20 @@ Changelog for Writer2LaTeX version 1.0 -> 1.2 ---------- version 1.1.2 ---------- +[w2x] The custom configuration now supports an optional xhtml template (writer2xhtml-template.xhtml) + in the same directory as writer2xhtml.xml + +[w2x] The xhtml configuration now also supports complex options in the API + [w2x] Bugfix: Corrected problem with relative links (this affected package format only) [w2x] Added EPUB export -[all] API change: The interface ConverterResult supports an additional method - to access the meta data of the source document. A new interface MetaData has - been introduced to support this +[all] API change: The interface ConverterResult supports an additional method to access the + meta data of the source document. A new interface MetaData has been introduced to support this -[all] API change: The interface ConverterResult supports additional methods - providing pointers to headings and index tables in the document. - A new interface TocEntry has been introduced to support this +[all] API change: The interface ConverterResult supports additional methods providing pointers to + headings and index tables in the document. A new interface TocEntry has been introduced to support this [all] API change: New methods getMIMEType() and isMasterDocument() added to the OutputFile interface. The latter is used to identify files that are part of the main document flow diff --git a/source/distro/doc/user-manual.odt b/source/distro/doc/user-manual.odt index f7ca5d6fce68c78d5c202b096794a31d99345c5c..a990554c19826ebaae6acd72d570d49616e71f17 100644 GIT binary patch delta 46183 zcmZsC1CS<7v+iKWwr$(CZJRr`-?42QJGO0m$M%kG-Tl7v$GPX;I33YdPd=HQ*;U!y z(Op%YJpdOr00*Zi1Ns9M2nZ4gh|WDC0Ztn9ZjX(7MKjTke?thex+#rCye?iy4a{oUdEF~DYH6<9N0_Gnn zO*kHe7$Ar!X2Fq#2_~d$Wm_2-2q8%l9zv|nF5IV#>RpelT!Pdz5Bg(hds)6KAcre} zBOE0M;dJ}^{bcrvTDj?tb^e#6sV?#jkgFifu7x6b1w7_9qDp8%;#lBtu%7#1J|iZH zw~0spXP+8w^q#t+8Yn9;U!U%HYP^uiUBrQ?6u>dxdH5%Ynfk$@w6`|E$QY;7*Ob&?LoQW&4E3<7G|)s<}PHM^FoEy|8^bFHTToU6wz@zGTC z#X`r+CMpI2f%&^8R6%yX_aopK3D^#W5?s`M{*mY%zkUL&8tgld%bJ1^O2!+aRl=-m zmPY|GE9CNe-fhkbd;-qwu6Q_zBfA-2-hORd;c^jUhL|v<`}saBmbFr(N%VR>8hog5 zW_Xa?I^o8qIwO%%6fsKf0`OkA!wv2hYvWRtZkSz682qr>oRNBE#Tf=eAb)ExOt%^= z=zhp#Z@%LIx-CFz26U} zTU!O#dviL+Z2-f$y16}JVGjn^J0(qs(;PW4JI#u0kzK_xRDO2|nG3voG!4sw6R*Qt!lL+of8N@hDef`Vp*peX^|1{$ zWN9;ZY}s+I3^{X6C4T>=?Paqo+McIzePmo4DSHcp(iNgWaVM1@F+Lov{ff{E|61GY zMM|uV;|Gx2J>2^7!+w%LtcG~~yn21k2sSlWs!xJ zZ^d0@J7`NdK^GG4ZOvYV+fTxLvS_f&=h$PuyAeGJO;pgHVb~PI1dx5Z_|e$CLcru* zaYlo5SoH9}(b;tTEXo??&4>gt1W9E=7$t_T(g2|AGlSG{-(C%Q(9OAkz1lI-2X6SZ zaUklG6z1fCARJQdb$x3BK^9TH8w1}Rc5$?MI*eCmy}cXoTz4C?!sNJbyQFgVYH_(= zO>a?rkI3wkB42I3S|GL0NEFtq-D7ljg?jj5%xvYm929QiprzedfiK4Bc`zZgzS_hQ zb^)Hk>>Lajd;RLX?p~Io4!BzpJ;ab$sJDeZJg4D%(2gMN32s&(zq~*;ErH7_?U-LX zJ7oBDWtZ)c26z=Cxk7 z!ADxk-p4W1ZdVoj$@vwuV92#ae{h~GA;sQg2#>j0&*GKtJo#YUAY)+Gov<_t`YSGtO7FBNHd2lvf>uozF7AKriKi zWB1k3ZWVPL4lD0W-*DF8v18E5B;df%9^UjcZu%e?0J#j}zaMeK8SFA#A3LxCn|>pM zKQb#!Yp791oUtb*Ur1(ed+grysyb>k=*vbApZUIEjt2?jWq2j?PXhoxSDi^A`QGza zF7H`ckn%wLcD3ZO-3T~Bt-ef@%}Ch>4>T+nzUh$QN8sC6V!b=n@F!V-H>7ndgY2|G z?mzG|G}?NW*I8NQTP=eN@z-d&vtOO-qP*C}}kUrV07)Jv|2wo)(GrLZT^Ny32ww&$t zju12BdG$Suw%M)V%x(|c{Nxlnag)y#8dvbAdQUtl?FWVe*)UOhCx^4kBGaADgg*s<1!)C9)K4Be2jNO?;lQz*1B8* zJhk+Rd2G>}>usPGhZeKx34aA%v60tBv%?c_r18!iWu{hdS3e~^Qh}W~Nk29C^WBTP zt`14RZ3m~H2k_ZRc>*T#e}y~N(8_yLF3;LV40*qKI#-V;ubiuVrz$Ipzo+T0R>2SZ zX3;&dClkIL3P{4iabL~GZ9NxkTN{MPcf*#?B`!*r&-+1feHDr%3E zsou(Ga3Mv`fY6Bb0I_w({uvdTr1L)_0(3O!{|R|;cj|OE$>(q<)Txq-vCPNQS%EL_ z*Nz~+{nMaYs;#X9TNQz#*M_sb`JZGk!8(d{%_O zf#4l^Ebs8}A{@z%1nR3+CogpI%Jl<{MAZdZc-O|&!~4;ipheCEFpV5+d$VoWbbp@X z4^I@q-2MI2k+^FTAD=n;XDl~{&Y%e!M~40b!XWnvu9v?z?48--P^`{|+bZq{mP9N^ zzyTF~u3hv5fL~Y@{L-#0J0wp}wN>tdOt@sF=PVUNqrKyo-K`afYLzXI4f0e_M1lcw^uAP+ZXI>Syarq zcKI*-`$MxE8fiybFDDu~6UWKj!4aU;lRrHk8D_mxrm5tT+x}_$P@ZG72MV#>riB6r zaBpYaj}O21impia=PGY4K3iu7sFzQ-GFIrjszn0T*>#({>q}oA8}@DAk=N%f^6zcI z5qTc~uIWl8O_tfcRU<$K`0DN)9Y-QrEyPP9M`K=G2`%vrXSW=`PK{`-dh{IkTE~MC zC6axXp;Je2UKbSH7WakjCYm9jG_P_fgdw+r79sw67{9T!Ldt%QuTql*ooFkH@7P%G zI^XWQ!I(;4*m`ha(U!*)T|Uc|(B~pRi}MmN9YFh8uhn+rtwU=a>> z5KhQdARtc)J*?-nb*_srcSb>J5#4!BwHue0XgKhgE4C@ey{|JshFhR6f{Of>OzH9tb z3N{R8qzBCU`^|Fyt^QY?zb;gy9QqBDV^BR#%o2?=2Y8!2`ju*Ty_;4lm+~4OjBMiF zNp)R5hQA@*iAWdRrWrD`b9nGO;B_d6^o6D;P?Cn+D9F&mwf3_BXR}Nc*BgMonr@wN z2<46Wb^!gJFiBC{M6guHzY4RA020$)Jo8!Lm_pb6{Y$c|3OJ&@tHL65NWTo6^tiB` zU1%RC9nml9HuX=c@j`r$VX#BOyO136i2i;Euys;7d(tL@A$wxYZ-pKQfRbh6$|I(m za5T#-VvYepGaM;qV_s^12hohv8sVd^w0$>aY1FfX>2vd(g_q-!w+Pui{dMyeg^ zo=5%XLZ@BFP+^99TC>K?CQY8FyOhV#)aTt_f=pwEmom?jhRC5YV|Kz~TY7WN=J*~| zz4cBG=3M7_n5fp9Cczk>@UAz8*Qz0?;iE71Sv8T@nn;HanWdmwFpIHLeQ%n2JK*!) z`DWfjo97wVda3q0<=tf~3cZu>l0p{DfXC9cT!m%T^CxpxsX|3%kz$D0jJb9&0`V~h^gHm<@d z_;$s*Wz&Ih?h{?9x1!X$O3x2(wQBVgnH1CnE#TAfKp~qwg$L z^1eTLrlZRqT;(M*yp>SJ#hX^fp3w~m#Eg@1-No-yO+HtmNGx#MTNyr&HeogmfBd}o zDEhGdu_$T>$i@^9Gq(9)iwTB|?hX4|`0zWMIiXLCV=5#Nr_cw23?DzC?)H6{%PMMR z&}}1OXlHn_!H+e1(DY=Xv2lqdd~ThWYO{2EWpaBZsp56dH+exKoXev8p0O{)^hPZ$ zH&i2V5OtoC%?iwla0lI#7_nE;=oo;rbY?Nb2=ti)C?Zu2cMYzFK7bi)LK-BVIGnx{ zJH8No$=A*0k$?J$)E0=}-TJ{3C#z2f9(|DN%ad>8iBsQ%@g9#`9)pN|j(&d#oE_mb z;!qxp8$tkM|MvSqruS5i3ClN_EK49_sz%x7)z$v|WwI|0%SBaFW;XWAze0cd*Be1a z5p<`5sQ|F-CZP}P#w^8(ak+fVj((W5KEVdrPs zY(5AfNY75%Z9WJQNj}mQ&R);|QhW(2EkQn`g}gVW&F6!lGuQ{egNmtsuts5pw!lD`EL}`uZI7{^S{yl+kNG~?$!Q>`|=QPk}Zw}Uy>~WU{$t%>VE|S z{tE2Vo`fr$)35oG_fiSl|M34R|8GG+{f}9N%MNR~ZJJyW2muIvbDG`X8gRzm?4MH* zzAXLRTe8w+*n!`F8s}f$p0(?blivyy7F08WYzY`Hxc1~=Q<)*B=ew$^JsMkOAwx5WENHEfQI%rHnL zZ*1DVl0`Vef|SY(BGM=kXhhc7wK zfA#FY-TQxwFGZy#$!E2a_fZ?x*Vb<{l#9%`fmN9{8(T}@%nS`MML_) zV$0Pj8Yi1KN8~p@51J8*L2pcGeyPp91SYNzC{8F0uP;@n+~BSNea29sUVd)C{5k}0 zM&~^0vwYfkMaQih5XKC=C!AN8~<UT_%W_Lz#>_gmE0um8I_g?hB1M*n@OloEi?fvj~E@Si~-JHE$k&tRa zl_m-w&PyfsFNqr-i;MC*Oc>Gcy4iY9a>#hmCzL-lFYn$r``Ue<JxCsKinAWehjn%bhw6S>Ku+gjaC+E2n-Xyg>*t5)EZk{fy=D8`;Q$8MkU(U zM-E|{`*B6=LWF%;^)N;VsuUT#UK>bU86U?aza4`YX<_D&KErq%kGSCO{@#=|kY>Je zTi3uC;=LWsxG80U#y`(ax{x6G&d^nN4@ZQG=73Okx&qS5GngR;Fa?;b@ONLn`f|Rs`B6ZhoK?CX5B# zt0K(5->(7Jq&H=llR>t4V}`sipN_CU(!#9>KQt{>1l`aLQ70`)U+$+I=LnG4vPtzp z^2kA+(4XiLwsG*8#Qi?I9Y#Ie^yfX@1|o`bC)6>=&h z(E3Zt!{8I8fV8?61=_vPq}_BE6$0OcrGQ2m>b}H0kWFR<&ngE)sBU=+hMFLa z^VH~ZGTr*nE0$xeU`Jp1KNG8jM?C9`b=3-Qpoq#PTn>uLeZLl#jx8G%n&0>+shDmu zDmg#>0{~Nh(bqqy`!Bft2UPzBum6DDzu@sNu#BzyF)@=QF%!9>NmNH}#3Q0^$DpC8 zUP)YxOL>82DVOpPK3v%)tW+4^Z*|T6u}Y_;r8WE+W`|??Nr}rKVY%^gO%{WyC@xR7 zt6|rL*)(@6by`_F#dT=B2}pKPFnHupWHr+3o?cn{`Hc#yo?}Xm>)7hw?MR-B;4u8I zeNgclx$NDt=JlRc+iG9sjyiKX^t2XV7#p0d{bSp3 zI}!z%iaHxCnO*P0a%>bpT++86)61Vp8jz~8+dn?$et_v0Iz7~z;xI7V6-@b(Vm$p+ zJCYTeuIiuA>UBc^GKv>RrBiH{m+R5qx4~4(1A0i_MIJJk1F$pxFn~z73Bcw5J66oS z^^}7vgwwvERl#B?1MoQd7~T0=x&<*bQreG6?ZGLb9Hf)dW$0UsNg7<#>_K=Rw$K4t z(gy_FDtp9~0(N@cyMn2VP~Un8BgJm*Ko-ghA>$GB%|j)g)15hdrj(;wM)xc#E&-f!JCH640Q^q7AgF-8{xtK@SxB`WWW^D9 zlc$mV*(GE`_CF(lMc_iv#6pMGvSMPk*0gvV9I+WvFyC|HcD~b?RQ*BhM}kl8Kj=^{k%Y-gy(LF^VQ=DqGVw=!ExBK4sj z{4pBU0=Q?`Tfpki-5mq_Fd?(x>E#qShpm~3n##TQO5w!05!$8c8w8GaZLKQF(+XC0 z_fLBnoPYXnQWU;h+SP91n%r+qXFCt+dJMLCSyV9`j6InDqVIt6({*j9NwGBH`T<3sGx5Ft7o_~?S4 zNf+#S&j@%UO^gysMw_=4jP~k)M?g><13Gs{qJ$?D0Q1xm%$tvqJ+rj1WhbI~(g!!} zHzF7-ds4b-aGwb_gW+UD%k!20HMjDGq=Ci|#6GuA1=;xWT#nrlgDkNTI4FEIW%k90 z3Stp0^n8qy{){>5B)K$Nf^u9*gO}&vI_V?1Tz&FxneZUAX0(ksU=@L)s0grhZ`|y@ z8!CDK5q8|#$1MB1%SDi@xH}%v?*)+?_I-5^W)lyd#POhA+N2@w-fDtcfsJG;u)CUW z*B28iodADTC;S)n0(nadLSG1EwC{ctk0Rd>LNX$2xy@O|?-y`-^o9<(Y)nHDty$*L zVLDES{63%_YNY#5VbO&2)hR&Z1SAYXkwELWAC#z_-#B>Bo^HPX|^{2TzeNR zZlK;Flpa|E^X5_-scb3c zgTF~JG;bx>X%uHVF|?w_CnNkGV8}~E_}OXhTF>=8s8F%N{Zsmm9T!dIEG_H@0}`v= z2(eI70ZAa0lSkLg)%;n2gkGgK!=>w{<{jv8Glw1#{>oBe(+;}$Lg@VNmi z(MNFt#2H@QAP$oqPcMK>3AvW481=>Xbn$$Fboe%4h$`%56|ZQz;RrSWhHwX5cZY|> zpsgQVN1^Q%+_1-$gp0}seZf*c1N0Hu&F5IWYt?~>jipO}Nm~n%Vs`*2SfR})+X^%G zhBdGk9yT|}SbF6_*fcQK7yqT}w*L*#WJzNs!{WV;guF#VObM%dXv z)u2KaA#yraEn2{?VK9@_z|-!~tU2axbtut2sd9@i`f{XH8-rj;>J&-uQgmAl+$(Ck zjkI`?HBIA1`ma}X2k>y$&}WBC5V1vi14NJ>cp>5ssV~ZDAIw_(dB1#f;FYV+cL7PL zoH=F*B_J|tkLjSa-HUchCde^rkQLYtUZXwA;yzYlLstOIEyTw<_Dihm_9YDT?dUM#s{gi!Jk2t=vYinn#O}*QKI4rDYwh#NRLv=WC>?DQA&B~ z&U3(7q1jG~?EL!)2yn)BbW%aOxX}T4qfM>+XV1$uH|bQDw;3uL8q}SA$wM&vA()X7D8h;wYPbq9iP3(v0azg`re~%0Lxy&!b;Y4(W{?T%BDi3H; zDq!-FT~lhBs(7i__DJYccchXAAJkDiPJ|6Sesx>uy>v)xFV#f-Uxfft3mXg zH6-?sT>?CGp6fA{azh&v@e*zi#QBAdTTR)O5*5OYrTH;Z*4BQ!2^Lj07Y_oin!lro zSqN()HS#)sSL!E_9iQmV-Vm5$AD6xu>#vj^f0_6t@@7ApxH>T%4&4E_oId?>3+V$u zuBVA$p>wqRpxmDX72k#-jRnUvq4BY^mU@X$82_u1^;=o+Qo^tcd&=?k0T2)iBW|*S z)Dp81hXZN$c|^jQ!?F>^UIFw@YM*2CDSG2ln1XGeIh52+&P+Tbf@GP%wS5 zhMg>@y_+Rjo$Z5#P!<#rr7F7}!+zcYVy}e~vsYrD36gnJ>nRi>`=&Z*v38u}KVh{C z(P#=YJe0DVa!fh`dD+*>3L9GIX%8`dm9{(>?xw^Ja30qPKfTM%{I8pqU$@~lsp3Hv zL-<)m^(K7!M3R7Xm_=bEm26ra&x0^ZSjhCOap+teSVk`qHBHmkUjl%nIAat5N}vKc zA+1s#bdLEs%sjD4;;hRDJdz=ebS0$tLI}t4MVksm&kqBH(Jt8pm2RKd9-gL2tIQ>uU zOlx78AGCYmBfmgh{WH7)YFnioM7u`)O!IUqN-_+rPoY1fh_P2#w&5ZXck8S#;oNc( z!WkpI=}zQrV=&pxJ8MtDabbY0;VDh%RIplnp7C2p%+A~I3Qc9jO@UPRt{#3IJ!hZ$ z;YCk0+Z*Iu@!e>0q&szKwM946DGM7NSVgrV9U%?_>kZb77u@gyc6Pw! z3R}d~9e4x-T2f57=T1ND zO^R=G#LS1}xA&j*+O~D297mNz9Fo?dsiNsx2$`c&v}(INj+_`ymm_CmBw3j#(KkS7 zkgTwuw?laS=|yu08H37w2>RV@o(k-O6RlnHJV1Hzh(GfH&AQ#%jnSKwkjL=>7u3Zf zdMTI$0Z5mBv_+n$G{vIEfdoz`)vszHbl&3w$+n$P_mW6!$2Ar^kdU9mnFl$=5Z26=2|LsYs*yDI|ChyP5Ua7bR>U z&XRqkZU#x~Mo}26o!KrJ0c~s6rIYHpH4&N}a;}ijlZ0oB3Yna4^Ye4(To8ZSvyfcm zL9a$+$NX)CgOSv*w1G672!=V{Kgic6poUCN?+;D9PZH%c?9sYzC8oCE87lGA2g!^L zw3RhrD*7Q8#GImH;s!5XO=~xH>67ThhNo9TndqIZ(q$bK4Mvuo&0waC1YIUrV{0<1 z@oTqmPR~FY66_Q|J6oi=nx&ip= zuNy2uDzKGM$0j@f?wCdp))`5dAAu%b$7%*>H8U>2DZU+e2x|~keTj*6fiy8u?xFq+ z<;Zdjx8!4_9*r%LbRsE8g6FCeDOlR1V!(WzWWqTzL|hNaByEsm1kvDvaON33z_CZV zj>KqzjVDbF4d`Epj`%HCa*6g#Sx?55T*IbK*tL`_-OV8l)c9m^P;Yp59hlJRuOb8} z(1z)5quyOTE}T|Z?0j+T39!Z_Y*#XQB2+gqDptcmBAM*f)DJ_GEJ+LOt(k=L~rA zaSx`>s!J>Eb{iP)6#>TKR-9*v3G~?;o?#`e4$k(%gstW!Z32&t^^-~fUkD&;g*sAU zlbV28qJz+l@%bDfT&VxmAfQTW361CPUl39(0z5p~A6~26Jr_@xet+C1SX^d8EmZ#fU zk8U=o2W^+30BFBSOpq2Ju^-nnqp47;Y=eI!*xv~}% zqP#OakK6e;7U(53XMGsaAJPVZ5518jpolPWWw>08c&o|X2qr{9QWdM-qg+**q9l0pl7@z)8{kZHmSG~g}0!k3OE_q z?O9_~W7raB$Twu>Lz-tAZfFynz0;%%+N?OTDo!buA~6j>OBg2#H9iFFM<|;(!KQXj z^fgA_9M-QfdM}X&<{5gG%1OmhW{hqk6;Y#otYe4iBKiw+15H&qFc>Nk&vBJGmHtkR zAKlu9+qAD+f*RpPQA zU=NY0Dabpx{kW+|5(~f@#6OorKX1F?E0_UAm!akjXP{16knk+049h+*TjSJGPClg3 z_F{TkbBI$)$jYLF9efrM?lyu02tpE4~MS60qZn!m0xy1V4DQ z=4yK>plMWF^0%=_9b8B%7aTz|ayy^W3*RK#T5kN1)8;w#(|Kmj{cdte)QUarIWzwx zZKg+NmYWM_I1%G3pDSqvWG<1N(^sKw-aVGM{LmlQGhNAEcxnKVBht}`bPyG~;mSdV zNWGT+Q<=5>;_L-5noMf=y^#SG9VtSmOU<}Kv=VH>(wqdQcid`;z^eL0tJG&Zv#Z$l zBuZWiZRVU>emwSljd7vc?>VM|zsW;hN~$29v2vJ8N{mrAi!5>3a)L;5vu}&Adku`& z=L96iX>A7oTDpt;19(JlXe2*!xQv1xP5984I50!T!oM2e^oL`A(?g-GXl|*0s8={m z%4B5T$c}%HM`1vW@N`54H`^Hfh${Y91wI+Pyo~4LG6)^m8nE8Z`iAK7h4(b$&8e_7 zE78a(W{pakV8L*4p$@dx<4-r>cjK{EDB%aJ+2~~8b0VU_A1F~FQKlw}a1_0jSQ?Xe zeVAk}%)mN;#4J{&LKK6v&6~&p>*dAGtCvCOQZl*7`*^!(ksu%=CnMJ29I=B5C)mf{MqD8-6Gh;{ z3f4qsli?Fsg3N+=m89-uH$B@rO)s9(Pr(b@JoV+NyDZu3zwaJQIIt(G!f#POzs^l3c>CQi${ zKoC=L#P%*l_F*qON3b@dU2aI&flCamV`C5ijyLRL7Fo^2HI>4%#JktLk*QWbB%yZS`)}w#q`O=#n2Sn5h%3tRJVi4&9d6;@GGal!!hS~H<)i$i-)ELq%CO*|Wb;w+N zwl|m^fMP|<5mk*15d`5!0PDjvVHtV?B=K6$#i&p@1<=Wo0)L?o-~8+e!K|Nf%fXm7 z)rwhilbUSw>4L?q!vF`V(xQgBBrwG+9^?{u+O~;SjS2h!Ru>21auT=13;A-26~5xk zK(d(SUR-=fj7rY<`_xk-tBJmmJB5s#l)2UNosQ-vw#s1ORT)ezICT*pGdPd}Bq8gA zz_5Y>t=RL}&vj59(PFRmVSSB%GQT9OF=7`zoN~ZqeGI)li0+#&ZCtJ-53274**6gM zO|Xy{zP2x+xW(bF^}mlirU{$Z8I>?!csFON-#C+^FCoG-ng6_>qM-qmLwo7*M17IJ z$E5om$!;Yy7BRce(fIgHHi z*AK3iSJY{XMbG=F} z;jY_TP1I;y_ zk-S3f38wP3Za~C+Z^(9#@_m&o=aFvcUb4#2{1PJ_+5fIwsgw#E~ zoHo2N+R=t>n^rRz0z;a*4~^%0V?Kp(M^Zj)9Enw%aXXgsZ{op2Hb(9wB!P{5>5tuu zDi+RbSLmN}`f7L50GE|4CxH+cEeZu@OkNc*atGa*de{)WVM$NaEVcHjU)D_0_8o~% zFJu?wa|rOq95_aAh=iZ|qCR@+qE%MbDi|U%+WaKY1QEi0{tV<16BUE?T=#)jNjeB5 z67WWsSvgUB^t}^~>q83hNsTu%Vg_jM{Y=4Vrpv>D(h8jw0Np_8_0k*ZBZlLRv|5Bj zmgdTwTcd4cZVZ{_Jqci`q950dTxE#J_!2fni{`HG`1E81V1Le;oonl!yTFA`;3S6a zaHbwXJDtjFgNbC+yHk2buj2wB+m&WvoU3dQo6AGeYqfgBVN()L>#nHdN}gH@+Q2n- z`1Ee5r}$jY0Yl5Ybjh7I%1i}w1G=R%irQ)X(0xliU!&Mn{z%PPdmz6pF z*{>;9z8UJllQ#h){r7{Z|IjU;6u-7f3XKgEBHSE#6WtRKoBrT-g%8KDQ=1{NCpry=- zD#554pT&4fe-A%`=HY*wPQ632=s->kTWH- zB1Rfa*tqSe4$7`>ia4O{qu-uQ>#P;B4?0&F7;an>wy@~rigAWSM}Lv2-60U{Um}rdJRI>obH&k|JjKuxCh@BN&xtA?fAF@wH)j`?{rzF++`6#N4MfL*M(F2 zfkOSSm>tIolg!>ZJhDFz@w z7^I*o%0Obz3Al3-c*4Yvw`B-+6EG-J6HV7@4B2}z8@tdj1Wzv<5EG58Mz@IEt38p( z-KD|qJKV&QB899a3Ni|P>bqpdut-i-okysEsLoKX%h`XmRxZ;wdeKRCE(P(;=sm2)K~~=#}a+w zhs6|SG3M6REj$re&{h$9ak9_DSy05FHVE`t@YM!y4xvUZ)C@;+e|dyUSbW%9cu|iB zJl)BP7}jHex|^73rF{!r3?0Sxg|J{;Bd*V0(?X(kw8c7%uWKHs@0PFDk7EEmIzJ`j zn6-kHRd3gOV)*nj0?x!w%4;RcSuS!ZbXB8Kb!`J)*US%NDkloc;5VYrRfhAx z2a|70y`&<2p`@bi5xLl1)$Efu+{dFhx2z)lC3cDK8L;o`*WJ76jVSvbuJ=+a=O**I zAZzEQ0nDd_Dij{nvcj?@4tjv=^*U6~f-MW`INc+HqFSE=WdjZoO1s7_g&V=uquya{ z4Y$UL#mSkZk!Cao(Dz`N&ZD0aL%Wiba8)u-c(o~T7V77Bd@H>cD=EyzFj&mk+LU}~ zHLH7~8|R`g?>XlIc16ocf|rqlZa6b$GSM!Z>}%QwadXkgJBgQRB+jxqMqvktu}rM= zc~fTn;>&@;@E)D0ycLiJIKj3_kDBHMnXE_gii%lLrCH1X1zomHBgK$vXNmbG5WOaG zcOxeyTL$ip(Uo(~X|woCl-N9rpA4sSPMvkEvX@|LTRYR|@ZzgNct~J!TX+qU5mpAL zA}hSmPt|CJwaf8hT20~9Br>)iyEgfgpx5EowZg0Is|tIvw1kN1c+ruu`MadU5i1&` zbTjxELCVa|{#+Dml)*COH9U9qROLDo_n!|E3es_Wv0=5;^_kY+L?IwDW(D-zGp`d* zsJm%P<9}D}y{GJ7LQ1yNZ^@b~PQvDxE1IM<{BT-ehU-;1!S!8KZP8R0$d|N!GMZ13 z*r}*Mbx@dX(WLSutl#k*_*&#S@z~pf5~$Iq7Z-DEfo({$rQ*W$IoopZy==~=cxX5( zcd6@Yzh^|nYi#D7>lt6B(pvSxu2fRD0S`n%urR?0R)H3Ch9G65TyMqueo zuDeHMQ0Q~jk+K+Wcm=eJF4&ZGM&l70T*m(79q_{`*;dySrKHsiVOc;kltWHZauyS! zbS*rca}r1i_L&X%bPFU7s^ao%Ucx z(Q^^`nS*bP5k@)D&ejtKch3k$`YBbKY3ZC8X_Y!E8FgE&+lr6@7SL+yc1!tlLLB!< z3sKH`=1ax7Mf4RTK_V@A5`+g>F>UUzYdDyIM5DDHTOaZ2-o>f3r%4bR02JB_!-J`8 zqM#aK9|Q%-PK?P57c9z$P6q62#%SSEWdQE-*OCXyvmaYX*HTdLFJ-5ai8e48TbC*5Ra`#KIh;My}js!;X&!Q=$8^V&!ZteH{=5om@j|aC)3~T3Q`{y zPawUA+k|E^Eog~9_t2!@09H*G6+OHj8I_BH+F062B|QcyO5?q4`X8yrnx)}N{q;=p z?xztdBa}y2iE0;)f*oLH5@8Ok+TvB{m4#y6ODu~=6?Gw5azSnhdQWE+j^8}cA8Ly? zs2hw888;ZQ70-jZFmh}W6=2N!+jim^xK|=(5P@li=_JW!rL1rz0HvTArbAn-SPT~J zC>b%w`l4c>USIhyly;c5QD(3C*j)_1=|fdUwh!+@=uDa)Ws6O)1brZ;id7!FVBGnk zZN}k0qoAo5rj(;tI<|nb&qj9FJ8^Evl-=EfswQ5OJ8?|A#(3O0G}EX){;qcGJn`G7 zB+JMfm^bXqa{#0Q;l zz!Hy%RfR8e1vnVZOV&zEDC+0SzMHS;+Y!l9GGjm2(2q)c`h7RM;eE{=)<_8Qe-3x;;6|oLGc{iAfFitThz2RCiDbB*si}^p1$0 zDuV~6Gyp7#0G&q}p}$5hK>AI1g_;p7^5=uIxuaDR0!NvtbBwt4WEBjQfs~*|Gf^Q9 zPjyFsP3CUy1WJ?i)W)yuxtek+Qnk}79YPh=XcA40c`LEC=%tX{i@7Nktn@QYr5LrP z&uheabv*{XkYGBDO_R_`kI6B-6(dR0xpS%*cmOt{&YNinliEklR>lp9lhViU$o^tD zh3Q|GP2O@CvZN2&PN45?FFKwTl;|rLPSGh2bGQ*h4|^hQ{Eh{S*8>1>jF6JB&MjSi zVJ*z_*ZE2WVDOL4oOpKRok2dGs~T;31-ZqL{IR_QEKU=6N1 zzY(wl4grgn%M+3HmWkc(%^mcwgXk41wgG9|kmkOpDCCJ%QgXf`-V9%EQk8|LfxGBf z+8R4g%BiaMN%8`xu0k{2QG#d~*4%a_I6&i~;o6$iSKQI(EU-FKC)UV@};Z?5RA^loASG!d!0_V@2L3RaG^OdB|x`##!3odID zKWB~C4zrh3Ch^m%kXiSZz-BIRb!dZM(3bDVXWbTknZVv7cP(vF!RmsOvcq>C&hf_1YLPc^p~f)BU<32N!ujiv8EyMHay zdKpjKb6p6678(6GwWAuM_~ro{M0X^s%fKs7nr<{|B>8jv*_vG->m3KJ$uJKWEg64W zN{gqGko8=VOk2JIDG~?bD4dofrWTKDCD2Mg4G1E1XpH0Aae^- zqed#$o*FQm_Bx$&{;YOzUXFJIXctr$0fp!{$cn3d@Ko>bS?T$asZ^4|={_J(bZkza zQr=Ee;_xOeajb0Q(zaYiv6I+&fB)U5*C#*x_U-B14ZMkfTlr2J5Po!%S=_!GEvxgG z)F2?416(N7#%URVA`ndLOR|$(d~95rRl)s{`%#ePH+uoI(2`!&$14+5DY#EtYpH*z z-n$#-hA+6_gVLSnp-Lh}67bmFkgoaF$8CA5h%tcSh7y_EihG!Q%g6q?;m?xw3x)1PuYeRE%Tb9WXFY?FQX1( zBv-9S!5drV8fLn1=;FV*^#87eVyyo%)(O3zC&!Vn8OczaVx z4Zu!d=|gC^yMoHx>z}yf6}!fJgNfENvPIaFbxsjqfO2m)vQ&G`OtW#@#)3+a{2E5guM* z{)wDk1Sdaz+?R*~t1T5$KpN?uD#OXXfVj&@Zbp3~n*R^)-+dfme{;J159wm}VfvIL_!e z$LijdZfTW3moX}v*$eVSzNl>sclvWO8fEHi!pBYg^I(CL=1eJ(_yTzHySEdjl$xvB~uhp zQcHtI##|K&KGK2RF$?c}`O|I4(cMaSRWC{i0}^IKj3G;dPgKitibUYWZDNYtaC6V) z=3=^kc5~kmB-SybS16{Q|GtY~aw*x`PT`6cE-5qYDD?<2e~S~6GNb>h9W$qhnr)A` zjGFx|o=hoh(ZNmwyVcpnVNPXl5~8C*a(<9~H-O$~*Xc2kt?PS#7D|-|DX!AV-|#BT z?f(0Fhk3H2RPuu*2TZ-k9ynY{NqI8uTfj(46w2(;vf|c3Bdm|NmyrRZ^{3yxd#Iyd zvdjO-MRxx2f0VIxs_q@MC>-{NbEqn)%7z~>Ljf60aU&9V7*6mB(-{-x*Em#C&@K&D zGY*CvD#}-);6zq>aUcttn5&f3@d`%}a}OP=4ewTO~2IupN$* zob9nzX@e~q3JFh+*{r|t_r9;Tzyk~eGjPfLZ13wHw=q>)pW6N%(q&Q2j@1@tSM%r4@j3( z?)iXA**)E8nH%;uo=4j>8jGa*0c;!8I8>9Fdz| z-eoK1O2Q{8^vhUWFFY*CZs!kjf@^>8L){XCXA4M#qFf+>9?lOe~CEmidB3iSd zf1t(n{~nb15ze7Eg!dkFTAuPc7h1dbiEkr!agEY%eCs)=$tPEMuraCQ)aucag! zKLP|vxFFg8kzjCd;J8zXwrelA=6Y`r3V~T8{(^meCsp@c6Y=cs!Tdzl+lRI69i$IO$P!G&ZeV*9_5yQ&R&SxXP~=4=cJo z_O0^pmp97D+*IQliyS`a+%mrAnu{-7TeSxt1p+kt@aJShmZt^~<3A2qs*K;ke*i|! zey^zp+jYJq+=CD+l_9%!<7>MJ+QR`rWQvbL%PQKGOj)r9VwtW#x+VqanW;N>v7cNo zR+`mzGfp=`KqCY+Lco6KZWJ2}h7A;(eX$)j;2C{V9%f$l-CkQQMV`s+by|K?mHR3; z3XA9#hedQ%=Le2$p3l(-K)u;yf7yggfW)@ds=i0BX{c+XSgCFksu^ug9m7skjm)ry z#IOu3>&~TBxf!94$+bmGbdJ-iEjqUmL)c`UVA&P>Xf8DCZxXS+ zq?iy{VMC^ns8&s~r)(^tq^<~E8C92wrMJEzK#GT7KQEawNi{AT35_eN2O(u%67Sd|n$tspe+4VD{ThTq^Csih95 zv=(K@sgI?YiSQqJBu z!deP%TG`qNs(dh24JL9yZqweN?=BNrqVfb4b3{$A(uV)hy>Xor$)l}p2e9C0Zg3{I z_BZ&lxD%r#^Jp*a{($=`3)gdW1GNiB-tAKF?i5KX&6Ea{6UT}J0_u#K2NEqZPkmcT7ssO}I3-lmKe<7Lt=Jh|n{_YRoshH)LKmV~8k3VtCJ~*J3-X!tnc@hT)f>=Fu3wnw*Iq zc(I7)UaTvJR^k+HW^$h<6 z=0b&QoY==kVE+9EU}vUbZq7Fwtbq=jRmAv@E|y?Vdq?a2rsg?tMm^PLL3IL7$(JJ8 zyphgHNFjdd>~v>8^nJZU)w3!qvoGyate1YOYHXkGeu3Lt|JujgdxMDFI9|?0oL+x_ zEWiF}_tU!)e{PcN??1f%PM`KnVkYJ^bAcU9{nuA5Yd%<7j>Oz3GbH2~Ug68{wv1N!;1ne{kPjM4Y zQ=m>$8KQ_>Yi_zx$!fBh#(EQe7Ar?=rA5+>r`zrUe==gKelhFN@^6wA5Ke)9fyLU7w%vEgkx8(3;7p zLS7nRe?nCzMN7Wz!5hor3H|Z)5tb3Dcmlt{teL8Zu-ESGdaNGDrF%lsRqZZnMoD{D z>QC47hMlf>|FiA%cq}IF(obGI$kzE~r5^7qk%@RZ$N3sJ{!{ zaZ%OrN2xjT<=+LMZAI?L7jE!GNP~*ssE{tKjJhuVX^Rzp5j*=uZ|XDL&&7B`sW4ya zf0h=l&v_Qx8jm6&zSyH$eSu%Zz7mIeBBmt0v8-HG;lb5b_&oHXtxJ|Q>d-zLj4rE zh_0hsGf*x>%pHB|N?rO+jVg1LDI`pK%qxe0)fn0}zgIC@SYaLhq>#D!J*;4{O!Tuv zd$~7`+~V+YW%8e;p<Op|$quShX9A;H2`Acd5YlDBB)TbT6c2AEa@oY;fcBXyJ`e$A&aaG%Hl+hAP;a#^$QS)c^K=Cvy6uof3ehbZ%(3c z&T!Z<$lJF@WTr^O|sJvitvD{&409C%m z#RK3L&vYy%sFp|zzr5t(v*b zHgDGDXLUK7EL!Jo^qJo+V2`IVKuQuyhB>eDVbpXadr9L=h83SaaauqR4x-! z^Fkh1c~J?G#_eOgXY?bQg|{RXqC{u{|I+ypb~_eyMbQD1rPP%)Z565ERLX4r8di$* z7>+H~UrU{f)$I>*f54q~h_#*Xv9%mMjagDH&^x6#4<{KJhMTf%zz=n-sKl3tVffiR z=q>XSq&hl7HwNKG9weGF;KoyP@6ROiB0S>>AbRU$N;GZ$3h^Mt3YjC>ZFgi-IMrN5 zKKSX=+mlQA=vTY8_hJ;++CNlwACsCReag^Eg-L==CRX``e^n^?;PhdjQItbeQvegv z#=}Bnbf( zj6Yh&NjN`QM8ch;O?fYi;4g9Wj2-%~;lJ31EAcmR=bnGBS*omVTkqZ>Sqg%6Do|C`t3oB@cK2ddgNJNrQf025l_>9yD#|q@X{7jGkS_jz? ziB%Dl@w1!(SgDd&J%^OO36{Srw%C)dvq|a7i*Em_e|Fg~tYmgxsghZ@T7X6x_n&j? zB^w)Cx<$s8)EPlFY8=-mFNEs;XXs*BYltc>kLxKKRuKiot0x5(b}x1!U`iub>vdlN zRzxhKe;Xix+5JL9Sn(=GmD88isJNKd%%ysXk+IT8S)Pt8F5h6ocf`#a0Rd7$7Gu(n zc@*cy6Vx9$we>APAq1(glFFV!73&&3H5RR_jw6by-xWnPi0PlS4GOshr9W)$V02Xf z(A0f6@qp^e%q^B1RcXwz@@S_{zh8&p6yEwae@sgav)8s_Fb6{tOK!W9nS6z#((cur zia)W6KVqMKuCx)G<5av7%2%MO<5~ehK2}(kradfol~VZFbNz6t%HL&eb5z9T6d*vl+^Rlt7T&%Sbiq~D; ze_*^@t;2Y?SG6=0e37dSRVj|MTSJHLExQbv)~wp&BM~w6t&577D$*K@2{t+9ineYV z8E8`vn|6Wv@Cd0oHpoV+;K+>z6lM+>tiwTbMx` zQj+pG0)e~5+xMvFZ`90uz-?EE@M=jtx zylbgkCPu1BhCxGDV+eFtc_Z5cREg`}c#C-Z&)Mx^heWCxUDZaq6WM{*H3HA+bAk4} z+rcrplGCX)8{6_BZiXbOQ@{)tc#m2RVW}mhTC8^Z2Z8?pWe6n)c*nn&&Q3R0e+PCP z3NDw<1!p-VkpUd3NhECiffZ2hxRVJ9B~r9P{vkVIymUUGUyr0)q(drY8z||G+h&ZN zA(wttA$}TRHL{kQAstg{7odUdvs1zik?Yzej zGW;_VGYpu$S@AX2eGH^(rAy@-Jy$Ft{8&BcwtLO3aP-P@Lq3(eL7)68m{_^ex-J+u z9(i6J{GDCD+ut+Jab4mkK6dY30we@igDiz@NS zWO7+>IZDc#xs);>=;}e0-@HNKHR4V!Hjf~Ob0x=D1V}=vf9u}I4oq}%*|4Hlb2up; zcB@>vMOp9%$ca?5msEv8gHXk+4vJ&22|b@~A_XH|TVF>)d6sz!vjgBZ1Po3Ehcx}i z-~N?l2?`=rW_A6J7qDbPe{wb#l;^Y$YZ4_5kX1-CwT5J0O(P*bU(bu1*d8Fk7OGWS zUUyg|q4>6|%4u^aK(gAoa0A(Vf)MS1Tu8n3fIjJt!-+=s5l|=S3HUk5?jTBzF@c*h zOR*=yJRA!-8k){XC*W05}=h?m+aT_XE{X#LA1>f!L|mvt$X#Be+h?NLi|Lf&P@G z@5;hBA3lV-e{c*%Y$WC!9!I_45G@(HfTgS4=$@zdWc;yozo?)T<)4u#kcmny8E%eU z!G{7R+77WJh=Wt9#)=89pe!0VO) z{xYbaS?Y`n3QZMy&G|MC<6qt1xm&HlbGLGb=WaoZ=W1M|hUUn7w7jh9ZCWFL>2DwJ z{}|G=s+yNQ95NXN>(<~+>m_vsWSDVW*&{+}iRxZPe=%n8vNQVO?!8AV+`TsD+$fl_ zcN*Srf8e>KI{Fefngfxy%}$}@GZPEy!t7|0SZp^(8;N zrhxRrr6Q~dUndvza(A;`gfknk70*;KhzHn?K)^|uJ$)AUu?iFe{z+As6>iOPq%pD3 zJu^>x4NA-5D1H?|Z@}anFQV|q8&|9$T6~Lce|a}#ccyX>T#ZuVTQ5ymtx+JP#19!d z&v_qi9ET&1(mYAA!?)(ZzqU>K9ITcW2i2s-L1k%iAf-h@PmMn5!J!I~w{X&~k#gc| zs^YQVYj{wTC~3s_t85h+s%OQbQ{Y+sbJLN$tKA;tm4&LWIs52=%I zf5N;vHSp-F4Dr^c&v?A*Fs zu{PfAhOr{^UphaSVe0wlV>D7BU<}N|i5r7Mm22aL?kvT ze~T;96>n29!oHMafyIbacHjvYFnxMHe}e-juOwX1W&Z^c7)-A#a8w|!7QBKgHu6Pa zKuJoX+cW5f?h5D*l-+A@j-JSCFSzC|JqJs5d0hNJpqC`Fa3Fp(2SU7esK}UphZ?!0 zO^IY=e@4P(4~{XQoQi4}xY1M?LImTng?1=*$*{IXexksWh3B!~3=YUIbFT!me>qay zsautV@5dpHcpwID;t{UTnH4%rf3{AEI9shmoK;gI&MGSrXSsF+~C_8OEGkck9Ksxee>nUX?QJtq=RIZdzSif!RNdiytiqSsDULZvym8uf^ZajO@ z()ljDojLoOTkUZCj6JI4q<>Mv{`GMrsIxke@m!Q!Z0{y z-jpC~v>^Q?UV@^%yG&-XB<2{!{xEa4Fq9@-!qX+Db(Y6mpGm7IM!WnNg$r!%VBcqL z=j}4Wd}tKLTB=qb-5sM@7>j_pNNnbPwesM$P)hqFridZjpT+%c7>$c<*c4R&V_N;O z)QeaqlLQ>eQSe3l4Hl|Re?nd=cczKvyV>MhoE)x~l>_`y&Dz*2g_#$jW_uI2Gx4H0 z&Fw2HY-oo-Or41za-~Zk$si0)^xxdVB~IarH@0`5uNGC$tBI=Tl||L_J=wd@4^@Jt z4ZD`RwO=-TUXvvI6V(Q>7_e&2NoEt|P|EHrV-3jC@C{ zja!bGwkuJN%>pMI@IWk;Vxh3?eGttoqUL(CI^avMPiyzY?;F0#hsM?dEIRb|hzH?ahu#QkiR z=-N4dOd=(pKlVnKv9;`8WNHCyvQ5b>VQU!}J;!jJA7QMzN z2P+umQIYjkf63M%GTwpL#0?RYH<}~XQpfX$g$TY?7DUv7T`X~Y@7!X@TPy-jjgYdH zBBhtk>&#DFW?w6j%74x6byG;liERa~efSXaeGw~HN}Mt8l8a)At&n6$o3$?P=AaTY zCa&kl8PA69386~uNqm_h_9TNnVByI}I}ZfVT5>-)e-h_@&feVf-AL^pmF3PFOt&>E z?-JOYmWO9>%#Lei_S;@(rTrEjRk6nQI#unr@WpPS1~}zm8ft+|7BD_jx(_t7-wKV0 z$@&oSFOqW=2+ZiA#fv=}&IRl`> zkTkCce|{T>Y4nrDyZLCu%0@)q>q?;pmMYF99k-pg7~VtMtVgD5rKnpm_#_({K~$KY z4sTOG1Ww=^Qc+gb4X9Gm@Ajb+R+o^0cm8s*G^Rmg&3_VXJlL>I$S5A~lH$d{BH)m+GLT6{;l? zQ}uzz3~8n>>+=#nE>(i2Eh2d;pBZ7AOFsZP3wi<-q8IDNIUHfrqs#{KlB z5d}MPpK!8X8}jJ3^^X*$ifW$8NO@(K+$r?4_WDnSQu;C=6$bGK1E^fst(t;qGOClm zKZE1PRvQYhyq*bnyt2g0fgePxbvwF9=85FB?zVPKg=FY;kN_ z+zCb<(8~d;>C@2snJ`0!0-y?nn0qxDbr{G;WR1+4JG~z`e_D!|;ISGwsXmE33GN{u%2u&xMMg4E?_IJ_~B&l@zAf=BSJb*c-#w>WxS&1iKqo?z?mBd+0FLe}Rnj zqk5ew|2asolEsB#@+64E>a)HrQQ&HyH#5LWkuJ+b- zt9k3XmA!S{UA=YPL-p2$kvH|Q02^hhU&r2`_ZxqKsH`Qq;=_b`V;cGOe1+LX0pgL1 zoxqn1hw2#L1}X|ic#)&l?%=B1f6i}}3r&{|z^{>gT4GjVslJvoTqa8S%Ses9Ak3=d zHF@K&k0wcQE;FU@!N~{?Z45udsl~q)7WkRRiLbBDWzP7GkjhsWCcHI~)qw<43bhWWev{f@{Ixax;N6HxN=`=ab$dq zS!E^qN@j4Xr@(@$#@+uce}kUYTz{G06YW~L;7;UXmM#04>lnSg2&RvdZT@&f%nWdK z9>~)oTqnk!1Uef8i8!TCG=O@Nb)(gT@9Sd^?pyqO7YfP*0Z;*h_ytF&h&z|UQ>u*r zi$5*HWo5nha#y|g^0D;Z zbg%1YotJf{e|de{E~>0}eMMDjW5tS1_a^=?o>k{=?vob?|G2n3@AuAo9d(|~`QNdT zMSXVy$8o-Toj>-^E1Dts{&W3ocF_h5cHP~Y9aQHawagT#8MC>TLukQRZsh?p`Nqn+ z-#On-7E61?8fJ9m(MByNqZ=$S8GEC2)y8rj1!#HOe_az;D{lKu7l2hXZ}F%iH^wd^ zlxPMIVhk~gF@ap}YuwWN8Rs2w54rB*-BP`MUDIP|td#l_hy_@vh5=-a6X=K{NmS)xX? z+#(Q?5Kv>`-A6mRm@1+0a^UB7AB~7Jt&FzK#8DWmkQ_EM=u!7TpJF>q6)@CtxJ^M! zH|UG{63JSQ(L$jJo>UY7-P|FQgWaCs0lURL>dBb6!RUTAu0PTE*_;f8!D=TXe-#)< ze`Nm$AwT`<6OrCZ&+TyJGVBiUWIP#DIRPpHTmh+VDZy`<7n(b8IvOt`ft^wvbUxGzO?tEy{KuNYqzHpFylEMY;ugJtrp33>)IMUj|1XQDn-ZmjmE zh_F=^e|iVo^v2JYi~%6f@)u8tf(xpOe`H(kB~&y78-nB7;+zM=$~uzWNG#X1a$#fW zV458+0Z@fj)$C>$xv^+vgRy1)Qk;NvYsX2;DCY{h_4A*W?)WcO`PvF5j^!a_f#@C8Ry~o*e<`z= zhW5H0NH5^j3`;ym{gH1Cyow4%t^-^)Y9yPSq5@G^zn3$mMuv?eL9SLuf?QRL1i7jl z339b-B*@icMS=w3^&%4Pe7J{HdqhiptD=G})|I}+0nKNFn$^vBI_ibpHZg~QeZj=&y zmt(4FxR@$2KXQTF->ZyBzMw*9jtwJXYSN}U!N{v1K85W9t&%xOAOy}xjp1%w&nM0x z8T#CflRO9yCZAkAmV5#S+5_GDZZD^~z9l``(=2VzgkwyQ6zyqS^+}zmf9ng?0B`7f z;bI!Ov-?ajH7wGPWz(=Oc`!B#LeXi^HvIeS$9JP?j=Eb$^ zy7TnWjs-C!E-AAIvAx!#krmrr%^9~7-Q5v}MitB6)q)NXB4l&facUil?Gnve->i$j8eF?JTVDX#iu6n(m^zL7tV1k1ROgMUpHzXzkFMIa&y+Di>HHs7X#4ZcXYfAVG8z}ijHHVTLt zvi|UfA##Z4m@)OwKnmf)3AWn!6!`5-HlC-dLQKfq|G}^zvRW);y%@R1XRxOP&=cHK zlC=spcGbSJFt_Et)@YZJFI7$m`cyG4ScVy2!y22?pf0GFm{?Ux>4#OK!6u6Rv3l7!eHIYFj9bA)K@J}>LxAXUZr)M0pokltyYtoa=UR;I0oMf>rwR}`!%QgvQ z?s)7K`YCWcuEeIUF_mqG>xH)?2Wz$QjhVh8j& zE)S=NgZ15fe*s+6v&;9$!pbTBDjJ$#%)hkTZOh1%O}#40C@|6=(&2vLCtvYfc+BZd zc0(!9rK4-&&OQHLKEtu)??W6^eZ#QHC+-ADTt4`#{O$A?Q`5m!aigS3Y{hn^Ddk0* zmMtc_Zs*WWQ0K1Uc)4BUgQE{wwZ1*byU3bgfhhtsfBMPW08}xv&;%YwFNoQ5G8D-z z)*EC#GZwl<7Y??;VX8<@xc(wi()&_KPlUA+dP#lrZ7{R)gDK6(##xaH5A_Ch~YVwN|S@6J=@4Un6pDy(wc$= ztTM>-e_YE38t9_(b2s`dTceW>N({zO&&OUof;$VlU0{hpBg4!Yuae|kr!tC?BuD3@|J-f#H|u6xZWHVb4Y zl{!9uEntS^ddj}AA@i%q#j7p6Xg%_`6=rdBS@KP_FeQ3K%bNK6oT||PqY2Su#htq* z#P#C}Y`@${hkXB&m-rP7zW9l|v}^-w-cDv2qun~QAAU53HQV-V*>yDpZWq0%tni_~ ze=*6fG}Z2Er$oYPb%BCF+)<(+(9`!$U!~ReR)Xs;ahIyY%ilc$z(^m}!Nsp00oe7# zu!;vWe$CYuaVv}4YD#|yqF4ntt@x3^UP~I~KwGQc66|f5zD$JYK1n2CQI8lDN4M6V zB|mv%S~UK;^y}sOZgmNNn$<@%W{1zKs6a}Iihe!GX@b$HPnA2OT=v}5f+Gkt60=Fe<0w( zA9r@ddWnQDzg{WeXP$4x2Y){kY@ZH6s*XG~`lya;7$IR8eytk4R<{QoQlo-#y(v1d zE1O^6;%NRosk4$zaN22^6}o;iroVnAq@(bBjSbIV612*JUGK$b5 zw+}iQhW>c_uVc*lI2omGm2Jkre>TSPDDpBo-O> zNqsqa#qO*fk1`_qL?YTDqn|u`2)NQVKnA)y!Ans;`?;l`ZYfD_VUEm1)TB-%i5K(% zrvZpnEotd0i{`Nf0~yi9!IECQsjc6}!E5Ptqowb6J4dg6Lk4E_e|Sc2@c;a8uI*b}JKewk{r|4={tM}|P7i`*Motktrv~%R z&l677{W+Yfm^yZwg6!o1n@H=9!6Q6=FD+>Hb0U5L+w|2x+`axr|Eu%WsuO|>sKbJ| z!oIg5q#gCIZ@yU#X;>A~{7IgWM5E|9=h)z_^}}gMr%7>M?k?irfA49#Xx3G${>#tw zxJx1{lT1W4G<7aMuUY7~gZYJH-ev z<63}FX@3Y}5FACfT3F;iy8dG3+PD1=+`5j3Pa`noG%afd>}`qe3-2(QbE^FnHnWAr zS9iw%vCK{wl9OySf06Ko3T8K&An#zlKuXL^$g=T&{O#YyV>gPzTlg1KA^!IBw}2=8 z^Y*3~b>c{cpztD8ZV84exN`nc0$Hb{UN5mMxMbTi_D0rrv(v>Yg{6_;K%Ez*ge3`6 z5l5B9a;dqKqU<#z*K*;R{#!4w5UjqnM9-ZFG6NJ6+0Q`ke=>XNFALYlKEL5#@!ivc zm#b2wAygA9&FvoS|MOS7dOLX;HAp-;2eOQyHB1gnvoeupCWNv}QAn+P=X8Eg z&)cIou2CM_06JNylc6hsY>Nn+T|vTn0psNm4$UR#cUH>3O~UKN-9bPU zFMKb#CZ_WLxA(2fZ6is#uYy&avqA1qq$%HIb+k8Zf4Td#_t=(C%ifueom~Y;mPCw5 zfCGTK^u|W?JM7=ym+L1vd8-=;N(2c?6s?GvHbnw;$;!&g%FCA}ehf2Y#U@ISKAnF}KxNA>_3L?K*5bj@XickqvljLoQgxsOKhOT97COV-sW7RsRF znVckqg9ZgA&vZnQ%^l*iN*}|SB?D%5s{Sx0+LE0Q zCr8{51y7&usY%RZ&na6UyBedvX1RpQFHR+HUDMS`%|N>|tcT!-RJu%*O}j-?o^zGD zf0z8}XZHphpQ;=S+CeY%r+z)F8DMu6aNYShMOE`>i{J#!k}Yu=0;~S<+wV-?fXIv1 z2|-iGto>LUr8x)21jIM>-I*l;9DbAO-DM%(8zaWa2^_B2*JiV!nCUW~8?%+Mp4R|y z!D^TRxX@@cRb4s%@b2jF%P*gQ@P<23f1vZq{n{EK#R*}7VX7J$OZ!5v1bZH(?h4)^ z;8^4N>CO(klx{gM$x&@^_ju{}xWbArNnd4|56N*lP0@|C{rgRuErQM7ZnuCv65p8$ zNoG!L=Qi*wKBKrPi#CQqzgshxZbsdg$eDEd?vvLAuE9BsaMDfBgpb-3DBAcx5>~(M8SS1 zdd{1@+aBiOhFhIODrb2NIZ%7-fKwZPX`)tTyluMRK*HMApU_wM@k5KD1-MQA$~LH7 z5GabapM%4};G~z-kJMf-+r~jkm#YT@6dyhM7&P8q=PEeDdoC<)dfwE|Ip4(74n8JW z5^*vaMVHJiN!1v!JVqgs@C=t62m={^ zThC|kAC<8Zk-qcALW%y~9hKSkV%i%4DS$|z*?gFl)^JwQbj{_#!x!5_c< zcVGYsYk;L%61^K0s3LT?HS1vLgGsY@3d#%k6LGVTvaWrC8e6A1ec_km(^Qu0y=i)cq!fZf}&; zP`4OX_Q|FVYv&f`fEh?%=6~u6ATY#4~e-hBs6^L*1{g4dR+P%H)A~&AFh@yLE>{-}9macK)=TK6}Ks6q`yZ@JdQXf)u;*rvSbv;JmHCDzI(+Rbn zX@^q}n#(ZSvaVw4+t187mnh}?&t|hQiLe3>n=+wtE3g@pJg>|xM=D>WPFnCBa*_xRFTx|v-~@PzUkm|PR7K7 znd>D3)Y$c`?yv#HBPnJFh!JZm_7yQ@4EWiGk<$IF>7*&G? zH@Lq0h_#z11LlOUokmxPJeDT#!kG6k?$RipN(g^uOz00R7DobV1a^#plx1ca`iHr~ z!X7$#$PPjq>P{p{GD7*_e;P&jsoidq4B@}%qkTj^t}Iu7bdKt6#tTqbz2)LiS4?ocvkAM5XAg0!6tMEU7ScpFHtc_K_X=fIQhMuC!_mh9e1wS{o%z zIeX->JL9o9%%^EMI^jZ;}5qB!;|M{(#xp_QXJK%brG&D`t^0@Re zMBIjd(WoNS^o<1Wc6VN%D>YewynI!`@{B!C7X!ERqLMgV1_~ONY1I|6b0$|Glhq|9e?~_5SyA#rxmO`-}^mf^4gOd%djlIw$5b zYb%$aEDpBqwx3|cN7OGE(_Ev2o+snzrwVN-d~i=@Bhji|it-Ru)nWN{(Sg9#A$Kqg zG<+PxdxTyY3xaL6d{9D2^dn*B^~ADdxo$|h{Hb(~RZ~y7sYS=l07LW+VTF*74z31& zxf6VK7G3BhgEGQ`81bimXA0EIO;w-@xMpkB(qG=u0UMnL?`TTFA;$NAR5{!dL->z1 zBN_)=!-lvU7h0J4wFh`uVQ>Xao*&4NsQ~DXd^b$h>GwOsJf9qNI!sQaW;;pGItE0l zGwA<)7i~nHo!1LLDufSTH)j(lRyx*yDRI(dIC>D*2$avu;7F%BSnzChLg;dE6x>yMz;e zor2MiOz&hUo#3&4!svjHOwTTV_a+%S@>203(;mnpurpl4R5=7d&6)tQQ~jXCXFh8>-5Ciwnn7$3 zlChJ(o#c0jSBaZsGY?Egl;K^n-eVHCN&T36#OkgUq~+m;+~hhOvN$Ky`eAg2W$>5` z&Q@abD1<}}&=??xj&Lo1;-wAMh-)5UeJnbs5Tw|kY;wjF`a&WX_0@*aEa_f+?w`vT z*&~C;+mRmj-I)$Im%}sApxE)Aoka0THth|f^dWINd$qlM6wmC(#ym-XAruPp45a|F zkuOQF(H>Za*!RAWNiSU?Q2r=P&y*8(%ye|Y0tx!Zk=;_V+BndEGtQr3vhz4dd8{>0 z4dHJRYVjLj_~`_FB^%DQx2Q3g=@6fb*3nBz3>zUjoiNXkz#T@Q!leD-wO;p&rLICM(hE)8a5B7X%3epSVceaNaJKp``k zc=)nJLFP8(Fi}=|Q`-A9bwAxmUBvaUv$V;V!834CCCW5IrG|Ye{4J^2yrKLsndH2O z8u=xe`t!^=Z|im>%Y8gcCs_f3;I*CwXtWTG*n};E{VAW~>2t8K#)W>4B`$Kfhz(n)%gAGDSk6<^MpfqF^?tmlpw*S z8@0;V7^KU(;1;U*y;6Z5+FPS62%drM(TQOrZlF;w^*I!=>JymXi@y2#*R1~9*k4l( zq-}dPePx?UPb|$DXtbv;oTx)pW)PfO&Nud_wN&UG=d#$@$+!sHOXL^J&51H51{)?V zLWn*n%_ZHA6gX2h(iSJTs2*XC|Dh*jpNw|+R|d3tkErh zinUIx;tG`TVGvb;3YRLMKshucW$3tx=#rX^tf)06mHj@9&oneb(%j{(A432tbKpU) z{TWmP_RaT;GRX-Au6HL=J`N8-Bb|$%L;LNQ za~Zh27=q761F#DWBR)}z39J2*^1WB(;}>Bm8VwNmZVtt6``ZthkcdaS2z?jNujA`u ziXhWqKzI<1J zUGuK7`KpYn4378=?R;HiCePT)FqrK6(3fg^1j)JuX>3B1CI( zR8dV@W3|2j3tj{9pNr626D%{uQ-*fbgwk7lR1@7}r`ofKK;t&hirAuvv89zLr%Sla zb-E!aMW%?iA|IeTTlkVBY5-_ee$1ZrQy1_y1deFPqT!B)`mV_4o2hUisEFOzW|YGZ zEl?dO;f2qnx<|M24VOPRelq3DkYau@_O`X*xq!jdNGHtSEU93ao^Aq~@^GqnW=dIh zN1wtgb4<7ahW!Fh*%#ORo4~t^!~3jNA)k}0Yc9qsFxO$unx6Sit77o?rHn9f*j*r( zLY)rm?~U~}_+m{*n{zB$d%5W?Awu(?mwKv@P2S{{Rq!^?nhKXSU|_0$Pwzj~gt@U5 zLpbij()MvWPy}~Q0Eatw5B0@Ti=vm`q(W?7s;^5b?wV%%Q|tq1wCKNh?lOjl(Vgig zc|2J{I;v{ac>HG24r_1cf6oQ`V6yL1Y&EVxU)=_N#{=$I<|60 zR)OhshOw#-Qw42I$>HleQG7c}k(16Q(JMc0X4Br^Dl%cMRRnpD6b~XSR(d-ik}_7v z`9c~_y$?i33U;8CYrhR#)1=tZpHH-U`v{0G*N^L>z38u(OZTNepD&j{AG_$^-^=0c zr+9(!OT)iSd_(uR@q~vi7jMHLyZoX62waD5we-m(7)Ria-yG=nl z%?AiIk>i!kEQk()K2@{9Y;7wbjCoHG3d-LD`VIPYWmWAz#L+I;#P*TB$0#jXQlF@? z?TN&q|BXmPGB#Ng#e+PS&daTzVl*~GYv;6Wgdr8OH_g+DQ<0K#ANk(N$LB|4M0UhVs ztA)J4M-M9`u4QITgT!qK>QG|(jVt!AUDD_7)7)a^m`Y0rUnS|_)z%I;Jq_XvEXvK& z?S9r9e$$<}WtrKgoD#fVSOjr#_@lSLbLfmzOj(b%jGXrv=17!|whwI4stwBF;z{FMRGVHImZD2fx=YzlH61Zl)V8L=?|f<0 zC*ZS=MA&KuToCka!_Aza53KPu{EJBJ3<95#CwML2eP8TXB&e?|R76ejs(>&%XpkUl z+(I@QJ%SZl-RCNm&0#Fftg)yT_cq7u`bdK1nM8ALYU8!47+2-qOs<*JD)0+^;~`%y z;>5MLY%@LyeQ_eW&;rsS*F!{ks`GJ`*D;9Q?{}}E2Dt{~#f5cjni?~wm9*d!k%4Ko zr0)8i9&ZP$_v+J9lOxqMX~6iLs}4Wqa7`h!7M-$b7VS{lGBdi{bCNJcOZYe0Fl1fX zZUS<0!5Rb&%5MwK-QHT4e(GcaZuj)k;Bp~)Vj&Kn4f0|!m~axZ&b}hBR!~##@V3ch zsT4_Oo)XLUrvo!Cp;3jJKxove=(|T&qG@AOFo!T!Xwjoan-rInb)dQa2gbW}ZCzFq z#`zkRUX~1jzG`zah709vPqVb-Vfz?CzX9IhZ0Zy)avt4nsz<_(z!1wpFV&AJ>$!Jm zITHj}^qA%;x11mCzvAjJ?A=SQh|fbt5$n9#>%}t1se{`1GHs(grfm9i&Jj?kF6HFn zT_4PoEmfWFv=}Fzf-QB^N8_or7h0Mc-1;b?G|@EP21f-I;~7*KlK9tbMj)saAmakWp$9+%zVjwc52Wbh{#C%JdYwYMjl}Bcm~ZK{R@HB@ zGv`G(4+hQ4i@h~AQ(xEwu77K-DgTMK3wPW(c(qY4fS1zIPNG1HWUNUYWDC1+Wo9?? zV`XJ+rS3F&RG~p8;H{p`-b=?j9|daeg8&#qOcxyqmN?|>&nx2SojKo?N%^u-3cPhQ zmAC&2_w&FujUzvnr4EDEi1)@PQr6^l(Qzwr8zk1#g#+N^K8cSRE*7+Nb#r>~7IC)8!-%Lg zKZ-o&u&!4aU*RqY0k?%NUg6OCq#$19$B4lBUJm?8`y$=|>Xt(JVv_?hg@P?7<{>pk zjSt`S5<_g*jP|6o{(|K0daO(X1I5_*nY%3#z<03B>xOx=$05+xFzpfvu@Cd6>HzK>SXDC2{GdJrnJ*@g7Rh`5xrF6U&AA*&su6^+!3f z@uK3_DsJk)4|JbmUs1}QL(A6@KSZ8fJ1DhiX#$`Yg=R7jlWpiDhx_jn_Ijlk^;euV zeJQnbv(Xj$l&H;h=Oo4-Tn%}fS%{`6%HQpoVE!CyfRsnzwVbXpZgyrZ|40B?4O!6~ zjX(9PBC8M(&H$Iege*Bj`6S#EQl~1z(+iq~mS6pe;)YxUv4Ct}r@{qmabU{9YJ*R5 z49&$itW=oB>8ux4_!D)@R|%V{T4AuLlC3y z*u+yIWK5_=Vba%PDYS$DYA|{K6g5HsDcpW`=u=y+O!2IVa!L>(fC#iGrHBwf51cFx zBAGEZeT?1qE0OWcyud;%Qz6dWkTHegmmCt4lskTWRf`s6ElO}~ThKXhKp`}O-R?)d zFm^#CjD%XQ8$18=ioe@Um=A}}CYY3^$6g*G@tZ>WjDtPBut}B(y3y+F{&ewoVA9cY zT8nP6yh;?!&bMmsLMD%?%ZRtEHlUFWe85O44_X4@fM21{5vwFF07BS!U_4}w_9cS4 z`60I|A1?C^NGX^v6Wo*cgWz$~0m4<+L~75? z;0iVLhaF(NW2$bYGP^sq?Dr<9N+7+010fK-e(=j=(J1(Ys1AdL4sr3RlfmW!6q0wS z&=vBcc2p!a34=UW0G3+I^uFRVwRi|Pz>o}f$q3bf47NtY{0pWum37VgAtDEkavLT4 z=16cVg1pO}X)yK@b`xSUpmh62mf7rZCL`k=G~HBhRyS+W#lUkc55A3W;fj;%qI{Uev$Pjurc71>MRG&L^+$1 zvjk?YE?nmQmkx$I@u)1e#bv(pCwn&XK!^3PWqK65ozpit3Z@^NV%9ARvG+n#M^9Mq za5_PDCpSxv&+7}#t^oVjqkC`RZ~NyV&LZ~|I(VYIFBjIIz(A-ST^{qYZN2AjK38QQ z%{4z2Bj_28L2k4VfRx$&9iyCzOJpf!grQ{8a=&{}BkVeKAV+*vt}YW6Eb3y2Q{u;w$@La)}@y_!4d0TvLb-hVp}?!$4mKoyrmWOTHM?VXemk` zB{IAKVm$et8gtoUvr8HKiaSFVCWk`7oFaq)CSn&5BHqRVVBrU;OC1|aeuJt>$dkaP zrs{?qB^TO!$&8-<`MfEmYbkDxEW|eBdg=wWpN=4tER;ZqOJ?Ki39~+DAzd*#WLCK@ z3B%V+hw>ThHO;hH9jxQyCi>^=7RSnWW$v#P4KKgy)>V!;=b5lY)1MRc3wZkDvFiKr zagK+6EJ^pPKn7n?W*rOHTJO)Y!LQsdZ1-#PSB3_B`5Zo4`=}gM4t!#o?;pzNTQ%=Q zIcCeVE2jzmT!HD8Z6P(WskMWCSLXZiYKBw(5I4``+IwPFiD3+RMQXokZD77y-mPM2 zuQQjRlF@O%uelMc;WQS6NGIw}H8}h9!XpU&z`3GCo6VB=p$t;`DBetp6t@jna*e4t zTO#R>uD%jHzcb7FE*dY`K7~azRxDjL(=%oUw<@}T51O6RX?@z9AB-X~%LwB}Ci+2| zb8R8`>#vuB8!d*RBi@YXq1~LAUmB+FPPWb3Kz?baFp>cXff2eJA$Ktn>079F*Y)Ot zq1~^j$`I%*KF6r=d9?vmD&jDw{z&Ax!kv{OftT~MY`9Auek*psUnW+;ZeQhRuV>hp zr9ZQ}u!e)B?HLDt+8x)3F^cb`OYVXkv^0T~e>ZBCzjj+^X@X>!h(u7~4%_Bhg5w+S zD6N!oD=@9#0^0Y}odpKW$|sgV;$6m&+=ci)xc$*R=x0mIMyRbyWk%>>=e)6j;9yYD z|H>kEoVBWJDpcHvy{Vo}5<>!pgCF1ARB7pB%1z=!Ch62DVvGWS58WtOq{ z&fMAS`O|%aYUni&C{1gORSFrAS!U+&7N7176&hgQ2wVtJ3ty>^v0Qpx3EYcW5?{~C z^TzxXBl5{t(ewp@>4)DJf+C=PIubpDSw6QLg-k9yIbv%vTx+r{9}tq#Riqyszv1ck z(g!dsC~pRePiaiD>KJ0m%2C+34rQ899U+8k!bR$p;MrP;EDh*11Sui>;_LMoWV?>G zTN{Rh19rL3a*cEq7wpJl;3-4j*U>A|ZY$4DQu~adiqxV<_^2$ET70*uDK%GXqPMr} zSa9dBAF$gKZw{~j15P6_oUF)N z7DP~z4*D(t)Tl%=&tt^lRM<%9jtObMr`WYC2fiK6Hs0@u-@CMF4bB~=LZ%U0UsUGk zw-mHi^cB9E^vSDV4^!GFWH%b(Fq@k3r){3UohE6tu}`J+cU}OCPg@44#CuR=kzIq#?|2_xOouMY;NZ0SX42z zQPt=*9-}Elg+5))x1S}y+-Pr+Mzj){0q3=bA%9E$bA7U}ldS2>uySU-w7FAyA<}ET zMm)1`zDHtm^T>?vI<(z{ZCO<uFTdXc)GpD|Kf~(Qqly#(QXq3wg zLf^x)y5TOY(9vd6t`DtXNa1=eZ=n^Rp4s>fho%o*NX{S-`b$Tk(Uf&mwnAS|tr}E*8QCf{PAST+*+3mtQ5sNd%0$yKQ_s z_K|je=`+jn60}A19`O*pY;s^L-!Xd};51ZomS~(T{X&De_5)UQZ2~ZWML<3_uqFgL z&#DM!6dv+G+ioEdbF2B6beU@^f>K(k-C507;c8*nZqx!r(&$f?9LYBD&d5jr8OYL6 z+=Qv@b=K4wLQe%E;za`@BIItbKW}YdVBZ8HB3Xs~svcv4g~1#fPH(r^Z8ubfGB`FW zKDemuZa)^!iR&%7%(O~ZHjqJ3lB5mlEy6z$32_Jf=hx3DUM?d2^n-m|hc% zgsYEsB*d_Y&=nG%vPcJinC!tsYmT)_RW9=(r4X(1sUP2 zg7Jx(n2-E1-C>%fJYcedkchr$a->Lo-4wppJcL-@fRLO>?)s`Qq6+)kdd9v`Q4Yp) z*xvr4PwB%DjhxC=9fx}ng(HGENVb+Osdot$=R?z-Ph*;PYTdK(;EU#CiDi>Va2^e< zl5sTARPS#VW=bkClw={V5Qk|iEAZm+IC@a6VP^+05?5BEH=r8b$1;o-F^A6~keLX% zRdQXl&+`$xT!_oY#fhmX4dMsgaYmN|_8*mO8L&3YlybJn3eMAxAp_+IQ2v>SYfDZG)x zJlF~@0!r~vK+LhU6>?vu_5!cdG|lX9w;9GQKt*hfPxC7aLlVtAPH?%xR#Lc8`MQ5k zC>1NGC4hl_A6HK3P{=BXd}o4Z{Dt%-hcy$1cOA;>Lo7~gHrG1jv+-h^T$m{NzV8L* z(+x2=atItYqIiJ3+s6#K-i_d)QQvgE%HkOdamZyA9dhS*X3yRHp=3%_%|i43^DU0XsX|V zN?3&Kx8Js%M8i@%GJz6Q@Lzmhd9Flw4L3aYMoso{} zEQ}xbcNS7}dud|=(x5me*8V>WQoI?Ta;`dkmgo_AZ^I&dLs$|ZG#g4)li}Yehl=Hw zdT7UlRI$B^9lF7zDCCr9UU!>XMmM6LNBszN7icTPd5NtrL||k$V1LMQB=i@G@d7G; z6zy}@#$N+aGhHTFDv&c5&?haBaZ|p{fStEoXnZ#_w@;)cQ&~?z2v}Su|5ajOKe=gO z2Z0~2%fXvE@aPtqrI^0b4&ixhOu`0Y- z6i^(}1rCnkwz%Xa8*CgiOPaXuGaZD<^WFVRiVd5MGKk7`7Sbwnh z)_LlHksg73QHhhe)lS6zwm)8?PUi$7GPi`y;cW?>@&%FKJ4@n$14YCpmWXrmbRpaN z&e%0@5>i9z|D@ciy4!yl*ZgT_dfa`vjns1qk<8YZ;sT)%0a+_5Jth*95@OPbJW)Rc zq3fp#h&`jb&^>m6dwZRfK%GxN#5yS8zWAF>H%Eq(TZheRVenBwor#qHEy@Jy!f4{0 z*j>NE(Sbg9w3~aof)aI@6LpZ1u?5ZT_s3&$$JTR^63E+&U=hkfey{+?3)uDLC-69|7iSd=s&S3ojZg33PBS#6zWKdEzswFjY*sPS2k##r!reG& zdQRs#kQF8^1(E*+l?c9I5YMWnq%R&OofaTkcxgh4abtzxt;txwMYhE$oXGZ9vt-WM z*?wZA7NY^4BD(#tq4)gw0#%TPg8rBf!tBZh0U2qA08x+zfTMvxLqmhmyN9RPFag+r z4UPEnuLmsWR4624G>FCtnL>zF<2Uf{k(Dq6J{g4NS5HUxNEJ6rZR(kQ8nK3q_kLltjXOYF$ zYXi9%P8RUGNQ|Kb(88NZ^d#r-YFo$$MNrIhsx}dfUz4uwo7Y#LY{XC2^yyNh^#y7D z`(YUwElFzfXNF;pCSZZg+AlbqgYeNwvHR&Hrlww@rxuGuAv|jISIY(bdw!e1f^>(# z6N~L{BeM6|V*8Wc7-`1J104JutquZ=6Jjs~Dwxu+Mj^Dk~QP%O~p?`}W z0!)6wItISJZ=`hNuB;0^&_`nzLwa$A5#*Cqu*oT9%z@bN0zyKsTQjU|#wa(XUt8rJ z<*3TRHKXMfa%y3Yu)iF5oIc(%_1GYwWZz^QgaevALbc7(V}Ttu`DvoF4hE)$7(|VFhm#Fu_&1#38bKk zv~kMlNesW?S8upyj?Ba9nQF(4BvO*K6^*<@+xE8O8<}m__6Q1wei)`)keUVX*K_W=-Vxg8ew1c`KgAG(|P+SC& z_~dNlUCj1%gFUb^HaRNd%?HKN+Ki6a2@7r+_Hue~-N+GtArEd}{w$!_d9E}$Yu_L_ z2^aSW9uu|2V>4xsXBT^=K-7&c_j`7NwWc*?wqf&l^-;Akz|lqmp7i$}@$0nTuWF{Y zaqJkwL60Ne=b{bi#TR^obwuhT`a}?wfRR98fQr9v#WKW1SNp70;Vs2Tm!gN6FvhKq zrflYjN)8!52qVcOQsze)nB`Yt>C^m)JBUnyf=>PlY567`!Rvs%!v6DofO!6!UYq0W z%b4RO#e%Ur0%KS`5c=LK^crNcwI?DV0Zbh-C<_HE{Q$x}(XW=)g`xTHqY$mIKZFec zx05>W$9M9=0VJOYWZK}|sM`hzIw=+iISxl-j;2FY8ejXeB2M3@0^1Nwy&C3%NpcMp zi^#=(06yPh8Th+SC2vHK24UBVH2r^CRpyI_MTKWbm0aaI1Al69#J)nB*9eiMrQ|}N zfys|JU7CT@r41#$kor|pdL5chZVqPy{?xgjz}5YMqpk)=XJu6~~;Y!=O!EUqZLY))Y|3Mw3j$p0bo{>X$iMy*? zX;46P@R4cYYb z5>u__4;x`xCz>{9fGrofcFw~1+IE4X*EHR~IQ$7HLdAYkQimGFaPB^$7QS$^T6G`s zfwKW39CdHSmzLcVE!~6jd$ETY2Y8o25SFnZ(c%&{oKg%ddf}B? zVwi@szd0wxdRXmv+7z(WLLW^JsHc%9dLa0}ZPyvxmZe9$q31Jc2To|;^mUD#jt+>7 zPEF{+C3QwYqZjqv0$f6SfkRX*N?*i76EDAH!82Gd?QidQDz^9h!NOoyjnAmSuyjh8R!Z)Ul?F2&*l)7pO{RV3K~x4A=x*dv57p z?6c+D-Co^9%w(aDV4XAa9O?4`mt-5<$->`c=|ivtxupUxjjivWqN=_Py!c)a!mkT> z82y1##u&+hvE3Ek|Ya4Le_#gi3ihQksv3gO*#oL73OCB;gd}0F^Qbj|!rXO$> zY%TwGtSPqm8}(al(QHPH=d(-shft(sL~1y$KuZ1np{Z|8FM;znPViU5{LiV`$jDWv zRvV-eozW021j{F0E9+*o;b%|J^9-Q(Wvrl(-b9^PjG*%xmohxxH+%`syNA_gqjio~ z08U}26hZY*wQjA~91_-rs_cqZ{O?0~${c>e2!HIa25#nUx3|9avGm;>%WArw^YqeE zc&)KWEP&8Fa;xhHa~nBY0584JyAFD_sr3N+qD?8UrdwyxY-@}odmVBjhr z-YiRP?lYRF`0&S+N&zy`C`V=9KIOLK_$>oBkj1_ubqnX>^d!axfuNbt#!GyfTILYd z8^50|;6(a1_*8X80l(-wdH%}+t%@jCdG!l*YDXmddchrz`6SXWLe8SF`Xh`^cCRDZ zg7nmwaJL}7WyW(=D7FNAyS)YUOC(q?Bx1~toe+G+&Rq8uA08h{%iAlJu=zG=Oi+(u@~5R z%e-jQN0BtL)XM|XS;(}grnpzOe9OYao?GwfKv-w|8pP_kmv8>CmfXO~O#cM_#I;1E zHk-0}jhJv2Dd$RSmlV}R5hCFo1Db2^F>uW|vKTLgCdYxC@8PUGydisJE+l>g)uGFp zY!p;zYuU_(Aq0ENOeZlj)+DkHs;`Y&r4cASQ}^TM`{+&pZmNO)^WcHnDzy1N%bcKP zOcQ>4jdXt#qUfcOVKAU_RqXORM}aOe-k@bq3FN5NqVw`X=2A+2yf!=xx>a_f+>^6> z**Ce%N-vJxqiBHk<2-x@O#AXI*e4kwvx`~{axDHpwm1d4JVv>hn0t4Z*UTXD`}+#j zuLIqSD3c`d2Ub9~xgaCiH3(IA-Ry7d^Ava|lX_bdLG6AC+7n<(b9MJwu{%t@Wm;~* z2^9LCp1CsVCWq2Y7koLbCqnISy66I`(=uflZN~aZY`E74SK>%z$*^@{wC4!4wvF3n zyXW4cZQ8L#8pwOzBZ*e!y;LpBA3988HA}cD^|AYsngK9%BmQ2hDB!Siy9+GYs{`EJ z%lDMKZ|^@^^!R`<%b47;=KFeXqRfn*2D?X*4~A06#KJ$~|!#y@qaCkLoso8aV@o)gsym6QB8p|9b=BIU#f2)pR z+CfCt$3+P2_SI+KvZ*VS>mS_lbI$|?2mxID;kAASL;KX$Vs($t2U`nSC5?dPH+}RP zaa6;?fX>*P2OM6AUBjcpDG=S~dIh8r9dZV-L>MhuQb0bL85z*pfms_CbdR|kwK1U? zN!(2nvReU%{Zne^HapSyRq78#8jlPJRg2TMlzL;|!YBLKyDHR5hmGnwd-TG!uIhQGm&!U03H>G2rXU5S2If2z&`KO1ej0x!Z zzw-Dq&t!qau1Mb$K(Tq(+7U` z{J()9Wo>q9Y2u@se0>&Kq8TjOXA0B}G@Z`6sRA5TH3nt4lDm+HJ&m*W{$iR-b3N+t zbAuj#4o}LR{cLNijuw+;XI1d9+U_R_1#VucPtPQ*rQ|Yq;$YBq+6{jUzCE1rDFh+- zbn;JViwTdrY_PkP?`e=|9*-j_9}wcvWTF90$)$+oO7HD&)j-&-TpGn`d<{Dy%Dx#*`<}GanD@~>*H+5;p zeEvR?;rl4?Puhc^togP84+65U3i3Z`4+u2KKWPtNr{>XR4>$Bt*8RE`~hD7KVTCwQwO&Jf@Oj?kvhAPiM(J}a5y)!Vpp~5yx+$^O5a@>^z^_8$5dV%p>+sp zXK+$VNqsWQoxJ{#U`p#@h(eT2{D3a2_^1o}$w){G)YFywRiti4w^RN1j*TTn?wlOC z68&QRZfNc?OsOKJ@2%}RXKn}%avr%8^D8Y=k%eKc_Rf7f4JZ|z_R9^ z*REw6jk0RsIdy3d;JOT|6pm%DTXu|n#8 zU3MC*ffCLC*4?0tF5c2@)ETRd9AB5cBUAeF;;in6S-2nrvf?3yjhAPp_5G9Hh(Ve-ai5ywW_@1w^vwj2N z$YuHcnUOJUi=*kYbAx{IU~gw8S=g9y@UA8JwG1PF=b;eCf#kULJ%)m^ax|b5PQ+Tc zN~wh|-}Xkhy%xiAaFvPBc;C?UM{k8F)Sz+wmWoP_d+nTi_16^dFNFTjOn5C|!SH#8 z#R%^NVe8j;jzs8^SH;@pm*;7ZtG3FAI{@f z^MVEHr~Ts`&e{2nx1CVB;>XVoIBAdWSl}`q3)SGIpX=WJ)VpO59%Dzwi|f!kr}D$(GL0Oi_^aQ?A(Z=m(& zlM`~W>^z<3Rq-~{+Ln>Z?_WNZx>RjPc+UR0(H%+T!{>X#pUa7f8Omlvr+Db3Wg65? zLq|2A$lv##O763Ok=mLGmu0ac7ylHrUrf{h2!fqj5~Ks%V^(<2ihBV`dbyBRo}|9Z ztS-V^r=c#1rd&AKb4IMZEBbekrJEp0u!}U?_F1OLkl`<&YJdy8NazThOG%hBrkZ-h3P!X_32(2djjw!b!e<@ zvK=UK{U3~|9dl&VGP;1~-`h!&KXEn+0loN=2$18l9vWU&LM?0xObKK-<&gG}R<2q} z?BTX3a!K+_Qw(V}AxP|_JM{Mjhea)@Yozfp-32l4nW`+BCzPlZ`j#iP4mXT!u=ik-=-K3 z24ZY)=VEH-!r)~NuL*f;!vg|F;85qNy;DiX2YK(rp za(|Vd5LR~}zDuhsAsp2#l+_KP`0GB7Hl}7~K(54eZhi=qCdqEBAhQpzV#~;t&nk!u z&LfT`-`ru|cD0M}!^oBYYhW3ti?6nzDx?CmBZxA&Iv7;MI5aR26Kkkn z6q@w3R*`s4=obdPils;pW?tCeCq>Amy|dB(9+Dm-Vc#&`^S#r8Y$xp#`8gy{@}9Cs zNN*L4zI!ckBibNp4RW`E6a@syJB<{Z1j=u<0U;)!$yx(p8n^ZdOhFnNCX!WG`{3^c zRSU#^`fP?2%S3#YzY*W9LvVtssgZ#C@KalW#EU&=o{uL85^0+$~MI>-}E8o?c_Bs&}Y{-bv$$!$wBOVDOw!H*js893`+#R0}?@w3hy<>l3 z$Wd%av=ap7?dw1c4^ttaJyn70LtjgKz1&ZKgVPJNKI>-$cV^g08a^^;@pAV$zzk-Q;{|DG_UYWt$y+TF34n=k=dei74 zh*C#-4|=@hk2E#BC}ea$)#tzV<+Ss|U_rI+8A-^@5Hmy-3lSSLb_j%Ro1d)x9` z+6Z4|?STcnBpgym(|3k>`{h4`lv61^L>KTRxVoCPgNJ&Nb%~rWjKB2K7;yCVOYd5w zg^1p^jR*D;A`Hfz1*fL&Hw{?L@wgRKexX=>Qu$=^p*=F*iR>HJ2!DH;7hr~;7T|f~ z5Wcye9_)+Y-Ej3lHoxXfs%iY z6T#a|2{>-nNFHc=Gts&xbKhh&D)~!mpk%3bMnOgaE6LCP)HVyd^ zs>cElslQd;^5G>>(rxVOfe}v*dW@vFz20kqgJFvq|b8aWnCeRK!Xb&ek zT3+`yT_n>*dNO!E=|~ozC0HAOedH!BqD)@)wBW~E>%_a~?V$0G|7fj&XFS+u&pJo- zU;LOtynsJgL{^jkvgu~0bBG02MP(?~uMGn*RxST&%6;292miqPqc87`Prv0jFG~S9 zC&9|ZyX2wciR;_lb+NbXMDy`w>3lh+6+fYUIW-2wt_ntz@4MO8wh52@^=QZ{V6V|@ z=V=4Cc)1o)_;m**f1vL)+q{dxADqk);6nbkbrt1WymyJ#Jo7^K_E^^iExvlEOTLPO-6Qj8u^lWQb6&}yT`_*L!x6Ks%Xl)3o$`~j zVRhb_dK{P#a6I}<+qPIr`DaMBXq zYYsZNq6?}#Z7!RSE_*^4SIpGGTf6|%Kfm4|qU;;g&xMK@Hr6-6FE5%V85yKo3?Fj= z)dbpy$L@~T^Rf$9>iqYxvfGnr_P5oghTenC_ruYySH#bSW*h>4GQK5n4t|TQEdBWF zX1zyyTeXBiM7%F%TRY;NC{M zC>G`0;oDdbI+?f0dK{UQ_&jOXPdI6Py_*01dj4TjGG({G*H-M2*%rZWYO`jbAG>Z= z9_56eRN)g|R2Jj(m=l}P@QS^zM5=Z8R$B`;y&j~raNalx-Jzsu2H0{HA2plQv!|~u zHG?1SO=@f&vrlM)e#;F}!Astl3o)$!)aIA^yR=W8hAp_gNnh zu(Db6akw!%%{f@-if$kRp%id$O@FgQPH$hlc$A{YN>ZPBU9GR+*la zp^iN~i6>@lwdTWe1Js#~4gJ+JNp|0kzunw+1n;fOl_alraCa3m#AaQJlXcMqIobYp z)zc*tu;FZJu!Ei$p3GvV{HwU)_0GH2{`IsBPuX>p$j$5CA?K{XwNPL8cbIK7szgxl zb$a_(; z%T_ZPAIRd8f|e0p{H&eQK16$mEB-H+6|~s@xU_qA>HdHN;>FDSpmIlS?{|&~&#SL&qes?y=hNLV$yv|0s?_hs3A zbwwA?+}Sw}1Y#~pL*L4Ezd+8MI=>{4sy(2IY*;zJyx&-6*U9aBCr|{gtu*!?Y)x|d zw!?mvx4U-S9ehOP=QmG!MQBS}7cyyVPTI1I{=>6R@b>qGeXjj!I9OrDV~O+;PCA&@ zeT{)F&mm?)L`>uNyGePXXOf|GmEr*{XU0O`X*8@%2hde%dSV5oS!g6=hX)3>sbw9d zLc@wqXV!wmZ_7QM)M!>7+|=hseJ=WQmaVFWx6U%0Xpz~-wF zB|lQ_>3qU??Q{KdR{@Cgvr||E=}4(?N6`dOW}a6JC;5(erGmUv8hy5~>lFD&&zlS@ zns%79PM>XF3F^m=^oHd!kR&)esk+mHEw7pgJ@jZ8rKvoh&vBHgT8VmfLcAx_lRh&hfC8z4uI&&gfxRw7KMA z)q=S3xH31{BplvG+k1 z*b8a23D)p;m1g&@p`syJ3DHjh|CHSPXDMRfB%uW#T!#|gxpYILjc$~nroK=Mp3 z;oUCaeP};UeI@Fb2GJShDYVakj?&@BRP#vU2B1Qwx8U8Uqc_j;-LOg-9L-@`CGG1q zq6|z|zl*e^H1kgheJ0`Nq4#VGSR=;k9*~A%l{ConMO(i)FMMLqU@s#%%v9Y3-}l5lct&Nk_zm zaLx1FJzk}CUrNv>sziZ)1j&J*h5KYp(v@TGA!eH%^q(V;VNYSTaC72XH&%$~Y~ zf*{iW5adC-poZ!{)B8bvc{(`FKF87Cci*81N%VWeS=X~ML2GQ}@MWL^!6uT@65K}B zs{99`YD3NZcT0Ltj}h#lO$h8&*ygO8f^=H>hacR1MS#cr44lf%RbrO>GoGhvw6<%j z2huCnEMIZ{JGDMo8G^Bq>GL~XxNps=y6p!*Q@mWepB^l{iC8G@4A&)3@?wC&;78`G zxcN~Dr=YEeeD?S?DMPa9s&1uWC&+E^$PSXTsa*qS;`SRSJW-)-rn-*<+WwVflIKV% zeC4bDEr4I67x6|WkI3<~ICL+MW$<=Cy@nsR@B*$ zVLG7v!cCb!)&35&p7PReCHX%`Gx{e z0vbp1ab8_HiwdOAE&|Y~Qe~!p?7h$!DbX*HNHL$jf4Mbgb@0jk*abd_?r$QN5#z6o ztNlO_e+l@;GQ6rF1ZEmY6-E))(qQQDZLGO}GTV^`reiG5elu1PRIM^qc}JdC3|KG9 z0x5jCH#`Ae9<7+1=3U`L*j(Oj7cH_7Ei*w1C%$|>-LI~P6$z>wMgbo$R#N!_jxxHu zAJ_Qx(0+f}q`&OMO2#OqcS+fxfS1{M*oE>}8rDSK2T)!cfx@Ssyc;6Tmux+rq-z}i zMG#Sy;%#^4+HNMH9hV9r~eM*e|ZL$|Mdo_{{MQL>*amwonpXFOf`~=I>*kDw9+Pg=)}46w+?uRyH{z7GckiEh%w1bZ zcAN(|T3WP$$FAD)9s339j=f*{PBA~;r^>vRF#kT_$elaTn};Ntk2&h=?!Xi#c1Zbu zsO#Iml#TNjmwD0Hz22&q^4n?*Ju*!GyHaT6&cy(*jb6sK!tqL)@(ODnH>RGI#>OQ^ z$>`Ok@)yxzJA7@4E;3DPBcsD4vJormrnlI>mI&Es{aDtf7Pf2Y*aLQU1TV>+wFCA} zMycf0B^~uTxQ`PbSBeqO0vnN8^bOQwZoMQC^AI&Rjd zSpJte`a5smMO8`H)e|n#_~ZT)nSaCce*{om{44*pbmrZNJ@sw%vljOEI3R9tMy`jG z-u&muzlI-q5CkG`>AvG96Sj~NtK|VE7yCOWtfxRb=5E|J9|B|+*~QgRGQkH#x<5Q0 zK*J?3ydlVl)0?eNlwp1jo;kK|9{S2i5%K}%Tx~oYRHpYRK}1>F2-Q*9dfbbQWM zD&+W&hjoe|$}y^R>4hvpqQPeom7}rhECf57#ul@dRXADF4+Im!dc2DBo znb67Y*n)MpDB}pAT^v50=8S5FdsKUko1=x3YMUZ>;t<-2Skxw+ffj-x$9FyYtg!S%#?Z zJ-Yta>NPCReg&sIg2wjQqQgxZqJ{`8UFjlMe&0V?^^--iOQx&d9;-;5nQz6UJRSU| z>B8k=Um7t)WvBb$uW zi-;lXfqVuh-G=ADqCXT9VOD6FwekaN{KM&&rw)8>X6O~ozD5CE?-o_F=bW2iUvKz% zx_r>%p817F1YjvCNw>bP!2d*gR1E){8h1ORJt>Fp|7k=rX37ls;Dqv(?qfyqqN}I= z$^*|7YQl>4=6b++6cvmohsNk5j}Gb%@16vGi5P`L+V!E=Y{bh`b;QfF-KQwOUm6yu z14;6x@0gXs3H=M;;!P>I3btj(5+o~vjEa`>S#4GP!~O=+D+anL{j{Mt4f51G;v>q$ z@Fw;WyD!^gM%@EmdcpU#w@VJ#ig^D`kQrfF_-&4!1ONw{sN#@FS)qoA6u>3U*PeNP5v)%`wLjb zHNZ>`he^%)Ey__e;;J)G@^>U~bhqmgS3BAq|i_6P* zKE5|0)_P$?CXv=#y*}ocs~-^9Gh0iw7FE6AQ>6mcl^X}A zCk;R-XqntM^vGuI?hQ`#N$BPs&kDPF57AS;Rm+a|@x@h+1s=FVhkEEOnhcYjXFdC_ zPgU%3t@;N&=emAmcKx?(L~+v{*(A%H)kUoeNw_5TCCi^?X^iLP@36MgP+!fqBl+_p zXb`5=xGe@>R~Kd^!xH(Iu3&&Ho6b82$(cgbu@sT*H9J2PDhB(t{+>rM_w`%2uNb)| z-$R?12@5>Gil&c=J`j#0t zPDgj_5W9<4c?me64~A9feyEzB`Fg%W2yAsXYpkk-`L%>Xb4$XsGdBaMw&W5P?>&fc zf#4GSbRt()oLae(YMOi7`|5Y>%Pza35YnM$!ekQ~ow&Evf-y=zt_SpqWMc(Ksjs$- z_uA|b1pX$Cn^K(HW_rRHZ&Ed;uj;$9-(_gJhqU>gkbQO|2jl5yYUSnIb+*oNW-~zT z(e>hbw&ggOKNf|^JiY=!@;u>%a!sC;;!|Q5zY|XomS%|bxIV9&0H<~k4UNCsf(4gi z)FZaiXp8Vyj=OtTtcjPsUf0Wsf(?sA25A_2dB>ZNmxPQ4QaAyfjKPMA?P=b3B~)O0 zen~0Y(|iYOqg+pHxLUA_PmG&`|2E0s_rVVqRT zH|2V;8<#BiT+vr2e6g(S!;-J*8*a8i^$z&Skevtp)uVk{uT#uYmC$fH}Jp^3}bO6w172tT9dl9jT9|fn~ zDKei=1-D=NK%RiS#f$oMa@{B!ey_6>%gAiMxIPJxT7ZdnPv?h;2Gw3c|4^|(#xXMf zEvi6D!07SV@Fu-7YVgqg`Mr7OOl-Ots;dLXjW>FP=$Vf-Hw9E%IAlgIU6JUo2ekbe z$bhvrAJz5XB`&P1e6EL6C9Hrh|xNm1+_U=4#t{*=U4D2OhmZp(6C1J=iKvor|Hgd@HLA^Ik$76 z(H8w0T8ZUz>oW5i+u~Jl$Gx4~giYravnxHDd6+xTqIG?i9@8Wj_!!2IdI+t%n4toI zdmzmbQV6JAD)8FZJy~p!79b9jNCcfiArNbZ0VU$F{ibWoxr-u)(=M(dTtYQa46`3( z7N@@U+qNhIlJu7ltG+Kpz$UIdgZ4xe9SM&B{ebxg&mzQFuel7DK=&DF)>Gdzfq&Bk z!UwWX^`ZC$HY|ZJjc0;!kQ;@5l$vOVU zW-|u^2v7LhkT3d^tIKWDx@)Xfh(8saQaMNs&F8yG-s8ns-B*cZf`>80Qozy?EsF7b7z-plpS3V9b~g( zkB3vnK6<5fO4L#7y$2CuD*utx7``wky&VAdf_QG7Sf`%Z?3lGR^@gPp7?PTVbd*?+ zjn;!qBphTw#N+Ya)@wj!&8tqW^I*p>tGQod>aSVd#75qZObUA23+@h&sw&z#v~U3V z_oS*u-op+$Gz=u4Or#>@759K>v%6ndtStl`+>(k~YoWav5*lfas9T-fuv0&n3JpL{ zb5+AN*fzL2de~(285*xz{k2VsvJXm}XOiyka5*Um-@c{Di8V1Lx&s5=sY~4*uZdnN z^yRZ0!@KczCF(myHkR`|Gdi?-PHvK9lAyuUvo8@8E^`gJ z4>Nk$NNggE5UWQ9U5biErMCMJS~ipyu(RXWDAf;Q=sogyuGs`&Jng8vjliuo8u@jq zu$0ec5`PB+y%vFp&@)GQK;$@9NPI{i9}%^*m-jtbyNUWM zA+*tt5$5yiD6P&04qj6!ACH?k$V4e7CUQG}7hS4z z1|p5_tZfM}Mh`VXwMB|z`(o7h)f=`C{t>FS2q%yniQFb>HKlr=_U&N+y{Vd?Oo3h< zG4G0<;`<=-8JiIG*#Nj`Z?fR#ACH8hQ zX+>Y0gEGw^!IYNSVMOJo*fbU$9@S^XDQ`t9LoMUh-n!WY|s$qD!Ou#0(3Mcb#gI;l60>VXZgy!CGjsC>@nR}-Br z`TIeV0u6wrL{^ck+|XB-@4vVb(){EIiU=G{rOLMEn}CW3B@FJ^RRThs!oxZJTslhw z!9EUu{ITuDBMnK&Tm^!q@vQ~gZ_OR#;4INhu0aH>O)p1Sqawel!e~0b?@(5NF5RQN zN1arag-VO2He?+#Jd*rF%=L3ulC|4N^e4A}PJdjF1TBm{ni=}ZaN&ftH_b+EldaPW~ztW zcwtH$8w-~1sNYrKaff`Z0Ep6g!PW#4@^9jqRBKZn2+2P^eh7W9|3dFqqlC4Wb=^P#L@4S_1ikY<2d}{WCmBjZBH^-zKwAA^PchLZd0#mw&UsI z=KeX&hA6LAEK|S7mzQ(oNKQ>VoIvKKBL;vIXt(0A@vymbrO&`(V!TOp4-p@Bp>7F0 z-LK>@N4>7|i+EFjg8!)`0`u;b8O>9h^LIag<_F)E21POl} z=&3dx%fh&5*#2-DRhgTCkMP`C$q%M@2#@mHf#77Pk^q|H~L)8RP9pmK_dgeRq)`!lszgkr+^{K?!z@z@eYO|uP`qTO(oKJk`ZTo~@DOFPajW%2KMwz14TXtWwl+<4H66yPH zm5r`-K~_4E55hx6*bvLRV{mu~#UBLj0<|G_Eul^ZlVTQ~U@Vx^a^()-L-X?HtW;U$ zYG>V*{B&;F4SiDH3$2Cn%#KbFCoZ{h1iQ;n@O5!cX1n9FBucv7f*|$Y}~SJ zX52$c-IWp0haVQ7%r{dAV9s>Upywc>rfg?3B>MLY8j4SXvT}7cKW{^Yc5XzO3%*uN zTX^Ak{Wc^D5RqY?s^pbRAFlllxmdHqzYvg^U`uT+o$}y;I>=oK9EkG0+S=WnkY>w4 zQ0Hds_PgBVIyy5%>7_u|Vx0CfV}y4(%H8SqA;7eXUia?K)#ldPaCBhSUfZ8yfx{mR z!@GRE(855u81(1

>tOtnK}+YuznAOr93uYs&@Y$0$nf9pef25#?~>@?%On+CzK? z;$z>~YiF{PKX#rGh`e*)5^z74U+Q+dD_!i2w$;c>4D7VoQG7x@AHZ4XB0>KWN=2$3 z7(iZZD342i&N#Sp)ahtdX8Q>$5MoRP z3zFGfC=ktdEQ)@*A-@7X12WbItsn(eH?0iwJG?|jkpHnC(3c`hEgO-7x~bfK=BSR_ z1>Qp=y;jpIu$OLi_$WbR+-;g6*OqPQLtS<-`kX#s7*oA?s;{S;o`Fr_q^lAOQ?-!g zrX<;+7=n=;Ga#uv8W48WJREYl5q;{FTdpi+w5PsA0%88~kOeRy*!}!rz8Z5cHT>3P zed{-sXlFbH)c6Mf7PC^L4|fEQ|KQA=QiUl46j7@{tPr#~RcrsGjdP0Bf5A!c8&o1| ziJ3|XBUs6q`gIYH9sahTTw%`yb1p24woHNJQ zxP%_~flL)F+|IaXoCIAM$i{*D60axH>u>Hg?RYIHaITv=>4JWpJi-aGOVZQUJllJl zIl+j8rAH}hLY-HJW_Yn`!g_q+A!-b0THw%s=YKj$W6%}4uvL#4=|6HIJjg54? zMr{98VKL<7z3c6kqQ&Lp78e;piABzf*FECWvtKqwLBt;B>&%w@6~ndqe$dA2HcKCc z1;BGNVl=D(MR9*Sm~F%UDU1OkMyb7R8)hUOmTF{*1UEVw&s4gjr8HtrA(kaOolM`E zZ!AehjTeDAZLFKlWnE#pZFOkGiH-AuR`rGX@|&s)NfgUMLAQf}?WSdRX_9pwwgPKP zX7Ew6ucl76nQM8XkoEixYv~wh3Xd?B27sDEU`Qp#kV(Zx0d3GyhQM0}BmX50F;2sZ zBa=BG#~GA;NF8f;l^=jPc<^l4sj>8l=6^^ z2kdDnxTibZAj*j<%t_}dQ{fO)ngR1mA9jM|abCMhy!gcZY<@aDwbTtJeFx5~<sxabZ?J)rFTJ3f7Z5<}jVKT%V9KY|7*il3cl1A)%lRKjw} zFTqBZQG?@Qm9M*@OleLB3?diN)~8w@6!hJWT@?WCB%lQhmmfRoJJor`YGK2sP?+~6 z-R5Sh9L=l>$X>+mV=us2Ka;3(LsacC)WWO(bl3DLjHZ_p<;-PzN|y@(2S%OA@8)G~ z-ncrd_a!w?&c{T=`g5=tFq2QCEqZEFR)&2UZnf*7@o3x=skYe7Y^n6zNp6(`YPm+k z9rivS;eVHI@$S(eUl5`z$5Q5vS=h^?#lSC_g%tf>bqFSQxo(8Mdh|y6!R1Xt(C{tD zL)jMA7i5>g&`6k+FpdNbae7#M?YsYUugG;nIr2e zgL0cB+VPbpQjXc;7DGZsH406AHuw3fLz&|zyn94Iq!{Sl7Fof1Sp zESpL-9a2SW<05LucKXxW`OP51iF-WCTevmO{Tm)oF^l?eH*r*zNl_icQW5ElolVY{M?s}!(s?x(n4ksent>?=bNwqCTHTG#dWaP zAL>xc4t84Wym5Zd=q`%bv!SbY-E_a8y42TAp!O-kKagPF52Qi;Dq|^L+j!}O)u^Ht z@U*U%W%7>Y$@UQ*D{HdaSAj)6;ohs&M#36n$Ixs)DA`-5Fb|{Sng(- zkS!pXe(ZVl>2)Dhfle3%@!BTg*64R52Af%~aJ_L3E1K1mF>9_3KjfIYfm%^%D&r}M zrnC@@kgFebh-ua+Y_U&W`<1ZLx>eUEZ>6q9bv$XT0+1yvjG2D4)r`5U(3L4s^1c@* znc{7K)n`h;N(Zxb!!vi#-`bFUY|(uTo+)xIZ~$wP)t zoAAP|umFqW$R%SGZU(s;x+ymp6RJU8_O8=2ndZ>>qgF_MZnW=_wDjs=GCBbL4JS=l zBPK)u3gANnZ^trc>86R{wq6WVqO$cWm!*JIqz~O*^nhnJOgQIeOdamQD?5)(G<$Zz zW%|L00HIN*g0&(r#3T_E=XKVxj8lU5_n@ad9KwDte2N?HeV-s;&F&lNM5a?=(IfE! z4a;CONSUt=?snP@Dn?S$PTfl?u9L{jH+`4FK!E=H>~VN>*FYQvc{>D_ITT3c=I@Pc zC&dv>)@mP?x41UzE7H1iR@2XE8!Yzcko)71zVXtg)hgqxk6(Q-PN2692;qi zhDbDvWpeK*p%l~6b~sC(VB9ORjcJ5 z=p{J1&-wRujcH|j0?DX>0aSMF+GClMt|2B@#PA8@zR3mbu&y&5J-s`C5jx=Kwt7N3 z+WLLsn*6r#!f@OhWR!{zBmuTjxiGQ#wc?ll0~Lnb5-rP_w90$}FW5HNJ3qhYaj|56 z2#GFi)XhXpR12+@xsIvWz{%iT@mv(9tuV>l*b`ezx%TYSy@lTHnC}{|riX@6qgD3l z>~`pTeRS>i)2jW}w&6bj$QY-Z?3LNd(!^~0M(S3jmaylW{Z+p{ne(4!9?41ma{aOM zPm26ARDVt_Cvg4!2T{|G>Q&b>f~1GVKwnzR*J#K1s)Qz7dxdIN2khUwGj&cF41!}- z84E72UyZ&BTQA=B5YXa(x1u3Fut+RJB{eZ-FK-($D9Ny*s`xVwILkk_h1$z^aM!TO z!}l|!smM^((-o}^^S*ftF9>4(%LlTnZv2i5TC%b zB9tVsTS{VNGT+vaK!8J-wdZ3wv`<-KQyjo6C@>WU7|)ErzcSqNy&5`ZLIpk3o@-$7 z&mDMT7;&|K5s^*-#PeZ62>CQhFY~hp;V=_Ny)PtGgC!Or1F?*ZiW+bE?l+cT7B!9c z$PCMDGbv`6gPd`we`}Rd`_Ig2&|z3Ad6(E?56(HI4;K5e&uYDBF{laAG!bt^?$vA` zFOdf^;Hvr>nar8et70|LmKMM3_8m}-&DpA8JARWR?V6qi_QbT3)w7PJ!iy(QA-<>_ zjY9u^XA)$CTm6Pw%U-#!F%{EN9ZPD`g*BF5a4;7pgP38`&lJiNXOKwqus*A}Fn8zO z!<>-h=yIu0q`fMu#jIm>zj3?xQ#Pyx-_9+J^+Z|IUXy{8pS$6wNt+zy{yoP}nGQ3t zyB9JM?SNmAz(t{f(!xdgJlJGgQj(uul|D{t;)BD6#0KP>$?LZyG~C3KnjUObMmRq( zUg|>fRtAhZULqq7^I9JUqxi(>LbTuBFbC0U>eU{_{tR?>yvPP~TLCAIxvzebJlP3( z1==&anDurm!UF2@hV+5jp(Lh7v!~0s98ZQXI_1+ixtna5b8rc&`I^ z6$?i^aTHmC^Tr}-Gr94*w)}etOdo+T<+d%QR<4*Y+n6dOIU)5a=5#!2ZM%uJo+nrW zZh2P&#eh6i*+U;!XW0AAiyroJ#`KIxtB{OixRw(6=hgK(>>9UFdD`w$LKAf{NBCCi z2VY_s@X>+8ZL>v)ah!BJ?hO5d=fm@JJWP$c3pcmh<&+patayjg)-m9TmE}I@t5KN_ zF1rGf!dJBN`SV^j{DL=h#gDwpjXcS9eYp-0^!(7LrGfqp8ylO|CQq7yNWUzw5&6X> z0S3o_$J{9R;t5@zFEK9~WR-_ixvTTWt`xg{03Q-UP=-pyZ&WHW6sguHCkzJc>NbKb z-h%-nX_@YK4&J?yC41VytI>}$DthU&Ej)~+VJgM`Z}it?1#~67?j|$pGCa!3WHD@H zw&l?q>KzZ?JY#2WU~eD{u46}>(9b3^TK#EjHFMIiihcd@j+u^Mi8g@24hd@P1q4Dr zpbUz`f6*vZ&?E=XFX3;I`dc0>*wES}_Fu0h$*|%tBTRE-EC<3#LZ?>=FHsbkmiWxS zOAU)x@h5YZlV@hj9d(Y+!rI@bZh0u9Cd2fGwUah|{*PT70u#w!w;o2ZL4KAEmg zE!ppkGeF#Nj{d=xqopqyur2JEQU@MGW*66!M1NcuZu^1xl|RHMK8&_8hAdgWSLd_` z-h2tTNjHi$7Q*~(S#aO4Tr|v>NaCE^Z`Gqslua}f^W7c6(hB`t8YVhrym*__2 zuT77u!2{IgtFovNln>8-8|w~B=&FX86piYb(`!wPz=d9?O{LXbuJp<7$WG;n`Ec5_ zvGx^g_ZFeqK#5rEbn=h!bdX}372x8-mh#6f7I8^i z5^#uTnH)CG3pQGV?iN+3H!DJy9yicsOt0(DYTpcApg!R;mGNh&W+lb7v`xHB5g2 z<`Rj!VytY1h5P7@l#*=ti)g=U;>twR9B}}Nv`G#F_r&wa1IBhz=P(!%z>~Oh4kPi* zur6b&FdCj=s$i5*3t>O=Euu^LkRW4LrBOpoAY0+rZ^P*X@y*gw3|slhMh)tguQl7Q zJxFsrhc4UeumY8O3}OLxjR>_#p441;9w+Ozp63nely|lJC64v&Ew@Y`c03O&`X_{BbSa&R2-3a7ORUf~T%pM8{Um*r=W%Lx)MDAWx zdswqD9#Z)TM`{FB;&Ga^22(rE!ZMjU*gBArKp{|l;}Bf!(G};A6iPj=YBIJTt8P9m zA~Ti+ZQ;aU_0J(w0cb6e!>RCUiv9=P-iTh=tE)$2c?+(4a|nMoe!OF#JdHzx=i;%?^ax! zt)TCZi(n9TC@dSf?=T-9&C$pkA{w~hMDNzP%A53av0g6(230s5Lz=hYqWJ>t!jb|2 zVv_EB5;UWOla>PQcZ=G&$FgrU&)AD$n@R|y7|b-B>;uOPe0C!^1-##DL-~*-nzGN1 zP$I=fgXaxZ>x-M*Oj~s@8*S@;PBGMu>glpw0OB!Szwj~*@x|EDKYA4Jy^<|*N+=W? z1jW`?$Eo6aJ&Vu&9%mys1lP(W6y~r3zoxhX+v$6+4aF?%N~joq$75_YO)di@&Y+JP zVvH-OZ@EP&>7jqK7kL#Shkz}|)WmIY4R3@{a^!YF@i`QA1UoB5A<7(uChAzCosQ6l< z$(vfiS`l9PTop?BoWLcP2<`pk>$7cv*S&4Q;y0aRk14)W#ED6sD5A>xozhj_P*@Dx zlR2sOB+_67RJkyxVw(nrp`bHS^pCqEJ2_^yrTzo0EYaV9R`nBVf~bn7uGpQQWBudi zQL1}w7}!I+>4&EcYZ@E(_DvVyH~>_BPAxR&n|ssSJ=23wuL$%?K=^p2zzWEc5CqQ6N8SNKCUB_dlw6gI-jGqyiu`ny2A zFP2SA&5m!)@JmH5GmQvP1IxJ#BV)1Lm&F#c=PBGODZ$>a+X`HBpzst+`TC=gIaD9cgSSRHT}9hcdPjL|am6iK83!NVkRSlK^YZB99ww1IRs9L(tM64FD zf20LT@!c-MYl4m;;$izB-m-F9!YU>J|0p>6$x2pgc4 z$L!xp)s3vdKuRTzN#^%}Su|zP(RpBO^Scf6GMFy0W}wfZ3%!3knhyfm^}LXizzw#b5pT+A9n|5K)ODzF%}G_x)%PBm*N3 z|3a`Z>jhiA8ss}__4@ZOT}c=DFJ4g_?QhT81v0T7WpC;NyS~?HSuCp$x5QT3CRf0P z4g9Cwz;XP_kAm7BsUNSRuqKvhv6<5uW9)>nls_E|T!qE4)SGxQC>GXC;uN@arfVy9 zkq6#!C)bLBz~!ISXJ=#|gEudSPo=>fc)y7tN;mdJnMYzAa?&#ECMf}C)yf`a2R(2D zts*umGb}S6YxYC)1CorfMVMBmviJG_l6b)Zbo4U zCCz7Ub7|gP%$8ywUB1-~bEpHIQii%xf&zIm3{5kznm`(CZ%X#GFho%OlW^nCh95j( z9a@g~jNrIutGvQt`P}*CFe&LU2|M7Mcvb9}T}+T9{HzIW6<>%+oP(M?y}M5B$fUnI zHfNoKWsPk8L07Q@I~fO?`ueVzAsms&qZU=>i?o4;pUVFLT|lD0OP_k{w|&yVz>+}5 z2!uCW5Sl?Xn8!ew_`0i_}V9#v`@EyR20OZu7C2!+}jADx_W%^SS(}Yj%N*cO0`OqdZ)+Wc+C<4W3Fu)^kNNYxxGGNF0cR za9WO-Zos*JjD#$~AjYY7@(Vxt>Q{gYHRjj9_FvoS z|MOSBm?mHCGOw{4+YTc)oL?WIkbn9LRujY$T$%WQ%q>if8mU-&YQS*X>vYcfv)aLV zIo=JRT~J*F6r$fCD=zlIQ@y`urRPVcQb`7<`+z{vu{nK8c{@#s!<)Fov9f_n+j1Gj zPJd$O{db>UpZxIKx2JPA@FoIo;=q1OL|owugp)S*gkEorS_qE?{1hIzTkQfN_U=zDu)zR zU^QdR<{VG8N(s1vbJ|%5gi?Pw7I|So=YQUCgG_*wb3l$|zm>7TbR9Ot5S+CIpctEA z$vV}yz*H?xE#1t%f9!41ViG4lWgA+w%xj8r9T#f8j5>&cT(u$vZ)}-ru-!>wBMI4* zPzramh+yRpi3rudRO?e_sKiL|DwbO)J1@xyLoDdv?M)Rm06T%D8)=JIjkh+@Ie+p_ z`iF6A)8Bk+(?554GIHThnt9w^^rB(i1#;9y2FUS-5 zqPBhL_Daw(zh_XoQYyvA;X*!?WV1bzG9|2ZbgeeTr->eESPRGXX=ea6R)2&$OgC1f zwpk%4?Z;y;#<1BJDhxLgG4O59hOwgFXsB2<3X8**%uqy0EsYr&b5SVxNXK=@EWGpO zPq!flcPrghy(l3JNSF;Vge;9cQ60-E5P=uBi79f!%{`Z!i`o9!&3#9ZSjUWBp^$q1 z`!0UTrDSV6g)3UPq|C6R)PEzyEKW$ujQ*>3%$y=>wmsr9X!f^wGNrIZ2Rn`HR%aK7 zIhDOhh>i-$`9b#G0D7Zcr^i6HuJ8R>C{-S$xJoB~!>cg2`|s}^=E;sy$q$wsF!LUJ z;BX-&<;k>f0V5|-D6>b)3R?$_us+^iMh1-5pMLl5p^kpZF8?Ff*nj!QQ^wY*x_8i` zaM&Bpk*c678-BnH1!OeEjY!~OIKd~(W=xb{<4{RKyEItMI2dxMC|{kTfVB@fw!*;q z8!Uidv{#-5F}}x42ehtrM`>SS5ManHnX1SXVzIc|m{*yYu3d4vN$BjIERf6}O1f4E zu1mhIgC|IkHWm-Irhhyc)}A9aFRjf%>5<25mBh@#b~sLQw#Qnf4Yp_~Bs@80v;M;0 z`@Y%&4=@Z&z$Npuy{~)R##C*6YWsIcmqj%@&dvkVAbI=h4nr#Ka_j1CL*zM9Vc$6C zC4VB689?W*VnxTvy*3kAig+qgj;Z8ttg894rkIUBAYD>buYZ%ZZjH2a_XZwN@-QAm zG>d4%gVa2aA0aHyV&Q53muz23;rCYbrNk$%HttIaZ`a+Ia`i;rEMP19_YhdMbz3x@ z0cLQ`md%Cs0-RYVWLMzo>rXKLu80&J6^Em2+0<;+zG= z3l_^n`SFv5vm^1l zxx#m6l?&gUNeFf>e3w>>U&LZL4o_6YC9bRn*JSK)L~eR{m#vr!37@3UFJp1N@USAg zonugW5N`s=-*JpvH@@F}6tRrL%qVM{%M=cjcnjBxXn)Oyf)IEUU4-h0q# zdCKctXzku7zKz_)HA=tnwL3|wCd%zNIaSKT*+B@tmXc`v2oNOUf@J?kg2BCk<4zUY zuD#%z%e_4)1ZIi&2f9;bk@E+gRF(5*WM5}no$P<3sW8Ab33)*EbGzin-lw1Vp_}mR z54+hsF@Kqc9%W`*fq$5pxdQby)-S(Ck@wmv-v00~Ad7!Q7$~arI#*`>L1Ey!74fl-EOC_ zG>`70v{C(#b*RxGLJ>PhPXcDp^-U(DP#3}QL9lePv1KtxbdPepprN@ZsZ}&*ETtppHxv>axD}YAS^3);VZe)*EGHE7BpF6HDr7<2`x%*nXRkVGp!%{7ZvYI0f(pe z4)HF7O-C<(wrRl1son4nB~%}qEq^57jmRAtWtyWfq@2BRgtZjjw6e7kRP|sg8cgJZ z+@`%j+g&EIMCA!8=7^eJr49e1d*eDMl1E$H4q(C0+}})Y?Qig9aVJJg=Fwi-`~mk> z)~)C02I>}$yxXPL-6@h(nkfw?Cyo^d1k@Qd4mnxKh%BK{1kY1boeHb zhtZjtt0vFz&$<`g!CB|BSIF?ssxbV1r(yUdsChJouO?@r2VN|qxfkoop%uBmwJ)v` zHa1GU?_VCh8qMb6*!kt1lYb6XPm#4B0@-}V#d^dlb3Ma9fw@rO8YlL#51425X?hW)(61ql*>T)7H^?zo~Z)oKa78Sx}9DQ}U%qHgBYJ5>kj?Iy>Fj4}D+n zQ1z_J%Ir(~6zip*sv6s;yI zztg8ZlbDG)&0JsyQ~&i<%bE|CmZP$e>HQwh(CCZ*s_&A|PVM7n!PJ#!0Pfbdh!74^ zAUvw*qv`Uu+rT6ahO;!c*LY(-f%FRE8)b*P457RI-|E zrm^0HpT)`%TWOJWL1B!5m-xasKIlSCuoM z2_j8pF%n#ify(ko`YZED`jzrX`t8@*ERl5|d{gyDrxiDpj ztvzCOLiHh2Gjk`f>dPYeE-iId(KNfuUf1Vmd`pLZ8?dfdk#6Z@l5UJi#wwYs|F1r?E5JBqBc5jj;_uPh)G0Ht}Ej_WTl) z4xi%jaenE%2Y=Atzk6OA^~<~XDQ_0ry`}5MpcvpKI-p6cU)9;{84I-eED|)Xj_px z@`W2b5z?UIH!7qHE2FN9f7)V&U&PLS(VO}V_j56xP=6}Sm%61z>vNvPw#K7Kh%ff2 zR$t&3v9H9To`@+)Z!9ZURd{f<6+RDrXzP+?jXJc?6RC^EK0$@Z&Gr)h@)>9(M$0H( zksfwP8}vH{RK`Q5!H(GK@_6VbqnVLV(b$WWH$JXuHy?{W)6fA?E zQ=`fpWeN$C9`ni}U^Rwz&F@u=7FJk?KPhBxeh({HEED}K(O&M2BeytwT$%i5X{cDG z;6@uhORJRo1#H`j1-|EIm@$PXV;+czm%i@0vww9MJ7cB@fGyXx62sZp_=hJ7Wpg&0 zu{ec0Q3EwBjqu2vy|@}mQ)sPyI#%t*A~>mhU)Vo1QS2SzK)wOipdZanbiPoK5F-tnicz9y& z{;nFqTF4?RgR(f0Bgg}sQvCu1Vjjl2<9{sUVMQ!8-J6proHHDD4D$A^5t-=`jHURk z`S#~ntaLpE{JUyWyBtz*HY5l!-q80#%Fn)csB0~ydaIdXE394HjZ!HZu8xaBf={KG zjTLw!N1xd^MVr1#=-yAbMYfnD50S?dCn_&kTr7838bFn=aq$4S#WNj?392R10)KE{ z+?bkE8jY7#_P&x6Th1eh^m`V7|M2~%_wVXC0kuj%W^~QoL?5;OUvd~s%aDbTZ0T~} zQdrJebSq!k@4V0A*0VE7>Ot!!@+JJqf_vLG!)}3cvgk0KrTEn%R_5NL1YgB6ste)f zombiWsSNk~2$Yb4P!X99#&Fo%{eNPS)G7#2!-dLgTB~Mmv(1}z`B`1gCX3d&8-3T~TzvWGQteObI1gVbB(2YU3kq3#U z47l;s-1{?$ya>;D0*Kx^nG#K#zd}4nu|noZcH14<6izi)kq>_Q^!DUZKKj+J?Y$Vq zwe}B{-N&TnNS`vaQel#ylYfa-K4BF~J~(|CXcXlT)fB*lwDGVIS)FtWAi|m#LHA){ zO53Is05k!CSv)*Etj-(;JZ688BEm+C_QOJy@~Q%OR3T1cYYz(-72DqkI8ZM437V|w z3sS|xnY(xL(&rfm^|y8%WTvI*XmT#rV9l>iw}Ce)ILZg+%bk5-secl09L9bR?i`& zZ-V9TiY@k}>#Q$bd44wNU!8Za`h|te&MOr%>sE`;NW=bfUcF>vTT8dd){^=ns6>t9 z`s9RA&HoHl3`-4Bq2+NsHNz^Rpm_D9zryClP6Rw@h(&Y*`#-y1hzJW_ z#i()mvKSTD@|w9+E-^Az`Y6lOfyLz;Y`BiNS0f-m>c?VC>M@Vv+<1c8Bd4am1?Yny z6jsvMQ>bEHqNm21b=7f1LG`<$hz2p;leRq}x1jWg&HamxY9E?<4<{Z_U75AT@}eq* zIaUts)aUo>Fn^rFTi=FhrD1m3R*dCfNMgxsce0YN@Kf5Yx>M;VR^dnNvd>jEVr!fV zS3>a$G<94nAjro8%hIxk)vi(sAA7DJPF3~0tZ9xaTL-oQt}d_6uSGz0#J2B|9^27b z0Q^|h7>h#RnaT-VG}t3euziw$#%iy;L~UI*)|CsjHh&`Vx~uz(cdIoR@Aj%zhJr70 zrJ*W?advBH(7k1oA=8*udw3)wroMGi4O2y0V==)Vr(Dq1O#=gM>S4<+P#+#4RmKL{ zXcZi}QR0p4F0L=yrTD2a!ngZqZRnBj27jzhuK(z)I&M(hOBaD~M2XyO^bc=LIm23kgy>Zu!u`}e#uPVY1s61>)bzODC4MN#ag$v2@_XVvyGNY~XyQ=XS=5+8m@;z)Gvb4vlVeeZQ z0DoJs9%D*;B}$jLm2+5iMVV;IfK8RL;zuy4|pMOK|^2F*0hIdgVKAB7|3ob`Vc{7(X1_WI_ zsPdaP2)stzsm10Ih+SU zFlZ2}nAAaG3^t+XvrVL6q)Y4TKq${LPhoNZ+=hU`so;pF|M=U#vMfO{q{^(W-+%D} zmP|;_=6dp+^B_{N2^GZp4&1P_K%@qlJuLXh3p+OyDI z2H#j1CZGV4bb^+1JEJ&CIHc4jVu(Sc;b+Iaoh<$4guY56+MdP<{V3SmY2GUpFO=ND z6afOwq)I7dleLuh-?)p3^DO`}bdxwkgUa2(*V9&RJ=&0*PtW;wJ5z4~|9_C5pIRJG zMLVY+A#%ziEZWq#kzCiDD>_%+1h`{!tc+uY|6HqaXR#*l7^cHIju*|a$J14n`svGj zFZ(a^P~5uleRC}G#{%(EJEcox9}um7nM6GtJ{|Mmp|E<8qVj07PQWoHt|V47hya zjkGms1vOVRzyX@Gv|Kq700y~h4#W-z0tr40!xc8*LyfjV}el^fmj^q!1AmhKl7l%o7I5(P3(sU^eBu_^daVCISQr=^#mJs5Zm z`hnt5GM*Z+g|J70!$Zb0_#zD%=ZqJLiD$wDFrEnw98Zi3JdML|9Q^-8Zt&bK=gvWG(^qhQ$@ zylK6pu7C_Pjw^daC@oRl%jhr01YUMVKis|dXmz{S#+)1VGJp0?!}|?9msCez;zn~I z^0wJ2lze7lL0xzrle#q<(60)x)Df?n=! zwrg-^1GeIs3I_22+Ytyj3A3lq;yzY^V!%JC2(!YiS&cL%7P@EVX|F+PIUL2WBIpg6 zoa03l-gx7RC4WSVZ_zF9hV0H%4uY#uN_^|339B^_InKvY7!-l7=M+m zB1848*jUNuF!3BON!&%srHSo}QWmI2@hrqRpx9Z2aewR~brMdPSEmLZU6mo;+7xim{gf3udE@Ol-kmUU#vO>KGYrXgQq3kCvTVmkZX$yWKEWWd2L%2Qy4P zAAO8QDg=yyc{p)naHw)^yzspQPt|8JzE(8__I|Qz7jQF23-fPrMY`Z^Dn{6saxAbG zk;)D{;eYz2PtRv?;N+Er3%cyTAOeHwbp?(J#MOdVP{l^R2n;AmNpyP#-OybD-GQ=u z?ak2>dF=()+@$AVsV3OjkLEy#_YTz<)9+9pm$WC5jO@=yxa`3(29#4# z?E*KN3PXrsJhspd#V#4vw#ZKuc(U$1wwu8L`F~|@m0sR*@~h>+RttIQXb zVz8-HojFpq@8`fxyZ~;(?T1*5CvFhPijoDM?(}lLrL;m~45Z)_6*$M~*YS%iD}9MI z9DnXrB?VcSuVvRiVCE^28fP9>S;^0Z*l^5Z1jJ0o6UTtrIcD98R2XHat!HL0a}7vG zzU(}u>?Er3)QifM5(?|LO+88ADPA$!=hzFRXrxkAV&9EtFIqa^g|{Z7}3 zGz()9Fc*oUlL$^}MpEdcG%n_xYhpu(V;>o@H3rx>Z*~l1`vSuGXti<65z}@h%CTACWCI?E zrBW;umc0+6nMKrGPgVzf>Gf&te*La|5yb2I-ZZ$LMDTDA5m zTOZ7QL5PNpqO<)>&N;@-jod}nc>L(cJin^!S@tHD0F=0&%@SQZ=Z{IGsb70iP56h_~c*(qklXqvc4+WIz+}h z@S3zW`Do{X0DoFb?gvNW+|JpXd%hc~{iCwnS%c}eM&(@so73{}4361wt;~Mg z>#Vfj!lNqI*j}fq{T9C1Ez|&~JWN9^kjVnZXG-^hX7*d55iwaGBK}2kt^$D>J+yeS z2V&}CzXM9an2N|`WPktnt%G$jQHbai7fa?G%rQq;Brj(GbblC<=JmjD<1meWvUoQi zjab=;$a`HW)WA~3nWW>k^A^KW9Dyd_yYAs=5JH zO8VVCbi(QqQn{u^RE!O{`qG7yzQ_zGU4G(F^FvI|(c6}~@z+~;6T5IW?Bf_VQVP60 z8DNy!6;dCJm49LHE#r%vPqQ+09NI>dIuskATivE`pOOl)`9~~$5C&5M zY%g4UZ~dl}FW54jS0Ze+?p$4g)Iy{tQGpMN59(4Kl(a&%L}IEw@R%XZ^kscs;>V>* z(6mJ)PvtWsOmpdnL7Ukqp|*33GL(dc!~m3~WHrPz)_-ZY|MNA43&)@wr^-M0Rb z!cg}+b{h#?CNFXN!uwg1DP$3O^Z9hr~`UAKs9|Dnm-d} z$WQ=Ofe>@ACZi4m`G~BMS#ziN1Lsdm5feOC11Hrdktf03<4LIh7S%svo#wev@spw7 zciv|~ZM>4g6x$q?F#&sH_*%UYiG^Tyd*9i}>vk$zOKGvz-A30AVWFif5V zaaeuUwe1e zsos`oGMGw#*jYDZ`CL=f@iJi2d%+}1BxcbOtLVyg%&Pj+u@7}0>o$+XJiHOtDuVYK ze#9Q~dx&L3PPNxav5Y}d>ZPo~`CPs+;9mDeIuuv#OD&F!k1?yPL|@4aPW2R6P=D39 z`=4ddvzqHK^LwIQD;L~}T+Fg%KXV?mak9-HkBFH8uFeB_T7>Jw*ponKgCG&7 z^oa&gPqJ>bdhmUH?7@ADfA2y;nIHfvU=Y9H=oE41Qg}+0@qh8BWte0sgF)N3zaP+=jCV%0ZFp4M=BA0YsCUkc%R;M^$R7-KbsGQ<_v1>J+ zi$fKemZ10cICC>8AApK;3ebsa=Yx znY6zS?k_i<;Qe)uQK}`QGaOOtiPG^&y~rr})mh3;N9F(%1u{nlx!yw^nScEipFhMS z^Qb39&65gs5ampOCmG zQ+y>+4@2Ggj*^+0SEK6I|og}!+R;A zrV$gW{?;tKb>_>_Ec3BWHb~>1CNNfbYe0&Y_(W)HnBhs{{K&ccM=Yx|hrQ*55DEcWI?51*H&K1%7rGdmW-h3TqD z!B13Sj_;o^MY}mUEYPU&LYFV!V-)L$Kxa)wEoZchlW8vLZ?;TVDFZ-gT|Z$I`XPjJ@ak zf6vX5b2a8OSN9(LfQ9#O#Y|dB;w=ADh@04-gQ;RK zEkerym|V|1Nq=%R`dAvpjWY2i{F{A-I0St=72#Z9TQN)2h?ZMKLJ|UMti1bZM;CJ? z6kZPe-0q_jai*8iwy8J@gB7yFW(Ga#Cg@Y_hp8flS`POqi0KA>QC}um%Q1Q=6v2~< z0-&5bWOK0l6FgwMxJNx16E_&$&&Ks<8b6zpp)gqOWPjwZ0^^A6{~+Y2UwtCdTj{wS zj$De}0iKK}V=E^>MSv?HwJjz1EfYg?2TmuXau(_%HywXe$_0sU{+tQ7_Ke<|2p9LI zh;CJRO==e7%gTnBPmMJ!$a%0#o;5+wV5TS%ljls-hsurB-V_nGD&tS@V4vRj*^)5; z1X}*$34c*=L0OS(&%K1IhG0iY$G=o zt!y;5Okj!=kZ$cjX&L5RVYhz%)6yOP#R}c$LGbWxG2Dz6`j?)V7mWGk6F>5B5sX(g z>O9mF@N5JVwKqjPoDGhg-zr~Q!NjpXgsc#~qkr0}CsIje7SqsPw*zSgoSI>Y=cqsO zy@6Lzp~$s>%Z80)vr|+g3hVcBrqsx=aVW^u>QIoYYM~%kl|wY5rbWpRr`A$c@u-zsm5wI_qxQweTQ4-}XEb^g6%W9#b zVt?ude^Cs}&i$)eZ0~1aQpH0_-pumTWa$@m-sKi-RwtH#0{L=GHH{ZjHReYyaQl0e z63G`-=*+QWL`+@UR4W*H6~w2oU7%GmCkceW8L2bejqCZu86-oWyK#~S;lbpStH+X0 z;6Qtzd*AKlG}pJJCwrQu?U`_l8IqzsZGWpqsS|a5p&H-~eJ@;0BX@S6siuZi`mt^r z7A6nIMnxz(4cdmEKVz!Rq3if=G|f?W%P1YHijhzKaOnC9+(&nwKH9M$hQu{x_8_*` zdNi_PyQ?|lcA~pG!qBK<*}GcM0fz@{AGC1mMnN_xv+7+XqA1Mu2lb5VH5k#Hx__wB zz$@KDOrBASmzF0cp|beYMP53H=I+8dj)j0@2jc5S9pqOqIaS{=%yGQkHjyh?D0$h7 zxs5XSmFLo7y2{;FRV#`%J2NA{GInCmr@l)@Im>Eu?S(J^!gxv5nC2pmsr3|#2Ef(l zRQ)3o@uIB+hN%cdL_vG0VaDd$RDZF-7YUcXOgmV+N!mvNF+a#s$kT<7>F`?640G6gI+3@M_gT$+Gi}G+N_*2{=7|nSWT9IOT3K zfxl7l5oKx8*(1!xHRf_pwZ-XE%7}AS0!zDG;o0g)HSBk z&2YW&cI05OHoh^_SEQUkrGEpd`kC3BF_9L91$u<>sFC`Ek{J)s%0yehZH|y~%DU1-f)}P29QX-^*t> zw)}mFgQ{;BHu=Pz0Ex>7f0e(T{$gr6xGHXxG>NU)t~95-Xw$OQMAz*c+6n61H5@Ou zYkY9@A*c^iN#W>%WO^gF=%A?IaOsujhB<5AC9u876Z{!S&j}Qz&Q=&fglj+ z1aPKY0#~&|NhMb`u|nseG0M%pmf?}%z>GJG&tmbvWa;b zC6y31wq{%sc7J|-^z~8i=yWwR%N^xX&c^#KU%_>+8O3IS?4(l1=dT6KkX%pM7dB*m z6}fn|g%_xD5z463Im*%Y!M?N8T)}+y%;Sc0@lM=CV45J11w3* z$6;Bnj|HeE<1I%N?r6p!VyTAuZ)AzMZ6(42(SL6hi`oVRT=?V8j#w{|@a5Ml1^mqO zt@z;YXM*k1AxPDchejXOat$LS48yNgq}OWqphId@Fs?U62XsuVnzbAE8vI$N* zEwe(`Z|3w8*Y`%NjGQNW>W4FTnpS=x+X`zh2!6nZyh=t9TIBXYC&SPmZ~t|SIUgsZ z)PJqA%^29nI37h_CJLu&gacX-a-+1J+8jveX2oV?zB^La=EhDWZu7&OJQ9CedT3>% zg9yiNL|0Depg$K?)e*LJ_NWLU7cb*-f@YqJI~sv9N15EAGZkCJu)N~{ki>3+sLL-({fyfLw{S!={oA7L1O*JXeX&JC$HF@wc}AnM4w1R zJ7n~eXAc2a+6Kr#cPDr$>SsT<^wTXR$t}#0nTVRyi6rrYKHxL}v8p94U1iZcwqPJ5 zx;R+Ui#N6P+chJ%jU1GHK{ch*z)qiiu zz>FTx$PNCV|IM|1Yip-uZdLsk%RhQx#LkZc~uG zJYW-P-7$EC$M2;D&3;bAFJPO#`iHyM-{^mJzFKucZ~=8#5LejuHiWdJ{`Ji_t04`m zLYhCx6Ow2Y9p@YyytRHf4e2x~&VS48Mg03cZ5PeDYSn-FnI4x37~5W6?_IQM-p}E( z-zNS6nHUYB;vd{GQoD#wDBS>~_;~EL9To2SKpNwF&UU950cKna5Gw5tK@5VU=vE7h z{72Vc%v}4n|ABkg@$hK`hMcBlt$@8P(S6|^CUZ`;zrtp=u=wik7$BC}34cR!l8q)3 zzEHvJMi=BA%oj+BnF(1o{*S-?+j#6oQFsggVk*Sne*PBlq<`Mt6r)ZYsSp%igvu?! zPz6`cKT06$bkyr5mIaq=d&b_#+HQ8bSf#Ku5*(=YqLi>CVJhONvRE!PcT$wSX5?Bf zJkx*c1r~zUx0dL+6G3KxLVqIr8OU8`Fa2fV`q=0<{42hDTJUmJiZq03Vg*{kO{*X+ z!Z=~If$N_t7^;y)ub3=)pqDd4yqhI+pX7%(u0N80S`4Qu!Mw(}OH|l2m)8_BG+-Wvs$-g6Uu7Ti5`mDfmp) zgX@?JA0HLAeaZE~M7&a93fo{%$d1D(W-ZpnGMS1G7LY#+E`LDqQ*CGXAKB>4g%OV< zdjJih5UwG*=rY1P_(w*@W>mi1M`QS<-k9hW3u_cBWl;4@P7=aFg94LhI-lM>s+0f&-65TX99~^ThBC2&Z7aR1BQ%u8K5G{Y)Y;) zPNkP!8gaWiIg)WTTY{;HY8{YIjagyGU_*?wVR=Ap$guFspxqhPL-0c?T_(z=-J&TkxPMCBN&fVcJA;i+RgM+ypqKhn zzn;_#u)7Yp?qZyxs`;};aDryZmbeIkRe%5WHzsdDXCEL5ynl?@%Fzg4j`v<4AHI9%yC)9)bQnvx z-j#%f3GI=5Ccy?FD}d;!SI7z@$nt0f(3*R<$)Lt*! z#+Q%>0~UWd`VchUT;(b_!h0?(ZhF?#&N<)2(+)l)SQ2qM9Y=jp)r~GCSKdfqflYRO z-5Up^V`8=)VYBt^quuA+3D7Bmd)4VITu@1CTiDm!Y`5r23qwiO1hG8EA(HSEoo;Nf zCYPGVPat<(Ly9yC3{#pQoF3cFn>){E@E?`Np?H59$aQvq*bNun;~L_rCdX#7={vCI z#o+MxSRAm!5{XG*kLd5ANN#xRoJ{KYLWUXEGdPXUlV~8(s46s-$vIoXWiYr?;_FxR z_E#XSBxK;e@X(h`%^h^75!G-EzWnsw#gM@guDnBtee4Y9QS8X<8_1>2Ui#?1p+o-> zS=WEIXj@yPmsOY)#)?q>Z8$g&<37fCCF2>-uYrm7gJ?KZcyknnrH(nzChMn&TX7z# z3tbt7jDGM()2IiisKP(Ki9h)L*Z&O+AYl!#R4bx)qXJcg?zUzf41F+Z_D)540e>QH z_EFZgPmp|oMFwEfwG3oXG(kN)Wcxnr>&t)o(4H>zp*^kSLwj1)hxSx_XsTXUz|$Qp z9{+TEYsZ%ul@JYWf>E9Ln9J>rvKs0Z!^%F{v|;T$M5=O1pRnxwFpr;$ZySHuqwoRv zT5voxIrz7T{RFR`%dq`#ohNZ~FDB#dGLlnWJ2eVMlW7s=xM>TOXGhgnX;GFr8Sk|lq$kkg$z{V!JEs) z$KIme0dY5bNqKr#my}@&UvIL={L`B6C>DXAFgmBRbef1?i00y~?e4Fh!~%cr$ogpz zTW1A>#v4BA1QmfZ7!_Y26TG@v=v&(CAX~%{czYIxJ6nDl&yFlUUj?fzJ-_o6F1#Gc zy#9j-PQlCxo88j&Uo+Zk&XKYpM2nfi5+!KxHy6<$2i;T*0Q47KnNkAEj!s8;Q&eB= z>X!PDq7#pmuIn)ludp(%m`;DF^-MdQdeB^k(Ux@;Q{R1N&bdS>-+#87g-L`Jc-WK) zm0N+$nB;k7ZaGrB}PkGx&ygGzCy79XNr6l8% zY#)&n7N&}%W}oKY67)?6pK~%Mmdso)8KBM%$PtxBl5s;aTw-QC!%%IokkX1qz}94RBW+Jfnd&QjQwz2bg?mg zxp)vLzWfAk{VEMVfBFwzqfAvjTyK&vv*-ITty{YdJ-aJS=%%e%vKpJ%lpBjHDO{N> z=lIUIRuHK+$1H!L>S4n)u*)Eeej%&S0?0_GwqY=tWjXn?f~iW;Sp|x6D_Bus>OOw# zvFrmo@&S3WQ(S4)8VpAg4z)H)nsWBQW4Fd*ahT82aD2jrDsk^GP)HW66EEp3YKT=VPqW0 z<51KN3IZjJo*9LeQ4u{10Kg|Gh?L?BOo~x+$&itID?|*oA01V2yb*OXeaS%|hG%I8 z&9$$guH>0nQ4!Ql5d;7>cXw9i8cSy$$z_o|fEt9>D_lCd;r{o0;r;JO6Y2^rJ%f@Ktj@fnu#=of0QahNDN4 zy3&8j9(EViX}mvsiWtl@k&-{ECKpt*MIk%J$Uj%b!}WUeL5_G=I5drmg-0>6E7#{3 zUj^q8AJw}4q7Jcmw;%u{F}Nr+lvdH98l!l20!^D3FI;QnE`p@z*IB{lN52hSCWh>nDs3_`vk+QeKnQ?XI~yrl)`8 zA_w>}XdI6sP}RQ2968iqkB*YcH>Mi3#~-3njOFX}!|vmS3L=(Cs-W<7A6Hco;f?il zMC@`ql|%D$d1#4w}%6*ZH+RFCKAO4OT<2;6PSf>C9n`}HUt{XVbJil zo3}R#r&A^VCT-HFvQCe^O+Ha!j0t}x+)vY%p&*SejtEW?1l2gf`jL9z?cjSXdCIV^ zg&Qx2FR&pgh{N;fl)+G@7NHr$1|bC7V4aahueSxks$- zT0vSKZpd}6!x4*fLaiS~r&tD$$>3}yCXYf$)BueEa_9)xB3{}^jk)F#*2jOMa|%I< z4az2GOrb9%a#3Gx7|n|A#i#zcjFCMuc)T6yVc(wVaC^cO;*Fwam5ARGCT^a|~PWr%(63YqlM6$0gt!}L@+VaH5I7c7vV ze;nB@C991CJ>&ctCOeOVl*fNs^VAUjCZQI;0*0SW(O0tNTzi8WgP9KTnP?rol*F(R zqO&RU3<=y(1S(A0A6@wcaVzC9P}Wns-9Z5P%Qjvp_-%b6+%;8GPp>u8HBvP_E%kIc6T+01k<)@Q zaOdl>>;r7FmYEn_J~5NmlxOWl+GXA>)2{fu>|oUAb9|Oxw~;ewL$6q~qFmlN?IqVi zpxRs_<13^jmp?Ati4vHu$*qW`QY@U#6Z-)%RK-mbhUoMoLO#l6V9S0hK+a583Gb7c&KlyeDsEPt$Lot;IgxBvtbvHd(&_H;ys z7AQV8a&-b1Izh>YJwYlBMaBa@LjK`ux` zvi$QJMM^nd8N zmjW}+7bV`xvy@oPlg@es-q0@l_;5b#y)^dZUJI^H|JPxs>Ex68bDBBj6!F5g6Ah_6 z>L$53`OL9_G6vL`zqmC*$@KKPrW~WuEN+f%_@rVzJV)TG*V7rwl~3~Uu+5Qtk=4u3 zgSN~8`1v!V<)DILaGmH+gm_rw7CH}(UMg!CCt`TzXU)-t)k>GS)4pf6N&_JFBTQ%G zK6MZ(wk6A`e!-{_qTb%}tC=8^nsbWux7LFA;UdG|^ndA6s<+c{OHTKLLn;u`sJLzyA z7H+#VBe~yR7dN%epFjM|>z2<&PZjLVFpa&AvB_E1{ovNihe##Wd8cp)!C`-mi%qS zW3xA9I+gv=y%c}F#<$LUH;S@Wh8H)^wp=A&AF2OcOR{M4tu)lT#B;6&rFh0Ug8iec z`5`TB3w((Opa8kgwpELGLyru!OP;IEn1@K%lhk3x^qE%dI`YW=eUxjHEXG&+z2i%X z3u|kCbu7Rt#oD0GA>Y)!%o;w4=SgsQj%AtCbYug;*X+k)n|aj&HYQRQZ< z=)Sh&%5BjMlPF>RRoEuV)OT=t3#lAIR-;EIE*JG_o{uZy%H~GLPePwX{Rb_dkvyNe z2t!p~DuTYQ3Tf6jwp-94PaHA>E3#oo#O4+=&{&$az3~!MbbCmo$@F@ z1CBDmcLop?Pbg%7y8=28mleHy;hb0fm?>|3Vtf~RMZoJOvKlT&T>-$+<+q@5?mmjy}NoXY`Z9Gh-6p~HV=V2N*U1mMJ&?Nai8}xSL$Es9guBxJ) z#>jYhvw#DIJJ2(}9G@+`4tg|uAGrn>TI_+7#zDiI0^YZ+nDs%lPAzKL=D$!i)h4ud z7RAx?XQ6M>(J5Nf`~_uX0*rt)3ZF{;_}|MnKI_NBuS_)2WAG4o6BG14&I#f08ZZ)Z zPu!x=l@RkpaWrTr7^SJD?Gx*F6=HpzBW6#qc*T%w<{Dj`3J{2GMCc}){DhvmSSL8E z?*Pj3yVbpz8W?q7(W$V__x#50<*UA~qcfc;2H0dKOFF0bK@OJ2mc-(76bq^AH{FpA zdWRm1gWIL#EtkHg;E6|}RpZ&{3%|HBfI*I4ZT#SBn<@Aef zhqoRDRK+co)4yfjf|!B zCN5VRAHV_k+%k%@OZN~-6mu*r9R0A|dY+!Z!0{x!$#5AKsFw@05%c=#1dzhW69c0H z0j!{2$RHv9q^W_Z6V2ofGERiXmwwh0lU%GYk;^qp+v!?ro1eyk0Z^7$$!3~HrQF1&p@ z+!|k=DK6&N@M-=D+3b0(?Nv0n209S+=-83RDJsCPr_B3;ZN1kiSl>9ee#5BP>u|G= zv)7UIAMI`=XTKt5dLoy}&$PpnUAt0Co8~I^0C0j%b44w5E7lJ5z2bs3^T8|naC8U8 z{Ulm8y9WWw4!Sf^B`#=0jb1T2l3;qezs{y4v(A_|Rdy=&MfDl*i9zM|ib{9sdqy~9 zs0T_=F)%QTTgYmS_kFP${K@(To@Bf#D&o85WNN`o9f76t^XymjU=Au8d88SAt5kije-B6)nbBjif0$A#RK~aOs1$4h1iFE0Q)c=ec2yk$iv?TQC z>v1E-CD7HIn9o@b!g!&^mppaXosRZgd-+b%@e<;?70ZM5)*wTF)|NY<l(lt&UZpDjl| z5K@?t!;YZdNOwdvY0HSRzR%!;+erXGewhMoPFI8Qf&i=yKRp84_GhgXeIT8l5yaFJ z&ybq@5E;3SMrwsQ-MQK)V+a!=0*c8nN>(hBaM^QnFeWL04r(d@EJzBVKuXN|e%D$c zS2SbB0k$Ote1a?h{~!f0fyOLC$fr%sZ|@C3`Ep(vC(x*6YGfH}dggF~QiI}BVNp-M z`GYyBDkD7lHq0(O5om0o=i3N(WPHJ~1HrcH`?u>mF&CTnGcAaOIir)z>FNXdYKc_e z(h22NR;kfLbUxoc-W>hzk%>B%TVtFnrkB8R3Rx6X!58@BF8->Z4`Szn6*W^MMjSyi z5mphp<}HX0gvw<*F#q}&$G7LFuD6or42;6-B3&G$=uwsL1tLQ+wxGW_?#{A=-W1{P`0;B&?|Gv@jspc$4*{*ZqeC*%?don(meTK~ zsxXmLB}ZCY(>b@&>5)Lkuz+p*e0F|@!GQ)Qcx@=heUx3 z`Fh?{yOjh1S|EnQ*!;It5w3kN7r(SmOzFe@u_NNncnNDi0~eV2@C||v zoD+kc_(G*y>2&f7z4ee?e$@6+15+K)|9659pTYK)y4gj=DwVm4{NBy#Pv) zw)N75;M2WwOB0ex{s>Vg|-^_uX)%EF1`g3@Xa5>C@?S{Q7d z{HoT{(Q39iZ$)jj3Ae~H#!rQZ0x2G73ZAS0W5x8CiIvn1vHg5Aqb;dGAqHT$@s~pg z5qBF&Y0xv=p_#dvn05Iu@~QBej{2Gc4G;EQ@w9>A@tiu%w-R8DJj`b0O3DeHzn%!I zJe+WdTSnvKA)6t00b>ykZ049CIrIB;yZRC0IsKGH9jf!~I?mhUB-fIVI`8|EmY08Z z^DvZ_M_y^V9?+m?>Sa4!(ob#zad(!nXGnj({fB~|2oNOdk%oeb9{E@B31*D)C zdR0B%sCoI6eXuyQ^fw`pCpfLLHS7Y4%{1zDZDNq3vNr=DyLAq3>W}(OjiLWVwo*lN z3G>bQaezp3gSQfmk%1F_!xhs2r=}!WBE`Hu!Xcys6G!mw&kj`#~@q~b%~R{D3j zZxO~klWJ!!c$@4_P+D;CcdnOHJHTQuCD2P}>mb>7VW?2X*B z$$bGvCHli!@@$|48m^W=o6LuQM!krN$G$kUJXKEFo@kx1gMHTr<52=gL23GHAy+Yy zX&YD$=hv1Z-@6_uRAF$~eg9A(=hlW*sYxLG4Md~L`O;DOHTZPfGdbGEK-jKHSb@D! zqU~Mv*7x=Yl3KTd;g8+k!X`WuktWxrJUj{~`2r^h7d_nob<*0kVvmmkFI@oM!2oO- zQGYe@F-(@Z!EX(!wi$Yj3=p?5?yYFgVX?G2AjVx1!>dooyX}?vN;z#@K~hU|JOy?u z4e0p`3W!%y{XQAjZ1q`Ncb4`{@}RPIj}(%2vaYzi;> zRgU(ELwst^?39fyfo^^W?A@2?uEHcXWHo@ef;tD!tH?x0=+~Ym9gxk}abAanB^JGVFrdvWq(j1Kw1`Rl628I8iqdb0kv=fjTWlk2Ca z&h^oR-z^p<8FFAtslH@qZ&YhW)=%R_18E&b3?=*4#S@*H)IomNhbvxA`Cfdw)h2&! zH}(J-F%<=ielzTZvcmR4M4jZUfOSP8B<)#q-Vk9GFqOadaf1 zh~i~2v2a&yh`u+kBhld~nK^C^1X_L*_=T1@!WnVN4nl5ie98#Wv)StTJ=>PETv3H8 zr4EeD9X*Jet_5W!TPKC}mJ0Zd{GGAb#%9?6F`p;H`yfju`ZukP>%#5%TM{47LvQ*H zlB=~i1LcZ3E0zP?yG` z{O{Fusw43ZeJu)wZR@T40|!^Ztov7e_OxR@1__o)peU%ximdJQY_TC_{jAEa8+lF# zR?Xh|k46P)%=58hCzB4-in-xXHP_!UyBC}f zVibkzU#x7?_yM>^nRaLVWV8nQb@Nj&C9H|B-6pv~^~{33q-IT~|HuSZO+Ogw$D zYz)1gf$yLa?CM>e)_=+k2)+zOPyg$BhpCke3dob+#bOhS97Y+;m-voeYbxxl`w?6R?>cgAF5y}Yu3tImZv-;*>iJ3{p*uhN2 zZnL3!gJelwOGol!L2q@RMD}~9h(p|Lc+iQqJN$4CeNv}tgxq-`OSXFN;~qXN{D(4TH6SuORhQuV#r7gQwYL73XMHE5j0EN)N}B(oF_-)jv3F@^{hY=hO{l0VVLy-u(KjP=ioxe;SE=3Bp$|ws0^zn{sN>-UK2S`64PRtGM1_wYxO4N-2@eWDg;Uv=eD;O}f9LBt7 z^ui~&f0Dn@>TG#UvD5gB!J%z*|6^~nMT?G4QbY)o5B_b&@2%qbDt&14(2mUm{`{U) z*kxlCV34Xu6PZsEvzLO2=Y*f-F$5h zWsAgE!JjG;F9wUQ47L9;SQ1_>V0?ADBPn9C&Ci}zV)RpptaXy}Vk`54S z%9tu%;B$Z15uCdN`71o~2ujb$-|})R4b9yaCnj|S`IqJt?{}j^U+wZQoC;-6m^4}t z*se-=CG4&hrd=g2^R;~DB_J5J>FN8p`QGV@64&n=Zfwf5j&b$qhc3TTwMI=n$2hSE{WXK25GTXeFH&*rc4s-4DU zXjC#9`CE%TT-B*eZahLd-q$=Xi%hRRjWFOZx!KnMjZ31G04aU6lui(q?7MlSL^zY- zV>XI}81pPwyp@69pbauAFoS5^%0d)#?6K%vcTgaSW-g#=V4r@1{aD_#dd$NUYV zUP8{4mD?$bGW}+^&0|+!J^cw=SRlAy;s<;BWu}$XaDxHgaFxqtn`eL&_0gPB^S++% ziPO0S_B1WEN&t2`YFMDDr3P8Db_9M2Hxcr~5zB++cSduvM|;hO+u@$9KSXK)UEHS7`XuNrSz zdi-eK&7L``hK+urot01!dW5aN_g&eu%J;@2C_rM%Q+Q>YgAI`_QQ`B!?x15mWx7}| zDL2;U^XHHLgu)c`C-#}?vafY4voWhdtsyDh$NH+QLiL8Ebt6*usbyImZJ zK-)R<4{uAz`K?YdOR4jnK03#T5TmFxEIJ2V5jcJ|*~JdJw^wv{NG|E*3W&>FX5=Y{ z7Lg|S+5749=%DZ6*1A{^TjWvp-R3dI0wxmPa>MqQ_B6E+z(T7Or`={*t|;am<`WgXEW5re$pi`W~wM+#{x7+VmKV=OH>Hr5iHDBMYO- zxsXs&ix%KG;Ml`^6r)K&El%$+)lQ&@9_b3tO6CHiVgAlMSmgE_!XDky zrW1FHj;N#=ctWA?g&v=aIX!p`#UtYtMd8?yYYkx%+C$gr(eT-4{fUoZm2)igiG?}g zf>$17F>SylldvZ9R5ovRc()fgAIpZ>P{I|Tf2LMju=B(Ut(;x-srcj5fx5w~#cT86 z1Nf#0E7L2F1wG0dSr|Y`wnhG+|7?{^iXvPhonYV>OTn`Rg+PI$0EiPGvodo{qm;d4 zO_al`NE^aoHHkToHGww48+!?Pa(Bqg^V$WW2Vc`pY!m;Sq|jm)4(*4$;8yE5BfcV7 zG0$PBFbGb~Gp9=eh;cR8O-`iI+XSvau4VL#Z7U$eBLd3^t#mvp%5Ixm|vko3D`LWX=Q)f?yYP?)sPbaBo&#(szF5 zbu$4A_hgwJeJ|jRXq_21cCP3=tMnje zb8&0(O}D_I=hZQq)~MsNFDX)-J9cJ_nvUPLVd58B#_*;q=^La!Sr{Av7WhLB@kXA@ zp25KNJAc*h?b24z^P3S@Mri?rj4p#RM^W&`bgFUT4ViZRPzII8EXU>x>HWG~RtZHh zZ;S_6FRO1pce9l~mPlq)M`I@Dy;4fSD`^2;^oM2qjqnG&Tf0JUoON9|)|@ z3g84u+7GFY*ms$K!t@vlqvZKil6ZC8<{AG9;cD1NOJUcOn!*{cEy~Zh7UJeA{X3`g z85@&Hf__`n^4d2i+yvUmg~hX>Rql<#=ZW&JcFJ;fqMh>a5c5cm1Dq4Ko=`w={f-P& z^?HJZCNz$-b5brgo+e{EIq&364g=P+OicpF5W2Ru52lVcZ5xiuops3mhq%WsFOr$7 zo7jx|iBSv^-{JhgnbN6 zh+5tiB)dpxbC0k8+1Mt^$?2!3 z-63M=Qj}8)cD2DMe2EbMl?U^mMxQ?P4llWLsU5zpQ$mL5#39@o>fZI1?wnk>>Nq7( z$_NWige1I=S79Ux?Tp>Xw5cwKSdcr*Y78BDsk1I%&xo) zY>;Xf-}$A6zttg@c!&kLyg}PJ8I-c>dO}gtAi*#+Np=GKTt#5Q5MxL|O(dyPgQ``$ zDArGLt`_;N5wVA4hLy*Z0VNcpKkL!r=%qzmdE#D?=YrfMdx!cJpqCymJj?Ac9>?9= zFka#Nt1}~#$(ObioF67X`QCd$*u31mLr)K@aUMKV!qSm-qJ1-{gZ*@C4gvZh5VZ_V z2>iM5o75h(J`ESu5U=A=_IlVuoMd~5y6ko7=y4ue7bqmC?W)5du}csBtrCO>KZevN z<|cUWJPd`Nzo3g#X>u~p(Xur!rhW^4v7#Gm+llz>x|n$)q{0M+2V5^<_rNl z=y7(s=(Qo-F6s9n?J$CR+gG;vMO>L{@^T8glOT~)UA*Hn^9w_JED zEj4Rt<=KF)_k7t{M?TD#>94gx?$#Qga&*c|Fvv}Jie^js4~alI$rGlXJp^`fQU_GD zL9N|bb$V?Ckg`S2RBuwGqhpL_g_O-OtZKuoj!vQL3PqWHQ6}LHKR6I9dh+hxi|`I| z##WvsnFs$K?F(ldLxgC()*E1V|>{D7EY!=mGc#Tcw&fj># zZ`KL(!7FubcrK+j?}dKs74*U6+sD?^F&BiU-ZoQT-p>WP?i5HNN0df9Nw`+`V8hcc ze)E^a-(?DK8I=_Hd?D~lIZX@t+H$9SJVClWOyt#3yT(&pUi=kNIi*tcfXUO?aPP)! zC)do7r9o^Kzca%D4BK5B6!OLmE@lqsE>@f0)0qa(i zxXmXliFOmDJIG&Me?`U+l{9WJ23^cKzq7`QYIso}BWt(SWZnssw&Al+qM>Y0C=80nt>!PjnepX=56= ziFx!nMa|XwC;bdg!jFCO&%R3yQ}3UO*2lu&mJh9PoAG~j5B#wW#7ktl*g;3SK^9tr zVhLjcUF<}`DA)&%86)ZW*LIgO)e!yazWR4+z;_Ay^Gg&;j03<~*0j#WhcGCIJ~Hec zcZV-$O+Ea&BJb!oLip0`q5M$0PwV_!jyR?Gcz<;E*z)65ozRj|EN?h4=!I1o^yhG3 zz^+B_*LT$_v#*t5oX^CKjk=M$&+YBE6QGVepPWxD7R%(4IlT56bg(4hG5J8RrxV>; z`}7w`lvx9+SWS^~!^#)Mcmf+u#f3Fg(%oq~pm1*3E4PQq!{1+yj_}3=#t(Bv6|LVg zw{Wlo?NcdiAd;Rk%By>cYIz#E+&d5rueK_&s{@_MSI1u19d9KF?eQ3DK1i5~_drG2 zMqFr;4RVZ!g5p^-&RrbyR{dW;D(DU$Mm*MB+GQuR$AK(GO|U+EtrWV!L#J@*Su?JP zAI+5whFGINJ?Z%xd*g7aNtP-`&kxwbJD3&rGIUqd~iio%xGTME))&Ti?IYzSzr4r;2BFB8IR$blH%= zN@V1H-Z2IVS2FcsY(uW-2E!vDp*cJci5M3hI7_s>!IV1XlM(n)^|;7-*A!8h76F#q{v8? z^yvtkKG(c8F#9 zi+#t8gjm>!_ERaWU(qgY@!cd3KgUxym%ZpPsfi;P{dwH4zeH>aB*Na=zWuVJr5S0x z-JsZej8vD!%{U>#9w%YDXBr5iTO6|WPoJqmkJ;heQVlk1JZiDEQ8;#;8DQKU$Wq={0m&ucR@6g=F4 z_xHEMmbqefm#CAWcuIww;>f{E@PPPfxP18g$E_?ZZ{0E%drswcKF$qjY<1DlZLSS^ zra^96`6d|Axw^hI-T_EwWf(S})E>5^mOQBZ(`}xvs1m$<@FUdssWonZj(6^;p`xvit9(T|=nB23cI^y&5X9~B$z9f^jv7LQCv5l)- z(JBH-aq+u9lp)JtImDR#MjR|7P$F=xBlJlJ3n-||#L#3YNSqED?})a2)S2fQ_-k1e z{+oUusVQhcTWTQNXzg{TC-x_m4z0%4WdC);2eDAm*C|1uXhf9!m zQC`SBe`oEO{ziWT`kx%q{^U9xzKLMon4J`-a>aQR{+DT2-rh|*`Qw+K(L+1#%!RW# znS-^pmBugQP49sVn(u&rJRc`2MbSlM2#76pi2w0?AmAbX@q7fjId@FEp&=l;p_}Xk z0Ul5&984T+YOK6`Y&?9Ntl$e_fCu2S01H@I1b_|p7Xc8#aPr8reFkTX0Ggq=*umPO z03Z}M2RKs{Kn>0i1(X0jv^Gh80o4~b4VD*6wK#Me(F@^!sVD>+CdELXq1EfqlhhQ+FXyqu63MOs#b`pSM;b1 z_hVpLn318EGAInqUbOew{X)Oq3#_{*57Z$-ZT z{_a_A;|?;*hAsdJ@AN~80aV{In$nNM@}+Rvmk}e3K6lbAQoQLCrTJa%Jaw-(KRQ%b|uT`l0%Eo zrPi?j*lj|skjlcb$j+t3=|SO4rhVuBrKzv*jP_^L_1a>vz4}|6=+QS!*+%8X+O5ed zOtxDO|DT7E(>l<)P0XOT)9w|23=sKYZo#cyI=mMV{^#K@VkS{kArr zI|#t^mkn{N_EUdQ8#=36ySwK^$}w4pjGmICvTMy3PpS0m4Ff8j-!0Pg!YOB#(%xk? zztP%bNqa-rw*WDxy0xElHUA6~vT{?xSS!i`d$c^d(Xq88k2v>)#a3?mVL>)VQ$nm| zI?Aljk1QKR8=ru~7g=9qZhqmmj6Qtbg)TB4*k;$-pmaI8#>Nm#_QeYEo}qSM>ig(Z zqi#qa?Ht6nfU)?^!I?h}Ub>$ot_uDO!l=^LZ&AJ&UA$9ECz>$+U3W1=8UppCCF4)< z1aJ0*sKQsr8dC4_PV!54t->I_i4{s{Yoeo|m<0l{m5m#W0pF=Gmhe93YcKq0^bUKw zSDzN$vXPI}6;tS-LFB$OTGTftv7Y<-$f*cDvpSzNq9$sjJ7$zh#1@6E+3;UINT*^t zlsJ}szCWU)lBi(nF^REbC%ko){Wb<%Hd|i#)AQ}{Z}7~fiG~abw-#FjhoF^i{&Uf!(zxA}d6folDwvz84H2r8ncn13zfj8}h?{=}a z4$5y70A3B5%wC`;8~1BZjU zQPV#~pFjIRac3e_uCEEtm%S8jB9eJNy)F5OIaXE0Sodq?eYB(Og$Jo?DHYMQg?M2^ zJ(e)By7J)hE!3ow6T=Uoh+4tH<7C(eXdxc3Xy4aG--!KiX08FPC;4X7rSmSZ(^Ld9 zFK=%s;MWZ#LV3w^N|VNvg*mK-%rU2a5l*!easnfm2jde^eWnfz(P#Ny7q-8;bluuI zgyQj2(UX5CE5;5dukVFz=;qW0<5%bvQ>k+*Dc@0M2>)8&6)ay|vzo>-`GEo#)L#je z9ih|;F25;XcX3Kk2THRvb)ZiiA#yU-b7o^G_A@_L!@mGU#LN zGW1o9QAlleYITn!$82XXSEzDhDD`C7eemB@(AJc6kd&j0TPQ50*k*@kTFCo?o$ z_X(W@ro3s!k|aw?6CND|eatEuny=`FNycv>TyFzS_iDF5_8H1J0<5iWEeKY5mQh=S zyf(HHxrAo$=TeR|N(VPkY@1JgTBlCJzvSSF*XKRkYyZyDPkmt!8latp6tD&^5>*!F zR#wuMATsbL$d6*nxoDFw(Y$OGGp&Xak8-@1uHil(uorxXpxeAYkFn?_cqq$KTVlh->B z_;z&HEIrIm#gIt&ndbzPOwlGZ+2arYPc?JjVGDK5^&N6{=gHE zvNSa+<&Au zeSplr)3OEtt$#t$e*mN*Knvv`V;aM$uX_Li0YM11Fa$7Z{WJC7F-N42rT-o3@lX(^ zjt*|-4sOhz_I66LkWknV|1Tsd@ZTmI@qf?yK!)IBLjVEqKidD-dPDqU(En>V2m&DN z&E1UuKdQlkMgSnB8d%%tBTM*?mj8aLA3q8IH59ConfigurationDialogBase */ public ConfigurationDialogBase(XComponentContext xContext) { this.xContext = xContext; + + // Get the file picker + filePicker = new FilePicker(xContext); // Get the SimpleFileAccess service try { @@ -111,7 +123,6 @@ public abstract class ConfigurationDialogBase extends WeakBase implements XConta } // Create the config file name - XStringSubstitution xPathSub = null; try { Object psObject = xContext.getServiceManager().createInstanceWithContext( "com.sun.star.util.PathSubstitution", xContext); @@ -125,8 +136,6 @@ public abstract class ConfigurationDialogBase extends WeakBase implements XConta // Create the configuration config = ConverterFactory.createConverter(getMIMEType()).getConfig(); - // Get the style name provider - styleNameProvider = new StyleNameProvider(xContext); } // Implement XContainerWindowEventHandler @@ -134,7 +143,7 @@ public abstract class ConfigurationDialogBase extends WeakBase implements XConta throws com.sun.star.lang.WrappedTargetException { XDialog xDialog = (XDialog)UnoRuntime.queryInterface(XDialog.class, xWindow); String sTitle = xDialog.getTitle(); - + if (!pageHandlers.containsKey(sTitle)) { throw new com.sun.star.lang.WrappedTargetException("Unknown dialog "+sTitle); } @@ -245,6 +254,205 @@ public abstract class ConfigurationDialogBase extends WeakBase implements XConta protected abstract boolean handleEvent(DialogAccess dlg, String sMethodName); + + // Methods to set and get controls based on config + protected void checkBoxFromConfig(DialogAccess dlg, String sCheckBoxName, String sConfigName) { + dlg.setCheckBoxStateAsBoolean(sCheckBoxName, "true".equals(config.getOption(sConfigName))); + } + + protected void checkBoxToConfig(DialogAccess dlg, String sCheckBoxName, String sConfigName) { + config.setOption(sConfigName, Boolean.toString(dlg.getCheckBoxStateAsBoolean(sCheckBoxName))); + } + + protected void textFieldFromConfig(DialogAccess dlg, String sTextBoxName, String sConfigName) { + dlg.setTextFieldText(sTextBoxName, config.getOption(sConfigName)); + } + + protected void textFieldToConfig(DialogAccess dlg, String sTextBoxName, String sConfigName) { + config.setOption(sConfigName, dlg.getTextFieldText(sTextBoxName)); + } + + protected void listBoxFromConfig(DialogAccess dlg, String sListBoxName, String sConfigName, String[] sConfigValues, short nDefault) { + String sCurrentValue = config.getOption(sConfigName); + int nCount = sConfigValues.length; + for (short i=0; i=0 && deleteItem(sItems[nSelected])) { @@ -318,7 +526,7 @@ public abstract class ConfigurationDialogBase extends WeakBase implements XConta return null; } - private String appendItem(DialogAccess dlg, String sListName, Set suggestions) { + protected String appendItem(DialogAccess dlg, String sListName, Set suggestions) { String[] sItems = dlg.getListBoxStringItemList(sListName); String sNewItem = newItem(suggestions); if (sNewItem!=null) { @@ -339,46 +547,339 @@ public abstract class ConfigurationDialogBase extends WeakBase implements XConta return sNewItem; } + // Utilities + protected String[] sortStringSet(Set theSet) { + String[] theArray = new String[theSet.size()]; + int i=0; + for (String s : theSet) { + theArray[i++] = s; + } + sortStringArray(theArray); + return theArray; + } + protected void sortStringArray(String[] theArray) { // TODO: Get locale from OOo rather than the system Collator collator = Collator.getInstance(); Arrays.sort(theArray, collator); } - - // Methods to set and get controls based on config - protected void checkBoxFromConfig(DialogAccess dlg, String sCheckBoxName, String sConfigName) { - dlg.setCheckBoxStateAsBoolean(sCheckBoxName, "true".equals(config.getOption(sConfigName))); - } - - protected void checkBoxToConfig(DialogAccess dlg, String sCheckBoxName, String sConfigName) { - config.setOption(sConfigName, Boolean.toString(dlg.getCheckBoxStateAsBoolean(sCheckBoxName))); - } - - protected void textFieldFromConfig(DialogAccess dlg, String sTextBoxName, String sConfigName) { - dlg.setTextFieldText(sTextBoxName, config.getOption(sConfigName)); - } - - protected void textFieldToConfig(DialogAccess dlg, String sTextBoxName, String sConfigName) { - config.setOption(sConfigName, dlg.getTextFieldText(sTextBoxName)); - } - - protected void listBoxFromConfig(DialogAccess dlg, String sListBoxName, String sConfigName, String[] sConfigValues, short nDefault) { - String sCurrentValue = config.getOption(sConfigName); - int nCount = sConfigValues.length; - for (short i=0; i attr); + + protected abstract void setControls(DialogAccess dlg, Map attr); + + protected abstract void clearControls(DialogAccess dlg); + + protected abstract void prepareControls(DialogAccess dlg); + + // Constructor + protected StylesPageHandler(int nCount) { + // Get the style name provider + styleNameProvider = new StyleNameProvider(xContext); + + // Reset the options + styleMap = new ComplexOption[nCount]; + for (int i=0; i displayNames = styleNameProvider.getDisplayNames(sOOoFamilyNames[i]); + copyStyles(configMap, styleMap[i], displayNames); + } + + // Display paragraph maps first + nCurrentFamily = -1; + sCurrentStyleName = null; + dlg.setListBoxSelectedItem("StyleFamily", (short)1); + styleFamilyChange(dlg); + } + + protected void getControls(DialogAccess dlg) { + updateStyleMaps(dlg); + + // Save style maps to config (translating keys back to internal names) + int nCount = sFamilyNames.length; + for (int i=0; i internalNames = styleNameProvider.getInternalNames(sOOoFamilyNames[i]); + copyStyles(styleMap[i], configMap, internalNames); + } + } + + protected boolean handleEvent(DialogAccess dlg, String sMethod) { + if (sMethod.equals("StyleFamilyChange")) { + styleFamilyChange(dlg); + return true; + } + else if (sMethod.equals("StyleNameChange")) { + styleNameChange(dlg); + return true; + } + else if (sMethod.equals("NewStyleClick")) { + newStyleClick(dlg); + return true; + } + else if (sMethod.equals("DeleteStyleClick")) { + deleteStyleClick(dlg); + return true; + } + else if (sMethod.equals("LoadDefaultsClick")) { + loadDefaultsClick(dlg); + return true; + } + return false; + } + + // Internal methods + private void updateStyleMaps(DialogAccess dlg) { + // Save the current style map, if any + if (nCurrentFamily>-1 && sCurrentStyleName!=null) { + getControls(dlg,styleMap[nCurrentFamily].get(sCurrentStyleName)); + } + } + + private void styleFamilyChange(DialogAccess dlg) { + short nNewFamily = dlg.getListBoxSelectedItem("StyleFamily"); + if (nNewFamily>-1 && nNewFamily!=nCurrentFamily) { + // The user has changed the family; load and display the corresponding style names + updateStyleMaps(dlg); + nCurrentFamily = nNewFamily; + sCurrentStyleName = null; + + String[] sStyleNames = sortStringSet(styleMap[nNewFamily].keySet()); + dlg.setListBoxStringItemList("StyleName", sStyleNames); + if (sStyleNames.length>0) { + dlg.setListBoxSelectedItem("StyleName", (short)0); + } + else { + dlg.setListBoxSelectedItem("StyleName", (short)-1); + } + + updateDeleteButton(dlg); + prepareControls(dlg); + styleNameChange(dlg); + } + } + + private void styleNameChange(DialogAccess dlg) { + if (nCurrentFamily>-1) { + updateStyleMaps(dlg); + short nStyleNameItem = dlg.getListBoxSelectedItem("StyleName"); + if (nStyleNameItem>=0) { + sCurrentStyleName = dlg.getListBoxStringItemList("StyleName")[nStyleNameItem]; + setControls(dlg,styleMap[nCurrentFamily].get(sCurrentStyleName)); + } + else { + sCurrentStyleName = null; + clearControls(dlg); + } + } + } + + private void newStyleClick(DialogAccess dlg) { + if (nCurrentFamily>-1) { + updateStyleMaps(dlg); + String sNewName = appendItem(dlg, "StyleName",styleNameProvider.getInternalNames(sOOoFamilyNames[nCurrentFamily]).keySet()); + if (sNewName!=null) { + styleMap[nCurrentFamily].put(sNewName, new HashMap()); + clearControls(dlg); + } + updateDeleteButton(dlg); + } + } + + private void deleteStyleClick(DialogAccess dlg) { + if (nCurrentFamily>-1 && sCurrentStyleName!=null) { + String sStyleName = sCurrentStyleName; + if (deleteCurrentItem(dlg,"StyleName")) { + styleMap[nCurrentFamily].remove(sStyleName); + styleNameChange(dlg); + } + updateDeleteButton(dlg); + } + } + + private void loadDefaultsClick(DialogAccess dlg) { + updateStyleMaps(dlg); + + // Count styles that we will overwrite + Config clean = ConverterFactory.createConverter(getMIMEType()).getConfig(); + clean.readDefaultConfig(getDefaultConfigName()); + + int nCount = 0; + int nFamilyCount = sFamilyNames.length; + for (int i=0; i displayNames = styleNameProvider.getDisplayNames(sOOoFamilyNames[i]); + for (String sName : cleanMap.keySet()) { + String sDisplayName = (displayNames!=null && displayNames.containsKey(sName)) ? displayNames.get(sName) : ""; + if (styleMap[i].containsKey(sDisplayName)) { nCount++; } + } + } + + // Display confirmation dialog + boolean bConfirm = false; + XDialog xDialog=getDialog(getDialogLibraryName()+".LoadDefaults"); + if (xDialog!=null) { + DialogAccess ldlg = new DialogAccess(xDialog); + if (nCount>0) { + String sLabel = ldlg.getLabelText("OverwriteLabel"); + sLabel = sLabel.replaceAll("%s", Integer.toString(nCount)); + ldlg.setLabelText("OverwriteLabel", sLabel); + } + else { + ldlg.setLabelText("OverwriteLabel", ""); + } + bConfirm = xDialog.execute()==ExecutableDialogResults.OK; + xDialog.endExecute(); + } + + // Do the replacement + if (bConfirm) { + for (int i=0; i displayNames = styleNameProvider.getDisplayNames(sOOoFamilyNames[i]); + copyStyles(cleanMap, styleMap[i], displayNames); + } + } + + // Force update of the user interface + nCurrentFamily = -1; + sCurrentStyleName = null; + styleFamilyChange(dlg); + } + + private void updateDeleteButton(DialogAccess dlg) { + dlg.setControlEnabled("DeleteStyleButton", dlg.getListBoxStringItemList("StyleName").length>0); + } + + private void copyStyles(ComplexOption source, ComplexOption target, Map nameTranslation) { + for (String sName : source.keySet()) { + String sNewName = sName; + if (nameTranslation!=null && nameTranslation.containsKey(sName)) { + sNewName = nameTranslation.get(sName); + } + target.copy(sNewName, source.get(sName)); + } + } + } + + protected abstract class AttributePageHandler extends PageHandler { + // The subclass must define this + protected String[] sAttributeNames; + + // Our data + private ComplexOption attributeMap = new ComplexOption(); + private int nCurrentAttribute = -1; + + // Some methods to be implemented by subclass + protected abstract void getControls(DialogAccess dlg, Map attr); + + protected abstract void setControls(DialogAccess dlg, Map attr); + + protected abstract void prepareControls(DialogAccess dlg, boolean bEnable); + + // Implement abstract methods from our super + protected void setControls(DialogAccess dlg) { + // Load attribute maps from config + attributeMap.clear(); + attributeMap.copyAll(config.getComplexOption("text-attribute-map")); + + // Update the dialog + nCurrentAttribute = -1; + dlg.setListBoxSelectedItem("FormattingAttribute", (short)0); + formattingAttributeChange(dlg); + } + + protected void getControls(DialogAccess dlg) { + updateAttributeMaps(dlg); + + // Save attribute maps to config + ComplexOption configMap = config.getComplexOption("text-attribute-map"); + configMap.clear(); + for (String s: attributeMap.keySet()) { + Map attr = attributeMap.get(s); + if (!attr.containsKey("deleted") || attr.get("deleted").equals("false")) { + configMap.copy(s, attr); + } + } + } + + protected boolean handleEvent(DialogAccess dlg, String sMethod) { + if (sMethod.equals("FormattingAttributeChange")) { + formattingAttributeChange(dlg); + return true; + } + else if (sMethod.equals("CustomAttributeChange")) { + customAttributeChange(dlg); + return true; + } + return false; + } + + // Internal methods + private void updateAttributeMaps(DialogAccess dlg) { + // Save the current attribute map, if any + if (nCurrentAttribute>-1) { + String sName = sAttributeNames[nCurrentAttribute]; + if (!attributeMap.containsKey(sName)) { + attributeMap.put(sName, new HashMap()); + } + Map attr = attributeMap.get(sName); + attr.put("deleted", Boolean.toString(!dlg.getCheckBoxStateAsBoolean("CustomAttribute"))); + getControls(dlg,attr); + attributeMap.put(sName, attr); + } + } + + private void formattingAttributeChange(DialogAccess dlg) { + updateAttributeMaps(dlg); + short nNewAttribute = dlg.getListBoxSelectedItem("FormattingAttribute"); + if (nNewAttribute>-1 && nNewAttribute!=nCurrentAttribute) { + nCurrentAttribute = nNewAttribute; + String sName = sAttributeNames[nCurrentAttribute]; + if (!attributeMap.containsKey(sName)) { + attributeMap.put(sName, new HashMap()); + attributeMap.get(sName).put("deleted", "true"); + } + Map attr = attributeMap.get(sName); + dlg.setCheckBoxStateAsBoolean("CustomAttribute", !attr.containsKey("deleted") || attr.get("deleted").equals("false")); + customAttributeChange(dlg); + setControls(dlg,attr); + } + } + + private void customAttributeChange(DialogAccess dlg) { + prepareControls(dlg,dlg.getCheckBoxStateAsBoolean("CustomAttribute")); + } + } + } diff --git a/source/java/org/openoffice/da/comp/w2lcommon/helper/DialogAccess.java b/source/java/org/openoffice/da/comp/w2lcommon/helper/DialogAccess.java index 2a0c678..0cf0019 100644 --- a/source/java/org/openoffice/da/comp/w2lcommon/helper/DialogAccess.java +++ b/source/java/org/openoffice/da/comp/w2lcommon/helper/DialogAccess.java @@ -169,7 +169,6 @@ public class DialogAccess { } public short getListBoxLineCount(String sControlName) { - // Returns the first selected element in case of a multiselection XPropertySet xPropertySet = getControlProperties(sControlName); try { return ((Short) xPropertySet.getPropertyValue("LineCount")).shortValue(); diff --git a/source/java/org/openoffice/da/comp/w2lcommon/helper/FilePicker.java b/source/java/org/openoffice/da/comp/w2lcommon/helper/FilePicker.java new file mode 100644 index 0000000..febe45b --- /dev/null +++ b/source/java/org/openoffice/da/comp/w2lcommon/helper/FilePicker.java @@ -0,0 +1,83 @@ +/************************************************************************ + * + * FilePicker.java + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * Copyright: 2002-2010 by Henrik Just + * + * All Rights Reserved. + * + * Version 1.2 (2010-04-12) + * + */ + +package org.openoffice.da.comp.w2lcommon.helper; + +import com.sun.star.lang.XComponent; +import com.sun.star.ui.dialogs.ExecutableDialogResults; +import com.sun.star.ui.dialogs.XExecutableDialog; +import com.sun.star.ui.dialogs.XFilePicker; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + +public class FilePicker { + + private XComponentContext xContext; + + /** Convenience wrapper class for the UNO file picker service + * + * @param xContext the UNO component context from which the file picker can be created + */ + public FilePicker(XComponentContext xContext) { + this.xContext = xContext; + } + + /** Get a user selected path with a file picker + * + * @return the path or null if the dialog is canceled + */ + public String getPath() { + // Create FilePicker + Object filePicker = null; + try { + filePicker = xContext.getServiceManager().createInstanceWithContext("com.sun.star.ui.dialogs.FilePicker", xContext); + } + catch (com.sun.star.uno.Exception e) { + return null; + } + + // Display the FilePicker + XFilePicker xFilePicker = (XFilePicker) UnoRuntime.queryInterface(XFilePicker.class, filePicker); + XExecutableDialog xExecutable = (XExecutableDialog) UnoRuntime.queryInterface(XExecutableDialog.class, xFilePicker); + + // Get the path + String sPath = null; + + if (xExecutable.execute() == ExecutableDialogResults.OK) { + String[] sPathList = xFilePicker.getFiles(); + if (sPathList.length > 0) { + sPath = sPathList[0]; + } + } + + // Dispose the file picker + XComponent xComponent = (XComponent) UnoRuntime.queryInterface(XComponent.class, xFilePicker); + xComponent.dispose(); + + return sPath; + } + +} diff --git a/source/java/org/openoffice/da/comp/w2lcommon/helper/MacroExpander.java b/source/java/org/openoffice/da/comp/w2lcommon/helper/MacroExpander.java index 184df94..88db93b 100644 --- a/source/java/org/openoffice/da/comp/w2lcommon/helper/MacroExpander.java +++ b/source/java/org/openoffice/da/comp/w2lcommon/helper/MacroExpander.java @@ -1,6 +1,6 @@ /************************************************************************ * - * OptionsDialogBase.java + * MacroExpander.java * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public diff --git a/source/java/org/openoffice/da/comp/writer2xhtml/ConfigurationDialog.java b/source/java/org/openoffice/da/comp/writer2xhtml/ConfigurationDialog.java index bcb7d36..a8bed12 100644 --- a/source/java/org/openoffice/da/comp/writer2xhtml/ConfigurationDialog.java +++ b/source/java/org/openoffice/da/comp/writer2xhtml/ConfigurationDialog.java @@ -20,11 +20,14 @@ * * All Rights Reserved. * -* Version 1.2 (2010-03-26) +* Version 1.2 (2010-04-09) * */ + package org.openoffice.da.comp.writer2xhtml; +import java.util.Map; + import org.openoffice.da.comp.w2lcommon.filter.ConfigurationDialogBase; import org.openoffice.da.comp.w2lcommon.helper.DialogAccess; @@ -68,22 +71,28 @@ public class ConfigurationDialog extends ConfigurationDialogBase implements XSer super(xContext); pageHandlers.put("General", new GeneralHandler()); - //pageHandlers.put("Template", new TemplateHandler()); + pageHandlers.put("Template", new TemplateHandler()); pageHandlers.put("Stylesheets", new StylesheetsHandler()); pageHandlers.put("Formatting", new FormattingHandler()); - //pageHandlers.put("Styles1", new StylesPartIHandler()); - //pageHandlers.put("Styles2", new StylesPartIIHandler()); + pageHandlers.put("Styles1", new Styles1Handler()); + pageHandlers.put("Styles2", new Styles2Handler()); pageHandlers.put("Formatting", new FormattingHandler()); pageHandlers.put("Content", new ContentHandler()); } // Implement remaining method from XContainerWindowEventHandler public String[] getSupportedMethodNames() { - String[] sNames = { "EncodingChange" }; + String[] sNames = { "EncodingChange", // General + "CustomTemplateChange", "LoadTemplateClick", // Template + "UseCustomStylesheetChange", "IncludeCustomStylesheetClick", "LoadStylesheetClick", // Stylesheet + "StyleFamilyChange", "StyleNameChange", "NewStyleClick", "DeleteStyleClick", "LoadDefaultsClick" // Styles1 + }; return sNames; } // the page handlers + private final String[] sCharElements = { "span", "abbr", "acronym", "b", "big", "cite", "code", "del", "dfn", "em", "i", + "ins", "kbd", "samp", "small", "strong", "sub", "sup", "tt", "var", "q" }; private class GeneralHandler extends PageHandler { private final String[] sEncodingValues = { "UTF-8", "UTF-16", "ISO-8859-1", "US-ASCII" }; @@ -134,20 +143,74 @@ public class ConfigurationDialog extends ConfigurationDialogBase implements XSer } } + + private class TemplateHandler extends CustomFileHandler { + + protected String getSuffix() { + return "Template"; + } + + protected String getFileName() { + return "writer2xhtml-template.xhtml"; + } + + protected void useCustomInner(DialogAccess dlg, boolean bEnable) { + dlg.setControlEnabled("ContentIdLabel", bEnable); + dlg.setControlEnabled("ContentId", bEnable); + dlg.setControlEnabled("HeaderIdLabel", bEnable); + dlg.setControlEnabled("HeaderId", bEnable); + dlg.setControlEnabled("FooterIdLabel", bEnable); + dlg.setControlEnabled("FooterId", bEnable); + dlg.setControlEnabled("PanelIdLabel", bEnable); + dlg.setControlEnabled("PanelId", bEnable); + } + + @Override protected void setControls(DialogAccess dlg) { + super.setControls(dlg); + String[] sCustomIds = config.getOption("template_ids").split(","); + if (sCustomIds.length>0) { dlg.setComboBoxText("ContentId", sCustomIds[0]); } + if (sCustomIds.length>1) { dlg.setComboBoxText("HeaderId", sCustomIds[1]); } + if (sCustomIds.length>2) { dlg.setComboBoxText("FooterId", sCustomIds[2]); } + if (sCustomIds.length>3) { dlg.setComboBoxText("PanelId", sCustomIds[3]); } + } + + @Override protected void getControls(DialogAccess dlg) { + super.getControls(dlg); + config.setOption("template_ids", + dlg.getComboBoxText("ContentId").trim()+","+ + dlg.getComboBoxText("HeaderId").trim()+","+ + dlg.getComboBoxText("FooterId").trim()+","+ + dlg.getComboBoxText("PanelId").trim()); + } + + } + + private class StylesheetsHandler extends CustomFileHandler { + + protected String getSuffix() { + return "Stylesheet"; + } + + protected String getFileName() { + return "writer2xhtml-styles.css"; + } + + protected void useCustomInner(DialogAccess dlg, boolean bEnable) { + } - private class StylesheetsHandler extends PageHandler { @Override protected void setControls(DialogAccess dlg) { - dlg.setCheckBoxStateAsBoolean("UseCustomStylesheet", config.getOption("custom_stylesheet").length()>0); - textFieldFromConfig(dlg, "CustomStylesheet", "custom_stylesheet"); + super.setControls(dlg); + dlg.setCheckBoxStateAsBoolean("LinkCustomStylesheet", config.getOption("custom_stylesheet").length()>0); + textFieldFromConfig(dlg, "CustomStylesheetURL", "custom_stylesheet"); - useCustomStylesheetChange(dlg); - includeCustomStylesheetChange(dlg); + linkCustomStylesheetChange(dlg); } @Override protected void getControls(DialogAccess dlg) { - if (dlg.getCheckBoxStateAsBoolean("UseCustomStylesheet")) { - textFieldToConfig(dlg, "CustomStylesheet", "custom_stylesheet"); + super.getControls(dlg); + if (dlg.getCheckBoxStateAsBoolean("LinkCustomStylesheet")) { + textFieldToConfig(dlg, "CustomStylesheetURL", "custom_stylesheet"); } else { config.setOption("custom_stylesheet", ""); @@ -155,35 +218,133 @@ public class ConfigurationDialog extends ConfigurationDialogBase implements XSer } @Override protected boolean handleEvent(DialogAccess dlg, String sMethod) { - if (sMethod.equals("UseCustomStylesheetChange")) { - useCustomStylesheetChange(dlg); + if (super.handleEvent(dlg, sMethod)) { return true; } - else if (sMethod.equals("IncludeCustomStylesheetChange")) { - includeCustomStylesheetChange(dlg); - return true; - } - else if (sMethod.equals("LoadButtonClick")) { - loadButtonClick(dlg); + if (sMethod.equals("LinkCustomStylesheetChange")) { + linkCustomStylesheetChange(dlg); return true; } return false; } - private void useCustomStylesheetChange(DialogAccess dlg) { - boolean bUseCustomStylesheet = dlg.getCheckBoxStateAsBoolean("UseCustomStylesheet"); - dlg.setControlEnabled("CustomStylesheetLabel", bUseCustomStylesheet); - dlg.setControlEnabled("CustomStylesheet", bUseCustomStylesheet); + private void linkCustomStylesheetChange(DialogAccess dlg) { + boolean bLinkCustomStylesheet = dlg.getCheckBoxStateAsBoolean("LinkCustomStylesheet"); + dlg.setControlEnabled("CustomStylesheetURLLabel", bLinkCustomStylesheet); + dlg.setControlEnabled("CustomStylesheetURL", bLinkCustomStylesheet); } - private void includeCustomStylesheetChange(DialogAccess dlg) { - dlg.setControlEnabled("IncludedCustomStylesheet", dlg.getCheckBoxStateAsBoolean("IncludeCustomStylesheet")); + } + + private class Styles1Handler extends StylesPageHandler { + private final String[] sXhtmlFamilyNames = { "text", "paragraph", "list", "frame" }; + private final String[] sXhtmlOOoFamilyNames = { "CharacterStyles", "ParagraphStyles", "NumberingStyles", "FrameStyles" }; + + private final String[] sParElements = { "p", "h1", "h2", "h3", "h4", "h5", "h6", "address", "dd", "dt", "pre" }; + private final String[] sParBlockElements = { "div", "blockquote", "dl" }; + private final String[] sEmpty = { }; + + private String[][] sElements = new String[4][]; + private String[][] sBlockElements = new String[4][]; + + protected Styles1Handler() { + super(4); + sFamilyNames = sXhtmlFamilyNames; + sOOoFamilyNames = sXhtmlOOoFamilyNames; + + sElements[0] = sCharElements; + sElements[1] = sParElements; + sElements[2] = sEmpty; + sElements[3] = sEmpty; + + sBlockElements[0] = sEmpty; + sBlockElements[1] = sParBlockElements; + sBlockElements[2] = sEmpty; + sBlockElements[3] = sEmpty; } - private void loadButtonClick(DialogAccess dlg) { - // TODO + protected String getDefaultConfigName() { + return "cleanxhtml.xml"; + } + + protected void setControls(DialogAccess dlg, Map attr) { + if (!attr.containsKey("element")) { attr.put("element", ""); } + if (!attr.containsKey("css")) { attr.put("css", ""); } + dlg.setComboBoxText("Element", attr.get("element")); + dlg.setTextFieldText("Css", none2empty(attr.get("css"))); + if (nCurrentFamily==1) { + if (!attr.containsKey("block-element")) { attr.put("block-element", ""); } + if (!attr.containsKey("block-css")) { attr.put("block-css", ""); } + dlg.setComboBoxText("BlockElement", attr.get("block-element")); + dlg.setTextFieldText("BlockCss", none2empty(attr.get("block-css"))); + } + else { + dlg.setComboBoxText("BlockElement", ""); + dlg.setTextFieldText("BlockCss", ""); + } + } + + protected void getControls(DialogAccess dlg, Map attr) { + attr.put("element", dlg.getComboBoxText("Element")); + attr.put("css", empty2none(dlg.getTextFieldText("Css"))); + if (nCurrentFamily==1) { + attr.put("block-element", dlg.getComboBoxText("BlockElement")); + attr.put("block-css", empty2none(dlg.getTextFieldText("BlockCss"))); + } + } + + protected void clearControls(DialogAccess dlg) { + dlg.setComboBoxText("Element", ""); + dlg.setTextFieldText("Css", ""); + dlg.setComboBoxText("BlockElement", ""); + dlg.setTextFieldText("BlockCss", ""); + } + + protected void prepareControls(DialogAccess dlg) { + dlg.setListBoxStringItemList("Element", sElements[nCurrentFamily]); + dlg.setListBoxStringItemList("BlockElement", sBlockElements[nCurrentFamily]); + dlg.setControlEnabled("Element", nCurrentFamily<=1); + dlg.setControlEnabled("BlockElement", nCurrentFamily==1); + dlg.setControlEnabled("BlockCss", nCurrentFamily==1); + } + } + + private class Styles2Handler extends AttributePageHandler { + private String[] sXhtmlAttributeNames = { "bold", "italics", "fixed", "superscript", "subscript", "underline", "overstrike" }; + + public Styles2Handler() { + sAttributeNames = sXhtmlAttributeNames; } + @Override public void setControls(DialogAccess dlg) { + super.setControls(dlg); + textFieldFromConfig(dlg,"TabstopStyle","tabstop_style"); + } + + @Override public void getControls(DialogAccess dlg) { + super.getControls(dlg); + textFieldToConfig(dlg,"TabstopStyle","tabstop_style"); + } + + protected void setControls(DialogAccess dlg, Map attr) { + if (!attr.containsKey("element")) { attr.put("element", ""); } + if (!attr.containsKey("css")) { attr.put("css", ""); } + dlg.setListBoxStringItemList("Element", sCharElements); + dlg.setComboBoxText("Element", attr.get("element")); + dlg.setTextFieldText("Css", none2empty(attr.get("css"))); + } + + protected void getControls(DialogAccess dlg, Map attr) { + attr.put("element", dlg.getComboBoxText("Element")); + attr.put("css", empty2none(dlg.getTextFieldText("Css"))); + } + + protected void prepareControls(DialogAccess dlg, boolean bEnable) { + dlg.setControlEnabled("ElementLabel", bEnable); + dlg.setControlEnabled("Element", bEnable); + dlg.setControlEnabled("CssLabel", bEnable); + dlg.setControlEnabled("Css", bEnable); + } } private class FormattingHandler extends PageHandler { @@ -203,8 +364,9 @@ public class ConfigurationDialog extends ConfigurationDialogBase implements XSer checkBoxFromConfig(dlg, "IgnoreTableDimensions", "ignore_table_dimensions"); checkBoxFromConfig(dlg, "UseListHack", "use_list_hack"); - checkBoxFromConfig(dlg, "ConvertToPx", "convert_to_px"); - checkBoxFromConfig(dlg, "SeparateStylesheet", "separate_stylesheet"); + //TODO: These have been postponed + //checkBoxFromConfig(dlg, "ConvertToPx", "convert_to_px"); + //checkBoxFromConfig(dlg, "SeparateStylesheet", "separate_stylesheet"); } @Override protected void getControls(DialogAccess dlg) { @@ -216,8 +378,9 @@ public class ConfigurationDialog extends ConfigurationDialogBase implements XSer checkBoxToConfig(dlg, "IgnoreTableDimensions", "ignore_table_dimensions"); checkBoxToConfig(dlg, "UseListHack", "use_list_hack"); - checkBoxToConfig(dlg, "ConvertToPx", "convert_to_px"); - checkBoxToConfig(dlg, "SeparateStylesheet", "separate_stylesheet"); + //TODO: These have been postponed + //checkBoxToConfig(dlg, "ConvertToPx", "convert_to_px"); + //checkBoxToConfig(dlg, "SeparateStylesheet", "separate_stylesheet"); } @Override protected boolean handleEvent(DialogAccess dlg, String sMethod) { @@ -242,6 +405,15 @@ public class ConfigurationDialog extends ConfigurationDialogBase implements XSer } } + + private String none2empty(String s) { + return s.equals("(none)") ? "" : s; + } + + private String empty2none(String s) { + String t = s.trim(); + return t.length()==0 ? "(none)" : t; + } } diff --git a/source/java/org/openoffice/da/comp/writer2xhtml/XhtmlOptionsDialog.java b/source/java/org/openoffice/da/comp/writer2xhtml/XhtmlOptionsDialog.java index ea982d0..8adf009 100644 --- a/source/java/org/openoffice/da/comp/writer2xhtml/XhtmlOptionsDialog.java +++ b/source/java/org/openoffice/da/comp/writer2xhtml/XhtmlOptionsDialog.java @@ -16,11 +16,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * - * Copyright: 2002-2008 by Henrik Just + * Copyright: 2002-2010 by Henrik Just * * All Rights Reserved. * - * Version 1.0 (2008-11-16) + * Version 1.2 (2010-04-11) * */ @@ -113,6 +113,8 @@ public class XhtmlOptionsDialog extends OptionsDialogBase { "http://www.w3.org/StyleSheets/Core/"+sCoreStyles[nConfig-1]); break; case 9: helper.put("ConfigURL","$(user)/writer2xhtml.xml"); + helper.put("TemplateURL", "$(user)/writer2xhtml-template.xhtml"); + //helper.put("StyleSheetURL", "$(user)/writer2xhtml-style.css"); helper.put("AutoCreate","true"); } diff --git a/source/java/org/openoffice/da/comp/writer4latex/ConfigurationDialog.java b/source/java/org/openoffice/da/comp/writer4latex/ConfigurationDialog.java index 1174e83..b68f528 100644 --- a/source/java/org/openoffice/da/comp/writer4latex/ConfigurationDialog.java +++ b/source/java/org/openoffice/da/comp/writer4latex/ConfigurationDialog.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2010-03-05) + * Version 1.2 (2010-04-12) * */ @@ -29,6 +29,7 @@ package org.openoffice.da.comp.writer4latex; import java.io.File; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.util.Vector; import com.sun.star.awt.XControl; @@ -52,6 +53,7 @@ import com.sun.star.uno.XComponentContext; import com.sun.star.lib.uno.helper.WeakBase; import org.openoffice.da.comp.w2lcommon.helper.DialogAccess; +import org.openoffice.da.comp.w2lcommon.helper.FilePicker; /** This class provides a uno component which implements the configuration * of Writer4LaTeX @@ -61,6 +63,7 @@ public final class ConfigurationDialog implements XServiceInfo, XContainerWindowEventHandler { private XComponentContext xContext; + private FilePicker filePicker; private ExternalApps externalApps; @@ -76,6 +79,7 @@ public final class ConfigurationDialog public ConfigurationDialog(XComponentContext xContext) { this.xContext = xContext; externalApps = new ExternalApps(xContext); + filePicker = new FilePicker(xContext); } // Implement XContainerWindowEventHandler @@ -161,42 +165,18 @@ public final class ConfigurationDialog } private boolean browseForExecutable(XWindow xWindow) { - XComponent xComponent = null; - try { - // Create FilePicker - Object filePicker = xContext.getServiceManager() - .createInstanceWithContext("com.sun.star.ui.dialogs.FilePicker", xContext); - XFilePicker xFilePicker = (XFilePicker) - UnoRuntime.queryInterface(XFilePicker.class, filePicker); - xComponent = (XComponent) - UnoRuntime.queryInterface(XComponent.class, xFilePicker); - - // Display the FilePicker - XExecutableDialog xExecutable = (XExecutableDialog) - UnoRuntime.queryInterface(XExecutableDialog.class, xFilePicker); - - // Get the path - if (xExecutable.execute() == ExecutableDialogResults.OK) { - String[] sPathList = xFilePicker.getFiles(); - if (sPathList.length > 0) { - setComboBoxText(xWindow, "Executable", new File(new URI(sPathList[0])).getCanonicalPath()); - updateApplication(xWindow); - } - } - } - catch (com.sun.star.uno.Exception e) { - } - catch (java.net.URISyntaxException e) { - } - catch (java.io.IOException e) { - } - finally{ - // Always dispose the FilePicker component - if (xComponent!=null) { - xComponent.dispose(); - } - } - return true; + String sPath = filePicker.getPath(); + if (sPath!=null) { + try { + setComboBoxText(xWindow, "Executable", new File(new URI(sPath)).getCanonicalPath()); + } + catch (IOException e) { + } + catch (URISyntaxException e) { + } + updateApplication(xWindow); + } + return true; } private boolean updateApplication(XWindow xWindow) { diff --git a/source/java/writer2latex/api/ConverterFactory.java b/source/java/writer2latex/api/ConverterFactory.java index e50e843..b93a40d 100644 --- a/source/java/writer2latex/api/ConverterFactory.java +++ b/source/java/writer2latex/api/ConverterFactory.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2010-03-31) + * Version 1.2 (2010-04-12) * */ @@ -33,7 +33,7 @@ public class ConverterFactory { // Version information private static final String VERSION = "1.1.2"; - private static final String DATE = "2010-03-31"; + private static final String DATE = "2010-04-12"; /** Return the Writer2LaTeX version in the form * (major version).(minor version).(patch level)
diff --git a/source/java/writer2latex/xhtml/XhtmlConfig.java b/source/java/writer2latex/xhtml/XhtmlConfig.java index d453478..12ff410 100644 --- a/source/java/writer2latex/xhtml/XhtmlConfig.java +++ b/source/java/writer2latex/xhtml/XhtmlConfig.java @@ -20,17 +20,20 @@ * * All Rights Reserved. * - * Version 1.2 (2010-03-04) + * Version 1.2 (2010-04-09) * */ package writer2latex.xhtml; -import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; import org.w3c.dom.Document; import org.w3c.dom.Element; +import writer2latex.api.ComplexOption; import writer2latex.base.BooleanOption; import writer2latex.base.IntegerOption; import writer2latex.base.Option; @@ -106,11 +109,11 @@ public class XhtmlConfig extends writer2latex.base.ConfigBase { private static final int DIRECTORY_ICON = 40; private static final int DOCUMENT_ICON = 41; - protected XhtmlStyleMap xpar = new XhtmlStyleMap(); - protected XhtmlStyleMap xtext = new XhtmlStyleMap(); - protected XhtmlStyleMap xframe = new XhtmlStyleMap(); - protected XhtmlStyleMap xlist = new XhtmlStyleMap(); - protected XhtmlStyleMap xattr = new XhtmlStyleMap(); + protected ComplexOption xpar = addComplexOption("paragraph-map"); + protected ComplexOption xtext = addComplexOption("text-map"); + protected ComplexOption xframe = addComplexOption("frame-map"); + protected ComplexOption xlist = addComplexOption("list-map"); + protected ComplexOption xattr = addComplexOption("text-attribute-map"); public XhtmlConfig() { super(); @@ -184,26 +187,31 @@ public class XhtmlConfig extends writer2latex.base.ConfigBase { if (sFamily.length()==0) { // try old name sFamily = elm.getAttribute("class"); } - String sBlockElement = elm.getAttribute("block-element"); - String sBlockCss = elm.getAttribute("block-css"); - if (sBlockCss.length()==0) { sBlockCss="(none)"; } String sElement = elm.getAttribute("element"); String sCss = elm.getAttribute("css"); if (sCss.length()==0) { sCss="(none)"; } + Map attr = new HashMap(); + attr.put("element", sElement); + attr.put("css", sCss); if ("paragraph".equals(sFamily)) { - xpar.put(sName,sBlockElement,sBlockCss,sElement,sCss); + String sBlockElement = elm.getAttribute("block-element"); + String sBlockCss = elm.getAttribute("block-css"); + if (sBlockCss.length()==0) { sBlockCss="(none)"; } + attr.put("block-element", sBlockElement); + attr.put("block-css", sBlockCss); + xpar.put(sName,attr); } else if ("text".equals(sFamily)) { - xtext.put(sName,sBlockElement,sBlockCss,sElement,sCss); + xtext.put(sName,attr); } else if ("frame".equals(sFamily)) { - xframe.put(sName,sBlockElement,sBlockCss,sElement,sCss); + xframe.put(sName,attr); } else if ("list".equals(sFamily)) { - xlist.put(sName,sBlockElement,sBlockCss,sElement,sCss); + xlist.put(sName,attr); } else if ("attribute".equals(sFamily)) { - xattr.put(sName,sBlockElement,sBlockCss,sElement,sCss); + xattr.put(sName,attr); } } } @@ -213,22 +221,21 @@ public class XhtmlConfig extends writer2latex.base.ConfigBase { writeXStyleMap(dom,xtext,"text"); writeXStyleMap(dom,xlist,"list"); writeXStyleMap(dom,xframe,"frame"); - writeXStyleMap(dom,xframe,"attribute"); + writeXStyleMap(dom,xattr,"attribute"); } - private void writeXStyleMap(Document dom, XhtmlStyleMap sm, String sFamily) { - Enumeration smEnum = sm.getNames(); - while (smEnum.hasMoreElements()) { - String sName = smEnum.nextElement(); + private void writeXStyleMap(Document dom, ComplexOption option, String sFamily) { + Iterator iter = option.keySet().iterator(); + while (iter.hasNext()) { + String sName = iter.next(); Element smNode = dom.createElement("xhtml-style-map"); smNode.setAttribute("name",sName); smNode.setAttribute("family",sFamily); - smNode.setAttribute("element",sm.getElement(sName)); - smNode.setAttribute("css",sm.getCss(sName)); - String sBlockElement = sm.getBlockElement(sName); - if (sBlockElement!=null) { smNode.setAttribute("block-element",sm.getCss(sBlockElement)); } - String sBlockCss = sm.getBlockCss(sName); - if (sBlockCss!=null) { smNode.setAttribute("block-css",sm.getCss(sBlockCss)); } + Map attr = option.get(sName); + smNode.setAttribute("element",attr.get("element")); + smNode.setAttribute("css",attr.get("css")); + if (attr.containsKey("block-element")) smNode.setAttribute("block-element",attr.get("block-element")); + if (attr.containsKey("block-css")) smNode.setAttribute("block-css",attr.get("block-css")); dom.getDocumentElement().appendChild(smNode); } } @@ -277,11 +284,24 @@ public class XhtmlConfig extends writer2latex.base.ConfigBase { public String getXhtmlDirectoryIcon() { return options[DIRECTORY_ICON].getString(); } public String getXhtmlDocumentIcon() { return options[DOCUMENT_ICON].getString(); } - public XhtmlStyleMap getXParStyleMap() { return xpar; } - public XhtmlStyleMap getXTextStyleMap() { return xtext; } - public XhtmlStyleMap getXFrameStyleMap() { return xframe; } - public XhtmlStyleMap getXListStyleMap() { return xlist; } - public XhtmlStyleMap getXAttrStyleMap() { return xattr; } + public XhtmlStyleMap getXParStyleMap() { return getStyleMap(xpar); } + public XhtmlStyleMap getXTextStyleMap() { return getStyleMap(xtext); } + public XhtmlStyleMap getXFrameStyleMap() { return getStyleMap(xframe); } + public XhtmlStyleMap getXListStyleMap() { return getStyleMap(xlist); } + public XhtmlStyleMap getXAttrStyleMap() { return getStyleMap(xattr); } + private XhtmlStyleMap getStyleMap(ComplexOption co) { + XhtmlStyleMap map = new XhtmlStyleMap(); + for (String sName : co.keySet()) { + Map attr = co.get(sName); + String sElement = attr.containsKey("element") ? attr.get("element") : ""; + String sCss = attr.containsKey("css") ? attr.get("css") : ""; + String sBlockElement = attr.containsKey("block-element") ? attr.get("block-element") : ""; + String sBlockCss = attr.containsKey("block-css") ? attr.get("block-css") : ""; + map.put(sName, sBlockElement, sBlockCss, sElement, sCss); + } + return map; + + } } diff --git a/source/oxt/writer2xhtml/OptionPages.xcu b/source/oxt/writer2xhtml/OptionPages.xcu index 8471a7b..b2623e7 100644 --- a/source/oxt/writer2xhtml/OptionPages.xcu +++ b/source/oxt/writer2xhtml/OptionPages.xcu @@ -77,7 +77,7 @@ %origin%/W2XDialogs2/Template.xdl - + org.openoffice.da.writer2xhtml.ConfigurationDialog @@ -115,13 +115,13 @@ 3 - Styles part 1 + Master styles %origin%/W2XDialogs2/Styles1.xdl - + org.openoffice.da.writer2xhtml.ConfigurationDialog @@ -137,13 +137,13 @@ 4 - Styles part 2 + Other styles %origin%/W2XDialogs2/Styles2.xdl - + org.openoffice.da.writer2xhtml.ConfigurationDialog diff --git a/source/oxt/writer2xhtml/W2XDialogs2/ConfigurationRoot.xdl b/source/oxt/writer2xhtml/W2XDialogs2/ConfigurationRoot.xdl index ce21cc8..fa4cf1d 100644 --- a/source/oxt/writer2xhtml/W2XDialogs2/ConfigurationRoot.xdl +++ b/source/oxt/writer2xhtml/W2XDialogs2/ConfigurationRoot.xdl @@ -7,7 +7,7 @@ - + diff --git a/source/oxt/writer2xhtml/W2XDialogs2/DeleteDialog.xdl b/source/oxt/writer2xhtml/W2XDialogs2/DeleteDialog.xdl new file mode 100644 index 0000000..a0d3536 --- /dev/null +++ b/source/oxt/writer2xhtml/W2XDialogs2/DeleteDialog.xdl @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/source/oxt/writer2xhtml/W2XDialogs2/Formatting.xdl b/source/oxt/writer2xhtml/W2XDialogs2/Formatting.xdl index a366760..cf6015a 100644 --- a/source/oxt/writer2xhtml/W2XDialogs2/Formatting.xdl +++ b/source/oxt/writer2xhtml/W2XDialogs2/Formatting.xdl @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/source/oxt/writer2xhtml/W2XDialogs2/LoadDefaults.xdl b/source/oxt/writer2xhtml/W2XDialogs2/LoadDefaults.xdl new file mode 100644 index 0000000..836ba5d --- /dev/null +++ b/source/oxt/writer2xhtml/W2XDialogs2/LoadDefaults.xdl @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/source/oxt/writer2xhtml/W2XDialogs2/NewDialog.xdl b/source/oxt/writer2xhtml/W2XDialogs2/NewDialog.xdl new file mode 100644 index 0000000..2d0a0ba --- /dev/null +++ b/source/oxt/writer2xhtml/W2XDialogs2/NewDialog.xdl @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/oxt/writer2xhtml/W2XDialogs2/Styles1.xdl b/source/oxt/writer2xhtml/W2XDialogs2/Styles1.xdl index 85bf430..79435eb 100644 --- a/source/oxt/writer2xhtml/W2XDialogs2/Styles1.xdl +++ b/source/oxt/writer2xhtml/W2XDialogs2/Styles1.xdl @@ -4,7 +4,7 @@ - + @@ -14,7 +14,7 @@ - + @@ -23,15 +23,15 @@ - - + + - - + + - + diff --git a/source/oxt/writer2xhtml/W2XDialogs2/Styles2.xdl b/source/oxt/writer2xhtml/W2XDialogs2/Styles2.xdl index 8867b2f..11451e4 100644 --- a/source/oxt/writer2xhtml/W2XDialogs2/Styles2.xdl +++ b/source/oxt/writer2xhtml/W2XDialogs2/Styles2.xdl @@ -14,13 +14,17 @@ + - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/source/oxt/writer2xhtml/W2XDialogs2/Stylesheets.xdl b/source/oxt/writer2xhtml/W2XDialogs2/Stylesheets.xdl index 8b69bcf..9bb1a4c 100644 --- a/source/oxt/writer2xhtml/W2XDialogs2/Stylesheets.xdl +++ b/source/oxt/writer2xhtml/W2XDialogs2/Stylesheets.xdl @@ -2,18 +2,20 @@ - + + + + + + + + + - - - - - - - - - + + + \ No newline at end of file diff --git a/source/oxt/writer2xhtml/W2XDialogs2/Template.xdl b/source/oxt/writer2xhtml/W2XDialogs2/Template.xdl index 3a234eb..34eebb7 100644 --- a/source/oxt/writer2xhtml/W2XDialogs2/Template.xdl +++ b/source/oxt/writer2xhtml/W2XDialogs2/Template.xdl @@ -2,15 +2,12 @@ - - + + - - - - - - + + + diff --git a/source/oxt/writer2xhtml/W2XDialogs2/dialog.xlb b/source/oxt/writer2xhtml/W2XDialogs2/dialog.xlb index e6b49d4..b0d250e 100644 --- a/source/oxt/writer2xhtml/W2XDialogs2/dialog.xlb +++ b/source/oxt/writer2xhtml/W2XDialogs2/dialog.xlb @@ -9,4 +9,7 @@ + + + \ No newline at end of file