From d0f5cb7d2f37d15097742c5929c931a953b11289 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sun, 5 Oct 2014 17:28:09 +0000 Subject: [PATCH] 10_ZWave.pm: add openzwave deviceconfig xmls git-svn-id: https://svn.fhem.de/fhem/trunk@6691 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_ZWave.pm | 217 ++++++++++++++++++-- fhem/FHEM/lib/openzwave_deviceconfig.xml.gz | Bin 0 -> 47559 bytes fhem/contrib/zwave_configconvert.pl | 35 ++++ 3 files changed, 236 insertions(+), 16 deletions(-) create mode 100644 fhem/FHEM/lib/openzwave_deviceconfig.xml.gz create mode 100644 fhem/contrib/zwave_configconvert.pl diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm index 1fd50890b..89c298957 100755 --- a/fhem/FHEM/10_ZWave.pm +++ b/fhem/FHEM/10_ZWave.pm @@ -6,6 +6,7 @@ package main; use strict; use warnings; use SetExtensions; +use Compress::Zlib; sub ZWave_Parse($$@); sub ZWave_Set($@); @@ -191,8 +192,9 @@ my %zwave_class = ( parse => { "..7105(..)(..)" => '"alarm_type_$1:level $2"',}, }, MANUFACTURER_SPECIFIC => { id => '72', get => { model => "04", }, - parse => { "087205(....)(....)(....)" => 'ZWave_mfsParse($1,$2,$3)', - "087205(....)(....)(.{4})" => '"modelId:$1-$2-$3"', }}, + parse => { "087205(....)(....)(....)" => 'ZWave_mfsParse($1,$2,$3,0)', + "087205(....)(....)(.{4})" => 'ZWave_mfsParse($1,$2,$3,1)', + "087205(....)(.{4})(.{4})" => '"modelId:$1-$2-$3"', }}, POWERLEVEL => { id => '73', }, PROTECTION => { id => '75', set => { protectionOff => "0100", @@ -250,7 +252,7 @@ my %zwave_class = ( MULTI_CHANNEL_ASSOCIATION=> { id => '8e', }, # aka MULTI_INSTANCE_ASSOCIATION MULTI_CMD => { id => '8f', }, # Handled in Parse ENERGY_PRODUCTION => { id => '90', }, - MANUFACTURER_PROPRIETARY => { id => '91', }, # see manuf_proprietary below + MANUFACTURER_PROPRIETARY => { id => '91', }, # see zwave_manuf_proprietary SCREEN_MD => { id => '92', }, SCREEN_ATTRIBUTES => { id => '93', }, SIMPLE_AV_CONTROL => { id => '94', }, @@ -273,12 +275,20 @@ my %zwave_class = ( ); my %zwave_cmdArgs = ( - dim => "slider,0,1,99", - indicatorDim => "slider,0,1,99", + set => { + dim => "slider,0,1,99", + indicatorDim => "slider,0,1,99", + }, + get => { + }, + parse => { + } ); -my %modelIdAlias = ( "010f-0301-1001" => "Fibaro_FGRM222" ); -my %manuf_proprietary = ( # MANUFACTURER_PROPRIETARY ist model dependent +use vars qw(%zwave_modelConfig); +#my %zwave_modelConfig; +my %zwave_modelIdAlias = ( "010f-0301-1001" => "Fibaro_FGRM222" ); +my %zwave_manuf_proprietary = ( # MANUFACTURER_PROPRIETARY ist model dependent Fibaro_FGRM222 => { set => { positionSlat=>"010f26010100%02x", positionBlinds=>"010f260102%02x00",}, @@ -300,6 +310,8 @@ ZWave_Initialize($) $hash->{AttrList} = "IODev do_not_notify:1,0 ". "ignore:1,0 dummy:1,0 showtime:1,0 classes $readingFnAttributes"; map { $zwave_id2class{lc($zwave_class{$_}{id})} = $_ } keys %zwave_class; + + $hash->{FW_detailFn} = "ZWave_fhemwebFn"; } @@ -355,7 +367,6 @@ sub ZWave_Cmd($$@) { my ($type, $hash, @a) = @_; - my $ret = undef; return "no $type argument specified" if(int(@a) < 2); my $name = shift(@a); my $cmd = shift(@a); @@ -379,8 +390,8 @@ ZWave_Cmd($$@) if(!$cmdList{$cmd}) { my @list; foreach my $cmd (sort keys %cmdList) { - if($zwave_cmdArgs{$cmd}) { - push @list, "$cmd:$zwave_cmdArgs{$cmd}"; + if($zwave_cmdArgs{$type}{$cmd}) { + push @list, "$cmd:$zwave_cmdArgs{$type}{$cmd}"; } elsif($cmdList{$cmd}{fmt} !~ m/%/) { push @list, "$cmd:noArg"; } else { @@ -422,7 +433,14 @@ ZWave_Cmd($$@) } else { return "$type $cmd needs $parTxt" if($nArg != int(@a)); } - $cmdFmt = sprintf($cmdFmt, @a) if($nArg); + + if($cmd =~ m/^config/) { + my ($err, $cmd) = ZWave_checkConfigParam($hash, $type, $cmd, $cmdFmt, @a); + return $err if($err); + $cmdFmt = $cmd; + } else { + $cmdFmt = sprintf($cmdFmt, @a) if($nArg); + } my ($baseClasses, $baseHash) = ($classes, $hash); if($id =~ m/(..)(..)/) { # Multi-Channel, encapsulate @@ -625,9 +643,9 @@ ZWave_mcCapability($$) } sub -ZWave_mfsParse($$$) +ZWave_mfsParse($$$$) { - my ($mf, $prod, $id) = @_; + my ($mf, $prod, $id, $config) = @_; my $xml = $attr{global}{modpath}. "/FHEM/lib/openzwave_manufacturer_specific.xml"; ($mf, $prod, $id) = (lc($mf), lc($prod), lc($id)); # Just to make it sure @@ -642,7 +660,12 @@ ZWave_mfsParse($$$) if($l =~ m/ 32) { # might be endless loop + $c =~ s/[A-Z][^A-Z]*$//; + } + return $c; +} + +# Poor mans XML-Parser +sub +ZWave_parseConfig($) +{ + my ($cfg) = @_; + my $fn = $attr{global}{modpath}."/FHEM/lib/openzwave_deviceconfig.xml.gz"; + my $gz = gzopen($fn, "rb"); + if(!$gz) { + Log 3, "Can't open $fn: $!"; + return; + } + + my ($line, $class, %hash, $cmdName); + while($gz->gzreadline($line)) { # Search the "file" entry + last if($line =~ m/^$/); + } + + while($gz->gzreadline($line)) { + last if($line =~ m+^+); + $class = $1 if($line =~ m/^(.*)$+); + if($line =~ m/^gzclose(); + + my %mc; + foreach my $cmd (keys %hash) { + my $h = $hash{$cmd}; + my $arg = ($h->{type} eq "button" ? "a" : "a%b"); + $mc{set}{$cmd} = $arg if(!$h->{read_only} || $h->{read_only} ne "true"); + $mc{get}{$cmd} ="noArg" if(!$h->{write_only} || $h->{write_only} ne "true"); + $mc{config}{$cmd} = $h; + $zwave_cmdArgs{set}{$cmd} = join(",", keys %{$h->{Item}}) if($h->{Item}); + $zwave_cmdArgs{set}{$cmd} = "noArg" if($h->{type} eq "button"); + $zwave_cmdArgs{get}{$cmd} = "noArg"; + } + + $zwave_modelConfig{$cfg} = \%mc; +} + +sub +ZWave_checkConfigParam($$$$@) +{ + my ($hash, $type, $cmd, $fmt, @arg) = @_; + my $mc = ReadingsVal($hash->{NAME}, "modelConfig", ""); + return ("", sprintf($fmt, @arg)) if(!$mc || !$zwave_modelConfig{$mc}); + my $h = $zwave_modelConfig{$mc}{config}; + $h = $h->{$cmd}; + return ("", sprintf($fmt, @arg)) if(!$h); + + return ("", sprintf("05%02x", $h->{index})) if($type eq "get"); + + my $t = $h->{type}; + if($t eq "list") { + my $v = $h->{Item}{$arg[0]}; + return ("Unknown parameter $arg[0] for $cmd, use one of ". + join(",", keys %{$h->{Item}}), "") if(!$v); + return ("", sprintf("04%02x01%02x", $h->{index}, $v)); + } + if($t eq "button") { + return ("", sprintf("04%02x01%02x", $h->{index}, $h->{value})); + } + + return ("Parameter is not decimal", "") if($arg[0] !~ m/^[0-9]+$/); + if($t eq "short") { + return ("", sprintf("04%02x02%04x", $h->{index}, $arg[0])); + } + if($t eq "byte") { + return ("", sprintf("04%02x01%02x", $h->{index}, $arg[0])); + } + return ("", sprintf("04%02x01%02x", $h->{index}, $arg[0])); +} + sub ZWave_getHash($$$) { @@ -665,10 +794,25 @@ ZWave_getHash($$$) my $ptr = $zwave_class{$cl}{$type} if($zwave_class{$cl} && $zwave_class{$cl}{$type}); + if($cl eq "CONFIGURATION" && $type ne "parse") { + my $mc = ReadingsVal($hash->{NAME}, "modelConfig", ""); + ZWave_parseConfig($mc) if($mc && !$zwave_modelConfig{$mc}); + my $mch = $zwave_modelConfig{$mc}; + if($mch) { + my $mcp = $mch->{$type}; + if($mcp) { + my %nptr = (); + map({$nptr{$_} = $ptr->{$_}} keys %{$ptr}); + map({$nptr{$_} = $mcp->{$_}} keys %{$mcp}); + $ptr = \%nptr; + } + } + } + if($cl eq "MANUFACTURER_PROPRIETARY") { my $modelId = ReadingsVal($hash->{NAME}, "modelId", ""); - $modelId = $modelIdAlias{$modelId} if($modelIdAlias{$modelId}); - my $p = $manuf_proprietary{$modelId}; + $modelId = $zwave_modelIdAlias{$modelId} if($zwave_modelIdAlias{$modelId}); + my $p = $zwave_manuf_proprietary{$modelId}; $ptr = $p->{$type} if($p && $p->{$type}); } @@ -867,6 +1011,47 @@ ZWave_Undef($$) return undef; } +sub +ZWave_helpFn($$) +{ + my ($d,$cmd) = @_; + my $mc = ReadingsVal($d, "modelConfig", ""); + return "" if(!$mc || !$zwave_modelConfig{$mc}); + my $h = $zwave_modelConfig{$mc}{config}; + $h = $h->{$cmd}; + return "" if(!$h || !$h->{Help}); + return "Help for $cmd:
".$h->{Help}; +} + +sub +ZWave_fhemwebFn($$$$) +{ + my ($FW_wname, $d, $room, $pageHash) = @_; # pageHash is set for summaryFn. + + return "
".< + var oldHelp={} + function helpSet(val) { document.querySelector("#Help_$d").innerHTML=val; } + function + helpCheck(name) + { + var sel = document.querySelector("select."+name); + if(!sel) + return; + var newVal = sel.options[sel.selectedIndex].value; + if(oldHelp[name] && oldHelp[name] != newVal) { + FW_queryValue('{ZWave_helpFn("$d","'+newVal+'")}', 'helpSet("%")', ''); + } + oldHelp[name] = newVal; + } + + setInterval(function() { + helpCheck("set"); + helpCheck("get"); + }, 300); + +JSEND +} ##################################### # 2-byte signed hex diff --git a/fhem/FHEM/lib/openzwave_deviceconfig.xml.gz b/fhem/FHEM/lib/openzwave_deviceconfig.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..2e922145035bfa2a3265ba658b10537f964036ec GIT binary patch literal 47559 zcmYg%Q{=0*7?xS>Dfwy5G-BpOY={Ns^f2{MIc!|4GOq zM;^%H&HPria~E^}OaI?v|DVfnQy$IO#YP6nXMH)Oy0pVRk{nQed(YPW>l+T&&u=`K zc2IlV;m3A-**G)5B#!-~(?8wn+B32FeUl86bX^V9U>}peH8{?52MIqM+qtr*d00q# zQiqN_&P5(bA@eM9YSE%yGQb$V7qdwPKW)E^nck?@uDbB~zZbJ=fysPyd)1hI&XbVE zl6R{!tlba5F;mWQC6)u>wX8l9$o-PZW430_R47j_T@cT9=BphYTf$4@g z<{dGocX9}Hx%XD>Fhxt5`!3!7+ogiPr@eV){W^4)JZg_nd)d7|v=T9O9wxIWbYz6?k3d-3Xvj!qhb~$f3PaUzk+~mqmg*o(NlO+S6G#s3{scwn%TC#S3) zxZn?{_g9EI*u6;u4AMwUr-xdI@$btE?;T{Ml_LvW$5&T~kfavK7@}A}rcABQ2d$vP z{%Adg+C*2o*GA#cpE zIIuL6+d~q#>thDkMS)%_?viMeH)AeW&@mEC?SetWaSf3`b$)9LP9JlY#myiGI5_C3 zJC^JKBLHWhv3J00k@ybv?UKk2qjI`smkSWSoI;T!kg}CV&F+j}@U_mzTjAP_`snpw zoLRsypbwWM)90fYadUs5FXTBToxl~U+!h`*geuak8s%89ZjcBJ2fidm#36g%oUQ^cayD7bhx z0_9S5ht=@V-cf z_MUC_t()`6Zrm2`t-=3HCpcKBKMYYM7E?|jtRenYmR&{D3%uDg1NZ16R%^&{B4cps zXwQ0!1pw+8<5Un2Zzl<_`A;}RGDZkYJOCi}K$K30x(Un$GW^-D_YFQF=}<#&2t)5I zAc)-j_N$TUC+HGw=T;p-9u=UwAgu*aTKMU>awsaev*aC}Wto)TS|^+6hy+-5N8P`y zIdvysbJkL?dX;StfGozI^7}f0D1&QJsQ`|erGluy^QU?oO28Kvp4N8RIN0Pu8K|;b z52ov^w6URKqkxWc!j=nBfPzKKU(CexS( zf8LT{6ifBtFZ{1!4uWy=$|{W`|5$!}c8 zTQwC<+r_Z$u2?+UU=J2l#tOa_W^baGfSPgpM&vdP@i0^{j{uCcX@doFN=d5$+V3^n zqqYGJv8s|IHr;_S!~`MBbP=qOmB~S6{3WKtrb)RGMS_UzAt<3D$YMpT$)Za`jo;gP zk359VjcEr78;~JGnFByCIK`3T>rJu3V`k(OYPSTcEn{?;eJAx3z#B$HeQ<`F-&frt z5Fe~#ArG^Lpr@C0ByNvZXV$O6l2=v* z#C?hR{)&-ko>2P+7P}XCT`>-q z_UY(_<9lDZ>4*)j3k<#GN|Tynj`h(kBE)Kiblkd~d?J5Czo#?((H?DM@{yi&CT+^_ z1gw;<1X&V!q=VV&dQMNq9C_-WC96x=0(GPyaF6%gohS$4tk03ru9?p<sCb7y^svc>`G zx2K_&HVShulAR2MWFcvdzP2#T+fWpNog^d^7?Y~lynN>`l|$i?AjEKHNwBmntvT5Q z9nnx4p~LqT@=7vG3p-k!+3Rw^2)#uCd|-${)lXnw@TOR7mkP8x78v|ScNNwavYd3) z6l$q(1Alqt31tGdOK!5^3PXu&a)_}Z@@QA&dFi!r*QD&ff5k;3rR?;VfP8w}es$pT z#3njmaWyVO00P?PfS_|0na6o`g3w%s;IxK)&>aa2hwk%+IZ8BT1Ab=|IU0pz-yg-} zMULLkO>&Jy-k@FL0X0Q5kqvIFP0j@IoAe1hD@m`>77vnSM$;gU6U5VWhF=d<5y&L& z#}>O`+zEd1t_fg%m1IE6xYsN=+wlARP%55AuMD)%-$}m#rv^O%zyA+wP{Yj^g5EI# zT%02oplkl4{bT?&FhGVPlF#*4>G{F)&CTGTustG;!LJ=X6aXup08!4?RV|taYO<~h zAcAMocJ_EvZ|^BS%*!kI&e&@i`zQNn&n@m1_znX``_2;lh9q^%%0? zpD2C?g{()A)-5TP+?zbPfP)@bvmawf<}-ALU>Lo0Np_PUl(ilyjM?w;UtLm~{Le=Z z)WmoHpvOUNWlKo$Sa^iJr|b0w)4TKP&E}I5IFc-*&wJL8h{f+E^h@IkzYEg3z{3cU|hId2 zfWLmDIb0JW__cbma+yUanygk9 zel@`)stuvd;V81M?c11|n$!yL05J#iZ;&)BdS$}%YrkZM)>p>Mrm%>0jf0m{=oF>w zs0DkUJ-x|MbR_$9=+;aRZ{*?*!d9LAZh&hL&;$Z&`Lu&T5`1~BXEJ?zjYW`3=td}NnD6GqfhCty(uFX z7-yT-I8>%(j$a0J8O>H(l zkqK=oKi>jYfK(uuRJd`9wJvRK%tzr(Q^6{3bd>lP;3y;xtXz`XPu|O4nu`urZL|@#{|RKHF(xPmM6kJIwWr zl&|k|l%-*iQRhy(-OB@XBnch_(S}A=NzF#2N{=W>uNlHSi^9VRg>?zAfG`L5`=SP% z&LPEB5Rf%)+SGc}3j9F^Mwj56rD5=y4m_@FQ5Jx8H$h~fW>*-c0pd`)FcP)!fz}j+ zag+3_&A}YIoFrFar$ac4#>sP+DE8go?!lB zjzDnPy*<^z{zV6m%4_f5;}`JdP5iE}7x3Qwm+j`)?a=D8m7ZI=EqC;r&dsZyM-qCk z-G4mqDL)-#|Au!nKMP2(dLFJCVLV1E^!WBW$+Inacp`>GR!7#A>2>b6n)iKPZ+bKO zo%XfqT}t;>jX-)_69ONWsy>A;d=y<$k4gJx@_htZ_wEYU`HJ#R*vJbg=5z-6=3*Y1 zW0z0B@DTj8YsFNeBIJw3R8rbbepAv&YwLh8kw`l>S`P>pWP=V?%Fbu&zxvRv)B{nZ z-^86KI@w^sy2wEiJjVgL8;p=ufc#Z*m2+S|An*ygbUf%a#?uXY_vUqZlbk&4tX-_9 z7Ep@5TAC-NqCy3T-w%P&REN_4U}*j^fb1!XDz_Mjqw7d*pOHf754IA(-3#{HQ+Pk= z0ivs2Y5DE3HVPF0KnSlEi}C%w*b%jA(7YzNxP8-W(ZKJF{@;OJhf{i?a%0%K%d10a zA%(7Q)tPm*+dqn5ww;meRLkGHe^U=PdTE_AGZ0b5q*0%BJFk}D77!RD zqTY`2gSKych26Z-r?T%fv4^*uE+?s^0B?Fn8kc&P$vQqWX6D423(0tD39rZF?{W6Q zjB322c*sh_k5-BJ%j4T2@az1-?7e61M{oAud%t0fUvj`I@q!=bR7|vSa@Z>G=uc{+ zoGBv1OZ0Qf;$5Wgg&1!-N;d@X)3hTnSuhYY4aSPK=z(Obdx)v41iPq#?*b+y5sZNx zLj1f&S4$Lb%sv5opmOx%cHOgR{Z+i*XA(b)xB*1+=_#;^#y?)MYIZ-tE?==~e^rB@ z;d}Z&z;ngeUH!Ko_(24Yi9X1^m6!4S7EDGodhdTGbpyRTGfK4??1e5nE4*Q?%=Fc4 z2E5N@Jz&}Q`3#YR(|1G$p%oKLIq>RErdS1O^mh2z4)xdTGTkNn(=ZObR#cgRj}Diy zPoh#~+%VsgjmBpS#Li5EB?XV74{T`3*TZ3V_A|JyH@3{4uguGL1#kI&Ytl;n_59`Y z&LYP<$+J34a?+p1Id(TF4^=449Ev4M+$c%>XP&iuR7TAj-vC+a*&_gJ8+qmJxauJ3 zCcWSC@VwW-gI84$ua~VisQANsUzz;l^^#>q8GmmnpB|KSbX0(QeL5};I3lSqNQ=Zv zx|O!=ux!>Q4DjIDEKC{F!5^!@i3JP##kSMJkhQN{S#a#oX8q1=W+B9_i~^ot86IDq zX9XvbX>&!)1U_jPDgu)mXzd@B!CU3ToFExZrVaH*cHeoB4s9i-!iH=lrtlMomf|Tr z@FFq)IscbQ_{VHoR^Xz6+;Pxj_8UkI&s!;JaX^dQdh+eB_k?We(r*9YH(?b=BM26aG06eSl-qB|5n{$VD&c*-e` ze!Ltkwm!XkJJ{mn_HiaHZW}*aoXXl+8qY#U7_zSP--Kzi)~R|((ym=Da~aB?hB^Zu z9Y=@R^_HqFjs97_X9`&S^tq)sT&d)j7CG3L_S6u^gujF?;mN{V(XRXUNsykJl?4hX z0h|EWvfr9E?~U$wmS$YjfH|QtBjh;?>hppoXk$NcC+lMzsWg566W8Uq61Ky`o?PFM z%myD`?rE)WcZi*SJ96CV_-?1u^Z!gLyPPO&=dBT(R>o1=e+Tr@qhgP@ASHt z7hS_svitemrCXvHn4Uo42Q+nvBf;tnM`pX`!o{Kl&oR86i zX7-9T!)anTESQfOL^H!-%W`}g!el-w1A8d2KW$%2&Rn)-t6rU{(QDKMznLM9@=N%CkVxfo?X~i9 zt`yqZ>7i9uYT0eJ2&a|hHfOV8D7^@mExU;%^(VbA{2H0uy&HtjCZDVQlJw5-^JrX` zJ`jGhT>i!j(&r5b#7YA=TQ5KWcH3;RB}87hZoP??aLM6cmNW({4jZ;>WyOh`rp6x& zU6#lly6^WK;4Eq~+W3CG#)xO82X>7iubwAZv<5s#JwL=^B`RlDxS~Ezobr9&6#*UI z^;Y)Fh0a=*ODs#W>vdPd$$cKV;PNAH6cr6yKUCHj+Ov3=S#e9MR2m^kUd`W6{@>^? zcAZJZ7acG9mvCNYWUnO3hBF!U`Hb19je{|~+NR#V`~qwU?-!D2002Jay3a<2VW&*y zb(i3%a zI2S;?1ii>o4V9yvG=lrhnY{-d_WeLC=M|z80M6 z8p=)PT%t(*NyXEzd!350F?L;`mT^G!lyH?RP?6tVy=OG{=(FRa?kQjDwlY)zYzGpI zRvWsrL%fZKXJW`&{6l6{F8dF5q{%ka-``k()LicpEE2Cb410`m{@k!?GN_!yEOick zbz+@xnHGx~sUl8WPI=}_IJ226_<_ZO#!q85{lnwhX-uAT7>$J*We2=ch2F#`vj$TwaGfYxM-XI6wy20<{ah=R4->i&L(Aj*SLL{6$@I_7JYQcr6 z6-U2UZn5MgCEr(-;&~pH27LSJVHfiPT`WxbchcS$^9o&06Fvj<*RMH`(U*s-S%q?g z$6tWiZSB0TsA-&C(Dt_+?Wo*uVUq?6&3asY`FEw56J~2j)O|Z9@>Ip$@Ima6Ui|hA z2})T9+h#&<^_58lAeS+D39F@9FZ3!`jqhW@Uc~TO@jNx`5A`c!mroU6=Y}vzLr@7( zlkhz~P+>%TQfK)M$q?=@7E7)f3!uHTazsfE&z+*Sct2Nd5ADkp`?H|ipjO8+e&oFL zJ-xcg-eN6JxlvSq<2#f9F8@G45tJZW#WrQu2FD+79(Edhg=(=tqiVReDbRvS)^P^g zo6OyjGj5sokc!DdL@|NthG4A{djJ(!wLUwkuH!%f)D^``Hg>%ZVzQSds@GxtyuofZ09{zwvw-;CAzRrq_y4f5#|yze zhn5<1UxD&^ee=83TXw6s4-2{(9+N#pk5(l!H@khe&Gq&9B|;#iFbz%S;+@Z@2eon9 z2mZUmU4($c$o2V=aZRa>+JUzKzLMGR_V~$CC=NjWr~R>?in`BF9%AJhX}_5@C30rI zA8a&`Ui437He`8WiE!qj1!r&xL~Co-)x}(ZF%Px)sXd~b=YIlEtQ4?j_i|+4(C_wq zPIA33cpH6QuFjBmH4orbCK|E_Q!zb?079N=j#@b9f1FcM3UB`Y%>JgE*wH%ame>xt zdAF#%4ux&inW7ec_#oit7W>{k(P|0cW&++D41nlUnfvJy@jxLAhbS&^%l!qMCX-ZE ze%;b>Gm`_f*>FZC>0jgy={#3-%mN^MgeY5bgAN2VE+$0H5KSuiGssRYH(6Qkmc_BM6+#8TqokXLN5T!5IPOnU6^l=XQ9$B=xs2 zn}UCYxl5YkRSag4V7-hd=7vXZ(2@gU-}6? z1xU2G+3R&rmuD2r<#r8DnjU{1EI#Y<{R+_yIKGg{PkMC?Ak)R4W_x}TG(x{@qOuf_ zcEr{in7SX8$9qhzXpC-JqW*SA^QEb09y&whMe?mi;b zAhL1gRbeBQ`$9qV!{jVP{^m3Hk1PE@XgSmWX$nQol!(R>3Yo=>7*J^sAQoMaGr@J| zwVe^>fY|r?969?@4e|_hp@rNXI($9*#k2DdTM*{iiZD_<>uGTq=bPtGTFyh&s+*2> z4vfvl90dqYOuUK6bM9n>46CFQi9{M6cmOloU{O@f&3v%Stv0A-caB8qUJbt1e+G!I zi~}%@YMf6SHC5WmGHD>NnY}GUWw^vU-E$qN&KS9d&cjvSqXE90P$~Q#UU5j_>l$g% zVqc2(ulc#{b~DLyTlV(PJpv5m+5xLcCtj2VVtsSqWBUvy1^);zI|S_$3$xA=n? zxpO?GKURC7%2JtX3$(Ln(kh(5ky!^7`J*hXEyzB?&@u!jdg40RQ0ip_@KhuVc~x%B zBU;xXTGTyo6G=NX40sHP5ymx0Px)}|H-lSEt`YMb2)Wwxjz1=kDucJ&(DB*gaEtIFwFKBHyro| z>fj^HMT$GH;gZcwncp(XJOLLm5hCk$FBi9D&gmSORL_iXx_c8JJjG%p~ctEwqs z%%k4NZ$WTYay%_(#K0iAfG}fEbfSx&H3Jv4?d22^I17 zbK3vlZqIiZa4aTOBw^KECh-1H*0-9{dUv)Ji34WHFXTxen{tp~Fmg_FhYTz{jbW6C zK0YRgAL%$}Fq~FNM}b9@PV*Ut(_v2I(%KL6@JZ*!3?OL>BoPP*bYlItD3);lhHW=Q zZgh@cw`x84>*`k{^pL(lr7;nq7cCkU_$j9Ea@#z=XQfb3RVMwu=H*`53PP_E7vbwo zNt2^bpdX}R87bC{hy)+xm%AZZsH+X>odezp1R#@MMMVLJsZ5J5!8mM0TmyA{JugIh zN%Ky+?X#chLd9T0JD_R?gvmTC)M@ha;rzPNdxmXRJl~b6Z83{dfIwy?GB%KqTOM=mVgi>zT7eOoJ#vdE8z40x~jwSzDFd$i5zJ zhF?(F|JJ`0!%Ydwyulu0@BG_38^|o#kHU`J1_!{Tv0z3n)M=`MR46sKeEGCMx z5iYX~XH%!_6hoK`>e~XGmdmq=MufL#ieh1vNqK0>_)+FE{YRIhpQr$&|3QsyBC9S5 z<%aDy@Qv3Wnq$ml&g+W-qVHmFcd5ovb7F(TYXw6$uDI&*VC{|6@FecX|x zVGjP2zxfu4Isi>6y$B^o_(L=?{uV%vSWgj7WhcVl5?Uvi$|3b#6&~{t)&a7d3P7Sw z;!^ljQi3EIHX4w`&jwmdON-+X5V}W%Vr?vCC};Q`*%MUYIzm&ZI4ztgI!n~+Z}vy@ zaE#7ix$?w_|257`y+#m9UdUdElit0!KVm*4V|*E6(mshs1cPpY7IU|mk9duUfWC@D zz#_0FPyj+A(NmEI2RnfGfojTFaf*`$5m+$=$`% z+2itk^SOkQP@;qB+YE-aW5nj6)lvC=bEZ9D(5dcI+HZ(iK;j(f- z#d_}#8P%xLWx_k|na{(^LutT(9c3cqzvN5>8;}zMZ1ZxH4RcDI8RU*Irjrz4f)_BB z{K2&W)tiQq-0_7$29sk4McdN15o-IOXI}JXe+Il@)pv`eR^ctHxPGXDkmjuR;}@xd zLtg^r&{ z)vh6c8+8EJL7_l`l%YV3s{t2c8sdkvP*W4rvVKqpMx8?i#A-xLT0j(v*78*(1 z0?<*>IzX%zn3s;WPgk-xs?qmW#dPu?b(iU&JOimrprmQ3uo|aP!@1PvXV7a3m*w}Gj|d4d6P|?rNRJ%SYY0eJq#O_1mb6h7)q%pVpwh#tBAPa&DxgDK9uK={ z^&9e2#Nw7)r&{7+yz62hGZ+3&XC0e}ZSst(DZ^EG4-j7`xXr9Wd93D-i4@~~v{s-u z9BN2(NkNJE0>z@))LL9t#I9vA7Y$&nW*T8uTxDW;P<8vCVIh!)!yHEL(0{A>q?y}H z)^f;u5j(lzhH;i*q%jR%b&m95miM2APrXb8tKqM}+H4Bec z*rtv@sIHg&3Tv)N&V*1)Qk9FZb!&;4X&SqXISe;ivkg~6^c_9M+OKf+VefYM|7rqzaXa%X|(s>~K2y ze?$QkQy5SwyB+my9-jX}KoH2J*FxlpY{0^TCHP8T&y6?^BpFmJe-kFV7e}hEv2Jz6 z1%LizfV~}jY6w`t;yfOSo`B2c1Gq70rwk~)>_!^rTH^rwMB78w1k=QhKniT0$m(7g zPP#QHz%>3?Cig)NvyjcIPbG&_n6_J+G`CJ%2mixEp+F6t-XUnBn3h)1qu7>D!y8QJ zPakD_8X#!=p24RC3*PfOOhXeD``HzdOwyGJcrlrj2?+|lR&`)!2cdi!ojKEmc8yYW zm3H2SX#W0g>k+>IO4QPx0&~h-ZY`)zqm1fbJYz~frp`a5)|wsBAUicjW@drR+!Tqq zF$Ckg$|#(jkS#klO?G64?9>R^z8U90#24SPZ+$Y%d} zi>6rCD!eooCRj@Cf(#N(4Ki|jrkDpq)^?w!4ji@Ul14(VumzjaP#{Pb+S$}>^1pZn z_1S?}p5NVH+}Dri_j~j4yMO;4KE6L)d`ym>d<|bMM?XzEPO{HS`iuq?$1IlNd$NY4 zTwc7R4sg-uDby-l3kr=yExUFWe^`Otfa0;YFgmJJcPS7R+o8!Jx?qhb`4sb=KARiV z`x~%>1lPs;3sx8<3B9Wt0iUGE?`7gNetopTF5by+Kr-(oSY^msjz5ycb6;$kL(<7y zwWc+p`=V!Cs2rt;gsVB}faC+VZh}L$1i4bZ`lu@RieJiXNWHHm8~&X1F{{0BLAdqZ zDnF`T(EmD_uDSs2xqa4eg&7=y6nd!pc6v$zYsTE`^Qw^pc(1Pj0L<-H{YH{LPFsYX z2^5mq>H0Tjf2FUZaV9fpM!J5564i~)zGrA(Y9=+ltwf*3?%LWiHgfIR!4QZ8 zUZfd}>j)sgX`Kiz7EfAy7Kag-0xEA~DO00XgpCLQ#I{hqCM(P5ss{Ar2d6uc7Tu#;hcpqVe(dNgz?nSLBamlAJze4{jAr(#{hg%}_@1Gab<|Q+UAg5OFxn`;Wt*Utn<{h}XJa zCM|)@k&G!l8l_-R2hO>Nu?>TO>}ZJB`e~hMFb|YPpmk~X;MmVhuPID(XOGp7*Wp5a zkPip#Vm!&3dpDF91T+pkut4SP>krfW2#^gT%;wH-lh-f*UfhYD|J>F=V;rH5$P8u{ zob-6^tCa3faPYwmq0JylI?fMnB$<52w4)%po%r)~*eE#o%!^BC))CTl0pfyS3;&qV zACr^or@7{q;-C?ic(}sPd8;}8z9#V(*>YD4aA#_rLnE%{O+Zw31IGRGRA=x$ImV1N zV;*DGgggRZ2Z1kq#YtERQ1&Z2i&&$8)vHmX>pv-i4)>Cjm$l+CKE2B0VC(qAM|>^Z zPohV{4nMe+{-W|e2bFGk}fbnDK z5!(%EDB%jf98%aPlg|XuD5laoAypjW`QLlb8p{~)uw2YwxX^-;BJck<1o=68Mafq| z`2)!vWhN9k6cgqy*q)zJ&}ZUnBZ*yScgt|6(vl|JN;*e0A9;3gWPZ- zN9fdYU+5JWsr7=JTyURexR#t8=M1NHZ4LfQ%fn$QhSoWbDDtyIfcxOe-ym^l$s$^e zqizq!p$FxcO?UWieM%>bUgz$PkB8?~ptehTen_L?dmekZb1_L*IDbk>U^zdzVN+84_+L=#>vo3cK1O-2CnmimjlrWq?c8jo%9DrW1r;mCH!B={3BrYCC zrIZQbW!v!6C#u<&q%bvR;tbgis>x;b89_X& zP(ssfoX?CuhM_+t>?{g~$;k)$O6HrM#8Zw_niZ0q$mnPGNkVI);yH5GkWK(jjk!9H z1Dx|nEtqz)k~Sv6o)H^Vb_>Hp01REm-567AhzSc2%%}{YT(#1ZU?oX}M~ zRxFY($wo=QWv!&EM3Lkl1pte2jtptun8y`WnOj@BRW^jCplk=HNS}JJ+z=1ocw&3DJ}sY_Rv^ zDLWyhOyjy0-KUBOpj+f!dc2FMs91&(7lrse9=5G@ozCfw;Pw3p?!Ud2PcE9_ z1cXQeTgwP9Ac2VE_leGhOwMl=u+3kgu7A-RN0%G>kDY`z)CU&qC${{mMz^J=S-o@y z9e^SHvzt{~Ee6k}JsB)VQH<4Y1qPw&u1{s~ojjlN+7wopZL}#0dptvhu6i??ey~V_Afzj+cD; z3tYamiC(%9AG-0rvS(e?t7!*I#P`^ic^74G=8slKv`RG}zy#}s^=I+f_YRz1H{W8A zxLMGGlQck{NY3D?&XfD0{*o4JFO}s9)P{c!w_aVmeO(+pJZ3LG4o>#ks(LbgWZs$n zYgkj~8}Uh*Y|#@~CeLPwQB+P0GJ#-?%7er|s)IzE<9okj*i$1{%JBhmFT!(XcM?QGk(@Q0*Q@%uBm(Rlht(=6BpjU! zqDq?$@9U6ZA{z?~Hdk|@46J(jFxJH2iA_9BE_)Yj$pxd-a3wx6mq_S{R@V!1BI{*w zC!@Urgs?cOMbn8^Cf-F{kHdz)5zm1{d6qH8WKL1J$cO8s^8&#CAc1jm`%UgTU@S!X!J-~c)6m<{Su4{%!L!&1>`T%s#b z$9mXZlv~|3s|zXX=IrX>qbo2I-J1}QP;=)N>Y`$2%A#Y*w%u=obcC3=g)8!}5$g9R zA&Y`0`}^Ps6{oOo1#5Jlzl*C+{o;U6RjS)&V0Nai3=%Yg5F|u|)OjxLtC$9;+LBTn z{p3{|tvjhG5<>xcu;|3!h@KE_6`@hp5H~YA?j${kF9by}UwOjfCGk4ml?D?-{%_Qg zM0~3E`|Ex%ZOVk?z*us9DEZD zehk@41!C`M3svU?LO*NTXCI%ua1F`#MXb2Lq5@s0NuzY8@=TnOEu4_C{uD=!jPNHG zbVrf_rBW#I4Xn7?z>)=~2Anj4@l~x9x{g$9ul8Q}fMj>p zY@B~zVR0LHSAaPTa=Sv6YZyE9Q0pfH8Z>*F!lcSVMO^=R`zq4ZZ-IcnP^JV8d}Pg( zMr!7MRy9GQe|Poe$fNS=Ol+1BOXYlr!Hs;-0L=R%w7Is)sD41ke5KR~FTc_)ULnOo zrPQRazoVa{tMA*%)f&R0vwb(`bQklO$vz+C!XT7{_cX!vF~PMhfvyIjP{2$R!k84N z&QaJGMY|qfZRt!(p2VSHr`Rzy3Mi^0Wg!I^YhjKuV;zY+2eP`$%BSY6P$vsYtN8ur~m!>ol6N7+1<1 zS~d=>EDG{d5*q*G#7q;|DQkmo3}$beC6pf~uX>HJdn9AFxi$I8@~CKh5mXOn=OUU_ zYx7OlpMSmR$$l789Yg>zGp>G~3ZB_Cd;gRp zvjHLPqYf>CP_9m|&@d$R(F&<59QPlihM0Xm2Wn;%=b;z5F`J_ZzdtkY!_W8D)ZBJ4 zSg%Yph9y|HR4C6X>mVigqPBc!TJTP$xZ`2n*r z*GC-5#ZhFFpL7ZvQ`h@nhfBXg6*e(tW`%~ab3Kwc4(v;&2?{d$B{?8HtU*LnR05Ie zfug(V_065jvUT4=Pn=_fqs7ya9`p?uhkhnpJ{O_ns5=IA`i@$&naQab{pHtAhb_W> zRF8?pd)8F5)d-YN=YYQY1MRd7;X!+JaAe z3mFtXBt?p6Oad3+(Z}3O&~t_vf5!IGthAp z+&&p-eju4t)YCj$HVo5cs)Z7!faa78q(z7gipAq-o8i1BjMFSI7`mG*OGrA$h*Q_1 zw8wNR{hBE@$pz6wSNv~B#oHL%>G?jmzmA8D^AuzqcBJG)5;aX^_#LJ$>yKld6V3bb{kAcL6gvks&dpDM> zLet9$#e<1KqVQ zRcPxVcx1DH&TmLf#1@HcAyrD3TLbbVmP?SXnwq+&5u*XldpK?iVs-)NrST0-(o6k4 z7H)AL@dM!vE(HsTG$cI&0k+c(FQJDr1LFN#70ihz#Ria}Szyk>qMPiJ(T&aeUXV>b zF(#fNotROj({L5j!&y>z#^O`#hAsA_sX!`rn2z~&C$3va8laN%&dXk-ZLRUH`QDdl z*j;2Ozsy(7Z#Num#3I!W^v=wHQc(4oSQ(ZuSFUt%Z*KUp#vDyPGS-BI*cFDtH>BQ% zgaIugwO&NVLU|8hq{p;jEra(<(kRw>7ui1%mCz6qkIMdcFcS&YSwGa^VA+SAy+Uw<#K0EW^{P$RhP! zt)XUpbayq?&avCg!AW_xWQD;64+^@CdJ*w%8p#jlug1|cd7GcJH1M$yznUy}U#Vd- z+@$wy-(V^`u)+0AJbMg_{vbzy14e8R z&Q%1(EkhmuK-~gmKf)9yanm&DL|!wZxyM6h^^>;3^%RZtpF?+f#%s_Qi8Zyg?tUqxSII;*(HqqR<*@|4YU3TnR|@c*ov#%pG} zO>MsS#0mDHty&7NlEqa3Yl`QUf_>D};2futn7>C(1PfvSz^UX2j}nAO!jY=};fJ|g{QpAhHWy#w83G_6NDk9@=3D<6id@-l6b zM(nfv^3Yv%jJ=*@y>i>!=4V@;$SX*_QrFj8x57^)(V_+a^W8EfBdo12nZv#`ZlL~j z*Yq)j&?O=PmvKPeu3HdJr^XA@CiS%JOwzguzhE!j4yFj0D73Jj4b{iZgt+bRVM7XYB$-YN7&p z^#sq1gr%!jYA^yIcU&B8bL>fTppAgx4awV`o^ z3(oSOWl=_;4rf(kuHy+TcQ0U*6*Orc+CKd5kC%s^%hw8LF1;FaRXhH6nY$9+d36k5 zaahJ>TK^Qy4lg7_q$23lxY8f0p}B}6;8Ha2_rK4hG5t`UirxOvdj}@kP ztPTWVX7psZSjw^QMraA;aMqFrW_Qz8Zi9eyA_mLEqrKn*ld^e4`>%R_kVC& zm#*35GlJ3W>J*S>n+(DMg&apOmt63C2hT2OqsXZ2E26L$(RVOCZgF%S7^XYTxj%2( zqjB*7b_4_5=6*rGby4=i_xtnD=XG15Zs5qi3|ycRY~kiu_l2nF;lL}qc|HFAKId~B ze}6Gf&<25xa#JFvUhs^!pbY2n&@_JHmNNpu)06tL=DU;Tms=p@LD?_?Oow<0<)2!(<=resJgvjx3VTHG(UFOPR45i?#^+?o2f;P= z=kWXqsg7ALyDGdYBI4t8%N)nLd>sm|cNekXy{h(aDp@O69c#cJq z6F!S+hWcDfVBj=%1Bww@k|PUF3^O{ED@-Jz9_d-f{s9A|XJtUp zd*e{d$v>%7#V72=E0cy~cp-@c?Y{q<6EbBqmCl#5(5IcceA?$y%_sYviM>w!cXKM8 zK84M$tdoygv1>%YER4|r+7oYMop0vhx zyq5cA$NK(s0x`<-iTN6jK55fj-5KkN{oGfcFRz?TvVC~?mfcc`-zN*j*@s8{bT{y4 zhx1!+_n3$BBmAv>^>%PjmT86z^AvKNg9@-bPj7q$uyU(ZXPND_Q2V8DMQphIl67JL z6T2e$netA8d93k`@b(I_p~8#x)`2h-A=81kyVLx6G^) zyyMZp@@xsrMM(1snwZCjE6)7hsuG(LiRrTKfmdBI5swSAbQ9{n%wY}t;#W~L#-lEZ z=vV^jr&dAjuk?^gPpI&<>-a7nhycKxhx_kTmR`*js z)y0U@^dtY41zQ`vR?&nO0#cg4oM<1uRZt|$zBL{j9bBz(|CAU*QM(MxQzmC`BHW5{ z1@Uy+Reje*P3l=V4T|{`&Vq7#^ruvgVF`*=Ov_jynqiFN-KJaC5h>AT`q}%yPgWS~ z4MK!cWwwpXoqm@(iU0s*u-m`LZFEqe!CKVL$A$5+{I!ZrmM>LKHhb(kSgo4u#`XeG zVyIUTratj~H7Lx^n;YOkuOZTW6uf>q(lAq5oQ3afo^++z>H7T# z=?JEbhM90U$@)m9fGp-lg^aR0UCq9Kx(5s+VLkIS#@*1;9{s|jH?FMgup=WA8{F61aaN6>IYkmU;GIYc!JwA(v> z`o}5^(my#nKtsqH%ppBDB8tU~IJ%|qhFCX1VBSMi(-9jY%c1nunUh)8Xi=BQSftkS zL$ig^t3A;Vg~t*pXXKnrx|s>^nxI2-IyI|u7)E~C!|2|Cy|q?hy<`aBnQ`$1lTbogU}?1ELKfEOpNUyzSNq)|7x#@F74h>uL86HF`Zfl zmNIRGZMBVck>#Y*7-5w4wa$sjOOpN2UT|wv-0-s*PRLB)jK;2Bm4W6^I{@$t4gsCo z3^e2F6m$oBX_d3sMAkc>`*1-RMa!}}StBxMF+xnYnX+}(8!5!6WyXmYD(297tcxix=yE5W7YE1ZCZS68c%E*Pi*S{Z$hJ9AT(-c z6BxBAi@phr+LT4#lttf^McpjHVXC1Q7dZcs>YHPz2?t#~FW>wdxz6Uv%Q()o8cfk`v~8AF<#YMKKB*{Q73`_Mo6hwj7ESv{ww=^)ldwBNg@NZYZR31g_n5sfnw%~kVpp;)! z*Z_X@>F}?|&c_eRvPW!L*yyrh8(h_i;^ZD;UON{=#aKaEmKi^KBjTmHiaecPygi27 zadKf#)N_i8xb(Ryjk7KPA#4eq0$&@RxwB3GtKUM_?wqE7l45|Rf=OXk39u4Sq1Lf6 zINt4R8^+ZgDFGQ|wBl7riZEkVaFgtZW$BL9Q7rX=!U7tL@rOCq>k`6x&uL5J({Z`6 z6p<1Nnw2^mm7OWo@{C$#guF8fkKvkp+G>T7*{t!->YJ8j8;dB;%#_XBNhi$;ni7EH(4!_higigMYY^D9dNsmn?TSGj#p)SQf+j+3vcflvz;g5C|Eu zvHbBSV2dw+a!G-{r@CNMGDlk&cY)~U6qAd?Y^EiBjEx5lSTr$T8?$zU8# z%q|T*Vi-+f?ufhI%!H{iwwzEDLvJYEGMu@aZK1*FTATotXoIqmg3yIYZvEwi__Q<( z7IEC%@xkc{M>~&HLXiwWSg%(RDDxZk0~+@PL5+Z_B3_jPaN$F1h<1|DbR@|+O|gq> zt)x$u#UYDmQ-x&(UM^j|5$5O;IS4Sd0{bA@IMF4aiOpd58(&t^lktCMtFNtHRl~JN zK`ctUXKSN~y2>=XXzS`)mV`vP0o)xRc{x*M*Ro`q5(90V;7(z9vR1J8yLGG1-E={~-ed|@-OGTg5G}gfN#&y?^n_Y3ef!m3p z(Xw#KCPgo}^0*5l;E^!!-i-3ofv~Ewv=AsPj;#axGTfOW1u4K!CcfYhsrGu$0}yfH zB22hhg^1uY0tIC_IDIzg|HM2)Jj5c}Dzea=)QIcT?{>3UVQNsr1X#4Ha*4UnzJm|j zvTf~U&o_r`>kc?WvI{U(oX0$-ltg+Ti9BaI-zrV?Ub&Rc>u{J+IKnSk3T608+@|Uja*Ex{7(BcSEN^ zhnc)#sc?uOn;qwNhokl}Vq&I>E0o&XJkV$Ry*?RrZ~qLc228WS2;fJ`Dc^%<7}6!? zl)l{(OIyF^dBfXvf=PW*&hxg4vaFw@e_ofRZQ5YXX{M++a$p$0$4x5>^hc!%lC8m5 zCnwFusp$A295bBs)m&w3TVL~rSy0=`S~i|+_;is^^)DqdrZYnCKpzfez?jmmUOU#& zlT}+Fd#LUQr{!64YtPEkdu`|J)gHxQ43#EryhdiyWI>7`sOA?-3|0~gx{~^Pte;X) z$-?K72<8d}Rj_2P`fJ0Cbx|%B(utUu9p*1prnrbxQ~hz@=vsAV)~x`u&b*6_H31Ypj82 zrCxSfu#T}ZW`0$RD^eL4H%in6{;^8r7pV0w7Ft!w^6CQv<*F=*g%gx~UXVzo&?}oq z^-N~GS4{u2A#5dSp#2&I2@o@t25O4~80q`cdW6LLMkA=bik@?5CMgxaB=t^e=5jAu zG0#+2s7#!kju0R-6lJb%hf~=@gSs_S=MA2-)2oz=%4(L#K)aG{)j&&8uVT&j?G&ap zdefZFW-B;E-^v}3#oeB6@F|ei3fklf(rF21VZnk78YqZM#h{&xqqsCo;9VZ7vmUvsd1`gIbgiCGmJFaj_^GUKUK_YpBCN0%0ssPTr|Nbzxep8mp@cFkC zn+v~3|3MpmbNuB{1Rt>k9N8Ls#jeHT`rro#~qsR zmiz;Zw<#BeF~XdywEQ!D3ZL-XUX@O7ynGoZBMizrh4q-5<5` z-MQhmxr3&kXHd}{HXXo5Pj}Sx`z*@3 zdre0`G}fQLYWlgrY(2t$jS)O+jFyr6pz#72jm+W~jYqgN^3goE`S*lKdIYce2ye(N zEe9AhAAnIw4>4>$goR7qsQCa{Z1VQnu<`D@mauoTL^6lP2(o6~;)X?QTuo{;6f|)B z2hRE?vC5RdD&=CA|M3$m7sjA==LQnfMNtW&);PhAquP^;YvJ*=7!-)mqxLkCeWMSl zSd*n#vOOi+Ld4jcPL_9ns?=cIa+`uEwSA9e=PA5M`GJfmIM>X}FFOhN&G=*>^rQk| z509&Dljr`R4lJ`>KZ;=qXtWNRFAh%QZBJ{QCEjLgDYZ@iOF$(vh!y6NS%A(PP{IFx zWQU7nzVKQzP3{{J>tRGb&Qg0Jwz1)c6vkOr87=qCbFrg`3lGNFVP9*JSbZZ{!aFje zl7b6rApI)=zwJqI3mhqt6)%eHkNa?9`)du5^}+heXcF?Z8mwrKXaH638$;Fjd{5&( zS$o&R)dRSC>)~48(s8g=(9DAjfre|XNu68g)Z}dwI-6h)Ai$dCi+F~?XJdcqY?IQ^ zrPD%ogqNYnf#^Ehaa5r+t1@4@&x*0~UV~06g`fRUUEA)S0i4&^fMg^qADK$S6HF~sm z@WSKSEgP@NYTd0?OU$@K4CGy`(nORA*}dYDxtSD;a#+0qwz_=eN}mbWZ??WI1m*iU zigyyOp(SecZgYi)PA$;A3A11Ge>)jCSw&&k`kSBHK;_*wV|K5&O^c|p!$ky7{Cl8T z!0i&t5|ah$#X^OIvD+C3($a#vb8ygAwf)?^wo=LU+TR6HfCVp!?030$39Ln;s9n+B zt9ygq9#cz;!|PKZ4?AW#5VJz(BIfGMqA!o1`XZ>P0wFFw9G^Q^zkIyDKE8CgNVYZp z7|Xe{9xl>2N{=;A50$ln5kGHs!VTLr@E886FZ*{D-C553|TIkO%+*e6~FVGeNzlXXki`zSJ z?t`VQ6M6FP5;dY9r}`hvA!BY5jw$vN=NIgmcN9cig@9_hi_%3DCA3%uBK}ydoGc00 z3P=d-NuYldQOiPcqg`OpgIHKhMS9&>?CuQoC~4(ieopfJWBlqvH&Nr3X?lk>QtzeFw&RcF;^rVZjTtLhs8x;C7`m;g4b|y zR|uo=EF6Dv9;iN&)jfiDcMIZx&K*ye;bQ$a^O#hZUI{5NTMMAXVZoygdp|7yzDyI! z+6(@_ogJr9OSGMx7c|TmNv7{)gA_J^OnodARL?4t8^yCnX>5|Y!sIVehwue0GPgGm z^WpHNtumPssBDGUCG(3Un?)Jf(wMU=(ANC&Nw%5EAKoNmw81p*jh)RlzKek+o&OXz~Y8)K$`uOwFFNf#v zD!WRp9kjCLnD+HG-e5sEz@;BXH}ONA#SGg(9$l^HVwDnqq$F$^e$R22Ymp|O+==D0 zxm|@y?2uJdQudmbV9k3hHHvQcBiXh5Y7t=NqlErLaeq_kcQ>5t2gFd_er3x!8r(An zryLXn_U`4Icb~}F)Dwv*#WOjs+o_e=R9iGP8X$>ITS*!$q{|QGOomA((;4OfK3qj% z3OvSGkZOAfXQtYB;CMI?g;HiSD~udweQd3D=`{_;2v&^^dap^*HkFf{+ro>T&Xb~4 z5^H4IByAZ>ZW?=1ZwUNzP*oQt?n6oe{f}T7%l=)F*be;vAXW_|U!WlkEnc*gp9Mnl zgKH8l%>yw&0q$)7g!*?1Z&2( z;6LiM0}o!CWAtv`0lD|e*&ZaF_S>jPNA`q^UJy12hz_bCYRWNk3?tNoZ!e z0P`V|ko$1Ji>l$r%_;>*7`b z^#1w9wUhXmx$LLLSCoxHiOk|iSyCiHkt)V4fOPTeSQ{~31{I1Z&(v@hqj@5JT`^%B z-aNx=Bb@YEcn^#&>B0%%N002Q+rAZ^9-qyLW@3ppA@c?Tc*L%UUh5#t%gYQ$HM)tfE5CxAE}gO_L{g zaPU)=3sKB;a#A?eblPaHzA=?oGS!F6i+7iYXttDj?f;;{ka~C9KnHFCLh#c})x|aH z=I(b4G-Y0=y$rz70hyuqDh0ybdUs|V1pH@K#C!W z2UoF9{-|H$S<4@`RaYlLnHrc9IIFa;E78ljKxfArL3Jl}ab~8S_UK6=k+@V#@)K&J zM%k*eWjGsq$A;NhnoPG@>vgo&+o_-=#k0sMY7FTGJZND@mC`nh{&vqldi8ZdoI9r0kA6kob&2bEjcN#nZSPRd{jd1P zubtM2&(J8XPBOtP_9w=b6G`gh$C?z#C@6MC!Qj)PeG5~E(Hd3u9puiCs_GCoV4fwh zSzSif`CG))m$+9}xjC_cNK3XT7ixXk>KZDm-1#@H>zYZ^6mF|~vIW`Ybg4UVs!I$4 zf7aZ&C4FZ&D!4^PF%OiYZYkn7S-U2uU2cag;nun z8`c8DbohEGBq;cz>DB4sk;0OxMjtK}{_2f}JehfR22>O{#QbKx137xv3BFSKpaMi| ziPODujl~iJt6drn7B>xlQfet0~F_mn{P>>z{cg$(PAF{~bARPDXhaT3nQ zC;D&;a~4=E{do%rTzoI!Q{UM;_dM@~J-uf!@GJ+GK><3|@yQpm9d7m`tM96;5;R$1 zSa2FI5*h6zdZOzXjm0Xt6VV*l$nEI(94_43Y)1wiYmzJ12Rz^*n9VqTgoGPrfMQKl z^?ZjX=sE9$XhmcH+s-EpK@r_%0VdAx0tt?ba_s|5i{ltK@SkMim-<(4J~m1+ax4chD2*!J>Gf#6vE^%!2)|a8hXq zvI+P5;i99g6;6yQOvN23ECf}WOGW7|QRr5{+bTR zv-b^qbkWSFy3?0;-RnGKMbryI!M1pU0m>x9{4ClAesuBi{QB+1r*l!ZQMF`9%gW?O z6v6G>l8X+tmxN-;$wGA+k&lZjnc0^rvj$}c370a%TNd@Ewi%*-1(qh__Q*nrb=|?JFin1hl?}Qhr#1V&;i5;&g*+|i#s@vrbW_S}P?a>0N2d4n zk;!OirdDBQIfiJBTC&SDOjoj{*)z|uK7Blsi&_SR-v)5V^r&eJ%j==t`XtLl#8NH2 zq==$6n6~bWT~W&pQ!+(rr14w4)KxlW;XF*`J5=4k2ia}1hJ=6fC9hjA*?y-i0Ad|; z^0YV@)0i=UY>UL!_gEc*qf4$puKZ#4x+6itYeUr7T3j2@Da*v0oCm zYv0L!*KxaWGfP4oGbd2#Z@-RjZ&mWFCGZxf+~yCs*Q$fdePuG+Je&Y{jX1DExtxYE zqh^Im)j$Yc{u22B8yWXZM71jEvoq;NEIvrnCa0owis9M+)SmCx=pmJbD94hW#d~M}w_0OaPj%HRHMK+0)lL91!wL9DJKOn#DI78gUDh*nbX+0gfbAs)1 zCfR!omnhf&rKoDfqiEo*Dl}+oh%}~=tDK7%1O8;@p-e>47eG%b3?Vj8x9diQ)BIq0 z50xn$my>;@`AlegC5d?J67AUOWA0$FjK@Keyi|yy>3_9C538z4_O=~k+dnK=yh5-fva$gpJk~bIR&7`h z9(PA??1zQUpb$E_P~1NrU`9qZMdVY(9A#{vQh=Gj;`Xc^-EuJ(J5QLVGL}3DmK+x@ z3MmB2tzj8G$OhakGj^~`qR8AK%H>&RAGUahm>-^E=!)Vo#jGP{BNvC}<*YWq+h=)G zfNG#>8Um`gPp$Q}8jE7|?D`-=^2sYup{bcQWktvynGaOFq@T)Tl|59V;6X(E^I_#$ z0QE|GyZhFtQ4p|0D;|$AK*tD>Oqb#9t#JGD=w`p)kSZ(&ARt8)W+}^@N{gTT!UTaK zpZi5UKzF#FE&k`HPKkbFhV5x}vP@OMabBPk*as4f!?8F4Ot0bSv+Pk1FnYTv%Cgut zqtD1xU5lE8sgTCPW~w_fE>iqMHT8KONO3pLHvO;EO?REWzLLP(QVWfE;^Shty8VJc zM+sB$jdg`s@h`YT;^4mJB@*jfcNsVkvfHPgTwNIk`J5A^I|2GVjnr0%zhRCHX44(f zqzA2Wm6e|kvl_~ry3>qjtBFj|Lc51J9*XL}ffv#QCShi~-ql(ly=K>_+MpC?ft9^o z$#F8@- z)2-}*pvn7Cnz&Vx2Abiy*d&|WNtpt%s`$uOB6nB9imaYDpd$&pedUqKj|KF|3a4vb zx|L^E{jFDdW|?oxmON;qV#m<13c%>E^--~~3c~h0=~$g>a_3fYMsDVmy2#{lNE8Z~ zlO|ZRo_Gs2`<=ID@-=eJ1C;e-RWLKyR+g>X1}5jYou=qnG!z~eSEWM{?+`PhR3@kM zPwuGLkLoXEHY1rCW~%UA7^%@DoT}@>z(|NZ>qhH3Z_O%iumJ*raGzm$FQ6M0U(<7{ zu8^4N>pjuEzWi$Zh707rC2dAe8lf_xB7~|PRE0~YI>g~7Q;{0YHmr{btA;K{w4Jg8 z9T039V=JZNb%BvRG=@dZ&s#ab zW@Syv5qneCq-CEWi8Q9a!>Uhjic;C5s8j3sIb}yKkIxSO#>GciR3g4c261>uFrvV; z1yw6BhF)7{M2t+uMsh>T179oS3d^LWK=+S#TtPdaAO;+FvHc4GB>HJJ_!XP9!$suP51 z-a7H@jP^|}@H&QMZ(~T_7?L-Jq+ne(?cJhp!d~ahX z{~g)MUuA30&?5iID=?QA$nJlIccZxH>Da{ub_9+@tOABTF76%^6i}s1CrX2%@l)(M zjx039rT4g5v)yI}Plv8sj0N!!qEi*a>QJ0}kdO`Zi(FNE}&r z8^PpvO0$M;^h_ zT)+W%Ch<}fEtgJ0d`on&3vVNAS6N(<>c9WFH@v z-M7BeR&_1iVd40#gh0%>-u^gVCFu1QY6>T^1D)FC*o2h)cj8B?d1;~Bph_M%M4t_J zLY+u&vqYQxN(h;()pX5bqoS4y>OHc&iqY^=_zJP4d-UJ``Ttw)-KbHVWYI@rJ}n^W>LLILN_Z)Zrr6`1Yrk=Vd_fm`EIXr$l)G(jXocfVq=5+q-zaTCzi<` zr*M?qdc3M}a@)y#JZQr;s-0Tb=%BOtKH;(HFTR!Rt}6Vj!9ZO*$Dip8V_>!t~71j8sv(U@k5mIK`rR+~a#5CW-K|$x6Dar^)u4!>iMy&sWFSof7mS0q5%d#b1vr zEA-1@YDS*bZ#k7M6L?1C6!s!J+N(p!R4N%2HrKYQB4Wi!Uz02q286xc`Q}m?CrOal zSI1SHtT9B15dFDf#ZlCU>M5zdTlO&IkQD>w}4Y;RW z;_$c*ajacK{xs>I=mp2k&cqT{i6DM3tF>8EZ10M{79hYbF(yNGJ)IN_0NWTsba2o? zWW;A#R*1CXela;Bo)fujk~UoJhII=ddwuj%2oXRUIb_D=C@sV&B;og5o0*#gQ(n zq-92WUrwz=zyf({`!e%V$7!pmu2+S1caI4iM398ZR=x(A5tL{N>-k~m9+Rx8ns`zH zu%)OBCQoh5-Q2;ayf{^HH8SXxfP2w&Mh27B%4=u1>4F99_D!19-HdP>lxG7jPe1^Qg;i^i%nDmFHGc& z%#75cO2p(ha*K&0`_xy-GptMUd$1)RaWVg)TlS%RQ+=BG(5pFP=Cdl1w?4l#J6al- z%q*q_d}aY+sEBbR0*2)R4I@roj6sM21JHgWB6e=^~-CY2HGE@szw*>)_= zuagUvA+wBtS(+~h70#>=r}iV7qiM1!IlLb(?b@rzTZ?A(g^C%36kAH#eKCb2h&emE z|KiX;vShA^TlJ4x<4^lqDiV6{l1u3Yi76CmOt#q+7M#nGwSsDitZr-RD5GQRIk^o? zp%m0D|BBlhFP9;TyQ@?}|H1!)AzEr5y==8}lzkJ`A|M9jDI0Ue(CwjvTX^Y(nMZeum!05;MRH3HA+ndcYu!#_ zEvs;r?qq}$zM-I1+{E{?Xk?m^fP~2)5d|U(&!LN*Y*2*Aiww5K!I3ZGYunQ{wn#aS``;jI(MW47f?Jm@L0?&t32)-3KA^6)G}CBE%Y;ce!(?d5qO|l4=S&0> z*+jI!IRD@O`Tr7Qeo=Q7XU8w*zx9#UCr(47$q18dnX;?jK z7ZoYlFr>>0yAYSzq#{j^IfHpwF<{ll1gOkB$+Cq0JmGdPe=qI!(i){7l~a1S3zEP; z1DH8F`#nJuT}_mY*P4B4UwbOgME+4usIXCWu$RSEVQ$I_$|V4v<)@L-!^^>&mRRnm zD=Jg%Y!B)PDGfmV%4iM#prpl?p_?7~2Loq)PPuPp`6VGKL$x%%sxEhbAXa&L8)0&b zWr`|+Q6Jg&NfsefV<6?vBVU5$fRDM~y(+F= z2uN$JI&R4)PF^L~ln#k{Wx=SW3Aby5axnZK!00Dzur$I@UMeJKl+iLo99Jd?W_?i3 zD2qnwZvnxJ?}M@ssnK4|H!=MCHb_+$cq?w{g$kk^&K|J0 zA%=tt8M!J}?*i>x$}ZYz zL~K{JyOfN}T*s?E&zr2Miza$x3#Js_7wrr7Z?Q4M%_ALwWW(xQ*yzBaEVdh>=e&7z z1o`hefbq*&>`$ke4w0=Y z8>$wszX0BPSUFl!d$?9kWMI~(5yc!NUD08}dxLCSpFw%RO)9-^a2;$vTaECW`_LEJ z^QY(Tw-3Ilh`o7te13d+dQ@FVDj%fdmA!U!q23vmzoQEo?U%ju%kiNO_rV)h{Mx6( z>*GtUyp^u&@a)Vw_f|W}DSZD^QYSdQvWLsmY6zF%syz5a<1$viK|=GVM3NfzW*0et zdeqA`(mndRq)N&_o-7OKQA{QIEI1lB(R@$VK#^?6>~v+aJdV*p)0m)Q%I+>iV)Uqb zY7x`vZ?}p8tYZ9#RdpzWUIYagWE{98wh4Azju_zaX+>oO#(B5OwtaH3^bx|svY{U5W1VTwD`?d6SCCWSJP zRu0(1BlgwKq$FpHx$?Rd*bU)$<+yT44A*%8ysL{0d4dI-YpWNX_Ew*&9Ds$<)KIgd zejU$bo?e4oj3j%GGBpoOQto_}r0U{hzh>^Wh`l-~K0!uGl{7!=>gY=8Q`13`QNcmj z!nQC}Y09J$AOM;1kP{0CBKpf*zo1gMy?u<}%$*S$A%AMC?w*l92>N_9@s|^GF)Bby z-|^A+bXseG-xT2P2mo#j$qJi%A&jh*vx2A=2=XVaaYRfb!F@Ob)$XyEThmCz+`;7~ z)z08G+Ej{DA}A?scQ`0gGDdA;!=SJQE4N&yh}E(7ZV&3Y?`-q3DQw9gSiBiF?n&4f zENtFhK<<4MxlY`mIrlp*CpVNpGfG8bRat0jG7`(4-JcAMos zK+&8NUMud;iC)4T69{VeVy&jVNQW@XuwWBM*kofQAgTCOx%#W3)wkC8R{Oq+0<9!+ z#uiyI%x1iCGF|sFopHTqHr>02^2R|oXhL=d&5-GXCK`_zOfafbaa zP$&4mL3cPJb)X94tfs(imH5y?>-#`tD;AIrTe;fIwfI}NWdxd6-f9e@fWLXi^VhGJHkDU%HZpo@O2IN%Hh9pF=i3-CwRVudCxs05qzQvvvrg7W^={W19V;MNI+pjuWl3;l zjgie4l^dzRqmx1YEh7Rn`)U@;Oj_H5%(B;*t}!V2m%s{Gz)mqMK}tk zP_~`)yR>i&P$&*Ef$bFztm}*mSKjED1C_dG+3m8bKhafLX%^Ul=Pxm1`GBK0CrgN6 z5z)Yv8=oh@`T+zdXbx01zn5pL6k~7g-h*k3(#$o&*4rwK@&>iF);dn zxLEc+`9oj)aQf_|hZ%^+myRHU$VvS&6u%_Eqy?rx6rwmmE+n2;3_>`o1f3#w{h=Zz zium*@+>1DI8XHB-b`?iO40Q!_MJzP~pJ}d|^kpTntlsTsH6&R@eUaC`oFLTK!%eu~ zd+lnhhjaR}0^MZ|An<>caiOa~y8k>m^ieU>P$mkr3}`l*9<~GM*@}~=I1t`ME<_T5 z;pZM;(}HVEkf-W(bMOb{6&YwKVhj~v+VF($o+s2uK96O<>(4HlPD5wnM$g>oB?bhQ zwOh&Q&>IA07VqJl-watM%fz4uaNx~$WSp*iDUHAyfS@N4Shed!U1SZNjN;_zK#WGK z8M#SLe0>RV$YzEHMn(DHKL_1h;gt>NkcV~0|Ax24fP{SAX2&uv3Ab9PuZky4pqW%u zuDZ6;^2rNzP~WRP9+hsSX$HE}s+fx)jKzDM#X-x)e{fsW z6{vor(HJ@@rX;T^LAsIg7XCjLCsxZrUHFC%?;K9?eJWPMN-3KLnV=ITU*l4n^kYoW z*XQSXQB_6PNLl)O?`00d{wiWp&Nl9t#Tgo6 z417Z27XlLy&n@lNRHkH$8>S$JxM*MYhOhnBwczM{jG^wG*t|Rc$yoXx@P(99WjM^( z`UTYx<*1Mu)C1*82vpi7h6&4|ARS;xhlCCoAC9WTWXSBg8rymAz=yn@FK~y>#8NyC zB`GLU*iPb>LoC!@vHhq%7DO5c({7?PViY|Mz?y&17Kaf74s$@%QI(0}C%+N#x{s(QuypL8E@q7%WC4nTefj<`b*<~}PH zExuSr9O#7}SG_a~=Le7!u9~2FDgWL=u#K_*i{2bTb=|G3Lsh(zAWZ2GT&tE@qB(%=X;bJbI3M$659u&yBrj z>8}k}UpsRapD4^=&(>aTo7qnEy|(_6mFwc(>*()gc;w$L7vkD6_PY9e8Q%D7DzmuP z)8EVR!y_l=jr8?*Gu-g+JYN8Dpug42Dt0>hq-Srm`*q8K)u=uN%glOn4Ia>IctFDg z8XoYS@PK-KI=9a-9)p=1y6&R&7|txytj{a>Fyt!PAABKe`4J@;sl1%DMrUU5iMUr+ z{GIW?O%Q&U{x}#dp{}SqekEiuA=8D%Cy?1#ZNYy(JvyjyK$Vw28OKqy@a~bp?7;>O zXbA_f0F)QS0`@ThNC<#q<6-HBA%q-5h|oMz(KVdMTt_|31I>+I`@I|b`hha=8S920s>P>8+ zpxz`I9U_7vS)!G46vQqN$W(O)*t9qWVueb@i384MZQcM2r&6|d`~i)M(Mi7=?*s{4 z0LK>-L#gOr4XR$As0R-~cofP2#AzMDLR5^Vcps{vQ>_i&D!dJR8q-!6kQ5yNcfwR; z?&uRjnW9>>VCNe<4M_G@bij9EAvwgtN^^8@6p0Oz$z@5nj ziWR9WY*_~xXhUnLA*aH&Qe(?N)s-v3A^!MG_B+4H>zUvQ)mFARbfU4Nx%+A6Jeky)ha zNIi70W)UpX^*?)yz@K5oiJta`82o^#+#BT)Ud<0t)JWg>d_~;F@c;n5@C6-YapNOjhTh+q1ZAl{sDCP+H1?wr8|52&@ zbeUlUEF0HXEuq<`c^uR9s=YvO(`dxsYq5lEE&&)$CP1Je*;Bk3ROoPJ!D$_#n89)% zIWo#yhKZ`-U?8sRkeDp?dGm6u)Cw|}0X-0KDnG|$F zzxER#spcKZHPVnYbQ^bgVQlo$l?zr!}j5 ztAJg`BxJXgnbLGzK%$4kfR~*QRkZ~d8avN8xQ55nXjo@fF|)4uGus!PW$32vM>O!H zIgHjjTTZ&VVc?8YPy?Q2MgvU5as!1eyHp1pGtQun8 zBry6Kxi#EFa=Sj9D%v7LGj9>_6(qOL;ecb3=E_F3n@o`Q&x!6(8eWuKkbMh$2#I$} zQj&F2I^3_dC+Uh&TYy>GxByq+JNJ-&C{!ih4jmqUoa8)sRXWIO#DX7~&c_ZE6uS|O zUWltu!vr{>Bk4s+fp~1t)j_Zh;>;ImAf3mZsA~x}xnB4ikTZ^8g9v@oE!N;;dVk`-;MFB(!@e=Zv0wEObDem}B#tA;~WX}OS!&vIb z5%lu}Oejo=A=(baGnh{+<2Vslaj=M^_xH^GtYy6Zg0)eEwhi5!gv6>^>kdAi>G#p)A`tOGEwR7QXIR(D^BB5drD40*|lQ)fT>SF z6RQE~+xL0zip|iJ5#%WdsRf`}yj%7*A?Wmx_ZX}(G#QNh{Dm_f!%@R@3`Up&^ez7J zq?V(%wv>q?NL4;oh*jdZ-2T0`eHIz8w6Iz0;PnbLioa8>k_xJ&E^)~Zug- zGS&c`Rpb0uCx0@IN3t!6sw3zN-miE5W-h{#46H{@Z(4^~w+!hwgr37$nBB0+s3eKS zs+Po}_2CLAb!@{KBg*ddRhDFA%aeFH3P!;cHu3HPBnFieBxv^wRQ;rec9GtPqNROS zKDF;Y!$sSQ9tUmP{Q3mh`MH*_UjHW{Xw1Zir`MO4$5&?`Pv0Kj+)J4h>+vNWPa;$5p}*kT{cB}ITmVvDuygt^AB*FI*Q-LCd;1<_S6C925?=AmWxjbDv3FNCiJ zqp|G4A)N1D4H|H~8S{+3tQ$d;ZrngEV>zepH1w9CzM6AKNTL3t>qWH|)UL9iGj|#} z#;sn^Q7wso!(Pi!Y5_U$ktJ9&xQf=|M;m7`(93cbK#^txX;w%uYqYG1$2;+Su&_`# zLiuRz;?X_`BAj|74^*ua76vJrluH8^kKU=gcd=089q{&Q19z)0n|qC3LjSR8;nH8q z*0ISNs(P)FGZ>bz)mq$AEZmC%zqR=4Sp|Lya0HFu&)l9oRVVtq7|kDcGttDfb~BM@ z_I5PUc5&p3Pagl(^8YooO}kc<3uma8T}SVhVlAwkDG7QG55tTy?%nu0uuQw7*zX(Z z+NLkrBEAH-6_$FoOsE`tRKw0{7dex_$s<0=3zxL@k_g$2Y{EoC6S{!2t)y9#e3ExxngUck|XZp47uTWJoYHboa)_zm3-p5V^s6B zW{5{OB;3cQ1hY(XQxZ^(VTDforN_Jpu*VO%BM%+8$lhW;>m^XPy#QBS>tIL)kS`aM;3UUZZsJqT$ zO3=RrJ#pqjOez>OsfukGFvPuBp73y&YGz*ogSOr8#S}6Gv;9i&i8|e6&|Zcv8i+LP zb8W1<a6IQ3+8MJ#H{qU;2 zoXQfM@sL2|s*RiWxWz9K9~WXc77eeyo&4N^->_-k6dc7V4wSpAB))puj?^{rix8YX zg};b{Isw1?Lx6T7Ha>+@m{aW32Q!m6-GW>MwV;i$#+Gugy!Wm%Jw$#8L)P7oy?s-3 zX2I5NY}>YNyJPcyGsfGBBRdMO(TVD$TmS2HC-+R5|G33j!`L( za>Hth5kN)8W|nF@Cm;sh^{+8*IH*>T<)V^gz_VHyD`J{-SA*D~D+VooP^7gxdi?4q zDvDO_ao{D_r$nn4emBp;G$jMkstw8Fb^X0&Ci~qI52wQ~$g+O7^VDHIgMOzMPgn;} zwBL^L%B1rK2B|j`mhtqKPtQX~L^jM6zZ|dB44c<>(7DLC6eT5-d4SA(vdMwcV;J zrK{5mPD}$fh>FnKR&Tzt$MKpxat>4d*2pZCc|wNXUD@cTk-b|U%^`MD;omMQ<%2|7WIlB>m5z|R zob(O{2OGpq(H&od9Zr=*dP33ihm)UtfoA^ltKqVD!uQx~0TMIwC=(0pJwCBboPf&q z027M#nCOG%(r^8P4r@Z}8-{J%$d}zA@VxH4b&tdtTRx2?7@PkARC8t572#c)a1o?#pMLiSY{U`I-orv!>E*=dLa!~37q#p z%#H=0{%b$_v^$`jTe@~U3D}!G;Cm&|YRc8O)3NSxUKTp~sNfSP(PJ&)7eZrh>@ zYz9JAaKig<=Ps(N+-fQS-%j-?A$Z{uZxcYW1tmp0AeEpoHW$mxxJUUEN#qS>Lm5Qu zt5ESPVvi563=)F@PB+ND`b7tt5PGh+iUs2}ISvW{90X^iM;G>J0s;^o2G7;)N@n0K zUlqebd#H0T>%uE|i9oKS5Tp+s*XH}vh4dq`NL-D3^f9OF6V{qxK=<}5;`41S#-)_i z!~GisC|b7#5(MIMad?)u_RlDHq=$NGS+)K7;lj|?i;V9=A>v9&5g@R^U96^0^a;C6 z4~iv_H@(7WR$>N9IWM2(<{3?Nq-2ToSEQ$Az0q#p7MR%_B$Op50~?V>fAzms0aqovOKobqmQf=8bYjg4SE(n zr$QH@a*caWTq&{*JHZ*OLRk6Q$VZ}ZDd5O9j|RW^^Sc;kpUoz*+r7XbuH-l8RF-5h z><8^_iAgK+p5svfBmgfgN36*#mL82)U8H2Xv^u1sUzDW8Ie102!cgJ`a84<}C4Y+; z90PS_T~Lqtqj?Yg9aE>nJ>o;AmYUlvl#X>Bk`UaTV}NDvD%CZ$V9iyCNVCD4XU*~D!LDUT!08uEV zHm$n}Si0s@v`A=Qh;Zys8fIROlMXgSss93MiyfDu4wVV7Lq9PuI!@ubP6-8b{s+B8 zoiUM*%?3)5`^&-lEQ(-WXGb&POCx-|4EcVLj`N-nivbi zitalJ48Z={qI3-I_y~y={&hyLF3YYnk0TQ$r)Vx*XR#GI+OJaWYHNb+I3213301TV zGXX4Gq|4(BkJ=Gxl#ENTxGOxG~R(4MvV0E*H{0c6Gv!COU!q zEjAo+Ciu0>bnWW8uS&nLQhh0@RpfyfQkDk^CN`;d*2I#%9M=5A-pP!IOu}J{yMNGR zSX#TWesm`Fvyg$6QxQBg8X(MOQ4lU3#*3+z))568bEOnYcXV9<{j@lfiOJzI&(lt^ z@VPHQNES3w4M>7aIyhCADUnme3O4y2tV&_%WkGxia-rx8kYXgdIgI7yVPfF_PBo1B z=Fx969uvNNTUXV&YTH=Cr}zXL;R1qw{A|B01O1yw7zmky1n$BK15X-+SbKmNAERQ0 zPReRDtog*z0A~E!LkP@yuI;0D$R(!Hwcn=T|tJjI?^O?*HPtc|Gf@w*BVti~T z_Tfkfg#}2CM961yA2}$WBqsS_0nhupwx8%YkVqa7MJ~*7ia6 zCm^RgB031m*wi9{XhYJQE}><&tii1!rV%H2k3R=|pH4n+O+AQ$llkJ|w~S3juin@> z5oB0sCX42X3r3PeK|TZ7TWquQjcFfSh|Mhz6Fo3B7XT~&HANG+$HA4Dzwt5908P|X zW!ljA^?JzHMZjB8bCA=|@Yvz%TN#g$z+B%*L419iaYdsS5123wN7KgzoI2uN$cN8V zJFO&m!=za2`kVq@ccFxIF7W(!R?>k}?I)Ox>3p!YKcT#P4ob}yuCP;`&2kRFl>Lb= ze2HewNPxNams%H<5#?ypW@-TkT^qd7A+HDm*FmyumhY3++{bMDrYRm>eIBh|ssrNv zTEIO7D!vH&;c8|2H+da5z$_7D__=4dDBH2mVr%yS?0fj!lagCn%Mn7+UsF> zpth=19S2I8vH&Qv@Sbb7k3ivVF989IEd6}0SV7pR@ph8V>`oGT-JNhWRJOWu5n5_y zdbQ;4Y~(=?>R!o#-4xHjOGvgq^$MV`Iiz;Lj$j==rt*$n&63v6I(UCtr5Z79nS^GG;6Ex?MBWGg;kPmFz+S2Z_KofhL)^Q12mK`NHhjfgbHFI`A zjCOa+i^;qJ@r5FRHu=)tF*2%1TF1&zg|4;F;<$9V-Uu$|>$B{IyWyQa^Ir{Cc-v7E z{Y6YA%3-5u4FAgd7fy`tk^S%Rh8K5sb2gmsB)$}JkqKcR0=X?^#(XL)iMg~T8b0$&Tj8kw-#YtH)cSy z2Hf9+c?;?qOf(yH;Lhg_-3!OOJslX`%lMOYq1IOF)fQCt9%)uZ6$f?felG@d-pmQ= z{Al1F1%y-)G!)wF)0K82+Nz(68WC z6A%b0F>(NN!!|&fnv3ajNb;+-vaR*Aa#z0ww)-R!&X#PlRSCS)CV}Ib*YZL)t-;ymyG@+EKjR^GhvJ;ff0T0(l?>IuIO2 zsh@|#u56{(wSjlBcYH?Z4gL%jkqz8Y>hWI33CeWdeb8>Se#DbSPgq$XFNoUgC;zz7 z>SofOJe@Xs+K7%&PH%=r)IXmdsLd1SFs%ZH77LyAxTMdWX`k<<8|^9L`Wn=)ge!i` z&^1FGms__YNa1L}1G7ZFDM`auhq!8_TX{`#{<=NDOBFnwxjDdpScCz0_?%)r(PN6dd*)X}cJ3)4j>#*>?cCLf~)rWODe& z#9)?ovS z<9;QsuLt}+Y>1=LjY;j)bCa!h*h{Y17F+sOYLN6srKQ2TPK~D1tx?b{jQm?Cfs?>* zGIo( zdAx;_mI}B+mO)1eIzFaF|5mT97d*98MeZmPU8vwHaPuLLrL)itL6(yoM{gBdRE_Sm zkwv|8qJd{vI#(>A@NE5D_sB|){h={gLU1F{?`d?+yQq}SYXajj#k#okqx6xql7_v{ zR0A~qvlA$NzRWGws+D*N!8Px@slviTy=V{J%0oT10$r`nqB>H%vwwfNzD<{3H+Mv? z{9>8ouj|2cd2Mav$Ww~!Dze-@U--sEr3%8z4Nak4o<84 z*2MVO*a-~@aNvvY&%AHkXw8q&l8`F?_Kikh}bDoPtQ#`1-w&SF`F z=3`U#7#RO2hj50Bg z80-PADDe+CkRT@4Z83^ce;QzmOX1%j=w`@&WY-2wvfT@ysBfh`^`<~&mbp{o5j*an z({+ZyFwYOcFTlOxf?n}T3TeNA;rMJS3#y8ke&D=RMuY)l$S9s2{+&sl|sKHXqfC?fGO|x^@Wr#FGB)V!&Ks&+M-_gYuoWq6C z)MVIuS~L>}5K)Rz$N-N;9;bM=d%|Uk)C4|yJj@?Q8ys4-JK`!dH(gZ7I_4d-Hx=LL z_H%C}1uYI$aWGfLDsNCV_fneUr;EM*&T$W^QH~8k>A%}Myf4N%j z^W~)-=*7^@SUI*=xIo?yp|zz2{wEC7Q#vd-FF7Qgo58*uk1DM`of{~&hnZ=p;mH(G zkc^TRdM#I)L zq+6#ycQ{YO+oNbgqKNr`t*iWO_i)&usd^=qCdVrs3^O67ER0_PL45s(D`UQ`Zme+N z4x_0b8E1Kr6sxE1$WBXVS5gA_PRIy#)0)7{E@O-f|udE7S* zoF4XHN`|w+BBhFLj4{u>yKjDnJBD;qZ5j0%M##V@>VQnL8#iLtl^t?KcV}X zaZSD##&t}8$W67VzTyrEEK94sUT<$#Pdk6lr^o%<)7Ing(v`wUH|mJCTI@OHo#M%p zUeK;O%KmC+e|1{MFV^_4v)b3HN`!(3ToJ8cMV{giCr{reFZ$C%ZT1TGc$^EcqGqZ6 zG|44zvI38^GLBa5b*b;y*j1Ut;uEwD{v*tCkOoGpbmy)QBeLVuKbJ6^liZtZ*H{5S z7M)@~rNSW_7R7#Xwe(pepWann3mgl*t^U$>q@Ug=rAxNE`x+SCS`=#OUuYVY%bPZr zarqXG)n-O@o=Br~;-x2yq<{6E$zf%T+=^gvGuF0x&+ASM8NBtr8)$L~FOFli^@ocF zHVP6fpDP?~JMoPJqHd^rs$DH<)5A4J>nBGnHE>IHIpj;%xpEsEJC;Vy(qb1YIpk|? za{QVd-%JnSDq>lwaLqMsa}3wG0G5?GNYe|66-h4Caysad>omnyl_Xj^#V)pLWHyy4 z4b@S9Y*QCn)DqjO>CS8DPqdiqBrayXY#wA>EY{43No$Am2Iq^~26P>@e62j^=v^n* zmY0z^6h>caB0<&k@?vA!qFo+m4yb}SFcmX7?9y4>nB$;%K=?#0Tf`(UK<&N=Of4SI_>E4?*QEGV$xtw+YHC9j$!MI-!~mtT7AhT*`1;A zQ{p~Q+F?&g1@!o2di{`d6inO2)k^pXM8d!W1hAc&g{;(nU&)QI_%)m`9tLiBAHcX; zDdf!I3Ulk(kOzN5#J^J*VpzLxkp{!)2iHl!C1($>ZLJUh-sXt0uH4rUEvea@hXl=1XE5` zsE{=ub=~0*T4?*N<6{mKa{)`>9X2sczmfR;dvT8KnPCvhwsJi>V4#Q!cP8k^O+Waw zxq3D_K2I(tH{vV_@|vzD4-RK?sdmX_#m zG0Plo(i%O7M-GxsOc^f#ME+as^G*hau4zfuo(FcmD~i0X)#UumLXm&e_?v-bU6+@} z!Idu1F4n@1U>lNPd5W8JRe~CC^yX1!$iiGD|0WYlE)I zdbUuBE+R-b50b@-uvw=7&^n`tS?{rWOZ3zeMZ#JQWT0@(+*s?F-C9*w=d$o|-Otpt z*+KVZ#PqruK9o(~bPrHwi<&d-hFK%7kQqOR^@iyiOqWtsoy&@{=A9_l->ED5=^RE% zC^clm%wW?s_Jwl{Jql$hc-^{%{9G}JmHyeJPm!2h5iU|SqAj4s8yf;c`MwlZdfi6~ zvNk^Q5hbv|OqRL5kaed5lh5nH>Fmo^YJASVp{y}sQ0B1l33k{!XEQWP#zq9zQO9f0 z8CNNL2voeJN~vBWx)XA1#awdVgDwKglLgSfcg_ql^gW~UGqYHB~`3vS(g3?vS3~VgBQFZBh<+irE+ z?A%~*`_z-;9>#2*%b1QAsV%)UOqIFo6T3 zM{o2Yo}Aoa&ZtAD?LEAXz4Z0`vNTBtX*hs3gEd4@NlGFfTPQkb6G7@p_Q`#wx$3^e zbmfXa0w$HkNEx*x=o87g#cH(3Eq9dO2qvDBgs)MtJD0?cF}O@`xO%-!wNj8#88!RT z<`nAHh~NY+C4uz~ZnuwU2Yi{qy2h&h9P(W=Q;bxPWv_w2pos&B9cY%wAuNpa-I_9~9PGg1d=BNqy)Cx{_TKp%9{K-|qC`&I?t(RO^$Hw*YBpiys1s!; z2|eEItD*s+FzJbK^vFf{1E+Xv;i<5zel~?mnsiJv=M}>>KRp90{o7lFE z1S!rpLo(sTu_!!O6&VDq_YD!#r+`Sq;r*#*+!$W1YlXQvydnijQg;H&rvgb}P-+7b z`umIuy%E}9EkY@PH(@?pnu%Co@!9n!OMVY{*nL;2ZR$XcSwMC8JS*%b0xieW`M;!V z2yg}*Wk?O5GIj@ejehYPtu3$J^OR_UT;=&e?PO^8yCT7HF3mh&vcDYXg0)y-Fv{L( zBa%>A+G0`SM04G>ib_eb$zDGno*ATh{t3#!{D?<4?-?;nJf|B{1-UvjVS$)jmyl!nD+2Va<-m$WQF*iBuQu{4R(zO}XOdlS*#E41ye%x}*Ah`FriAtcu z*1JlYc7~CmZt0ilf`VvOU7myV_EfW?I)n7KVFYzVz+c(>qaUfyu=&uMLT2(fiEY@M zg6zg)Ew48N{l1Z8_jXkB@nxXnoX$G%`*iIjUIKjPVpi}Z8%sq;0BXfb5 z;@l$K3DVk4_@}M9Q=k<;#kot^e8qYqelA5IiQOmA0wJ|J_IZ`T>MGgL1t&&GR0APR zU*stMml-=P;z`HbeSXdoLQAnE!UXq~fliK_=8R+521<9>5uAA&eHbg9IoBW$oaC5# za5twF@cl-F73$XSP1B*-?+96R%=1xV?)xk*bayL+k6^~_Ad9KF7*yG{VrtTVIs zMph@^;_&6oPlj>EV*{N4te@kEUfm+KQDkxx9i_@?+d^vtM2wrZsbv_Z+DYA_*&2&v zyR!&L#yPR!fv`hE%wUY|qPiwWOFP$AxFm;Ddt*OVo!kCrId1jO=EtA6{-4dZ(dg?( zRdd^Esut|v4v6@a}=djOBN$`-?aKWBHdsPc{uHcvO)JG6M6 zkk_J5KDeF#hCibB?UvT_496F8};-_Eoad8h$Ch z#TCY|ws>Cc7aAOGK_3Gm{PpUUoBdpMEXcLY{noyLL6&Xn2Ky9nV7oae0>qZ{*E~yg z{oDLGF+y0gLjs{rUY~I1CM~VY=$FA2ypB&VRhmc^Oq7{u=gV=VXz-R-fHpB zwIR(WM0PjWP>SFOc|smuQh<*qTc3pHS8MnSf~H?7%Fsr3kOy(__c728c<_xnh=;if z5Tn`24#7UJ!AZAr#16xjsI@T?K0f92GyRCn>_K3H- zOm~Ll5jPQu{*XjF0+cr?7p3mk9+EkLsl#tz56{sGuzUR5yBmiPLw(K!RcPe zjGKTw_w`hR9#X$AT_9gbyl%i}moMO2n!_K!@C5|dtpk17i89j*`k#f*H2pr33$Lw^ zuMDf6y(nYuvl5@u#cqA$A+lSJD^La#%G&rKCbNrK85CW@71GK7y6KQ|6m7n%Dr!#_XpC?Hv9k| z%&x8<47~eCKNFlI)3j`SqxnM%&sNWL3QukPmR_42{C3#{t#a`jC8M^B2Q6og8xL)^ z|BvC)zduQW+y4uh{wr|)|0nU!Cuq&}8F+xT4(2t054Jim$vON~Pd0Q;h>Hc<_ z$8-P8<3Y+*(RPM}7K=dE~(vVyE$W5G~79pkvAw=hoDwv-vlst6!_SUuu2qmUjOm;Ige3{XZ2n#YR=f939;?Q zWFtE#Bc@IZm7F?NEvs=T!VHgzes=1YM!^INZ?dr0j8y(`c%Rj~iLu@qchL zc3ct-CiKjzSBUorly@{&>9e3U02ulLst_~`4-~_$uP#`%aOE${yd|=`{4uhHW_*R{ z6KZSs)5I2q6k|}u5ym7n6Xm;zzg&I&{7g1Q4jL6g+_5^}Ry2}u5EB|uA{^M*Y+$VL z!JAuKy@tk4`Pr0>>u+;J429a z6rlQ`g~H#yM1n<#m%7>)uIu&!+$#Hkq=)7JzZ7REs<$y049MmCg&u%@YGD9uxQwB_ zY;z0>{NXBaQ_wMda;CAIaG$S(fy|${o&+pBaadK!kV%=`!(w&a>Xq*qGAfF!4RZAZ z`HkbVuP#eF=FYtWKE27UH)b|{*?}W#;Ol8rMsrb=kJkgJcFLZsQ=cE*0~JZN2(g)f zvPafWcr>@E>!5C3eYbcuyicpj`LSAO01?KhZ9XH${Y0R^Kec<=97`!_MI)2Wi7}42 zE+JwvcMD_FOSjbejY?xl1-;kZ-2Hz05Cmho6Jtj(k-_09dyIY!;5%h}85KUS*!_7b zg4q4N(oCBo54I@D|NC(%bz8>JiU6U5p>s0?ZacToo(k9OAUChEacvC`(INEo>QrI# zRiqTpJ0fa~9lzVYRmAw-(#{wth&9Gw+y<2|rp=X)kYyH;IB;YWw@c9+2(i(X^Lln& z&ml&K>KChHT@9P0hb)vcZ^5l2uhanmpZKl$?1yb}uDq{de=Q~qyDso~EC9>y0I8i~ zKz%u^`j4;41)IP=j!b|5OOh%n88jvDQZ7dcjZRgv!l5_BpoGAsv|OC&q=q-l%yTnd z>ldcPsjplPA`&I}(*cGa6?exqUIZwc0aQFzB)x!4Aa{mrOdF#?*B9*RRE}!g$ofO| zU)tJF<|diHf$Qt}5=j9d99)xVr5aE1!bE|$hY_$iI>~9!DoHo@)j5 z0J-|Ty?j00NJ(t1yrQoL^+@*Spz;ZIZ7KCv3Ln}LIO{|2Btks9lzT;7fPK&kkW(17 zVW|AN=VLWQ@ZYF8n*Y!aAds_M?MwH>@Pmc6J2dng4-LCUP#O1xHj3tOCUZiw*QMyJ zKozMwj6=U`tFpxq41DH%ac^`JaO=@I2e7yAVxNF5=Ugb0_0CyNg13mA@aknRgUa=g zverDJvRWLSDOK%pRwe|9(qA@c4`BA=OU_a)vn@@1SN%*s?*Gla(jAsa#zV%HQGGjgWj z=`q;;zB)AF?ymLk9GaXxYyW6PC9aeU7Pou#XSL&AUaDBwlN_mD4zq`aI9m6}AB&ro zEb{S1Y4T-r)*-lTQ$CffoT~;f5~s3AQwk7R(E<$P51hLvXwz#G1Rx@G?&7e;oYi zNFY;yQvJv5 zOG9J6FwuS&R!=&keX_ns^QzR1BfZ=3MJ^8(47r^U3*nmDHx7w}NhxT9ad-R;YJ9eN zqe+c!f7l2hZ>=i~j219qVn&+j${`DQqFJ>S2jqe|y1EGg+$tMM_Z#jbEANYtH2e}z zjS*ZPkCY}!EA^n2w(3%`>xI>+$!e|jy)wpBNzp8s*D^UpSqj{56~rMpNihr6Zmq3! zslPZFW=@Tn$9~T_eNSC{x(B;CI8v}JQxcE2p9gyU5OXtoNn+Rk=@TWlyg*LdZ3d*D z3L!n$S^?i_Y53D3!CsN;!yI2&3I5^&)-+h{M%qlIls}Dy`%6dMld(PIA?;#%r9qMn zC-z5TM`2!JWMy>GQd&Zm07#Rd5Io>BbGoZxQ2pus2BXHziHK|zWp;wIl)5t?lKv!^ zaeFHIH~YJU_*-k`Lhsg`zv#Ch!ROD|zq8;w?8~3;?MAiuTVC`V{_`8^AmDiag{19WPidzfutdJRBjOCP_`@};vy)5EbANyl^J>V*Yp?< znsc9Be=7Qd2-ZyLy(3KynPRt$Y=tshLDw+^`<$#eYW1S=y|(#j=54>l_WR4nJ!=e(U*SaA-q`}kIk zNGd%C+{6uft;<}dv9~WiJL8wOj7Y!nya;M7%|@I9y2-9>s_~cT0jj#%zY{$VB>CWY zlQ-vr0_CD4Iz}U?-x1!FQJdgEPNp_-o!Ixy39t~KMRh=Er4PT^P^K|E2Md?<&aXSpp-WO0^(m|lr&+%MjFe!AcwQxS3l&7QF!tzNh;8Y z#807-Wg%XJ9aoI!StKB;C;Ae-w>>Aa>r{sZGB=84rhOlez?n5Zn8>+NSjilyfm>&a zuj`=)nFsN$!I=UjNAQZc-YiJN(|-6}xrcl(b2bZ}8k-OxL{f8t6vAcGE=Z z5K_i-nX|8)3-}Y7p;WfcDQTMeV59I&T zE?MS?*1}f{F^;XNXv{Cv<6UlhT@#1;T=w3v zo*PW|${>~9J2N=&wU8f%(0Ca#)gmX5013>LGF6(u;Gi zzaouHt0HXU`%xjiTe&zvItDr=qCpi5@sTCLJOonOkXoM!JkqX9jp_>+_-bP01HZ~r zu05&zp?#bzxaEuV3uyKARi-GF`@s9fWha?9p-wAf8gd(dIVuU!9a-Q61QlEXiMRX8 zp|WbH!b~4(Lnh7hHEjsFU8rImMU*uS=Wp1WryjKBFZsJ-_6zgqNlniUOwYHd?ncg) zVjyWA3$tNZXtJy30$_LXPnGlkfIB>Q3yyx4tCopCn;dM6&50PWYiXRqm?|!)AVW_g zf09V6F#@L=o=0HrlK}dIn{taIoA5x}Nw`a`3(kf;VAJAAj+E4$Zz;SmR9{YqA~n1g zQb#%P@t#wXr2Yt7U4}UmgF0$@bGb{3Yz7GRg6DH6Xfuio2yWW!n294DP5iytVj9S` zgbP25Bvs6lT&z;8Lu)#Gj_-Hk3A5|0EONp~Gx&upn90Z&bxElMHyaUBF4vO>$(T9k z;@6`!Mh+Uk-1N^!m^T{fp_>e~F={aBJkv8J93MR;lv5-9YhEIT-7;B(Vo^HsNKI2( z`JO}X+}dQhFeJZj?hl`m)je=&eeAx6FjCUKor$eGU^37 zfQs3W^4rbB>j4anyvW=yoLccPfC}p?g8m3*JK#0JwraHUFv$=zR{Mhg#tXqdTfG$uLulbV>csKXTvn-0NOAHTsgA@)Xg>u7mLr z!Bp?YbA$2j2yKx5YL42Icd}9iovho+iY(9l0fVyo!3>*Du|}X${;w8MS<#0rLsXCM z3JCRN!=?!gdH;~+jLzwx^4-47WgJWL10DU)5TMOPzNltispNJ)k{FejqLNINp~5y{ zjAFH`zIMg371vnb_|iJY*Wc!6P__}!POZVhbD%q;yQ@zwQBswX+G1uhP<03-KA~Ac z9u-k(o;Z2|l%uImq@?)$b(E_sEqYO3$no35Z!W9}oU&jm^bed=^JVbX5Qiz+j z=xuy1w<(QX1@~JI*~4JllIV*O`cJm(yAB8&c|yU$6BMSnltfh0M1gAX^h31Wu*^v` zr_M}Ft4DeSHxUX7TN=%q$#Q036ecTyi?nH}LpUFsts>*^qz`d~5s94yx-NjlC5Kkz zByhQ&cDV_GV*(&BC%ak1mL#B_Rkv;CMT>9yq=6}?4439x1dR-`5}mAR0{MWOf0JW- zQ5^3M3sW_cpCW>{)p8}0l)>lMo@%hr2(of>hV;_8N>lFGGzk7LWnQzPNNhx<^jtdM zCeyKX!4Jw(?*hGHwqhTitdt~M^utIz0!^XS$6gKCfk2=~A7rs>DyLCbO*K2oIvsQ1 z$ZM3mAvv$T+B6Q?CPM^L}{57U~Q_NTfl7g2>PLk)^ zpC5Y{1zje_3l>}>oQ$DFB~Ywb%;MWZHoX-43-NllEAjd-1HBXx9b4Z6;{gk6c7ezd zN~J~0dhngV$KdRj>h$cF-ppoiQi)4U?c&G%oefUjXPic7W49U$H;e(CfjHUn*rV6* zRzAvySwO+54|F<$9m@hdZG($`jc#$e+E*ey9U`z=GGrF%R&qK1?0VvDAiFXrnzNC` zpEd*)^tW0NpKAl=b@ywLd{jSEihQRGHF$o8>hPc_(8397IcljdoOH*&3PC9 zxuTn?>`4RZu89n(&xnf*5K)JG0Zw)n*))fB7gdK0Z#>tQA^eUW%LeLcr$b8t!rYld z>Hol_)1$uU{*W$_ACnKg@l@%fG?Wkqdxl+k6&r37l~4j33D^3!wiUs;yRJ}fB-IF0 zmvIjN8fq4Ql5^#iKWRq$W&{SfPtKg}mgcL3I2G!G* z6diAF*)hP42)*4FZ_E|)WXgjiZiCip1W$*c4pLLbUNq=(Cj{>d$eIgOh>1`&Awdqn z0z%6VB??6ofb4Y4zX!7x8)L>G!&~r`1HoCVMA%I_*2s&bHPK)AH}c!8BG^(P#HZb3 zyB3S?=T0C%ur$$NUt~Nb0I-wFN5|Yk0>D?@4fJLdBLAr?FxI=q^kKvxZ~A1w<*}0} zLgIT_GKw|!1=Rp^If39()f?w_E3x_dC9+mjjJGoPaE?5Wyli9b;2!+c!R=#iVsE?u zHwcfjb0a@{S*_vi56PazNQ*o95fbS+IMPDp&~>D#=(P#{;6*MPmA5{y1yq8rZ9t5yE$|NdKM8dng; zQJtEjwx-BK9J=GOM)^Rx_>B%DbCmSkVo8fL$L2H0#=6obssW~2q8Oz*)k&Q9wY^Zh zSSxlKJyQea@0*Lg`F!`*oUiEfPSo{=+F8#hO2<#gx3l0q?7A0y%e`X3_k`SKXT0!T zUi2A$>n85n8Y7vq`=F&TZ^kDu&rVfOsVB^PrbYTg&tR8VZn#QI3p;!GSc)jznha80 z;#=g$>TlJ<*WE}(P;--(se!9r-i=PRCvi*n4{Fo)QRP% zUxxVX=z{*Tex*Vdb_pi$#A`yqIVua+({y5O`;I|vscYfAyy4iq(sVjDR(0k}QJdSF zn=#y)LQC~l#{_+X FHEM/lib/openzwave_deviceconfig.xml.gz +# + +print '', "\n"; +print "\n"; +foreach my $file (`find $ARGV[0] -name \*.xml`) { + chomp($file); + my $name = $file; + $name =~ s+.*config/++; + next if($name !~ m+/+); # Only files from subdirs + open(FH, $file) || die("$file:$!\n"); + my $buffer=""; + while(my $l = ) { + next if($l =~ m/^<\?xml/); + chomp($l); + $l =~ s/^/; + $l =~ s/\r//g; + $l =~ s/^[ \t]*//g; + $l =~ s/[ \t]*$//g; + next if($l eq ""); + if($l !~ m/>$/ || $l =~ m/^$/) { $buffer .= " ".$l; next; } + if($buffer && $l =~ m/>$/) { $l = "$buffer $l"; $buffer=""; } + $l =~ s///g; + $l =~ s/^[ \t]*//g; + $l =~ s/[ \t]*$//g; + print "$l\n" if($l); + } + close(FH); + print $buffer if($buffer); + print "\n"; # Some files are not NL terminated! +} +print "\n";