From 5dee66554172d91f726a7e98b48686f490b53a80 Mon Sep 17 00:00:00 2001 From: mrsidey Date: Sat, 1 Oct 2016 22:22:51 +0000 Subject: [PATCH] 00_SIGNALduino.pm: Added Version 3.3.0 with new Firwmware and new / updated logical modules: 14_Hideki.pm (updated) 14_SD_WS.pm (new) 14_SD_WS07.pm (updated) 14_SD_WS09.pm (updated) 14_SD_WS_Maverick.pm (new) 98_Dooya.pm (new) git-svn-id: https://svn.fhem.de/fhem/trunk@12233 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_SIGNALduino.pm | 1189 ++++++--- fhem/FHEM/14_Hideki.pm | 8 +- fhem/FHEM/14_SD_WS.pm | 395 +++ fhem/FHEM/14_SD_WS07.pm | 8 +- fhem/FHEM/14_SD_WS09.pm | 189 +- fhem/FHEM/14_SD_WS_Maverick.pm | 298 +++ fhem/FHEM/90_SIGNALduino_un.pm | 6 +- fhem/FHEM/98_Dooya.pm | 1251 +++++++++ fhem/FHEM/firmware/SIGNALduino_nano328.hex | 2246 ++++++++--------- fhem/FHEM/firmware/SIGNALduino_promini328.hex | 2245 ++++++++-------- fhem/FHEM/firmware/SIGNALduino_uno.hex | 2246 ++++++++--------- 11 files changed, 6184 insertions(+), 3897 deletions(-) create mode 100644 fhem/FHEM/14_SD_WS.pm create mode 100644 fhem/FHEM/14_SD_WS_Maverick.pm create mode 100644 fhem/FHEM/98_Dooya.pm diff --git a/fhem/FHEM/00_SIGNALduino.pm b/fhem/FHEM/00_SIGNALduino.pm index 5428fd988..8c52ef9f6 100644 --- a/fhem/FHEM/00_SIGNALduino.pm +++ b/fhem/FHEM/00_SIGNALduino.pm @@ -1,10 +1,10 @@ ############################################## # $Id$ # -# v3.2-dev -# The file is taken from the FHEMduino project and modified in serval ways for processing the incomming messages +# v3.3.0 (Development release 3.3) +# The module is inspired by the FHEMduino project and modified in serval ways for processing the incomming messages # see http://www.fhemwiki.de/wiki/SIGNALDuino -# It was modified also to provide support for raw message handling which it's send from the SIGNALduino +# It was modified also to provide support for raw message handling which can be send from the SIGNALduino # The purpos is to use it as addition to the SIGNALduino which runs on an arduno nano or arduino uno. # It routes Messages serval Modules which are already integrated in FHEM. But there are also modules which comes with it. # N. Butzek, S. Butzek, 2014-2015 @@ -22,29 +22,39 @@ use Scalar::Util qw(looks_like_number); #use POSIX qw( floor); # can be removed #use Math::Round qw(); + +use constant { + SDUINO_INIT_WAIT_XQ => 1.5, # wait disable device + SDUINO_INIT_WAIT => 2, + SDUINO_INIT_MAXRETRY => 3, + SDUINO_CMD_TIMEOUT => 10, + SDUINO_KEEPALIVE_TIMEOUT => 60, + SDUINO_KEEPALIVE_MAXRETRY => 3, + SDUINO_WRITEQUEUE_NEXT => 0.3, +}; + + sub SIGNALduino_Attr(@); -sub SIGNALduino_Clear($); -#sub SIGNALduino_HandleCurRequest($$); -#sub SIGNALduino_HandleWriteQueue($); +#sub SIGNALduino_Clear($); # wird nicht mehr benoetigt +sub SIGNALduino_HandleWriteQueue($); sub SIGNALduino_Parse($$$$@); sub SIGNALduino_Read($); -sub SIGNALduino_ReadAnswer($$$$); +#sub SIGNALduino_ReadAnswer($$$$); # wird nicht mehr benoetigt sub SIGNALduino_Ready($); sub SIGNALduino_Write($$$); - sub SIGNALduino_SimpleWrite(@); #my $debug=0; my %gets = ( # Name, Data to send to the SIGNALduino, Regexp for the answer - "version" => ["V", '^V\s.*SIGNALduino.*'], + "version" => ["V", 'V\s.*SIGNAL(duino|ESP).*'], "freeram" => ["R", '^[0-9]+'], "raw" => ["", '.*'], "uptime" => ["t", '^[0-9]+' ], "cmds" => ["?", '.*Use one of[ 0-9A-Za-z]+[\r\n]*$' ], "ITParms" => ["ip",'.*'], - "ping" => ["P",'OK\r\n'], - "config" => ["CG",'^MS.*MU.*MC.*\r\n'], + "ping" => ["P",'^OK$'], + "config" => ["CG",'^MS.*MU.*MC.*'], # "ITClock" => ["ic", '\d+'], # "FAParms" => ["fp", '.*' ], # "TCParms" => ["dp", '.*' ], @@ -56,6 +66,7 @@ my %sets = ( "raw" => '', "flash" => '', "reset" => 'noArg', + "close" => 'noArg', #"disablereceiver" => "", "ITClock" => 'slider,100,20,700', "enableMessagetype" => 'syncedMS,unsyncedMU,manchesterMC', @@ -73,10 +84,15 @@ my $clientsSIGNALduino = ":IT:" ."Hideki:" ."SD_WS07:" ."SD_WS09:" -# ."SD_WS:" + ."SD_WS:" ."RFXX10REC:" - ."SIGNALduino_un:" - ; + ."Dooya:" + ."SOMFY:" +# ."SD_UT:" ## BELL 201.2 TXA + ."SD_WS_Maverick:" +# ."BresserTemeo:" + ."SIGNALduino_un:" + ; ## default regex match List for dispatching message to logical modules, can be updated during runtime because it is referenced my %matchListSIGNALduino = ( @@ -89,8 +105,13 @@ my %matchListSIGNALduino = ( "7:Hideki" => "^P12#75[A-F0-9]+", "10:SD_WS07" => "^P7#[A-Fa-f0-9]{6}F[A-Fa-f0-9]{2}", "11:SD_WS09" => "^P9#[A-Fa-f0-9]+", -# "12:SD_WS" => '^W\d+#.*', + "12:SD_WS" => '^W\d+#.*', "13:RFXX10REC" => '^(20|29)[A-Fa-f0-9]+', + "14:Dooya" => '^P16#[A-Fa-f0-9]+', + "15:SOMFY" => '^YsA[0-9A-F]+', + "16:SD_WS_Maverick" => '^P47#[A-Fa-f0-9]+', +# "17:SD_UT" => '^u30#.*', ## BELL 201.2 TXA +# "44:BresserTemeo" => '^P44x{0,1}#[A-F0-9]{18}', # Bresser Temeo Trend (3CH Thermo-/Hygro) "X:SIGNALduino_un" => '^[uP]\d+#.*', ); @@ -125,10 +146,13 @@ my %ProtocolListSIGNALduino = ( preamble => 'r', # prepend to converted message postamble => '', # Append to converted message clientmodule => 'SIGNALduino_RSL', # not used now - #modulematch => '^r[A-Fa-f0-9]+', # not used now - length_min => '12', + modulematch => '^r[A-Fa-f0-9]+', # not used now + length_min => '23', + length_max => '24', + }, + "2" => { name => 'AS', # Self build arduino sensor @@ -263,7 +287,7 @@ my %ProtocolListSIGNALduino = ( }, "10" => ## Oregon Scientific 2 - { + { name => 'OSV2o3', id => '10', clockrange => [300,520], # min , max @@ -271,12 +295,11 @@ my %ProtocolListSIGNALduino = ( modulematch => '^(3[8-9A-F]|[4-6][0-9A-F]|7[0-8]).*', length_min => '64', length_max => '220', - method => \&SIGNALduino_OSV2 # Call to process this message - - + method => \&SIGNALduino_OSV2, # Call to process this message + polarity => 'invert', }, "11" => ## Arduino Sensor - { + { name => 'AS', id => '11', clockrange => [380,425], # min , max @@ -287,10 +310,9 @@ my %ProtocolListSIGNALduino = ( length_min => '52', length_max => '56', method => \&SIGNALduino_AS # Call to process this message - }, "12" => ## hideki - { + { name => 'Hideki protocol', id => '12', clockrange => [420,510], # min, max better for Bresser Sensors, OK for hideki/Hideki/TFA too @@ -300,10 +322,12 @@ my %ProtocolListSIGNALduino = ( modulematch => '^P12#75.+', # not used now length_min => '72', length_max => '104', - method => \&SIGNALduino_Hideki # Call to process this message - }, + method => \&SIGNALduino_Hideki, # Call to process this message + polarity => 'invert', + + }, "13" => ## FA21RF - { + { name => '21RF', id => '13', one => [1,-2], @@ -354,14 +378,14 @@ my %ProtocolListSIGNALduino = ( name => 'Dooya shutter', id => '16', one => [2,-1], - zero => [1,-2], - start => [16,-5], - clockabs => 300, + zero => [1,-3], + start => [17,-5], + clockabs => 280, format => 'twostate', - preamble => 'u16#', # prepend to converted message + preamble => 'P16#', # prepend to converted message #clientmodule => '', # not used now #modulematch => '', # not used now - length_min => '40', + length_min => '39', length_max => '40', }, "17" => @@ -373,6 +397,7 @@ my %ProtocolListSIGNALduino = ( #one => [1,-5], #zero => [1,-1], sync => [1,-10], + float => [1,-1,1,-1], clockabs => -1, # -1 = auto format => 'twostate', # tristate can't be migrated from bin into hex! preamble => 'i', # Append to converted message @@ -583,8 +608,8 @@ my %ProtocolListSIGNALduino = ( clockabs => 300, # ca 300 us format => 'twostate', # there is a pause puls between words preamble => 'u30#', # prepend to converted message - #clientmodule => '', # not used now - #modulematch => '', # not used now + clientmodule => 'SD_UT', # not used now + modulematch => '^u30', # not used now length_min => '12', length_max => '12', # message has only 10 bit but is paddet to 12 }, @@ -626,12 +651,12 @@ my %ProtocolListSIGNALduino = ( one => [1,-8], zero => [1,-4], sync => [1,-15], - clockabs => '500', # not used now - format => 'twostate', # not used now - preamble => 'u33#', # prepend to converted message - postamble => '', # Append to converted message - clientmodule => '', # not used now - #modulematch => '', # not used now + clockabs => '500', # not used now + format => 'twostate', # not used now + preamble => 'W33#', # prepend to converted message + postamble => '', # Append to converted message + clientmodule => '', # not used now + #modulematch => '', # not used now length_min => '42', length_max => '44', }, @@ -736,6 +761,175 @@ my %ProtocolListSIGNALduino = ( }, + "40" => ## Romotec + { + name => 'romotec', + id => '40', + one => [3,-2], + zero => [1,-3], + start => [1,-2], + clockabs => 250, + preamble => 'u40#', # prepend to converted message + clientmodule => '', # not used now + #modulematch => '', # not used now + length_min => '10', + }, + "41" => ## Elro (Smartwares) Doorbell DB200 + { + name => 'elro doorbell', + id => '41', + zero => [1,-3], + one => [3,-1], + sync => [1,-15], + clockabs => 450, + preamble => 'u41#', # prepend to converted message + clientmodule => '', # not used now + #modulematch => '', # not used now + length_min => '20', + }, + "42" => ## MKT Multi Kon Trade + { + name => 'MKT motionsensor', + id => '42', + zero => [1,-3], + one => [3,-1], + start => [-28], + clockabs => 550, + preamble => 'u42#', # prepend to converted message + clientmodule => '', # not used now + #modulematch => '', + length_min => '24', + }, + "43" => ## Somfy RTS + { + name => 'Somfy RTS', + id => '43', + clockrange => [610,670], # min , max + format => 'manchester', + preamble => 'Ys', + #clientmodule => '', # not used now + modulematch => '^YsA[0-9A-F]{13}', + length_min => '56', + length_max => '56', + method => \&SIGNALduino_SomfyRTS, # Call to process this message + msgIntro => 'SR;P0=-2560;P1=2560;P3=-640;D=10101010101010113;', + #msgOutro => 'SR;P0=-30415;D=0;', + }, + "44" => ## Bresser Temeo Trend + { + name => 'BresserTemeo', + id => '44', + clockabs => 500, + zero => [4,-4], + one => [4,-8], + start => [8,-8], + preamble => 'P44#', + clientmodule => 'BresserTemeo', + length_min => '64', + length_max => '72', + }, + "51" => ## Bresser Temeo Trend + { + name => 'BresserTemeo', + id => '44x', + clockabs => 500, + zero => [4,-4], + one => [4,-8], + start => [8,-12], + preamble => 'P44x#', + clientmodule => 'BresserTemeo', + length_min => '64', + length_max => '72', + }, + + "45" => + { + name => 'revolt', + id => '45', + one => [3,-1], + zero => [1,-3], + #float => [-1,3], # not full supported now later use + sync => [1,-24], + clockabs => -1, # -1=auto + format => 'twostate', # not used now + preamble => 'i', + clientmodule => 'IT', # not used now + modulematch => '^i......', # not used now + length_min => '24', + }, + "46" => + { + name => 'EKX1BE', + id => '46', + one => [1,-8], + zero => [8,-1], + clockabs => 250, # -1=auto + format => 'twostate', # not used now + preamble => 'u46#', + clientmodule => '', # not used now + #modulematch => '', # not used now + length_min => '16', + length_max => '18', + + }, + "47" => ## maverick + { + name => 'Maverick protocol', + id => '47', + clockrange => [220,260], + format => 'manchester', + preamble => 'P47#', # prepend to converted message + #clientmodule => '', # not used now + modulematch => '^P47#.*', # not used now + length_min => '100', + length_max => '108', + method => \&SIGNALduino_Maverick # Call to process this message + }, + "48" => ## Joker Dostmann TFA + { + name => 'TFA Dostmann', + id => '48', + clockabs => 250, # In real it is 500 but this leads to unprceise demodulation + one => [-4,6], + zero => [-4,2], + start => [-6,2], + format => 'twostate', + preamble => 'U48#', # prepend to converted message + #clientmodule => '', # not used now + modulematch => '^U48#.*', # not used now + length_min => '47', + length_max => '48', + }, + "49" => ## quigg / Aldi gt_9000 + { + name => 'quigg_gt9000', + id => '49', + clockabs => 400, + one => [2,-1], + zero => [1,-3], + start => [-15,2,-1], + format => 'twostate', + preamble => 'U49#', # prepend to converted message + #clientmodule => '', # not used now + modulematch => '^U49#.*', # not used now + length_min => '22', + length_max => '28', + }, + "50" => ## Opus XT300 + { + name => 'optus_XT300', + id => '50', + clockabs => 500, + zero => [3,-2], + one => [1,-2], + # start => [1,-25], # Wenn das startsignal empfangen wird, fehlt das 1 bit + format => 'twostate', + preamble => 'W50#', # prepend to converted message + #clientmodule => '', # not used now + modulematch => '^W50#.*', # not used now + length_min => '47', + length_max => '48', + }, ); @@ -768,10 +962,12 @@ SIGNALduino_Initialize($) ." flashCommand" ." hardware:nano328,uno,promini328" ." debug:0,1" - ." longids:0,1" + ." longids" ." minsecs" ." whitelist_IDs" - ." $readingFnAttributes"; + ." WS09_WSModel:undef,WH1080,CTW600" + ." WS09_CRCAUS:0,1" + ." $readingFnAttributes"; $hash->{ShutdownFn} = "SIGNALduino_Shutdown"; @@ -828,7 +1024,7 @@ SIGNALduino_Define($$) $dev .= "\@57600"; } - $hash->{CMDS} = ""; + #$hash->{CMDS} = ""; $hash->{Clients} = $clientsSIGNALduino; $hash->{MatchList} = \%matchListSIGNALduino; @@ -850,28 +1046,34 @@ SIGNALduino_Define($$) SIGNALduino_IdList($hash ,$name, $whitelistIDs); if($dev ne "none") { - $ret = DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit"); - - - if ($hash->{INACTIVE}==1){ - DevIo_CloseDev($hash); - return $ret ; - } - - $hash->{Interval} = "300"; - InternalTimer(gettimeofday()+$hash->{Interval}, "SIGNALduino_GetUpdate", $hash, 0); + $ret = DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit", 'SIGNALduino_Connect'); + } else { + $hash->{DevState} = 'initialized'; + readingsSingleUpdate($hash, "state", "opened", 1); } - $hash->{"DMSG"}="nothing"; - $hash->{"TIME"}=time(); + $hash->{DMSG}="nothing"; + $hash->{TIME}=time(); - Log3 $name, 3, "$name: Firmwareversion: ".$hash->{READINGS}{Version}{VAL} if ($hash->{READINGS}{Version}{VAL}); + Log3 $name, 3, "$name: Firmwareversion: ".$hash->{READINGS}{version}{VAL} if ($hash->{READINGS}{version}{VAL}); return $ret; } +############################### +sub SIGNALduino_Connect($$) +{ + my ($hash, $err) = @_; + + # damit wird die err-msg nur einmal ausgegeben + if (!defined($hash->{disConnFlag}) && $err) { + Log3($hash, 3, "SIGNALduino $hash->{NAME}: ${err}"); + $hash->{disConnFlag} = 1; + } +} + ##################################### sub SIGNALduino_Undef($$) @@ -902,7 +1104,7 @@ sub SIGNALduino_Shutdown($) { my ($hash) = @_; - SIGNALduino_SimpleWrite($hash, "X00"); # Switch reception off, it may hang up the SIGNALduino + SIGNALduino_SimpleWrite($hash, "XQ"); # Switch reception off, it may hang up the SIGNALduino return undef; } @@ -914,7 +1116,6 @@ SIGNALduino_Set($@) { my ($hash, @a) = @_; - return "\"set SIGNALduino\" needs at least one parameter" if(@a < 2); if (!defined($sets{$a[1]})) { my $arguments = ' '; @@ -924,15 +1125,17 @@ SIGNALduino_Set($@) #Log3 $hash, 3, "set arg = $arguments"; return "Unknown argument $a[1], choose one of " . $arguments; } - my $name = shift @a; + my $name = shift @a; my $cmd = shift @a; my $arg = join(" ", @a); + return "$name is not active, may firmware is not suppoted, please flash or reset" if ($cmd ne 'reset' && $cmd ne 'flash' && exists($hash->{DevState}) && $hash->{DevState} ne 'initialized'); if($cmd eq "raw") { Log3 $name, 4, "set $name $cmd $arg"; - SIGNALduino_SimpleWrite($hash, $arg); + #SIGNALduino_SimpleWrite($hash, $arg); + SIGNALduino_AddSendQueue($hash,$arg); } elsif( $cmd eq "flash" ) { my @args = split(' ', $arg); my $log = ""; @@ -998,13 +1201,17 @@ SIGNALduino_Set($@) $log .= "\n\nNo flashCommand found. Please define this attribute.\n\n"; } - DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit"); + DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit", 'SIGNALduino_Connect'); $log .= "$name opened\n"; return $log; } elsif ($cmd =~ m/reset/i) { - return SIGNALduino_ResetDevice($hash); + delete($hash->{initResetFlag}) if defined($hash->{initResetFlag}); + return SIGNALduino_ResetDevice($hash); + } elsif( $cmd eq "close" ) { + $hash->{DevState} = 'closed'; + return SIGNALduino_CloseDevice($hash); } elsif( $cmd eq "ITClock" ) { Log3 $name, 4, "set $name $cmd $arg"; my $clock = shift @a; @@ -1013,27 +1220,28 @@ SIGNALduino_Set($@) return "argument $arg is not numeric" if($clock !~ /^\d+$/); Log3 $name, 3, "$name: Setting ITClock to $clock (sending $arg)"; $arg="ic$clock"; - SIGNALduino_SimpleWrite($hash, $arg); - SIGNALduino_ReadAnswer($hash, "ITClock", 0, $arg); ## Receive the transmitted message + #SIGNALduino_SimpleWrite($hash, $arg); + SIGNALduino_AddSendQueue($hash,$arg); $hash->{$cmd}=$clock; } elsif( $cmd eq "disableMessagetype" ) { my $argm = 'CD' . substr($arg,-1,1); - SIGNALduino_SimpleWrite($hash, $argm); + #SIGNALduino_SimpleWrite($hash, $argm); + SIGNALduino_AddSendQueue($hash,$argm); Log3 $name, 4, "set $name $cmd $arg $argm";; } elsif( $cmd eq "enableMessagetype" ) { my $argm = 'CE' . substr($arg,-1,1); - SIGNALduino_SimpleWrite($hash, $argm); + #SIGNALduino_SimpleWrite($hash, $argm); + SIGNALduino_AddSendQueue($hash,$argm); Log3 $name, 4, "set $name $cmd $arg $argm"; } elsif( $cmd eq "sendMsg" ) { - my ($protocol,$data,$repeats) = split("#",$arg); + my ($protocol,$data,$repeats,$clock) = split("#",$arg); $protocol=~ s/[Pp](\d+)/$1/; # extract protocol num $repeats=~ s/[rR](\d+)/$1/; # extract repeat num - $repeats=1 if ($repeats eq ""); + $clock=~ s/[Cc](\d+)/$1/ if (defined($clock)); # extract ITClock num + $repeats=1 if (!defined($repeats)); return "$name: sendmsg, unknown protocol: $protocol" if (!exists($ProtocolListSIGNALduino{$protocol})); - Log3 $name, 5, "$name: sendmsg Preparing rawsend command for protocol=$protocol, repeats=$repeats, bits=$data"; - #print ("data = $data \n"); #print ("protocol = $protocol \n"); #print ("repeats = $repeats \n"); @@ -1042,51 +1250,90 @@ SIGNALduino_Set($@) my %patternHash; my $pattern=""; my $cnt=0; - my $clock=$ProtocolListSIGNALduino{$protocol}{clockabs} > 1 ?$ProtocolListSIGNALduino{$protocol}{clockabs}:$hash->{ITClock}; - foreach my $item (qw(sync start one zero)) + + + + my $sendData; + if ($ProtocolListSIGNALduino{$protocol}{format} eq 'manchester') { - #print ("item= $item \n"); - next if (!exists($ProtocolListSIGNALduino{$protocol}{$item})); - - foreach my $p (@{$ProtocolListSIGNALduino{$protocol}{$item}}) - { - #print (" p = $p \n"); - - if (!exists($patternHash{$p})) - { - $patternHash{$p}=$cnt; - $pattern.="P".$patternHash{$p}."=".$p*$clock.";"; - $cnt++; - } - $signalHash{$item}.=$patternHash{$p}; - #print (" signalHash{$item} = $signalHash{$item} \n"); + #$clock = (map { $clock += $_ } @{$ProtocolListSIGNALduino{$protocol}{clockrange}}) / 2 if (!defined($clock)); + + $clock += $_ for(@{$ProtocolListSIGNALduino{$protocol}{clockrange}}); + $clock = round($clock/2,0); + if ($protocol == 43) { + #$data =~ tr/0123456789ABCDEF/FEDCBA9876543210/; } + + my $intro = ""; + my $outro = ""; + + $intro = $ProtocolListSIGNALduino{$protocol}{msgIntro} if ($ProtocolListSIGNALduino{$protocol}{msgIntro}); + $outro = $ProtocolListSIGNALduino{$protocol}{msgOutro}.";" if ($ProtocolListSIGNALduino{$protocol}{msgOutro}); + + if ($intro ne "" || $outro ne "") + { + $intro = "SC;R=$repeats;" . $intro; + $repeats = 0; + } + + $sendData = $intro . "SM;" . ($repeats > 0 ? "R=$repeats;" : "") . "C=$clock;D=$data;" . $outro; # SM;R=2;C=400;D=AFAFAF; + Log3 $name, 5, "$name: sendmsg Preparing manchester protocol=$protocol, repeats=$repeats, clock=$clock data=$data"; + } else { + if ($protocol == 3) { + $data = SIGNALduino_ITV1_tristateToBit($data); + Log3 $name, 5, "$name: sendmsg IT V1 convertet tristate to bits=$data"; + } + if (!defined($clock)) { + $hash->{ITClock} = 250 if (!defined($hash->{ITClock})); # Todo: Klaeren wo ITClock verwendet wird und ob wir diesen Teil nicht auf Protokoll 3,4 und 17 minimieren + $clock=$ProtocolListSIGNALduino{$protocol}{clockabs} > 1 ?$ProtocolListSIGNALduino{$protocol}{clockabs}:$hash->{ITClock}; + } + + Log3 $name, 5, "$name: sendmsg Preparing rawsend command for protocol=$protocol, repeats=$repeats, clock=$clock bits=$data"; + + foreach my $item (qw(sync start one zero float)) + { + #print ("item= $item \n"); + next if (!exists($ProtocolListSIGNALduino{$protocol}{$item})); + + foreach my $p (@{$ProtocolListSIGNALduino{$protocol}{$item}}) + { + #print (" p = $p \n"); + + if (!exists($patternHash{$p})) + { + $patternHash{$p}=$cnt; + $pattern.="P".$patternHash{$p}."=".$p*$clock.";"; + $cnt++; + } + $signalHash{$item}.=$patternHash{$p}; + #print (" signalHash{$item} = $signalHash{$item} \n"); + } + } + my @bits = split("", $data); + + my %bitconv = (1=>"one", 0=>"zero", 'D'=> "float"); + my $SignalData="D="; + + $SignalData.=$signalHash{sync} if (exists($signalHash{sync})); + $SignalData.=$signalHash{start} if (exists($signalHash{start})); + foreach my $bit (@bits) + { + next if (!exists($bitconv{$bit})); + #Log3 $name, 5, "encoding $bit"; + $SignalData.=$signalHash{$bitconv{$bit}}; ## Add the signal to our data string + } + $sendData = "SR;R=$repeats;$pattern$SignalData;"; } + - my @bits = split("", $data); - - my %bitconv = (1=>"one", 0=>"zero"); - my $SignalData="D="; - - $SignalData.=$signalHash{sync} if (exists($signalHash{sync})); - $SignalData.=$signalHash{start} if (exists($signalHash{start})); - - - foreach my $bit (@bits) - { - next if (!exists($bitconv{$bit})); - #Log3 $name, 5, "encoding $bit"; - $SignalData.=$signalHash{$bitconv{$bit}}; ## Add the signal to our data string - } - - my $sendData = "SR;R=$repeats;$pattern$SignalData;"; - SIGNALduino_SimpleWrite($hash, $sendData); - Log3 $name, 4, "$name: sending via SendMsg: $sendData"; + #SIGNALduino_SimpleWrite($hash, $sendData); + SIGNALduino_AddSendQueue($hash,$sendData); + Log3 $name, 4, "$name/set: sending via SendMsg: $sendData"; } else { - Log3 $name, 5, "set $name $cmd $arg"; + Log3 $name, 5, "$name/set: set $name $cmd $arg"; #SIGNALduino_SimpleWrite($hash, $arg); - return "Unknown argument $cmd, choose one of ".$hash->{CMDS}; + return "Unknown argument $cmd, choose one of ". ReadingsVal($name,'cmd',' help me'); } return undef; @@ -1099,7 +1346,7 @@ SIGNALduino_Get($@) my ($hash, @a) = @_; my $type = $hash->{TYPE}; my $name = $hash->{NAME}; - return "$name is not active, may firmware is not suppoted, please flash" if (exists($hash->{INACTIVE}) && $hash->{INACTIVE}==1); + return "$name is not active, may firmware is not suppoted, please flash or reset" if (exists($hash->{DevState}) && $hash->{DevState} ne 'initialized'); #my $name = $a[0]; Log3 $name, 5, "\"get $type\" needs at least one parameter" if(@a < 2); @@ -1116,6 +1363,18 @@ SIGNALduino_Get($@) if (IsDummy($name)) { + if (($arg !~ m/;/) && ($arg !~ m/=/)) { + if ($arg =~ m/^V\d\.\d\..*/) { + Log3 $name, 4, "$name/msg get version: $arg"; + $hash->{version} = "V " . substr($arg,1); + return ""; + } + else { + Log3 $name, 4, "$name/msg get dispatch: $arg"; + Dispatch($hash, $arg, undef); + return ""; + } + } if ($arg =~ /^M[CSU];.*/) { $arg="\002$arg\003"; ## Add start end end marker if not already there @@ -1144,60 +1403,71 @@ SIGNALduino_Get($@) return "$a[0] $a[1] => $arg"; } - } - SIGNALduino_SimpleWrite($hash, $gets{$a[1]}[0] . $arg); - - ($err, $msg) = SIGNALduino_ReadAnswer($hash, $a[1], 0, $gets{$a[1]}[1]); - Log3 $name, 5, "$name: received message for gets: " . $msg if ($msg); + } - if(!defined($msg)) { - DevIo_Disconnected($hash); - $msg = "No answer"; - - } elsif($a[1] eq "cmds") { # nice it up - $msg =~ s/.*Use one of//g; - - } elsif($a[1] eq "uptime") { # decode it - $msg =~ s/[\r\n]//g; - #$msg = hex($msg); # /125; only for col or coc - $msg = sprintf("%d %02d:%02d:%02d", $msg/86400, ($msg%86400)/3600, ($msg%3600)/60, $msg%60); - } - - $msg =~ s/[\r\n]//g; - - #$hash->{READINGS}{$a[1]}{VAL} = $msg; - #$hash->{READINGS}{$a[1]}{TIME} = time(); - readingsSingleUpdate($hash, $a[1], $msg, 0); - return "$a[0] $a[1] => $msg"; - + #SIGNALduino_SimpleWrite($hash, $gets{$a[1]}[0] . $arg); + SIGNALduino_AddSendQueue($hash, $gets{$a[1]}[0] . $arg); + $hash->{getcmd}->{cmd}=$a[1]; + $hash->{getcmd}->{asyncOut}=$hash->{CL}; + $hash->{getcmd}->{timenow}=time(); + + return undef; # We will exit here, and give an output only, if asny output is supported. If this is not supported, only the readings are updated } -sub -SIGNALduino_Clear($) +sub SIGNALduino_parseResponse($$$) { - my $hash = shift; + my $hash = shift; + my $cmd = shift; + my $msg = shift; - # Clear the pipe - $hash->{RA_Timeout} = 0.1; - for(;;) { - my ($err, undef) = SIGNALduino_ReadAnswer($hash, "Clear", 0, undef); - last if($err && $err =~ m/^Timeout/); - } - delete($hash->{RA_Timeout}); + my $name=$hash->{NAME}; + + $msg =~ s/[\r\n]//g; + + if($cmd eq "cmds") + { # nice it up + $msg =~ s/$name cmds =>//g; + $msg =~ s/.*Use one of//g; + } + elsif($cmd eq "uptime") + { # decode it + #$msg = hex($msg); # /125; only for col or coc + $msg = sprintf("%d %02d:%02d:%02d", $msg/86400, ($msg%86400)/3600, ($msg%3600)/60, $msg%60); + } + + return $msg; } + ##################################### sub SIGNALduino_ResetDevice($) { my ($hash) = @_; + my $name = $hash->{NAME}; + Log3 $hash, 3, "$name reset"; DevIo_CloseDev($hash); - my $ret = DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit"); + my $ret = DevIo_OpenDev($hash, 0, "SIGNALduino_DoInit", 'SIGNALduino_Connect'); return $ret; } +##################################### +sub +SIGNALduino_CloseDevice($) +{ + my ($hash) = @_; + my $name = $hash->{NAME}; + + Log3 $hash, 2, "$name closed"; + RemoveInternalTimer($hash); + DevIo_CloseDev($hash); + readingsSingleUpdate($hash, "state", "closed", 1); + + return undef; +} + ##################################### sub SIGNALduino_DoInit($) @@ -1209,170 +1479,130 @@ SIGNALduino_DoInit($) my ($ver, $try) = ("", 0); #Dirty hack to allow initialisation of DirectIO Device for some debugging and tesing - Log3 $hash, 1, "define: ".$hash->{DEF}; - undef($hash->{INACTIVE}) if exists($hash->{INACTIVE}); + Log3 $hash, 1, "$name/define: ".$hash->{DEF}; + + delete($hash->{disConnFlag}) if defined($hash->{disConnFlag}); - + RemoveInternalTimer("HandleWriteQueue:$name"); + @{$hash->{QUEUE}} = (); if (($hash->{DEF} !~ m/\@DirectIO/) and ($hash->{DEF} !~ m/none/) ) { - Log3 $hash, 1, "init: ".$hash->{DEF}; + Log3 $hash, 1, "$name/init: ".$hash->{DEF}; + $hash->{initretry} = 0; + RemoveInternalTimer($hash); - SIGNALduino_Clear($hash); - - - # Try to get version from Arduino - while ($try++ < 3 && $ver !~ m/^V/) { - SIGNALduino_SimpleWrite($hash, "V"); - ($err, $ver) = SIGNALduino_ReadAnswer($hash, "Version", 0, undef); - return "$name: $err" if($err && ($err !~ m/Timeout/ || $try == 3)); - $ver = "" if(!$ver); - } - # Check received string - if($ver !~ m/SIGNALduino/) { - #$attr{$name}{dummy} = 1; ## Todo: Do not alter attribues, they belong to the user - $msg = "$name: Not an SIGNALduino device, setting attribute dummy=1 got for V: $ver"; - Log3 $hash, 1, $msg; - readingsSingleUpdate($hash, "state", "no SIGNALduino found", 1); - $hash->{INACTIVE}=1; - return $msg; - } - elsif($ver =~ m/3.1./) { - #$attr{$name}{dummy} = 1; - $msg = "$name: Version of your arduino is not compatible, pleas flash new firmware. (setting device to inactive) Got for V: $ver"; - readingsSingleUpdate($hash, "state", "unsupported firmware found", 1); - Log3 $hash, 1, $msg; - $hash->{INACTIVE}=1; - return $msg; - } - readingsSingleUpdate($hash, "Version", $ver, 0); - - #$hash->{VERSION} = $ver; - - $ver =~ s/[\r\n]//g; - - #$debug = AttrVal($name, "verbose", 3) == 5; - #Log3 $name, 3, "$name: setting debug to: " . $debug; - - - # Cmd-String feststellen - - my $cmds = SIGNALduino_Get($hash, $name, "cmds", 0); - $cmds =~ s/$name cmds =>//g; - $cmds =~ s/ //g; - $hash->{CMDS} = $cmds; - Log3 $hash, 3, "$name: Possible commands: " . $hash->{CMDS}; - readingsSingleUpdate($hash, "state", "Programming", 1); + #SIGNALduino_SimpleWrite($hash, "XQ"); # Disable receiver + InternalTimer(gettimeofday() + SDUINO_INIT_WAIT_XQ, "SIGNALduino_SimpleWrite_XQ", $hash, 0); + InternalTimer(gettimeofday() + SDUINO_INIT_WAIT, "SIGNALduino_StartInit", $hash, 0); } - # if( my $initCommandsString = AttrVal($name, "initCommands", undef) ) { - # my @initCommands = split(' ', $initCommandsString); - # foreach my $command (@initCommands) { - # SIGNALduino_SimpleWrite($hash, $command); - # } - # } - # $hash->{STATE} = "Initialized"; - readingsSingleUpdate($hash, "state", "Initialized", 1); - # Reset the counter delete($hash->{XMIT_TIME}); delete($hash->{NR_CMD_LAST_H}); - return undef; + return; + #return undef; } -##################################### -# This is a direct read for commands like get -# Anydata is used by read file to get the filesize -sub -SIGNALduino_ReadAnswer($$$$) +# Disable receiver +sub SIGNALduino_SimpleWrite_XQ($) { + my ($hash) = @_; + my $name = $hash->{NAME}; + + Log3 $hash, 3, "$name/init: disable receiver (XQ)"; + SIGNALduino_SimpleWrite($hash, "XQ"); +} + + +sub SIGNALduino_StartInit($) { - my ($hash, $arg, $anydata, $regexp) = @_; - my $type = $hash->{TYPE}; - my $name = $hash->{NAME}; - - while($hash->{TYPE} eq "SIGNALduino_RFR") { # Look for the first "real" SIGNALduino - $hash = $hash->{IODev}; - } - - return ("No FD", undef) - if(!$hash || ($^O !~ /Win/ && !defined($hash->{FD}))); - - my ($mSIGNALduinodata, $rin) = ("", ''); - my $buf; - my $idx; - my $cut = 0; - my $to = 3; # 3 seconds timeout - $to = $hash->{RA_Timeout} if($hash->{RA_Timeout}); # ...or less - for(;;) { - - if($^O =~ m/Win/ && $hash->{USBDev}) { - $hash->{USBDev}->read_const_time($to*1000); # set timeout (ms) - # Read anstatt input sonst funzt read_const_time nicht. - $buf = $hash->{USBDev}->read(999); - return ("Timeout reading answer for get $arg", undef) - if(length($buf) == 0); - - } else { - return ("Device lost when reading answer for get $arg", undef) - if(!$hash->{FD}); - - vec($rin, $hash->{FD}, 1) = 1; - my $nfound = select($rin, undef, undef, $to); - if($nfound < 0) { - next if ($! == EAGAIN() || $! == EINTR() || $! == 0); - my $err = $!; - DevIo_Disconnected($hash); - return("SIGNALduino_ReadAnswer $arg: $err", undef); - } - return ("Timeout reading answer for get $arg", undef) - if($nfound == 0); - $buf = DevIo_SimpleRead($hash); - return ("No data", undef) if(!defined($buf)); - - } - - if($buf) { - Log3 $hash->{NAME}, 5, "$name/RAW (ReadAnswer): $buf"; - $mSIGNALduinodata .= $buf; - } - $mSIGNALduinodata = SIGNALduino_RFR_DelPrefix($mSIGNALduinodata) if($type eq "SIGNALduino_RFR"); - - $idx = index($mSIGNALduinodata,"\003\n"); - if($idx != -1) { - $cut = 1; - if($mSIGNALduinodata =~ m/\002.*\003\n/) { # vollstaendige Signal Nachricht - Log3 $name, 4, "$name/RAW (ReadAnswerCut002003): $mSIGNALduinodata"; - #if(defined($regexp)) { # kein parse wenn von doInit aufgerufen - SIGNALduino_Parse($hash, $hash, $name, $mSIGNALduinodata); - #} - $mSIGNALduinodata =~ s/\002.*\003\n//; - } else { # Signal Nachricht ohne Anfang - Log3 $name, 4, "$name/RAW (ReadAnswerCut003 $idx): $mSIGNALduinodata"; - $mSIGNALduinodata = substr($mSIGNALduinodata, $idx+2); - } - Log3 $name, 4, "$name/RAW (ReadAnswerCutDone " . length($mSIGNALduinodata) . "): $mSIGNALduinodata"; - } - - # \n\n is socat special - if($mSIGNALduinodata =~ m/\r\n$/ || $anydata || $mSIGNALduinodata =~ m/\n\n$/ ) { - if(!defined($regexp) || $mSIGNALduinodata =~ m/$regexp/) { - if ($cut == 1) { - Log3 $name, 4, "$name/RAW (ReadAnswerCut): $mSIGNALduinodata"; - } - return (undef, $mSIGNALduinodata) - } - } - } - + my ($hash) = @_; + my $name = $hash->{NAME}; + $hash->{version} = undef; + + Log3 $name,3 , "$name/init: get version, retry = " . $hash->{initretry}; + if ($hash->{initretry} >= SDUINO_INIT_MAXRETRY) { + $hash->{DevState} = 'INACTIVE'; + # einmaliger reset, wenn danach immer noch 'init retry count reached', dann SIGNALduino_CloseDevice() + if (!defined($hash->{initResetFlag})) { + Log3 $name,2 , "$name/init retry count reached. Reset"; + $hash->{initResetFlag} = 1; + SIGNALduino_ResetDevice($hash); + } else { + Log3 $name,2 , "$name/init retry count reached. Closed"; + SIGNALduino_CloseDevice($hash); + } + return; + } + else { + $hash->{getcmd}->{cmd} = "version"; + SIGNALduino_SimpleWrite($hash, "V"); + $hash->{DevState} = 'waitInit'; + RemoveInternalTimer($hash); + InternalTimer(gettimeofday() + SDUINO_CMD_TIMEOUT, "SIGNALduino_CheckCmdResp", $hash, 0); + } } + +#################### +sub SIGNALduino_CheckCmdResp($) +{ + my ($hash) = @_; + my $name = $hash->{NAME}; + my $msg = undef; + my $ver; + + if ($hash->{version}) { + $ver = $hash->{version}; + if ($ver !~ m/SIGNAL(duino|ESP)/) { + $msg = "$name: Not an SIGNALduino device, setting attribute dummy=1 got for V: $ver"; + Log3 $hash, 1, $msg; + readingsSingleUpdate($hash, "state", "no SIGNALduino found", 1); + $hash->{DevState} = 'INACTIVE'; + SIGNALduino_CloseDevice($hash); + } + elsif($ver =~ m/^V 3\.1\./) { + $msg = "$name: Version of your arduino is not compatible, pleas flash new firmware. (device closed) Got for V: $ver"; + readingsSingleUpdate($hash, "state", "unsupported firmware found", 1); + Log3 $hash, 1, $msg; + $hash->{DevState} = 'INACTIVE'; + SIGNALduino_CloseDevice($hash); + } + else { + readingsSingleUpdate($hash, "state", "opened", 1); + Log3 $name, 2, "$name: initialized"; + $hash->{DevState} = 'initialized'; + delete($hash->{initResetFlag}) if defined($hash->{initResetFlag}); + SIGNALduino_SimpleWrite($hash, "XE"); # Enable receiver + Log3 $hash, 3, "$name/init: enable receiver (XE)"; + delete($hash->{initretry}); + # initialize keepalive + $hash->{keepalive}{ok} = 0; + $hash->{keepalive}{retry} = 0; + InternalTimer(gettimeofday() + SDUINO_KEEPALIVE_TIMEOUT, "SIGNALduino_KeepAlive", $hash, 0); + } + } + else { + delete($hash->{getcmd}); + $hash->{initretry} ++; + #InternalTimer(gettimeofday()+1, "SIGNALduino_StartInit", $hash, 0); + SIGNALduino_StartInit($hash); + } +} + + ##################################### # Check if the 1% limit is reached and trigger notifies sub SIGNALduino_XmitLimitCheck($$) { my ($hash,$fn) = @_; + + + return if ($fn !~ m/^(is|SR).*/); + my $now = time(); + if(!$hash->{XMIT_TIME}) { $hash->{XMIT_TIME}[0] = $now; $hash->{NR_CMD_LAST_H} = 1; @@ -1397,60 +1627,83 @@ SIGNALduino_XmitLimitCheck($$) $hash->{NR_CMD_LAST_H} = int(@b); } - ##################################### +## API to logical modules: Provide as Hash of IO Device, type of function ; command to call ; message to send sub SIGNALduino_Write($$$) { my ($hash,$fn,$msg) = @_; - my $name = $hash->{NAME}; - Log3 $name, 5, "$name: sending $fn$msg"; - my $bstring = "$fn$msg"; + $fn="RAW" if $fn eq ""; - SIGNALduino_SimpleWrite($hash, $bstring); + Log3 $name, 5, "$name/write: adding to queue $fn $msg"; + #SIGNALduino_SimpleWrite($hash, $bstring); + + SIGNALduino_Set($hash,$name,$fn,$msg); + #SIGNALduino_AddSendQueue($hash,$bstring); + } -#sub -#SIGNALduino_SendFromQueue($$) -#{ -# my ($hash, $bstring) = @_; -# my $name = $hash->{NAME}; -# -# if($bstring ne "") { -# SIGNALduino_XmitLimitCheck($hash,$bstring); -# SIGNALduino_SimpleWrite($hash, $bstring); -# } + +sub SIGNALduino_AddSendQueue($$) +{ + my ($hash, $msg) = @_; + my $name = $hash->{NAME}; + + #Log3 $hash, 3,"AddSendQueue: " . $hash->{NAME} . ": $msg"; + + push(@{$hash->{QUEUE}}, $msg); + + #Log3 $hash , 5, Dumper($hash->{QUEUE}); + + InternalTimer(gettimeofday() + 0.1, "SIGNALduino_HandleWriteQueue", "HandleWriteQueue:$name", 1) if (@{$hash->{QUEUE}} == 1); +} + + +sub +SIGNALduino_SendFromQueue($$) +{ + my ($hash, $msg) = @_; + my $name = $hash->{NAME}; + + if($msg ne "") { + SIGNALduino_XmitLimitCheck($hash,$msg); + #DevIo_SimpleWrite($hash, $msg,2); + SIGNALduino_SimpleWrite($hash,$msg); + } ############## # Write the next buffer not earlier than 0.23 seconds - # = 3* (12*0.8+1.2+1.0*5*9+0.8+10) = 226.8ms - # else it will be sent too early by the SIGNALduino, resulting in a collision -# InternalTimer(gettimeofday()+0.3, "SIGNALduino_HandleWriteQueue", $hash, 1); -#} + # else it will be sent too early by the SIGNALduino, resulting in a collision, or may the last command is not finished + + InternalTimer(gettimeofday() + SDUINO_WRITEQUEUE_NEXT, "SIGNALduino_HandleWriteQueue", "HandleWriteQueue:$name", 1); +} -##################################### -#sub -#SIGNALduino_HandleWriteQueue($) -#{ -# my $hash = shift; -# my $arr = $hash->{QUEUE}; -# if(defined($arr) && @{$arr} > 0) { -# shift(@{$arr}); -# if(@{$arr} == 0) { -# delete($hash->{QUEUE}); -# return; -# } -# my $bstring = $arr->[0]; -# if($bstring eq "") { -# SIGNALduino_HandleWriteQueue($hash); -# } else { -# SIGNALduino_SendFromQueue($hash, $bstring); -# } -# } -#} +#################################### +sub +SIGNALduino_HandleWriteQueue($) +{ + my($param) = @_; + my(undef,$name) = split(':', $param); + my $hash = $defs{$name}; + + #my @arr = @{$hash->{QUEUE}}; + + if(@{$hash->{QUEUE}}) { + my $msg= shift(@{$hash->{QUEUE}}); + + if($msg eq "") { + SIGNALduino_HandleWriteQueue("x:$name"); + } else { + SIGNALduino_SendFromQueue($hash, $msg); + } + } else { + Log3 $name, 4, "$name/HandleWriteQueue: nothing to send, stopping timer"; + RemoveInternalTimer("HandleWriteQueue:$name"); + } +} ##################################### # called from the global loop, when the select for hash->{FD} reports data @@ -1473,22 +1726,69 @@ SIGNALduino_Read($) ($rmsg,$SIGNALduinodata) = split("\n", $SIGNALduinodata, 2); $rmsg =~ s/\r//; Log3 $name, 4, "$name/msg READ: $rmsg"; - - SIGNALduino_Parse($hash, $hash, $name, $rmsg) if($rmsg); + if ( $rmsg && !SIGNALduino_Parse($hash, $hash, $name, $rmsg) && $hash->{getcmd} ) + { + my $regexp=$gets{$hash->{getcmd}->{cmd}}[1]; + if(!defined($regexp) || $rmsg =~ m/$regexp/) { + if (defined($hash->{keepalive})) { + $hash->{keepalive}{ok} = 1; + $hash->{keepalive}{retry} = 0; + } + if ($hash->{getcmd}->{cmd} eq 'version') { + my $msg_start = index($rmsg, 'V 3.'); + if ($msg_start > 0) { + $rmsg = substr($rmsg, $msg_start); + Log3 $name, 4, "$name/read: cut chars at begin. msgstart = $msg_start msg = $rmsg"; + } + $hash->{version} = $rmsg; + if (defined($hash->{DevState}) && $hash->{DevState} eq 'waitInit') { + RemoveInternalTimer($hash); + SIGNALduino_CheckCmdResp($hash); + } + } + $rmsg = SIGNALduino_parseResponse($hash,$hash->{getcmd}->{cmd},$rmsg); + readingsSingleUpdate($hash, $hash->{getcmd}->{cmd}, $rmsg, 0); + if (defined($hash->{getcmd}->{asyncOut})) { + #Log3 $name, 4, "$name/msg READ: asyncOutput"; + my $ao = asyncOutput( $hash->{getcmd}->{asyncOut}, $hash->{getcmd}->{cmd}.": " . $rmsg ); + } + delete($hash->{getcmd}); + } else { + Log3 $name, 4, "$name/msg READ: Received answer ($rmsg) for ". $hash->{getcmd}->{cmd}." does not match $regexp"; + } + } } $hash->{PARTIAL} = $SIGNALduinodata; } -sub SIGNALduino_GetUpdate($){ +sub SIGNALduino_KeepAlive($){ my ($hash) = @_; my $name = $hash->{NAME}; - Log3 $name, 4, "$name: ping ..."; - SIGNALduino_Get($hash,$name, "ping"); + return if ($hash->{DevState} eq 'disconnected'); - InternalTimer(gettimeofday()+$hash->{Interval}, "SIGNALduino_GetUpdate", $hash, 1); + Log3 $name,4 , "$name/KeepAliveOk: " . $hash->{keepalive}{ok}; + if (!$hash->{keepalive}{ok}) { + delete($hash->{getcmd}); + if ($hash->{keepalive}{retry} >= SDUINO_KEEPALIVE_MAXRETRY) { + Log3 $name,4 , "$name/keepalive retry count reached. Reset"; + $hash->{DevState} = 'INACTIVE'; + SIGNALduino_ResetDevice($hash); + return; + } + else { + $hash->{keepalive}{retry} ++; + Log3 $name,4 , "$name/KeepAlive: get ping"; + $hash->{getcmd}->{cmd} = "ping"; + SIGNALduino_SimpleWrite($hash, "P"); + } + } + Log3 $name,4 , "$name/keepalive retry = " . $hash->{keepalive}{retry}; + $hash->{keepalive}{ok} = 0; + + InternalTimer(gettimeofday() + SDUINO_KEEPALIVE_TIMEOUT, "SIGNALduino_KeepAlive", $hash, 1); } @@ -1517,18 +1817,26 @@ sub SIGNALduino_inTol($$$) # Will return -1 if pattern is not found or a string, containing the indexes which are in tolerance and have the smallest gap to what we searched # =cut + +# 01232323242423 while ($message =~ /$pstr/g) { $count++ } + + sub SIGNALduino_PatternExists { - my ($hash,$search,$patternList) = @_; + my ($hash,$search,$patternList,$data) = @_; #my %patternList=$arg3; #Debug "plist: ".Dumper($patternList) if($debug); #Debug "searchlist: ".Dumper($search) if($debug); my $searchpattern; my $valid=1; - my $pstr=""; + my @pstr; my $debug = AttrVal($hash->{NAME},"debug",0); + my $i=0; + + my $maxcol=0; + foreach $searchpattern (@{$search}) # z.B. [1, -4] { #my $patt_id; @@ -1536,7 +1844,8 @@ sub SIGNALduino_PatternExists #my $tol=abs(abs($searchpattern)>=2 ?$searchpattern*0.3:$searchpattern*1.5); my $tol=abs(abs($searchpattern)>3 ? abs($searchpattern)>16 ? $searchpattern*0.17 : $searchpattern*0.3 : 1); #tol is minimum 1 or higer, depending on our searched pulselengh - Debug "tol (+- $tol) for ($searchpattern)" if($debug); + + Debug "tol: looking for ($searchpattern +- $tol)" if($debug); my %pattern_gap ; #= {}; # Find and store the gap of every pattern, which is in tolerance @@ -1545,19 +1854,26 @@ sub SIGNALduino_PatternExists { Debug "index => gap in tol (+- $tol) of pulse ($searchpattern) : ".Dumper(\%pattern_gap) if($debug); # Extract fist pattern, which is nearst to our searched value - my $closestidx = (sort {$pattern_gap{$a} <=> $pattern_gap{$b}} keys %pattern_gap)[0]; - - $pstr="$pstr$closestidx"; + my @closestidx = (sort {$pattern_gap{$a} <=> $pattern_gap{$b}} keys %pattern_gap); + + my $idxstr=""; + my $r=0; + + while (my ($item) = splice(@closestidx, 0, 1)) + { + $pstr[$i][$r]=$item; + $r++; + Debug "closest pattern has index: $item" if($debug); + } $valid=1; - Debug "closest pattern has index: $closestidx" if($debug); } else { - # search is not found, return - $valid=0; + # search is not found, return -1 + return -1; last; } + $i++; #return ($valid ? $pstr : -1); # return $pstr if $valid or -1 - #foreach $patt_id (keys %$patternList) { #Debug "$patt_id. chk ->intol $patternList->{$patt_id} $searchpattern $tol"; @@ -1572,8 +1888,23 @@ sub SIGNALduino_PatternExists #} #last if (!$valid); ## Exit loop if a complete iteration has not found anything } + my @results = (''); - return ($valid ? $pstr : -1); # return $pstr if $valid or -1 + foreach my $subarray (@pstr) + { + @results = map {my $res = $_; map $res.$_, @$subarray } @results; + } + + foreach my $search (@results) + { + Debug "looking for substr $search" if($debug); + + return $search if (index( ${$data}, $search) >= 0); + } + + return -1; + + #return ($valid ? @results : -1); # return @pstr if $valid or -1 } #SIGNALduino_MatchSignalPattern{$hash,@array, %hash, @array, $scalar}; not used >v3.1.3 @@ -1645,6 +1976,7 @@ sub SIGNALduino_Split_Message($$) my $syncidx; my $rawData; my $clockabs; + my $mcbitnum; my @msg_parts = SIGNALduino_splitMsg($rmsg,';'); ## Split message parts by ";" my %ret; @@ -1691,6 +2023,13 @@ sub SIGNALduino_Split_Message($$) #return undef if (!defined($patternList{$clockidx})); $ret{clockidx} = $clockidx; } + elsif($_ =~ m/^L=\d/) #### MC bit length + { + (undef, $mcbitnum) = split(/=/,$_); + Debug "$name: extracted number of $mcbitnum bits\n" if ($debug);; + $ret{mcbitnum} = $mcbitnum; + } + elsif($_ =~ m/^C=\d+/) #### Message from array { $_ =~ s/C=//; @@ -1711,11 +2050,17 @@ sub SIGNALduino_Split_Message($$) # Function which dispatches a message if needed. sub SIGNALduno_Dispatch($$$) { - my ($hash, $rmsg,$dmsg) = @_; + my ($hash, $rmsg, $dmsg) = @_; my $name = $hash->{NAME}; - Log3 $name, 5, "$name: converted Data to ($dmsg)"; + if (!defined($dmsg)) + { + Log3 $name, 5, "$name: (SIGNALduno_Dispatch) dmsg is undef. Skipping dispatch call"; + return; + } + Log3 $name, 5, "$name: converted Data to ($dmsg)"; + #Dispatch only if $dmsg is different from last $dmsg, or if 2 seconds are between transmits if ( ($hash->{DMSG} ne $dmsg) || ($hash->{TIME}+1 < time()) ) { $hash->{MSGCNT}++; @@ -1810,7 +2155,7 @@ SIGNALduino_Parse_MS($$$$%) my $pstr; my %patternLookupHash=(); - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{sync}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{sync}},\%patternList,\$rawData)) >=0; Debug "Found matched sync with indexes: ($pstr)" if ($debug && $valid); $patternLookupHash{$pstr}="" if ($valid); ## Append Sync to our lookuptable my $syncstr=$pstr; # Store for later start search @@ -1819,14 +2164,14 @@ SIGNALduino_Parse_MS($$$$%) next if (!$valid) ; - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList,\$rawData)) >=0; Debug "Found matched one with indexes: ($pstr)" if ($debug && $valid); $patternLookupHash{$pstr}="1" if ($valid); ## Append Sync to our lookuptable #Debug "added $pstr " if ($debug && $valid); Debug "one pattern not found" if ($debug && !$valid); - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList,\$rawData)) >=0; Debug "Found matched zero with indexes: ($pstr)" if ($debug && $valid); $patternLookupHash{$pstr}="0" if ($valid); ## Append Sync to our lookuptable Debug "zero pattern not found" if ($debug && !$valid); @@ -2041,19 +2386,22 @@ sub SIGNALduino_Parse_MU($$$$@) #Debug "phash:".Dumper(%patternLookupHash); my $pstr=""; - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList,\$rawData)) >=0; Debug "Found matched one" if ($debug && $valid); + + + $patternLookupHash{$pstr}="1" if ($valid); ## Append one to our lookuptable Debug "added $pstr " if ($debug && $valid); - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList,\$rawData)) >=0; Debug "Found matched zero" if ($debug && $valid); $patternLookupHash{$pstr}="0" if ($valid); ## Append zero to our lookuptable Debug "added $pstr " if ($debug && $valid); if (defined($ProtocolListSIGNALduino{$id}{float})) { - $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{float}},\%patternList)) >=0; + $valid = $valid && ($pstr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{float}},\%patternList,\$rawData)) >=0; Debug "Found matched float" if ($debug && $valid); $patternLookupHash{$pstr}="F" if ($valid); ## Append float to our lookuptable Debug "added $pstr " if ($debug && $valid); @@ -2076,12 +2424,12 @@ sub SIGNALduino_Parse_MU($$$$@) my @msgStartLst; my $startStr=""; my $start_regex; - my $oneStr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList); - my $zeroStr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList); + my $oneStr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList,\$rawData); + my $zeroStr=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList,\$rawData); if (@msgStartLst = SIGNALduino_getProtoProp($id,"start")) { - $startStr=SIGNALduino_PatternExists($hash,@msgStartLst,\%patternList); + $startStr=SIGNALduino_PatternExists($hash,@msgStartLst,\%patternList,\$rawData); } $start_regex="$startStr($oneStr|$zeroStr)"; $rawData =~ /$start_regex/; @@ -2178,8 +2526,9 @@ sub SIGNALduino_Parse_MU($$$$@) Debug "$name: searching new start with ($regex)\n" if ($debug); $rawData =~ /$regex/; - if (defined($-[0] && $-[0] > 0)) { + if (defined($-[0]) && ($-[0] > 0)) { $i=$-[0]+ $i+ length($startStr); + $i=$i-$signal_width if ($i>0 && length($startStr) == 0); #Todo: Debug "$name: found restart at Position $i ($regex)\n" if ($debug); } else { last; @@ -2228,9 +2577,11 @@ SIGNALduino_Parse_MC($$$$@) my $hlen = length($rawData); my $blen = $hlen * 4; - $bitData= unpack("B$blen", pack("H$hlen", $rawData)); - Debug "$name: extracted data $bitData (bin)\n" if ($debug); ## Convert Message from hex to bits my $id; + + my $rawDataInverted; + ($rawDataInverted = $rawData) =~ tr/0123456789ABCDEF/FEDCBA9876543210/; # Some Manchester Data is inverted + foreach $id (@{$hash->{mcIdList}}) { @@ -2239,6 +2590,17 @@ SIGNALduino_Parse_MC($$$$@) Debug "clock and min length matched" if ($debug); Log3 $name, 4, "$name: Found manchester Protocol id $id clock $clock -> $ProtocolListSIGNALduino{$id}{name}"; + + if (exists($ProtocolListSIGNALduino{$id}{polarity}) && ($ProtocolListSIGNALduino{$id}{polarity} eq 'invert') && (!defined($hash->{version}) || substr($hash->{version},0,6) ne 'V 3.2.')) + # todo && substr($hash->{version},0,6) ne 'V 3.2.') # bei version V 3.2. nicht invertieren + { + $bitData= unpack("B$blen", pack("H$hlen", $rawDataInverted)); + } else { + $bitData= unpack("B$blen", pack("H$hlen", $rawData)); + } + Debug "$name: extracted data $bitData (bin)\n" if ($debug); ## Convert Message from hex to bits + Log3 $name, 5, "$name: extracted data $bitData (bin)\n"; + my $method = $ProtocolListSIGNALduino{$id}{method}; if (!exists &$method) { @@ -2277,6 +2639,12 @@ SIGNALduino_Parse($$$$@) #print Dumper(\%ProtocolListSIGNALduino); return undef if !($rmsg=~ m/^\002M.;.*;\003/); ## Check if a Data Message arrived and if it's complete (start & end control char are received) + + if (defined($hash->{keepalive})) { + $hash->{keepalive}{ok} = 1; + $hash->{keepalive}{retry} = 0; + } + my $debug = AttrVal($iohash->{NAME},"debug",0); @@ -2295,12 +2663,12 @@ SIGNALduino_Parse($$$$@) Log3 $name, 3, "$name: You are using an outdated version of signalduino code on your arduino. Please update"; return undef; } - if (@{$hash->{msIdList}} && $rmsg=~ m/^MS;(P\d=-?\d+;){3,6}D=\d+;CP=\d;SP=\d;/) + if (@{$hash->{msIdList}} && $rmsg=~ m/^MS;(P\d=-?\d+;){3,8}D=\d+;CP=\d;SP=\d;/) { $dispatched= SIGNALduino_Parse_MS($hash, $iohash, $name, $rmsg,%signal_parts); } # Message unsynced type -> MU - elsif (@{$hash->{muIdList}} && $rmsg=~ m/^MU;(P\d=-?\d+;){3,6}D=\d+;CP=\d;/) + elsif (@{$hash->{muIdList}} && $rmsg=~ m/^MU;(P\d=-?\d+;){3,8}D=\d+;CP=\d;/) { $dispatched= SIGNALduino_Parse_MU($hash, $iohash, $name, $rmsg,%signal_parts); } @@ -2342,9 +2710,11 @@ SIGNALduino_Ready($) { my ($hash) = @_; - return DevIo_OpenDev($hash, 1, "SIGNALduino_DoInit") - if($hash->{STATE} eq "disconnected"); - + if ($hash->{STATE} eq 'disconnected') { + $hash->{DevState} = 'disconnected'; + return DevIo_OpenDev($hash, 1, "SIGNALduino_DoInit", 'SIGNALduino_Connect') + } + # This is relevant for windows/USB only my $po = $hash->{USBDev}; my ($BlockingFlags, $InBytes, $OutBytes, $ErrorFlags); @@ -2439,10 +2809,15 @@ sub SIGNALduino_IdList($$$) my $wflag = 0; if (defined($aVal) && length($aVal)>0) { - %WhitelistIDs = map { $_ => 1 } split(",", $aVal); - #my $w = join ', ' => map "$_" => keys %WhitelistIDs; - #Log3 $name, 3, "Attr whitelist $w"; - $wflag = 1; + if (substr($aVal,0 ,1) eq '#') { + Log3 $name, 3, "Attr whitelist deaktiviert: $aVal"; + } + else { + %WhitelistIDs = map { $_ => 1 } split(",", $aVal); + #my $w = join ', ' => map "$_" => keys %WhitelistIDs; + #Log3 $name, 3, "Attr whitelist $w"; + $wflag = 1; + } } my $id; foreach $id (keys %ProtocolListSIGNALduino) @@ -2532,6 +2907,17 @@ sub SIGNALduino_bit2Arctec } +sub SIGNALduino_ITV1_tristateToBit($) +{ + my ($msg) = @_; + # Convert 0 -> 00 1 -> 11 F => 01 to be compatible with IT Module + $msg =~ s/0/00/g; + $msg =~ s/1/11/g; + $msg =~ s/F/01/g; + $msg =~ s/D/10/g; + + return $msg; +} sub SIGNALduino_OSV2() @@ -2542,6 +2928,7 @@ sub SIGNALduino_OSV2() my $message_end; my $message_length; + #$bitData =~ tr/10/01/; if ($bitData =~ m/^.?(10){12,16}.?10011001/) { # Valid OSV2 detected! $preamble_pos=index($bitData,"10011001",24); @@ -2658,7 +3045,9 @@ sub SIGNALduino_OSV1() my $idx=0; my $osv1hex ;# ~hex('0x'.$rawData); - my $osv1bit = $bitData =~ tr/10/01/r; + #my $osv1bit = $bitData =~ tr/10/01/r; + my $osv1bit; + ($osv1bit = $bitData) =~ tr/10/01/; #Log3 $name, 5, "$name: OSV1 protocol converted from ($bitData) to bit: ($osv1bit)" ; $osv1hex=sprintf("%02X", length($rawData)*4, $osv1hex).SIGNALduino_b2h($osv1bit); @@ -2737,6 +3126,32 @@ sub SIGNALduino_Hideki() return (-1,""); } + +sub SIGNALduino_Maverick() +{ + my ($name,$bitData,$id) = @_; + my $debug = AttrVal($name,"debug",0); + + ## Todo: Some checks and may be a lengh filter or some checks + my $hex=SIGNALduino_b2h($bitData); + + + + return (1,$hex); ## Return the bits unchanged in hex + +} + +sub SIGNALduino_SomfyRTS() +{ + my ($name, $bitData, $rawData) = @_; + + #(my $negBits = $bitData) =~ tr/10/01/; # Todo: eventuell auf pack umstellen + my $encData = SIGNALduino_b2h($bitData); + + #Log3 $name, 4, "$name: Somfy RTS protocol enc: $encData"; + return (1, $encData); +} + # - - - - - - - - - - - - #=item SIGNALduino_filterSign() #This functons, will act as a filter function. It will remove the sign from the pattern, and compress message and pattern @@ -2889,6 +3304,8 @@ sub SIGNALduino_compPattern($$$%) 1; =pod +=item summary supports the same low-cost receiver for digital signals +=item summary_DE Unterstützt den gleichnamigen Low-Cost Empfaenger fuer digitale Signale =begin html @@ -2921,9 +3338,7 @@ sub SIGNALduino_compPattern($$$%)
  • Eurochon EAS 800z -> 14_SD_WS07
  • CTW600, WH1080 -> 14_SD_WS09
  • Hama TS33C, Bresser Thermo/Hygro Sensor -> 14_Hideki
  • -
  • FreeTec Außenmodul NC-7344 -> 14_SD_WS07
  • - - +
  • FreeTec Aussenmodul NC-7344 -> 14_SD_WS07


  • @@ -3014,9 +3429,22 @@ attr sduino longids 1 # Use longids for BTHR918N devices. # Will generate devices names like BTHR918N_f3. attr sduino longids BTHR918N - -
    - + +
  • whitelistIDs
    +This attribute allows it, to specify whichs protocos are considured from this module. +Protocols which are not considured, will not generate logmessages or events. They are then completly ignored. +This makes it possible to lower ressource usage and give some better clearnes in the logs. +You can specify multiple whitelistIDs wih a colon : 0,3,7,12
    +With a # at the beginnging whitelistIDs can be deactivated. +

  • +
  • WS09_Model
    + WS09_WSModel:undef -> check all, WH1080 -> support WH1080/WS0101 , CTW600 -> support CTW600 +
  • +
  • WS09_CRCAUS
    + WS09_CRCAUS:0,1 + WS09_CRCAUS = 0 is default -> check CRC Calculation for WH1080 +

  • + Get
    diff --git a/fhem/FHEM/14_SD_WS.pm b/fhem/FHEM/14_SD_WS.pm new file mode 100644 index 000000000..aff34c95e --- /dev/null +++ b/fhem/FHEM/14_SD_WS.pm @@ -0,0 +1,395 @@ +############################################## +# $Id$ +# +# The purpose of this module is to support serval +# weather sensors which use various protocol +# Sidey79 & Ralf9 2016 +# + +package main; + + +use strict; +use warnings; + +#use Data::Dumper; + + +sub SD_WS_Initialize($) +{ + my ($hash) = @_; + + $hash->{Match} = '^[W]\d+#.*'; + $hash->{DefFn} = "SD_WS_Define"; + $hash->{UndefFn} = "SD_WS_Undef"; + $hash->{ParseFn} = "SD_WS_Parse"; + $hash->{AttrFn} = "SD_WS_Attr"; + $hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 showtime:1,0 " . + "$readingFnAttributes "; + $hash->{AutoCreate} = + { + "SD_WS37_TH.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", FILTER => "%NAME", GPLOT => "temp4hum4:Temp/Hum,", autocreateThreshold => "2:180"}, + "SD_WS50_SM.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", FILTER => "%NAME", GPLOT => "temp4hum4:Temp/Hum,", autocreateThreshold => "2:180"} + + }; + +} + + + + +############################# +sub SD_WS_Define($$) +{ + my ($hash, $def) = @_; + my @a = split("[ \t][ \t]*", $def); + + return "wrong syntax: define SD_WS ".int(@a) if(int(@a) < 3 ); + + $hash->{CODE} = $a[2]; + $hash->{lastMSG} = ""; + $hash->{bitMSG} = ""; + + $modules{SD_WS}{defptr}{$a[2]} = $hash; + $hash->{STATE} = "Defined"; + + my $name= $hash->{NAME}; + return undef; +} + +##################################### +sub SD_WS_Undef($$) +{ + my ($hash, $name) = @_; + delete($modules{SD_WS}{defptr}{$hash->{CODE}}) + if(defined($hash->{CODE}) && defined($modules{SD_WS}{defptr}{$hash->{CODE}})); + return undef; +} + + +################################### +sub SD_WS_Parse($$) +{ + my ($iohash, $msg) = @_; + #my $rawData = substr($msg, 2); + my $name = $iohash->{NAME}; + my ($protocol,$rawData) = split("#",$msg); + $protocol=~ s/^[WP](\d+)/$1/; # extract protocol + + + + my $dummyreturnvalue= "Unknown, please report"; + my $hlen = length($rawData); + my $blen = $hlen * 4; + my $bitData = unpack("B$blen", pack("H$hlen", $rawData)); + my $bitData2; + + my $model; # wenn im elsif Abschnitt definiert, dann wird der Sensor per AutoCreate angelegt + my $SensorTyp; + my $id; + my $bat; + my $channel; + my $rawTemp; + my $temp; + my $hum; + my $trend; + + my %decodingSubs = ( + 50 => # Protocol 50 + # FF550545FF9E + # FF550541FF9A + # AABCDDEEFFGG + # A = Preamble, always FF + # B = TX type, always 5 + # C = Address (5/6/7) > low 2 bits = 1/2/3 + # D = Soil moisture 05% + # E = temperature + # F = security code, always F + # G = Checksum 55+05+45+FF=19E CRC value = 9E + { # subs to decode this + sensortype => 'XT300', + model => 'SD_WS_50_SM', + prematch => sub {my $msg = shift; return 1 if ($msg =~ /^FF5[0-9A-F]{5}FF[0-9A-F]{2}/); }, # prematch + crcok => sub {my $msg = shift; return 1 if ((hex(substr($msg,2,2))+hex(substr($msg,4,2))+hex(substr($msg,6,2))+hex(substr($msg,8,2))&0xFF) == (hex(substr($msg,10,2))) ); }, # crc + id => sub {my $msg = shift; return (hex(substr($msg,2,2)) &0x03 ); }, #id + #temp => sub {my $msg = shift; return (sprintf('%x',((hex(substr($msg,6,2)) <<4)/2/10))); }, #temp + #temphex => sub {my $msg = shift; return sprintf("%04X",((hex(substr($msg,6,2)))<<4)/2); }, #temp + temp => sub {my $msg = shift; return ((hex(substr($msg,6,2)))-40) }, #temp + #hum => sub {my $msg = shift; return (printf('%02x',hex(substr($msg,4,2)))); }, #hum + hum => sub {my $msg = shift; return hex(substr($msg,4,2)); }, #hum + channel => sub {my (undef,$bitData) = @_; return ( SD_WS_binaryToNumber($bitData,12,15)&0x03 ); }, #channel + }, + 33 => + { + sensortype => 's014/TFA 30.3200/TCM/Conrad', + model => 'SD_WS_33_TH', + prematch => sub {my $msg = shift; return 1 if ($msg =~ /^[0-9A-F]{10,11}/); }, # prematch + crcok => sub {return SD_WS_binaryToNumber($bitData,36,39); }, # crc + id => sub {my (undef,$bitData) = @_; return SD_WS_binaryToNumber($bitData,0,9); }, # id + # sendmode => sub {my (undef,$bitData) = @_; return SD_WS_binaryToNumber($bitData,10,11) eq "1" ? "manual" : "auto"; } + temp => sub {my (undef,$bitData) = @_; return (((SD_WS_binaryToNumber($bitData,22,25)*256 + SD_WS_binaryToNumber($bitData,18,21)*16 + SD_WS_binaryToNumber($bitData,14,17)) *10 -12200) /18)/10; }, #temp + hum => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,30,33)*16 + SD_WS_binaryToNumber($bitData,26,29)); }, #hum + channel => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,12,13)+1 ); }, #channel + bat => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,34) eq "1" ? "ok" : "critical");}, + # sync => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,35,35) eq "1" ? "true" : "false");}, + } + + + ); + + + Log3 $name, 4, "SD_WS_Parse: Protocol: $protocol, rawData: $rawData"; + + if ($protocol == "37") # Bresser 7009994 + { + # 0 7 8 9 10 12 22 25 31 + # 01011010 0 0 01 01100001110 10 0111101 11001010 + # ID B? T Kan Temp ?? Hum Pruefsumme? + + # MU;P0=729;P1=-736;P2=483;P3=-251;P4=238;P5=-491;D=010101012323452323454523454545234523234545234523232345454545232345454545452323232345232340;CP=4; + + $model = "SD_WS37_TH"; + $SensorTyp = "Bresser 7009994"; + + $id = SD_WS_binaryToNumber($bitData,0,7); + #$bat = int(substr($bitData,8,1)) eq "1" ? "ok" : "low"; + $channel = SD_WS_binaryToNumber($bitData,10,11); + $rawTemp = SD_WS_binaryToNumber($bitData,12,22); + $hum = SD_WS_binaryToNumber($bitData,25,31); + + $id = sprintf('%02X', $id); # wandeln nach hex + $temp = ($rawTemp - 609.93) / 9.014; + $temp = sprintf("%.1f", $temp); + + if ($hum < 10 || $hum > 99 || $temp < -30 || $temp > 70) { + return ""; + } + + $bitData2 = substr($bitData,0,8) . ' ' . substr($bitData,8,4) . ' ' . substr($bitData,12,11); + $bitData2 = $bitData2 . ' ' . substr($bitData,23,2) . ' ' . substr($bitData,25,7) . ' ' . substr($bitData,32,8); + Log3 $iohash, 4, "$name converted to bits: " . $bitData2; + Log3 $iohash, 4, "$name decoded protocolid: $protocol ($SensorTyp) sensor id=$id, channel=$channel, rawTemp=$rawTemp, temp=$temp, hum=$hum"; + } + elsif ($protocol != "37" && defined($decodingSubs{$protocol})) # alles was nicht Protokoll #37 ist, durch den hash decodieren + { + + $SensorTyp=$decodingSubs{$protocol}{sensortype}; + + return "Prematch Error" && Log3 $iohash, 4, "$name decoded protocolid: $protocol ($SensorTyp) prematch error" if (!$decodingSubs{$protocol}{prematch}->( $rawData )); + return "crc Error" && Log3 $iohash, 4, "$name decoded protocolid: $protocol ($SensorTyp) crc error" if (!$decodingSubs{$protocol}{crcok}->( $rawData )); + + $id=$decodingSubs{$protocol}{id}->( $rawData,$bitData ); + #my $temphex=$decodingSubs{$protocol}{temphex}->( $rawData,$bitData ); + + $temp=$decodingSubs{$protocol}{temp}->( $rawData,$bitData ); + $hum=$decodingSubs{$protocol}{hum}->( $rawData,$bitData ); + $channel=$decodingSubs{$protocol}{channel}->( $rawData,$bitData ); + $model = $decodingSubs{$protocol}{model}; + $bat = $decodingSubs{$protocol}{bat}; + + Log3 $iohash, 4, "$name decoded protocolid: $protocol ($SensorTyp) sensor id=$id, channel=$channel, temp=$temp, hum=$hum"; + + } + else { + Log3 $iohash, 4, "SD_WS_Parse_unknown: converted to bits: $bitData"; + return $dummyreturnvalue; + } + + + if (!defined($model)) { + return $dummyreturnvalue; + } + + my $deviceCode; + + my $longids = AttrVal($iohash->{NAME},'longids',0); + if (($longids ne "0") && ($longids eq "1" || $longids eq "ALL" || (",$longids," =~ m/,$model,/))) + { + $deviceCode = $model . '_' . $id . $channel; + Log3 $iohash,4, "$name using longid: $longids model: $model"; + } else { + $deviceCode = $model . "_" . $channel; + } + + #print Dumper($modules{SD_WS}{defptr}); + + my $def = $modules{SD_WS}{defptr}{$iohash->{NAME} . "." . $deviceCode}; + $def = $modules{SD_WS}{defptr}{$deviceCode} if(!$def); + + if(!$def) { + Log3 $iohash, 1, 'SD_WS: UNDEFINED sensor ' . $model . ' detected, code ' . $deviceCode; + return "UNDEFINED $deviceCode SD_WS $deviceCode"; + } + #Log3 $iohash, 3, 'SD_WS: ' . $def->{NAME} . ' ' . $id; + + my $hash = $def; + $name = $hash->{NAME}; + Log3 $name, 4, "SD_WS: $name ($rawData)"; + + if (!defined(AttrVal($hash->{NAME},"event-min-interval",undef))) + { + my $minsecs = AttrVal($iohash->{NAME},'minsecs',0); + if($hash->{lastReceive} && (time() - $hash->{lastReceive} < $minsecs)) { + Log3 $hash, 4, "$deviceCode Dropped due to short time. minsecs=$minsecs"; + return ""; + } + } + + $hash->{lastReceive} = time(); + $hash->{lastMSG} = $rawData; + if (defined($bitData2)) { + $hash->{bitMSG} = $bitData2; + } else { + $hash->{bitMSG} = $bitData; + } + + my $state = "T: $temp" . ($hum > 0 ? " H: $hum":""); + + readingsBeginUpdate($hash); + readingsBulkUpdate($hash, "state", $state); + readingsBulkUpdate($hash, "temperature", $temp) if (defined($temp)); + readingsBulkUpdate($hash, "humidity", $hum) if (defined($hum) && $hum > 0); + readingsBulkUpdate($hash, "battery", $bat) if (defined($bat)); + readingsBulkUpdate($hash, "channel", $channel) if (defined($channel)); + readingsBulkUpdate($hash, "trend", $trend) if (defined($trend)); + + readingsEndUpdate($hash, 1); # Notify is done by Dispatch + + return $name; + +} + +sub SD_WS_Attr(@) +{ + my @a = @_; + + # Make possible to use the same code for different logical devices when they + # are received through different physical devices. + return if($a[0] ne "set" || $a[2] ne "IODev"); + my $hash = $defs{$a[1]}; + my $iohash = $defs{$a[3]}; + my $cde = $hash->{CODE}; + delete($modules{SD_WS}{defptr}{$cde}); + $modules{SD_WS}{defptr}{$iohash->{NAME} . "." . $cde} = $hash; + return undef; +} + + +sub SD_WS_binaryToNumber +{ + my $binstr=shift; + my $fbit=shift; + my $lbit=$fbit; + $lbit=shift if @_; + + return oct("0b".substr($binstr,$fbit,($lbit-$fbit)+1)); +} + +1; + +=pod +=item summary Supports various weather stations +=item summary_DE Unterstützt verschiedene Funk Wetterstationen +=begin html + + +

    Weather Sensors various protocols

    +
      + The SD_WS module interprets temperature sensor messages received by a Device like CUL, CUN, SIGNALduino etc.
      +
      + Known models: +
        +
      • Bresser 7009994
      • +
      • Opus XT300
      • +
      +
      + New received device are add in fhem with autocreate. +

      + + + Define +
        The received devices created automatically.
        + The ID of the defice is the cannel or, if the longid attribute is specified, it is a combination of channel and some random generated bits at powering the sensor and the channel.
        + If you want to use more sensors, than channels available, you can use the longid option to differentiate them. +
      +
      + + Generated readings: +
      Some devices may not support all readings, so they will not be presented
      +
        +
      • State (T: H:)
      • +
      • temperature (°C)
      • +
      • humidity: (The humidity (1-100 if available)
      • +
      • battery: (low or ok)
      • +
      • channel: (The Channelnumber (number if)
      • +
      +
      + Attributes + + + + Set
        N/A

      + + + Set
        N/A

      + +
    + +=end html + +=begin html_DE + + +

    SD_WS

    +
      + Das SD_WS Modul verarbeitet von einem IO Gerät (CUL, CUN, SIGNALDuino, etc.) empfangene Nachrichten von Temperatur-Sensoren.
      +
      + Unterstützte Modelle: +
        +
      • Bresser 7009994
      • +
      • Opus XT300
      • + +
      +
      + Neu empfangene Sensoren werden in FHEM per autocreate angelegt. +

      + + + Define +
        Die empfangenen Sensoren werden automatisch angelegt.
        + Die ID der angelgten Sensoren ist entweder der Kanal des Sensors, oder wenn das Attribut longid gesetzt ist, dann wird die ID aus dem Kanal und einer Reihe von Bits erzeugt, welche der Sensor beim Einschalten zufällig vergibt.
        +
      +
      + + Generierte Readings: +
        +
      • State (T: H:)
      • +
      • temperature (°C)
      • +
      • humidity: (Luftfeuchte (1-100)
      • +
      • battery: (low oder ok)
      • +
      • channel: (Der Sensor Kanal)
      • +
      +
      + Attribute + + + + Set
        N/A

      + + + Set
        N/A

      + +
    + +=end html_DE +=cut diff --git a/fhem/FHEM/14_SD_WS07.pm b/fhem/FHEM/14_SD_WS07.pm index d213920e8..ea8881f6e 100644 --- a/fhem/FHEM/14_SD_WS07.pm +++ b/fhem/FHEM/14_SD_WS07.pm @@ -115,11 +115,11 @@ SD_WS07_Parse($$) } if ($hum > 100) { - return undef; # Eigentlich muesste sowas wie ein skip rein, damit ggf. spaeter noch weitre Sensoren dekodiert werden koennen. + return ''; # Eigentlich muesste sowas wie ein skip rein, damit ggf. spaeter noch weitre Sensoren dekodiert werden koennen. } if ($temp > 700 && $temp < 3840) { - return undef; + return ''; } elsif ($temp >= 3840) { # negative Temperaturen, muss noch ueberprueft und optimiert werden $temp -= 4095; } @@ -201,6 +201,8 @@ sub SD_WS07_Attr(@) =pod +=item summary Supports weather sensors protocl 7 from SIGNALduino +=item summary_DE Unterstützt Wettersensoren mit Protokol 7 vom SIGNALduino =begin html @@ -261,7 +263,7 @@ sub SD_WS07_Attr(@)
      Das SD_WS07 Module verarbeitet von einem IO Geraet (CUL, CUN, SIGNALDuino, etc.) empfangene Nachrichten von Temperatur-Sensoren.

      - Unterstuetze Modelle: + Unterstützte Modelle:
      • Eurochon EAS800z
      • Technoline WS6750/TX70DTH
      • diff --git a/fhem/FHEM/14_SD_WS09.pm b/fhem/FHEM/14_SD_WS09.pm index ef9c8d8ea..45e7e13c7 100644 --- a/fhem/FHEM/14_SD_WS09.pm +++ b/fhem/FHEM/14_SD_WS09.pm @@ -10,6 +10,8 @@ use strict; use warnings; + use Digest::CRC qw(crc); + #use Math::Round qw/nearest/; sub SD_WS09_Initialize($) @@ -25,7 +27,7 @@ ."windKorrektur:-3,-2,-1,0,1,2,3 " ."$readingFnAttributes "; $hash->{AutoCreate} = - { "SD_WS09.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.* windKorrektur:.*:0", FILTER => "%NAME", GPLOT => "temp4hum4:Temp/Hum,", autocreateThreshold => "2:180"} }; + { "SD_WS09.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.* windKorrektur:.*:0 " , FILTER => "%NAME", GPLOT => "temp4hum4:Temp/Hum,", autocreateThreshold => "2:180"} }; } @@ -71,9 +73,12 @@ my $hlen = length($rawData); my $blen = $hlen * 4; my $bitData = unpack("B$blen", pack("H$hlen", $rawData)); + my $bitData2; + my $bitData20; my $rain = 0; my $deviceCode = 0; my $model = "undef"; # 0xFFA -> WS0101/WH1080 alles andere -> CTW600 + my $modelattr ; my $modelid; my $windSpeed = 0; my $windguest =0; @@ -85,24 +90,80 @@ my $windDirection ; my $windDirectionText; - - Log3 $name, 4, "SD_WS09_Parse HEX=$msg length: $hlen"; - my $syncpos= index($bitData,"11111110"); #7x1 1x0 preamble - Log3 $iohash, 3, "SD_WS09_Parse Bin=$bitData syncp=$syncpos length:".length($bitData) ; - + $modelattr = AttrVal($iohash->{NAME},'WS09_WSModel',0); + if ($modelattr eq '0'){ + $modelattr = "undef"; + } + + my $crcwh1080 = AttrVal($iohash->{NAME},'WS09_CRCAUS',0); + Log3 $iohash, 3, "$name: SD_WS09_Parse CRC_AUS:$crcwh1080 Model=$modelattr" ; + + my $syncpos= index($bitData,"11111110"); #7x1 1x0 preamble + Log3 $iohash, 3, "$name: SD_WS09_Parse0 Bin=$bitData syncp=$syncpos length:".length($bitData) ; + if ($syncpos ==-1 || length($bitData)-$syncpos < 78) { - Log3 $iohash, 3, "EXIT SD_WS09_Parse msg=$rawData syncp=$syncpos length:".length($bitData) ; + Log3 $iohash, 3, "$name: SD_WS09_Parse EXIT: msg=$rawData syncp=$syncpos length:".length($bitData) ; return undef; } - + my $wh = substr($bitData,0,8); - if($wh == "11111111") { + #CRC-Check bei WH1080/WS0101 WS09_CRCAUS=0 und WS09_WSModel = undef oder Wh1080 + if(($crcwh1080 == 0) && ($modelattr ne "CTW600")) { + if($wh == "11111111") { + if ($syncpos == 0) + { + $hlen = length($rawData); + $blen = $hlen * 4; + $bitData2 = '11'.unpack("B$blen", pack("H$hlen", $rawData)); + $bitData20 = substr($bitData2,0,length($bitData2)-2); + $blen = length($bitData20); + $hlen = $blen / 4; + $msg = 'P9#'.unpack("H$hlen", pack("B$blen", $bitData20)); + $bitData = $bitData20; + Log3 $iohash, 3, "$name: SD_WS09_Parse sync1 msg=$msg syncp=$syncpos length:".length($bitData) ; + } + + if ($syncpos == 1) + { + $hlen = length($rawData); + $blen = $hlen * 4; + $bitData2 = '1'.unpack("B$blen", pack("H$hlen", $rawData)); + $bitData20 = substr($bitData2,0,length($bitData2)-1); + $blen = length($bitData20); + $hlen = $blen / 4; + $msg = 'P9#'.unpack("H$hlen", pack("B$blen", $bitData20)); + $bitData = $bitData20; + Log3 $iohash, 3, "$name: SD_WS09_Parse sync2 msg=$msg syncp=$syncpos length:".length($bitData) ; + } + + + my $datacheck = pack( 'H*', substr($msg,5,length($msg)-5) ); + my $crcmein = Digest::CRC->new(width => 8, poly => 0x31); + my $rr2 = $crcmein->add($datacheck)->hexdigest; + if ($rr2 eq "0"){ + $model = "WH1080"; + Log3 $iohash, 3, "$name: SD_WS09_Parse CRC_OK: CRC=$rr2 Model=$model attr=$modelattr" ; + }else{ + Log3 $iohash, 3, "$name: SD_WS09_Parse CRC_Error: msg=$msg CRC=$rr2 " ; + return undef; + } + }else{ + $model = "CTW600"; + Log3 $iohash, 3, "$name: SD_WS09_Parse CTW600: Model=$model attr=$modelattr" ; + } + }; + + if( ($wh == "11111111") || ($model eq "WH1080")) { + if ($modelattr eq "CTW600"){ + Log3 $iohash, 3, "$name: SD_WS09_WH1080 off=$modelattr Model=$model " ; + return undef; + } $sensdata = substr($bitData,8); my $whid = substr($sensdata,0,4); if( $whid == "1010" ){ # A - Log3 $iohash, 3, "WH SD_WS09_Parse WH=$wh msg=$sensdata syncp=$syncpos length:".length($sensdata) ; + Log3 $iohash, 3, "$name: SD_WS09_Parse WH=$wh msg=$sensdata syncp=$syncpos length:".length($sensdata) ; $model = "WH1080"; $id = SD_WS09_bin2dec(substr($sensdata,4,8)); $bat = (SD_WS09_bin2dec((substr($sensdata,64,4))) == 0) ? 'ok':'low' ; # decode battery = 0 --> ok @@ -111,11 +172,11 @@ $windDirection = SD_WS09_bin2dec(substr($sensdata,68,4)); $windDirectionText = $winddir_name[$windDirection]; $windSpeed = round((SD_WS09_bin2dec(substr($sensdata,32,8))* 34)/100,01); - Log3 $iohash, 3, "SD_WS09_Parse ".$model." Windspeed bit: ".substr($sensdata,32,8)." Dec: " . $windSpeed ; + Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Windspeed bit: ".substr($sensdata,32,8)." Dec: " . $windSpeed ; $windguest = round((SD_WS09_bin2dec(substr($sensdata,40,8)) * 34)/100,01); - Log3 $iohash, 3, "SD_WS09_Parse ".$model." Windguest bit: ".substr($sensdata,40,8)." Dec: " . $windguest ; + Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Windguest bit: ".substr($sensdata,40,8)." Dec: " . $windguest ; $rain = SD_WS09_bin2dec(substr($sensdata,56,8)) * 0.3; - Log3 $iohash, 3, "SD_WS09_Parse ".$model." Rain bit: ".substr($sensdata,56,8)." Dec: " . $rain ; + Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Rain bit: ".substr($sensdata,56,8)." Dec: " . $rain ; } else { if( $whid == "1011" ){ # B DCF-77 Zeitmeldungen vom Sensor my $hrs1 = substr($sensdata,16,8); @@ -125,57 +186,70 @@ my $mday; my $month; my $year; - Log3 $iohash, 3, "Zeitmeldung SD_WS09_Parse HRS1=$hrs1" ; - # $hrs = SD_WS09_BCD2bin(substr($sensdata,16,8) & 0x3F) ; #h + $id = SD_WS09_bin2dec(substr($sensdata,4,8)); + Log3 $iohash, 3, "$name: SD_WS09_Parse Zeitmeldung0: HRS1=$hrs1 id:$id" ; $hrs = SD_WS09_BCD2bin(substr($sensdata,18,6) ) ; # Stunde $mins = SD_WS09_BCD2bin(substr($sensdata,24,8)); # Minute $sec = SD_WS09_BCD2bin(substr($sensdata,32,8)); # Sekunde #day month year $year = SD_WS09_BCD2bin(substr($sensdata,40,8)); # Jahr - #$month = SD_WS09_BCD2bin(substr($sensdata,48,8) & 0x1f); #d $month = SD_WS09_BCD2bin(substr($sensdata,51,5)); # Monat $mday = SD_WS09_BCD2bin(substr($sensdata,56,8)); # Tag - Log3 $iohash, 3, "Zeitmeldung SD_WS09_Parse msg=$rawData syncp=$syncpos length:".length($bitData) ; - Log3 $iohash, 3, "Zeitmeldung SD_WS09_Parse HH:mm:ss - ".$hrs.":".$mins.":".$sec ; - Log3 $iohash, 3, "Zeitmeldung SD_WS09_Parse dd:mm:yy - ".$mday.":".$month.":".$year ; + Log3 $iohash, 3, "$name: SD_WS09_Parse Zeitmeldung1: msg=$rawData syncp=$syncpos length:".length($bitData) ; + Log3 $iohash, 3, "$name: SD_WS09_Parse Zeitmeldung2: HH:mm:ss - ".$hrs.":".$mins.":".$sec ; + Log3 $iohash, 3, "$name: SD_WS09_Parse Zeitmeldung3: dd.mm.yy - ".$mday.":".$month.":".$year ; + return $name; } - Log3 $iohash, 3, "Zeitmeldung SD_WS09_Parse msg=$rawData syncp=$syncpos length:".length($sensdata) ; - return undef; + Log3 $iohash, 3, "$name: SD_WS09_Parse Zeitmeldung4: msg=$rawData syncp=$syncpos length:".length($sensdata) ; + return undef; } }else{ + if ($modelattr eq "WH1080"){ + Log3 $iohash, 3, "$name: SD_WS09_CTW600 off=$modelattr Model=$model " ; + return undef; + } else { # eine CTW600 wurde erkannt $sensdata = substr($bitData,$syncpos+8); - Log3 $iohash, 3, "WH_2 SD_WS09_Parse WH=$wh msg=$sensdata syncp=$syncpos length:".length($sensdata) ; + Log3 $iohash, 3, "$name: SD_WS09_Parse CTW WH=$wh msg=$sensdata syncp=$syncpos length:".length($sensdata) ; $model = "CTW600"; + my $nn1 = substr($sensdata,10,2); # Keine Bedeutung + my $nn2 = substr($sensdata,62,4); # Keine Bedeutung $modelid = substr($sensdata,0,4); - Log3 $iohash, 3, "SD_WS09_Parse Id: ".$modelid." Bin-Sync=$sensdata syncp=$syncpos length:".length($sensdata) ; + Log3 $iohash, 3, "$name: SD_WS09_Parse Id: ".$modelid." NN1:$nn1 NN2:$nn2" ; + Log3 $iohash, 3, "$name: SD_WS09_Parse Id: ".$modelid." Bin-Sync=$sensdata syncp=$syncpos length:".length($sensdata) ; $bat = SD_WS09_bin2dec((substr($sensdata,0,3))) ; $id = SD_WS09_bin2dec(substr($sensdata,4,6)); $temp = (SD_WS09_bin2dec(substr($sensdata,12,10)) - 400)/10; - $hum = SD_WS09_bin2dec(substr($sensdata,22,8)); + $hum = SD_WS09_bin2dec(substr($sensdata,22,8)); $windDirection = SD_WS09_bin2dec(substr($sensdata,66,4)); $windDirectionText = $winddir_name[$windDirection]; $windSpeed = round(SD_WS09_bin2dec(substr($sensdata,30,16))/240,01); - Log3 $iohash, 3, "SD_WS09_Parse ".$model." Windspeed bit: ".substr($sensdata,32,8)." Dec: " . $windSpeed ; + Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Windspeed bit: ".substr($sensdata,32,8)." Dec: " . $windSpeed ; $windguest = round((SD_WS09_bin2dec(substr($sensdata,40,8)) * 34)/100,01); - Log3 $iohash, 3, "SD_WS09_Parse ".$model." Windguest bit: ".substr($sensdata,40,8)." Dec: " . $windguest ; + Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Windguest bit: ".substr($sensdata,40,8)." Dec: " . $windguest ; $rain = round(SD_WS09_bin2dec(substr($sensdata,46,16)) * 0.3,01); - Log3 $iohash, 3, "SD_WS09_Parse ".$model." Rain bit: ".substr($sensdata,46,16)." Dec: " . $rain ; + Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." Rain bit: ".substr($sensdata,46,16)." Dec: " . $rain ; + } } - Log3 $iohash, 3, "SD_WS09_Parse ".$model." id:$id :$sensdata "; - Log3 $iohash, 3, "SD_WS09_Parse ".$model." id:$id, bat:$bat, temp=$temp, hum=$hum, winddir=$windDirection:$windDirectionText wS=$windSpeed, wG=$windguest, rain=$rain"; + Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." id:$id :$sensdata "; + Log3 $iohash, 3, "$name: SD_WS09_Parse ".$model." id:$id, bat:$bat, temp=$temp, hum=$hum, winddir=$windDirection:$windDirectionText wS=$windSpeed, wG=$windguest, rain=$rain"; if($hum > 100 || $hum < 0) { - Log3 $iohash, 3, "Hum SD_WS09_Parse hum=$hum msg=$rawData " ; + Log3 $iohash, 3, "$name: SD_WS09_Parse HUM: hum=$hum msg=$rawData " ; return undef; } + if($temp > 60 || $temp < -40) { + Log3 $iohash, 3, "$name: SD_WS09_Parse TEMP: Temp=$temp msg=$rawData " ; + return undef; + } + my $longids = AttrVal($iohash->{NAME},'longids',0); if ( ($longids ne "0") && ($longids eq "1" || $longids eq "ALL" || (",$longids," =~ m/,$model,/))) { $deviceCode=$model."_".$id; - Log3 $iohash,4, "$name using longid: $longids model: $model"; + Log3 $iohash,4, "$name: SD_WS09_Parse using longid: $longids model: $model"; } else { $deviceCode = $model; } @@ -184,14 +258,15 @@ $def = $modules{SD_WS09}{defptr}{$deviceCode} if(!$def); if(!$def) { - Log3 $iohash, 1, 'SD_WS09: UNDEFINED sensor ' . $model . ' detected, code ' . $deviceCode; + Log3 $iohash, 1, 'SD_WS09_Parse UNDEFINED sensor ' . $model . ' detected, code ' . $deviceCode; return "UNDEFINED $deviceCode SD_WS09 $deviceCode"; } - - my $hash = $def; - $name = $hash->{NAME}; + + my $hash = $def; + $name = $hash->{NAME}; Log3 $name, 4, "SD_WS09_Parse: $name ($rawData)"; + my $windkorr = AttrVal($hash->{NAME},'windKorrektur',0); if ($windkorr != 0 ) { @@ -205,18 +280,15 @@ { my $minsecs = AttrVal($iohash->{NAME},'minsecs',0); if($hash->{lastReceive} && (time() - $hash->{lastReceive} < $minsecs)) { - Log3 $hash, 4, "$deviceCode Dropped due to short time. minsecs=$minsecs"; + Log3 $hash, 4, "SD_WS09_Parse $deviceCode Dropped due to short time. minsecs=$minsecs"; return ""; } } - $def->{lastMSG} = $rawData; - #$def->{bitMSG} = $bitData2; - + my $state = "T: $temp ". ($hum>0 ? " H: $hum ":" ")." Ws: $windSpeed "." Wg: $windguest "." Wd: $windDirectionText "." R: $rain"; - # my $state = "T: $temp". ($hum>0 ? " H: $hum":""); - + readingsBeginUpdate($hash); readingsBulkUpdate($hash, "state", $state); readingsBulkUpdate($hash, "temperature", $temp) if ($temp ne""); @@ -228,7 +300,8 @@ readingsBulkUpdate($hash, "rain", $rain ); readingsBulkUpdate($hash, "windGust", $windguest ); readingsBulkUpdate($hash, "windSpeed", $windSpeed ); - readingsBulkUpdate($hash, "windDirectionDegree", $windDirection ); + readingsBulkUpdate($hash, "windDirection", $windDirection ); + readingsBulkUpdate($hash, "windDirectionDegree", $windDirection * 360 / 16); readingsBulkUpdate($hash, "windDirectionText", $windDirectionText ); readingsEndUpdate($hash, 1); # Notify is done by Dispatch @@ -272,11 +345,13 @@ return $flip; } - sub SD_WS09_BCD2bin($) { - my $BCD = shift; - return (10 * ($BCD >> 4 & 0xF) + ($BCD & 0xF)); - } + sub SD_WS09_BCD2bin($) { + my $binary = shift; + my $int = unpack("N", pack("B32", substr("0" x 32 . $binary, -32))); + my $BCD = sprintf("%x", $int ); + return $BCD; + } @@ -284,12 +359,18 @@ =pod +=item summary Supports weather sensors protocl 9 from SIGNALduino +=item summary_DE Unterstützt Wettersensoren mit Protokol 9 vom SIGNALduino =begin html

        Wether Sensors protocol #9

          The SD_WS09 module interprets temperature sensor messages received by a Device like CUL, CUN, SIGNALduino etc.
          + Requires Perl-Modul Digest::CRC.
          +
          + cpan install Digest::CRC or sudo apt-get install libdigest-crc-perl
          +

          Known models:
            @@ -328,10 +409,9 @@
          • ignore
          • showtime
          • readingFnAttributes
          • -
          • model
            +
          • Model
            WH1080, CTW600

          • -
          • windKorrektur
            -3,-2,-1,0,1,2,3

          • @@ -353,6 +433,12 @@
              Das SD_WS09 Module verarbeitet von einem IO Gerät (CUL, CUN, SIGNALDuino, etc.) empfangene Nachrichten von Temperatur-Sensoren.

              + Perl-Modul Digest::CRC erforderlich.
              +
              + cpan install Digest::CRC oder auch
              + sudo apt-get install libdigest-crc-perl
              +
              +
              Unterstütze Modelle:
              • WS-0101 --> Model: WH1080
              • @@ -367,8 +453,8 @@ Define
                  Die empfangenen Sensoren werden automatisch angelegt.
                  - Die ID der angelegten Sensoren wird nach jedem Batteriewechsel geändert, welche der Sensor beim Einschalten zufällig vergibt.
                  - CRC Checksumme wird zur Zeit noch nicht überprüft, deshalb werden Sensoren bei denen die Luftfeuchte < 0 oder > 100 ist, nicht angelegt.
                  + Die ID der angelegten Sensoren wird nach jedem Batteriewechsel geändert, welche der Sensor beim Einschalten zufällig vergibt.
                  + CRC Checksumme wird zur Zeit noch nicht überprüft, deshalb werden Sensoren bei denen die Luftfeuchte < 0 oder > 100 ist, nicht angelegt.

                @@ -389,10 +475,9 @@
              • ignore
              • showtime
              • readingFnAttributes
              • -
              • model
                +
              • Model
                WH1080, CTW600

              • -
              • windKorrektur
                Korrigiert die Nord-Ausrichtung des Windrichtungsmessers, wenn dieser nicht richtig nach Norden ausgerichtet ist. -3,-2,-1,0,1,2,3 diff --git a/fhem/FHEM/14_SD_WS_Maverick.pm b/fhem/FHEM/14_SD_WS_Maverick.pm new file mode 100644 index 000000000..2320e8c80 --- /dev/null +++ b/fhem/FHEM/14_SD_WS_Maverick.pm @@ -0,0 +1,298 @@ +############################################## +# $Id$ +# +# The purpose of this module is to support Maverick sensors +# Sidey79 & Cruizer 2016 +# + +package main; + + +use strict; +use warnings; + +#use Data::Dumper; + + +sub +SD_WS_Maverick_Initialize($) +{ + my ($hash) = @_; + + $hash->{Match} = "^P47#AA9995[A-Fa-f0-9]+"; + $hash->{DefFn} = "SD_WS_Maverick_Define"; + $hash->{UndefFn} = "SD_WS_Maverick_Undef"; + $hash->{ParseFn} = "SD_WS_Maverick_Parse"; + $hash->{AttrFn} = "SD_WS_Maverick_Attr"; + $hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 showtime:1,0 " . + "$readingFnAttributes "; + $hash->{AutoCreate} = + { "SD_WS_Maverick.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", FILTER => "%NAME", autocreateThreshold => "2:180"} }; +## Todo: Pruefen der Autocreate Einstellungen + +} + +############################# +sub +SD_WS_Maverick_Define($$) +{ + my ($hash, $def) = @_; + my @a = split("[ \t][ \t]*", $def); + + return "wrong syntax: define SD_WS_Maverick ".int(@a) + if(int(@a) < 3 ); + + $hash->{CODE} = $a[2]; + $hash->{lastMSG} = ""; + # $hash->{bitMSG} = ""; + + $modules{SD_WS_Maverick}{defptr}{$a[2]} = $hash; + $hash->{STATE} = "Defined"; + + my $name= $hash->{NAME}; + return undef; +} + +##################################### +sub +SD_WS_Maverick_Undef($$) +{ + my ($hash, $name) = @_; + delete($modules{SD_WS_Maverick}{defptr}{$hash->{CODE}}) + if(defined($hash->{CODE}) && + defined($modules{SD_WS_Maverick}{defptr}{$hash->{CODE}})); + return undef; +} + + +################################### +sub +SD_WS_Maverick_Parse($$) +{ + my ($iohash, $msg) = @_; + #my $rawData = substr($msg, 2); + my $name = $iohash->{NAME}; + my (undef ,$rawData) = split("#",$msg); + #$protocol=~ s/^P(\d+)/$1/; # extract protocol + + my $model = "SD_WS_Maverick"; + my $hlen = length($rawData); + #my $blen = $hlen * 4; + #my $bitData = unpack("B$blen", pack("H$hlen", $rawData)); + + Log3 $name, 3, "SD_WS_Maverick_Parse $model ($msg) length: $hlen"; + + #1 8 13 18 26 + #AA999559 55555 95999 A9A9A669 Sensor 1 =21 2Grad + #AA999559 95996 55555 95A65565 Sensor 2 =22 2Grad + # + #Header Sen1 Sens2 + #my $hashumidity = FALSE; + + ## Todo: Change decoding per model into a foreach + #foreach $key (keys %models) { + # .... + #} + + # + my $startup = substr($rawData,6,2); + my $temp_str1 = substr($rawData,8,5); + my $temp_str2 = substr($rawData,13,5); + my $unknown = substr($rawData,18); + + Log3 $iohash, 4, "$model decoded protocolid: 47 sensor startup=$startup, temp1=$temp_str1, temp2=$temp_str2, unknown=$unknown"; + + # Convert + $temp_str1 =~ tr/569A/0123/; + $temp_str2 =~ tr/569A/0123/; + + # Calculate temp from data + my $c; + my $temp1=-532; + for ( my $i = 0; $i < length($temp_str1); $i++ ) { + $c = substr( $temp_str1, $i, 1); + $temp1 += $c*4**(4-$i); + } + + my $temp2=-532; + for ( my $i = 0; $i < length($temp_str2); $i++ ) { + $c = substr( $temp_str2, $i, 1); + $temp2 += $c*4**(4-$i); + } + + + Log3 $iohash, 4, "$model decoded protocolid: temp1=$temp1, temp2=$temp2;"; + + + + + + + #print Dumper($modules{SD_WS_Maverick}{defptr}); + + my $def = $modules{SD_WS_Maverick}{defptr}{$iohash->{NAME} }; + $def = $modules{SD_WS_Maverick}{defptr}{$model} if(!$def); + + if(!$def) { + Log3 $iohash, 1, 'SD_WS_Maverick: UNDEFINED sensor ' . $model; + return "UNDEFINED $model SD_WS_Maverick $model"; + } + #Log3 $iohash, 3, 'SD_WS_Maverick: ' . $def->{NAME} . ' ' . $id; + + my $hash = $def; + $name = $hash->{NAME}; + Log3 $name, 4, "SD_WS_Maverick: $name ($rawData)"; + + if (!defined(AttrVal($hash->{NAME},"event-min-interval",undef))) + { + my $minsecs = AttrVal($iohash->{NAME},'minsecs',0); + if($hash->{lastReceive} && (time() - $hash->{lastReceive} < $minsecs)) { + Log3 $hash, 4, "$model Dropped due to short time. minsecs=$minsecs"; + return ""; + } + } + + $hash->{lastReceive} = time(); + $hash->{lastMSG} = $rawData; + #$hash->{bitMSG} = $bitData2; + + my $state = "T: $temp1"." T2: $temp2" ; + + readingsBeginUpdate($hash); + readingsBulkUpdate($hash, "state", $state); + readingsBulkUpdate($hash, "messageType", $startup); + + readingsBulkUpdate($hash, "temp1", $temp1) if ($temp1 ne""); + readingsBulkUpdate($hash, "temp2", $temp2) if ($temp2 ne""); + + readingsEndUpdate($hash, 1); # Notify is done by Dispatch + + return $name; + +} + +sub SD_WS_Maverick_Attr(@) +{ + my @a = @_; + + # Make possible to use the same code for different logical devices when they + # are received through different physical devices. + return if($a[0] ne "set" || $a[2] ne "IODev"); + my $hash = $defs{$a[1]}; + my $iohash = $defs{$a[3]}; + my $cde = $hash->{CODE}; + delete($modules{SD_WS_Maverick}{defptr}{$cde}); + $modules{SD_WS_Maverick}{defptr}{$iohash->{NAME} . "." . $cde} = $hash; + return undef; +} + + +1; + + +=pod +=item summary Supports maverick temperature sensors protocl 47 from SIGNALduino +=item summary_DE Unterstützt Maverick Temperatursensoren mit Protokol 47 vom SIGNALduino +=begin html + + +

                Wether Sensors protocol #7

                +
                  + The SD_WS_Maverick module interprets temperature sensor messages received by a Device like CUL, CUN, SIGNALduino etc.
                  +
                  + Known models: +
                    +
                  • Eurochon EAS800z
                  • +
                  • Technoline WS6750/TX70DTH
                  • +
                  +
                  + New received device are add in fhem with autocreate. +

                  + + + Define +
                    The received devices created automatically.
                    + The ID of the defice is the cannel or, if the longid attribute is specified, it is a combination of channel and some random generated bits at powering the sensor and the channel.
                    + If you want to use more sensors, than channels available, you can use the longid option to differentiate them. +
                  +
                  + + Generated readings: +
                  Some devices may not support all readings, so they will not be presented
                  +
                    +
                  • State (T: H:)
                  • +
                  • temperature (°C)
                  • +
                  • humidity: (The humidity (1-100 if available)
                  • +
                  • battery: (low or ok)
                  • +
                  • channel: (The Channelnumber (number if)
                  • +
                  +
                  + Attributes + + + + Set
                    N/A

                  + + + Set
                    N/A

                  + +
                + +=end html + +=begin html_DE + + +

                SD_WS_Maverick

                +
                  + Das SD_WS_Maverick Module verarbeitet von einem IO Geraet (CUL, CUN, SIGNALDuino, etc.) empfangene Nachrichten von Temperatur-Sensoren.
                  +
                  + Unterstützte Modelle: +
                    +
                  • Maverick
                  • +
                  +
                  + Neu empfangene Sensoren werden in FHEM per autocreate angelegt. +

                  + + + Define +
                    Die empfangenen Sensoren werden automatisch angelegt.
                    + Die ID der angelegten Sensoren ist entweder der Kanal des Sensors, oder wenn das Attribut longid gesetzt ist, dann wird die ID aus dem Kanal und einer Reihe von Bits erzeugt, welche der Sensor beim Einschalten zufällig vergibt.
                    +
                  +
                  + + Generierte Readings: +
                    +
                  • State (T: H:)
                  • +
                  • temperature (°C)
                  • +
                  • humidity: (Luftfeuchte (1-100)
                  • +
                  • battery: (low oder ok)
                  • +
                  • channel: (Der Sensor Kanal)
                  • +
                  +
                  + Attribute + + + + Set
                    N/A

                  + + + Set
                    N/A

                  + +
                + +=end html_DE +=cut diff --git a/fhem/FHEM/90_SIGNALduino_un.pm b/fhem/FHEM/90_SIGNALduino_un.pm index be1c42c43..6799e4ff8 100644 --- a/fhem/FHEM/90_SIGNALduino_un.pm +++ b/fhem/FHEM/90_SIGNALduino_un.pm @@ -382,6 +382,8 @@ SIGNALduino_un_binflip($) 1; =pod +=item summary Helper module for SIGNALduino +=item summary_DE Unterstützungsmodul für SIGNALduino =begin html @@ -426,7 +428,7 @@ SIGNALduino_un_binflip($)

                SIGNALduino_un

                  Das SIGNALduino_un module ist ein Hilfsmodul um unbekannte Nachrichten debuggen und analysieren zu koennen. - Das Modul legt keinerlei Geraete oder aehnliches an. + Das Modul legt keinerlei Geräte oder ähnliches an.

                  @@ -437,7 +439,7 @@ SIGNALduino_un_binflip($) Es ist moeglich ein Geraet manuell zu definieren, aber damit passiert ueberhaupt nichts. Autocreate wird auch keinerlei Geraete aus diesem Modul anlegen.
                  - Die einzgeste Funktion dieses Modules ist, ab Verbose 4 Logmeldungen ueber die Empfangene Nachricht ins Log zu schreiben. Dabei kann man sich leider nicht darauf verlassen, dass die Nachricht korrekt dekodiert wurde.
                  + Die einzgeste Funktion dieses Modules ist, ab Verbose 4 Logmeldungen über die Empfangene Nachricht ins Log zu schreiben. Dabei kann man sich leider nicht darauf verlassen, dass die Nachricht korrekt dekodiert wurde.
                  Dieses Modul wird alle Nachrichten verarbeiten, welche von anderen Modulen nicht verarbeitet wurden. Set
                    N/A

                  diff --git a/fhem/FHEM/98_Dooya.pm b/fhem/FHEM/98_Dooya.pm new file mode 100644 index 000000000..221f7a739 --- /dev/null +++ b/fhem/FHEM/98_Dooya.pm @@ -0,0 +1,1251 @@ +###################################################### +# $Id$ +# +# Dooya module for FHEM +# Thanks for templates/coding from Somfy and SIGNALduino team +# +# Needs SIGNALduino. +# Published under GNU GPL License, v2 +# History: +# 0.10 2016-02-16 Jarnsen initial template +# 0.20 2016-03-06 darkmission first functions, renamed from 10_ to 99_ +# 0.21 2016-03-06 darkmission Bug default channel corrected, changed attribute repetition to SignalRepeats +# 0.22 2016-03-10 darkmission code cleaned, renamed from 99_ to 98_ +# 0.23 2016-03-11 Jarnsen AttrList cleaned and change priority +# 1.00 2016-03-12 darkmission autocreate, parse communication from SIGNALduino for correct position when using remote from doooya +# 1.10 2016-03-13 Ralf9 changed SendCommand with sendMsg +# 1.11 2016-03-17 Ralf9 ID + Channel = DeviceCode +# 1.12 2016-04-26 Jarnsen im Dooya parse cmd geändert +# +#TODOS: +# - Groups, diff by channels +# +# +###################################################### + + +package main; + +use strict; +use warnings; + +#use List::Util qw(first max maxstr min minstr reduce shuffle sum); + +my %codes = ( + "01010101" => "stop", # stop the current movement + "00010001" => "off", # go "up" + "00110011" => "on", # go "down" + "11001100" => "prog", # finish pairing +); + +my %sets = ( + "off" => "noArg", + "on" => "noArg", + "down"=> "noArg", + "stop" => "noArg", + "prog" => "noArg", +# "on-for-timer" => "textField", +# "off-for-timer" => "textField", + "pos" => "0,10,20,30,40,50,60,70,80,90,100" # Todo: Warum nicht als Slider? +# "pos" => "slider,0,10,100" +); + +my %sendCommands = ( + "off" => "off", + "open" => "off", + "on" => "on", + "close" => "on", + "prog" => "prog", + "stop" => "stop" +); + +my %dooya_c2b; # Todo: Als internal speichern +my $dooya_updateFreq = 3; # Interval for State update # Todo: Als internal speichern + +# supported models (blinds and shutters) +my %models = ( + dooyablinds => 'blinds', + dooyashutter => 'shutter' +); + + +################################################## +# new globals for new set +# + +my $dooya_posAccuracy = 2; # Todo: Als internal speichern +my $dooya_maxRuntime = 50; # Todo: Als internal speichern + +my %positions = ( + "moving" => "50", + "open" => "0", + "off" => "0", + "down" => "150", + "closed" => "200", + "on" => "200" +); + +my %translations = ( + "0" => "open", + "10" => "10", + "20" => "20", + "30" => "30", + "40" => "40", + "50" => "50", + "60" => "60", + "70" => "70", + "80" => "80", + "90" => "90", + "100" => "100", + "150" => "down", + "200" => "closed" +); + +###################################################### +# Forward declarations +# +sub Dooya_CalcCurrentPos($$$$); + +###################################################### +sub myUtilsDooya_Initialize($) { + $modules{Dooya}{LOADED} = 1; + my $hash = $modules{Dooya}; + + Dooya_Initialize($hash); +} # end sub myUtilsDooya_initialize + +###################################################### +sub Dooya_Initialize($) { + my ($hash) = @_; + + # map commands from web interface to codes used in Dooya + foreach my $k ( keys %codes ) { + $dooya_c2b{ $codes{$k} } = $k; + } + + $hash->{SetFn} = "Dooya_Set"; + #$hash->{StateFn} = "Dooya_SetState"; + $hash->{DefFn} = "Dooya_Define"; + $hash->{UndefFn} = "Dooya_Undef"; + $hash->{ParseFn} = "Dooya_Parse"; + $hash->{AttrFn} = "Dooya_Attr"; + $hash->{Match} = "^P16#[A-Fa-f0-9]+"; + $hash->{AttrList} = " IODev" + . " SignalRepeats:5,10,15,20" + . " channel:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" + . " drive-down-time-to-100" + . " drive-down-time-to-close" + . " drive-up-time-to-100" + . " drive-up-time-to-open" + . " additionalPosReading" + . " $readingFnAttributes" + . " setList" + . " ignore:0,1" + . " dummy:1,0" +# . " model:dooyablinds,dooyashutter" + . " loglevel:0,1,2,3,4,5,6"; + + $hash->{AutoCreate} = + { "Dooya.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", + FILTER => "%NAME", + autocreateThreshold => "2:10" } }; +} + +###################################################### +sub Dooya_StartTime($) { + my ($d) = @_; + + my ($s, $ms) = gettimeofday(); + + my $t = $s + ($ms / 1000000); # 10 msec + my $t1 = 0; + $t1 = $d->{'starttime'} if(exists($d->{'starttime'} )); + $d->{'starttime'} = $t; + my $dt = sprintf("%.2f", $t - $t1); + + return $dt; +} # end sub Dooya_StartTime + +###################################################### +sub Dooya_Define($$) { + my ( $hash, $def ) = @_; + my @a = split( "[ \t][ \t]*", $def ); + + my $u = "wrong syntax: define Dooya id "; + + # fail early and display syntax help + if ( int(@a) < 3 ) { + return $u; + } + + my ($id, $channel) = split('_', $a[2]); + Log3 $hash,4 ,"Dooya_Define: id = $id channel = $channel"; + + # check id format (28 binaer digits) + if ( ( $id !~ m/^[0-1]{28}$/i ) ) { + return "Define $a[0]: wrong address format: specify a 28 binaer id value " + } + + # group devices by their id + my $name = $a[0]; + + $hash->{ID} = uc($id); + $hash->{CHANNEL} = $channel; + + my $tn = TimeNow(); + + my $code = uc($a[2]); + my $ncode = 1; + $hash->{CODE}{ $ncode++ } = $code; + $modules{Dooya}{defptr}{$code}{$name} = $hash; + $hash->{move} = 'stop'; + AssignIoPort($hash); +} + +###################################################### +sub Dooya_Undef($$) { + my ( $hash, $name ) = @_; + + foreach my $c ( keys %{ $hash->{CODE} } ) { + $c = $hash->{CODE}{$c}; + + # As after a rename the $name my be different from the $defptr{$c}{$n} + # we look for the hash. + foreach my $dname ( keys %{ $modules{Dooya}{defptr}{$c} } ) { + if ( $modules{Dooya}{defptr}{$c}{$dname} == $hash ) { + delete( $modules{Dooya}{defptr}{$c}{$dname} ); + } + } + } + return undef; +} + +###################################################### +sub Dooya_SendCommand($@){ + + my ($hash, @args) = @_; + my $ret = undef; + my $cmd = $args[0]; + my $message; + my $chan; + my $channel; + my $SignalRepeats; + my $name = $hash->{NAME}; + my $bin; + my $numberOfArgs = int(@args); + + Log3($name,4,"Dooya_sendCommand: $name -> cmd :$cmd: "); + + my $command = $dooya_c2b{ $cmd }; + + # eigentlich ueberfluessig, da oben schon auf Existenz geprueft wird -> %sets + if ( !defined($command) ) { + return "Unknown argument $cmd, choose one of " + . join( " ", sort keys %dooya_c2b ); + } + + my $io = $hash->{IODev}; + + $SignalRepeats = AttrVal($name,'SignalRepeats', '10'); + Log3 $io,4, "Dooya set SignalRepeats: $SignalRepeats for $io->{NAME}"; + + $chan = AttrVal($name,'channel', undef); + if (!defined($chan)) { + $chan = $hash->{CHANNEL}; + } + $channel = sprintf("%04b",$chan); + Log3 $io,4, "Dooya set channel: $chan ($channel) for $io->{NAME}"; + + my $value = $name ." ". join(" ", @args); + + $bin = uc($hash->{ID}) . $channel . $command; + #print ("data = $bin \n"); + + Log3 $io, 4, "Dooya set value = $value"; + + ## Send Message to IODev using IOWrite + $message = 'P16#' . $bin . '#R' . $SignalRepeats; + Log3 $io, 4, "Dooya_sendCommand: $name -> message :$message: "; + IOWrite($hash, 'sendMsg', $message); + + return $ret; +} # end sub Dooya_SendCommand + +###################################################### +sub Dooya_Runden($) { + my ($v) = @_; + if ( ( $v > 105 ) && ( $v < 195 ) ) { + $v = 150; + } else { + $v = int(($v + 5) /10) * 10; + } + + return sprintf("%d", $v ); +} # end sub Dooya_Runden + +###################################################### +sub Dooya_Translate($) { + my ($v) = @_; + + if(exists($translations{$v})) { + $v = $translations{$v} + } + + return $v +} # end sub Dooya_Runden + +###################################################### +sub Dooya_Parse($$) { + + my ($hash, $msg) = @_; + my (undef ,$rawData) = split("#",$msg); + + my $hlen = length($rawData); + my $blen = $hlen * 4; + my $bitData = unpack("B$blen", pack("H$hlen", $rawData)); + + Log3 $hash, 4, "Dooya_Parse: rawData = $rawData length: $hlen"; + Log3 $hash, 4, "Dooya_Parse: converted to bits: $bitData"; + + # get id, channel, cmd + my $id = substr($bitData, 0, 28); + my $BitChannel = substr($bitData, 28, 4); #noch nicht benoetigt + my $channel = oct("0b" . $BitChannel); + my $cmd = substr($bitData, 32, 4); + my $newstate = $codes{ $cmd . $cmd}; # set new state + my $deviceCode = $id . '_' . $channel; + + Log3 $hash, 4, "Dooya_Parse: device ID: $id"; + Log3 $hash, 4, "Dooya_Parse: Channel: $channel"; + Log3 $hash, 4, "Dooya_Parse: Cmd: $cmd Newstate: $newstate"; + Log3 $hash, 4, "Dooya_Parse: deviceCode: $deviceCode"; + + my $def = $modules{Dooya}{defptr}{$deviceCode}; + + if($def) { + my @list; + foreach my $name (keys %{ $def }) { + my $lh = $def->{$name}; + $name = $lh->{NAME}; # It may be renamed + + return "" if(IsIgnored($name)); # Little strange. + + # update the state and log it + ### NEEDS to be deactivated due to the state being maintained by the timer + # readingsSingleUpdate($lh, "state", $newstate, 1); + readingsSingleUpdate($lh, "parsestate", $newstate, 1); + + Log3 $name, 4, "Dooya_Parse $name $newstate"; + + push(@list, $name); + } + # return list of affected devices + return @list; + + } else { + Log3 $hash, 3, "Dooya Unknown device $deviceCode, please define it"; + return "UNDEFINED Dooya_$deviceCode Dooya $deviceCode"; + } +} + +###################################################### +sub Dooya_Attr(@) { + my ($cmd,$name,$aName,$aVal) = @_; + my $hash = $defs{$name}; + + return "\"Dooya Attr: \" $name does not exist" if (!defined($hash)); + + # $cmd can be "del" or "set" + # $name is device name + # aName and aVal are Attribute name and value + if ($cmd eq "set") { + if($aName eq 'drive-up-time-to-100') { + return "Dooya_attr: value must be >=0 and <= 100" if($aVal < 0 || $aVal > 100); + } elsif ($aName =~/drive-(down|up)-time-to.*/) { + # check name and value + return "Dooya_attr: value must be >0 and <= 100" if($aVal <= 0 || $aVal > 100); + } + + if ($aName eq 'drive-down-time-to-100') { + $attr{$name}{'drive-down-time-to-100'} = $aVal; + $attr{$name}{'drive-down-time-to-close'} = $aVal if(!defined($attr{$name}{'drive-down-time-to-close'}) || ($attr{$name}{'drive-down-time-to-close'} < $aVal)); + + } elsif($aName eq 'drive-down-time-to-close') { + $attr{$name}{'drive-down-time-to-close'} = $aVal; + $attr{$name}{'drive-down-time-to-100'} = $aVal if(!defined($attr{$name}{'drive-down-time-to-100'}) || ($attr{$name}{'drive-down-time-to-100'} > $aVal)); + + } elsif($aName eq 'drive-up-time-to-100') { + $attr{$name}{'drive-up-time-to-100'} = $aVal; + + } elsif($aName eq 'drive-up-time-to-open') { + $attr{$name}{'drive-up-time-to-open'} = $aVal; + $attr{$name}{'drive-up-time-to-100'} = 0 if(!defined($attr{$name}{'drive-up-time-to-100'}) || ($attr{$name}{'drive-up-time-to-100'} > $aVal)); + } + } + + return undef; +} + +################################################## +### New set (state) method (using internalset) +### +### Reimplemented calculations for position readings and state +### Allowed sets to be done without sending actually commands to the blinds +### syntax set [ ] +### position and state are also updated on stop or other commands based on remaining time +### position is handled between 0 and 100 blinds down but not completely closed and 200 completely closed +### if timings for 100 and close are equal no position above 100 is used (then 100 == closed) +### position is rounded to a value of 5 and state is rounded to a value of 10 +# +### General assumption times are rather on the upper limit to reach desired state + + +# Readings +## state contains rounded (to 10) position and/or textField +## position contains rounded position (limited detail) + +# STATE +## might contain position or textual form of the state (same as STATE reading) + + +###################################################### +# call with hash, name, [virtual/send], set-args (send is default if ommitted) +sub Dooya_Set($@) { + my ( $hash, $name, @args ) = @_; + + if ( lc($args[0]) =~m/(virtual|send)/ ) { + Dooya_InternalSet( $hash, $name, @args ); + } else { + Dooya_InternalSet( $hash, $name, 'send', @args ); + } +} + +###################################################### +# call with hash, name, virtual/send, set-args +sub Dooya_InternalSet($@) { + my ( $hash, $name, $mode, @args ) = @_; + + ### Check Args + return "Dooya_InternalSet: mode must be virtual or send: $mode " if ( $mode !~m/(virtual|send)/ ); + + my $numberOfArgs = int(@args); + return "Dooya_set: No set value specified" if ( $numberOfArgs < 1 ); + + my $cmd = lc($args[0]); + + # just a number provided, assume "pos" command + if ($cmd =~ m/\d{1,3}/) { + pop @args; + push @args, "pos"; + push @args, $cmd; + + $cmd = "pos"; + $numberOfArgs = int(@args); + } + + if(!exists($sets{$cmd})) { + my @cList; + + # overwrite %sets with setList + my $atts = AttrVal($name,'setList',""); + my %setlist = split("[: ][ ]*", $atts); + + foreach my $k (sort keys %sets) { + my $opts = undef; + $opts = $sets{$k}; + $opts = $setlist{$k} if(exists($setlist{$k})); + + if (defined($opts)) { + push(@cList,$k . ':' . $opts); + } else { + push (@cList,$k); + } + } # end foreach + + return "Dooya_set: Unknown argument $cmd, choose one of " . join(" ", @cList); + } # error unknown cmd handling + + my $arg1 = ""; + if ( $numberOfArgs >= 2 ) { + $arg1 = $args[1]; + } + + return "Dooya_set: Bad time spec" if($cmd =~m/(on|off)-for-timer/ && $numberOfArgs == 2 && $arg1 !~ m/^\d*\.?\d+$/); + + # read timing variables + my ($t1down100, $t1downclose, $t1upopen, $t1up100) = Dooya_getTimingValues($hash); + Log3($name,5,"Dooya_set: $name -> timings -> td1:$t1down100: tdc :$t1downclose: tuo :$t1upopen: tu1 :$t1up100: "); + + my $model = AttrVal($name,'model',$models{dooyablinds}); + + if($cmd eq 'pos') { + return "Dooya_set: No pos specification" if(!defined($arg1)); + return "Dooya_set: $arg1 must be > 0 and < 100 for pos" if($arg1 < 0 || $arg1 > 100); + return "Dooya_set: Please set attr drive-down-time-to-100, drive-down-time-to-close, etc" + if(!defined($t1downclose) || !defined($t1down100) || !defined($t1upopen) || !defined($t1up100)); + } + + ### initialize locals + my $drivetime = 0; # timings until halt command to be sent for on/off-for-timer and pos -> move by time + my $updatetime = 0; # timing until update of pos to be done for any unlimited move move to endpos or go-my / stop + my $move = $cmd; + my $newState; + my $updateState; + + # get current infos + my $state = $hash->{STATE}; + my $pos = ReadingsVal($name,'exact',undef); + if ( !defined($pos) ) { + $pos = ReadingsVal($name,'position',undef); + } + + # translate state info to numbers - closed = 200 , open = 0 (correct missing values) + if ( !defined($pos) ) { + if(exists($positions{$state})) { + $pos = $positions{$state}; + } else { + $pos = $state; + } + $pos = sprintf( "%d", $pos ); + } + + Log3($name,4,"Dooya_set: $name -> entering with mode :$mode: cmd :$cmd: arg1 :$arg1: pos :$pos: "); + + # check timer running - stop timer if running and update detail pos + # recognize timer running if internal updateState is still set + if ( defined( $hash->{updateState} )) { + # timer is running so timer needs to be stopped and pos needs update + RemoveInternalTimer($hash); + + $pos = Dooya_CalcCurrentPos( $hash, $hash->{move}, $pos, Dooya_UpdateStartTime($hash) ); + delete $hash->{starttime}; + delete $hash->{updateState}; + delete $hash->{runningtime}; + delete $hash->{runningcmd}; + } + + ################ No error returns after this point to avoid stopped timer causing confusion... + + # calc posRounded + my $posRounded = Dooya_RoundInternal( $pos ); + + ### handle commands + if(!defined($t1downclose) || !defined($t1down100) || !defined($t1upopen) || !defined($t1up100)) { + #if timings not set + + if($cmd eq 'on') { + $newState = 'closed'; +# $newState = 'moving'; +# $updatetime = $dooya_maxRuntime; +# $updateState = 'closed'; + } elsif($cmd eq 'off') { + $newState = 'open'; +# $newState = 'moving'; +# $updatetime = $dooya_maxRuntime; +# $updateState = 'open'; + + } elsif($cmd eq 'on-for-timer') { + # elsif cmd == on-for-timer - time x + $move = 'on'; + $newState = 'moving'; + $drivetime = $arg1; + if ( $drivetime == 0 ) { + $move = 'stop'; + } else { + $updateState = 'moving'; + } + + } elsif($cmd eq 'off-for-timer') { + # elsif cmd == off-for-timer - time x + $move = 'off'; + $newState = 'moving'; + $drivetime = $arg1; + if ( $drivetime == 0 ) { + $move = 'stop'; + } else { + $updateState = 'moving'; + } + + } elsif($cmd =~m/stop|go-my/) { + $move = 'stop'; + $newState = $state + + } else { + $newState = $state; + } + + ###else (here timing is set) + } else { + # default is roundedPos as new StatePos + $newState = $posRounded; + + if($cmd eq 'on') { + if ( $posRounded == 200 ) { + # if pos == 200 - no state pos change / no timer + } elsif ( $posRounded >= 100 ) { + # elsif pos >= 100 - set timer for 100-to-closed --> update timer(newState 200) + my $remTime = ( $t1downclose - $t1down100 ) * ( (200-$pos) / 100 ); + $updatetime = $remTime; + + $updateState = 200; + } elsif ( $posRounded < 100 ) { + # elseif pos < 100 - set timer for remaining time to 100+time-to-close --> update timer( newState 200) + my $remTime = $t1down100 * ( (100 - $pos) / 100 ); + $updatetime = ( $t1downclose - $t1down100 ) + $remTime; + $updateState = 200; + } else { + # else - unknown pos - assume pos 0 set timer for full time --> update timer( newState 200) + $newState = 0; + $updatetime = $t1downclose; + $updateState = 200; + } + + } elsif($cmd eq 'off') { + if ( $posRounded == 0 ) { + # if pos == 0 - no state pos change / no timer + } elsif ( $posRounded <= 100 ) { + # elsif pos <= 100 - set timer for remaining time to 0 --> update timer( newState 0 ) + my $remTime = ( $t1upopen - $t1up100 ) * ( $pos / 100 ); + $updatetime = $remTime; + $updateState = 0; + } elsif ( $posRounded > 100 ) { + # elseif ( pos > 100 ) - set timer for remaining time to 100+time-to-open --> update timer( newState 0 ) + my $remTime = $t1up100 * ( ($pos - 100 ) / 100 ); + $updatetime = ( $t1upopen - $t1up100 ) + $remTime; + $updateState = 0; + } else { + # else - unknown pos assume pos 200 set time for full time --> update timer( newState 0 ) + $newState = 200; + $updatetime = $t1upopen; + $updateState = 0; + } + + } elsif($cmd eq 'pos') { + if ( $pos < $arg1 ) { + # if pos < x - set halt timer for remaining time to x / cmd close --> halt timer`( newState x ) + $move = 'on'; + my $remTime = $t1down100 * ( ( $arg1 - $pos ) / 100 ); + $drivetime = $remTime; + $updateState = $arg1; + } elsif ( ( $pos >= $arg1 ) && ( $posRounded <= 100 ) ) { + # elsif pos <= 100 & pos > x - set halt timer for remaining time to x / cmd open --> halt timer ( newState x ) + $move = 'off'; + my $remTime = ( $t1upopen - $t1up100 ) * ( ( $pos - $arg1) / 100 ); + $drivetime = $remTime; + if ( $drivetime == 0 ) { + # $move = 'stop'; # avoid sending stop to move to my-pos + $move = 'none'; + } else { + $updateState = $arg1; + } + } elsif ( $pos > 100 ) { + # else if pos > 100 - set timer for remaining time to 100+time for 100-x / cmd open --> halt timer ( newState x ) + $move = 'off'; + my $remTime = ( $t1upopen - $t1up100 ) * ( ( 100 - $arg1) / 100 ); + my $posTime = $t1up100 * ( ( $pos - 100) / 100 ); + $drivetime = $remTime + $posTime; + $updateState = $arg1; + } else { + # else - send error (might be changed to first open completely then drive to pos x) / assume open + $newState = 0; + $move = 'on'; + my $remTime = $t1down100 * ( ( $arg1 - 0 ) / 100 ); + $drivetime = $remTime; + $updateState = $arg1; + ### return "Dooya_set: Pos not currently known please open or close first"; + } + + } elsif($cmd =~m/stop|go-my/) { + # update pos according to current detail pos + $move = 'stop'; + + } elsif($cmd eq 'off-for-timer') { + # calcPos at new time y / cmd close --> halt timer ( newState y ) + $move = 'off'; + $drivetime = $arg1; + if ( $drivetime == 0 ) { + $move = 'stop'; + } else { + $updateState = Dooya_CalcCurrentPos( $hash, $move, $pos, $arg1 ); + } + + } elsif($cmd eq 'on-for-timer') { + # calcPos at new time y / cmd open --> halt timer ( newState y ) + $move = 'on'; + $drivetime = $arg1; + if ( $drivetime == 0 ) { + $move = 'stop'; + } else { + $updateState = Dooya_CalcCurrentPos( $hash, $move, $pos, $arg1 ); + } + + } + + ## special case close is at 100 ("markisen") + if( ( $t1downclose == $t1down100) && ( $t1up100 == 0 ) ) { + if ( defined( $updateState )) { + $updateState = min( 100, $updateState ); + } + $newState = min( 100, $posRounded ); + } + } + + ### update hash / readings + Log3($name,3,"Dooya_set: handled command $cmd --> move :$move: newState :$newState: "); + if ( defined($updateState)) { + Log3($name,5,"Dooya_set: handled for drive/udpate: updateState :$updateState: drivet :$drivetime: updatet :$updatetime: "); + } else { + Log3($name,5,"Dooya_set: handled for drive/udpate: updateState :: drivet :$drivetime: updatet :$updatetime: "); + } + + # bulk update should do trigger if virtual mode + Dooya_UpdateState( $hash, $newState, $move, $updateState, ( $mode eq 'virtual' ) ); + + ### send command + if ( $mode ne 'virtual' ) { + if(exists($sendCommands{$move})) { + $args[0] = $sendCommands{$move}; + Dooya_SendCommand($hash,@args); + } elsif ( $move eq 'none' ) { + # do nothing if commmand / move is set to none + } else { + Log3($name,1,"Dooya_set: Error - unknown move for sendCommands: $move"); + } + } + + ### start timer + if ( $mode eq 'virtual' ) { + # in virtual mode define drivetime as updatetime only, so no commands will be send + if ( $updatetime == 0 ) { + $updatetime = $drivetime; + } + $drivetime = 0; + } + + ### update time stamp + Dooya_UpdateStartTime($hash); + $hash->{runningtime} = 0; + if($drivetime > 0) { + $hash->{runningcmd} = 'stop'; + $hash->{runningtime} = $drivetime; + } elsif($updatetime > 0) { + $hash->{runningtime} = $updatetime; + } + + if($hash->{runningtime} > 0) { + # timer fuer stop starten + if ( defined( $hash->{runningcmd} )) { + Log3($name,4,"Dooya_set: $name -> stopping in $hash->{runningtime} sec"); + } else { + Log3($name,4,"Dooya_set: $name -> update state in $hash->{runningtime} sec"); + } + my $utime = $hash->{runningtime} ; + if($utime > $dooya_updateFreq) { + $utime = $dooya_updateFreq; + } + InternalTimer(gettimeofday()+$utime,"Dooya_TimedUpdate",$hash,0); + } else { + delete $hash->{runningtime}; + delete $hash->{starttime}; + } + + return undef; +} # end sub Dooya_setFN +###################################################### + +###################################################### +### +### Helper for set routine +### +###################################################### + +###################################################### +sub Dooya_RoundInternal($) { # Todo: kann das nicht die Round Funktion von FHEM? + my ($v) = @_; + return sprintf("%d", ($v + ($dooya_posAccuracy/2)) / $dooya_posAccuracy) * $dooya_posAccuracy; +} # end sub Dooya_RoundInternal + +###################################################### +sub Dooya_UpdateStartTime($) { + my ($d) = @_; + + my ($s, $ms) = gettimeofday(); + + my $t = $s + ($ms / 1000000); # 10 msec + my $t1 = 0; + $t1 = $d->{starttime} if(exists($d->{starttime} )); + $d->{starttime} = $t; + my $dt = sprintf("%.2f", $t - $t1); + + return $dt; +} # end sub Dooya_UpdateStartTime + +###################################################### +sub Dooya_TimedUpdate($) { + my ($hash) = @_; + + Log3($hash->{NAME},4,"Dooya_TimedUpdate"); + + # get current infos + my $pos = ReadingsVal($hash->{NAME},'exact',undef); + Log3($hash->{NAME},5,"Dooya_TimedUpdate : pos so far : $pos"); + + my $dt = Dooya_UpdateStartTime($hash); + my $nowt = gettimeofday(); + + $pos = Dooya_CalcCurrentPos( $hash, $hash->{move}, $pos, $dt ); +# my $posRounded = Dooya_RoundInternal( $pos ); + + Log3($hash->{NAME},5,"Dooya_TimedUpdate : delta time : $dt new rounde pos (rounded): $pos "); + + $hash->{runningtime} = $hash->{runningtime} - $dt; + if ( $hash->{runningtime} <= 0.1) { + if ( defined( $hash->{runningcmd} ) ) { + Dooya_SendCommand($hash, $hash->{runningcmd}); + } + # trigger update from timer + Dooya_UpdateState( $hash, $hash->{updateState}, 'stop', undef, 1 ); + delete $hash->{starttime}; + delete $hash->{runningtime}; + delete $hash->{runningcmd}; + } else { + my $utime = $hash->{runningtime} ; + if($utime > $dooya_updateFreq) { + $utime = $dooya_updateFreq; + } + Dooya_UpdateState( $hash, $pos, $hash->{move}, $hash->{updateState}, 1 ); + if ( defined( $hash->{runningcmd} )) { + Log3($hash->{NAME},4,"Dooya_TimedUpdate: $hash->{NAME} -> stopping in $hash->{runningtime} sec"); + } else { + Log3($hash->{NAME},4,"Dooya_TimedUpdate: $hash->{NAME} -> update state in $hash->{runningtime} sec"); + } + my $nstt = max($nowt+$utime-0.01, gettimeofday()+.1 ); + Log3($hash->{NAME},5,"Dooya_TimedUpdate: $hash->{NAME} -> next time to stop: $nstt"); + InternalTimer($nstt,"Dooya_TimedUpdate",$hash,0); + } + + Log3($hash->{NAME},5,"Dooya_TimedUpdate DONE"); +} # end sub Dooya_TimedUpdate + +###################################################### +# Dooya_UpdateState( $hash, $newState, $move, $updateState ); +sub Dooya_UpdateState($$$$$) { + my ($hash, $newState, $move, $updateState, $doTrigger) = @_; + + my $addtlPosReading = AttrVal($hash->{NAME},'additionalPosReading',undef); + if ( defined($addtlPosReading )) { + $addtlPosReading = undef if ( ( $addtlPosReading eq "" ) or ( $addtlPosReading eq "state" ) or ( $addtlPosReading eq "position" ) or ( $addtlPosReading eq "exact" ) ); + } + + readingsBeginUpdate($hash); + + if(exists($positions{$newState})) { + readingsBulkUpdate($hash,"state",$newState); + $hash->{STATE} = $newState; + + readingsBulkUpdate($hash,"position",$positions{$newState}); + $hash->{position} = $positions{$newState}; + + readingsBulkUpdate($hash,$addtlPosReading,$positions{$newState}) if ( defined($addtlPosReading) ); + + } else { + my $rounded = Dooya_Runden( $newState ); + my $stateTrans = Dooya_Translate( $rounded ); + readingsBulkUpdate($hash,"state",$stateTrans); + $hash->{STATE} = $stateTrans; + + readingsBulkUpdate($hash,"position",$rounded); + $hash->{position} = $rounded; + + readingsBulkUpdate($hash,$addtlPosReading,$rounded) if ( defined($addtlPosReading) ); + + + } + + readingsBulkUpdate($hash,"exact",$newState); + $hash->{exact} = $newState; + + if ( defined( $updateState ) ) { + $hash->{updateState} = $updateState; + } else { + delete $hash->{updateState}; + } + $hash->{move} = $move; + + readingsEndUpdate($hash,$doTrigger); +} # end sub Dooya_UpdateState + +###################################################### +# Return timingvalues from attr and after correction +sub Dooya_getTimingValues($) { + my ($hash) = @_; + + my $name = $hash->{NAME}; + + my $t1down100 = AttrVal($name,'drive-down-time-to-100',undef); + my $t1downclose = AttrVal($name,'drive-down-time-to-close',undef); + my $t1upopen = AttrVal($name,'drive-up-time-to-open',undef); + my $t1up100 = AttrVal($name,'drive-up-time-to-100',undef); + + return (undef, undef, undef, undef) if(!defined($t1downclose) || !defined($t1down100) || !defined($t1upopen) || !defined($t1up100)); + + if ( ( $t1downclose < 0 ) || ( $t1down100 < 0 ) || ( $t1upopen < 0 ) || ( $t1up100 < 0 ) ) { + Log3($name,1,"Dooya_getTimingValues: $name time values need to be positive values"); + return (undef, undef, undef, undef); + } + + if ( $t1downclose < $t1down100 ) { + Log3($name,1,"Dooya_getTimingValues: $name close time needs to be higher or equal than time to pos100"); + return (undef, undef, undef, undef); + } elsif ( $t1downclose == $t1down100 ) { + $t1up100 = 0; + } + + if ( $t1upopen <= $t1up100 ) { + Log3($name,1,"Dooya_getTimingValues: $name open time needs to be higher or equal than time to pos100"); + return (undef, undef, undef, undef); + } + + if ( $t1upopen < 1 ) { + Log3($name,1,"Dooya_getTimingValues: $name time to open needs to be at least 1 second"); + return (undef, undef, undef, undef); + } + + if ( $t1downclose < 1 ) { + Log3($name,1,"Dooya_getTimingValues: $name time to close needs to be at least 1 second"); + return (undef, undef, undef, undef); + } + + return ($t1down100, $t1downclose, $t1upopen, $t1up100); +} + +###################################################### +# call with hash, translated state +sub Dooya_CalcCurrentPos($$$$) { + my ($hash, $move, $pos, $dt) = @_; + my $name = $hash->{NAME}; + my $newPos = $pos; + + # Attributes for calculation + my ($t1down100, $t1downclose, $t1upopen, $t1up100) = Dooya_getTimingValues($hash); + + if(defined($t1down100) && defined($t1downclose) && defined($t1up100) && defined($t1upopen)) { + if( ( $t1downclose == $t1down100) && ( $t1up100 == 0 ) ) { + $pos = min( 100, $pos ); + if($move eq 'on') { + $newPos = min( 100, $pos ); + if ( $pos < 100 ) { + # calc remaining time to 100% + my $remTime = ( 100 - $pos ) * $t1down100 / 100; + if ( $remTime > $dt ) { + $newPos = $pos + ( $dt * 100 / $t1down100 ); + } + } + + } elsif($move eq 'off') { + $newPos = max( 0, $pos ); + if ( $pos > 0 ) { + $newPos = $dt * 100 / ( $t1upopen ); + $newPos = max( 0, ($pos - $newPos) ); + } + } else { + Log3($name,1,"Dooya_CalcCurrentPos: $name move wrong $move"); + } + } else { + if($move eq 'on') { + if ( $pos >= 100 ) { + $newPos = $dt * 100 / ( $t1downclose - $t1down100 ); + $newPos = min( 200, $pos + $newPos ); + } else { + # calc remaining time to 100% + my $remTime = ( 100 - $pos ) * $t1down100 / 100; + if ( $remTime > $dt ) { + $newPos = $pos + ( $dt * 100 / $t1down100 ); + } else { + $dt = $dt - $remTime; + $newPos = 100 + ( $dt * 100 / ( $t1downclose - $t1down100 ) ); + } + } + + } elsif($move eq 'off') { + + if ( $pos <= 100 ) { + $newPos = $dt * 100 / ( $t1upopen - $t1up100 ); + $newPos = max( 0, $pos - $newPos ); + } else { + # calc remaining time to 100% + my $remTime = ( $pos - 100 ) * $t1up100 / 100; + if ( $remTime > $dt ) { + $newPos = $pos - ( $dt * 100 / $t1up100 ); + } else { + $dt = $dt - $remTime; + $newPos = 100 - ( $dt * 100 / ( $t1upopen - $t1up100 ) ); + } + } + } else { + Log3($name,1,"Dooya_CalcCurrentPos: $name move wrong $move"); + } + } + } else { + ### no timings set so just assume it is always moving + $newPos = $positions{'moving'}; + } + + return $newPos; +} + +###################################################### +###################################################### +###################################################### + +1; + + +=pod +=item summary Supports rf shutters from dooya +=item summary_DE Unterstützt dooya Funkrolladen +=begin html + + +

                  Dooya protocol

                  +
                    + The Dooya protocol is used by a wide range of devices, + which are either senders or receivers/actuators. + The RECIVING and SENDING of Dooya commands is implemented in the SIGNALduino, so this module currently supports + devices like blinds and shutters. The Dooya protocol is used from a lot of different shutter companies in Germanyr. Examples are Rohrmotor24 or Nobily. +

                    + + +
                    +  4: sduino/msg READ: MU;P0=4717;P1=-1577;P2=284;P3=-786;P4=649;P5=-423;D=01232345[......]445232;CP=2; 
                    +  4: sduino: Fingerprint for MU Protocol id 16 -> Dooya shutter matches, trying to demodulate  
                    +  4: sduino: decoded matched MU Protocol id 16 dmsg u16#370658E133 length 40  
                    +  4: SIGNALduino_unknown Protocol: 16 
                    +  4: SIGNALduino_unknown converted to bits: 0011011100000110010110001110000100110011  
                    +  4: SIGNALduino_unknown / shutter Dooya 0011011100000110010110001110000100110011 received  
                    +  4: 00110111000001100101100 1110 0001 0011 0011  
                    +  4: SIGNALduino_unknown found shutter from Dooya. id=3606104, remotetype=14,  channel=1, direction=down, all_shutters=false  
                    +  
                    + + +
                    a SIGNALduino device (must be defined first)
                    +
                    +
                    + + + +
                    + Define +
                    +
                      + define <name> Dooya <id>_<channel> +
                      +
                      + The id is a 28-digit binar code, that uniquely identifies a single remote control. +
                      + Pairing is done by setting the shutter in programming mode, either by disconnecting/reconnecting the power, + and by pressing the program button on an already associated remote. +
                      + Once the shutter is in programming mode, send the "prog" command from within FHEM to complete the pairing. + The shutter will peep shortly to indicate completion. +
                      + You are now able to control this blind from FHEM, the receiver thinks it is just another remote control or the real exist remote. + For the shutter it´s the same. + +
                        +
                      • <id> is a 28 digit binar number that uniquely identifies FHEM as a new remote control. +
                        You can use a different one for each device definition, and group them using a structure. You can use the same ID for a couple of shutters + and you can give every one an other channel. (0 to 15, 0 ist the MASTER and conrols all other channels.) + If you set one of them, you need to pick the same address as an existing remote. You can create the Device with autocreate with a real remote or manuel without remote control.
                      • +
                      +
                      + + Examples: +
                        + define Rollo_Master Dooya 0011011100000110010110001110_0
                        Rollo_Master channel 0 controls all shutters (channel 1 - 15) with the same ID, in this case Rollo_1 and Rollo_2
                        +
                        + define Rollo_1 Dooya 0011011100000110010110001110_1
                        Rollo_1 channel 1
                        + define Rollo_2 Dooya 0011011100000110010110101110_2
                        Rollo_2 channel 2
                        +
                      +
                    +
                    + + + Set +
                      + set <name> <value> [<time>] +

                      + where value is one of:
                      +
                      +    on
                      +    off
                      +    stop
                      +    pos value (0..100) # see note
                      +    prog  # Special, see note
                      +    
                      + Examples: +
                        + set rollo_1 on
                        + set rollo_1 on,sleep 1,rollo_2 on,sleep 1,rollo_3 on
                        + set rollo_1 off
                        + set rollo_1 pos 50
                        +
                      +
                      + Notes: +
                        +
                      • prog is a special command used to pair the receiver to FHEM: + Set the receiver in programming mode and send the "prog" command from FHEM to finish pairing.
                        + The shutter will peep shortly to indicate success. +
                      • +
                      • pos value
                        + + The position is variying between 0 completely open and 100 for covering the full window. + The position must be between 0 and 100 and the appropriate + attributes drive-down-time-to-100, drive-down-time-to-close, + drive-up-time-to-100 and drive-up-time-to-open must be set.
                        +
                      • +
                      + + The position reading distinuishes between multiple cases +
                        +
                      • Without timing values set only generic values are used for status and position:
                        open, closed, moving
                        are used +
                      • +
                      • With timing values set but drive-down-time-to-close equal to drive-down-time-to-100 and drive-up-time-to-100 equal 0 + the device is considered to only vary between 0 and 100 (100 being completely closed) +
                      • +
                      • With full timing values set the device is considerd a window shutter (Rolladen) with a difference between + covering the full window (position 100) and being completely closed (position 200) +
                      • +
                      + +
                    +
                    + + Get +
                      N/A

                    + + + Attributes +
                      + +
                    • IODev
                      + Set the IO or physical device which should be used for sending signals + for this "logical" device. It must be the SIGNALduino.
                      + Note: The IODev has to be set, otherwise no commands will be sent!
                      +

                    • + + +
                    • channel
                      + Set the channel of the remote. You can use 0 (MASTER) to 15.
                      + Note: The MASTER conrols all remotes with the same ID!!!
                      +

                    • + + +
                    • SignalRepeats
                      + Set the repeats for sending signal. You can use 5, 10, 15 and 20. +

                    • + + +
                    • setList
                      + Space separated list of commands, which will be returned upon "set name ?", + so the FHEMWEB frontend can construct the correct control and command dropdown. Specific controls can be added after a colon for each command +
                      +

                    • + + +
                    • additionalPosReading
                      + Position of the shutter will be stored in the reading pos as numeric value. + Additionally this attribute might specify a name for an additional reading to be updated with the same value than the pos. +

                    • + + + + + +
                    • eventMap
                      + Replace event names and set arguments. The value of this attribute + consists of a list of space separated values, each value is a colon + separated pair. The first part specifies the "old" value, the second + the new/desired value. If the first character is slash(/) or comma(,) + then split not by space but by this character, enabling to embed spaces. + Examples: +
                        + attr store eventMap on:open off:closed
                        + attr store eventMap /on-for-timer 10:open/off:closed/
                        + set store open +
                        +
                      +
                    • +
                      + +
                    • do_not_notify

                    • + +
                    • dummy
                      + Set the device attribute dummy to define devices which should not + output any radio signals. Associated notifys will be executed if + the signal is received. Used e.g. to react to a code from a sender, but + it will not emit radio signal if triggered in the web frontend. +

                    • + +
                    • loglevel

                    • + +
                    • showtime

                    • + + + + +
                    • ignore
                      + Ignore this device, e.g. if it belongs to your neighbour. The device + won't trigger any FileLogs/notifys, issued commands will silently + ignored (no RF signal will be sent out, just like for the dummy attribute). The device won't appear in the + list command (only if it is explicitely asked for it), nor will it + appear in commands which use some wildcard/attribute as name specifiers + (see devspec). You still get them with the + "ignored=1" special devspec. +

                    • + + +
                    • drive-down-time-to-100
                      + The time the blind needs to drive down from "open" (pos 0) to pos 100.
                      + In this position, the lower edge touches the window frame, but it is not completely shut.
                      + For a mid-size window this time is about 12 to 15 seconds. +

                    • + + +
                    • drive-down-time-to-close
                      + The time the blind needs to drive down from "open" (pos 0) to "close", the end position of the blind.
                      + This is about 3 to 5 seonds more than the "drive-down-time-to-100" value. +

                    • + + +
                    • drive-up-time-to-100
                      + The time the blind needs to drive up from "close" (endposition) to "pos 100".
                      + This usually takes about 3 to 5 seconds. +

                    • + + +
                    • drive-up-time-to-open
                      + The time the blind needs drive up from "close" (endposition) to "open" (upper endposition).
                      + This value is usually a bit higher than "drive-down-time-to-close", due to the blind's weight. +

                    • + +
                    +
                    + + + Generated events: +
                      + From a Dooya device you can receive one of the following events. +
                    • on
                    • +
                    • off
                    • +
                    • stop
                    • + Which event is sent is device dependent and can sometimes be configured on + the device. +
                    +
                  + + + +=end html +=cut diff --git a/fhem/FHEM/firmware/SIGNALduino_nano328.hex b/fhem/FHEM/firmware/SIGNALduino_nano328.hex index 7e30baafe..7270f191c 100644 --- a/fhem/FHEM/firmware/SIGNALduino_nano328.hex +++ b/fhem/FHEM/firmware/SIGNALduino_nano328.hex @@ -1,1155 +1,1095 @@ -:100000000C9477000C949F130C94C6130C949F00CF -:100010000C949F000C949F000C949F000C949F00E4 -:100020000C949F000C949F000C949F000C949F00D4 -:100030000C949F000C947F080C949F000C949F00DC -:100040000C94ED130C949F000C94B1160C94E316D1 -:100050000C949F000C949F000C949F000C949F00A4 -:100060000C949F000C949F003B4D433D003B4D552D -:100070003D004D533D00556E737570706F72746521 -:100080006420636F6D6D616E640020557365206F31 -:100090006E65206F6620000000000800020100006D -:1000A0000304070000000000000000010204081023 -:1000B00020408001020408102001020408102004DE +:100000000C9476000C94860D0C945F0D0C949E005D +:100010000C949E000C949E000C949E000C949E00E8 +:100020000C949E000C949E000C949E000C949E00D8 +:100030000C949E000C94130E0C949E000C949E0045 +:100040000C94150D0C949E000C94270C0C94010C30 +:100050000C949E000C949E000C949E000C949E00A8 +:100060000C949E000C949E00556E737570706F72A8 +:1000700074656420636F6D6D616E640020557365F7 +:10008000206F6E65206F66200000000008000201EE +:10009000000003040700000000000000003B4D4387 +:1000A0003D003B4D553D004D533D000000000025F7 +:1000B0000028002B0000000000240027002A000474 :1000C00004040404040404020202020202030303FF -:1000D00003030300000000250028002B000000009F -:1000E00000240027002A0000190813175C081124B7 -:1000F0001FBECFEFD8E0DEBFCDBF12E0A0E0B1E081 -:10010000E6EFF6E402C005900D92A631B107D9F7EB -:1001100024E0A6E1B2E001C01D92AB3AB207E1F7DC -:1001200010E0CCEED0E004C02297FE010E949A1DA0 -:10013000C83ED107C9F70E9457170C946E230C9440 -:100140000000CF92DF92EF92FF920F931F930E94D5 -:10015000431400911D0210911E0220911F02309144 -:1001600020026B017C01C01AD10AE20AF30A97014E -:10017000860160931D0270931E0280931F0290936C -:1001800020020A3511052105310578F181E0C816F4 -:100190008DE7D806E104F10410F4960102C021E0D5 -:1001A0003DE74A9B03C03195219531098091620357 -:1001B0008B34D8F4809162038F5F809362038091C7 -:1001C0006303609161030E94421D90936303E09179 -:1001D0006303F0E0EE0FFF1FEB59FC4F31832083E8 -:1001E000809163038F5F809363031F910F91FF9052 -:1001F000EF90DF90CF9008950F931F9360912702A7 -:100200008DE00E943615109227020E94431400913F -:100210001D0210911E0220911F0230912002601BCE -:10022000710B820B930B62307D478105910520F0A5 -:100230001F910F910C94A1001F910F91089581E2DD -:1002400092E00E94FF188BE593E00E94FF1885E57D -:1002500093E00C94FF18CF93DF93EC01FB01248112 -:1002600035810E94421BCE01DF91CF91089541E07C -:1002700050E061EA70E080E00C946D1380E00C9433 -:100280008D13CF93DF931F92CDB7DEB72B9A2091BA -:10029000060130910701482F429FC001439F900DF6 -:1002A000112469830E948E142B98809106019091ED -:1002B00007016981FC016E9FC0016F9F900D1124A1 -:1002C0000F90DF91CF910C948E14EF92FF920F93C9 -:1002D0001F93CF93DF93F82EE92E0E943E0100E09A -:1002E00010E02091080130E0021713072CF56FE1B0 -:1002F00081E00E944101CF2DDE2D29912223C9F0FA -:10030000213371F0263449F02033B9F763E081E0FE -:100310000E94410163E081E009C063E081E002C026 -:1003200061E083E00E94410161E083E00E944101BD -:10033000E4CF0F5F1F4FD5CFDF91CF911F910F916A -:10034000FF90EF900C9437013F924F925F926F9223 -:100350007F928F929F92AF92BF92CF92DF92EF9255 -:10036000FF920F931F93CF93DF93082FEB01542E2F -:10037000452E59010E9443146B017C0110E0812C31 -:10038000912CB401600F711FC617D707A8F1C501E2 -:100390000E94FA1A8053E52DF42DE80FF11DE80FA5 -:1003A000F11D90818181382E331C3324331C692E3A -:1003B000782E31F077FE0CC071946194710808C0FA -:1003C00077FE03C071946194710888E1681A71081E -:1003D0000E9443146C157D058E059F05C8F33320DC -:1003E00011F02B9801C02B9AC60CD71CE11CF11CF4 -:1003F0008FEF881A980AC5CF0E9443146C157D05AB -:100400008E059F05C8F3DF91CF911F910F91FF904B -:10041000EF90DF90CF90BF90AF909F908F907F90A4 -:100420006F905F904F903F9008954F925F926F92C0 -:100430007F928F929F92AF92BF92CF92DF92EF9274 -:10044000FF920F931F93CF93DF93982E862E2A014E -:100450002B9A0E9443146B017C01662457FC609424 -:10046000762C891408F446C0692D70E081E292E090 -:100470000E94FA1A90ED980F9A3010F4892F01C05B -:100480008753C4E0D0E008E0A82EBB24A7FCB094BA -:100490000E9443146C157D058E059F05C8F310E07E -:1004A00098012A213B21232B71F02B98C40CD51CD9 -:1004B000E61CF71C0E9443146C157D058E059F05F4 -:1004C000C8F32B9A0DC02B9AC40CD51CE61CF71C44 -:1004D0000E9443146C157D058E059F05C8F32B986B -:1004E000C40CD51CE61CF71C15950795219781F6C1 -:1004F0009394B7CF0E9443146C157D058E059F051C -:10050000C8F3DF91CF911F910F91FF90EF90DF9093 -:10051000CF90BF90AF909F908F907F906F905F90A3 -:100520004F900895CF92DF92EF92FF920F931F9317 -:10053000CF93DF9300D000D000D0CDB7DEB78C01D1 -:100540006B01FC01E080F1806DE071E0CE0101966D -:100550000E946D19A701BE016F5F7F4F81E292E09B -:100560000E94261B7C01CE0101960E94FF18FFEF1E -:10057000EF16FF0601F1F801408151814F3FFFEF77 -:100580005F07C9F0970161E272E0CE0101960E9417 -:10059000421BBE016F5F7F4FC6010E94B919CE0199 -:1005A00001960E94FF188FEFE81AF80AF801F1820D -:1005B000E08281E001C080E026960FB6F894DEBFAD -:1005C0000FBECDBFDF91CF911F910F91FF90EF90A4 -:1005D000DF90CF900895BF92CF92DF92EF92FF927B -:1005E0000F931F93CF93DF93CDB7DEB7C856D109D2 -:1005F0000FB6F894DEBF0FBECDBF67E072E0CE014C -:100600008F599F4F0E946D196EE170E0CE018F5996 -:100610009F4F0E943019A9961FAE1EAEA9970E9447 -:100620003E011FEF01E042E1F42E59E0E52E62E0C9 -:10063000D62ECC24C394BE016F597F4FCE01895969 -:100640009F4F0E949202882309F44FC060E070E03F -:10065000CE018F599F4F0E94FA1A833589F561E0C8 -:1006600070E0CE018F599F4F0E94FA1A833419F31C -:1006700061E070E0CE018F599F4F0E94FA1A8D34CD -:1006800059F41F5FE1E0F0E0EC0FFD1FF19EE00D7B -:10069000F11D1124C282CFCF61E070E0CE018F59ED -:1006A0009F4F0E94FA1A823531F61F5FE1E0F0E0B9 -:1006B000EC0FFD1FF19EE00DF11D1124D282BBCF86 -:1006C00060E070E0CE018F599F4F0E94FA1A80358A -:1006D00009F068C062E070E0CE018F599F4F0E9420 -:1006E000FA1A8D3309F05EC082C0B12C32E1C32EFC -:1006F000B016D1F1D12CED2CF12CCE9CA001CF9CC9 -:10070000500D1124E1E0F0E0EC0FFD1FE40FF51FA8 -:100710008281823079F44A5F5F4F21E030E02C0F14 -:100720003D1F420F531F6481758121E232E08381B6 -:100730000E94A401CE9CF001CF9CF00D112481E019 -:1007400090E08C0F9D1FE80FF91F8281813031F4FA -:1007500040815181648183810E9415022B98D3943A -:100760001D1548F6B394C4CF0E94370161E272E0D0 -:100770008AE094E00E94F217CE018F599F4F0E94A9 -:10078000FF18C859DF4F0FB6F894DEBF0FBECDBFBC -:10079000DF91CF911F910F91FF90EF90DF90CF905D -:1007A000BF90089560E070E0CE018F599F4F0E9486 -:1007B000FA1A823509F050C061E070E0CE018F591D -:1007C0009F4F0E94FA1A8D3309F046C042E050E074 -:1007D000BE016F597F4FCE01855A9F4F0E942B015A -:1007E000CE01855A9F4F0E94871B062F82C022E0B0 -:1007F00030E041E050E0BE016F597F4FCE01855A95 -:100800009F4F0E94421BCE01855A9F4F0E94871B1B -:10081000B62ECE01855A9F4F0E94FF1843E050E04C -:10082000BE016F597F4FCE01855A9F4F0E942B0109 -:10083000CE01855A9F4F0E94871BE19EF001112433 -:10084000EB0DF11D3396EE0FFF1F21E030E02C0F72 -:100850003D1FE20FF31F4BC060E070E0CE018F59E7 -:100860009F4F0E94FA1A8434B9F4A9968EAD9FADB9 -:10087000A997E1E0F0E0EC0FFD1FF19EE00DF11D06 -:10088000112421E0280FA6963FADA697231B2383B2 -:10089000029795838483CFCE60E070E0CE018F59BC -:1008A0009F4F0E94FA1A833409F0C5CE61E070E0D0 -:1008B000CE018F599F4F0E94FA1A8D3309F0BBCE9B -:1008C00042E050E0BE016F597F4FCE01855A9F4FE5 -:1008D0000E942B01CE01855A9F4F0E94871BE1E0A9 -:1008E000F0E0EC0FFD1FF19EE00DF11D112471836E -:1008F0006083CE01855A9F4F0E94FF189CCE62E70D -:1009000070E08AE094E00E94A41760912B0270E0EE -:100910004AE050E08AE094E00E94B9186DE670E089 -:100920008AE094E00E94A4176091290270E04AE0F6 -:1009300050E08AE094E00E94B91868E670E08AE02E -:1009400094E00E94A41760912A0270E04AE050E00F -:100950008AE094E00C94C118CF93DF93CDB7DEB753 -:10096000AE970FB6F894DEBF0FBECDBF61E070E06A -:1009700081E292E00E94FA1A843729F161E070E086 -:1009800081E292E00E94FA1A823721F542E050E0BB -:1009900061E272E0CE0101960E942B0120E030E07E -:1009A00043E050E0BE01675D7F4FCE0101960E949B -:1009B000FC1ACE0101960E94FF18CE0189960E9472 -:1009C0008F1F8093080161E272E08AE094E00E9448 -:1009D000F21795C061E070E081E292E00E94FA1A9D -:1009E0008337F1F42B9A42E050E061E272E0CE01ED -:1009F00089960E942B0120E030E048E250E0BE01E1 -:100A00006F5F7F4FCE0189960E94FC1ACE018996B6 -:100A10000E94FF18CE0101960E9465012B98D3CF4A -:100A200061E070E081E292E00E94FA1A8336A9F454 -:100A300042E050E061E272E0CE0101960E942B019B -:100A4000CE0101960E94871B7093070160930601F7 -:100A5000CE0101960E94FF18B6CF61E070E081E2FE -:100A600092E00E94FA1A803709F049C067E072E00C -:100A7000CE0189960E946D1964E170E0CE018996DD -:100A80000E9430196FE071E0CE0189960E94C5196D -:100A90004AE060910801CE0101960E94DD19BE0175 -:100AA0006F5F7F4FCE0189960E94621ACE01019638 -:100AB0000E94FF1867E971E0CE0189960E94691AC9 -:100AC00060910601709107014AE0CE0101960E94F3 -:100AD0000A1ABE016F5F7F4FCE0189960E94621A8B -:100AE000CE0101960E94FF18BE01675D7F4F8AE02C -:100AF00094E00E94F217CE0189960E94FF18AE96EC -:100B00000FB6F894DEBF0FBECDBFDF91CF91089531 -:100B1000CF93DF9300D0CDB7DEB72091A7043091FB -:100B2000A8042115310511F42BEA34E0CE01019619 -:100B3000821B930B0F900F90DF91CF910895CF926E -:100B4000DF92EF92FF920E9437146B017C0128EE36 -:100B500033E040E050E00E94761D809118029091B1 -:100B60001902A0911A02B0911B02C816D906EA0612 -:100B7000FB0648F48091160290911702019690931B -:100B8000170280931602C0921802D0921902E092C6 -:100B90001A02F0921B02CA01B901FF90EF90DF9098 -:100BA000CF9008956AE171E08AE094E00E94041811 -:100BB00061E070E080E090E00C94661461E070E029 -:100BC00081E292E00E94FA1A813511F40E943E01FE -:100BD00061E070E081E292E00E94FA1A853411F43B -:100BE0000C9437010895262F220F330B94E049020D -:100BF000B0011124682B622B81E090E00C947322E9 -:100C0000CF93DF9361E070E081E292E00E94FA1AF4 -:100C1000873421F4DF91CF910C947F0462E070E07F -:100C200081E292E00E94FA1A833599F062E070E066 -:100C300081E292E00E94FA1A853571F062E070E07C -:100C400081E292E00E94FA1A833441F4CAE2D2E0CF -:100C500005C0CBE2D2E002C0C9E2D2E061E070E0C0 -:100C600081E292E00E94FA1A853419F481E08883C7 -:100C700009C061E070E081E292E00E94FA1A8434D7 -:100C800059F4188240912A026091290280912B0226 -:100C9000DF91CF910C94F305DF91CF91089560E03F -:100CA00070E081E292E00E94FA1A803511F40C940F -:100CB000D20560E070E081E292E00E94FA1A8F3380 -:100CC00009F072C06FE38AE094E00E94D5176AE8E9 -:100CD00070E08AE094E00E94A41766E58AE094E060 -:100CE0000E94D51760E28AE094E00E94D51769E679 -:100CF0008AE094E00E94D51760E28AE094E00E94C6 -:100D0000D51762E58AE094E00E94D51760E28AE098 -:100D100094E00E94D51764E78AE094E00E94D5171A -:100D200060E28AE094E00E94D51768E58AE094E0EA -:100D30000E94D51760E28AE094E00E94D51766E42D -:100D40008AE094E00E94D51760E28AE094E00E9475 -:100D5000D51763E58AE094E00E94D51760E28AE047 -:100D600094E00E94D51760E58AE094E00E94D517D0 -:100D700060E28AE094E00E94D51763E48AE094E0A0 -:100D80000E94D51760E28AE094E00E94D51767E4DC -:100D90008AE094E00E94D51760E28AE094E00E9425 -:100DA000D51767E072E00AC060E070E081E292E08F -:100DB0000E94FA1A863531F46DE171E08AE094E020 -:100DC0000C94041860E070E081E292E00E94FA1A4C -:100DD000823549F40E9488054AE050E0BC018AE06F -:100DE00094E00C94C11860E070E081E292E00E940F -:100DF000FA1A893641F488E292E00E94E408892BCD -:100E000081F40C94AC0460E070E081E292E00E9416 -:100E1000FA1A833561F488E292E00E94E408892B93 -:100E200021F081E080931C0208950C94EB0260E0B5 -:100E300070E081E292E00E94FA1A843751F40E9435 -:100E40009F05AB01BC012AE030E08AE094E00C94FD -:100E5000ED1860E070E081E292E00E94FA1A8835B5 -:100E600011F40C94DE0560E070E081E292E00E94F3 -:100E7000FA1A8634D1F060E070E081E292E00E94DC -:100E8000FA1A833411F40C94000660E070E081E2F9 -:100E900092E00E94FA1A873411F40C947F0466E7FA -:100EA00070E08AE094E00C94E01708951F93CF93CC -:100EB000DF9300D0CDB7DEB780911C02882389F084 -:100EC00010921C020E944F0680911C02811106C0E4 -:100ED00067E072E081E292E00E94C51981E08093B0 -:100EE000270211E080916203882341F1809162031F -:100EF00081508093620380916403609161030E943A -:100F0000421D90936403E091640381E08E0F80930F -:100F10006403F0E0EE0FFF1FEB59FC4F80819181DD -:100F20009A838983BE016F5F7F4F88E292E00E94BF -:100F30004B138823B9F210932702D4CF0F900F9050 -:100F4000DF91CF911F910895EF92FF920F931F931E -:100F5000CF93DF93EC017B018A0181E090E00E9456 -:100F60006B22982F9170988381FB992790F9F70154 -:100F7000908382FB882780F9F8018083DF91CF91ED -:100F80001F910F91FF90EF90089526E040E051EE01 -:100F900060E070E08AE094E00E944F1660E082E03A -:100FA0000E94FD1461E08BE00E94FD1461E08DE081 -:100FB0000E94FD1480E1809381001092800082E005 -:100FC0008093FD0388E199E79093FF038093FE03EC -:100FD000909387008093860082E1809381008CEF5C -:100FE00090E09093FC038093FB0381E080936F007B -:100FF00080E090E00E946B228B3049F44AE252E09C -:1010000069E272E08BE292E00E94A4070AC06BE002 -:1010100080E090E00E94732267E081E090E00E940F -:1010200073220E94370164E170E081E292E00C9447 -:1010300030190F931F93CF93DF938BE48093610359 -:10104000109262031092640310926303CBE3D3E027 -:10105000D0934003C0933F030DE313E0109342038A -:101060000093410367E072E085E593E00E946D190B -:1010700067E072E08BE593E00E946D19F801118240 -:1010800010821982188288E292E00E94A60867E026 -:1010900072E081E292E00E946D190E944314609315 -:1010A0001D0270931E0280931F0290932002DF9115 -:1010B000CF911F910F9108950C941F01CF93C1E020 -:1010C0008AE094E00E946C15892BB9F08AE094E0E4 -:1010D0000E9485158A3041F01CF4882329F007C04E -:1010E0008D3011F0833219F4C0931C02E9CF682FC0 -:1010F00081E292E00E94791AE3CFCF9108951F9286 -:101100000F920FB60F9211242F933F934F935F933B -:101110006F937F938F939F93AF93BF93EF93FF93BF -:10112000E091FB03F091FC030995FF91EF91BF91D2 -:10113000AF919F918F917F916F915F914F913F916F -:101140002F910F900FBE0F901F901895FC01E85F34 -:10115000FE4F1082B39610827B97108231961182D7 -:1011600010827B962FEF2083FC012083AC0120E0CE -:1011700030E0FA01E15EFE4F11821082FC01E20FC5 -:10118000F31F14822F5F3F4F4E5F5F4F26303105B4 -:1011900081F7FC01E55FFE4F1082339626E930E0CF -:1011A000318320833D964DEC5CEC6CE47EE3408320 -:1011B00051836283738372971082339610823196C3 -:1011C000108233971082089580E090E00895CF93C5 -:1011D000DF93FC01E55DFE4FD081C0E07D97CD1728 -:1011E000C1F0DC01A15EBE4F2D913C91AB01421BD1 -:1011F000530B9A0157FF03C031952195310902968F -:10120000408151814217530714F08C2F03C0CF5FE8 -:10121000E6CF8FEFDF91CF910895FC011482158204 -:101220001682178210861186411104C0DC01A85F66 -:10123000BE4F4C91641780F4DF01A60FB11D1A96C2 -:101240008C91DF01A80FB11D14968C9114978F5FBC -:1012500014968C936F5FEECF08952F923F924F922A -:101260005F926F927F928F929F92AF92BF92CF9236 -:10127000DF92EF92FF920F931F93CF93DF93CDB73F -:10128000DEB72E970FB6F894DEBF0FBECDBF9E8798 -:101290008D8740E060E00E940D09ED85FE85E55DEB -:1012A000FE4F5080712C2D853E85255E3E4F3A873E -:1012B00029878D859E85885F9E4F9C878B877514B7 -:1012C00009F4C3C044244394470C642C272C312CCC -:1012D000C101880F991FAD85BE858A0F9B1FFC0138 -:1012E000E15EFE4FFA83E9832A0E3B1EF4E02F0EE7 -:1012F000311C29813A8138872F83651409F4A3C0F2 -:10130000862D90E09C838B83880F991F9E838D830D -:10131000FC01AD85BE85EA0FFB1FE15EFE4F00813B -:101320001181C80117FF04C088279927801B910BE2 -:10133000BC01882777FD8095982F0E942B1CE9859A -:10134000FA8520813181428153810E94DF1C4B014B -:101350005C01A981BA81CD90DC907801EC18FD0880 -:10136000F7FE03C0F194E194F10820E030E040E0A2 -:101370005FE3C501B4010E94DF1C9B01AC01C50104 -:10138000B4010E94941B0E94F81B6E157F050CF49B -:1013900058C0EB85FC85208180E090E0821750F4F6 -:1013A000ED85FE85E80FF91F3285361101C0728682 -:1013B0000196F4CFD1014C91552747FD5095EB8113 -:1013C000FC812D853E85E20FF31FE481FF27E7FDB9 -:1013D000F0959A012E0F3F1F21153105E1F4C49EAF -:1013E000C001C59E900DD49E900D1124B9010E949C -:1013F000621D7B010E9FC0010F9F900D1E9F900DDF -:101400001124B9010E94621DE60EF71EAF81B88556 -:10141000ED92FC920CC00C0D1D1D17FF02C00F5F5A -:101420001F4F15950795E981FA8111830083ED819E -:10143000FE812D853E85E20FF31FE15EFE4F118296 -:10144000108263945ACF742C3ACF2E960FB6F8942C -:10145000DEBF0FBECDBFDF91CF911F910F91FF90E7 -:10146000EF90DF90CF90BF90AF909F908F907F9044 -:101470006F905F904F903F902F9008953F924F92C2 -:101480005F926F927F928F929F92AF92BF92CF9214 -:10149000DF92EF92FF920F931F93CF93DF93EC01B4 -:1014A0008FEF8883FE01E55DFE4F30806E0100E026 -:1014B00010E0EE24EA94FE2C4E0188EF881A8EEF9D -:1014C000980A031508F06AC0F601E15EFE4F5F015D -:1014D000FFEFEF16FF0639F5F5018081918197FD49 -:1014E00022C0FE01E00FF11F6481772767FD709530 -:1014F000872F972F0E942B1C2B013C01F401608148 -:1015000070E080E090E00E942B1C2BE734E14EE27B -:101510005EE30E94DF1C9B01AC01C301B2010E948B -:10152000DB1C1816A4F1F5012081318137FD30C094 -:10153000C701880F991F8C0F9D1FFC01E15EFE4FB4 -:1015400080819181281739071CF5FE01E00FF11FFA -:101550006481772767FD7095872F972F0E942B1C3A -:101560002B013C01F401608170E080E090E00E947A -:101570002B1C2BE734E14EE25EE30E94DF1C9B0153 -:10158000AC01C301B2010E94DB1C18160CF47801F7 -:101590000F5F1F4FF2E0CF0ED11C93CF8FEFE816F5 -:1015A000F80641F0E882CF5EDE4F81E090E099835B -:1015B000888301C080E0DF91CF911F910F91FF9050 -:1015C000EF90DF90CF90BF90AF909F908F907F90E3 -:1015D0006F905F904F903F9008958F929F92AF923F -:1015E000BF92CF92DF92EF92FF920F931F93CF9310 -:1015F000DF93FC018C010F5E1E4FD8018D919C91F1 -:101600001197019709F07CC05A96BC90BA94C7E034 -:10161000AC2E6F01B8EFCB1ABEEFDB0AB7FC70C07F -:101620002B2D332727FD3095C901880F991F8E0F69 -:101630009F1FDC01A15EBE4FCD91DC91D7FF5EC044 -:10164000D195C195D109C83682E4D80708F056C0B3 -:10165000E080FF24E7FCF094C701880F991F8E0FEC -:101660009F1FDC01A15EBE4F8D909C90CE01B40106 -:101670000E944E1D6832710508F040C0A89CC00150 -:10168000A99C900D11248C179D07C0F5DF01A20FB6 -:10169000B31F14968C9186308CF5D6014C9150E096 -:1016A000BA0161507109912C892D90E08617970736 -:1016B00084F4DF01A80FB91F1B96CC911B97D0E0D3 -:1016C000C217D307C9F41A96AC91B0E0AE15BF05A6 -:1016D00099F4485251098417950784F4DF01A45DF9 -:1016E000BE4FBC9282E090E0D8018D939C93E75F5F -:1016F000FE4F908281E009C09394D6CFBA948ECFEA -:10170000E45DFE4F8FEF808380E0DF91CF911F91EA -:101710000F91FF90EF90DF90CF90BF90AF909F9090 -:101720008F9008950F931F93CF93DF938A01E90160 -:101730008AE094E00E94C717B8018AE094E00E9412 -:10174000C717BE018AE094E0DF91CF911F910F91FE -:101750000C94C717EF92FF920F931F93CF93DF93D1 -:10176000EC01F62EE42EB9018AE094E00E94C7173E -:10177000EF1460F0FE01EF0DF11D4AE050E06285CC -:101780008AE094E00E94E618F394F2CFB8018AE070 -:1017900094E00E94C71780E0DF91CF911F910F91D5 -:1017A000FF90EF90089570E0FC0126A1332727FDFC -:1017B00030956217730751F027A1332727FD309525 -:1017C00081E06217730719F080E0089581E00895C1 -:1017D00070E0FC0120A5332727FD309562177307C1 -:1017E00051F021A5332727FD309581E0621773075B -:1017F00019F080E0089581E008959F92AF92BF9222 -:10180000CF92DF92EF92FF920F931F93CF93DF93CC -:1018100000D01F92CDB7DEB78C017B0120E330E30F -:1018200040E029833A834B83FC01668DF3E06F9F90 -:10183000B0011124C7010E943019E114F10449F1EB -:10184000912C87ECA82E81E0B82ECE0101966C0178 -:10185000F801868D8915E8F0F80183A1981620F427 -:10186000E90DF11D808101C08FEF1F928F93BF9210 -:10187000AF92DF92CF920E947720B601C7010E94FB -:10188000691A93940F900F900F900F900F900F90F4 -:10189000DFCF0F900F900F90DF91CF911F910F919D -:1018A000FF90EF90DF90CF90BF90AF909F90089502 -:1018B0000F931F93CF93DF938C01EB0160E270E0F5 -:1018C000CE010E943019209709F468C06CEC71E0D9 -:1018D000CE010E94691AF80184A195A126A1220FC8 -:1018E000330B820F931FFC01E15EFE4F608171811B -:1018F000CE010E94B81A6BE3CE010E94791A60ED06 -:1019000071E0CE010E94691AF80184A195A127A176 -:10191000220F330B820F931FFC01E15EFE4F6081AB -:101920007181CE010E94B81A6BE3CE010E94791A30 -:1019300064ED71E0CE010E94691AF80184A195A1BD -:1019400020A5220F330B820F931FFC01E15EFE4F97 -:1019500060817181CE010E94B81A6BE3CE010E94B2 -:10196000791A68ED71E0CE010E94691AF80184A12C -:1019700095A121A5220F330B820F931FFC01E15E7D -:10198000FE4F60817181CE010E94B81A6BE3CE01D7 -:10199000DF91CF911F910F910C94791ADF91CF9124 -:1019A0001F910F9108950F931F93CF93DF938C0195 -:1019B000EB0167E070E0CE010E943019209799F0AA -:1019C0006CED71E0CE010E94691AF80162A573A561 -:1019D000CE010E94B81A6BE3CE01DF91CF911F9127 -:1019E0000F910C94791ADF91CF911F910F91089567 -:1019F0004F925F926F927F928F929F92AF92BF921F -:101A0000CF92DF92EF92FF920F931F93CF93DF93CA -:101A1000EC010CA11DA1580185EDA81A8EEFB80AA2 -:101A2000F5018081843008F4C4C06801F8EFCF1A52 -:101A3000FEEFDF0AF601608170E080E090E00E9436 -:101A40002B1C2AE037ED43E25DE30E94DF1C0E947D -:101A5000FD1B40E050E0912C812CEE24EA94FE2CFA -:101A6000262F30E0F5018081481708F06BC0642F05 -:101A700070E0F801E60FF71FE4818E2F992787FDAC -:101A80009095821793070CF45BC0660F771F600F69 -:101A9000711FDB01A15EBE4F6D917C91161617067A -:101AA0004CF55E0F8394E60EF71EEFA1EF3F69F051 -:101AB0008E2F880F990B800F911FDC01A15EBE4F06 -:101AC0008D919C91861797070CF4E42FEFA3E9A55D -:101AD000EF3F69F08E2F880F990B800F911FDC016B -:101AE000A15EBE4F8D919C91681779070CF4E42F8D -:101AF000E9A726C05E1B9394EEA1EF3F69F08E2FFD -:101B0000880F990B800F911FDC01A15EBE4F8D9154 -:101B10009C91681779070CF4E42FEEA3E8A5EF3F3A -:101B200069F08E2F880F990B800F911FDC01A15E49 -:101B3000BE4F8D919C91861797070CF4E42FE8A770 -:101B40004F5F90CF652F70E080E090E00E942B1CEB -:101B50002B013C01F601608170E080E090E00E9482 -:101B60002B1C2AE037ED43EA5CE30E94DF1C9B015B -:101B7000AC01C301B2010E94DB1C1816D4F098100E -:101B800018C0C70163E070E00E94621D7BA76AA7CE -:101B90009EA19F3F71F088A58F3F59F0981749F09B -:101BA0002FA12F3F31F099A59F3F19F081E0291314 -:101BB00001C080E0DF91CF911F910F91FF90EF90D6 -:101BC000DF90CF90BF90AF909F908F907F906F905D -:101BD0005F904F900895FC0183A12E2FDF019A2F73 -:101BE000921B981710F41D92FACF168E178E87E06D -:101BF00082A3089524E1FC0124A70C94EB0D7F92AD -:101C00008F929F92AF92BF92CF92DF92EF92FF920C -:101C10000F931F93CF93DF93EC018CA19DA1FC0147 -:101C2000E45FFE4F108233971082D12CF12C812C6F -:101C300037E0B32EAA24A3940CA11DA1F801E85FFC -:101C4000FE4F8081881608F04DC0F11014C0F801D5 -:101C5000E80DF11DE2846E2DCE010E94D30B81119F -:101C600006C06E2DCE010E94E80B8823C9F1F80151 -:101C7000E75FFE4F80820CA11DA1D1108FC0C8016B -:101C8000885F9E4F7C01F801E80DF11DC2846C2D28 -:101C9000CE010E94D30B811161C0F70180818816AB -:101CA00008F47AC05BC0672DCE010E94E80B782E45 -:101CB000811184C04F8D50E02CA5332727FD30952E -:101CC000421753070CF0C8C07110B4C0CE010E9477 -:101CD000EB0DF12C4E8D8BA1481708F486C0DF2C3C -:101CE0008394AACF88122DC0D801A75FBE4F4C9114 -:101CF000423038F12F8D30E08CA587FD8F5F8595C0 -:101D0000992787FD909582179307DCF4841A8082C7 -:101D10008CA19DA1FC01E85FFE4F408150E04F5F28 -:101D20005F4F3196608170E0665F7F4F680F791F6B -:101D30000A960E94DD1FECA1FDA1E45FFE4F81E049 -:101D400080834F8D50E02CA5332727FD309581E00F -:101D5000421753070CF0B5C080E0B3C0282DF7013F -:101D600080818816B0F4C8018C0D911D8C0D911DD9 -:101D7000FC01E15EFE4F9180991C9924991CF801A9 -:101D8000E75FFE4F8080281949F020FF07C0839449 -:101D900005C0FF24F394A4CF839475CFE82CF12CD5 -:101DA0006801CE0CDF1CF6017284672DCE010E9403 -:101DB000D30B882309F477CF9A2414C0F801E85F85 -:101DC000FE4F208130E021503109E216F3060CF07D -:101DD00071CFF6016385CE010E94E80B882309F4D8 -:101DE00069CF8394FF24F39475CF5AA1852F90E097 -:101DF000292D332727FD3095052E01C0220F0A9487 -:101E0000EAF7FE01E40FF11D3081322B30832F8D74 -:101E10002F5F2F8F28A1821B910997FD03C0521BB2 -:101E20005AA35DCFBAA24F5F4E8FFE01E40FF11DA2 -:101E3000108255CFF801E85FFE4F808190E0019756 -:101E4000E816F9060CF042CFF6016385CE010E9438 -:101E5000E80B882389F13ACFF801E65FFE4F8082D4 -:101E60008CA19DA1FC01E85FFE4FDC01A65FBE4F87 -:101E700020818C91281B20838CA19DA1FC01E85F0F -:101E8000FE4F408150E04F5F5F4F3296608170E0BF -:101E9000665F7F4F680F791F0A960E94DD1FECA1D5 -:101EA000FDA1E45FFE4F81E080834F8D50E02CA5C3 -:101EB000332727FD30954CCFF801E75FFE4F808038 -:101EC00005CFDF91CF911F910F91FF90EF90DF90A1 -:101ED000CF90BF90AF909F908F907F9008953F924A -:101EE0004F925F926F927F928F929F92AF92BF922A -:101EF000CF92DF92EF92FF920F931F93CF93DF93D6 -:101F0000CDB7DEB7E3970FB6F894DEBF0FBECDBFF7 -:101F10007C013C0188EF681A8EEF780AF30180811A -:101F2000883208F474C2C7010E942D0940E060E0C5 -:101F3000C7010E940D09C7010E943E0AC7010E9405 -:101F4000ED0AF7018381882309F422C1EF5EFE4F79 -:101F500080819181029709F01BC14701F7EF8F1A29 -:101F6000FEEF9F0AF40160815701F6EFAF1AFEEF12 -:101F7000BF0A82E0860FF5018083F3017081872F0D -:101F800090E00197D701A45DBE4FF5011081212F8C -:101F900030E028173907FCF4F701E20FF31F4385FF -:101FA00050E02C91332727FD30954217530779F4E1 -:101FB000428550E0F7012081332727FD30954217F5 -:101FC000530729F41150F501108311E005C01E5F7D -:101FD000F5011083DACF10E0F5018081781708F45D -:101FE0007083F5014081C7010E940D09112351F052 -:101FF000F501808190E0F4012081821B910988978E -:1020000034F4C2C0F30140814E3F08F09EC0670126 -:10201000F3EDCF1AFEEFDF0A67E072E0C6010E941F -:10202000C51987010D5C1E4F67E072E0C8010E9470 -:10203000C51962E0C6010E94791A6FED71E0C60110 -:102040000E94691A6BE3C6010E94791A312C37018C -:1020500085ED681A8EEF780AF3018081381640F515 -:10206000432C512CF701E40DF51D84818823F1F0F8 -:1020700060E5C6010E94791A632DC6010E948C1A80 -:102080006DED71E0C6010E94691AC201880F991FA7 -:102090008E0D9F1DFC01E15EFE4F60817181C601C6 -:1020A0000E94B81A6BE3C6010E94791A3394D4CF08 -:1020B00062EE71E0C6010E94691A6BE3C8010E94DA -:1020C000791A65EE71E0C8010E94691AF701608112 -:1020D000772767FD7095C8010E94B81A6BE3C801A5 -:1020E0000E94791A69EE71E0C8010E94691AF7012D -:1020F000E45DFE4F6081772767FD7095C8010E94FF -:10210000B81A6BE3C8010E94791AF701E35FFE4F2A -:102110008081882349F06DEE71E0C8010E94691A40 -:102120006BE3C8010E94791A63E0C8010E94791A22 -:102130006AE0C8010E94791A9601F5014081F40114 -:102140006081C7010E94AA0BD1C0F4016081623096 -:10215000D8F0F501808190E08D3F9105ACF0461BF1 -:10216000F301408350E04F5F5F4F70E0665F7F4F49 -:102170006E0D7F1DC7010A960E94DD1F81E0F701E9 -:10218000E45FFE4F8083BBC0C7010E94A608B7C0B2 -:10219000F7018181811104C08281882309F4ABC0D9 -:1021A000F701EF5EFE4F80819181019709F0A3C096 -:1021B000F3018081883208F49EC06701F3EDCF1AE5 -:1021C000FEEFDF0A67E072E0C6010E94C5198701D1 -:1021D0000D5C1E4F67E072E0C8010E94C51962E005 -:1021E000C6010E94791A8EE18CA381E089A31AA20C -:1021F000CE0101960E94EB0D29A187E090E0821BA1 -:1022000091097AA167E041E050E0262F30E0821783 -:1022100093074CF49A01062E01C0220F0A94EAF7A4 -:10222000722B6150F2CF7AA38FEF8FA388A789A773 -:102230008AA7FEA2EDA2CE0101960E94FA0DCE0160 -:1022400001960E94FA0D81E18DA7F7018281882312 -:1022500009F45FC0CE0101960E94F80C882309F4AE -:1022600058C0CE0101960E94FF0D882309F451C089 -:1022700067E072E0CE018E960E946D1962EE71E009 -:10228000CE018E960E94C519BE01625D7F4FCE01C0 -:1022900001960E94FD0B62EF71E0C6010E94691A6F -:1022A0006BE3C6010E94791AB601CE0101960E9425 -:1022B000580C6BE3C8010E94791AB801CE0101964F -:1022C0000E94D30C63E0C8010E94791A6AE0C80139 -:1022D0000E94791A9801AE01425D5F4FB601C701B5 -:1022E0000E94920BCE018E960E94FF1881E0F701AA -:1022F000E55FFE4F47CFF701E55FFE4F1082F70124 -:10230000E45FFE4F8081811182C0C7010E94A60850 -:102310007EC0F7018181882349F36FEE71E0C60129 -:102320000E94691A6BE3C6010E94791A512C570169 -:10233000F5EDAF1AFEEFBF0AF5018081581648F59A -:10234000852C912CF701E80DF91D84818823F9F083 -:1023500060EC71E0C6010E94691A652DC6010E94F9 -:102360008C1A6DED71E0C6010E94691AC401880FD4 -:10237000991F8E0D9F1DFC01E15EFE4F60817181F2 -:10238000C6010E94B81A6BE3C6010E94791A5394E1 -:10239000D3CF62EE71E0C6010E94691A6BE3C801F7 -:1023A0000E94791A65EE71E0C8010E94691AF7016E -:1023B0006081772767FD7095C8010E94B81A6BE3AA -:1023C000C8010E94791AF701E35FFE4F80818823DC -:1023D00049F06DEE71E0C8010E94691A6BE3C80113 -:1023E0000E94791A63E0C8010E94791A6AE0C80164 -:1023F0000E94791AF30140814150960160E0C701C3 -:102400000E94AA0BF701E45FFE4F10826FCFE396A4 -:102410000FB6F894DEBF0FBECDBFDF91CF911F91F5 -:102420000F91FF90EF90DF90CF90BF90AF909F9073 -:102430008F907F906F905F904F903F9008958F9214 -:102440009F92AF92BF92CF92DF92EF92FF920F9343 -:102450001F93CF93DF931F92CDB7DEB74C018C0152 -:10246000085F1E4FD8018C9190E08D3F910544F09C -:1024700081E0F401E35FFE4F8083C4010E946F0F8F -:10248000F401E05FFE4F10826401B9EECB1ABEEF9B -:10249000DB0AD601ED91FC91119780819181129612 -:1024A0000D90BC91A02D2D913C91D8014C91509153 -:1024B00000047401B5EDEB1ABEEFFB0AD7016C9175 -:1024C000651708F45C93442361F082279327B92EA3 -:1024D000BB1CBB24BB1C81E04D3F09F480E0B8224B -:1024E00005C0D7011C9210920004B12C608171814B -:1024F000C40149830E94E708A82E498187FD2CC0AA -:10250000F401E40FF11D8287423030F081858A1199 -:1025100003C0C4010E94A6088A2D880F990B880D5C -:10252000991DFC01E15EFE4FD6018D919C912081A9 -:102530003181DC018D919C91280F391F37FF02C03A -:102540002F5F3F4F3595279531832083F801808198 -:102550008F5F808320E012C040E060E0C4010E94F1 -:102560000D09D7018C91863041F480910004F4016B -:10257000E80FF11D8481823024F421E0B1101DC0E8 -:1025800001C020E0F8018081A401455F5E4F5A013F -:10259000883248F081E0DA018C93C4010E946F0F09 -:1025A000109200046AC0C40129830E94A608F501A4 -:1025B00010821092000429810BC0D8018C918832BE -:1025C00038F083E090E0F401EF5EFE4F918380836A -:1025D000222309F452C0F80140815091000480E0A8 -:1025E00090E0242F30E0F9013197280D391DBF010B -:1025F000680F791F6F3FAFEF7A07E1F00197D901BC -:10260000A80FB91F1A96AC91A513F1CFCB01019673 -:10261000481BD8014C9350E04F5F5F4F655F7F4F81 -:10262000680D791DC4010A960E94DD1FF8018081A2 -:102630008F5F808340910004D601ED91FC91208151 -:102640003181C401840F911D840F911DFC01E15E55 -:10265000FE4F31832083F8018081F401E80FF11DE2 -:1026600042878F5FD8018C934F5F409300044630C0 -:1026700021F410920004F70140830F90DF91CF9175 -:102680001F910F91FF90EF90DF90CF90BF90AF9090 -:102690009F908F900895CF93DF93EC01C55FDE4F3D -:1026A0001882FC01E75EFE4F0190F081E02D208151 -:1026B0003181DC01A95EBE4F0D90BC91A02D2D9300 -:1026C0003C93DB012D913C91318320830E941F12AA -:1026D0008881DF91CF91089508958230E8F4E82F42 -:1026E000F0E0EE0FFF1FE75FFE4F718360838130E4 -:1026F00041F0809169008C7F842B80936900E89A77 -:10270000089580916900440F551F440F551F837F22 -:10271000842B80936900E99A0895823078F481309F -:1027200011F0E89801C0E998E82FF0E0EE0FFF1FE4 -:10273000E75FFE4F8CE693E19183808308951F92BB -:102740000F920FB60F9211242F933F934F935F93E5 -:102750006F937F938F939F93AF93BF93EF93FF9369 -:10276000E0910901F0910A010995FF91EF91BF9164 -:10277000AF919F918F917F916F915F914F913F9119 -:102780002F910F900FBE0F901F9018951F920F92D0 -:102790000FB60F9211242F933F934F935F936F9334 -:1027A0007F938F939F93AF93BF93EF93FF93E091AA -:1027B0000B01F0910C010995FF91EF91BF91AF9141 -:1027C0009F918F917F916F915F914F913F912F9149 -:1027D0000F900FBE0F901F9018951F920F920FB67B -:1027E0000F9211242F933F938F939F93AF93BF9397 -:1027F0008091020490910304A0910404B091050417 -:102800003091010423E0230F2D3720F40196A11D00 -:10281000B11D05C026E8230F0296A11DB11D20930E -:1028200001048093020490930304A0930404B093E2 -:1028300005048091060490910704A0910804B091CA -:1028400009040196A11DB11D80930604909307040D -:10285000A0930804B0930904BF91AF919F918F9109 -:102860003F912F910F900FBE0F901F9018952FB78B -:10287000F894609102047091030480910404909193 -:1028800005042FBF08953FB7F894809106049091F6 -:102890000704A0910804B091090426B5A89B05C0BF -:1028A0002F3F19F00196A11DB11D3FBF6627782F5C -:1028B000892F9A2F620F711D811D911D42E0660FB5 -:1028C000771F881F991F4A95D1F70895CF92DF92FD -:1028D000EF92FF92CF93DF936B017C010E94431430 -:1028E000EB01C114D104E104F10489F00E94921BB0 -:1028F0000E9443146C1B7D0B683E734090F381E093 -:10290000C81AD108E108F108C851DC4FEACFDF91BD -:10291000CF91FF90EF90DF90CF9008958230910596 -:1029200038F0880F991F880F991F05970197F1F7C5 -:102930000895789484B5826084BD84B5816084BD37 -:1029400085B5826085BD85B5816085BDEEE6F0E028 -:10295000808181608083E1E8F0E010828081826084 -:102960008083808181608083E0E8F0E08081816005 -:102970008083E1EBF0E0808184608083E0EBF0E035 -:10298000808181608083EAE7F0E0808184608083D9 -:102990008081826080838081816080838081806883 -:1029A00080831092C1000895833081F028F4813033 -:1029B00099F08230A1F008958730A9F08830B9F0FD -:1029C0008430D1F4809180008F7D03C0809180009D -:1029D0008F7780938000089584B58F7702C084B587 -:1029E0008F7D84BD08958091B0008F7703C0809162 -:1029F000B0008F7D8093B0000895CF93DF9390E077 -:102A0000FC01E555FF4F2491FC01E154FF4F8491F7 -:102A1000882349F190E0880F991FFC01E352FF4F92 -:102A2000A591B4918D529F4FFC01C591D4919FB750 -:102A3000611108C0F8948C91209582238C93888131 -:102A400082230AC0623051F4F8948C91322F309571 -:102A500083238C938881822B888304C0F8948C9183 -:102A6000822B8C939FBFDF91CF9108950F931F937B -:102A7000CF93DF931F92CDB7DEB7282F30E0F90157 -:102A8000E956FF4F8491F901E555FF4F1491F90183 -:102A9000E154FF4F04910023C9F0882321F069839A -:102AA0000E94D4146981E02FF0E0EE0FFF1FED5279 -:102AB000FF4FA591B4919FB7F8948C91611103C019 -:102AC0001095812301C0812B8C939FBF0F90DF91C4 -:102AD000CF911F910F910895FC01818D228D90E07F -:102AE000805C9F4F821B91098F7399270895FC0189 -:102AF000918D828D981731F0828DE80FF11D858DB3 -:102B000090E008958FEF9FEF0895FC01918D828DE5 -:102B1000981761F0828DDF01A80FB11D5D968C9131 -:102B2000928D9F5F9F73928F90E008958FEF9FEF3C -:102B3000089589E097E1892B49F08EE598E0892B8B -:102B400029F00E94091781110C945E080895FC0178 -:102B5000848DDF01A80FB11DA35ABF4F2C91848D26 -:102B600090E001968F739927848FA689B7892C935B -:102B7000A089B1898C9180648C93938D848D9813F6 -:102B800006C00288F389E02D80818F7D80830895BF -:102B9000CF93DF93EC01888D8823C9F0EA89FB8904 -:102BA000808185FD05C0A889B9898C9186FD0FC0FB -:102BB0000FB607FCF5CF808185FFF2CFA889B989D0 -:102BC0008C9185FFEDCFCE010E94A715E7CFDF9155 -:102BD000CF910895CF92DF92FF920F931F93CF93DF -:102BE000DF931F92CDB7DEB76C0181E0D601589616 -:102BF0008C9358975B969C915B975C968C915C97B5 -:102C0000981307C05096ED91FC915197808185FDF6 -:102C10002EC0F601038D10E00F5F1F4F0F731127B9 -:102C2000F02EF601848DF81211C00FB607FCF9CF13 -:102C3000D6015096ED91FC915197808185FFF1CF9F -:102C4000C60169830E94A7156981EBCF838DE80FC8 -:102C5000F11DE35AFF4F6083D6015B960C935B979F -:102C60005296ED91FC915397808180620CC0D60101 -:102C70005696ED91FC91579760835096ED91FC919B -:102C8000519780818064808381E090E00F90DF9194 -:102C9000CF911F910F91FF90DF90CF900895BF9239 -:102CA000CF92DF92EF92FF92CF93DF93EC016A0114 -:102CB0007B01B22EE889F98982E08083411581EE9B -:102CC000580761057105A1F060E079E08DE390E0BF -:102CD000A70196010E94761D215031094109510931 -:102CE0005695479537952795211580E1380798F037 -:102CF000E889F989108260E874E88EE190E0A70124 -:102D000096010E94761D21503109410951095695BD -:102D1000479537952795EC85FD853083EE85FF85B2 -:102D20002083188EEC89FD89B082EA89FB89808135 -:102D300080618083EA89FB89808188608083EA8959 -:102D4000FB89808180688083EA89FB8980818F7D0F -:102D50008083DF91CF91FF90EF90DF90CF90BF9075 -:102D600008951F920F920FB60F9211242F938F93F5 -:102D70009F93EF93FF93E0911A04F0911B048081DD -:102D8000E0912004F091210482FD12C09081809195 -:102D900023048F5F8F7320912404821751F0E091F8 -:102DA0002304F0E0E65FFB4F958F8093230401C07E -:102DB0008081FF91EF919F918F912F910F900FBE86 -:102DC0000F901F9018951F920F920FB60F9211241B -:102DD0002F933F934F935F936F937F938F939F9323 -:102DE000AF93BF93EF93FF938AE094E00E94A715FF -:102DF000FF91EF91BF91AF919F918F917F916F91D3 -:102E00005F914F913F912F910F900FBE0F901F90A8 -:102E100018958AE094E00E946C1521E0892B09F452 -:102E200020E0822F089510920D0410920C0488EE79 -:102E300093E0A0E0B0E080930E0490930F04A09381 -:102E40001004B093110489EF91E090930B048093E8 -:102E50000A0485EC90E0909317048093160484ECA8 -:102E600090E0909319048093180480EC90E0909384 -:102E70001B0480931A0481EC90E090931D048093CE -:102E80001C0482EC90E090931F0480931E0486EC57 -:102E900090E09093210480932004109223041092D8 -:102EA00024041092250410922604089508950E9487 -:102EB00099140E9456170E94C507C9E9D5E10E94DE -:102EC00056072097E1F30E949915F9CFCF92DF9230 -:102ED000EF92FF920F931F93CF93DF937C016A01D0 -:102EE000EB0100E010E00C151D0571F06991D701B0 -:102EF000ED91FC910190F081E02DC7010995892B9E -:102F000019F00F5F1F4FEFCFC801DF91CF911F91D5 -:102F10000F91FF90EF90DF90CF90089561157105AC -:102F200081F0DB010D900020E9F7AD01415051091E -:102F3000461B570BDC01ED91FC910280F381E02DE3 -:102F4000099480E090E00895EF92FF920F931F9311 -:102F5000CF93DF938C017B01C0E0D0E0F701EC0F51 -:102F6000FD1F6491662359F0F801A081B181ED91B4 -:102F7000FC91C8010995892B11F02196EFCFCE0164 -:102F8000DF91CF911F910F91FF90EF900895DC0199 -:102F9000ED91FC91DB0114964D915C9115976D912B -:102FA0007C910280F381E02D0994DC01ED91FC918C -:102FB0000190F081E02D099465E072E00C948E1789 -:102FC0000F931F93CF93DF93EC010E94A4178C0102 -:102FD000CE010E94DC17800F911FDF91CF911F91CE -:102FE0000F9108950F931F93CF93DF93EC010E94ED -:102FF000C7178C01CE010E94DC17800F911FDF9153 -:10300000CF911F910F9108950F931F93CF93DF934B -:10301000EC010E948E178C01CE010E94DC17800FFC -:10302000911FDF91CF911F910F9108958F929F92E1 -:10303000AF92BF92CF92DF92EF92FF920F931F93C6 -:10304000CF93DF93CDB7DEB7A1970FB6F894DEBF6D -:103050000FBECDBF7C01C42EE52FCB01D22E19A20D -:1030600021E02D1510F02AE0D22E8E010F5D1F4FAA -:103070008D2C912CA12CB12C6C2D7E2FA5019401AF -:103080000E94761D8C2DD29E8019112401501109A9 -:103090008A3014F4805D01C0895CF80180832115B9 -:1030A00031054105510521F0C22EE32FCA01E4CFBD -:1030B000B801C7010E948E17A1960FB6F894DEBF23 -:1030C0000FBECDBFDF91CF911F910F91FF90EF9079 -:1030D000DF90CF90BF90AF909F908F900895CF9248 -:1030E000DF92EF92FF920F931F93CF93DF93EC0148 -:1030F0006A017B012115310579F4E881F98101909C -:10310000F081E02D642FDF91CF911F910F91FF90FF -:10311000EF90DF90CF9009942A303105E9F477FFE2 -:103120001AC06DE20E94D5178C0144275527BA01B9 -:103130004C195D096E097F092AE0CE010E9416181C -:10314000800F911FDF91CF911F910F91FF90EF9012 -:10315000DF90CF9008952AE0B701A601CE01DF915C -:10316000CF911F910F91FF90EF90DF90CF900C9433 -:1031700016189A01AB01662757FD6095762F0C94BF -:103180006F180F931F93CF93DF93EC019A01AB015C -:10319000662757FD6095762F0E946F188C01CE012F -:1031A0000E94DC17800F911FDF91CF911F910F912B -:1031B00008952115310541F4DC01ED91FC91019058 -:1031C000F081E02D642F09940C9416189A01462F73 -:1031D00050E060E070E00C94D9180F931F93CF93E8 -:1031E000DF93EC010E94D9188C01CE010E94DC17FC -:1031F000800F911FDF91CF911F910F910895FC01D6 -:10320000808191810C94361ECF93DF93EC018881ED -:103210009981009711F00E94361E198218821D8232 -:103220001C821B821A82DF91CF9108950F931F9306 -:10323000CF93DF93EC018B016F5F7F4F8881998182 -:103240000E94C51E009731F0998388831B830A83EF -:1032500081E001C080E0DF91CF911F910F9108952F -:10326000CF93DF93EC0188819981892B29F08A81A2 -:103270009B818617970760F4CE010E941619882358 -:1032800041F08C819D81892B19F4E881F9811082AC -:1032900081E0DF91CF910895EF92FF920F931F93FA -:1032A000CF93DF93EC017B018A01BA010E943019B0 -:1032B000811104C0CE010E94041907C01D830C8334 -:1032C000B701888199810E94EF1FCE01DF91CF91D4 -:1032D0001F910F91FF90EF900895FC0111821082D1 -:1032E00013821282158214826115710559F0FB0157 -:1032F00001900020E9F7AF0141505109461B570BDF -:103300000C944C1908950F931F93CF93DF938C0166 -:10331000EB01FC0180819181009799F042815381FA -:103320002C813D814217530750F0688179810E94BA -:10333000EF1F8C819D81F8019583848313C00E94C7 -:10334000361E88819981F801918380838A819B81CF -:10335000938382838C819D819583848319821882D3 -:103360001B821A821D821C82DF91CF911F910F91C7 -:103370000895CF93DF93EC018617970711F00E9411 -:103380008319CE01DF91CF910895CF93DF93EC01A4 -:103390006115710561F0FB0101900020E9F7AF01B3 -:1033A00041505109461B570B0E944C1902C00E9404 -:1033B0000419CE01DF91CF9108950F931F93CF93FE -:1033C000DF93CDB7DEB729970FB6F894DEBF0FBEF7 -:1033D000CDBF8C01862FF8011182108213821282D8 -:1033E0001582148250E0BE016F5F7F4F90E00E9413 -:1033F0005220BE016F5F7F4FC8010E94C5192996F8 -:103400000FB6F894DEBF0FBECDBFDF91CF911F91F5 -:103410000F9108950F931F93CF93DF93CDB7DEB72E -:1034200062970FB6F894DEBF0FBECDBF8C01CB0103 -:10343000F80111821082138212821582148250E0E8 -:10344000BE016F5F7F4F0E941F20BE016F5F7F4FE5 -:10345000C8010E94C51962960FB6F894DEBF0FBE70 -:10346000CDBFDF91CF911F910F910895EF92FF9201 -:103470000F931F93CF93DF93EC017B010C811D8190 -:103480006115710511F480E016C04115510591F0E8 -:10349000040F151FB8010E9430198823A1F3288159 -:1034A00039818C819D81B701820F931F0E94EF1F8C -:1034B0001D830C8381E0DF91CF911F910F91FF90CD -:1034C000EF900895FB0144815581608171810C94D6 -:1034D000361A6115710559F0FB0101900020E9F7DA -:1034E000AF0141505109461B570B0C94361A80E02E -:1034F0000895CF93DF9300D0CDB7DEB769831A82EA -:1035000041E050E0BE016F5F7F4F0E94361A0F907E -:103510000F90DF91CF910895EF92FF920F931F9339 -:10352000CF93DF9300D000D0CDB7DEB77C01862FDC -:103530004AE08E010F5F1F4FB80190E00E942A20E1 -:10354000F80101900020E9F7AF0141505109401BFB -:10355000510BB801C7010E94361A0F900F900F90BF -:103560000F90DF91CF911F910F91FF90EF900895F1 -:10357000EF92FF920F931F93CF93DF93CDB7DEB7F8 -:1035800028970FB6F894DEBF0FBECDBF7C01CB01EC -:103590004AE08E010F5F1F4FB8010E942A20F801F8 -:1035A00001900020E9F7AF0141505109401B510B38 -:1035B000B801C7010E94361A28960FB6F894DEBFEC -:1035C0000FBECDBFDF91CF911F910F91FF90EF9074 -:1035D0000895FC01248135816217730748F48081C6 -:1035E0009181009729F0FC01E60FF71F8081089573 -:1035F00080E008950C94E91A0F931F93CF93DF9303 -:10360000EB0141155105E9F02097D9F0FC016481E7 -:10361000758126173707A0F4621B730B8A010150CE -:1036200011096017710708F48B01FC016081718139 -:10363000620F731FA801CE010E94F61FC00FD11F99 -:103640001882DF91CF911F910F910895CF93DF934F -:10365000FC01848195814817590778F4C081D18194 -:10366000FB0160817181CE01840F951F0E940520AE -:10367000009719F08C1B9D0B02C08FEF9FEFDF911D -:10368000CF910895BF92CF92DF92EF92FF920F9366 -:103690001F93CF93DF936C017B01EA01890124170B -:1036A000350720F48D2FE901042F182F67E072E011 -:1036B000C6010E946D19D70114968D919C911597A2 -:1036C000C817D907C8F48017910708F48C01D701EF -:1036D000ED91FC911197E00FF11FB08010826D9178 -:1036E0007C916C0F7D1FC6010E94C519D701ED9119 -:1036F000FC91E00FF11FB082C601DF91CF911F91C5 -:103700000F91FF90EF90DF90CF90BF900895FC0154 -:1037100080819181009711F00C94AD1F60E070E002 -:10372000CB01089508955058BB27AA270ED009C190 -:10373000FAD030F0FFD020F031F49F3F11F41EF4A6 -:10374000EFC00EF4E095E7FBE5C0E92F0BD180F365 -:10375000BA17620773078407950718F071F49EF58E -:1037600023C10EF4E0950B2EBA2FA02D0B01B90149 -:1037700090010C01CA01A0011124FF27591B99F0E7 -:10378000593F50F4503E68F11A16F040A22F232FF3 -:10379000342F4427585FF3CF469537952795A79543 -:1037A000F0405395C9F77EF41F16BA0B620B730BEA -:1037B000840BBAF09150A1F0FF0FBB1F661F771F5B -:1037C000881FC2F70EC0BA0F621F731F841F48F410 -:1037D000879577956795B795F7959E3F08F0B3CF96 -:1037E0009395880F08F09927EE0F97958795089580 -:1037F00004D06894B111D9C00895BCD088F09F5707 -:1038000090F0B92F9927B751A0F0D1F0660F771F2C -:10381000881F991F1AF0BA95C9F712C0B13081F00C -:10382000C3D0B1E00895C0C0672F782F8827B85F54 -:1038300039F0B93FCCF3869577956795B395D9F76D -:103840003EF490958095709561957F4F8F4F9F4F77 -:103850000895E89409C097FB3EF490958095709583 -:1038600061957F4F8F4F9F4F9923A9F0F92F96E9CC -:10387000BB279395F695879577956795B795F11141 -:10388000F8CFFAF4BB0F11F460FF1BC06F5F7F4FDE -:103890008F4F9F4F16C0882311F096E911C07723F0 -:1038A00021F09EE8872F762F05C0662371F096E8F9 -:1038B000862F70E060E02AF09A95660F771F881FC8 -:1038C000DAF7880F9695879597F90895990F00086C -:1038D000550FAA0BE0E8FEEF16161706E807F907E2 -:1038E000C0F012161306E407F50798F0621B730B7D -:1038F000840B950B39F40A2661F0232B242B252BFE -:1039000021F408950A2609F4A140A6958FEF811DA0 -:10391000811D089597F99F6780E870E060E0089541 -:103920009FEF80EC089500240A94161617061806D7 -:103930000906089500240A941216130614060506B3 -:103940000895092E0394000C11F4882352F0BB0F44 -:1039500040F4BF2B11F460FF04C06F5F7F4F8F4FA7 -:103960009F4F089557FD9058440F551F59F05F3FE2 -:1039700071F04795880F97FB991F61F09F3F79F091 -:1039800087950895121613061406551FF2CF469513 -:10399000F1DF08C0161617061806991FF1CF869595 -:1039A0007105610508940895E894BB276627772779 -:1039B000CB0197F908958ADF08F48FEF08950BD0B3 -:1039C000C0CFB1DF28F0B6DF18F0952309F0A2CF01 -:1039D000A7CF1124EACFC6DFA0F3959FD1F3950FAF -:1039E00050E0551F629FF001729FBB27F00DB11D83 -:1039F000639FAA27F00DB11DAA1F649F6627B00D13 -:103A0000A11D661F829F2227B00DA11D621F739FFB -:103A1000B00DA11D621F839FA00D611D221F749F09 -:103A20003327A00D611D231F849F600D211D822F50 -:103A3000762F6A2F11249F5750408AF0E1F0882397 -:103A40004AF0EE0FFF1FBB1F661F771F881F9150A4 -:103A50005040A9F79E3F510570F05CCFA6CF5F3F65 -:103A6000ECF3983EDCF3869577956795B795F795D7 -:103A7000E7959F5FC1F7FE2B880F911D969587955F -:103A800097F90895991B79E004C0991F961708F0DB -:103A9000961B881F7A95C9F780950895AA1BBB1BB2 -:103AA00051E107C0AA1FBB1FA617B70710F0A61B3E -:103AB000B70B881F991F5A95A9F780959095BC015F -:103AC000CD01089597FB072E16F4009407D077FDDB -:103AD00009D00E944E1D07FC05D03EF490958195BB -:103AE0009F4F0895709561957F4F0895A1E21A2E1A -:103AF000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F92 -:103B0000A217B307E407F50720F0A21BB30BE40BE1 -:103B1000F50B661F771F881F991F1A9469F7609528 -:103B20007095809590959B01AC01BD01CF010895E2 -:103B3000EE0FFF1F0590F491E02D0994CF93DF93D2 -:103B40008230910510F482E090E0E091A904F091B8 -:103B5000AA0420E030E0A0E0B0E0309739F14081E5 -:103B6000518148175907B8F04817590771F48281F5 -:103B70009381109729F013969C938E9312972CC0E3 -:103B80009093AA048093A90427C02115310531F030 -:103B90004217530718F0A901DB0101C0EF019A0198 -:103BA000BD01DF010280F381E02DD7CF2115310562 -:103BB000F9F0281B390B2430310580F48A819B8170 -:103BC0006115710521F0FB019383828304C09093FA -:103BD000AA048093A904FE01329644C0FE01E20FBC -:103BE000F31F8193919322503109398328833AC07E -:103BF0002091A7043091A804232B41F420910201C5 -:103C0000309103013093A8042093A7042091000170 -:103C1000309101012115310541F42DB73EB7409196 -:103C2000040150910501241B350BE091A704F0918C -:103C3000A804E217F307A0F42E1B3F0B281739073F -:103C400078F0AC014E5F5F4F2417350748F04E0FF8 -:103C50005F1F5093A8044093A7048193919302C0DF -:103C6000E0E0F0E0CF01DF91CF910895CF93DF93B3 -:103C7000009709F487C0FC01329713821282C09129 -:103C8000A904D091AA04209781F420813181280FC2 -:103C9000391F8091A7049091A8048217930779F5A2 -:103CA000F093A804E093A7046DC0DE0120E030E0AB -:103CB000AE17BF0750F412964D915C9113979D017A -:103CC0004115510509F1DA01F3CFB383A283408195 -:103CD0005181840F951F8A179B0771F48D919C91D8 -:103CE0001197840F951F02969183808312968D9170 -:103CF0009C911397938382832115310529F4F093C6 -:103D0000AA04E093A9043EC0D9011396FC93EE9354 -:103D100012974D915D91A40FB51FEA17FB0779F437 -:103D200080819181840F951F0296D90111969C93F1 -:103D30008E938281938113969C938E931297E0E0E9 -:103D4000F0E08A819B81009719F0FE01EC01F9CF28 -:103D5000CE01029628813981820F931F2091A704FA -:103D60003091A8042817390769F4309729F4109284 -:103D7000AA041092A90402C013821282D093A8044C -:103D8000C093A704DF91CF910895A0E0B0E0EBECE1 -:103D9000FEE10C943B23EC01CB01209719F40E9427 -:103DA0009E1DB8C0FE01E60FF71F9E01225031098B -:103DB000E217F30708F4ACC0D9010D911C911197DB -:103DC00006171707B8F00530110508F49FC0A801C1 -:103DD000445051094617570708F498C0025011097A -:103DE000061B170B019311936D937C93CF010E94D7 -:103DF000361E8CC05B01A01AB10A4E01800E911EC6 -:103E0000A091A904B091AA04612C712C60E070E02B -:103E1000109709F449C0A815B905C9F5ED90FC90B3 -:103E20001197670142E0C40ED11CCA14DB0478F17B -:103E300047018A189B08640142E0C40ED11C129607 -:103E4000BC9012971396AC91B5E0CB16D10440F01C -:103E5000B282A38391828082D9018D939C9309C001 -:103E60000E5F1F4F0E0D1F1DF90111830083EB2DF7 -:103E7000FA2F6115710531F0DB011396FC93EE9377 -:103E8000129744C0F093AA04E093A9043FC06D9137 -:103E90007C9111976616770608F43B01BD011296D6 -:103EA0000D90BC91A02DB4CF6091A7047091A8048F -:103EB00068157905E9F468167906D0F44091000197 -:103EC000509101014115510541F44DB75EB7609124 -:103ED000040170910501461B570BE417F507C0F468 -:103EE000F093A804E093A704F901918380830EC0A6 -:103EF0000E949E1D7C01009759F0A801BE010E94FE -:103F0000D41FCE010E94361EC70104C0CE0102C0DC -:103F100080E090E0CDB7DEB7EEE00C945723FC01D3 -:103F200088279927E89421912032E9F3293010F06D -:103F30002E30C8F32B3241F02D3239F4689404C08E -:103F40000E944A20820F911D219120532A30C0F3F4 -:103F50001EF4909581959F4F08951F93FC0199271A -:103F60008827BC01E89411911032E9F3193010F060 -:103F70001E30C8F31B3251F01D3249F4689406C05C -:103F80000E943520610F711D811D911D11911053EB -:103F90001A30B0F33EF490958095709561957F4FFF -:103FA0008F4F9F4F1F910895FB01DC0102C00190CC -:103FB0000D9241505040D8F708956817790768F47A -:103FC000FB01DC01E40FF51FA40FB51F02C0029036 -:103FD0000E9241505040D8F708950C94D41FFB0125 -:103FE000DC0101900D920020E1F70895FB01DC0156 -:103FF0004150504048F001900D920020C9F701C097 -:104000001D9241505040E0F70895FB015191552316 -:10401000A9F0BF01DC014D9145174111E1F759F4B9 -:10402000CD010190002049F04D9140154111C9F397 -:10403000FB014111EFCF81E090E0019708954532F7 -:10404000510520F4423010F00C942A20FB0110821C -:10405000CB010895BB274A3031F4992322F4BDE205 -:10406000909581959F4F0C945E20592F482F372FA4 -:10407000262F660F771F881F991F660F771F881FCF -:10408000991F620F731F841F951F660F771F881F6C -:10409000991F08957AE0979F902D879F802D910D0D -:1040A000112408954532510520F4423010F00C944B -:1040B0005D20FB011082CB010895BB27FB01552732 -:1040C000AA27880F991FAA1FA41710F0A41B839575 -:1040D0005051B9F7A05DAA3308F0A95DA1930097EC -:1040E00079F7B111B1931192CB010C949722AEE004 -:1040F000B0E0EDE7F0E20C9445230D891E8986E0DF -:104100008C831A8309838FEF9FE79E838D83AE0193 -:10411000475E5F4F6F89788DCE0101960E9499208E -:10412000EF81F885E00FF11F10822E96E4E00C94E9 -:104130006123ACE0B0E0EFE9F0E20C9437237C01BE -:104140006B018A01FC0117821682838181FFBDC148 -:10415000CE0101964C01F7019381F60193FD859103 -:1041600093FF81916F01882309F4ABC1853239F443 -:1041700093FD859193FF81916F01853229F4B701F9 -:1041800090E00E94A722E7CF512C312C20E0203272 -:10419000A0F48B3269F030F4803259F0833269F444 -:1041A00020612CC08D3239F0803339F4216026C073 -:1041B0002260246023C0286021C027FD27C030ED85 -:1041C000380F3A3078F426FF06C0FAE05F9E300DD3 -:1041D0001124532E13C08AE0389E300D1124332E43 -:1041E00020620CC08E3221F426FD6BC1206406C013 -:1041F0008C3611F4206802C0883641F4F60193FD34 -:10420000859193FF81916F018111C1CF982F9F7D7F -:104210009554933028F40C5F1F4FFFE3F9830DC0D2 -:10422000833631F0833771F0833509F05BC022C0EB -:10423000F801808189830E5F1F4F44244394512CE1 -:10424000540115C03801F2E06F0E711CF801A08016 -:10425000B18026FF03C0652D70E002C06FEF7FEFD5 -:10426000C5012C870E948C222C0183012C852F777D -:10427000222E17C03801F2E06F0E711CF801A080E9 -:10428000B18026FF03C0652D70E002C06FEF7FEFA5 -:10429000C5012C870E9481222C012C852068222EAA -:1042A000830123FC1BC0832D90E048165906B0F40F -:1042B000B70180E290E00E94A7223A94F4CFF50182 -:1042C00027FC859127FE81915F01B70190E00E9454 -:1042D000A72231103A94F1E04F1A510841145104C9 -:1042E00071F7E5C0843611F0893639F5F80127FFFA -:1042F00007C060817181828193810C5F1F4F08C06C -:1043000060817181882777FD8095982F0E5F1F4F00 -:104310002F76B22E97FF09C0909580957095619584 -:104320007F4F8F4F9F4F2068B22E2AE030E0A401CC -:104330000E94D922A82EA81844C0853729F42F7EC0 -:10434000B22E2AE030E025C0F22FF97FBF2E8F3643 -:10435000C1F018F4883579F0B4C0803719F0883787 -:1043600021F0AFC02F2F2061B22EB4FE0DC08B2DD7 -:104370008460B82E09C024FF0AC09F2F9660B92E12 -:1043800006C028E030E005C020E130E002C020E1B6 -:1043900032E0F801B7FE07C06081718182819381AC -:1043A0000C5F1F4F06C06081718180E090E00E5F5E -:1043B0001F4FA4010E94D922A82EA818FB2DFF7719 -:1043C000BF2EB6FE0BC02B2D2E7FA51450F4B4FECD -:1043D0000AC0B2FC08C02B2D2E7E05C07A2C2B2DD6 -:1043E00003C07A2C01C0752C24FF0DC0FE01EA0D1C -:1043F000F11D8081803311F4297E09C022FF06C09F -:104400007394739404C0822F867809F0739423FD0B -:1044100013C020FF06C05A2C731418F4530C5718FD -:10442000732C731468F4B70180E290E02C870E942B -:10443000A72273942C85F5CF731410F4371801C09C -:10444000312C24FF12C0B70180E390E02C870E943A -:10445000A7222C8522FF17C021FF03C088E590E02A -:1044600002C088E790E0B7010CC0822F867859F02F -:1044700021FD02C080E201C08BE227FD8DE2B70181 -:1044800090E00E94A722A51438F4B70180E390E0E1 -:104490000E94A7225A94F7CFAA94F401EA0DF11DC5 -:1044A0008081B70190E00E94A722A110F5CF3320B0 -:1044B00009F451CEB70180E290E00E94A7223A941D -:1044C000F6CFF7018681978102C08FEF9FEF2C9680 -:1044D000E2E10C945323F999FECF92BD81BDF89A85 -:1044E000992780B50895262FF999FECF1FBA92BD5E -:1044F00081BD20BD0FB6F894FA9AF99A0FBE0196C5 -:104500000895FC010590615070400110D8F7809526 -:1045100090958E0F9F1F0895FC016150704001908F -:104520000110D8F7809590958E0F9F1F0895DC019C -:10453000FC01672F71917723E1F7329704C07C91DA -:104540006D9370836291AE17BF07C8F308950F9300 -:104550001F93CF93DF93182F092FEB018B8181FDE0 -:1045600003C08FEF9FEF20C082FF10C04E815F819C -:104570002C813D81421753077CF4E881F9819F012A -:104580002F5F3F4F39832883108306C0E885F98564 -:10459000812F0995892B29F72E813F812F5F3F4F6E -:1045A0003F832E83812F902FDF91CF911F910F9109 -:1045B0000895FA01AA27283051F1203181F1E894B9 -:1045C0006F936E7F6E5F7F4F8F4F9F4FAF4FB1E006 -:1045D0003ED0B4E03CD0670F781F891F9A1FA11D01 -:1045E000680F791F8A1F911DA11D6A0F711D811D02 -:1045F000911DA11D20D009F468943F912AE0269FC7 -:1046000011243019305D3193DEF6CF010895462F25 -:104610004770405D4193B3E00FD0C9F7F6CF462F06 -:104620004F70405D4A3318F0495D31FD405241936F -:1046300002D0A9F7EACFB4E0A6959795879577952C -:104640006795BA95C9F700976105710508959B01B3 -:10465000AC010A2E06945795479537952795BA953C -:10466000C9F7620F731F841F951FA01D08952F9215 -:104670003F924F925F926F927F928F929F92AF92F2 -:10468000BF92CF92DF92EF92FF920F931F93CF933F -:10469000DF93CDB7DEB7CA1BDB0B0FB6F894DEBFD6 -:1046A0000FBECDBF09942A88398848885F846E84FC -:1046B0007D848C849B84AA84B984C884DF80EE8046 -:1046C000FD800C811B81AA81B981CE0FD11D0FB64F -:1046D000F894DEBF0FBECDBFED01089510E0CCEE23 -:1046E000D0E004C0FE010E949A1D2296CE3ED10762 -:0646F000C9F7F894FFCFAA -:1046F6000000AB0480002C01066C136C133B0049D0 -:1047060054506172616D733A20004F4B005620334E -:104716002E322E302D623132205349474E414C64A1 -:1047260075696E6F202D20636F6D70696C656420EE -:1047360061742046656220313320323031362032B2 -:10474600313A33343A30390053796E633A200020D7 -:104756002D3E2053796E63466163743A20002C2007 -:10476600436C6F636B3A20002C20546F6C3A200028 -:104776002C20506174744C656E3A20002C205075C4 -:104786006C73653A20002C20002C206D53746172E6 -:10479600743A20005369676E616C3A20002E20003F -:1047A600205B005D005061747465726E3A200020D3 -:1047B60050002A5B002C0025303258004C4C3D003E -:1047C6004C483D00534C3D0053483D00433D004D91 -:1047D6005300443D0043503D0053503D004F004DB3 -:1047E60055004D430000000000EA1566176C15855C -:1047F600157715C8150D0A006E616E00696E6600A4 -:064806006F7666002E0033 +:1000D00003030301020408102040800102040810F9 +:1000E0002001020408102000CB18BF1811241FBEE5 +:1000F000CFEFD8E0DEBFCDBF11E0A0E0B1E0E0EC93 +:10010000F3E402C005900D92AC39B107D9F724E0B1 +:10011000ACE9B1E001C01D92A435B207E1F710E0EF +:10012000C5E7D0E004C02197FE010E94B419C4378E +:10013000D107C9F70E949D110C94D3210C940000A3 +:100140000E949E1B2F923F924F925F926F927F92DE +:100150008F929F92AF92BF92CF92DF92EF92FF92D7 +:100160000F931F93CF93DF93CDB7DEB7AF970FB643 +:10017000F894DEBF0FBECDBF8091E703811106C0AA +:100180008091B103883210F40C94E7091092B40303 +:1001900060E080E00E94E70F8090D803882D90E017 +:1001A0009C01215031093E8F2D8F8091C403909185 +:1001B000C503A091C603B091C7038F8B988FA98FF9 +:1001C000BA8F9091B1039B8FF12C8F2D90E0ED8D24 +:1001D000FE8D8E179F070CF0AFC0FC01E955FD4F57 +:1001E0009F012C5F3F4F4481442309F4A3C0EE24B8 +:1001F000E394EF0C880F991FDC01A853BC4FBA8B16 +:10020000A98B3E8B2D8BE81408F094C02E2C312C3A +:10021000F101E955FD4F9480992009F489C0E989DD +:10022000FA89A080B180F101EE0FFF1FE853FC4F67 +:1002300000811181C8018A259B25990F880B982F71 +:10024000892B09F075C0B80117FF04C0662777270E +:10025000601B710B072E000C880B990B0E945A2013 +:100260002F89388D498D5A8D0E94B9202B013C0170 +:100270006801CA18DB08D7FE03C0D194C194D10825 +:1002800020E030E040E05FE3C301B2010E94B9200A +:100290009B01AC01C301B2010E94BB190E94991AD3 +:1002A0006C157D050CF444C0E3EBF2E08E2F23EBDC +:1002B00032E0821B3B8D831730F480818E1101C0A8 +:1002C000F0823196F3CFAD89BE89DC90492D50E0A4 +:1002D000ED2DF0E09F01D5010E94AD19049F900122 +:1002E000059F300D149F300D11248901330F220B0F +:1002F000330B600F711F821F931FE40FF51F9F01C7 +:10030000FF0F440B550B0E948E19E989FA8931833E +:1003100020839D0CAD89BE899C92F101E955FD4F6A +:100320001482F101EE0FFF1FE853FC4F118210827F +:10033000E39469CFF39449CF60E080E00E94E70F37 +:100340008FEF8093A7026090D8037090B10358ECB0 +:10035000C52E53E0D52E00E010E0EE24EA94FE2CEA +:10036000872C912CA12CB12C061508F059C0FFEF59 +:10037000EF16FF0611F5D6018D919C9197FD1DC0DA +:10038000F801E955FD4F648170E080E090E00E9443 +:100390005A201B012C01C501B4010E945A202BE7F1 +:1003A00034E14EE25EE30E94B9209B01AC01C20140 +:1003B000B1010E94CF1A181664F1F6018081918173 +:1003C00097FD28C0F701EE0FFF1FE853FC4F208177 +:1003D000318182179307F4F4F801E955FD4F6481E8 +:1003E00070E080E090E00E945A201B012C01C501C2 +:1003F000B4010E945A202BE734E14EE25EE30E94F2 +:10040000B9209B01AC01C201B1010E94CF1A18169C +:100410000CF478010F5F1F4FF2E0CF0ED11CA4CF78 +:100420002FEFE216F20641F0E092A70281E090E0A1 +:100430009093BB038093BA038091BA039091BB035E +:10044000019709F074C04FEF460DE091A7020E2E00 +:10045000000CFF0B072D10E0480131E0831A9108D2 +:10046000CF01880F991FDC01A853BC4F7D0137E0F5 +:10047000632E085211094F3F09F457C0C42E042EB1 +:10048000000CDD08D601AA0FBB1FA853BC4F2D914D +:100490003C9137FF48C03195219531092836B2E4A7 +:1004A0003B070CF040C0D701AD90BC90C901B5012D +:1004B0000E94441968327105B0F56A9CC0016B9CBA +:1004C000900D11248217930770F5D601A955BD4FE1 +:1004D00014968C918250863030F550E0852F90E054 +:1004E0008815990584F4DC01A955BD4F1D962C9102 +:1004F0001D9730E02C153D05A1F41C962C9130E0A1 +:100500002E173F0771F4801791076CF44093DA03BC +:1005100082E090E09093BB038093BA035093B203C0 +:1005200006C05F5FDBCF4150A6CF4093DA038091D6 +:10053000AA02882309F427C18091BA039091BB03D2 +:10054000029709F020C1B7E2B71508F01CC18091ED +:10055000B20392E0980F9093B3036091DA03062EF2 +:10056000000C770BA091A7020A2E000CBB0B472DA5 +:1005700050E041505109292F30E024173507A4F4E9 +:10058000F901E955FD4F258530E02617370751F46D +:10059000248530E02A173B0729F491509093B30348 +:1005A00011E005C09E5FE7CF9093B30310E09091F8 +:1005B000B303791610F47092B3036091B3030E94F1 +:1005C000E70F112351F08091B30390E02091B20323 +:1005D000821B9109889734F4CFC08091B1038E3F7C +:1005E00008F0B8C066E671E08BED93E00E941C1144 +:1005F00066E671E081EE93E00E941C1162E08BEDF3 +:1006000093E00E94CF1067E671E08BED93E00E94CB +:10061000E2106BE38BED93E00E94CF1010E080912D +:10062000D803181778F5212F30E0C901880F991FDA +:10063000FC01E853FC4F7F0180819181892B01F1FE +:10064000F901E955FD4F84818823D1F060E58BEDF8 +:1006500093E00E94CF10812F0E94C10F65E971E0E5 +:100660008BED93E00E94E210D7016D917C918BEDB0 +:1006700093E00E949F106BE38BED93E00E94CF10FC +:100680001F5FCDCF6AE671E08BED93E00E94E21030 +:100690006BE381EE93E00E94CF106DE671E081EE96 +:1006A00093E00E94E2106091A702062E000C770BE7 +:1006B00081EE93E00E949F106BE381EE93E00E9435 +:1006C000CF1061E771E081EE93E00E94E21060914B +:1006D000DA03062E000C770B81EE93E00E949F1048 +:1006E0006BE381EE93E00E94CF108091B6038823E4 +:1006F00059F065E771E081EE93E00E94E2106BE350 +:1007000081EE93E00E94CF1063E081EE93E00E94BF +:10071000CF106AE081EE93E00E94CF100091B30306 +:100720001091B2038BED93E00E94B60E011768F0B2 +:10073000E12FF0E0E955FD4F648570E080E090E046 +:100740004AE00E94E70E1F5FF1CF81EE93E00E9426 +:10075000B60E16C06091B203623070F08091B303A0 +:1007600090E08D3F910544F087EA92E00E94FC0DF5 +:1007700081E08093B50307C087EA92E00E94BD0D37 +:1007800081E08093B4038091B403811120C68091ED +:10079000A802811105C08091A902882309F417C617 +:1007A00066E671E08BED93E00E941C1166E671E055 +:1007B00081EE93E00E941C1162E08BED93E00E94B9 +:1007C000CF10B091A902BF8BBB2309F453C5809110 +:1007D000F301811148C082E38093E70181E08093B7 +:1007E000E4011092E5018FEA91E00E94AD0D809145 +:1007F000E40127E030E0281B31099091E50187E012 +:1008000061E070E0482F50E0241735074CF4AB014D +:10081000082E01C0440F0A94EAF7942B8150F2CFBE +:100820009093E5018FEF8093EA018093EB01809331 +:10083000EC018093ED011092F1011092F20187EA30 +:1008400092E09093E9018093E8011092EF011092F9 +:10085000EE0184E18093F0018FEA91E00E94AD0DFA +:1008600081E08093F3018091E70381111BC08FEF3A +:100870008093EA018093EB018093EC018093ED017A +:100880001092F1011092F2011092EF011092EE011C +:1008900084E18093F0018FEA91E00E94AD0D81E147 +:1008A0008093F0018091E703882381F08091E80133 +:1008B0009091E901FC01E25FFE4F108233971082B4 +:1008C000E12C912CF12CCC24C394D1C12090E801CF +:1008D0003090E901F101EF5CFE4F1081143008F413 +:1008E000BEC4B797608170E080E090E00E945A201B +:1008F0002AE037ED43E25DE30E94B9206B017C0101 +:1009000020E030E0A9010E94CF1A20E030E040E072 +:100910005FE387FD05C0C701B6010E94BB1904C093 +:10092000C701B6010E94BA190E94991A7101E4E048 +:10093000EE0EF11CD101AF5DBE4FC12C40E0F701BE +:1009400081917F01861758F15C2D852F90E055230A +:10095000F1F0FE01E80FF91F70819101270F311DA1 +:10096000270F311DF901EF5DFE4F2D913C9111973D +:100970000190F081E02D2E173F074CF4E1E0F0E00C +:10098000EC0FFD1FE80FF91F70835150DECFE1E03F +:10099000F0E0EC0FFD1FE80FF91F4083C3944F5F99 +:1009A00012964113CCCF1091EA010091EC01E09036 +:1009B000EB01F090ED019E012F5F3F4F388B2F87A9 +:1009C0003E8F2D8F5F855DA7C101865F9E4F9FA7DC +:1009D0008EA78D8D2F85821B8C1508F091C0AD8D53 +:1009E000BE8D2D91BE8FAD8FC101820F911D820FE3 +:1009F000911DFC01EF5DFE4F208131813C8F2B8FDB +:100A00001216130634F7220F331F38A72FA3AE0197 +:100A10004F5F5F4F5CA34BA31FEF0FEFEE24EA94F1 +:100A2000FF24FA941A8A198A19A21AA28FEF9FEF4B +:100A30009E8B8D8B2B8D3C8D032E000C440B550B08 +:100A400029A73AA74BA75CA78BA1FDA58F1B8C15E7 +:100A500008F0BFCFABA1BCA1DD90BCA3ABA3ED2D33 +:100A6000F0E0F8A3EF8FEE0FFF1FE20DF31DEF5D37 +:100A7000FE4F8080918069A57AA58BA59CA50E94D8 +:100A80005A202B013C019EA28DA297FE06C0222770 +:100A90003327281939093EA32DA3AB8CBC8C4DA15B +:100AA0005EA1A41AB50AB7FE03C0B194A194B1081F +:100AB00020E030E040E05FE3C301B2010E94B920D2 +:100AC0000E94991A6A157B050CF046C3AFA0B8A422 +:100AD0008DA19EA1A81AB90AB7FE03C0B194A19432 +:100AE000B1082DEC3CEC4CE45FE3C301B2010E9481 +:100AF000B9200E94991A6A157B050CF071C4A4CF25 +:100B0000F092ED01E092EB010093EC011093EA0109 +:100B1000A6C3D394D71408F0E5C0F801ED0DF11D7C +:100B2000848590E08417950709F0F3C48F8862E00C +:100B300070E0260E371E882061F3DF10FDC4DD2033 +:100B400009F4FAC443859801240F311D240F311D87 +:100B5000F901EF5DFE4F20813181B90137FF04C0FB +:100B600066277727621B730B61304DE774070CF023 +:100B7000E3C4880F991F800F911FFC01EF5DFE4FAA +:100B80008081918182279327990F880B982F892B39 +:100B900009F4D2C4072E000C880B990B0E945A202E +:100BA0002B013C016091EE017091EF01072E000CCA +:100BB000880B990B0E945A20698B7A8B8B8B9C8BAC +:100BC0009B01AC01C301B2010E94271A4B015C01D9 +:100BD00020E030E0A9010E94CF1A20E030E040E0A0 +:100BE0005FE387FD9AC4C501B4010E94BB190E944E +:100BF000991A623071050CF49FC4072E000C880B03 +:100C0000990B0E945A2029893A894B895C890E9454 +:100C1000B9209B01AC01C301B2010E94271A9B01BC +:100C2000AC0160E070E080E89FE30E94BA194B01DC +:100C30005C0120E030E0A9010E94CF1A18160CF0E8 +:100C400071C429E23CE54FE85DE3C501B4010E94AF +:100C5000532018160CF470C4F801E55FFE4F808134 +:100C600081508083FF24F394FD0C99249394009188 +:100C7000E8011091E901F801E65FFE4F9081F91655 +:100C800008F081C08091F10181112CC0F801EF0DB5 +:100C9000F11D848590E04091EA01042E000C550B73 +:100CA000A091EC012091EB01A090ED018417950734 +:100CB00009F418C4622F022E000C770B86179707D1 +:100CC00009F410C46A2F0A2E000C770B86179707B9 +:100CD00009F408C46A2D0A2C000C770B86179707B5 +:100CE00009F400C48091F201882309F44AC080917C +:100CF000F101882309F445C0AF2CB12CF801EA0DAD +:100D0000FB1D848590E02091EC01022E000C330B3A +:100D10008217930709F46FC32091ED01022E000C96 +:100D2000330B8217930709F466C32091EA01022E60 +:100D3000000C330B8217930709F4B7C32091EB0122 +:100D4000022E000C330B8217930709F4AEC3809177 +:100D5000F001082E000C990B2091E2013091E30183 +:100D60002817390708F04DC01092F1011092F201D6 +:100D70008FEA91E00E94AD0D912C8091F1018111DB +:100D80003DC3F39474CFD801A45FBE4F81E0982691 +:100D90008F2D89198C932EEFF21249C09E3F09F0D6 +:100DA00046C011976C916230F0F08091F00187FDA0 +:100DB0008F5F8595082E000C990B2091E2013091F0 +:100DC000E3018217930778F4C8010E94FC0D80911B +:100DD000E8019091E901FC01E25FFE4F21E02083F0 +:100DE000F29620833CC28C91811121C0D801A05C75 +:100DF000BE4F81E08C931082F801E25FFE4F80834A +:100E00002EC2F801E45FFE4FEE24E3949E248F2D62 +:100E1000891980836F2DC8010E94FC0DE091E801C3 +:100E2000F091E901E25FFE4FE0821092F1018091C2 +:100E3000F001082E000C990B2091E2013091E301A2 +:100E40002817390708F40BC266E671E0CE0109964F +:100E50000E9442116AE671E0CE0109960E941C11BF +:100E600080E390E3A0E089839A83AB836091E20101 +:100E70007091E30176956795769567956E5F7F4FE4 +:100E8000CE0109960E944A10D12C8E010F5F1F4F90 +:100E900067E7A62E61E0B62E4091E10150E02D2DCE +:100EA00030E08091E701ED2C0D2C000CFF0890E064 +:100EB00024173507F4F4E816F9062CF4F701E15588 +:100EC000FE4F808101C08FEF1F928F93BF92AF9230 +:100ED0001F930F930E94EE1BB801CE0109960E944A +:100EE000E210D3940F900F900F900F900F900F90EF +:100EF000D3CFE816F9062CF4F701E155FE4F8081B7 +:100F000001C08FEF82958F701F928F938CE791E0D5 +:100F10009F938F931F930F930E94EE1BB801CE01F6 +:100F200009960E94E2108091E2019091E30187709E +:100F3000992701970F900F900F900F900F900F909F +:100F4000049710F18091E70190E0E816F9062CF47F +:100F5000F701E155FE4F808101C08FEF8F701F9226 +:100F60008F938CE791E09F938F931F930F930E9431 +:100F7000EE1BB801CE0109960E94E2100F900F906F +:100F80000F900F900F900F9061E871E08BED93E060 +:100F90000E94E2106BE38BED93E00E94CF1060E2C1 +:100FA00070E08BED93E00E944A108BED93E0009788 +:100FB00009F472C064E871E00E94E2108091E801D7 +:100FC0009091E901E091EA01EE0FFF0BE80FF91FA4 +:100FD000EF5DFE4F608171818BED93E00E949F1069 +:100FE0006BE38BED93E00E94CF1068E871E08BED2E +:100FF00093E00E94E2108091E8019091E901E09174 +:10100000EB01EE0FFF0BE80FF91FEF5DFE4F608164 +:1010100071818BED93E00E949F106BE38BED93E069 +:101020000E94CF106CE871E08BED93E00E94E2101B +:101030008091E8019091E901E091EC01EE0FFF0B46 +:10104000E80FF91FEF5DFE4F608171818BED93E03A +:101050000E949F106BE38BED93E00E94CF1060E93C +:1010600071E08BED93E00E94E2108091E801909195 +:10107000E901E091ED01EE0FFF0BE80FF91FEF5DC5 +:10108000FE4F608171818BED93E00E949F106BE3B6 +:101090008BED93E00E94CF106BE381EE93E00E9412 +:1010A000CF1067E070E081EE93E00E944A1081EE7D +:1010B00093E0009789F064E971E00E94E21060918A +:1010C000EE017091EF0181EE93E00E949F106BE3BF +:1010D00081EE93E00E94CF1065E871E081EE93E02D +:1010E0000E94E2104AE0B8018091E2019091E30190 +:1010F0000E942920F80101900020E9F73197AF0103 +:10110000401B510BB80181EE93E00E9471106BE31C +:1011100081EE93E00E94CF1063E081EE93E00E94A5 +:10112000CF106AE081EE93E00E94CF108BED93E048 +:101130000E94B60ECE0109960E94B60E81EE93E093 +:101140000E94B60E1092E70381E08093B403CE01B3 +:1011500009960E943D118EC0181419040CF0AAC102 +:10116000FD2CEF8DF8A1E20DF31D8481A989BA89C8 +:10117000A80FB11DBA8BA98BBAA1BF5FBAA3ED8925 +:10118000FE89E80DF91DFE8BED8B1F3F09F45CCC49 +:101190000F3F09F459CC5FEFE51609F455CCF5166D +:1011A00009F452CC89889A8897FE03C0919481945F +:1011B0009108092C000CAA08BB08AEA5BFA56C912C +:1011C00070E080E090E00E945A202AE037ED43E290 +:1011D0005DE30E94B9202B013C0120E030E0A90131 +:1011E0000E94CF1A20E030E040E05FE387FDFEC0C0 +:1011F000C301B2010E94BB190E94991A68157905B2 +:101200008A059B050CF4E5CBB9A1EAA1BE13E1CB9D +:101210001E1509F4DECB0F1509F4DBCB101709F40A +:10122000D8CBEF1409F4D5CB1F1509F4D2CBE016B7 +:1012300009F4CFCBF092ED01E092EB010093EC01C9 +:101240001093EA018D899E8966E070E00E9458192A +:101250007093EF016093EE013F89311127CB8091AC +:10126000E703882339F08091B503882319F081E0E2 +:101270008093B4038091A802882309F4A8C08091C8 +:10128000BA039091BB03019709F0A1C08091B40308 +:1012900081119DC08091B103883208F498C067E93C +:1012A00071E08BED93E00E94E2106BE38BED93E035 +:1012B0000E94CF1010E08091D803181788F5212FD5 +:1012C00030E0C901880F991FAC0148535C4F7A0187 +:1012D000DA018D919C91892B09F1F901E955FD4FB6 +:1012E00084818823D9F06AE971E08BED93E00E9454 +:1012F000E210812F0E94C10F65E971E08BED93E050 +:101300000E94E210F701608171818BED93E00E94F1 +:101310009F106BE38BED93E00E94CF101F5FCBCF4C +:101320006AE671E08BED93E00E94E2106BE381EEE0 +:1013300093E00E94CF106DE671E081EE93E00E9491 +:10134000E2106091A702062E000C770B81EE93E06D +:101350000E949F106BE381EE93E00E94CF1080917A +:10136000B603882359F065E771E081EE93E00E94AF +:10137000E2106BE381EE93E00E94CF1063E081EE18 +:1013800093E00E94CF106AE081EE93E00E94CF10BC +:101390000091B10301508BED93E00E94B60E10E076 +:1013A000E12FF0E0E955FD4F648570E080E090E0CA +:1013B0004AE00E94E70E1F5F011790F781EE93E06D +:1013C0000E94B60E1092B50381E08093B403809121 +:1013D000B5038111C6C087EA92E00E94BD0DC1C06D +:1013E000181419040CF07CC0ED2CBBCEC301B20163 +:1013F0000E94BA1901CFE92C9C24BFCCEE2009F43D +:10140000C0CC8091E8019091E901FC01EA0DFB1D3F +:101410002485820F911D820F911DFC01EF5DFE4F0F +:1014200040815181E091E1018091E701E817D8F511 +:101430008091E6012091E2013091E301873051F47F +:101440002115310539F0EF5FE093E101F0E0E1555E +:10145000FE4F1082E091E101F0E0A82FB0E0E155ED +:10146000FE4F61E070E01416150614F060E070E0C5 +:10147000082E01C0660F0A94EAF79081692B6083F9 +:101480002F5F3F4F3093E3012093E2019091E401FD +:10149000A91BB109B7FD04C0891B8093E60103C0F5 +:1014A000E7E0E093E601E12C6CCCEE24E394992490 +:1014B000939463CC0D2DEF8DF8A1E20DF31D848183 +:1014C00029893A89281B31093A8B298B39A13F5F39 +:1014D00039A34D895E89481959095E8B4D8B55CECC +:1014E0001D2DE9CFF801E55FFE4FF082C092F101BA +:1014F000C092F20131977080022E000C330B0A2E3D +:10150000000CBB0B0A2C000CBB08DF2C212C312C4F +:1015100001CB82179307D1F409CBC501B4010E9416 +:10152000BA1965CB29E23CE54FE85DEBC501B40192 +:101530000E94CF1A87FF90CB51E025223324C101AE +:10154000A1E08A27B82FB1709B2ECCCB8A179B07BE +:1015500021F08A159B0509F0C5CB812C61E070E074 +:10156000E8CAAF960FB6F894DEBF0FBECDBFDF91CD +:10157000CF911F910F91FF90EF90DF90CF90BF9090 +:10158000AF909F908F907F906F905F904F903F9023 +:101590002F900895FC01918D828D981761F0828DB6 +:1015A000DF01A80FB11D5D968C91928D9F5F9F7397 +:1015B000928F90E008958FEF9FEF0895FC01918D39 +:1015C000828D981731F0828DE80FF11D858D90E0A6 +:1015D00008958FEF9FEF0895FC01918D228D892F43 +:1015E00090E0805C9F4F821B91098F73992708952B +:1015F00080E092E00E94EC0A21E0892B09F420E0CF +:10160000822F0895FC01848DDF01A80FB11DA35A1C +:10161000BF4F2C91848D90E001968F739927848F12 +:10162000A689B7892C93A089B1898C9180648C9309 +:10163000938D848D981306C00288F389E02D8081F4 +:101640008F7D80830895EF92FF920F931F93CF9326 +:10165000DF93EC0181E0888F9B8D8C8D981305C002 +:10166000E889F989808185FD24C0F62E0B8D10E074 +:101670000F5F1F4F0F731127E02E8C8DE8120CC0E7 +:101680000FB607FCFACFE889F989808185FFF5CF8D +:10169000CE010E94020BF1CF8B8DFE01E80FF11DF0 +:1016A000E35AFF4FF0820B8FEA89FB8980818062C9 +:1016B00007C0EE89FF896083E889F98980818064A9 +:1016C000808381E090E0DF91CF911F910F91FF9097 +:1016D000EF900895CF93DF93EC01888D8823C9F0B4 +:1016E000EA89FB89808185FD05C0A889B9898C912B +:1016F00086FD0FC00FB607FCF5CF808185FFF2CFC6 +:10170000A889B9898C9185FFEDCFCE010E94020B8B +:10171000E7CFDF91CF910895089508952091A20118 +:10172000E6E9F0E09491E0EEF0E08491ECECF0E09A +:10173000E491EE2309F43BC0992339F1933091F001 +:1017400038F49130A9F0923001F594B59F7D12C024 +:10175000973091F09830A1F09430B9F490918000D6 +:101760009F7D03C0909180009F77909380000DC073 +:1017700094B59F7794BD09C09091B0009F7703C046 +:101780009091B0009F7D9093B000F0E0EE0FFF1FAE +:10179000E555FF4FA591B4919FB7F894EC912111B5 +:1017A00003C080958E2301C08E2B8C939FBF109217 +:1017B000A2010895CF93C1E080E092E00E94EC0A7C +:1017C000892BB9F080E092E00E94CA0A8A3041F089 +:1017D0001CF4882329F007C08D3011F0833219F4EE +:1017E000C093A301E9CF682F81EA92E00E94CF1055 +:1017F000E3CFCF9108950E94F80A81110C94DA0B7F +:1018000008951F920F920FB60F9211242F933F93BA +:101810004F935F936F937F938F939F93AF93BF93F8 +:10182000EF93FF9380E092E00E94020BFF91EF9113 +:10183000BF91AF919F918F917F916F915F914F91E8 +:101840003F912F910F900FBE0F901F9018951F92F0 +:101850000F920FB60F9211242F938F939F93EF93B4 +:10186000FF93E0911002F09111028081E091160245 +:10187000F091170282FD12C09081809119028F5F52 +:101880008F7320911A02821751F0E0911902F0E053 +:10189000E050FE4F958F8093190201C08081FF9127 +:1018A000EF919F918F912F910F900FBE0F901F90EE +:1018B0001895CF93DF9390E0FC01ED52FF4F2491F8 +:1018C000FC01E154FF4F8491882361F190E0880F7F +:1018D000991FFC01EB54FF4FC591D491FC01E555D4 +:1018E000FF4FA591B491611109C09FB7F894888109 +:1018F000209582238883EC912E230BC0623061F403 +:101900009FB7F8943881822F809583238883EC9148 +:101910002E2B2C939FBF06C08FB7F894E8812E2BF7 +:1019200028838FBFDF91CF9108953FB7F8948091BE +:10193000FC019091FD01A091FE01B091FF0126B53F +:10194000A89B05C02F3F19F00196A11DB11D3FBFF7 +:10195000BA2FA92F982F8827820F911DA11DB11D85 +:10196000BC01CD0142E0660F771F881F991F4A9581 +:10197000D1F70895CF92DF92EF92FF920F931F93CA +:101980000E94950C00919D0210919E0220919F0251 +:101990003091A0026B017C01C01AD10AE20AF30A5D +:1019A0009701860160939D0270939E0280939F022F +:1019B0009093A0020A3511052105310578F181E0E7 +:1019C000C8168DE7D806E104F10410F4960102C0B0 +:1019D00021E03DE74A9B03C0319521953109809173 +:1019E000E9038233D8F48091E9038F5F8093E903A0 +:1019F0008091EA036091E8030E9438199093EA030A +:101A0000E091EA03F0E0EE0FFF1FE451FC4F318359 +:101A100020838091EA038F5F8093EA031F910F91E7 +:101A2000FF90EF90DF90CF9008951F920F920FB626 +:101A30000F9211242F933F938F939F93AF93BF9354 +:101A400080919E0190919F01A091A001B091A10170 +:101A50003091FB0123E0230F2D3720F40196A11DC7 +:101A6000B11D05C026E8230F0296A11DB11D2093CC +:101A7000FB0180939E0190939F01A093A001B093DE +:101A8000A1018091FC019091FD01A091FE01B09116 +:101A9000FF010196A11DB11D8093FC019093FD01F2 +:101AA000A093FE01B093FF01BF91AF919F918F91E1 +:101AB0003F912F910F900FBE0F901F9018951F927E +:101AC0000F920FB60F9211242F933F934F935F9372 +:101AD0006F937F938F939F93AF93BF93EF93FF93F6 +:101AE000E0910501F09106010995FF91EF91BF91F9 +:101AF000AF919F918F917F916F915F914F913F91A6 +:101B00002F910F900FBE0F901F9018951F920F925C +:101B10000FB60F9211242F933F934F935F936F93C0 +:101B20007F938F939F93AF93BF93EF93FF93E09136 +:101B30000301F09104010995FF91EF91BF91AF91DD +:101B40009F918F917F916F915F914F913F912F91D5 +:101B50000F900FBE0F901F901895FC0180AD2E2F97 +:101B6000DF019A2F921B981710F41D92FACF12AA38 +:101B700014AA13AA87E087AB0895CF93DF93FC01E3 +:101B8000E65FFE4F1082DC01AF5CBE4F1C92B89640 +:101B90001082B0971082319611821082B0962FEF8A +:101BA0002083FC012083EF5DFE4FEC01249611920F +:101BB00011921992EA17FB07D1F7FC01E35FFE4F80 +:101BC0001082339626E930E0318320833D964DEC38 +:101BD0005CEC6CE47EE34083518362837383729791 +:101BE00010823396108231961082F1961082F4970B +:101BF0001082DF91CF910895FC01E65FFE4F408196 +:101C0000A42FB0E0262F30E02A173B075CF4461BD8 +:101C1000408350E0B901645F7F4F680F791F0C96D5 +:101C20000C94AC1B08951F920F920FB60F921124C3 +:101C30002F933F934F935F936F937F938F939F93D4 +:101C4000AF93BF93EF93FF93E0919C01F0919D01BF +:101C50000995FF91EF91BF91AF919F918F917F91E6 +:101C60006F915F914F913F912F910F900FBE0F9009 +:101C70001F901895CF93DF9387EA90E00E94640F3E +:101C8000C7EAD2E08B8190E00E94850F82EA90E063 +:101C90000E94640F898190E00E94850F8DE990E099 +:101CA0000E94640F8A8190E0DF91CF910C94330FF2 +:101CB0002B9A2091000130910101482F429FC001D1 +:101CC000439F900D11248230910538F0880F991FA1 +:101CD000880F991F05970197F1F72B982091000124 +:101CE00030910101629FC001639F900D11248230E9 +:101CF000910538F0880F991F880F991F0597019754 +:101D0000F1F70895E8988CE89BE0909304018093A4 +:101D1000030108958AEB9CE09093040180930301F2 +:101D2000E9E6F0E080818C7F81608083E89A089505 +:101D3000CF93DF93EC01FB01248135810E94571181 +:101D4000CE01DF91CF910895009769F0FC010190D9 +:101D50000020E9F73197AF01481B590BBC0180E027 +:101D600092E00C94031080E090E00895FC0144811F +:101D700055816081718180E092E00C940310CF93D3 +:101D8000DF930E94B60EEC0184E691E00E94A40E5F +:101D90008C0F9D1FDF91CF910895CF92DF92EF922C +:101DA000FF920E94950C6B017C010E94950CDC0156 +:101DB000CB018C199D09AE09BF09883E9340A1054E +:101DC000B10598F3FF90EF90DF90CF9008958F9238 +:101DD0009F92AF92BF920F931F93CF93DF93CDB794 +:101DE000DEB7A1970FB6F894DEBF0FBECDBF19A224 +:101DF000423008F44AE08E010F5D1F4F842E912C73 +:101E0000A12CB12CA50194010E946C19E62FB901F7 +:101E1000CA0101501109EA3014F4E05D01C0E95C27 +:101E2000D801EC93232B242B252B61F7C8010E94AA +:101E3000A40EA1960FB6F894DEBF0FBECDBFDF9102 +:101E4000CF911F910F91BF90AF909F908F90089569 +:101E5000E0910002F09101020190F081E02D682FE5 +:101E600080E092E00994CF92DF92EF92FF92CF93BD +:101E7000DF936C01990FEE08FF08F7FE12C08DE2A8 +:101E80000E94280FEC0166277727CB016C197D098A +:101E90008E099F094AE00E94E70E7C01EC0EFD1EB0 +:101EA00006C04AE0C701B6010E94E70E7C0184E645 +:101EB00091E00E94A40E8E0D9F1DDF91CF91FF90A7 +:101EC000EF90DF90CF9008950F931F93CF93DF9300 +:101ED0008C01C0E0D0E0F801EC0FFD1F6491662397 +:101EE00071F0E0910002F09101020190F081E02D8B +:101EF00080E092E00995892B11F02196ECCFCE017C +:101F0000DF91CF911F910F910895CF92DF92EF92C1 +:101F1000FF92CF93DF936C01990FEE08FF08F7FE55 +:101F200017C08DE20E94280FEC0166277727CB01AE +:101F30006C197D098E099F094AE00E94E70E8C0FFB +:101F40009D1FDF91CF91FF90EF90DF90CF9008958C +:101F50004AE0C701B601DF91CF91FF90EF90DF908B +:101F6000CF900C94E70ECF93DF930E94A40EEC0168 +:101F700084E691E00E94A40E8C0F9D1FDF91CF910B +:101F800008950F931F93CF93DF9300D000D0CDB768 +:101F9000DEB74AE08E010F5F1F4FB80190E00E944C +:101FA0000120F80101900020E9F73197AF01401BB3 +:101FB000510BB8018BED93E00E9471100F900F90C0 +:101FC0000F900F90DF91CF911F910F910895EBEA41 +:101FD000F2E098E09E0F11929E13FDCF611102C0B6 +:101FE0006091B103861768F4E82FF0E0E955FD4FE2 +:101FF000E485F0E0E955FD4F94819F5F94838F5F06 +:10200000F1CF08950895CF92DF92EF92FF920F9350 +:102010001F93CF93DF936C017A018B01C0E0D0E076 +:10202000CE15DF0589F0D8016D918D01D601ED91B6 +:10203000FC910190F081E02DC6010995892B11F4E6 +:102040007E0102C02196ECCFC701DF91CF911F9195 +:102050000F91FF90EF90DF90CF900895FC01808169 +:102060009181009711F00C94DA1F60E070E0CB01D1 +:102070000895FC01248135816217730748F480813B +:102080009181009729F0FC01E60FF71F80810895E8 +:1020900080E008950F931F93CF93DF93EC01888125 +:1020A0009981009729F02A813B812617370788F408 +:1020B0008B016F5F7F4F0E94D41A009761F0998364 +:1020C00088831B830A832C813D81232B11F4FC011F +:1020D000108281E001C080E0DF91CF911F910F91CC +:1020E0000895EF92FF920F931F93CF93DF93FC011C +:1020F000248135816115710511F480E019C0411505 +:102100005105A9F07B01EC018A01020F131FB801F0 +:102110000E944A10882389F3288139818C819D810E +:10212000B701820F931F0E94BE1B1D830C8381E0A9 +:10213000DF91CF911F910F91FF90EF900895EF9253 +:10214000FF920F931F93CF93DF93CDB7DEB72897FE +:102150000FB6F894DEBF0FBECDBF7C01CB014AE0C5 +:102160008E010F5F1F4FB8010E940120F8010190FE +:102170000020E9F73197AF01401B510BB801C701AF +:102180000E94711028960FB6F894DEBF0FBECDBF27 +:10219000DF91CF911F910F91FF90EF900895CF9312 +:1021A000DF9300D0CDB7DEB769831A8241E050E0FB +:1021B000BE016F5F7F4F0E9471100F900F90DF91F3 +:1021C000CF9108956115710551F0FB010190002038 +:1021D000E9F73197AF01461B570B0C94711080E063 +:1021E0000895EF92FF920F931F93CF93DF93EC012B +:1021F0007B018A01BA010E944A102881398181112C +:102200000DC02115310519F0C9010E94241F198242 +:1022100018821D821C821B821A8206C01D830C83B9 +:10222000B701C9010E94BE1BCE01DF91CF911F9162 +:102230000F91FF90EF900895CF93DF93EC0161151C +:10224000710559F0FB0101900020E9F73197AF01CA +:10225000461B570B0E94F1100CC088819981009792 +:1022600011F00E94241F198218821D821C821B8279 +:102270001A82CE01DF91CF910895FC018081918176 +:102280000C94241FFC011182108213821282158289 +:1022900014826115710551F0FB0101900020E9F7EE +:1022A0003197AF01461B570B0C94F1100895BF9264 +:1022B000CF92DF92EF92FF920F931F93CF93DF9312 +:1022C0007C016B018A01E9012417350720F4812F75 +:1022D0008901C42FD82F66E671E0C7010E94421120 +:1022E000D60114968D919C91159708171907D0F473 +:1022F0008C179D0708F4EC01D601ED91FC91119724 +:10230000EC0FFD1FB08010824D915C91BA01600FFF +:10231000711FC7010E941C11D601ED91FC91EC0FB9 +:10232000FD1FB082C701DF91CF911F910F91FF90E8 +:10233000EF90DF90CF90BF900895CF93DF93CDB70C +:10234000DEB7C757D1090FB6F894DEBF0FBECDBFB9 +:10235000789484B5826084BD84B5816084BD85B580 +:10236000826085BD85B5816085BD80916E0081608C +:1023700080936E0010928100809181008260809332 +:102380008100809181008160809381008091800034 +:102390008160809380008091B10084608093B1005F +:1023A0008091B00081608093B00080917A00846059 +:1023B00080937A0080917A00826080937A00809185 +:1023C0007A00816080937A0080917A00806880939F +:1023D0007A001092C100E0911002F091110212E017 +:1023E0001083E0911002F09111021082E0910C0232 +:1023F000F0910D021082E0910E02F0910F0200E1C7 +:10240000008310921802E0911402F091150286E008 +:102410008083E0911202F0911302808180618083B9 +:10242000E0911202F0911302808188608083E09134 +:102430001202F0911302808180688083E091120281 +:10244000F091130280818F7D808360E082E00E94A2 +:10245000590C61E08BE00E94590C61E08DE00E9414 +:10246000590C00938100109280001093A60188E11E +:1024700099E79093A5018093A4019093870080939E +:10248000860082E1809381008EE89BE090939D011D +:1024900080939C0181E080936F0080E090E00E9437 +:1024A00077218B3099F481E090E00E947721982F7A +:1024B00091709093AA0281FB992790F99093A802BA +:1024C00082FB882780F98093A9020AC06BE080E034 +:1024D00090E00E947F2167E081E090E00E947F21F0 +:1024E0000E948A0E68E270E081EA92E00E944A103F +:1024F0009E012F5F3F4F19018091A301882309F4AA +:1025000090C41092A30160E070E081EA92E00E9422 +:102510003910803539F48DE191E00E94B30F0E94AB +:10252000CD0E72C48F3309F045C00E94280F8CE78E +:1025300090E00E94640F86E50E94280F80E20E94CE +:10254000280F89E60E94280F80E20E94280F82E56A +:102550000E94280F80E20E94280F84E70E94280F23 +:1025600080E20E94280F88E50E94280F80E20E94E6 +:10257000280F86E40E94280F80E20E94280F83E53E +:102580000E94280F80E20E94280F80E50E94280FF9 +:1025900080E20E94280F83E40E94280F80E20E94BC +:1025A000280F87E40E94280F80E20E94280F86E609 +:1025B00091E004C0863529F480E291E00E94B30FD7 +:1025C00023C4823579F4809150049091510400978E +:1025D00011F484E594E0D101A81BB90BCD010E9450 +:1025E000330F12C4893609F02DC161E070E081EA31 +:1025F00092E00E943910843709F4A5C0823781F532 +:1026000042E050E061EA72E0C1010E94980E8D81C3 +:102610009E81009721F46C961FAE6C9716C00297AE +:1026200018F002E010E002C001E010E069817A8158 +:10263000A801CE01855A9F4F0E94C51BEBE5F0E033 +:10264000EC0FFD1FE00FF11F1082C1010E943D1130 +:10265000CE01855A9F4F0E94BC1F8093020173C018 +:10266000833709F05DC02B9A42E050E061EA72E0E6 +:10267000CE01855A9F4F0E94980EA1960EAD1FADB8 +:10268000A1970115110511F4198211C00732110526 +:1026900010F007E210E06D966EAD7FAD6D97A8016A +:1026A000C1010E94C51BF101E00FF11F1082CE0194 +:1026B000855A9F4F0E943D110E94820E00E010E05B +:1026C0008091020190E00817190734F56FE181E06D +:1026D0000E94580E7101F70181917F018823C9F092 +:1026E000813371F0863449F08033A9F763E081E0EB +:1026F0000E94580E63E081E009C063E081E002C0FF +:1027000061E083E00E94580E61E083E00E94580E71 +:10271000E2CF0F5F1F4FD4CF0E948A0E2B9813C0B9 +:102720008336B1F442E050E061EA72E0C1010E94F8 +:10273000980EC1010E942E10709301016093000158 +:10274000C1010E943D1181EA92E00E94BF0E5CC36C +:10275000803709F059C366E671E0CE018F599F4F6B +:102760000E94421164E170E0CE018F599F4F0E9498 +:102770004A1067E571E0CE018F599F4F0E941C11EE +:10278000809102016D961FAE1EAE6D976F961FAEC3 +:102790001EAE6F97A1961FAE1EAEA1974AE0B10183 +:1027A00090E00E942920B101CE01855A9F4F0E94DE +:1027B0001C11A1964EAD5FADA1976D966EAD7FAD2C +:1027C0006D97CE018F599F4F0E947110CE01855A8F +:1027D0009F4F0E943D1160E671E0CE018F599F4FDF +:1027E0000E94E21080910001909101016D961FAE50 +:1027F0001EAE6D976F961FAE1EAE6F97A1961FAE61 +:102800001EAEA1974AE0B1010E940120B101CE01A4 +:10281000855A9F4F0E941C11A1964EAD5FADA197A6 +:102820006D966EAD7FAD6D97CE018F599F4F0E9413 +:102830007110CE01855A9F4F0E943D11CE018F59D4 +:102840009F4F3BC2833509F040C266E671E0CE017E +:102850008F599F4F0E9442116EE170E0CE018F5957 +:102860009F4F0E944A100E94820EE12CF12CFFEF34 +:10287000A896FFAFA89721E0AE962FAFAE9731E0B4 +:10288000E0963FAFE09732E1D32ECC24C39449E0E9 +:10289000B42E52E0A52E62E671E0CE01855A9F4F1C +:1028A0000E9442118091A5029091A602E816F906B5 +:1028B00098F48090A1029090A2026D966EAD7FADCB +:1028C0006D97C4018E0D9F1D0E94D41B009721F0AF +:1028D0008C010819190902C00FEF1FEFCE01855AAC +:1028E0009F4F0E943D110F3F2FEF120721F4AF962B +:1028F0001FAEAF970EC13FEFE316F306C1F3980189 +:10290000A70161EA72E0CE01855A9F4F0E945711DC +:10291000A3968EAD9FADA3970097A9F06D966EAD6F +:102920007FAD6D976115710561F0A5964EAD5FADF8 +:10293000A597A1962EAD3FADA1974217530708F07A +:10294000ECC30E94241F6D968EAD9FAD6D97A3962C +:102950009FAF8EAFA3976F968EAD9FAD6F97A596E5 +:102960009FAF8EAFA597A1968EAD9FADA197A7966D +:102970009FAF8EAFA7976D961FAE1EAE6D976F96E9 +:102980001FAE1EAE6F97A1961FAE1EAEA197CE01D1 +:10299000855A9F4F0E943D1178018FEFE81AF80A7F +:1029A00060E070E0CE018F599F4F0E94391083354F +:1029B00059F561E070E0CE018F599F4F0E943910A8 +:1029C000833409F462C08D3471F4A8968FADA89752 +:1029D0008F5FA8968FAFA897F101D89EE00DF11DEB +:1029E0001124C28258CF823509F055CFA8962FAD59 +:1029F000A8972F5FA8962FAFA897F101D29EE00D60 +:102A0000F11D1124A28241C0803509F024C362E087 +:102A100070E0CE018F599F4F0E9439108D3309F01D +:102A20003ACF22E030E041E050E0BE016F597F4FE5 +:102A3000CE01855A9F4F0E945711CE01855A9F4F54 +:102A40000E942E10162FCE01855A9F4F0E943D11D5 +:102A500043E050E0BE016F597F4FCE01855A9F4F32 +:102A60000E94980ECE01855A9F4F0E942E10A89664 +:102A70006FACA897B69CF0011124E10FF11D3396BD +:102A8000EE0FFF1FE20DF31D40C3AE961FAEAE97D3 +:102A900002CFA9967FACA997672C712CAB967FAE1D +:102AA0006EAEAB97A9963FADA99722E1329F700118 +:102AB0001124F101EE0DFF1D82818230B9F182E116 +:102AC000AB966EAC7FACAB97869DF001879DF00D09 +:102AD0001124E20DF31D8281813009F46AC02B9824 +:102AE000A9963FADA9973F5FA9963FAFA997A89632 +:102AF0006FACA897631668F6AE967FACAE97711070 +:102B00000E94CD0EAF962FADAF972F5FAF962FAF30 +:102B1000AF97AF963FADAF97E0966FACE0973615A5 +:102B200009F4C7C0A9961FAEA997B3CF26E0E20E5D +:102B3000F11CE20CF31C4480558003810E94950C2B +:102B40004B015C0110E04016510658F1B80181EAD2 +:102B500092E00E9439108053F701E80FF11DE80F51 +:102B6000F11D60807180630177FE04C0CC24DD24F8 +:102B7000C618D7080E94950C681579058A059B052B +:102B8000C8F377FE02C02B9801C02B9AC601DD0C5A +:102B9000AA0BBB0B880E991EAA1EBB1E0F5F1F4FF0 +:102BA000D2CF0E94950C681579058A059B05C8F35C +:102BB00086CFE080F1807480E1967FAEE19713814B +:102BC0000E94950C4B015C01C701FF0CAA0BBB0BCB +:102BD000AD968CAF9DAFAEAFBFAFAD97880F991FCD +:102BE000AA1FBB1FE5968CAF9DAFAEAFBFAFE597F9 +:102BF000E1966FACE197611608F471CF612F70E038 +:102C000081EA92E00E9439108A3314F097E301C000 +:102C100090E3891B04E0C02ED12C08E0482F880FD8 +:102C2000550B2401350120E0E02EF12CE422F522A1 +:102C3000E114F10451F12B98AD968CAD9DADAEAD84 +:102C4000BFADAD97480E591E6A1E7B1EE6962FAF8C +:102C5000E697E7964FAFE797E8965FAFE8970E9451 +:102C6000950CE6962FADE697E7964FADE797E89679 +:102C70005FADE897641575058605970538F3213033 +:102C800031F021E0E114F104B1F22B9AD5CFE596B1 +:102C90008CAD9DADAEADBFADE597880E991EAA1E59 +:102CA000BB1E069591E0C91AD10809F0BACF1F5F83 +:102CB0009FCF0E948A0E81EA92E00E94BF0ECE0151 +:102CC0008F599F4F0E943D119FC08437C1F58FB728 +:102CD000F894C0909E01D0909F01E090A001F090E8 +:102CE000A1018FBFC701B60128EE33E040E050E0FC +:102CF0000E946C19CA01B9010091A9011091AA01A1 +:102D00002091AB013091AC01C016D106E206F3066A +:102D100050F42091A7013091A8012F5F3F4F3093CD +:102D2000A8012093A701C092A901D092AA01E09224 +:102D3000AB01F092AC014AE00E94E70E61C0883519 +:102D4000B1F461E070E081EA92E00E9439108135CF +:102D500011F40E94820E61E070E081EA92E00E942C +:102D60003910853409F050C00E948A0E4DC0863457 +:102D700009F44AC08334F1F561E070E081EA92E041 +:102D80000E943910182F873419F40E943A0E3CC063 +:102D900062E070E081EA92E00E943910833539F0F8 +:102DA000853541F0833449F4E9EAF2E008C0EAEA03 +:102DB000F2E005C0E8EAF2E002C0E0E0F0E015343D +:102DC00019F481E0808303C01434F1F410828091FF +:102DD000A802682F660F9091A90224E0929FC0017B +:102DE0001124862B6091AA02682B81E090E00E945A +:102DF0007F210AC0873449F288E690E00E94640F80 +:102E000084E691E00E94A40E8091A301811106C086 +:102E100066E671E081EA92E00E941C1181E08093F5 +:102E2000A201AA24A394B3E0CB2ED12C8091E90374 +:102E3000882309F40DC18091E90381508093E9034F +:102E40008091EB036091E8030E9438199093EB03A3 +:102E5000E091EB0381E08E0F8093EB03F0E0EE0F47 +:102E6000FF1FE451FC4F808191819093AE018093CC +:102E7000AD011092B403E091B103EE2369F0F0E0EC +:102E8000E955FD4F838590E0880F991F88539C4F2B +:102E90009093C3038093C2032091AD013091AE01A2 +:102EA000E091C003F091C103318320838091B1038D +:102EB000882369F0E091C203F091C30340815181FE +:102EC00042275327452F441F4427441F01C041E098 +:102ED00051E0211533480CF450E091E08E3F09F4A5 +:102EE00090E0952311F0411109C091E08E3F09F067 +:102EF00090E09093B6030E94A20006C0883221F4AD +:102F0000D092BB03C092BA03E090C003F090C1031B +:102F1000D7010D911C91B80117FF04C066277727D0 +:102F2000601B710B072E000C880B990B0E945A2016 +:102F30002DEC3CEC4CE45EE30E94B9200E94A01A08 +:102F4000AB017093B8036093B7036091D803E8ECCA +:102F5000F3E0B12CB616D9F0819191919C01202714 +:102F60003127330F220B322F232B79F4009769F08E +:102F70003801681A790AC30177FE03C091958195DB +:102F80009109481759070CF0D3C0B394E3CF6830C8 +:102F900041F560E080E00E94E70FE091D803F0E0A7 +:102FA000E955FD4F8481833010F00E94A2006091AA +:102FB000B10370E0615071098091D90316161706AC +:102FC00084F4FB01E955FD4F9485981307C06F5FAA +:102FD0007F4F87EA92E00E94FC0D03C061507109A7 +:102FE000EDCFB090D903E091C003F091C10380818F +:102FF0009181EB2DF0E0EE0FFF1FE853FC4F918322 +:10300000808381E08B0D883019F08093D90306C04E +:103010001092D9038093D8031092E7038091D903CB +:103020009091D803981710F48093D8038091B1033E +:10303000E82FF0E0E955FD4FB4868F5F8093B10330 +:103040008091B403882309F4F1CEA092A201EECEC0 +:103050000E94FB0B51CA8235E9F461E070E0CE01B9 +:103060008F599F4F0E9439108D3309F014CC42E0E4 +:1030700050E0BE016F597F4FCE01855A9F4F0E948D +:10308000980ECE01855A9F4F0E942E10E0966FAF8A +:10309000E0973DC08434A9F4F101A8967FACA897CD +:1030A000D79CE00DF11D1124A6968FADA6978C2C10 +:1030B000881A882D8E0D838301501109158304838E +:1030C000EACB833409F0E7CB61E070E0CE018F59A1 +:1030D0009F4F0E9439108D3309F0DDCB42E050E064 +:1030E000BE016F597F4FCE01855A9F4F0E94980EA7 +:1030F000CE01855A9F4F0E942E10F101A8967FACF9 +:10310000A897D79CE00DF11D112471836083CE0137 +:10311000855A9F4F0E943D11BECB0E94BE1BA196B7 +:103120008EAD9FADA197A7969FAF8EAFA7972BCCE3 +:10313000B7FC2DCF0B2D000F110B08531C4FD801DE +:103140006D917C91AB01770F660B770BF701808156 +:103150009181092E000CAA0BBB0B3A014B01680EA2 +:10316000791E8A1E9B1EC401B30122E030E040E0BC +:1031700050E00E948E19D8012D933C9357CF81EADD +:1031800092E00E943D1181EE93E00E943D118BED93 +:1031900093E00C943D110F931F93CF93DF93E0E0E6 +:1031A000F2E01382128288EE93E0A0E0B0E0848324 +:1031B0009583A683B78381E191E09183808385EC39 +:1031C00090E09587848784EC90E09787868780ECF1 +:1031D00090E0918B808B81EC90E0938B828B82ECE2 +:1031E00090E0958B848B86EC90E0978B868B118E8C +:1031F000128E138E148EE8EEF3E082E38083118248 +:1032000013821282CCEBD3E0D093C103C093C003EE +:103210000EEB13E01093C3030093C20366E671E064 +:103220008BED93E00E94421166E671E081EE93E03F +:103230000E944211F801118210821982188287EAD5 +:1032400092E00E94BD0D66E671E081EA92E00E9484 +:1032500042110E94950C60939D0270939E02809390 +:103260009F029093A002DF91CF911F910F9108953B +:10327000991B79E004C0991F961708F0961B881FC8 +:103280007A95C9F780950895AA1BBB1B51E107C029 +:10329000AA1FBB1FA617B70710F0A61BB70B881FE6 +:1032A000991F5A95A9F780959095BC01CD01089575 +:1032B00097FB072E16F4009407D077FD09D00E94E3 +:1032C000441907FC05D03EF4909581959F4F0895D1 +:1032D000709561957F4F0895A1E21A2EAA1BBB1B22 +:1032E000FD010DC0AA1FBB1FEE1FFF1FA217B307D2 +:1032F000E407F50720F0A21BB30BE40BF50B661FE8 +:10330000771F881F991F1A9469F7609570958095AB +:1033100090959B01AC01BD01CF010895052E97FB4F +:103320001EF400940E94A51957FD07D00E946C1945 +:1033300007FC03D04EF40C94A51950954095309598 +:1033400021953F4F4F4F5F4F089590958095709511 +:1033500061957F4F8F4F9F4F08950E94C421B7FF03 +:103360000895821B930B0895EE0FFF1F0590F491B3 +:10337000E02D09945058BB27AA270E94D2190C941B +:103380003D210E942F2138F00E94362120F039F48F +:103390009F3F19F426F40C942C210EF4E095E7FBE2 +:1033A0000C942621E92F0E944E2158F3BA17620788 +:1033B00073078407950720F079F4A6F50C94702123 +:1033C0000EF4E0950B2EBA2FA02D0B01B901900140 +:1033D0000C01CA01A0011124FF27591B99F0593F84 +:1033E00050F4503E68F11A16F040A22F232F342FCC +:1033F0004427585FF3CF469537952795A795F0401A +:103400005395C9F77EF41F16BA0B620B730B840B2E +:10341000BAF09150A1F0FF0FBB1F661F771F881FE6 +:10342000C2F70EC0BA0F621F731F841F48F487953E +:1034300077956795B795F7959E3F08F0B0CF939530 +:10344000880F08F09927EE0F9795879508950E94A9 +:103450003B1A0C943D210E94362158F00E942F21E6 +:1034600040F029F45F3F29F00C94262151110C946F +:1034700071210C942C210E944E2168F39923B1F301 +:10348000552391F3951B550BBB27AA27621773078A +:10349000840738F09F5F5F4F220F331F441FAA1F1E +:1034A000A9F335D00E2E3AF0E0E832D091505040DA +:1034B000E695001CCAF72BD0FE2F29D0660F771F88 +:1034C000881FBB1F261737074807AB07B0E809F06E +:1034D000BB0B802DBF01FF2793585F4F3AF09E3FF3 +:1034E000510578F00C9426210C9471215F3FE4F390 +:1034F000983ED4F3869577956795B795F7959F5F36 +:10350000C9F7880F911D9695879597F90895E1E081 +:10351000660F771F881FBB1F621773078407BA07E0 +:1035200020F0621B730B840BBA0BEE1F88F7E0953B +:1035300008950E94A01A6894B1110C947121089505 +:103540000E94562188F09F5798F0B92F9927B751BC +:10355000B0F0E1F0660F771F881F991F1AF0BA9537 +:10356000C9F714C0B13091F00E947021B1E0089504 +:103570000C947021672F782F8827B85F39F0B93FF6 +:10358000CCF3869577956795B395D9F73EF49095EA +:103590008095709561957F4F8F4F9F4F08950E9442 +:1035A000952008F48FEF0895A0E0B0E0EAEDFAE18D +:1035B0000C949121EC01009721F4CB010E948F1E05 +:1035C000B8C0FC01E60FF71F9C0122503109E21739 +:1035D000F30708F4ACC0D9010D911C91119706179F +:1035E0001707B0F00530110508F49FC0C801049713 +:1035F0008617970708F499C002501109061B170B8C +:10360000019311936D937C93CF010E94241F8DC071 +:103610005B01A01AB10A4C01800E911EA0915204C8 +:10362000B091530440E050E0E12CF12C109709F4E4 +:103630004AC0A815B905D1F56D907C90119763012A +:1036400082E0C80ED11CCA14DB0480F1A3014A1920 +:103650005B096A0182E0C80ED11C1296BC901297D9 +:103660001396AC91B5E0CB16D10440F0B282A3839F +:1036700051834083D9016D937C930AC00E5F1F4F25 +:10368000C301800F911FF90191838083EB2DFA2FE5 +:10369000E114F10431F0D7011396FC93EE931297E5 +:1036A00044C0F0935304E09352043FC08D919C9129 +:1036B00011974817590708F4AC017D0112960D9037 +:1036C000BC91A02DB3CF80915004909151048815E6 +:1036D0009905E1F446175707C8F4809107019091C6 +:1036E0000801009741F48DB79EB740910B015091AE +:1036F0000C01841B950BE817F907C8F4F0935104EB +:10370000E0935004F901718360830FC0CB010E94E4 +:103710008F1E7C01009759F0A801BE010E94A31BD7 +:10372000CE010E94241FC70104C0CE0102C080E068 +:1037300090E0CDB7DEB7EEE00C94AD2181E090E0F3 +:10374000F8940C94D321FB01DC0102C001900D928E +:1037500041505040D8F708956817790768F4FB0185 +:10376000DC01E40FF51FA40FB51F02C002900E92FA +:1037700041505040D8F708950C94A31BFB01DC0185 +:1037800001900D920020E1F70895FB01DC0141500A +:10379000504048F001900D920020C9F701C01D92E1 +:1037A00041505040E0F70895FB0151915523A9F095 +:1037B000BF01DC014D9145174111E1F759F4CD01ED +:1037C0000190002049F04D9140154111C9F3FB01D2 +:1037D0004111EFCF81E090E001970895AEE0B0E0B5 +:1037E000E4EFFBE10C949B210D891E8986E08C831C +:1037F0001A8309838FEF9FE79E838D83AE01475E17 +:103800005F4F6F89788DCE0101960E94111C2F8128 +:103810003885F801E20FF31F10822E96E4E00C9435 +:10382000B721ACE0B0E0E7E1FCE10C948D217C0134 +:103830006B018A01FC0117821682838181FFBDC161 +:10384000CE0101964C01F7019381F60193FD85911C +:1038500093FF81916F01882309F4ABC1853239F45C +:1038600093FD859193FF81916F01853229F4B70112 +:1038700090E00E94F91DE7CF512C312C20E020323E +:10388000A0F48B3269F030F4803259F0833269F45D +:1038900020612CC08D3239F0803339F4216026C08C +:1038A0002260246023C0286021C027FD27C030ED9E +:1038B000380F3A3078F426FF06C0FAE05F9E300DEC +:1038C0001124532E13C08AE0389E300D1124332E5C +:1038D00020620CC08E3221F426FD6BC1206406C02C +:1038E0008C3611F4206802C0883641F4F60193FD4D +:1038F000859193FF81916F018111C1CF982F9F7D99 +:103900009554933028F40C5F1F4FFFE3F9830DC0EB +:10391000833631F0833771F0833509F05BC022C004 +:10392000F801808189830E5F1F4F44244394512CFA +:10393000540115C03801F2E06F0E711CF801A0802F +:10394000B18026FF03C0652D70E002C06FEF7FEFEE +:10395000C5012C870E94EE1D2C0183012C852F7739 +:10396000222E17C03801F2E06F0E711CF801A08002 +:10397000B18026FF03C0652D70E002C06FEF7FEFBE +:10398000C5012C870E94E31D2C012C852068222E66 +:10399000830123FC1BC0832D90E048165906B0F428 +:1039A000B70180E290E00E94F91D3A94F4CFF5014E +:1039B00027FC859127FE81915F01B70190E00E946D +:1039C000F91D31103A94F1E04F1A51084114510495 +:1039D00071F7E5C0843611F0893639F5F80127FF13 +:1039E00007C060817181828193810C5F1F4F08C085 +:1039F00060817181072E000C880B990B0E5F1F4FA1 +:103A00002F76722E97FF09C09095809570956195DD +:103A10007F4F8F4F9F4F2068722E2AE030E0A40125 +:103A20000E94311EA82EA81844C0853729F42F7E85 +:103A3000B22E2AE030E025C0F22FF97FBF2E8F365C +:103A4000C1F018F4883579F0B4C0803719F08837A0 +:103A500021F0AFC02F2F2061B22EB4FE0DC08B2DF0 +:103A60008460B82E09C024FF0AC09F2F9660B92E2B +:103A700006C028E030E005C020E130E002C020E1CF +:103A800032E0F801B7FE07C06081718182819381C5 +:103A90000C5F1F4F06C06081718180E090E00E5F77 +:103AA0001F4FA4010E94311EA82EA818FB2DFF77DE +:103AB0007F2E76FE0BC0372D3E7FA51450F474FE8A +:103AC0000AC072FC08C0372D3E7E05C0BA2C372DC7 +:103AD00003C0BA2C01C0B52C34FF0DC0FE01EA0DA5 +:103AE000F11D8081803311F4397E09C032FF06C098 +:103AF000B394B39404C0832F867809F0B39433FD54 +:103B000013C030FF06C05A2CB31418F4530C5B18C2 +:103B1000B32CB31468F4B70180E290E03C870E94B4 +:103B2000F91DB3943C85F5CFB31410F43B1801C0D4 +:103B3000312C34FF12C0B70180E390E03C870E9433 +:103B4000F91D3C8532FF17C031FD03C088E790E0C6 +:103B500002C088E590E0B7010CC0832F867859F049 +:103B600031FF02C08BE201C080E237FD8DE2B70178 +:103B700090E00E94F91DA51438F4B70180E390E0AD +:103B80000E94F91D5A94F7CFAA94F401EA0DF11D91 +:103B90008081B70190E00E94F91DA110F5CF33207C +:103BA00009F451CEB70180E290E00E94F91D3A94E9 +:103BB000F6CFF7018681978102C08FEF9FEF2C9699 +:103BC000E2E10C94A921FC010590615070400110C4 +:103BD000D8F7809590958E0F9F1F0895FC01615036 +:103BE000704001900110D8F7809590958E0F9F1F1F +:103BF00008950F931F93CF93DF93FB01238121FD42 +:103C000003C08FEF9FEF28C022FF16C04681578167 +:103C1000248135814217530744F4A081B1819D016D +:103C20002F5F3F4F318320838C93268137812F5F15 +:103C30003F4F3783268310C0EB01092F182F0084D4 +:103C4000F185E02D0995892BE1F68E819F81019602 +:103C50009F838E83812F902FDF91CF911F910F91A2 +:103C60000895FA01AA27283051F1203181F1E89412 +:103C70006F936E7F6E5F7F4F8F4F9F4FAF4FB1E05F +:103C80003ED0B4E03CD0670F781F891F9A1FA11D5A +:103C9000680F791F8A1F911DA11D6A0F711D811D5B +:103CA000911DA11D20D009F468943F912AE0269F20 +:103CB00011243019305D3193DEF6CF010895462F7F +:103CC0004770405D4193B3E00FD0C9F7F6CF462F60 +:103CD0004F70405D4A3318F0495D31FD40524193C9 +:103CE00002D0A9F7EACFB4E0A69597958795779586 +:103CF0006795BA95C9F700976105710508959B010D +:103D0000AC010A2E06945795479537952795BA9595 +:103D1000C9F7620F731F841F951FA01D0895CF93CD +:103D2000DF938230910510F482E090E0E09152043C +:103D3000F091530420E030E0C0E0D0E0309711F182 +:103D40004081518148175907C0F04817590761F45D +:103D500082819381209719F09B838A832BC0909353 +:103D600053048093520426C02115310519F04217DF +:103D7000530718F49A01BE01DF01EF010280F381BD +:103D8000E02DDCCF2115310509F1281B390B24303A +:103D9000310590F412968D919C91139761157105E0 +:103DA00021F0FB019383828304C09093530480939A +:103DB0005204FD01329644C0FD01E20FF31F8193CE +:103DC0009193225031092D933C933AC02091500495 +:103DD00030915104232B41F42091090130910A01C3 +:103DE0003093510420935004209107013091080131 +:103DF0002115310541F42DB73EB740910B0150918B +:103E00000C01241B350BE0915004F0915104E21792 +:103E1000F307A0F42E1B3F0B2817390778F0AC01ED +:103E20004E5F5F4F2417350748F04E0F5F1F5093CA +:103E30005104409350048193919302C0E0E0F0E07C +:103E4000CF01DF91CF9108950F931F93CF93DF930D +:103E5000009709F48CC0FC01329713821282009102 +:103E60005204109153040115110581F42081318110 +:103E7000820F931F20915004309151042817390765 +:103E800079F5F0935104E093500471C0D80140E0FB +:103E900050E0AE17BF0750F412962D913C91139746 +:103EA000AD012115310509F1D901F3CF9D01DA01E9 +:103EB0003383228360817181860F971F8217930756 +:103EC00069F4EC0128813981260F371F2E5F3F4F9F +:103ED000318320838A819B8193838283452B29F4BC +:103EE000F0935304E093520442C01396FC93EE9374 +:103EF0001297ED01499159919E01240F351FE21748 +:103F0000F30771F480819181840F951F02961196B9 +:103F10009C938E938281938113969C938E93129798 +:103F2000E0E0F0E0D80112968D919C9113970097F4 +:103F300019F0F8018C01F6CF8D919C9198012E5FBC +:103F40003F4F820F931F2091500430915104281746 +:103F5000390769F4309729F41092530410925204EF +:103F600002C0138212821093510400935004DF9117 +:103F7000CF911F910F910895FC0188279927E8940C +:103F800021912032E9F3293010F02E30C8F32B3282 +:103F900041F02D3239F4689404C00E942120820F30 +:103FA000911D219120532A30C0F31EF490958195E4 +:103FB0009F4F08951F93FC0199278827BC01E8941F +:103FC00011911032E9F3193010F01E30C8F31B3292 +:103FD00051F01D3249F4689406C00E940C20610F14 +:103FE000711D811D911D119110531A30B0F33EF4D3 +:103FF00090958095709561957F4F8F4F9F4F1F9142 +:104000000895BB274A3031F4992322F4BDE29095FC +:1040100081959F4F0C942A20592F482F372F262FF8 +:10402000660F771F881F991F660F771F881F991FBC +:10403000620F731F841F951F660F771F881F991FBC +:1040400008957AE0979F902D879F802D910D1124E0 +:104050000895BB27FB015527AA27880F991FAA1F80 +:10406000A41710F0A41B83955051B9F7A05DAA3393 +:1040700008F0A95DA193009779F7B111B19311925E +:10408000CB010C944320DC01FC01672F7191772355 +:10409000E1F7329704C07C916D9370836291AE1703 +:1040A000BF07C8F308950E94952008F481E00895A1 +:1040B000E89409C097FB3EF49095809570956195C2 +:1040C0007F4F8F4F9F4F9923A9F0F92F96E9BB2778 +:1040D0009395F695879577956795B795F111F8CFF4 +:1040E000FAF4BB0F11F460FF1BC06F5F7F4F8F4F5F +:1040F0009F4F16C0882311F096E911C0772321F055 +:104100009EE8872F762F05C0662371F096E8862FEC +:1041100070E060E02AF09A95660F771F881FDAF743 +:10412000880F9695879597F90895990F0008550F70 +:10413000AA0BE0E8FEEF16161706E807F907C0F02D +:1041400012161306E407F50798F0621B730B840B35 +:10415000950B39F40A2661F0232B242B252B21F40F +:1041600008950A2609F4A140A6958FEF811D811DAF +:1041700008950E94CC200C943D210E942F2138F0FC +:104180000E94362120F0952311F00C9426210C94E6 +:104190002C2111240C9471210E944E2170F3959FC3 +:1041A000C1F3950F50E0551F629FF001729FBB272E +:1041B000F00DB11D639FAA27F00DB11DAA1F649FCA +:1041C0006627B00DA11D661F829F2227B00DA11D7D +:1041D000621F739FB00DA11D621F839FA00D611D03 +:1041E000221F749F3327A00D611D231F849F600D24 +:1041F000211D822F762F6A2F11249F5750409AF04D +:10420000F1F088234AF0EE0FFF1FBB1F661F771FD8 +:10421000881F91505040A9F79E3F510580F00C94A3 +:1042200026210C9471215F3FE4F3983ED4F38695E8 +:1042300077956795B795F795E7959F5FC1F7FE2B43 +:10424000880F911D9695879597F9089597F99F671F +:1042500080E870E060E008959FEF80EC089500240E +:104260000A941616170618060906089500240A94DB +:1042700012161306140605060895092E0394000C61 +:1042800011F4882352F0BB0F40F4BF2B11F460FFF0 +:1042900004C06F5F7F4F8F4F9F4F089557FD905819 +:1042A000440F551F59F05F3F71F04795880F97FBFA +:1042B000991F61F09F3F79F08795089512161306B4 +:1042C0001406551FF2CF4695F1DF08C016161706E3 +:1042D0001806991FF1CF8695710561050894089518 +:1042E000E894BB2766277727CB0197F90895F999BA +:1042F000FECF92BD81BDF89A992780B50895262FEB +:10430000F999FECF1FBA92BD81BD20BD0FB6F894BA +:10431000FA9AF99A0FBE019608952F923F924F9202 +:104320005F926F927F928F929F92AF92BF92CF9245 +:10433000DF92EF92FF920F931F93CF93DF93CDB74E +:10434000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFC6 +:1043500009942A88398848885F846E847D848C8497 +:104360009B84AA84B984C884DF80EE80FD800C81A0 +:104370001B81AA81B981CE0FD11D0FB6F894DEBF83 +:104380000FBECDBFED010895A29FB001B39FC00144 +:10439000A39F700D811D1124911DB29F700D811D71 +:1043A0001124911D089510E0C5E7D0E004C0FE017E +:1043B0000E94B4192196C637D107C9F7F894FFCFE8 +:1043C0002C01068C0B8C0B000054048000000000B4 +:1043D00000230B0310EC0ACA0ADE0A6A0B4F4B00DB +:1043E0005620332E332E30205349474E414C6475AE +:1043F000696E6F202D20636F6D70696C656420613C +:1044000074205365702031382032303136203030FE +:104410003A32383A3238004954506172616D733A19 +:1044200020003B000D0A004D5300443D0043503D29 +:104430000053503D004F0025303258002530315890 +:10444000004D43004C4C3D004C483D00534C3D005A +:0C44500053483D00433D004D5500500016 :00000001FF diff --git a/fhem/FHEM/firmware/SIGNALduino_promini328.hex b/fhem/FHEM/firmware/SIGNALduino_promini328.hex index db8898393..446e0942b 100644 --- a/fhem/FHEM/firmware/SIGNALduino_promini328.hex +++ b/fhem/FHEM/firmware/SIGNALduino_promini328.hex @@ -1,1154 +1,1095 @@ -:100000000C9477000C949F130C94C6130C949F00CF -:100010000C949F000C949F000C949F000C949F00E4 -:100020000C949F000C949F000C949F000C949F00D4 -:100030000C949F000C947F080C949F000C949F00DC -:100040000C94ED130C949F000C94A9160C94DB16E1 -:100050000C949F000C949F000C949F000C949F00A4 -:100060000C949F000C949F003B4D433D003B4D552D -:100070003D004D533D00556E737570706F72746521 -:100080006420636F6D6D616E640020557365206F31 -:100090006E65206F6620000000000800020100006D -:1000A0000304070000000000000000010204081023 -:1000B00020408001020408102001020408102004DE +:100000000C9476000C94860D0C945F0D0C949E005D +:100010000C949E000C949E000C949E000C949E00E8 +:100020000C949E000C949E000C949E000C949E00D8 +:100030000C949E000C94130E0C949E000C949E0045 +:100040000C94150D0C949E000C94270C0C94010C30 +:100050000C949E000C949E000C949E000C949E00A8 +:100060000C949E000C949E00556E737570706F72A8 +:1000700074656420636F6D6D616E640020557365F7 +:10008000206F6E65206F66200000000008000201EE +:10009000000003040700000000000000003B4D4387 +:1000A0003D003B4D553D004D533D000000000025F7 +:1000B0000028002B0000000000240027002A000474 :1000C00004040404040404020202020202030303FF -:1000D00003030300000000250028002B000000009F -:1000E00000240027002A000019080B175C081124BF -:1000F0001FBECFEFD8E0DEBFCDBF12E0A0E0B1E081 -:10010000E6EEF6E402C005900D92A631B107D9F7EC -:1001100024E0A6E1B2E001C01D92AB3AB207E1F7DC -:1001200010E0CCEED0E004C02297FE010E94921DA8 -:10013000C83ED107C9F70E944F170C9466230C9450 -:100140000000CF92DF92EF92FF920F931F930E94D5 -:10015000431400911D0210911E0220911F02309144 -:1001600020026B017C01C01AD10AE20AF30A97014E -:10017000860160931D0270931E0280931F0290936C -:1001800020020A3511052105310578F181E0C816F4 -:100190008DE7D806E104F10410F4960102C021E0D5 -:1001A0003DE74A9B03C03195219531098091620357 -:1001B0008B34D8F4809162038F5F809362038091C7 -:1001C0006303609161030E943A1D90936303E09181 -:1001D0006303F0E0EE0FFF1FEB59FC4F31832083E8 -:1001E000809163038F5F809363031F910F91FF9052 -:1001F000EF90DF90CF9008950F931F9360912702A7 -:100200008DE00E943415109227020E944314009141 -:100210001D0210911E0220911F0230912002601BCE -:10022000710B820B930B62307D478105910520F0A5 -:100230001F910F910C94A1001F910F91089581E2DD -:1002400092E00E94F7188BE593E00E94F71885E58D -:1002500093E00C94F718CF93DF93EC01FB0124811A -:1002600035810E943A1BCE01DF91CF91089541E084 -:1002700050E061EA70E080E00C946D1380E00C9433 -:100280008D13CF93DF931F92CDB7DEB72B9A2091BA -:10029000060130910701482F429FC001439F900DF6 -:1002A000112469830E948E142B98809106019091ED -:1002B00007016981FC016E9FC0016F9F900D1124A1 -:1002C0000F90DF91CF910C948E14EF92FF920F93C9 -:1002D0001F93CF93DF93F82EE92E0E943E0100E09A -:1002E00010E02091080130E0021713072CF56FE1B0 -:1002F00081E00E944101CF2DDE2D29912223C9F0FA -:10030000213371F0263449F02033B9F763E081E0FE -:100310000E94410163E081E009C063E081E002C026 -:1003200061E083E00E94410161E083E00E944101BD -:10033000E4CF0F5F1F4FD5CFDF91CF911F910F916A -:10034000FF90EF900C9437013F924F925F926F9223 -:100350007F928F929F92AF92BF92CF92DF92EF9255 -:10036000FF920F931F93CF93DF93082FEB01542E2F -:10037000452E59010E9443146B017C0110E0812C31 -:10038000912CB401600F711FC617D707A8F1C501E2 -:100390000E94F21A8053E52DF42DE80FF11DE80FAD -:1003A000F11D90818181382E331C3324331C692E3A -:1003B000782E31F077FE0CC071946194710808C0FA -:1003C00077FE03C071946194710888E1681A71081E -:1003D0000E9443146C157D058E059F05C8F33320DC -:1003E00011F02B9801C02B9AC60CD71CE11CF11CF4 -:1003F0008FEF881A980AC5CF0E9443146C157D05AB -:100400008E059F05C8F3DF91CF911F910F91FF904B -:10041000EF90DF90CF90BF90AF909F908F907F90A4 -:100420006F905F904F903F9008954F925F926F92C0 -:100430007F928F929F92AF92BF92CF92DF92EF9274 -:10044000FF920F931F93CF93DF93982E862E2A014E -:100450002B9A0E9443146B017C01662457FC609424 -:10046000762C891408F446C0692D70E081E292E090 -:100470000E94F21A90ED980F9A3010F4892F01C063 -:100480008753C4E0D0E008E0A82EBB24A7FCB094BA -:100490000E9443146C157D058E059F05C8F310E07E -:1004A00098012A213B21232B71F02B98C40CD51CD9 -:1004B000E61CF71C0E9443146C157D058E059F05F4 -:1004C000C8F32B9A0DC02B9AC40CD51CE61CF71C44 -:1004D0000E9443146C157D058E059F05C8F32B986B -:1004E000C40CD51CE61CF71C15950795219781F6C1 -:1004F0009394B7CF0E9443146C157D058E059F051C -:10050000C8F3DF91CF911F910F91FF90EF90DF9093 -:10051000CF90BF90AF909F908F907F906F905F90A3 -:100520004F900895CF92DF92EF92FF920F931F9317 -:10053000CF93DF9300D000D000D0CDB7DEB78C01D1 -:100540006B01FC01E080F1806DE071E0CE0101966D -:100550000E946519A701BE016F5F7F4F81E292E0A3 -:100560000E941E1B7C01CE0101960E94F718FFEF2E -:10057000EF16FF0601F1F801408151814F3FFFEF77 -:100580005F07C9F0970161E272E0CE0101960E9417 -:100590003A1BBE016F5F7F4FC6010E94B119CE01A9 -:1005A00001960E94F7188FEFE81AF80AF801F18215 -:1005B000E08281E001C080E026960FB6F894DEBFAD -:1005C0000FBECDBFDF91CF911F910F91FF90EF90A4 -:1005D000DF90CF900895BF92CF92DF92EF92FF927B -:1005E0000F931F93CF93DF93CDB7DEB7C856D109D2 -:1005F0000FB6F894DEBF0FBECDBF67E072E0CE014C -:100600008F599F4F0E9465196EE170E0CE018F599E -:100610009F4F0E942819A9961FAE1EAEA9970E944F -:100620003E011FEF01E042E1F42E59E0E52E62E0C9 -:10063000D62ECC24C394BE016F597F4FCE01895969 -:100640009F4F0E949202882309F44FC060E070E03F -:10065000CE018F599F4F0E94F21A833589F561E0D0 -:1006600070E0CE018F599F4F0E94F21A833419F324 -:1006700061E070E0CE018F599F4F0E94F21A8D34D5 -:1006800059F41F5FE1E0F0E0EC0FFD1FF19EE00D7B -:10069000F11D1124C282CFCF61E070E0CE018F59ED -:1006A0009F4F0E94F21A823531F61F5FE1E0F0E0C1 -:1006B000EC0FFD1FF19EE00DF11D1124D282BBCF86 -:1006C00060E070E0CE018F599F4F0E94F21A803592 -:1006D00009F068C062E070E0CE018F599F4F0E9420 -:1006E000F21A8D3309F05EC082C0B12C32E1C32E04 -:1006F000B016D1F1D12CED2CF12CCE9CA001CF9CC9 -:10070000500D1124E1E0F0E0EC0FFD1FE40FF51FA8 -:100710008281823079F44A5F5F4F21E030E02C0F14 -:100720003D1F420F531F6481758121E232E08381B6 -:100730000E94A401CE9CF001CF9CF00D112481E019 -:1007400090E08C0F9D1FE80FF91F8281813031F4FA -:1007500040815181648183810E9415022B98D3943A -:100760001D1548F6B394C4CF0E94370161E272E0D0 -:100770008AE094E00E94EA17CE018F599F4F0E94B1 -:10078000F718C859DF4F0FB6F894DEBF0FBECDBFC4 -:10079000DF91CF911F910F91FF90EF90DF90CF905D -:1007A000BF90089560E070E0CE018F599F4F0E9486 -:1007B000F21A823509F050C061E070E0CE018F5925 -:1007C0009F4F0E94F21A8D3309F046C042E050E07C -:1007D000BE016F597F4FCE01855A9F4F0E942B015A -:1007E000CE01855A9F4F0E947F1B062F82C022E0B8 -:1007F00030E041E050E0BE016F597F4FCE01855A95 -:100800009F4F0E943A1BCE01855A9F4F0E947F1B2B -:10081000B62ECE01855A9F4F0E94F71843E050E054 -:10082000BE016F597F4FCE01855A9F4F0E942B0109 -:10083000CE01855A9F4F0E947F1BE19EF00111243B -:10084000EB0DF11D3396EE0FFF1F21E030E02C0F72 -:100850003D1FE20FF31F4BC060E070E0CE018F59E7 -:100860009F4F0E94F21A8434B9F4A9968EAD9FADC1 -:10087000A997E1E0F0E0EC0FFD1FF19EE00DF11D06 -:10088000112421E0280FA6963FADA697231B2383B2 -:10089000029795838483CFCE60E070E0CE018F59BC -:1008A0009F4F0E94F21A833409F0C5CE61E070E0D8 -:1008B000CE018F599F4F0E94F21A8D3309F0BBCEA3 -:1008C00042E050E0BE016F597F4FCE01855A9F4FE5 -:1008D0000E942B01CE01855A9F4F0E947F1BE1E0B1 -:1008E000F0E0EC0FFD1FF19EE00DF11D112471836E -:1008F0006083CE01855A9F4F0E94F7189CCE62E715 -:1009000070E08AE094E00E949C1760912B0270E0F6 -:100910004AE050E08AE094E00E94B1186DE670E091 -:100920008AE094E00E949C176091290270E04AE0FE -:1009300050E08AE094E00E94B11868E670E08AE036 -:1009400094E00E949C1760912A0270E04AE050E017 -:100950008AE094E00C94B918CF93DF93CDB7DEB75B -:10096000AE970FB6F894DEBF0FBECDBF61E070E06A -:1009700081E292E00E94F21A843729F161E070E08E -:1009800081E292E00E94F21A823721F542E050E0C3 -:1009900061E272E0CE0101960E942B0120E030E07E -:1009A00043E050E0BE01675D7F4FCE0101960E949B -:1009B000F41ACE0101960E94F718CE0189960E9482 -:1009C000871F8093080161E272E08AE094E00E9450 -:1009D000EA1795C061E070E081E292E00E94F21AAD -:1009E0008337F1F42B9A42E050E061E272E0CE01ED -:1009F00089960E942B0120E030E048E250E0BE01E1 -:100A00006F5F7F4FCE0189960E94F41ACE018996BE -:100A10000E94F718CE0101960E9465012B98D3CF52 -:100A200061E070E081E292E00E94F21A8336A9F45C -:100A300042E050E061E272E0CE0101960E942B019B -:100A4000CE0101960E947F1B7093070160930601FF -:100A5000CE0101960E94F718B6CF61E070E081E206 -:100A600092E00E94F21A803709F049C067E072E014 -:100A7000CE0189960E94651964E170E0CE018996E5 -:100A80000E9428196FE071E0CE0189960E94BD197D -:100A90004AE060910801CE0101960E94D519BE017D -:100AA0006F5F7F4FCE0189960E945A1ACE01019640 -:100AB0000E94F71867E971E0CE0189960E94611AD9 -:100AC00060910601709107014AE0CE0101960E94F3 -:100AD000021ABE016F5F7F4FCE0189960E945A1A9B -:100AE000CE0101960E94F718BE01675D7F4F8AE034 -:100AF00094E00E94EA17CE0189960E94F718AE96FC -:100B00000FB6F894DEBF0FBECDBFDF91CF91089531 -:100B1000CF93DF9300D0CDB7DEB72091A7043091FB -:100B2000A8042115310511F42BEA34E0CE01019619 -:100B3000821B930B0F900F90DF91CF910895CF926E -:100B4000DF92EF92FF920E9437146B017C0128EE36 -:100B500033E040E050E00E946E1D809118029091B9 -:100B60001902A0911A02B0911B02C816D906EA0612 -:100B7000FB0648F48091160290911702019690931B -:100B8000170280931602C0921802D0921902E092C6 -:100B90001A02F0921B02CA01B901FF90EF90DF9098 -:100BA000CF9008956AE171E08AE094E00E94FC171A -:100BB00061E070E080E090E00C94661461E070E029 -:100BC00081E292E00E94F21A813511F40E943E0106 -:100BD00061E070E081E292E00E94F21A853411F443 -:100BE0000C9437010895262F220F330B94E049020D -:100BF000B0011124682B622B81E090E00C946B22F1 -:100C0000CF93DF9361E070E081E292E00E94F21AFC -:100C1000873421F4DF91CF910C947F0462E070E07F -:100C200081E292E00E94F21A833599F062E070E06E -:100C300081E292E00E94F21A853571F062E070E084 -:100C400081E292E00E94F21A833441F4CAE2D2E0D7 -:100C500005C0CBE2D2E002C0C9E2D2E061E070E0C0 -:100C600081E292E00E94F21A853419F481E08883CF -:100C700009C061E070E081E292E00E94F21A8434DF -:100C800059F4188240912A026091290280912B0226 -:100C9000DF91CF910C94F305DF91CF91089560E03F -:100CA00070E081E292E00E94F21A803511F40C9417 -:100CB000D20560E070E081E292E00E94F21A8F3388 -:100CC00009F072C06FE38AE094E00E94CD176AE8F1 -:100CD00070E08AE094E00E949C1766E58AE094E068 -:100CE0000E94CD1760E28AE094E00E94CD1769E689 -:100CF0008AE094E00E94CD1760E28AE094E00E94CE -:100D0000CD1762E58AE094E00E94CD1760E28AE0A8 -:100D100094E00E94CD1764E78AE094E00E94CD172A -:100D200060E28AE094E00E94CD1768E58AE094E0F2 -:100D30000E94CD1760E28AE094E00E94CD1766E43D -:100D40008AE094E00E94CD1760E28AE094E00E947D -:100D5000CD1763E58AE094E00E94CD1760E28AE057 -:100D600094E00E94CD1760E58AE094E00E94CD17E0 -:100D700060E28AE094E00E94CD1763E48AE094E0A8 -:100D80000E94CD1760E28AE094E00E94CD1767E4EC -:100D90008AE094E00E94CD1760E28AE094E00E942D -:100DA000CD1767E072E00AC060E070E081E292E097 -:100DB0000E94F21A863531F46DE171E08AE094E028 -:100DC0000C94FC1760E070E081E292E00E94F21A5D -:100DD000823549F40E9488054AE050E0BC018AE06F -:100DE00094E00C94B91860E070E081E292E00E9417 -:100DF000F21A893641F488E292E00E94E408892BD5 -:100E000081F40C94AC0460E070E081E292E00E9416 -:100E1000F21A833561F488E292E00E94E408892B9B -:100E200021F081E080931C0208950C94EB0260E0B5 -:100E300070E081E292E00E94F21A843751F40E943D -:100E40009F05AB01BC012AE030E08AE094E00C94FD -:100E5000E51860E070E081E292E00E94F21A8835C5 -:100E600011F40C94DE0560E070E081E292E00E94F3 -:100E7000F21A8634D1F060E070E081E292E00E94E4 -:100E8000F21A833411F40C94000660E070E081E201 -:100E900092E00E94F21A873411F40C947F0466E702 -:100EA00070E08AE094E00C94D81708951F93CF93D4 -:100EB000DF9300D0CDB7DEB780911C02882389F084 -:100EC00010921C020E944F0680911C02811106C0E4 -:100ED00067E072E081E292E00E94BD1981E08093B8 -:100EE000270211E080916203882341F1809162031F -:100EF00081508093620380916403609161030E943A -:100F00003A1D90936403E091640381E08E0F809317 -:100F10006403F0E0EE0FFF1FEB59FC4F80819181DD -:100F20009A838983BE016F5F7F4F88E292E00E94BF -:100F30004B138823B9F210932702D4CF0F900F9050 -:100F4000DF91CF911F910895EF92FF920F931F931E -:100F5000CF93DF93EC017B018A0181E090E00E9456 -:100F60006322982F9170988381FB992790F9F7015C -:100F7000908382FB882780F9F8018083DF91CF91ED -:100F80001F910F91FF90EF90089526E040E051EE01 -:100F900060E070E08AE094E00E944D1660E082E03C -:100FA0000E94FB1461E08BE00E94FB1461E08DE085 -:100FB0000E94FB1480E1809381001092800082E007 -:100FC0008093FD038CE89CE39093FF038093FE03E2 -:100FD000909387008093860082E1809381008CEF5C -:100FE00090E09093FC038093FB0381E080936F007B -:100FF00080E090E00E9463228B3049F44AE252E0A4 -:1010000069E272E08BE292E00E94A4070AC06BE002 -:1010100080E090E00E946B2267E081E090E00E9417 -:101020006B220E94370164E170E081E292E00C944F -:1010300028190F931F93CF93DF938BE48093610361 -:10104000109262031092640310926303CBE3D3E027 -:10105000D0934003C0933F030DE313E0109342038A -:101060000093410367E072E085E593E00E94651913 -:1010700067E072E08BE593E00E946519F801118248 -:1010800010821982188288E292E00E94A60867E026 -:1010900072E081E292E00E9465190E94431460931D -:1010A0001D0270931E0280931F0290932002DF9115 -:1010B000CF911F910F9108950C941F01CF93C1E020 -:1010C0008AE094E00E946A15892BB9F08AE094E0E6 -:1010D0000E9483158A3041F01CF4882329F007C050 -:1010E0008D3011F0833219F4C0931C02E9CF682FC0 -:1010F00081E292E00E94711AE3CFCF9108951F928E -:101100000F920FB60F9211242F933F934F935F933B -:101110006F937F938F939F93AF93BF93EF93FF93BF -:10112000E091FB03F091FC030995FF91EF91BF91D2 -:10113000AF919F918F917F916F915F914F913F916F -:101140002F910F900FBE0F901F901895FC01E85F34 -:10115000FE4F1082B39610827B97108231961182D7 -:1011600010827B962FEF2083FC012083AC0120E0CE -:1011700030E0FA01E15EFE4F11821082FC01E20FC5 -:10118000F31F14822F5F3F4F4E5F5F4F26303105B4 -:1011900081F7FC01E55FFE4F1082339626E930E0CF -:1011A000318320833D964DEC5CEC6CE47EE3408320 -:1011B00051836283738372971082339610823196C3 -:1011C000108233971082089580E090E00895CF93C5 -:1011D000DF93FC01E55DFE4FD081C0E07D97CD1728 -:1011E000C1F0DC01A15EBE4F2D913C91AB01421BD1 -:1011F000530B9A0157FF03C031952195310902968F -:10120000408151814217530714F08C2F03C0CF5FE8 -:10121000E6CF8FEFDF91CF910895FC011482158204 -:101220001682178210861186411104C0DC01A85F66 -:10123000BE4F4C91641780F4DF01A60FB11D1A96C2 -:101240008C91DF01A80FB11D14968C9114978F5FBC -:1012500014968C936F5FEECF08952F923F924F922A -:101260005F926F927F928F929F92AF92BF92CF9236 -:10127000DF92EF92FF920F931F93CF93DF93CDB73F -:10128000DEB72E970FB6F894DEBF0FBECDBF9E8798 -:101290008D8740E060E00E940D09ED85FE85E55DEB -:1012A000FE4F5080712C2D853E85255E3E4F3A873E -:1012B00029878D859E85885F9E4F9C878B877514B7 -:1012C00009F4C3C044244394470C642C272C312CCC -:1012D000C101880F991FAD85BE858A0F9B1FFC0138 -:1012E000E15EFE4FFA83E9832A0E3B1EF4E02F0EE7 -:1012F000311C29813A8138872F83651409F4A3C0F2 -:10130000862D90E09C838B83880F991F9E838D830D -:10131000FC01AD85BE85EA0FFB1FE15EFE4F00813B -:101320001181C80117FF04C088279927801B910BE2 -:10133000BC01882777FD8095982F0E94231CE985A2 -:10134000FA8520813181428153810E94D71C4B0153 -:101350005C01A981BA81CD90DC907801EC18FD0880 -:10136000F7FE03C0F194E194F10820E030E040E0A2 -:101370005FE3C501B4010E94D71C9B01AC01C5010C -:10138000B4010E948C1B0E94F01B6E157F050CF4AB -:1013900058C0EB85FC85208180E090E0821750F4F6 -:1013A000ED85FE85E80FF91F3285361101C0728682 -:1013B0000196F4CFD1014C91552747FD5095EB8113 -:1013C000FC812D853E85E20FF31FE481FF27E7FDB9 -:1013D000F0959A012E0F3F1F21153105E1F4C49EAF -:1013E000C001C59E900DD49E900D1124B9010E949C -:1013F0005A1D7B010E9FC0010F9F900D1E9F900DE7 -:101400001124B9010E945A1DE60EF71EAF81B8855E -:10141000ED92FC920CC00C0D1D1D17FF02C00F5F5A -:101420001F4F15950795E981FA8111830083ED819E -:10143000FE812D853E85E20FF31FE15EFE4F118296 -:10144000108263945ACF742C3ACF2E960FB6F8942C -:10145000DEBF0FBECDBFDF91CF911F910F91FF90E7 -:10146000EF90DF90CF90BF90AF909F908F907F9044 -:101470006F905F904F903F902F9008953F924F92C2 -:101480005F926F927F928F929F92AF92BF92CF9214 -:10149000DF92EF92FF920F931F93CF93DF93EC01B4 -:1014A0008FEF8883FE01E55DFE4F30806E0100E026 -:1014B00010E0EE24EA94FE2C4E0188EF881A8EEF9D -:1014C000980A031508F06AC0F601E15EFE4F5F015D -:1014D000FFEFEF16FF0639F5F5018081918197FD49 -:1014E00022C0FE01E00FF11F6481772767FD709530 -:1014F000872F972F0E94231C2B013C01F401608150 -:1015000070E080E090E00E94231C2BE734E14EE283 -:101510005EE30E94D71C9B01AC01C301B2010E9493 -:10152000D31C1816A4F1F5012081318137FD30C09C -:10153000C701880F991F8C0F9D1FFC01E15EFE4FB4 -:1015400080819181281739071CF5FE01E00FF11FFA -:101550006481772767FD7095872F972F0E94231C42 -:101560002B013C01F401608170E080E090E00E947A -:10157000231C2BE734E14EE25EE30E94D71C9B0163 -:10158000AC01C301B2010E94D31C18160CF47801FF -:101590000F5F1F4FF2E0CF0ED11C93CF8FEFE816F5 -:1015A000F80641F0E882CF5EDE4F81E090E099835B -:1015B000888301C080E0DF91CF911F910F91FF9050 -:1015C000EF90DF90CF90BF90AF909F908F907F90E3 -:1015D0006F905F904F903F9008958F929F92AF923F -:1015E000BF92CF92DF92EF92FF920F931F93CF9310 -:1015F000DF93FC018C010F5E1E4FD8018D919C91F1 -:101600001197019709F07CC05A96BC90BA94C7E034 -:10161000AC2E6F01B8EFCB1ABEEFDB0AB7FC70C07F -:101620002B2D332727FD3095C901880F991F8E0F69 -:101630009F1FDC01A15EBE4FCD91DC91D7FF5EC044 -:10164000D195C195D109C83682E4D80708F056C0B3 -:10165000E080FF24E7FCF094C701880F991F8E0FEC -:101660009F1FDC01A15EBE4F8D909C90CE01B40106 -:101670000E94461D6832710508F040C0A89CC00158 -:10168000A99C900D11248C179D07C0F5DF01A20FB6 -:10169000B31F14968C9186308CF5D6014C9150E096 -:1016A000BA0161507109912C892D90E08617970736 -:1016B00084F4DF01A80FB91F1B96CC911B97D0E0D3 -:1016C000C217D307C9F41A96AC91B0E0AE15BF05A6 -:1016D00099F4485251098417950784F4DF01A45DF9 -:1016E000BE4FBC9282E090E0D8018D939C93E75F5F -:1016F000FE4F908281E009C09394D6CFBA948ECFEA -:10170000E45DFE4F8FEF808380E0DF91CF911F91EA -:101710000F91FF90EF90DF90CF90BF90AF909F9090 -:101720008F9008950F931F93CF93DF938A01E90160 -:101730008AE094E00E94BF17B8018AE094E00E941A -:10174000BF17BE018AE094E0DF91CF911F910F9106 -:101750000C94BF17EF92FF920F931F93CF93DF93D9 -:10176000EC01F62EE42EB9018AE094E00E94BF1746 -:10177000EF1460F0FE01EF0DF11D4AE050E06285CC -:101780008AE094E00E94DE18F394F2CFB8018AE078 -:1017900094E00E94BF1780E0DF91CF911F910F91DD -:1017A000FF90EF90089570E0FC0126A1332727FDFC -:1017B00030956217730751F027A1332727FD309525 -:1017C00081E06217730719F080E0089581E00895C1 -:1017D00070E0FC0120A5332727FD309562177307C1 -:1017E00051F021A5332727FD309581E0621773075B -:1017F00019F080E0089581E008959F92AF92BF9222 -:10180000CF92DF92EF92FF920F931F93CF93DF93CC -:1018100000D01F92CDB7DEB78C017B0120E330E30F -:1018200040E029833A834B83FC01668DF3E06F9F90 -:10183000B0011124C7010E942819E114F10449F1F3 -:10184000912C87ECA82E81E0B82ECE0101966C0178 -:10185000F801868D8915E8F0F80183A1981620F427 -:10186000E90DF11D808101C08FEF1F928F93BF9210 -:10187000AF92DF92CF920E946F20B601C7010E9403 -:10188000611A93940F900F900F900F900F900F90FC -:10189000DFCF0F900F900F90DF91CF911F910F919D -:1018A000FF90EF90DF90CF90BF90AF909F90089502 -:1018B0000F931F93CF93DF938C01EB0160E270E0F5 -:1018C000CE010E942819209709F468C06CEC71E0E1 -:1018D000CE010E94611AF80184A195A126A1220FD0 -:1018E000330B820F931FFC01E15EFE4F608171811B -:1018F000CE010E94B01A6BE3CE010E94711A60ED16 -:1019000071E0CE010E94611AF80184A195A127A17E -:10191000220F330B820F931FFC01E15EFE4F6081AB -:101920007181CE010E94B01A6BE3CE010E94711A40 -:1019300064ED71E0CE010E94611AF80184A195A1C5 -:1019400020A5220F330B820F931FFC01E15EFE4F97 -:1019500060817181CE010E94B01A6BE3CE010E94BA -:10196000711A68ED71E0CE010E94611AF80184A13C -:1019700095A121A5220F330B820F931FFC01E15E7D -:10198000FE4F60817181CE010E94B01A6BE3CE01DF -:10199000DF91CF911F910F910C94711ADF91CF912C -:1019A0001F910F9108950F931F93CF93DF938C0195 -:1019B000EB0167E070E0CE010E942819209799F0B2 -:1019C0006CED71E0CE010E94611AF80162A573A569 -:1019D000CE010E94B01A6BE3CE01DF91CF911F912F -:1019E0000F910C94711ADF91CF911F910F9108956F -:1019F0004F925F926F927F928F929F92AF92BF921F -:101A0000CF92DF92EF92FF920F931F93CF93DF93CA -:101A1000EC010CA11DA1580185EDA81A8EEFB80AA2 -:101A2000F5018081843008F4C4C06801F8EFCF1A52 -:101A3000FEEFDF0AF601608170E080E090E00E9436 -:101A4000231C2AE037ED43E25DE30E94D71C0E948D -:101A5000F51B40E050E0912C812CEE24EA94FE2C02 -:101A6000262F30E0F5018081481708F06BC0642F05 -:101A700070E0F801E60FF71FE4818E2F992787FDAC -:101A80009095821793070CF45BC0660F771F600F69 -:101A9000711FDB01A15EBE4F6D917C91161617067A -:101AA0004CF55E0F8394E60EF71EEFA1EF3F69F051 -:101AB0008E2F880F990B800F911FDC01A15EBE4F06 -:101AC0008D919C91861797070CF4E42FEFA3E9A55D -:101AD000EF3F69F08E2F880F990B800F911FDC016B -:101AE000A15EBE4F8D919C91681779070CF4E42F8D -:101AF000E9A726C05E1B9394EEA1EF3F69F08E2FFD -:101B0000880F990B800F911FDC01A15EBE4F8D9154 -:101B10009C91681779070CF4E42FEEA3E8A5EF3F3A -:101B200069F08E2F880F990B800F911FDC01A15E49 -:101B3000BE4F8D919C91861797070CF4E42FE8A770 -:101B40004F5F90CF652F70E080E090E00E94231CF3 -:101B50002B013C01F601608170E080E090E00E9482 -:101B6000231C2AE037ED43EA5CE30E94D71C9B016B -:101B7000AC01C301B2010E94D31C1816D4F0981016 -:101B800018C0C70163E070E00E945A1D7BA76AA7D6 -:101B90009EA19F3F71F088A58F3F59F0981749F09B -:101BA0002FA12F3F31F099A59F3F19F081E0291314 -:101BB00001C080E0DF91CF911F910F91FF90EF90D6 -:101BC000DF90CF90BF90AF909F908F907F906F905D -:101BD0005F904F900895FC0183A12E2FDF019A2F73 -:101BE000921B981710F41D92FACF168E178E87E06D -:101BF00082A3089524E1FC0124A70C94EB0D7F92AD -:101C00008F929F92AF92BF92CF92DF92EF92FF920C -:101C10000F931F93CF93DF93EC018CA19DA1FC0147 -:101C2000E45FFE4F108233971082D12CF12C812C6F -:101C300037E0B32EAA24A3940CA11DA1F801E85FFC -:101C4000FE4F8081881608F04DC0F11014C0F801D5 -:101C5000E80DF11DE2846E2DCE010E94D30B81119F -:101C600006C06E2DCE010E94E80B8823C9F1F80151 -:101C7000E75FFE4F80820CA11DA1D1108FC0C8016B -:101C8000885F9E4F7C01F801E80DF11DC2846C2D28 -:101C9000CE010E94D30B811161C0F70180818816AB -:101CA00008F47AC05BC0672DCE010E94E80B782E45 -:101CB000811184C04F8D50E02CA5332727FD30952E -:101CC000421753070CF0C8C07110B4C0CE010E9477 -:101CD000EB0DF12C4E8D8BA1481708F486C0DF2C3C -:101CE0008394AACF88122DC0D801A75FBE4F4C9114 -:101CF000423038F12F8D30E08CA587FD8F5F8595C0 -:101D0000992787FD909582179307DCF4841A8082C7 -:101D10008CA19DA1FC01E85FFE4F408150E04F5F28 -:101D20005F4F3196608170E0665F7F4F680F791F6B -:101D30000A960E94D51FECA1FDA1E45FFE4F81E051 -:101D400080834F8D50E02CA5332727FD309581E00F -:101D5000421753070CF0B5C080E0B3C0282DF7013F -:101D600080818816B0F4C8018C0D911D8C0D911DD9 -:101D7000FC01E15EFE4F9180991C9924991CF801A9 -:101D8000E75FFE4F8080281949F020FF07C0839449 -:101D900005C0FF24F394A4CF839475CFE82CF12CD5 -:101DA0006801CE0CDF1CF6017284672DCE010E9403 -:101DB000D30B882309F477CF9A2414C0F801E85F85 -:101DC000FE4F208130E021503109E216F3060CF07D -:101DD00071CFF6016385CE010E94E80B882309F4D8 -:101DE00069CF8394FF24F39475CF5AA1852F90E097 -:101DF000292D332727FD3095052E01C0220F0A9487 -:101E0000EAF7FE01E40FF11D3081322B30832F8D74 -:101E10002F5F2F8F28A1821B910997FD03C0521BB2 -:101E20005AA35DCFBAA24F5F4E8FFE01E40FF11DA2 -:101E3000108255CFF801E85FFE4F808190E0019756 -:101E4000E816F9060CF042CFF6016385CE010E9438 -:101E5000E80B882389F13ACFF801E65FFE4F8082D4 -:101E60008CA19DA1FC01E85FFE4FDC01A65FBE4F87 -:101E700020818C91281B20838CA19DA1FC01E85F0F -:101E8000FE4F408150E04F5F5F4F3296608170E0BF -:101E9000665F7F4F680F791F0A960E94D51FECA1DD -:101EA000FDA1E45FFE4F81E080834F8D50E02CA5C3 -:101EB000332727FD30954CCFF801E75FFE4F808038 -:101EC00005CFDF91CF911F910F91FF90EF90DF90A1 -:101ED000CF90BF90AF909F908F907F9008953F924A -:101EE0004F925F926F927F928F929F92AF92BF922A -:101EF000CF92DF92EF92FF920F931F93CF93DF93D6 -:101F0000CDB7DEB7E3970FB6F894DEBF0FBECDBFF7 -:101F10007C013C0188EF681A8EEF780AF30180811A -:101F2000883208F474C2C7010E942D0940E060E0C5 -:101F3000C7010E940D09C7010E943E0AC7010E9405 -:101F4000ED0AF7018381882309F422C1EF5EFE4F79 -:101F500080819181029709F01BC14701F7EF8F1A29 -:101F6000FEEF9F0AF40160815701F6EFAF1AFEEF12 -:101F7000BF0A82E0860FF5018083F3017081872F0D -:101F800090E00197D701A45DBE4FF5011081212F8C -:101F900030E028173907FCF4F701E20FF31F4385FF -:101FA00050E02C91332727FD30954217530779F4E1 -:101FB000428550E0F7012081332727FD30954217F5 -:101FC000530729F41150F501108311E005C01E5F7D -:101FD000F5011083DACF10E0F5018081781708F45D -:101FE0007083F5014081C7010E940D09112351F052 -:101FF000F501808190E0F4012081821B910988978E -:1020000034F4C2C0F30140814E3F08F09EC0670126 -:10201000F3EDCF1AFEEFDF0A67E072E0C6010E941F -:10202000BD1987010D5C1E4F67E072E0C8010E9478 -:10203000BD1962E0C6010E94711A6FED71E0C60120 -:102040000E94611A6BE3C6010E94711A312C37019C -:1020500085ED681A8EEF780AF3018081381640F515 -:10206000432C512CF701E40DF51D84818823F1F0F8 -:1020700060E5C6010E94711A632DC6010E94841A90 -:102080006DED71E0C6010E94611AC201880F991FAF -:102090008E0D9F1DFC01E15EFE4F60817181C601C6 -:1020A0000E94B01A6BE3C6010E94711A3394D4CF18 -:1020B00062EE71E0C6010E94611A6BE3C8010E94E2 -:1020C000711A65EE71E0C8010E94611AF701608122 -:1020D000772767FD7095C8010E94B01A6BE3C801AD -:1020E0000E94711A69EE71E0C8010E94611AF7013D -:1020F000E45DFE4F6081772767FD7095C8010E94FF -:10210000B01A6BE3C8010E94711AF701E35FFE4F3A -:102110008081882349F06DEE71E0C8010E94611A48 -:102120006BE3C8010E94711A63E0C8010E94711A32 -:102130006AE0C8010E94711A9601F5014081F4011C -:102140006081C7010E94AA0BD1C0F4016081623096 -:10215000D8F0F501808190E08D3F9105ACF0461BF1 -:10216000F301408350E04F5F5F4F70E0665F7F4F49 -:102170006E0D7F1DC7010A960E94D51F81E0F701F1 -:10218000E45FFE4F8083BBC0C7010E94A608B7C0B2 -:10219000F7018181811104C08281882309F4ABC0D9 -:1021A000F701EF5EFE4F80819181019709F0A3C096 -:1021B000F3018081883208F49EC06701F3EDCF1AE5 -:1021C000FEEFDF0A67E072E0C6010E94BD198701D9 -:1021D0000D5C1E4F67E072E0C8010E94BD1962E00D -:1021E000C6010E94711A8EE18CA381E089A31AA214 -:1021F000CE0101960E94EB0D29A187E090E0821BA1 -:1022000091097AA167E041E050E0262F30E0821783 -:1022100093074CF49A01062E01C0220F0A94EAF7A4 -:10222000722B6150F2CF7AA38FEF8FA388A789A773 -:102230008AA7FEA2EDA2CE0101960E94FA0DCE0160 -:1022400001960E94FA0D81E18DA7F7018281882312 -:1022500009F45FC0CE0101960E94F80C882309F4AE -:1022600058C0CE0101960E94FF0D882309F451C089 -:1022700067E072E0CE018E960E94651962EE71E011 -:10228000CE018E960E94BD19BE01625D7F4FCE01C8 -:1022900001960E94FD0B62EF71E0C6010E94611A77 -:1022A0006BE3C6010E94711AB601CE0101960E942D -:1022B000580C6BE3C8010E94711AB801CE01019657 -:1022C0000E94D30C63E0C8010E94711A6AE0C80141 -:1022D0000E94711A9801AE01425D5F4FB601C701BD -:1022E0000E94920BCE018E960E94F71881E0F701B2 -:1022F000E55FFE4F47CFF701E55FFE4F1082F70124 -:10230000E45FFE4F8081811182C0C7010E94A60850 -:102310007EC0F7018181882349F36FEE71E0C60129 -:102320000E94611A6BE3C6010E94711A512C570179 -:10233000F5EDAF1AFEEFBF0AF5018081581648F59A -:10234000852C912CF701E80DF91D84818823F9F083 -:1023500060EC71E0C6010E94611A652DC6010E9401 -:10236000841A6DED71E0C6010E94611AC401880FE4 -:10237000991F8E0D9F1DFC01E15EFE4F60817181F2 -:10238000C6010E94B01A6BE3C6010E94711A5394F1 -:10239000D3CF62EE71E0C6010E94611A6BE3C801FF -:1023A0000E94711A65EE71E0C8010E94611AF7017E -:1023B0006081772767FD7095C8010E94B01A6BE3B2 -:1023C000C8010E94711AF701E35FFE4F80818823E4 -:1023D00049F06DEE71E0C8010E94611A6BE3C8011B -:1023E0000E94711A63E0C8010E94711A6AE0C80174 -:1023F0000E94711AF30140814150960160E0C701CB -:102400000E94AA0BF701E45FFE4F10826FCFE396A4 -:102410000FB6F894DEBF0FBECDBFDF91CF911F91F5 -:102420000F91FF90EF90DF90CF90BF90AF909F9073 -:102430008F907F906F905F904F903F9008958F9214 -:102440009F92AF92BF92CF92DF92EF92FF920F9343 -:102450001F93CF93DF931F92CDB7DEB74C018C0152 -:10246000085F1E4FD8018C9190E08D3F910544F09C -:1024700081E0F401E35FFE4F8083C4010E946F0F8F -:10248000F401E05FFE4F10826401B9EECB1ABEEF9B -:10249000DB0AD601ED91FC91119780819181129612 -:1024A0000D90BC91A02D2D913C91D8014C91509153 -:1024B00000047401B5EDEB1ABEEFFB0AD7016C9175 -:1024C000651708F45C93442361F082279327B92EA3 -:1024D000BB1CBB24BB1C81E04D3F09F480E0B8224B -:1024E00005C0D7011C9210920004B12C608171814B -:1024F000C40149830E94E708A82E498187FD2CC0AA -:10250000F401E40FF11D8287423030F081858A1199 -:1025100003C0C4010E94A6088A2D880F990B880D5C -:10252000991DFC01E15EFE4FD6018D919C912081A9 -:102530003181DC018D919C91280F391F37FF02C03A -:102540002F5F3F4F3595279531832083F801808198 -:102550008F5F808320E012C040E060E0C4010E94F1 -:102560000D09D7018C91863041F480910004F4016B -:10257000E80FF11D8481823024F421E0B1101DC0E8 -:1025800001C020E0F8018081A401455F5E4F5A013F -:10259000883248F081E0DA018C93C4010E946F0F09 -:1025A000109200046AC0C40129830E94A608F501A4 -:1025B00010821092000429810BC0D8018C918832BE -:1025C00038F083E090E0F401EF5EFE4F918380836A -:1025D000222309F452C0F80140815091000480E0A8 -:1025E00090E0242F30E0F9013197280D391DBF010B -:1025F000680F791F6F3FAFEF7A07E1F00197D901BC -:10260000A80FB91F1A96AC91A513F1CFCB01019673 -:10261000481BD8014C9350E04F5F5F4F655F7F4F81 -:10262000680D791DC4010A960E94D51FF8018081AA -:102630008F5F808340910004D601ED91FC91208151 -:102640003181C401840F911D840F911DFC01E15E55 -:10265000FE4F31832083F8018081F401E80FF11DE2 -:1026600042878F5FD8018C934F5F409300044630C0 -:1026700021F410920004F70140830F90DF91CF9175 -:102680001F910F91FF90EF90DF90CF90BF90AF9090 -:102690009F908F900895CF93DF93EC01C55FDE4F3D -:1026A0001882FC01E75EFE4F0190F081E02D208151 -:1026B0003181DC01A95EBE4F0D90BC91A02D2D9300 -:1026C0003C93DB012D913C91318320830E941F12AA -:1026D0008881DF91CF91089508958230E8F4E82F42 -:1026E000F0E0EE0FFF1FE75FFE4F718360838130E4 -:1026F00041F0809169008C7F842B80936900E89A77 -:10270000089580916900440F551F440F551F837F22 -:10271000842B80936900E99A0895823078F481309F -:1027200011F0E89801C0E998E82FF0E0EE0FFF1FE4 -:10273000E75FFE4F8CE693E19183808308951F92BB -:102740000F920FB60F9211242F933F934F935F93E5 -:102750006F937F938F939F93AF93BF93EF93FF9369 -:10276000E0910901F0910A010995FF91EF91BF9164 -:10277000AF919F918F917F916F915F914F913F9119 -:102780002F910F900FBE0F901F9018951F920F92D0 -:102790000FB60F9211242F933F934F935F936F9334 -:1027A0007F938F939F93AF93BF93EF93FF93E091AA -:1027B0000B01F0910C010995FF91EF91BF91AF9141 -:1027C0009F918F917F916F915F914F913F912F9149 -:1027D0000F900FBE0F901F9018951F920F920FB67B -:1027E0000F9211242F933F938F939F93AF93BF9397 -:1027F0008091020490910304A0910404B091050417 -:102800003091010426E0230F2D3720F40296A11DFC -:10281000B11D05C029E8230F0396A11DB11D20930A -:1028200001048093020490930304A0930404B093E2 -:1028300005048091060490910704A0910804B091CA -:1028400009040196A11DB11D80930604909307040D -:10285000A0930804B0930904BF91AF919F918F9109 -:102860003F912F910F900FBE0F901F9018952FB78B -:10287000F894609102047091030480910404909193 -:1028800005042FBF08953FB7F894809106049091F6 -:102890000704A0910804B091090426B5A89B05C0BF -:1028A0002F3F19F00196A11DB11D3FBF6627782F5C -:1028B000892F9A2F620F711D811D911D43E0660FB4 -:1028C000771F881F991F4A95D1F70895CF92DF92FD -:1028D000EF92FF92CF93DF936B017C010E94431430 -:1028E000EB01C114D104E104F10489F00E948A1BB8 -:1028F0000E9443146C1B7D0B683E734090F381E093 -:10290000C81AD108E108F108C851DC4FEACFDF91BD -:10291000CF91FF90EF90DF90CF9008958330910595 -:1029200028F0880F991F04970197F1F7089578947C -:1029300084B5826084BD84B5816084BD85B58260C4 -:1029400085BD85B5816085BDEEE6F0E08081816062 -:102950008083E1E8F0E01082808182608083808162 -:1029600081608083E0E8F0E0808181608083E1EB3A -:10297000F0E0808184608083E0EBF0E08081816022 -:102980008083EAE7F0E080818460808380818260D8 -:10299000808380818E7F8083808180688083109295 -:1029A000C1000895833081F028F4813099F082309D -:1029B000A1F008958730A9F08830B9F08430D1F4BF -:1029C000809180008F7D03C0809180008F778093FD -:1029D0008000089584B58F7702C084B58F7D84BD53 -:1029E00008958091B0008F7703C08091B0008F7DF3 -:1029F0008093B0000895CF93DF9390E0FC01E555FC -:102A0000FF4F2491FC01E154FF4F8491882349F149 -:102A100090E0880F991FFC01E352FF4FA591B491FC -:102A20008D529F4FFC01C591D4919FB7611108C091 -:102A3000F8948C91209582238C93888182230AC0FC -:102A4000623051F4F8948C91322F309583238C931B -:102A50008881822B888304C0F8948C91822B8C937C -:102A60009FBFDF91CF9108950F931F93CF93DF9373 -:102A70001F92CDB7DEB7282F30E0F901E956FF4F9E -:102A80008491F901E555FF4F1491F901E154FF4F8D -:102A900004910023C9F0882321F069830E94D21495 -:102AA0006981E02FF0E0EE0FFF1FED52FF4FA5917F -:102AB000B4919FB7F8948C91611103C01095812354 -:102AC00001C0812B8C939FBF0F90DF91CF911F91FD -:102AD0000F910895FC01818D228D90E0805C9F4FC5 -:102AE000821B91098F7399270895FC01918D828D26 -:102AF000981731F0828DE80FF11D858D90E00895D3 -:102B00008FEF9FEF0895FC01918D828D981761F0F2 -:102B1000828DDF01A80FB11D5D968C91928D9F5F14 -:102B20009F73928F90E008958FEF9FEF089581E05B -:102B300097E1892B49F08EE598E0892B29F00E94D6 -:102B4000011781110C945E080895FC01848DDF014A -:102B5000A80FB11DA35ABF4F2C91848D90E0019610 -:102B60008F739927848FA689B7892C93A089B189FF -:102B70008C9180648C93938D848D981306C0028809 -:102B8000F389E02D80818F7D80830895CF93DF933B -:102B9000EC01888D8823C9F0EA89FB89808185FD55 -:102BA00005C0A889B9898C9186FD0FC00FB607FCB6 -:102BB000F5CF808185FFF2CFA889B9898C9185FFF7 -:102BC000EDCFCE010E94A515E7CFDF91CF910895FB -:102BD000CF92DF92FF920F931F93CF93DF931F92B9 -:102BE000CDB7DEB76C0181E0D60158968C9358972B -:102BF0005B969C915B975C968C915C97981307C051 -:102C00005096ED91FC915197808185FD2EC0F60183 -:102C1000038D10E00F5F1F4F0F731127F02EF60189 -:102C2000848DF81211C00FB607FCF9CFD60150966B -:102C3000ED91FC915197808185FFF1CFC6016983A9 -:102C40000E94A5156981EBCF838DE80FF11DE35A32 -:102C5000FF4F6083D6015B960C935B975296ED9184 -:102C6000FC915397808180620CC0D6015696ED91FD -:102C7000FC91579760835096ED91FC91519780811C -:102C80008064808381E090E00F90DF91CF911F916D -:102C90000F91FF90DF90CF900895BF92CF92DF9277 -:102CA000EF92FF92CF93DF93EC016A017B01B22E8A -:102CB00060E874E88EE190E0A70196010E946E1D25 -:102CC0002150310941095109569547953795279566 -:102CD000E889F98982E08083211580E1380798F03E -:102CE000E889F989108260E472E48FE090E0A7013E -:102CF00096010E946E1D21503109410951095695D6 -:102D0000479537952795EC85FD853083EE85FF85C2 -:102D10002083188EEC89FD89B082EA89FB89808145 -:102D200080618083EA89FB89808188608083EA8969 -:102D3000FB89808180688083EA89FB8980818F7D1F -:102D40008083DF91CF91FF90EF90DF90CF90BF9085 -:102D500008951F920F920FB60F9211242F938F9305 -:102D60009F93EF93FF93E0911A04F0911B048081ED -:102D7000E0912004F091210482FD12C090818091A5 -:102D800023048F5F8F7320912404821751F0E09108 -:102D90002304F0E0E65FFB4F958F8093230401C08E -:102DA0008081FF91EF919F918F912F910F900FBE96 -:102DB0000F901F9018951F920F920FB60F9211242B -:102DC0002F933F934F935F936F937F938F939F9333 -:102DD000AF93BF93EF93FF938AE094E00E94A51511 -:102DE000FF91EF91BF91AF919F918F917F916F91E3 -:102DF0005F914F913F912F910F900FBE0F901F90B9 -:102E000018958AE094E00E946A1521E0892B09F464 -:102E100020E0822F089510920D0410920C0488EE89 -:102E200093E0A0E0B0E080930E0490930F04A09391 -:102E30001004B093110489EF91E090930B048093F8 -:102E40000A0485EC90E0909317048093160484ECB8 -:102E500090E0909319048093180480EC90E0909394 -:102E60001B0480931A0481EC90E090931D048093DE -:102E70001C0482EC90E090931F0480931E0486EC67 -:102E800090E09093210480932004109223041092E8 -:102E900024041092250410922604089508950E9497 -:102EA00097140E944E170E94C507C7E9D5E10E94FA -:102EB00056072097E1F30E949715F9CFCF92DF9242 -:102EC000EF92FF920F931F93CF93DF937C016A01E0 -:102ED000EB0100E010E00C151D0571F06991D701C0 -:102EE000ED91FC910190F081E02DC7010995892BAE -:102EF00019F00F5F1F4FEFCFC801DF91CF911F91E6 -:102F00000F91FF90EF90DF90CF90089561157105BC -:102F100081F0DB010D900020E9F7AD01415051092E -:102F2000461B570BDC01ED91FC910280F381E02DF3 -:102F3000099480E090E00895EF92FF920F931F9321 -:102F4000CF93DF938C017B01C0E0D0E0F701EC0F61 -:102F5000FD1F6491662359F0F801A081B181ED91C4 -:102F6000FC91C8010995892B11F02196EFCFCE0174 -:102F7000DF91CF911F910F91FF90EF900895DC01A9 -:102F8000ED91FC91DB0114964D915C9115976D913B -:102F90007C910280F381E02D0994DC01ED91FC919C -:102FA0000190F081E02D099465E072E00C948617A1 -:102FB0000F931F93CF93DF93EC010E949C178C011A -:102FC000CE010E94D417800F911FDF91CF911F91E6 -:102FD0000F9108950F931F93CF93DF93EC010E94FD -:102FE000BF178C01CE010E94D417800F911FDF9173 -:102FF000CF911F910F9108950F931F93CF93DF935C -:10300000EC010E9486178C01CE010E94D417800F1C -:10301000911FDF91CF911F910F9108958F929F92F1 -:10302000AF92BF92CF92DF92EF92FF920F931F93D6 -:10303000CF93DF93CDB7DEB7A1970FB6F894DEBF7D -:103040000FBECDBF7C01C42EE52FCB01D22E19A21D -:1030500021E02D1510F02AE0D22E8E010F5D1F4FBA -:103060008D2C912CA12CB12C6C2D7E2FA5019401BF -:103070000E946E1D8C2DD29E8019112401501109C1 -:103080008A3014F4805D01C0895CF80180832115C9 -:1030900031054105510521F0C22EE32FCA01E4CFCD -:1030A000B801C7010E948617A1960FB6F894DEBF3B -:1030B0000FBECDBFDF91CF911F910F91FF90EF9089 -:1030C000DF90CF90BF90AF909F908F900895CF9258 -:1030D000DF92EF92FF920F931F93CF93DF93EC0158 -:1030E0006A017B012115310579F4E881F9810190AC -:1030F000F081E02D642FDF91CF911F910F91FF9010 -:10310000EF90DF90CF9009942A303105E9F477FFF2 -:103110001AC06DE20E94CD178C0144275527BA01D1 -:103120004C195D096E097F092AE0CE010E940E1834 -:10313000800F911FDF91CF911F910F91FF90EF9022 -:10314000DF90CF9008952AE0B701A601CE01DF916C -:10315000CF911F910F91FF90EF90DF90CF900C9443 -:103160000E189A01AB01662757FD6095762F0C94D7 -:1031700067180F931F93CF93DF93EC019A01AB0174 -:10318000662757FD6095762F0E9467188C01CE0147 -:103190000E94D417800F911FDF91CF911F910F9143 -:1031A00008952115310541F4DC01ED91FC91019068 -:1031B000F081E02D642F09940C940E189A01462F8B -:1031C00050E060E070E00C94D1180F931F93CF9300 -:1031D000DF93EC010E94D1188C01CE010E94D4171C -:1031E000800F911FDF91CF911F910F910895FC01E6 -:1031F000808191810C942E1ECF93DF93EC01888106 -:103200009981009711F00E942E1E198218821D824A -:103210001C821B821A82DF91CF9108950F931F9316 -:10322000CF93DF93EC018B016F5F7F4F8881998192 -:103230000E94BD1E009731F0998388831B830A8307 -:1032400081E001C080E0DF91CF911F910F9108953F -:10325000CF93DF93EC0188819981892B29F08A81B2 -:103260009B818617970760F4CE010E940E19882370 -:1032700041F08C819D81892B19F4E881F9811082BC -:1032800081E0DF91CF910895EF92FF920F931F930A -:10329000CF93DF93EC017B018A01BA010E942819C8 -:1032A000811104C0CE010E94FC1807C01D830C834D -:1032B000B701888199810E94E71FCE01DF91CF91EC -:1032C0001F910F91FF90EF900895FC0111821082E1 -:1032D00013821282158214826115710559F0FB0167 -:1032E00001900020E9F7AF0141505109461B570BEF -:1032F0000C94441908950F931F93CF93DF938C017F -:10330000EB01FC0180819181009799F0428153810A -:103310002C813D814217530750F0688179810E94CA -:10332000E71F8C819D81F8019583848313C00E94DF -:103330002E1E88819981F801918380838A819B81E7 -:10334000938382838C819D819583848319821882E3 -:103350001B821A821D821C82DF91CF911F910F91D7 -:103360000895CF93DF93EC018617970711F00E9421 -:103370007B19CE01DF91CF910895CF93DF93EC01BC -:103380006115710561F0FB0101900020E9F7AF01C3 -:1033900041505109461B570B0E94441902C00E941C -:1033A000FC18CE01DF91CF9108950F931F93CF9317 -:1033B000DF93CDB7DEB729970FB6F894DEBF0FBE07 -:1033C000CDBF8C01862FF8011182108213821282E8 -:1033D0001582148250E0BE016F5F7F4F90E00E9423 -:1033E0004A20BE016F5F7F4FC8010E94BD19299618 -:1033F0000FB6F894DEBF0FBECDBFDF91CF911F9106 -:103400000F9108950F931F93CF93DF93CDB7DEB73E -:1034100062970FB6F894DEBF0FBECDBF8C01CB0113 -:10342000F80111821082138212821582148250E0F8 -:10343000BE016F5F7F4F0E941720BE016F5F7F4FFD -:10344000C8010E94BD1962960FB6F894DEBF0FBE88 -:10345000CDBFDF91CF911F910F910895EF92FF9211 -:103460000F931F93CF93DF93EC017B010C811D81A0 -:103470006115710511F480E016C04115510591F0F8 -:10348000040F151FB8010E9428198823A1F3288171 -:1034900039818C819D81B701820F931F0E94E71FA4 -:1034A0001D830C8381E0DF91CF911F910F91FF90DD -:1034B000EF900895FB0144815581608171810C94E6 -:1034C0002E1A6115710559F0FB0101900020E9F7F2 -:1034D000AF0141505109461B570B0C942E1A80E046 -:1034E0000895CF93DF9300D0CDB7DEB769831A82FA -:1034F00041E050E0BE016F5F7F4F0E942E1A0F9097 -:103500000F90DF91CF910895EF92FF920F931F9349 -:10351000CF93DF9300D000D0CDB7DEB77C01862FEC -:103520004AE08E010F5F1F4FB80190E00E942220F9 -:10353000F80101900020E9F7AF0141505109401B0B -:10354000510BB801C7010E942E1A0F900F900F90D7 -:103550000F90DF91CF911F910F91FF90EF90089501 -:10356000EF92FF920F931F93CF93DF93CDB7DEB708 -:1035700028970FB6F894DEBF0FBECDBF7C01CB01FC -:103580004AE08E010F5F1F4FB8010E942220F80110 -:1035900001900020E9F7AF0141505109401B510B48 -:1035A000B801C7010E942E1A28960FB6F894DEBF04 -:1035B0000FBECDBFDF91CF911F910F91FF90EF9084 -:1035C0000895FC01248135816217730748F48081D6 -:1035D0009181009729F0FC01E60FF71F8081089583 -:1035E00080E008950C94E11A0F931F93CF93DF931B -:1035F000EB0141155105E9F02097D9F0FC016481F8 -:10360000758126173707A0F4621B730B8A010150DE -:1036100011096017710708F48B01FC016081718149 -:10362000620F731FA801CE010E94EE1FC00FD11FB1 -:103630001882DF91CF911F910F910895CF93DF935F -:10364000FC01848195814817590778F4C081D181A4 -:10365000FB0160817181CE01840F951F0E94FD1FC7 -:10366000009719F08C1B9D0B02C08FEF9FEFDF912D -:10367000CF910895BF92CF92DF92EF92FF920F9376 -:103680001F93CF93DF936C017B01EA01890124171B -:10369000350720F48D2FE901042F182F67E072E021 -:1036A000C6010E946519D70114968D919C911597BA -:1036B000C817D907C8F48017910708F48C01D701FF -:1036C000ED91FC911197E00FF11FB08010826D9188 -:1036D0007C916C0F7D1FC6010E94BD19D701ED9131 -:1036E000FC91E00FF11FB082C601DF91CF911F91D5 -:1036F0000F91FF90EF90DF90CF90BF900895FC0165 -:1037000080819181009711F00C94A51F60E070E01A -:10371000CB01089508955058BB27AA270ED009C1A0 -:10372000FAD030F0FFD020F031F49F3F11F41EF4B6 -:10373000EFC00EF4E095E7FBE5C0E92F0BD180F375 -:10374000BA17620773078407950718F071F49EF59E -:1037500023C10EF4E0950B2EBA2FA02D0B01B90159 -:1037600090010C01CA01A0011124FF27591B99F0F7 -:10377000593F50F4503E68F11A16F040A22F232F03 -:10378000342F4427585FF3CF469537952795A79553 -:10379000F0405395C9F77EF41F16BA0B620B730BFA -:1037A000840BBAF09150A1F0FF0FBB1F661F771F6B -:1037B000881FC2F70EC0BA0F621F731F841F48F420 -:1037C000879577956795B795F7959E3F08F0B3CFA6 -:1037D0009395880F08F09927EE0F97958795089590 -:1037E00004D06894B111D9C00895BCD088F09F5717 -:1037F00090F0B92F9927B751A0F0D1F0660F771F3D -:10380000881F991F1AF0BA95C9F712C0B13081F01C -:10381000C3D0B1E00895C0C0672F782F8827B85F64 -:1038200039F0B93FCCF3869577956795B395D9F77D -:103830003EF490958095709561957F4F8F4F9F4F87 -:103840000895E89409C097FB3EF490958095709593 -:1038500061957F4F8F4F9F4F9923A9F0F92F96E9DC -:10386000BB279395F695879577956795B795F11151 -:10387000F8CFFAF4BB0F11F460FF1BC06F5F7F4FEE -:103880008F4F9F4F16C0882311F096E911C0772300 -:1038900021F09EE8872F762F05C0662371F096E809 -:1038A000862F70E060E02AF09A95660F771F881FD8 -:1038B000DAF7880F9695879597F90895990F00087C -:1038C000550FAA0BE0E8FEEF16161706E807F907F2 -:1038D000C0F012161306E407F50798F0621B730B8D -:1038E000840B950B39F40A2661F0232B242B252B0E -:1038F00021F408950A2609F4A140A6958FEF811DB1 -:10390000811D089597F99F6780E870E060E0089551 -:103910009FEF80EC089500240A94161617061806E7 -:103920000906089500240A941216130614060506C3 -:103930000895092E0394000C11F4882352F0BB0F54 -:1039400040F4BF2B11F460FF04C06F5F7F4F8F4FB7 -:103950009F4F089557FD9058440F551F59F05F3FF2 -:1039600071F04795880F97FB991F61F09F3F79F0A1 -:1039700087950895121613061406551FF2CF469523 -:10398000F1DF08C0161617061806991FF1CF8695A5 -:103990007105610508940895E894BB276627772789 -:1039A000CB0197F908958ADF08F48FEF08950BD0C3 -:1039B000C0CFB1DF28F0B6DF18F0952309F0A2CF11 -:1039C000A7CF1124EACFC6DFA0F3959FD1F3950FBF -:1039D00050E0551F629FF001729FBB27F00DB11D93 -:1039E000639FAA27F00DB11DAA1F649F6627B00D23 -:1039F000A11D661F829F2227B00DA11D621F739F0C -:103A0000B00DA11D621F839FA00D611D221F749F19 -:103A10003327A00D611D231F849F600D211D822F60 -:103A2000762F6A2F11249F5750408AF0E1F08823A7 -:103A30004AF0EE0FFF1FBB1F661F771F881F9150B4 -:103A40005040A9F79E3F510570F05CCFA6CF5F3F75 -:103A5000ECF3983EDCF3869577956795B795F795E7 -:103A6000E7959F5FC1F7FE2B880F911D969587956F -:103A700097F90895991B79E004C0991F961708F0EB -:103A8000961B881F7A95C9F780950895AA1BBB1BC2 -:103A900051E107C0AA1FBB1FA617B70710F0A61B4E -:103AA000B70B881F991F5A95A9F780959095BC016F -:103AB000CD01089597FB072E16F4009407D077FDEB -:103AC00009D00E94461D07FC05D03EF490958195D3 -:103AD0009F4F0895709561957F4F0895A1E21A2E2A -:103AE000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FA2 -:103AF000A217B307E407F50720F0A21BB30BE40BF2 -:103B0000F50B661F771F881F991F1A9469F7609538 -:103B10007095809590959B01AC01BD01CF010895F2 -:103B2000EE0FFF1F0590F491E02D0994CF93DF93E2 -:103B30008230910510F482E090E0E091A904F091C8 -:103B4000AA0420E030E0A0E0B0E0309739F14081F5 -:103B5000518148175907B8F04817590771F4828105 -:103B60009381109729F013969C938E9312972CC0F3 -:103B70009093AA048093A90427C02115310531F040 -:103B80004217530718F0A901DB0101C0EF019A01A8 -:103B9000BD01DF010280F381E02DD7CF2115310572 -:103BA000F9F0281B390B2430310580F48A819B8180 -:103BB0006115710521F0FB019383828304C090930A -:103BC000AA048093A904FE01329644C0FE01E20FCC -:103BD000F31F8193919322503109398328833AC08E -:103BE0002091A7043091A804232B41F420910201D5 -:103BF000309103013093A8042093A7042091000181 -:103C0000309101012115310541F42DB73EB74091A6 -:103C1000040150910501241B350BE091A704F0919C -:103C2000A804E217F307A0F42E1B3F0B281739074F -:103C300078F0AC014E5F5F4F2417350748F04E0F08 -:103C40005F1F5093A8044093A7048193919302C0EF -:103C5000E0E0F0E0CF01DF91CF910895CF93DF93C3 -:103C6000009709F487C0FC01329713821282C09139 -:103C7000A904D091AA04209781F420813181280FD2 -:103C8000391F8091A7049091A8048217930779F5B2 -:103C9000F093A804E093A7046DC0DE0120E030E0BB -:103CA000AE17BF0750F412964D915C9113979D018A -:103CB0004115510509F1DA01F3CFB383A2834081A5 -:103CC0005181840F951F8A179B0771F48D919C91E8 -:103CD0001197840F951F02969183808312968D9180 -:103CE0009C911397938382832115310529F4F093D6 -:103CF000AA04E093A9043EC0D9011396FC93EE9365 -:103D000012974D915D91A40FB51FEA17FB0779F447 -:103D100080819181840F951F0296D90111969C9301 -:103D20008E938281938113969C938E931297E0E0F9 -:103D3000F0E08A819B81009719F0FE01EC01F9CF38 -:103D4000CE01029628813981820F931F2091A7040A -:103D50003091A8042817390769F4309729F4109294 -:103D6000AA041092A90402C013821282D093A8045C -:103D7000C093A704DF91CF910895A0E0B0E0E3ECF9 -:103D8000FEE10C943323EC01CB01209719F40E943F -:103D9000961DB8C0FE01E60FF71F9E0122503109A3 -:103DA000E217F30708F4ACC0D9010D911C911197EB -:103DB00006171707B8F00530110508F49FC0A801D1 -:103DC000445051094617570708F498C0025011098A -:103DD000061B170B019311936D937C93CF010E94E7 -:103DE0002E1E8CC05B01A01AB10A4E01800E911EDE -:103DF000A091A904B091AA04612C712C60E070E03C -:103E0000109709F449C0A815B905C9F5ED90FC90C3 -:103E10001197670142E0C40ED11CCA14DB0478F18B -:103E200047018A189B08640142E0C40ED11C129617 -:103E3000BC9012971396AC91B5E0CB16D10440F02C -:103E4000B282A38391828082D9018D939C9309C011 -:103E50000E5F1F4F0E0D1F1DF90111830083EB2D07 -:103E6000FA2F6115710531F0DB011396FC93EE9387 -:103E7000129744C0F093AA04E093A9043FC06D9147 -:103E80007C9111976616770608F43B01BD011296E6 -:103E90000D90BC91A02DB4CF6091A7047091A8049F -:103EA00068157905E9F468167906D0F440910001A7 -:103EB000509101014115510541F44DB75EB7609134 -:103EC000040170910501461B570BE417F507C0F478 -:103ED000F093A804E093A704F901918380830EC0B6 -:103EE0000E94961D7C01009759F0A801BE010E9416 -:103EF000CC1FCE010E942E1EC70104C0CE0102C0FD -:103F000080E090E0CDB7DEB7EEE00C944F23FC01EB -:103F100088279927E89421912032E9F3293010F07D -:103F20002E30C8F32B3241F02D3239F4689404C09E -:103F30000E944220820F911D219120532A30C0F30C -:103F40001EF4909581959F4F08951F93FC0199272A -:103F50008827BC01E89411911032E9F3193010F070 -:103F60001E30C8F31B3251F01D3249F4689406C06C -:103F70000E942D20610F711D811D911D1191105303 -:103F80001A30B0F33EF490958095709561957F4F0F -:103F90008F4F9F4F1F910895FB01DC0102C00190DC -:103FA0000D9241505040D8F708956817790768F48A -:103FB000FB01DC01E40FF51FA40FB51F02C0029046 -:103FC0000E9241505040D8F708950C94CC1FFB013D -:103FD000DC0101900D920020E1F70895FB01DC0166 -:103FE0004150504048F001900D920020C9F701C0A7 -:103FF0001D9241505040E0F70895FB015191552327 -:10400000A9F0BF01DC014D9145174111E1F759F4C9 -:10401000CD010190002049F04D9140154111C9F3A7 -:10402000FB014111EFCF81E090E001970895453207 -:10403000510520F4423010F00C942220FB01108234 -:10404000CB010895BB274A3031F4992322F4BDE215 -:10405000909581959F4F0C945620592F482F372FBC -:10406000262F660F771F881F991F660F771F881FDF -:10407000991F620F731F841F951F660F771F881F7C -:10408000991F08957AE0979F902D879F802D910D1D -:10409000112408954532510520F4423010F00C945B -:1040A0005520FB011082CB010895BB27FB0155274A -:1040B000AA27880F991FAA1FA41710F0A41B839585 -:1040C0005051B9F7A05DAA3308F0A95DA1930097FC -:1040D00079F7B111B1931192CB010C948F22AEE01C -:1040E000B0E0E5E7F0E20C943D230D891E8986E0FF -:1040F0008C831A8309838FEF9FE79E838D83AE01A4 -:10410000475E5F4F6F89788DCE0101960E949120A6 -:10411000EF81F885E00FF11F10822E96E4E00C94F9 -:104120005923ACE0B0E0E7E9F0E20C942F237C01E6 -:104130006B018A01FC0117821682838181FFBDC158 -:10414000CE0101964C01F7019381F60193FD859113 -:1041500093FF81916F01882309F4ABC1853239F453 -:1041600093FD859193FF81916F01853229F4B70109 -:1041700090E00E949F22E7CF512C312C20E020328A -:10418000A0F48B3269F030F4803259F0833269F454 -:1041900020612CC08D3239F0803339F4216026C083 -:1041A0002260246023C0286021C027FD27C030ED95 -:1041B000380F3A3078F426FF06C0FAE05F9E300DE3 -:1041C0001124532E13C08AE0389E300D1124332E53 -:1041D00020620CC08E3221F426FD6BC1206406C023 -:1041E0008C3611F4206802C0883641F4F60193FD44 -:1041F000859193FF81916F018111C1CF982F9F7D90 -:104200009554933028F40C5F1F4FFFE3F9830DC0E2 -:10421000833631F0833771F0833509F05BC022C0FB -:10422000F801808189830E5F1F4F44244394512CF1 -:10423000540115C03801F2E06F0E711CF801A08026 -:10424000B18026FF03C0652D70E002C06FEF7FEFE5 -:10425000C5012C870E9484222C0183012C852F7795 -:10426000222E17C03801F2E06F0E711CF801A080F9 -:10427000B18026FF03C0652D70E002C06FEF7FEFB5 -:10428000C5012C870E9479222C012C852068222EC2 -:10429000830123FC1BC0832D90E048165906B0F41F -:1042A000B70180E290E00E949F223A94F4CFF5019A -:1042B00027FC859127FE81915F01B70190E00E9464 -:1042C0009F2231103A94F1E04F1A510841145104E1 -:1042D00071F7E5C0843611F0893639F5F80127FF0A -:1042E00007C060817181828193810C5F1F4F08C07C -:1042F00060817181882777FD8095982F0E5F1F4F11 -:104300002F76B22E97FF09C0909580957095619594 -:104310007F4F8F4F9F4F2068B22E2AE030E0A401DC -:104320000E94D122A82EA81844C0853729F42F7ED8 -:10433000B22E2AE030E025C0F22FF97FBF2E8F3653 -:10434000C1F018F4883579F0B4C0803719F0883797 -:1043500021F0AFC02F2F2061B22EB4FE0DC08B2DE7 -:104360008460B82E09C024FF0AC09F2F9660B92E22 -:1043700006C028E030E005C020E130E002C020E1C6 -:1043800032E0F801B7FE07C06081718182819381BC -:104390000C5F1F4F06C06081718180E090E00E5F6E -:1043A0001F4FA4010E94D122A82EA818FB2DFF7731 -:1043B000BF2EB6FE0BC02B2D2E7FA51450F4B4FEDD -:1043C0000AC0B2FC08C02B2D2E7E05C07A2C2B2DE6 -:1043D00003C07A2C01C0752C24FF0DC0FE01EA0D2C -:1043E000F11D8081803311F4297E09C022FF06C0AF -:1043F0007394739404C0822F867809F0739423FD1C -:1044000013C020FF06C05A2C731418F4530C57180D -:10441000732C731468F4B70180E290E02C870E943B -:104420009F2273942C85F5CF731410F4371801C0B4 -:10443000312C24FF12C0B70180E390E02C870E944A -:104440009F222C8522FF17C021FF03C088E590E042 -:1044500002C088E790E0B7010CC0822F867859F03F -:1044600021FD02C080E201C08BE227FD8DE2B70191 -:1044700090E00E949F22A51438F4B70180E390E0F9 -:104480000E949F225A94F7CFAA94F401EA0DF11DDD -:104490008081B70190E00E949F22A110F5CF3320C8 -:1044A00009F451CEB70180E290E00E949F223A9435 -:1044B000F6CFF7018681978102C08FEF9FEF2C9690 -:1044C000E2E10C944B23F999FECF92BD81BDF89A9D -:1044D000992780B50895262FF999FECF1FBA92BD6E -:1044E00081BD20BD0FB6F894FA9AF99A0FBE0196D5 -:1044F0000895FC010590615070400110D8F7809537 -:1045000090958E0F9F1F0895FC016150704001909F -:104510000110D8F7809590958E0F9F1F0895DC01AC -:10452000FC01672F71917723E1F7329704C07C91EA -:104530006D9370836291AE17BF07C8F308950F9310 -:104540001F93CF93DF93182F092FEB018B8181FDF0 -:1045500003C08FEF9FEF20C082FF10C04E815F81AC -:104560002C813D81421753077CF4E881F9819F013A -:104570002F5F3F4F39832883108306C0E885F98574 -:10458000812F0995892B29F72E813F812F5F3F4F7E -:104590003F832E83812F902FDF91CF911F910F9119 -:1045A0000895FA01AA27283051F1203181F1E894C9 -:1045B0006F936E7F6E5F7F4F8F4F9F4FAF4FB1E016 -:1045C0003ED0B4E03CD0670F781F891F9A1FA11D11 -:1045D000680F791F8A1F911DA11D6A0F711D811D12 -:1045E000911DA11D20D009F468943F912AE0269FD7 -:1045F00011243019305D3193DEF6CF010895462F36 -:104600004770405D4193B3E00FD0C9F7F6CF462F16 -:104610004F70405D4A3318F0495D31FD405241937F -:1046200002D0A9F7EACFB4E0A6959795879577953C -:104630006795BA95C9F700976105710508959B01C3 -:10464000AC010A2E06945795479537952795BA954C -:10465000C9F7620F731F841F951FA01D08952F9225 -:104660003F924F925F926F927F928F929F92AF9202 -:10467000BF92CF92DF92EF92FF920F931F93CF934F -:10468000DF93CDB7DEB7CA1BDB0B0FB6F894DEBFE6 -:104690000FBECDBF09942A88398848885F846E840C -:1046A0007D848C849B84AA84B984C884DF80EE8056 -:1046B000FD800C811B81AA81B981CE0FD11D0FB65F -:1046C000F894DEBF0FBECDBFED01089510E0CCEE33 -:1046D000D0E004C0FE010E94921D2296CE3ED1077A -:0646E000C9F7F894FFCFBA -:1046E6000000AB0480002C01066C136C133B0049E0 -:1046F60054506172616D733A20004F4B005620335F -:104706002E322E302D623132205349474E414C64B1 -:1047160075696E6F202D20636F6D70696C656420FE -:1047260061742046656220313320323031362032C2 -:10473600313A33383A33340053796E633A200020E5 -:104746002D3E2053796E63466163743A20002C2017 -:10475600436C6F636B3A20002C20546F6C3A200038 -:104766002C20506174744C656E3A20002C205075D4 -:104776006C73653A20002C20002C206D53746172F6 -:10478600743A20005369676E616C3A20002E20004F -:10479600205B005D005061747465726E3A200020E3 -:1047A60050002A5B002C0025303258004C4C3D004E -:1047B6004C483D00534C3D0053483D00433D004DA1 -:1047C6005300443D0043503D0053503D004F004DC3 -:1047D60055004D430000000000E8155E176A15837A -:1047E600157515C6150D0A006E616E00696E6600B8 -:0647F6006F7666002E0044 +:1000D00003030301020408102040800102040810F9 +:1000E0002001020408102000CB18BF1811241FBEE5 +:1000F000CFEFD8E0DEBFCDBF11E0A0E0B1E0E0EC93 +:10010000F3E402C005900D92AC39B107D9F724E0B1 +:10011000ACE9B1E001C01D92A435B207E1F710E0EF +:10012000C5E7D0E004C02197FE010E94B419C4378E +:10013000D107C9F70E949D110C94D3210C940000A3 +:100140000E949E1B2F923F924F925F926F927F92DE +:100150008F929F92AF92BF92CF92DF92EF92FF92D7 +:100160000F931F93CF93DF93CDB7DEB7AF970FB643 +:10017000F894DEBF0FBECDBF8091E703811106C0AA +:100180008091B103883210F40C94E7091092B40303 +:1001900060E080E00E94E70F8090D803882D90E017 +:1001A0009C01215031093E8F2D8F8091C403909185 +:1001B000C503A091C603B091C7038F8B988FA98FF9 +:1001C000BA8F9091B1039B8FF12C8F2D90E0ED8D24 +:1001D000FE8D8E179F070CF0AFC0FC01E955FD4F57 +:1001E0009F012C5F3F4F4481442309F4A3C0EE24B8 +:1001F000E394EF0C880F991FDC01A853BC4FBA8B16 +:10020000A98B3E8B2D8BE81408F094C02E2C312C3A +:10021000F101E955FD4F9480992009F489C0E989DD +:10022000FA89A080B180F101EE0FFF1FE853FC4F67 +:1002300000811181C8018A259B25990F880B982F71 +:10024000892B09F075C0B80117FF04C0662777270E +:10025000601B710B072E000C880B990B0E945A2013 +:100260002F89388D498D5A8D0E94B9202B013C0170 +:100270006801CA18DB08D7FE03C0D194C194D10825 +:1002800020E030E040E05FE3C301B2010E94B9200A +:100290009B01AC01C301B2010E94BB190E94991AD3 +:1002A0006C157D050CF444C0E3EBF2E08E2F23EBDC +:1002B00032E0821B3B8D831730F480818E1101C0A8 +:1002C000F0823196F3CFAD89BE89DC90492D50E0A4 +:1002D000ED2DF0E09F01D5010E94AD19049F900122 +:1002E000059F300D149F300D11248901330F220B0F +:1002F000330B600F711F821F931FE40FF51F9F01C7 +:10030000FF0F440B550B0E948E19E989FA8931833E +:1003100020839D0CAD89BE899C92F101E955FD4F6A +:100320001482F101EE0FFF1FE853FC4F118210827F +:10033000E39469CFF39449CF60E080E00E94E70F37 +:100340008FEF8093A7026090D8037090B10358ECB0 +:10035000C52E53E0D52E00E010E0EE24EA94FE2CEA +:10036000872C912CA12CB12C061508F059C0FFEF59 +:10037000EF16FF0611F5D6018D919C9197FD1DC0DA +:10038000F801E955FD4F648170E080E090E00E9443 +:100390005A201B012C01C501B4010E945A202BE7F1 +:1003A00034E14EE25EE30E94B9209B01AC01C20140 +:1003B000B1010E94CF1A181664F1F6018081918173 +:1003C00097FD28C0F701EE0FFF1FE853FC4F208177 +:1003D000318182179307F4F4F801E955FD4F6481E8 +:1003E00070E080E090E00E945A201B012C01C501C2 +:1003F000B4010E945A202BE734E14EE25EE30E94F2 +:10040000B9209B01AC01C201B1010E94CF1A18169C +:100410000CF478010F5F1F4FF2E0CF0ED11CA4CF78 +:100420002FEFE216F20641F0E092A70281E090E0A1 +:100430009093BB038093BA038091BA039091BB035E +:10044000019709F074C04FEF460DE091A7020E2E00 +:10045000000CFF0B072D10E0480131E0831A9108D2 +:10046000CF01880F991FDC01A853BC4F7D0137E0F5 +:10047000632E085211094F3F09F457C0C42E042EB1 +:10048000000CDD08D601AA0FBB1FA853BC4F2D914D +:100490003C9137FF48C03195219531092836B2E4A7 +:1004A0003B070CF040C0D701AD90BC90C901B5012D +:1004B0000E94441968327105B0F56A9CC0016B9CBA +:1004C000900D11248217930770F5D601A955BD4FE1 +:1004D00014968C918250863030F550E0852F90E054 +:1004E0008815990584F4DC01A955BD4F1D962C9102 +:1004F0001D9730E02C153D05A1F41C962C9130E0A1 +:100500002E173F0771F4801791076CF44093DA03BC +:1005100082E090E09093BB038093BA035093B203C0 +:1005200006C05F5FDBCF4150A6CF4093DA038091D6 +:10053000AA02882309F427C18091BA039091BB03D2 +:10054000029709F020C1B7E2B71508F01CC18091ED +:10055000B20392E0980F9093B3036091DA03062EF2 +:10056000000C770BA091A7020A2E000CBB0B472DA5 +:1005700050E041505109292F30E024173507A4F4E9 +:10058000F901E955FD4F258530E02617370751F46D +:10059000248530E02A173B0729F491509093B30348 +:1005A00011E005C09E5FE7CF9093B30310E09091F8 +:1005B000B303791610F47092B3036091B3030E94F1 +:1005C000E70F112351F08091B30390E02091B20323 +:1005D000821B9109889734F4CFC08091B1038E3F7C +:1005E00008F0B8C066E671E08BED93E00E941C1144 +:1005F00066E671E081EE93E00E941C1162E08BEDF3 +:1006000093E00E94CF1067E671E08BED93E00E94CB +:10061000E2106BE38BED93E00E94CF1010E080912D +:10062000D803181778F5212F30E0C901880F991FDA +:10063000FC01E853FC4F7F0180819181892B01F1FE +:10064000F901E955FD4F84818823D1F060E58BEDF8 +:1006500093E00E94CF10812F0E94C10F65E971E0E5 +:100660008BED93E00E94E210D7016D917C918BEDB0 +:1006700093E00E949F106BE38BED93E00E94CF10FC +:100680001F5FCDCF6AE671E08BED93E00E94E21030 +:100690006BE381EE93E00E94CF106DE671E081EE96 +:1006A00093E00E94E2106091A702062E000C770BE7 +:1006B00081EE93E00E949F106BE381EE93E00E9435 +:1006C000CF1061E771E081EE93E00E94E21060914B +:1006D000DA03062E000C770B81EE93E00E949F1048 +:1006E0006BE381EE93E00E94CF108091B6038823E4 +:1006F00059F065E771E081EE93E00E94E2106BE350 +:1007000081EE93E00E94CF1063E081EE93E00E94BF +:10071000CF106AE081EE93E00E94CF100091B30306 +:100720001091B2038BED93E00E94B60E011768F0B2 +:10073000E12FF0E0E955FD4F648570E080E090E046 +:100740004AE00E94E70E1F5FF1CF81EE93E00E9426 +:10075000B60E16C06091B203623070F08091B303A0 +:1007600090E08D3F910544F087EA92E00E94FC0DF5 +:1007700081E08093B50307C087EA92E00E94BD0D37 +:1007800081E08093B4038091B403811120C68091ED +:10079000A802811105C08091A902882309F417C617 +:1007A00066E671E08BED93E00E941C1166E671E055 +:1007B00081EE93E00E941C1162E08BED93E00E94B9 +:1007C000CF10B091A902BF8BBB2309F453C5809110 +:1007D000F301811148C082E38093E70181E08093B7 +:1007E000E4011092E5018FEA91E00E94AD0D809145 +:1007F000E40127E030E0281B31099091E50187E012 +:1008000061E070E0482F50E0241735074CF4AB014D +:10081000082E01C0440F0A94EAF7942B8150F2CFBE +:100820009093E5018FEF8093EA018093EB01809331 +:10083000EC018093ED011092F1011092F20187EA30 +:1008400092E09093E9018093E8011092EF011092F9 +:10085000EE0184E18093F0018FEA91E00E94AD0DFA +:1008600081E08093F3018091E70381111BC08FEF3A +:100870008093EA018093EB018093EC018093ED017A +:100880001092F1011092F2011092EF011092EE011C +:1008900084E18093F0018FEA91E00E94AD0D81E147 +:1008A0008093F0018091E703882381F08091E80133 +:1008B0009091E901FC01E25FFE4F108233971082B4 +:1008C000E12C912CF12CCC24C394D1C12090E801CF +:1008D0003090E901F101EF5CFE4F1081143008F413 +:1008E000BEC4B797608170E080E090E00E945A201B +:1008F0002AE037ED43E25DE30E94B9206B017C0101 +:1009000020E030E0A9010E94CF1A20E030E040E072 +:100910005FE387FD05C0C701B6010E94BB1904C093 +:10092000C701B6010E94BA190E94991A7101E4E048 +:10093000EE0EF11CD101AF5DBE4FC12C40E0F701BE +:1009400081917F01861758F15C2D852F90E055230A +:10095000F1F0FE01E80FF91F70819101270F311DA1 +:10096000270F311DF901EF5DFE4F2D913C9111973D +:100970000190F081E02D2E173F074CF4E1E0F0E00C +:10098000EC0FFD1FE80FF91F70835150DECFE1E03F +:10099000F0E0EC0FFD1FE80FF91F4083C3944F5F99 +:1009A00012964113CCCF1091EA010091EC01E09036 +:1009B000EB01F090ED019E012F5F3F4F388B2F87A9 +:1009C0003E8F2D8F5F855DA7C101865F9E4F9FA7DC +:1009D0008EA78D8D2F85821B8C1508F091C0AD8D53 +:1009E000BE8D2D91BE8FAD8FC101820F911D820FE3 +:1009F000911DFC01EF5DFE4F208131813C8F2B8FDB +:100A00001216130634F7220F331F38A72FA3AE0197 +:100A10004F5F5F4F5CA34BA31FEF0FEFEE24EA94F1 +:100A2000FF24FA941A8A198A19A21AA28FEF9FEF4B +:100A30009E8B8D8B2B8D3C8D032E000C440B550B08 +:100A400029A73AA74BA75CA78BA1FDA58F1B8C15E7 +:100A500008F0BFCFABA1BCA1DD90BCA3ABA3ED2D33 +:100A6000F0E0F8A3EF8FEE0FFF1FE20DF31DEF5D37 +:100A7000FE4F8080918069A57AA58BA59CA50E94D8 +:100A80005A202B013C019EA28DA297FE06C0222770 +:100A90003327281939093EA32DA3AB8CBC8C4DA15B +:100AA0005EA1A41AB50AB7FE03C0B194A194B1081F +:100AB00020E030E040E05FE3C301B2010E94B920D2 +:100AC0000E94991A6A157B050CF046C3AFA0B8A422 +:100AD0008DA19EA1A81AB90AB7FE03C0B194A19432 +:100AE000B1082DEC3CEC4CE45FE3C301B2010E9481 +:100AF000B9200E94991A6A157B050CF071C4A4CF25 +:100B0000F092ED01E092EB010093EC011093EA0109 +:100B1000A6C3D394D71408F0E5C0F801ED0DF11D7C +:100B2000848590E08417950709F0F3C48F8862E00C +:100B300070E0260E371E882061F3DF10FDC4DD2033 +:100B400009F4FAC443859801240F311D240F311D87 +:100B5000F901EF5DFE4F20813181B90137FF04C0FB +:100B600066277727621B730B61304DE774070CF023 +:100B7000E3C4880F991F800F911FFC01EF5DFE4FAA +:100B80008081918182279327990F880B982F892B39 +:100B900009F4D2C4072E000C880B990B0E945A202E +:100BA0002B013C016091EE017091EF01072E000CCA +:100BB000880B990B0E945A20698B7A8B8B8B9C8BAC +:100BC0009B01AC01C301B2010E94271A4B015C01D9 +:100BD00020E030E0A9010E94CF1A20E030E040E0A0 +:100BE0005FE387FD9AC4C501B4010E94BB190E944E +:100BF000991A623071050CF49FC4072E000C880B03 +:100C0000990B0E945A2029893A894B895C890E9454 +:100C1000B9209B01AC01C301B2010E94271A9B01BC +:100C2000AC0160E070E080E89FE30E94BA194B01DC +:100C30005C0120E030E0A9010E94CF1A18160CF0E8 +:100C400071C429E23CE54FE85DE3C501B4010E94AF +:100C5000532018160CF470C4F801E55FFE4F808134 +:100C600081508083FF24F394FD0C99249394009188 +:100C7000E8011091E901F801E65FFE4F9081F91655 +:100C800008F081C08091F10181112CC0F801EF0DB5 +:100C9000F11D848590E04091EA01042E000C550B73 +:100CA000A091EC012091EB01A090ED018417950734 +:100CB00009F418C4622F022E000C770B86179707D1 +:100CC00009F410C46A2F0A2E000C770B86179707B9 +:100CD00009F408C46A2D0A2C000C770B86179707B5 +:100CE00009F400C48091F201882309F44AC080917C +:100CF000F101882309F445C0AF2CB12CF801EA0DAD +:100D0000FB1D848590E02091EC01022E000C330B3A +:100D10008217930709F46FC32091ED01022E000C96 +:100D2000330B8217930709F466C32091EA01022E60 +:100D3000000C330B8217930709F4B7C32091EB0122 +:100D4000022E000C330B8217930709F4AEC3809177 +:100D5000F001082E000C990B2091E2013091E30183 +:100D60002817390708F04DC01092F1011092F201D6 +:100D70008FEA91E00E94AD0D912C8091F1018111DB +:100D80003DC3F39474CFD801A45FBE4F81E0982691 +:100D90008F2D89198C932EEFF21249C09E3F09F0D6 +:100DA00046C011976C916230F0F08091F00187FDA0 +:100DB0008F5F8595082E000C990B2091E2013091F0 +:100DC000E3018217930778F4C8010E94FC0D80911B +:100DD000E8019091E901FC01E25FFE4F21E02083F0 +:100DE000F29620833CC28C91811121C0D801A05C75 +:100DF000BE4F81E08C931082F801E25FFE4F80834A +:100E00002EC2F801E45FFE4FEE24E3949E248F2D62 +:100E1000891980836F2DC8010E94FC0DE091E801C3 +:100E2000F091E901E25FFE4FE0821092F1018091C2 +:100E3000F001082E000C990B2091E2013091E301A2 +:100E40002817390708F40BC266E671E0CE0109964F +:100E50000E9442116AE671E0CE0109960E941C11BF +:100E600080E390E3A0E089839A83AB836091E20101 +:100E70007091E30176956795769567956E5F7F4FE4 +:100E8000CE0109960E944A10D12C8E010F5F1F4F90 +:100E900067E7A62E61E0B62E4091E10150E02D2DCE +:100EA00030E08091E701ED2C0D2C000CFF0890E064 +:100EB00024173507F4F4E816F9062CF4F701E15588 +:100EC000FE4F808101C08FEF1F928F93BF92AF9230 +:100ED0001F930F930E94EE1BB801CE0109960E944A +:100EE000E210D3940F900F900F900F900F900F90EF +:100EF000D3CFE816F9062CF4F701E155FE4F8081B7 +:100F000001C08FEF82958F701F928F938CE791E0D5 +:100F10009F938F931F930F930E94EE1BB801CE01F6 +:100F200009960E94E2108091E2019091E30187709E +:100F3000992701970F900F900F900F900F900F909F +:100F4000049710F18091E70190E0E816F9062CF47F +:100F5000F701E155FE4F808101C08FEF8F701F9226 +:100F60008F938CE791E09F938F931F930F930E9431 +:100F7000EE1BB801CE0109960E94E2100F900F906F +:100F80000F900F900F900F9061E871E08BED93E060 +:100F90000E94E2106BE38BED93E00E94CF1060E2C1 +:100FA00070E08BED93E00E944A108BED93E0009788 +:100FB00009F472C064E871E00E94E2108091E801D7 +:100FC0009091E901E091EA01EE0FFF0BE80FF91FA4 +:100FD000EF5DFE4F608171818BED93E00E949F1069 +:100FE0006BE38BED93E00E94CF1068E871E08BED2E +:100FF00093E00E94E2108091E8019091E901E09174 +:10100000EB01EE0FFF0BE80FF91FEF5DFE4F608164 +:1010100071818BED93E00E949F106BE38BED93E069 +:101020000E94CF106CE871E08BED93E00E94E2101B +:101030008091E8019091E901E091EC01EE0FFF0B46 +:10104000E80FF91FEF5DFE4F608171818BED93E03A +:101050000E949F106BE38BED93E00E94CF1060E93C +:1010600071E08BED93E00E94E2108091E801909195 +:10107000E901E091ED01EE0FFF0BE80FF91FEF5DC5 +:10108000FE4F608171818BED93E00E949F106BE3B6 +:101090008BED93E00E94CF106BE381EE93E00E9412 +:1010A000CF1067E070E081EE93E00E944A1081EE7D +:1010B00093E0009789F064E971E00E94E21060918A +:1010C000EE017091EF0181EE93E00E949F106BE3BF +:1010D00081EE93E00E94CF1065E871E081EE93E02D +:1010E0000E94E2104AE0B8018091E2019091E30190 +:1010F0000E942920F80101900020E9F73197AF0103 +:10110000401B510BB80181EE93E00E9471106BE31C +:1011100081EE93E00E94CF1063E081EE93E00E94A5 +:10112000CF106AE081EE93E00E94CF108BED93E048 +:101130000E94B60ECE0109960E94B60E81EE93E093 +:101140000E94B60E1092E70381E08093B403CE01B3 +:1011500009960E943D118EC0181419040CF0AAC102 +:10116000FD2CEF8DF8A1E20DF31D8481A989BA89C8 +:10117000A80FB11DBA8BA98BBAA1BF5FBAA3ED8925 +:10118000FE89E80DF91DFE8BED8B1F3F09F45CCC49 +:101190000F3F09F459CC5FEFE51609F455CCF5166D +:1011A00009F452CC89889A8897FE03C0919481945F +:1011B0009108092C000CAA08BB08AEA5BFA56C912C +:1011C00070E080E090E00E945A202AE037ED43E290 +:1011D0005DE30E94B9202B013C0120E030E0A90131 +:1011E0000E94CF1A20E030E040E05FE387FDFEC0C0 +:1011F000C301B2010E94BB190E94991A68157905B2 +:101200008A059B050CF4E5CBB9A1EAA1BE13E1CB9D +:101210001E1509F4DECB0F1509F4DBCB101709F40A +:10122000D8CBEF1409F4D5CB1F1509F4D2CBE016B7 +:1012300009F4CFCBF092ED01E092EB010093EC01C9 +:101240001093EA018D899E8966E070E00E9458192A +:101250007093EF016093EE013F89311127CB8091AC +:10126000E703882339F08091B503882319F081E0E2 +:101270008093B4038091A802882309F4A8C08091C8 +:10128000BA039091BB03019709F0A1C08091B40308 +:1012900081119DC08091B103883208F498C067E93C +:1012A00071E08BED93E00E94E2106BE38BED93E035 +:1012B0000E94CF1010E08091D803181788F5212FD5 +:1012C00030E0C901880F991FAC0148535C4F7A0187 +:1012D000DA018D919C91892B09F1F901E955FD4FB6 +:1012E00084818823D9F06AE971E08BED93E00E9454 +:1012F000E210812F0E94C10F65E971E08BED93E050 +:101300000E94E210F701608171818BED93E00E94F1 +:101310009F106BE38BED93E00E94CF101F5FCBCF4C +:101320006AE671E08BED93E00E94E2106BE381EEE0 +:1013300093E00E94CF106DE671E081EE93E00E9491 +:10134000E2106091A702062E000C770B81EE93E06D +:101350000E949F106BE381EE93E00E94CF1080917A +:10136000B603882359F065E771E081EE93E00E94AF +:10137000E2106BE381EE93E00E94CF1063E081EE18 +:1013800093E00E94CF106AE081EE93E00E94CF10BC +:101390000091B10301508BED93E00E94B60E10E076 +:1013A000E12FF0E0E955FD4F648570E080E090E0CA +:1013B0004AE00E94E70E1F5F011790F781EE93E06D +:1013C0000E94B60E1092B50381E08093B403809121 +:1013D000B5038111C6C087EA92E00E94BD0DC1C06D +:1013E000181419040CF07CC0ED2CBBCEC301B20163 +:1013F0000E94BA1901CFE92C9C24BFCCEE2009F43D +:10140000C0CC8091E8019091E901FC01EA0DFB1D3F +:101410002485820F911D820F911DFC01EF5DFE4F0F +:1014200040815181E091E1018091E701E817D8F511 +:101430008091E6012091E2013091E301873051F47F +:101440002115310539F0EF5FE093E101F0E0E1555E +:10145000FE4F1082E091E101F0E0A82FB0E0E155ED +:10146000FE4F61E070E01416150614F060E070E0C5 +:10147000082E01C0660F0A94EAF79081692B6083F9 +:101480002F5F3F4F3093E3012093E2019091E401FD +:10149000A91BB109B7FD04C0891B8093E60103C0F5 +:1014A000E7E0E093E601E12C6CCCEE24E394992490 +:1014B000939463CC0D2DEF8DF8A1E20DF31D848183 +:1014C00029893A89281B31093A8B298B39A13F5F39 +:1014D00039A34D895E89481959095E8B4D8B55CECC +:1014E0001D2DE9CFF801E55FFE4FF082C092F101BA +:1014F000C092F20131977080022E000C330B0A2E3D +:10150000000CBB0B0A2C000CBB08DF2C212C312C4F +:1015100001CB82179307D1F409CBC501B4010E9416 +:10152000BA1965CB29E23CE54FE85DEBC501B40192 +:101530000E94CF1A87FF90CB51E025223324C101AE +:10154000A1E08A27B82FB1709B2ECCCB8A179B07BE +:1015500021F08A159B0509F0C5CB812C61E070E074 +:10156000E8CAAF960FB6F894DEBF0FBECDBFDF91CD +:10157000CF911F910F91FF90EF90DF90CF90BF9090 +:10158000AF909F908F907F906F905F904F903F9023 +:101590002F900895FC01918D828D981761F0828DB6 +:1015A000DF01A80FB11D5D968C91928D9F5F9F7397 +:1015B000928F90E008958FEF9FEF0895FC01918D39 +:1015C000828D981731F0828DE80FF11D858D90E0A6 +:1015D00008958FEF9FEF0895FC01918D228D892F43 +:1015E00090E0805C9F4F821B91098F73992708952B +:1015F00080E092E00E94EC0A21E0892B09F420E0CF +:10160000822F0895FC01848DDF01A80FB11DA35A1C +:10161000BF4F2C91848D90E001968F739927848F12 +:10162000A689B7892C93A089B1898C9180648C9309 +:10163000938D848D981306C00288F389E02D8081F4 +:101640008F7D80830895EF92FF920F931F93CF9326 +:10165000DF93EC0181E0888F9B8D8C8D981305C002 +:10166000E889F989808185FD24C0F62E0B8D10E074 +:101670000F5F1F4F0F731127E02E8C8DE8120CC0E7 +:101680000FB607FCFACFE889F989808185FFF5CF8D +:10169000CE010E94020BF1CF8B8DFE01E80FF11DF0 +:1016A000E35AFF4FF0820B8FEA89FB8980818062C9 +:1016B00007C0EE89FF896083E889F98980818064A9 +:1016C000808381E090E0DF91CF911F910F91FF9097 +:1016D000EF900895CF93DF93EC01888D8823C9F0B4 +:1016E000EA89FB89808185FD05C0A889B9898C912B +:1016F00086FD0FC00FB607FCF5CF808185FFF2CFC6 +:10170000A889B9898C9185FFEDCFCE010E94020B8B +:10171000E7CFDF91CF910895089508952091A20118 +:10172000E6E9F0E09491E0EEF0E08491ECECF0E09A +:10173000E491EE2309F43BC0992339F1933091F001 +:1017400038F49130A9F0923001F594B59F7D12C024 +:10175000973091F09830A1F09430B9F490918000D6 +:101760009F7D03C0909180009F77909380000DC073 +:1017700094B59F7794BD09C09091B0009F7703C046 +:101780009091B0009F7D9093B000F0E0EE0FFF1FAE +:10179000E555FF4FA591B4919FB7F894EC912111B5 +:1017A00003C080958E2301C08E2B8C939FBF109217 +:1017B000A2010895CF93C1E080E092E00E94EC0A7C +:1017C000892BB9F080E092E00E94CA0A8A3041F089 +:1017D0001CF4882329F007C08D3011F0833219F4EE +:1017E000C093A301E9CF682F81EA92E00E94CF1055 +:1017F000E3CFCF9108950E94F80A81110C94DA0B7F +:1018000008951F920F920FB60F9211242F933F93BA +:101810004F935F936F937F938F939F93AF93BF93F8 +:10182000EF93FF9380E092E00E94020BFF91EF9113 +:10183000BF91AF919F918F917F916F915F914F91E8 +:101840003F912F910F900FBE0F901F9018951F92F0 +:101850000F920FB60F9211242F938F939F93EF93B4 +:10186000FF93E0911002F09111028081E091160245 +:10187000F091170282FD12C09081809119028F5F52 +:101880008F7320911A02821751F0E0911902F0E053 +:10189000E050FE4F958F8093190201C08081FF9127 +:1018A000EF919F918F912F910F900FBE0F901F90EE +:1018B0001895CF93DF9390E0FC01ED52FF4F2491F8 +:1018C000FC01E154FF4F8491882361F190E0880F7F +:1018D000991FFC01EB54FF4FC591D491FC01E555D4 +:1018E000FF4FA591B491611109C09FB7F894888109 +:1018F000209582238883EC912E230BC0623061F403 +:101900009FB7F8943881822F809583238883EC9148 +:101910002E2B2C939FBF06C08FB7F894E8812E2BF7 +:1019200028838FBFDF91CF9108953FB7F8948091BE +:10193000FC019091FD01A091FE01B091FF0126B53F +:10194000A89B05C02F3F19F00196A11DB11D3FBFF7 +:10195000BA2FA92F982F8827820F911DA11DB11D85 +:10196000BC01CD0142E0660F771F881F991F4A9581 +:10197000D1F70895CF92DF92EF92FF920F931F93CA +:101980000E94950C00919D0210919E0220919F0251 +:101990003091A0026B017C01C01AD10AE20AF30A5D +:1019A0009701860160939D0270939E0280939F022F +:1019B0009093A0020A3511052105310578F181E0E7 +:1019C000C8168DE7D806E104F10410F4960102C0B0 +:1019D00021E03DE74A9B03C0319521953109809173 +:1019E000E9038233D8F48091E9038F5F8093E903A0 +:1019F0008091EA036091E8030E9438199093EA030A +:101A0000E091EA03F0E0EE0FFF1FE451FC4F318359 +:101A100020838091EA038F5F8093EA031F910F91E7 +:101A2000FF90EF90DF90CF9008951F920F920FB626 +:101A30000F9211242F933F938F939F93AF93BF9354 +:101A400080919E0190919F01A091A001B091A10170 +:101A50003091FB0123E0230F2D3720F40196A11DC7 +:101A6000B11D05C026E8230F0296A11DB11D2093CC +:101A7000FB0180939E0190939F01A093A001B093DE +:101A8000A1018091FC019091FD01A091FE01B09116 +:101A9000FF010196A11DB11D8093FC019093FD01F2 +:101AA000A093FE01B093FF01BF91AF919F918F91E1 +:101AB0003F912F910F900FBE0F901F9018951F927E +:101AC0000F920FB60F9211242F933F934F935F9372 +:101AD0006F937F938F939F93AF93BF93EF93FF93F6 +:101AE000E0910501F09106010995FF91EF91BF91F9 +:101AF000AF919F918F917F916F915F914F913F91A6 +:101B00002F910F900FBE0F901F9018951F920F925C +:101B10000FB60F9211242F933F934F935F936F93C0 +:101B20007F938F939F93AF93BF93EF93FF93E09136 +:101B30000301F09104010995FF91EF91BF91AF91DD +:101B40009F918F917F916F915F914F913F912F91D5 +:101B50000F900FBE0F901F901895FC0180AD2E2F97 +:101B6000DF019A2F921B981710F41D92FACF12AA38 +:101B700014AA13AA87E087AB0895CF93DF93FC01E3 +:101B8000E65FFE4F1082DC01AF5CBE4F1C92B89640 +:101B90001082B0971082319611821082B0962FEF8A +:101BA0002083FC012083EF5DFE4FEC01249611920F +:101BB00011921992EA17FB07D1F7FC01E35FFE4F80 +:101BC0001082339626E930E0318320833D964DEC38 +:101BD0005CEC6CE47EE34083518362837383729791 +:101BE00010823396108231961082F1961082F4970B +:101BF0001082DF91CF910895FC01E65FFE4F408196 +:101C0000A42FB0E0262F30E02A173B075CF4461BD8 +:101C1000408350E0B901645F7F4F680F791F0C96D5 +:101C20000C94AC1B08951F920F920FB60F921124C3 +:101C30002F933F934F935F936F937F938F939F93D4 +:101C4000AF93BF93EF93FF93E0919C01F0919D01BF +:101C50000995FF91EF91BF91AF919F918F917F91E6 +:101C60006F915F914F913F912F910F900FBE0F9009 +:101C70001F901895CF93DF9387EA90E00E94640F3E +:101C8000C7EAD2E08B8190E00E94850F82EA90E063 +:101C90000E94640F898190E00E94850F8DE990E099 +:101CA0000E94640F8A8190E0DF91CF910C94330FF2 +:101CB0002B9A2091000130910101482F429FC001D1 +:101CC000439F900D11248230910538F0880F991FA1 +:101CD000880F991F05970197F1F72B982091000124 +:101CE00030910101629FC001639F900D11248230E9 +:101CF000910538F0880F991F880F991F0597019754 +:101D0000F1F70895E8988CE89BE0909304018093A4 +:101D1000030108958AEB9CE09093040180930301F2 +:101D2000E9E6F0E080818C7F81608083E89A089505 +:101D3000CF93DF93EC01FB01248135810E94571181 +:101D4000CE01DF91CF910895009769F0FC010190D9 +:101D50000020E9F73197AF01481B590BBC0180E027 +:101D600092E00C94031080E090E00895FC0144811F +:101D700055816081718180E092E00C940310CF93D3 +:101D8000DF930E94B60EEC0184E691E00E94A40E5F +:101D90008C0F9D1FDF91CF910895CF92DF92EF922C +:101DA000FF920E94950C6B017C010E94950CDC0156 +:101DB000CB018C199D09AE09BF09883E9340A1054E +:101DC000B10598F3FF90EF90DF90CF9008958F9238 +:101DD0009F92AF92BF920F931F93CF93DF93CDB794 +:101DE000DEB7A1970FB6F894DEBF0FBECDBF19A224 +:101DF000423008F44AE08E010F5D1F4F842E912C73 +:101E0000A12CB12CA50194010E946C19E62FB901F7 +:101E1000CA0101501109EA3014F4E05D01C0E95C27 +:101E2000D801EC93232B242B252B61F7C8010E94AA +:101E3000A40EA1960FB6F894DEBF0FBECDBFDF9102 +:101E4000CF911F910F91BF90AF909F908F90089569 +:101E5000E0910002F09101020190F081E02D682FE5 +:101E600080E092E00994CF92DF92EF92FF92CF93BD +:101E7000DF936C01990FEE08FF08F7FE12C08DE2A8 +:101E80000E94280FEC0166277727CB016C197D098A +:101E90008E099F094AE00E94E70E7C01EC0EFD1EB0 +:101EA00006C04AE0C701B6010E94E70E7C0184E645 +:101EB00091E00E94A40E8E0D9F1DDF91CF91FF90A7 +:101EC000EF90DF90CF9008950F931F93CF93DF9300 +:101ED0008C01C0E0D0E0F801EC0FFD1F6491662397 +:101EE00071F0E0910002F09101020190F081E02D8B +:101EF00080E092E00995892B11F02196ECCFCE017C +:101F0000DF91CF911F910F910895CF92DF92EF92C1 +:101F1000FF92CF93DF936C01990FEE08FF08F7FE55 +:101F200017C08DE20E94280FEC0166277727CB01AE +:101F30006C197D098E099F094AE00E94E70E8C0FFB +:101F40009D1FDF91CF91FF90EF90DF90CF9008958C +:101F50004AE0C701B601DF91CF91FF90EF90DF908B +:101F6000CF900C94E70ECF93DF930E94A40EEC0168 +:101F700084E691E00E94A40E8C0F9D1FDF91CF910B +:101F800008950F931F93CF93DF9300D000D0CDB768 +:101F9000DEB74AE08E010F5F1F4FB80190E00E944C +:101FA0000120F80101900020E9F73197AF01401BB3 +:101FB000510BB8018BED93E00E9471100F900F90C0 +:101FC0000F900F90DF91CF911F910F910895EBEA41 +:101FD000F2E098E09E0F11929E13FDCF611102C0B6 +:101FE0006091B103861768F4E82FF0E0E955FD4FE2 +:101FF000E485F0E0E955FD4F94819F5F94838F5F06 +:10200000F1CF08950895CF92DF92EF92FF920F9350 +:102010001F93CF93DF936C017A018B01C0E0D0E076 +:10202000CE15DF0589F0D8016D918D01D601ED91B6 +:10203000FC910190F081E02DC6010995892B11F4E6 +:102040007E0102C02196ECCFC701DF91CF911F9195 +:102050000F91FF90EF90DF90CF900895FC01808169 +:102060009181009711F00C94DA1F60E070E0CB01D1 +:102070000895FC01248135816217730748F480813B +:102080009181009729F0FC01E60FF71F80810895E8 +:1020900080E008950F931F93CF93DF93EC01888125 +:1020A0009981009729F02A813B812617370788F408 +:1020B0008B016F5F7F4F0E94D41A009761F0998364 +:1020C00088831B830A832C813D81232B11F4FC011F +:1020D000108281E001C080E0DF91CF911F910F91CC +:1020E0000895EF92FF920F931F93CF93DF93FC011C +:1020F000248135816115710511F480E019C0411505 +:102100005105A9F07B01EC018A01020F131FB801F0 +:102110000E944A10882389F3288139818C819D810E +:10212000B701820F931F0E94BE1B1D830C8381E0A9 +:10213000DF91CF911F910F91FF90EF900895EF9253 +:10214000FF920F931F93CF93DF93CDB7DEB72897FE +:102150000FB6F894DEBF0FBECDBF7C01CB014AE0C5 +:102160008E010F5F1F4FB8010E940120F8010190FE +:102170000020E9F73197AF01401B510BB801C701AF +:102180000E94711028960FB6F894DEBF0FBECDBF27 +:10219000DF91CF911F910F91FF90EF900895CF9312 +:1021A000DF9300D0CDB7DEB769831A8241E050E0FB +:1021B000BE016F5F7F4F0E9471100F900F90DF91F3 +:1021C000CF9108956115710551F0FB010190002038 +:1021D000E9F73197AF01461B570B0C94711080E063 +:1021E0000895EF92FF920F931F93CF93DF93EC012B +:1021F0007B018A01BA010E944A102881398181112C +:102200000DC02115310519F0C9010E94241F198242 +:1022100018821D821C821B821A8206C01D830C83B9 +:10222000B701C9010E94BE1BCE01DF91CF911F9162 +:102230000F91FF90EF900895CF93DF93EC0161151C +:10224000710559F0FB0101900020E9F73197AF01CA +:10225000461B570B0E94F1100CC088819981009792 +:1022600011F00E94241F198218821D821C821B8279 +:102270001A82CE01DF91CF910895FC018081918176 +:102280000C94241FFC011182108213821282158289 +:1022900014826115710551F0FB0101900020E9F7EE +:1022A0003197AF01461B570B0C94F1100895BF9264 +:1022B000CF92DF92EF92FF920F931F93CF93DF9312 +:1022C0007C016B018A01E9012417350720F4812F75 +:1022D0008901C42FD82F66E671E0C7010E94421120 +:1022E000D60114968D919C91159708171907D0F473 +:1022F0008C179D0708F4EC01D601ED91FC91119724 +:10230000EC0FFD1FB08010824D915C91BA01600FFF +:10231000711FC7010E941C11D601ED91FC91EC0FB9 +:10232000FD1FB082C701DF91CF911F910F91FF90E8 +:10233000EF90DF90CF90BF900895CF93DF93CDB70C +:10234000DEB7C757D1090FB6F894DEBF0FBECDBFB9 +:10235000789484B5826084BD84B5816084BD85B580 +:10236000826085BD85B5816085BD80916E0081608C +:1023700080936E0010928100809181008260809332 +:102380008100809181008160809381008091800034 +:102390008160809380008091B10084608093B1005F +:1023A0008091B00081608093B00080917A00846059 +:1023B00080937A0080917A00826080937A00809185 +:1023C0007A00816080937A0080917A00806880939F +:1023D0007A001092C100E0911002F091110212E017 +:1023E0001083E0911002F09111021082E0910C0232 +:1023F000F0910D021082E0910E02F0910F0200E1C7 +:10240000008310921802E0911402F091150286E008 +:102410008083E0911202F0911302808180618083B9 +:10242000E0911202F0911302808188608083E09134 +:102430001202F0911302808180688083E091120281 +:10244000F091130280818F7D808360E082E00E94A2 +:10245000590C61E08BE00E94590C61E08DE00E9414 +:10246000590C00938100109280001093A60188E11E +:1024700099E79093A5018093A4019093870080939E +:10248000860082E1809381008EE89BE090939D011D +:1024900080939C0181E080936F0080E090E00E9437 +:1024A00077218B3099F481E090E00E947721982F7A +:1024B00091709093AA0281FB992790F99093A802BA +:1024C00082FB882780F98093A9020AC06BE080E034 +:1024D00090E00E947F2167E081E090E00E947F21F0 +:1024E0000E948A0E68E270E081EA92E00E944A103F +:1024F0009E012F5F3F4F19018091A301882309F4AA +:1025000090C41092A30160E070E081EA92E00E9422 +:102510003910803539F48DE191E00E94B30F0E94AB +:10252000CD0E72C48F3309F045C00E94280F8CE78E +:1025300090E00E94640F86E50E94280F80E20E94CE +:10254000280F89E60E94280F80E20E94280F82E56A +:102550000E94280F80E20E94280F84E70E94280F23 +:1025600080E20E94280F88E50E94280F80E20E94E6 +:10257000280F86E40E94280F80E20E94280F83E53E +:102580000E94280F80E20E94280F80E50E94280FF9 +:1025900080E20E94280F83E40E94280F80E20E94BC +:1025A000280F87E40E94280F80E20E94280F86E609 +:1025B00091E004C0863529F480E291E00E94B30FD7 +:1025C00023C4823579F4809150049091510400978E +:1025D00011F484E594E0D101A81BB90BCD010E9450 +:1025E000330F12C4893609F02DC161E070E081EA31 +:1025F00092E00E943910843709F4A5C0823781F532 +:1026000042E050E061EA72E0C1010E94980E8D81C3 +:102610009E81009721F46C961FAE6C9716C00297AE +:1026200018F002E010E002C001E010E069817A8158 +:10263000A801CE01855A9F4F0E94C51BEBE5F0E033 +:10264000EC0FFD1FE00FF11F1082C1010E943D1130 +:10265000CE01855A9F4F0E94BC1F8093020173C018 +:10266000833709F05DC02B9A42E050E061EA72E0E6 +:10267000CE01855A9F4F0E94980EA1960EAD1FADB8 +:10268000A1970115110511F4198211C00732110526 +:1026900010F007E210E06D966EAD7FAD6D97A8016A +:1026A000C1010E94C51BF101E00FF11F1082CE0194 +:1026B000855A9F4F0E943D110E94820E00E010E05B +:1026C0008091020190E00817190734F56FE181E06D +:1026D0000E94580E7101F70181917F018823C9F092 +:1026E000813371F0863449F08033A9F763E081E0EB +:1026F0000E94580E63E081E009C063E081E002C0FF +:1027000061E083E00E94580E61E083E00E94580E71 +:10271000E2CF0F5F1F4FD4CF0E948A0E2B9813C0B9 +:102720008336B1F442E050E061EA72E0C1010E94F8 +:10273000980EC1010E942E10709301016093000158 +:10274000C1010E943D1181EA92E00E94BF0E5CC36C +:10275000803709F059C366E671E0CE018F599F4F6B +:102760000E94421164E170E0CE018F599F4F0E9498 +:102770004A1067E571E0CE018F599F4F0E941C11EE +:10278000809102016D961FAE1EAE6D976F961FAEC3 +:102790001EAE6F97A1961FAE1EAEA1974AE0B10183 +:1027A00090E00E942920B101CE01855A9F4F0E94DE +:1027B0001C11A1964EAD5FADA1976D966EAD7FAD2C +:1027C0006D97CE018F599F4F0E947110CE01855A8F +:1027D0009F4F0E943D1160E671E0CE018F599F4FDF +:1027E0000E94E21080910001909101016D961FAE50 +:1027F0001EAE6D976F961FAE1EAE6F97A1961FAE61 +:102800001EAEA1974AE0B1010E940120B101CE01A4 +:10281000855A9F4F0E941C11A1964EAD5FADA197A6 +:102820006D966EAD7FAD6D97CE018F599F4F0E9413 +:102830007110CE01855A9F4F0E943D11CE018F59D4 +:102840009F4F3BC2833509F040C266E671E0CE017E +:102850008F599F4F0E9442116EE170E0CE018F5957 +:102860009F4F0E944A100E94820EE12CF12CFFEF34 +:10287000A896FFAFA89721E0AE962FAFAE9731E0B4 +:10288000E0963FAFE09732E1D32ECC24C39449E0E9 +:10289000B42E52E0A52E62E671E0CE01855A9F4F1C +:1028A0000E9442118091A5029091A602E816F906B5 +:1028B00098F48090A1029090A2026D966EAD7FADCB +:1028C0006D97C4018E0D9F1D0E94D41B009721F0AF +:1028D0008C010819190902C00FEF1FEFCE01855AAC +:1028E0009F4F0E943D110F3F2FEF120721F4AF962B +:1028F0001FAEAF970EC13FEFE316F306C1F3980189 +:10290000A70161EA72E0CE01855A9F4F0E945711DC +:10291000A3968EAD9FADA3970097A9F06D966EAD6F +:102920007FAD6D976115710561F0A5964EAD5FADF8 +:10293000A597A1962EAD3FADA1974217530708F07A +:10294000ECC30E94241F6D968EAD9FAD6D97A3962C +:102950009FAF8EAFA3976F968EAD9FAD6F97A596E5 +:102960009FAF8EAFA597A1968EAD9FADA197A7966D +:102970009FAF8EAFA7976D961FAE1EAE6D976F96E9 +:102980001FAE1EAE6F97A1961FAE1EAEA197CE01D1 +:10299000855A9F4F0E943D1178018FEFE81AF80A7F +:1029A00060E070E0CE018F599F4F0E94391083354F +:1029B00059F561E070E0CE018F599F4F0E943910A8 +:1029C000833409F462C08D3471F4A8968FADA89752 +:1029D0008F5FA8968FAFA897F101D89EE00DF11DEB +:1029E0001124C28258CF823509F055CFA8962FAD59 +:1029F000A8972F5FA8962FAFA897F101D29EE00D60 +:102A0000F11D1124A28241C0803509F024C362E087 +:102A100070E0CE018F599F4F0E9439108D3309F01D +:102A20003ACF22E030E041E050E0BE016F597F4FE5 +:102A3000CE01855A9F4F0E945711CE01855A9F4F54 +:102A40000E942E10162FCE01855A9F4F0E943D11D5 +:102A500043E050E0BE016F597F4FCE01855A9F4F32 +:102A60000E94980ECE01855A9F4F0E942E10A89664 +:102A70006FACA897B69CF0011124E10FF11D3396BD +:102A8000EE0FFF1FE20DF31D40C3AE961FAEAE97D3 +:102A900002CFA9967FACA997672C712CAB967FAE1D +:102AA0006EAEAB97A9963FADA99722E1329F700118 +:102AB0001124F101EE0DFF1D82818230B9F182E116 +:102AC000AB966EAC7FACAB97869DF001879DF00D09 +:102AD0001124E20DF31D8281813009F46AC02B9824 +:102AE000A9963FADA9973F5FA9963FAFA997A89632 +:102AF0006FACA897631668F6AE967FACAE97711070 +:102B00000E94CD0EAF962FADAF972F5FAF962FAF30 +:102B1000AF97AF963FADAF97E0966FACE0973615A5 +:102B200009F4C7C0A9961FAEA997B3CF26E0E20E5D +:102B3000F11CE20CF31C4480558003810E94950C2B +:102B40004B015C0110E04016510658F1B80181EAD2 +:102B500092E00E9439108053F701E80FF11DE80F51 +:102B6000F11D60807180630177FE04C0CC24DD24F8 +:102B7000C618D7080E94950C681579058A059B052B +:102B8000C8F377FE02C02B9801C02B9AC601DD0C5A +:102B9000AA0BBB0B880E991EAA1EBB1E0F5F1F4FF0 +:102BA000D2CF0E94950C681579058A059B05C8F35C +:102BB00086CFE080F1807480E1967FAEE19713814B +:102BC0000E94950C4B015C01C701FF0CAA0BBB0BCB +:102BD000AD968CAF9DAFAEAFBFAFAD97880F991FCD +:102BE000AA1FBB1FE5968CAF9DAFAEAFBFAFE597F9 +:102BF000E1966FACE197611608F471CF612F70E038 +:102C000081EA92E00E9439108A3314F097E301C000 +:102C100090E3891B04E0C02ED12C08E0482F880FD8 +:102C2000550B2401350120E0E02EF12CE422F522A1 +:102C3000E114F10451F12B98AD968CAD9DADAEAD84 +:102C4000BFADAD97480E591E6A1E7B1EE6962FAF8C +:102C5000E697E7964FAFE797E8965FAFE8970E9451 +:102C6000950CE6962FADE697E7964FADE797E89679 +:102C70005FADE897641575058605970538F3213033 +:102C800031F021E0E114F104B1F22B9AD5CFE596B1 +:102C90008CAD9DADAEADBFADE597880E991EAA1E59 +:102CA000BB1E069591E0C91AD10809F0BACF1F5F83 +:102CB0009FCF0E948A0E81EA92E00E94BF0ECE0151 +:102CC0008F599F4F0E943D119FC08437C1F58FB728 +:102CD000F894C0909E01D0909F01E090A001F090E8 +:102CE000A1018FBFC701B60128EE33E040E050E0FC +:102CF0000E946C19CA01B9010091A9011091AA01A1 +:102D00002091AB013091AC01C016D106E206F3066A +:102D100050F42091A7013091A8012F5F3F4F3093CD +:102D2000A8012093A701C092A901D092AA01E09224 +:102D3000AB01F092AC014AE00E94E70E61C0883519 +:102D4000B1F461E070E081EA92E00E9439108135CF +:102D500011F40E94820E61E070E081EA92E00E942C +:102D60003910853409F050C00E948A0E4DC0863457 +:102D700009F44AC08334F1F561E070E081EA92E041 +:102D80000E943910182F873419F40E943A0E3CC063 +:102D900062E070E081EA92E00E943910833539F0F8 +:102DA000853541F0833449F4E9EAF2E008C0EAEA03 +:102DB000F2E005C0E8EAF2E002C0E0E0F0E015343D +:102DC00019F481E0808303C01434F1F410828091FF +:102DD000A802682F660F9091A90224E0929FC0017B +:102DE0001124862B6091AA02682B81E090E00E945A +:102DF0007F210AC0873449F288E690E00E94640F80 +:102E000084E691E00E94A40E8091A301811106C086 +:102E100066E671E081EA92E00E941C1181E08093F5 +:102E2000A201AA24A394B3E0CB2ED12C8091E90374 +:102E3000882309F40DC18091E90381508093E9034F +:102E40008091EB036091E8030E9438199093EB03A3 +:102E5000E091EB0381E08E0F8093EB03F0E0EE0F47 +:102E6000FF1FE451FC4F808191819093AE018093CC +:102E7000AD011092B403E091B103EE2369F0F0E0EC +:102E8000E955FD4F838590E0880F991F88539C4F2B +:102E90009093C3038093C2032091AD013091AE01A2 +:102EA000E091C003F091C103318320838091B1038D +:102EB000882369F0E091C203F091C30340815181FE +:102EC00042275327452F441F4427441F01C041E098 +:102ED00051E0211533480CF450E091E08E3F09F4A5 +:102EE00090E0952311F0411109C091E08E3F09F067 +:102EF00090E09093B6030E94A20006C0883221F4AD +:102F0000D092BB03C092BA03E090C003F090C1031B +:102F1000D7010D911C91B80117FF04C066277727D0 +:102F2000601B710B072E000C880B990B0E945A2016 +:102F30002DEC3CEC4CE45EE30E94B9200E94A01A08 +:102F4000AB017093B8036093B7036091D803E8ECCA +:102F5000F3E0B12CB616D9F0819191919C01202714 +:102F60003127330F220B322F232B79F4009769F08E +:102F70003801681A790AC30177FE03C091958195DB +:102F80009109481759070CF0D3C0B394E3CF6830C8 +:102F900041F560E080E00E94E70FE091D803F0E0A7 +:102FA000E955FD4F8481833010F00E94A2006091AA +:102FB000B10370E0615071098091D90316161706AC +:102FC00084F4FB01E955FD4F9485981307C06F5FAA +:102FD0007F4F87EA92E00E94FC0D03C061507109A7 +:102FE000EDCFB090D903E091C003F091C10380818F +:102FF0009181EB2DF0E0EE0FFF1FE853FC4F918322 +:10300000808381E08B0D883019F08093D90306C04E +:103010001092D9038093D8031092E7038091D903CB +:103020009091D803981710F48093D8038091B1033E +:10303000E82FF0E0E955FD4FB4868F5F8093B10330 +:103040008091B403882309F4F1CEA092A201EECEC0 +:103050000E94FB0B51CA8235E9F461E070E0CE01B9 +:103060008F599F4F0E9439108D3309F014CC42E0E4 +:1030700050E0BE016F597F4FCE01855A9F4F0E948D +:10308000980ECE01855A9F4F0E942E10E0966FAF8A +:10309000E0973DC08434A9F4F101A8967FACA897CD +:1030A000D79CE00DF11D1124A6968FADA6978C2C10 +:1030B000881A882D8E0D838301501109158304838E +:1030C000EACB833409F0E7CB61E070E0CE018F59A1 +:1030D0009F4F0E9439108D3309F0DDCB42E050E064 +:1030E000BE016F597F4FCE01855A9F4F0E94980EA7 +:1030F000CE01855A9F4F0E942E10F101A8967FACF9 +:10310000A897D79CE00DF11D112471836083CE0137 +:10311000855A9F4F0E943D11BECB0E94BE1BA196B7 +:103120008EAD9FADA197A7969FAF8EAFA7972BCCE3 +:10313000B7FC2DCF0B2D000F110B08531C4FD801DE +:103140006D917C91AB01770F660B770BF701808156 +:103150009181092E000CAA0BBB0B3A014B01680EA2 +:10316000791E8A1E9B1EC401B30122E030E040E0BC +:1031700050E00E948E19D8012D933C9357CF81EADD +:1031800092E00E943D1181EE93E00E943D118BED93 +:1031900093E00C943D110F931F93CF93DF93E0E0E6 +:1031A000F2E01382128288EE93E0A0E0B0E0848324 +:1031B0009583A683B78381E191E09183808385EC39 +:1031C00090E09587848784EC90E09787868780ECF1 +:1031D00090E0918B808B81EC90E0938B828B82ECE2 +:1031E00090E0958B848B86EC90E0978B868B118E8C +:1031F000128E138E148EE8EEF3E082E38083118248 +:1032000013821282CCEBD3E0D093C103C093C003EE +:103210000EEB13E01093C3030093C20366E671E064 +:103220008BED93E00E94421166E671E081EE93E03F +:103230000E944211F801118210821982188287EAD5 +:1032400092E00E94BD0D66E671E081EA92E00E9484 +:1032500042110E94950C60939D0270939E02809390 +:103260009F029093A002DF91CF911F910F9108953B +:10327000991B79E004C0991F961708F0961B881FC8 +:103280007A95C9F780950895AA1BBB1B51E107C029 +:10329000AA1FBB1FA617B70710F0A61BB70B881FE6 +:1032A000991F5A95A9F780959095BC01CD01089575 +:1032B00097FB072E16F4009407D077FD09D00E94E3 +:1032C000441907FC05D03EF4909581959F4F0895D1 +:1032D000709561957F4F0895A1E21A2EAA1BBB1B22 +:1032E000FD010DC0AA1FBB1FEE1FFF1FA217B307D2 +:1032F000E407F50720F0A21BB30BE40BF50B661FE8 +:10330000771F881F991F1A9469F7609570958095AB +:1033100090959B01AC01BD01CF010895052E97FB4F +:103320001EF400940E94A51957FD07D00E946C1945 +:1033300007FC03D04EF40C94A51950954095309598 +:1033400021953F4F4F4F5F4F089590958095709511 +:1033500061957F4F8F4F9F4F08950E94C421B7FF03 +:103360000895821B930B0895EE0FFF1F0590F491B3 +:10337000E02D09945058BB27AA270E94D2190C941B +:103380003D210E942F2138F00E94362120F039F48F +:103390009F3F19F426F40C942C210EF4E095E7FBE2 +:1033A0000C942621E92F0E944E2158F3BA17620788 +:1033B00073078407950720F079F4A6F50C94702123 +:1033C0000EF4E0950B2EBA2FA02D0B01B901900140 +:1033D0000C01CA01A0011124FF27591B99F0593F84 +:1033E00050F4503E68F11A16F040A22F232F342FCC +:1033F0004427585FF3CF469537952795A795F0401A +:103400005395C9F77EF41F16BA0B620B730B840B2E +:10341000BAF09150A1F0FF0FBB1F661F771F881FE6 +:10342000C2F70EC0BA0F621F731F841F48F487953E +:1034300077956795B795F7959E3F08F0B0CF939530 +:10344000880F08F09927EE0F9795879508950E94A9 +:103450003B1A0C943D210E94362158F00E942F21E6 +:1034600040F029F45F3F29F00C94262151110C946F +:1034700071210C942C210E944E2168F39923B1F301 +:10348000552391F3951B550BBB27AA27621773078A +:10349000840738F09F5F5F4F220F331F441FAA1F1E +:1034A000A9F335D00E2E3AF0E0E832D091505040DA +:1034B000E695001CCAF72BD0FE2F29D0660F771F88 +:1034C000881FBB1F261737074807AB07B0E809F06E +:1034D000BB0B802DBF01FF2793585F4F3AF09E3FF3 +:1034E000510578F00C9426210C9471215F3FE4F390 +:1034F000983ED4F3869577956795B795F7959F5F36 +:10350000C9F7880F911D9695879597F90895E1E081 +:10351000660F771F881FBB1F621773078407BA07E0 +:1035200020F0621B730B840BBA0BEE1F88F7E0953B +:1035300008950E94A01A6894B1110C947121089505 +:103540000E94562188F09F5798F0B92F9927B751BC +:10355000B0F0E1F0660F771F881F991F1AF0BA9537 +:10356000C9F714C0B13091F00E947021B1E0089504 +:103570000C947021672F782F8827B85F39F0B93FF6 +:10358000CCF3869577956795B395D9F73EF49095EA +:103590008095709561957F4F8F4F9F4F08950E9442 +:1035A000952008F48FEF0895A0E0B0E0EAEDFAE18D +:1035B0000C949121EC01009721F4CB010E948F1E05 +:1035C000B8C0FC01E60FF71F9C0122503109E21739 +:1035D000F30708F4ACC0D9010D911C91119706179F +:1035E0001707B0F00530110508F49FC0C801049713 +:1035F0008617970708F499C002501109061B170B8C +:10360000019311936D937C93CF010E94241F8DC071 +:103610005B01A01AB10A4C01800E911EA0915204C8 +:10362000B091530440E050E0E12CF12C109709F4E4 +:103630004AC0A815B905D1F56D907C90119763012A +:1036400082E0C80ED11CCA14DB0480F1A3014A1920 +:103650005B096A0182E0C80ED11C1296BC901297D9 +:103660001396AC91B5E0CB16D10440F0B282A3839F +:1036700051834083D9016D937C930AC00E5F1F4F25 +:10368000C301800F911FF90191838083EB2DFA2FE5 +:10369000E114F10431F0D7011396FC93EE931297E5 +:1036A00044C0F0935304E09352043FC08D919C9129 +:1036B00011974817590708F4AC017D0112960D9037 +:1036C000BC91A02DB3CF80915004909151048815E6 +:1036D0009905E1F446175707C8F4809107019091C6 +:1036E0000801009741F48DB79EB740910B015091AE +:1036F0000C01841B950BE817F907C8F4F0935104EB +:10370000E0935004F901718360830FC0CB010E94E4 +:103710008F1E7C01009759F0A801BE010E94A31BD7 +:10372000CE010E94241FC70104C0CE0102C080E068 +:1037300090E0CDB7DEB7EEE00C94AD2181E090E0F3 +:10374000F8940C94D321FB01DC0102C001900D928E +:1037500041505040D8F708956817790768F4FB0185 +:10376000DC01E40FF51FA40FB51F02C002900E92FA +:1037700041505040D8F708950C94A31BFB01DC0185 +:1037800001900D920020E1F70895FB01DC0141500A +:10379000504048F001900D920020C9F701C01D92E1 +:1037A00041505040E0F70895FB0151915523A9F095 +:1037B000BF01DC014D9145174111E1F759F4CD01ED +:1037C0000190002049F04D9140154111C9F3FB01D2 +:1037D0004111EFCF81E090E001970895AEE0B0E0B5 +:1037E000E4EFFBE10C949B210D891E8986E08C831C +:1037F0001A8309838FEF9FE79E838D83AE01475E17 +:103800005F4F6F89788DCE0101960E94111C2F8128 +:103810003885F801E20FF31F10822E96E4E00C9435 +:10382000B721ACE0B0E0E7E1FCE10C948D217C0134 +:103830006B018A01FC0117821682838181FFBDC161 +:10384000CE0101964C01F7019381F60193FD85911C +:1038500093FF81916F01882309F4ABC1853239F45C +:1038600093FD859193FF81916F01853229F4B70112 +:1038700090E00E94F91DE7CF512C312C20E020323E +:10388000A0F48B3269F030F4803259F0833269F45D +:1038900020612CC08D3239F0803339F4216026C08C +:1038A0002260246023C0286021C027FD27C030ED9E +:1038B000380F3A3078F426FF06C0FAE05F9E300DEC +:1038C0001124532E13C08AE0389E300D1124332E5C +:1038D00020620CC08E3221F426FD6BC1206406C02C +:1038E0008C3611F4206802C0883641F4F60193FD4D +:1038F000859193FF81916F018111C1CF982F9F7D99 +:103900009554933028F40C5F1F4FFFE3F9830DC0EB +:10391000833631F0833771F0833509F05BC022C004 +:10392000F801808189830E5F1F4F44244394512CFA +:10393000540115C03801F2E06F0E711CF801A0802F +:10394000B18026FF03C0652D70E002C06FEF7FEFEE +:10395000C5012C870E94EE1D2C0183012C852F7739 +:10396000222E17C03801F2E06F0E711CF801A08002 +:10397000B18026FF03C0652D70E002C06FEF7FEFBE +:10398000C5012C870E94E31D2C012C852068222E66 +:10399000830123FC1BC0832D90E048165906B0F428 +:1039A000B70180E290E00E94F91D3A94F4CFF5014E +:1039B00027FC859127FE81915F01B70190E00E946D +:1039C000F91D31103A94F1E04F1A51084114510495 +:1039D00071F7E5C0843611F0893639F5F80127FF13 +:1039E00007C060817181828193810C5F1F4F08C085 +:1039F00060817181072E000C880B990B0E5F1F4FA1 +:103A00002F76722E97FF09C09095809570956195DD +:103A10007F4F8F4F9F4F2068722E2AE030E0A40125 +:103A20000E94311EA82EA81844C0853729F42F7E85 +:103A3000B22E2AE030E025C0F22FF97FBF2E8F365C +:103A4000C1F018F4883579F0B4C0803719F08837A0 +:103A500021F0AFC02F2F2061B22EB4FE0DC08B2DF0 +:103A60008460B82E09C024FF0AC09F2F9660B92E2B +:103A700006C028E030E005C020E130E002C020E1CF +:103A800032E0F801B7FE07C06081718182819381C5 +:103A90000C5F1F4F06C06081718180E090E00E5F77 +:103AA0001F4FA4010E94311EA82EA818FB2DFF77DE +:103AB0007F2E76FE0BC0372D3E7FA51450F474FE8A +:103AC0000AC072FC08C0372D3E7E05C0BA2C372DC7 +:103AD00003C0BA2C01C0B52C34FF0DC0FE01EA0DA5 +:103AE000F11D8081803311F4397E09C032FF06C098 +:103AF000B394B39404C0832F867809F0B39433FD54 +:103B000013C030FF06C05A2CB31418F4530C5B18C2 +:103B1000B32CB31468F4B70180E290E03C870E94B4 +:103B2000F91DB3943C85F5CFB31410F43B1801C0D4 +:103B3000312C34FF12C0B70180E390E03C870E9433 +:103B4000F91D3C8532FF17C031FD03C088E790E0C6 +:103B500002C088E590E0B7010CC0832F867859F049 +:103B600031FF02C08BE201C080E237FD8DE2B70178 +:103B700090E00E94F91DA51438F4B70180E390E0AD +:103B80000E94F91D5A94F7CFAA94F401EA0DF11D91 +:103B90008081B70190E00E94F91DA110F5CF33207C +:103BA00009F451CEB70180E290E00E94F91D3A94E9 +:103BB000F6CFF7018681978102C08FEF9FEF2C9699 +:103BC000E2E10C94A921FC010590615070400110C4 +:103BD000D8F7809590958E0F9F1F0895FC01615036 +:103BE000704001900110D8F7809590958E0F9F1F1F +:103BF00008950F931F93CF93DF93FB01238121FD42 +:103C000003C08FEF9FEF28C022FF16C04681578167 +:103C1000248135814217530744F4A081B1819D016D +:103C20002F5F3F4F318320838C93268137812F5F15 +:103C30003F4F3783268310C0EB01092F182F0084D4 +:103C4000F185E02D0995892BE1F68E819F81019602 +:103C50009F838E83812F902FDF91CF911F910F91A2 +:103C60000895FA01AA27283051F1203181F1E89412 +:103C70006F936E7F6E5F7F4F8F4F9F4FAF4FB1E05F +:103C80003ED0B4E03CD0670F781F891F9A1FA11D5A +:103C9000680F791F8A1F911DA11D6A0F711D811D5B +:103CA000911DA11D20D009F468943F912AE0269F20 +:103CB00011243019305D3193DEF6CF010895462F7F +:103CC0004770405D4193B3E00FD0C9F7F6CF462F60 +:103CD0004F70405D4A3318F0495D31FD40524193C9 +:103CE00002D0A9F7EACFB4E0A69597958795779586 +:103CF0006795BA95C9F700976105710508959B010D +:103D0000AC010A2E06945795479537952795BA9595 +:103D1000C9F7620F731F841F951FA01D0895CF93CD +:103D2000DF938230910510F482E090E0E09152043C +:103D3000F091530420E030E0C0E0D0E0309711F182 +:103D40004081518148175907C0F04817590761F45D +:103D500082819381209719F09B838A832BC0909353 +:103D600053048093520426C02115310519F04217DF +:103D7000530718F49A01BE01DF01EF010280F381BD +:103D8000E02DDCCF2115310509F1281B390B24303A +:103D9000310590F412968D919C91139761157105E0 +:103DA00021F0FB019383828304C09093530480939A +:103DB0005204FD01329644C0FD01E20FF31F8193CE +:103DC0009193225031092D933C933AC02091500495 +:103DD00030915104232B41F42091090130910A01C3 +:103DE0003093510420935004209107013091080131 +:103DF0002115310541F42DB73EB740910B0150918B +:103E00000C01241B350BE0915004F0915104E21792 +:103E1000F307A0F42E1B3F0B2817390778F0AC01ED +:103E20004E5F5F4F2417350748F04E0F5F1F5093CA +:103E30005104409350048193919302C0E0E0F0E07C +:103E4000CF01DF91CF9108950F931F93CF93DF930D +:103E5000009709F48CC0FC01329713821282009102 +:103E60005204109153040115110581F42081318110 +:103E7000820F931F20915004309151042817390765 +:103E800079F5F0935104E093500471C0D80140E0FB +:103E900050E0AE17BF0750F412962D913C91139746 +:103EA000AD012115310509F1D901F3CF9D01DA01E9 +:103EB0003383228360817181860F971F8217930756 +:103EC00069F4EC0128813981260F371F2E5F3F4F9F +:103ED000318320838A819B8193838283452B29F4BC +:103EE000F0935304E093520442C01396FC93EE9374 +:103EF0001297ED01499159919E01240F351FE21748 +:103F0000F30771F480819181840F951F02961196B9 +:103F10009C938E938281938113969C938E93129798 +:103F2000E0E0F0E0D80112968D919C9113970097F4 +:103F300019F0F8018C01F6CF8D919C9198012E5FBC +:103F40003F4F820F931F2091500430915104281746 +:103F5000390769F4309729F41092530410925204EF +:103F600002C0138212821093510400935004DF9117 +:103F7000CF911F910F910895FC0188279927E8940C +:103F800021912032E9F3293010F02E30C8F32B3282 +:103F900041F02D3239F4689404C00E942120820F30 +:103FA000911D219120532A30C0F31EF490958195E4 +:103FB0009F4F08951F93FC0199278827BC01E8941F +:103FC00011911032E9F3193010F01E30C8F31B3292 +:103FD00051F01D3249F4689406C00E940C20610F14 +:103FE000711D811D911D119110531A30B0F33EF4D3 +:103FF00090958095709561957F4F8F4F9F4F1F9142 +:104000000895BB274A3031F4992322F4BDE29095FC +:1040100081959F4F0C942A20592F482F372F262FF8 +:10402000660F771F881F991F660F771F881F991FBC +:10403000620F731F841F951F660F771F881F991FBC +:1040400008957AE0979F902D879F802D910D1124E0 +:104050000895BB27FB015527AA27880F991FAA1F80 +:10406000A41710F0A41B83955051B9F7A05DAA3393 +:1040700008F0A95DA193009779F7B111B19311925E +:10408000CB010C944320DC01FC01672F7191772355 +:10409000E1F7329704C07C916D9370836291AE1703 +:1040A000BF07C8F308950E94952008F481E00895A1 +:1040B000E89409C097FB3EF49095809570956195C2 +:1040C0007F4F8F4F9F4F9923A9F0F92F96E9BB2778 +:1040D0009395F695879577956795B795F111F8CFF4 +:1040E000FAF4BB0F11F460FF1BC06F5F7F4F8F4F5F +:1040F0009F4F16C0882311F096E911C0772321F055 +:104100009EE8872F762F05C0662371F096E8862FEC +:1041100070E060E02AF09A95660F771F881FDAF743 +:10412000880F9695879597F90895990F0008550F70 +:10413000AA0BE0E8FEEF16161706E807F907C0F02D +:1041400012161306E407F50798F0621B730B840B35 +:10415000950B39F40A2661F0232B242B252B21F40F +:1041600008950A2609F4A140A6958FEF811D811DAF +:1041700008950E94CC200C943D210E942F2138F0FC +:104180000E94362120F0952311F00C9426210C94E6 +:104190002C2111240C9471210E944E2170F3959FC3 +:1041A000C1F3950F50E0551F629FF001729FBB272E +:1041B000F00DB11D639FAA27F00DB11DAA1F649FCA +:1041C0006627B00DA11D661F829F2227B00DA11D7D +:1041D000621F739FB00DA11D621F839FA00D611D03 +:1041E000221F749F3327A00D611D231F849F600D24 +:1041F000211D822F762F6A2F11249F5750409AF04D +:10420000F1F088234AF0EE0FFF1FBB1F661F771FD8 +:10421000881F91505040A9F79E3F510580F00C94A3 +:1042200026210C9471215F3FE4F3983ED4F38695E8 +:1042300077956795B795F795E7959F5FC1F7FE2B43 +:10424000880F911D9695879597F9089597F99F671F +:1042500080E870E060E008959FEF80EC089500240E +:104260000A941616170618060906089500240A94DB +:1042700012161306140605060895092E0394000C61 +:1042800011F4882352F0BB0F40F4BF2B11F460FFF0 +:1042900004C06F5F7F4F8F4F9F4F089557FD905819 +:1042A000440F551F59F05F3F71F04795880F97FBFA +:1042B000991F61F09F3F79F08795089512161306B4 +:1042C0001406551FF2CF4695F1DF08C016161706E3 +:1042D0001806991FF1CF8695710561050894089518 +:1042E000E894BB2766277727CB0197F90895F999BA +:1042F000FECF92BD81BDF89A992780B50895262FEB +:10430000F999FECF1FBA92BD81BD20BD0FB6F894BA +:10431000FA9AF99A0FBE019608952F923F924F9202 +:104320005F926F927F928F929F92AF92BF92CF9245 +:10433000DF92EF92FF920F931F93CF93DF93CDB74E +:10434000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFC6 +:1043500009942A88398848885F846E847D848C8497 +:104360009B84AA84B984C884DF80EE80FD800C81A0 +:104370001B81AA81B981CE0FD11D0FB6F894DEBF83 +:104380000FBECDBFED010895A29FB001B39FC00144 +:10439000A39F700D811D1124911DB29F700D811D71 +:1043A0001124911D089510E0C5E7D0E004C0FE017E +:1043B0000E94B4192196C637D107C9F7F894FFCFE8 +:1043C0002C01068C0B8C0B000054048000000000B4 +:1043D00000230B0310EC0ACA0ADE0A6A0B4F4B00DB +:1043E0005620332E332E30205349474E414C6475AE +:1043F000696E6F202D20636F6D70696C656420613C +:1044000074205365702031382032303136203030FE +:104410003A32313A3439004954506172616D733A1D +:1044200020003B000D0A004D5300443D0043503D29 +:104430000053503D004F0025303258002530315890 +:10444000004D43004C4C3D004C483D00534C3D005A +:0C44500053483D00433D004D5500500016 :00000001FF diff --git a/fhem/FHEM/firmware/SIGNALduino_uno.hex b/fhem/FHEM/firmware/SIGNALduino_uno.hex index 3c251a980..4d86edd20 100644 --- a/fhem/FHEM/firmware/SIGNALduino_uno.hex +++ b/fhem/FHEM/firmware/SIGNALduino_uno.hex @@ -1,1155 +1,1095 @@ -:100000000C9477000C949F130C94C6130C949F00CF -:100010000C949F000C949F000C949F000C949F00E4 -:100020000C949F000C949F000C949F000C949F00D4 -:100030000C949F000C947F080C949F000C949F00DC -:100040000C94ED130C949F000C94B1160C94E316D1 -:100050000C949F000C949F000C949F000C949F00A4 -:100060000C949F000C949F003B4D433D003B4D552D -:100070003D004D533D00556E737570706F72746521 -:100080006420636F6D6D616E640020557365206F31 -:100090006E65206F6620000000000800020100006D -:1000A0000304070000000000000000010204081023 -:1000B00020408001020408102001020408102004DE +:100000000C9476000C94860D0C945F0D0C949E005D +:100010000C949E000C949E000C949E000C949E00E8 +:100020000C949E000C949E000C949E000C949E00D8 +:100030000C949E000C94130E0C949E000C949E0045 +:100040000C94150D0C949E000C94270C0C94010C30 +:100050000C949E000C949E000C949E000C949E00A8 +:100060000C949E000C949E00556E737570706F72A8 +:1000700074656420636F6D6D616E640020557365F7 +:10008000206F6E65206F66200000000008000201EE +:10009000000003040700000000000000003B4D4387 +:1000A0003D003B4D553D004D533D000000000025F7 +:1000B0000028002B0000000000240027002A000474 :1000C00004040404040404020202020202030303FF -:1000D00003030300000000250028002B000000009F -:1000E00000240027002A0000190813175C081124B7 -:1000F0001FBECFEFD8E0DEBFCDBF12E0A0E0B1E081 -:10010000E6EFF6E402C005900D92A631B107D9F7EB -:1001100024E0A6E1B2E001C01D92AB3AB207E1F7DC -:1001200010E0CCEED0E004C02297FE010E949A1DA0 -:10013000C83ED107C9F70E9457170C946E230C9440 -:100140000000CF92DF92EF92FF920F931F930E94D5 -:10015000431400911D0210911E0220911F02309144 -:1001600020026B017C01C01AD10AE20AF30A97014E -:10017000860160931D0270931E0280931F0290936C -:1001800020020A3511052105310578F181E0C816F4 -:100190008DE7D806E104F10410F4960102C021E0D5 -:1001A0003DE74A9B03C03195219531098091620357 -:1001B0008B34D8F4809162038F5F809362038091C7 -:1001C0006303609161030E94421D90936303E09179 -:1001D0006303F0E0EE0FFF1FEB59FC4F31832083E8 -:1001E000809163038F5F809363031F910F91FF9052 -:1001F000EF90DF90CF9008950F931F9360912702A7 -:100200008DE00E943615109227020E94431400913F -:100210001D0210911E0220911F0230912002601BCE -:10022000710B820B930B62307D478105910520F0A5 -:100230001F910F910C94A1001F910F91089581E2DD -:1002400092E00E94FF188BE593E00E94FF1885E57D -:1002500093E00C94FF18CF93DF93EC01FB01248112 -:1002600035810E94421BCE01DF91CF91089541E07C -:1002700050E061EA70E080E00C946D1380E00C9433 -:100280008D13CF93DF931F92CDB7DEB72B9A2091BA -:10029000060130910701482F429FC001439F900DF6 -:1002A000112469830E948E142B98809106019091ED -:1002B00007016981FC016E9FC0016F9F900D1124A1 -:1002C0000F90DF91CF910C948E14EF92FF920F93C9 -:1002D0001F93CF93DF93F82EE92E0E943E0100E09A -:1002E00010E02091080130E0021713072CF56FE1B0 -:1002F00081E00E944101CF2DDE2D29912223C9F0FA -:10030000213371F0263449F02033B9F763E081E0FE -:100310000E94410163E081E009C063E081E002C026 -:1003200061E083E00E94410161E083E00E944101BD -:10033000E4CF0F5F1F4FD5CFDF91CF911F910F916A -:10034000FF90EF900C9437013F924F925F926F9223 -:100350007F928F929F92AF92BF92CF92DF92EF9255 -:10036000FF920F931F93CF93DF93082FEB01542E2F -:10037000452E59010E9443146B017C0110E0812C31 -:10038000912CB401600F711FC617D707A8F1C501E2 -:100390000E94FA1A8053E52DF42DE80FF11DE80FA5 -:1003A000F11D90818181382E331C3324331C692E3A -:1003B000782E31F077FE0CC071946194710808C0FA -:1003C00077FE03C071946194710888E1681A71081E -:1003D0000E9443146C157D058E059F05C8F33320DC -:1003E00011F02B9801C02B9AC60CD71CE11CF11CF4 -:1003F0008FEF881A980AC5CF0E9443146C157D05AB -:100400008E059F05C8F3DF91CF911F910F91FF904B -:10041000EF90DF90CF90BF90AF909F908F907F90A4 -:100420006F905F904F903F9008954F925F926F92C0 -:100430007F928F929F92AF92BF92CF92DF92EF9274 -:10044000FF920F931F93CF93DF93982E862E2A014E -:100450002B9A0E9443146B017C01662457FC609424 -:10046000762C891408F446C0692D70E081E292E090 -:100470000E94FA1A90ED980F9A3010F4892F01C05B -:100480008753C4E0D0E008E0A82EBB24A7FCB094BA -:100490000E9443146C157D058E059F05C8F310E07E -:1004A00098012A213B21232B71F02B98C40CD51CD9 -:1004B000E61CF71C0E9443146C157D058E059F05F4 -:1004C000C8F32B9A0DC02B9AC40CD51CE61CF71C44 -:1004D0000E9443146C157D058E059F05C8F32B986B -:1004E000C40CD51CE61CF71C15950795219781F6C1 -:1004F0009394B7CF0E9443146C157D058E059F051C -:10050000C8F3DF91CF911F910F91FF90EF90DF9093 -:10051000CF90BF90AF909F908F907F906F905F90A3 -:100520004F900895CF92DF92EF92FF920F931F9317 -:10053000CF93DF9300D000D000D0CDB7DEB78C01D1 -:100540006B01FC01E080F1806DE071E0CE0101966D -:100550000E946D19A701BE016F5F7F4F81E292E09B -:100560000E94261B7C01CE0101960E94FF18FFEF1E -:10057000EF16FF0601F1F801408151814F3FFFEF77 -:100580005F07C9F0970161E272E0CE0101960E9417 -:10059000421BBE016F5F7F4FC6010E94B919CE0199 -:1005A00001960E94FF188FEFE81AF80AF801F1820D -:1005B000E08281E001C080E026960FB6F894DEBFAD -:1005C0000FBECDBFDF91CF911F910F91FF90EF90A4 -:1005D000DF90CF900895BF92CF92DF92EF92FF927B -:1005E0000F931F93CF93DF93CDB7DEB7C856D109D2 -:1005F0000FB6F894DEBF0FBECDBF67E072E0CE014C -:100600008F599F4F0E946D196EE170E0CE018F5996 -:100610009F4F0E943019A9961FAE1EAEA9970E9447 -:100620003E011FEF01E042E1F42E59E0E52E62E0C9 -:10063000D62ECC24C394BE016F597F4FCE01895969 -:100640009F4F0E949202882309F44FC060E070E03F -:10065000CE018F599F4F0E94FA1A833589F561E0C8 -:1006600070E0CE018F599F4F0E94FA1A833419F31C -:1006700061E070E0CE018F599F4F0E94FA1A8D34CD -:1006800059F41F5FE1E0F0E0EC0FFD1FF19EE00D7B -:10069000F11D1124C282CFCF61E070E0CE018F59ED -:1006A0009F4F0E94FA1A823531F61F5FE1E0F0E0B9 -:1006B000EC0FFD1FF19EE00DF11D1124D282BBCF86 -:1006C00060E070E0CE018F599F4F0E94FA1A80358A -:1006D00009F068C062E070E0CE018F599F4F0E9420 -:1006E000FA1A8D3309F05EC082C0B12C32E1C32EFC -:1006F000B016D1F1D12CED2CF12CCE9CA001CF9CC9 -:10070000500D1124E1E0F0E0EC0FFD1FE40FF51FA8 -:100710008281823079F44A5F5F4F21E030E02C0F14 -:100720003D1F420F531F6481758121E232E08381B6 -:100730000E94A401CE9CF001CF9CF00D112481E019 -:1007400090E08C0F9D1FE80FF91F8281813031F4FA -:1007500040815181648183810E9415022B98D3943A -:100760001D1548F6B394C4CF0E94370161E272E0D0 -:100770008AE094E00E94F217CE018F599F4F0E94A9 -:10078000FF18C859DF4F0FB6F894DEBF0FBECDBFBC -:10079000DF91CF911F910F91FF90EF90DF90CF905D -:1007A000BF90089560E070E0CE018F599F4F0E9486 -:1007B000FA1A823509F050C061E070E0CE018F591D -:1007C0009F4F0E94FA1A8D3309F046C042E050E074 -:1007D000BE016F597F4FCE01855A9F4F0E942B015A -:1007E000CE01855A9F4F0E94871B062F82C022E0B0 -:1007F00030E041E050E0BE016F597F4FCE01855A95 -:100800009F4F0E94421BCE01855A9F4F0E94871B1B -:10081000B62ECE01855A9F4F0E94FF1843E050E04C -:10082000BE016F597F4FCE01855A9F4F0E942B0109 -:10083000CE01855A9F4F0E94871BE19EF001112433 -:10084000EB0DF11D3396EE0FFF1F21E030E02C0F72 -:100850003D1FE20FF31F4BC060E070E0CE018F59E7 -:100860009F4F0E94FA1A8434B9F4A9968EAD9FADB9 -:10087000A997E1E0F0E0EC0FFD1FF19EE00DF11D06 -:10088000112421E0280FA6963FADA697231B2383B2 -:10089000029795838483CFCE60E070E0CE018F59BC -:1008A0009F4F0E94FA1A833409F0C5CE61E070E0D0 -:1008B000CE018F599F4F0E94FA1A8D3309F0BBCE9B -:1008C00042E050E0BE016F597F4FCE01855A9F4FE5 -:1008D0000E942B01CE01855A9F4F0E94871BE1E0A9 -:1008E000F0E0EC0FFD1FF19EE00DF11D112471836E -:1008F0006083CE01855A9F4F0E94FF189CCE62E70D -:1009000070E08AE094E00E94A41760912B0270E0EE -:100910004AE050E08AE094E00E94B9186DE670E089 -:100920008AE094E00E94A4176091290270E04AE0F6 -:1009300050E08AE094E00E94B91868E670E08AE02E -:1009400094E00E94A41760912A0270E04AE050E00F -:100950008AE094E00C94C118CF93DF93CDB7DEB753 -:10096000AE970FB6F894DEBF0FBECDBF61E070E06A -:1009700081E292E00E94FA1A843729F161E070E086 -:1009800081E292E00E94FA1A823721F542E050E0BB -:1009900061E272E0CE0101960E942B0120E030E07E -:1009A00043E050E0BE01675D7F4FCE0101960E949B -:1009B000FC1ACE0101960E94FF18CE0189960E9472 -:1009C0008F1F8093080161E272E08AE094E00E9448 -:1009D000F21795C061E070E081E292E00E94FA1A9D -:1009E0008337F1F42B9A42E050E061E272E0CE01ED -:1009F00089960E942B0120E030E048E250E0BE01E1 -:100A00006F5F7F4FCE0189960E94FC1ACE018996B6 -:100A10000E94FF18CE0101960E9465012B98D3CF4A -:100A200061E070E081E292E00E94FA1A8336A9F454 -:100A300042E050E061E272E0CE0101960E942B019B -:100A4000CE0101960E94871B7093070160930601F7 -:100A5000CE0101960E94FF18B6CF61E070E081E2FE -:100A600092E00E94FA1A803709F049C067E072E00C -:100A7000CE0189960E946D1964E170E0CE018996DD -:100A80000E9430196FE071E0CE0189960E94C5196D -:100A90004AE060910801CE0101960E94DD19BE0175 -:100AA0006F5F7F4FCE0189960E94621ACE01019638 -:100AB0000E94FF1867E971E0CE0189960E94691AC9 -:100AC00060910601709107014AE0CE0101960E94F3 -:100AD0000A1ABE016F5F7F4FCE0189960E94621A8B -:100AE000CE0101960E94FF18BE01675D7F4F8AE02C -:100AF00094E00E94F217CE0189960E94FF18AE96EC -:100B00000FB6F894DEBF0FBECDBFDF91CF91089531 -:100B1000CF93DF9300D0CDB7DEB72091A7043091FB -:100B2000A8042115310511F42BEA34E0CE01019619 -:100B3000821B930B0F900F90DF91CF910895CF926E -:100B4000DF92EF92FF920E9437146B017C0128EE36 -:100B500033E040E050E00E94761D809118029091B1 -:100B60001902A0911A02B0911B02C816D906EA0612 -:100B7000FB0648F48091160290911702019690931B -:100B8000170280931602C0921802D0921902E092C6 -:100B90001A02F0921B02CA01B901FF90EF90DF9098 -:100BA000CF9008956AE171E08AE094E00E94041811 -:100BB00061E070E080E090E00C94661461E070E029 -:100BC00081E292E00E94FA1A813511F40E943E01FE -:100BD00061E070E081E292E00E94FA1A853411F43B -:100BE0000C9437010895262F220F330B94E049020D -:100BF000B0011124682B622B81E090E00C947322E9 -:100C0000CF93DF9361E070E081E292E00E94FA1AF4 -:100C1000873421F4DF91CF910C947F0462E070E07F -:100C200081E292E00E94FA1A833599F062E070E066 -:100C300081E292E00E94FA1A853571F062E070E07C -:100C400081E292E00E94FA1A833441F4CAE2D2E0CF -:100C500005C0CBE2D2E002C0C9E2D2E061E070E0C0 -:100C600081E292E00E94FA1A853419F481E08883C7 -:100C700009C061E070E081E292E00E94FA1A8434D7 -:100C800059F4188240912A026091290280912B0226 -:100C9000DF91CF910C94F305DF91CF91089560E03F -:100CA00070E081E292E00E94FA1A803511F40C940F -:100CB000D20560E070E081E292E00E94FA1A8F3380 -:100CC00009F072C06FE38AE094E00E94D5176AE8E9 -:100CD00070E08AE094E00E94A41766E58AE094E060 -:100CE0000E94D51760E28AE094E00E94D51769E679 -:100CF0008AE094E00E94D51760E28AE094E00E94C6 -:100D0000D51762E58AE094E00E94D51760E28AE098 -:100D100094E00E94D51764E78AE094E00E94D5171A -:100D200060E28AE094E00E94D51768E58AE094E0EA -:100D30000E94D51760E28AE094E00E94D51766E42D -:100D40008AE094E00E94D51760E28AE094E00E9475 -:100D5000D51763E58AE094E00E94D51760E28AE047 -:100D600094E00E94D51760E58AE094E00E94D517D0 -:100D700060E28AE094E00E94D51763E48AE094E0A0 -:100D80000E94D51760E28AE094E00E94D51767E4DC -:100D90008AE094E00E94D51760E28AE094E00E9425 -:100DA000D51767E072E00AC060E070E081E292E08F -:100DB0000E94FA1A863531F46DE171E08AE094E020 -:100DC0000C94041860E070E081E292E00E94FA1A4C -:100DD000823549F40E9488054AE050E0BC018AE06F -:100DE00094E00C94C11860E070E081E292E00E940F -:100DF000FA1A893641F488E292E00E94E408892BCD -:100E000081F40C94AC0460E070E081E292E00E9416 -:100E1000FA1A833561F488E292E00E94E408892B93 -:100E200021F081E080931C0208950C94EB0260E0B5 -:100E300070E081E292E00E94FA1A843751F40E9435 -:100E40009F05AB01BC012AE030E08AE094E00C94FD -:100E5000ED1860E070E081E292E00E94FA1A8835B5 -:100E600011F40C94DE0560E070E081E292E00E94F3 -:100E7000FA1A8634D1F060E070E081E292E00E94DC -:100E8000FA1A833411F40C94000660E070E081E2F9 -:100E900092E00E94FA1A873411F40C947F0466E7FA -:100EA00070E08AE094E00C94E01708951F93CF93CC -:100EB000DF9300D0CDB7DEB780911C02882389F084 -:100EC00010921C020E944F0680911C02811106C0E4 -:100ED00067E072E081E292E00E94C51981E08093B0 -:100EE000270211E080916203882341F1809162031F -:100EF00081508093620380916403609161030E943A -:100F0000421D90936403E091640381E08E0F80930F -:100F10006403F0E0EE0FFF1FEB59FC4F80819181DD -:100F20009A838983BE016F5F7F4F88E292E00E94BF -:100F30004B138823B9F210932702D4CF0F900F9050 -:100F4000DF91CF911F910895EF92FF920F931F931E -:100F5000CF93DF93EC017B018A0181E090E00E9456 -:100F60006B22982F9170988381FB992790F9F70154 -:100F7000908382FB882780F9F8018083DF91CF91ED -:100F80001F910F91FF90EF90089526E040E051EE01 -:100F900060E070E08AE094E00E944F1660E082E03A -:100FA0000E94FD1461E08BE00E94FD1461E08DE081 -:100FB0000E94FD1480E1809381001092800082E005 -:100FC0008093FD0388E199E79093FF038093FE03EC -:100FD000909387008093860082E1809381008CEF5C -:100FE00090E09093FC038093FB0381E080936F007B -:100FF00080E090E00E946B228B3049F44AE252E09C -:1010000069E272E08BE292E00E94A4070AC06BE002 -:1010100080E090E00E94732267E081E090E00E940F -:1010200073220E94370164E170E081E292E00C9447 -:1010300030190F931F93CF93DF938BE48093610359 -:10104000109262031092640310926303CBE3D3E027 -:10105000D0934003C0933F030DE313E0109342038A -:101060000093410367E072E085E593E00E946D190B -:1010700067E072E08BE593E00E946D19F801118240 -:1010800010821982188288E292E00E94A60867E026 -:1010900072E081E292E00E946D190E944314609315 -:1010A0001D0270931E0280931F0290932002DF9115 -:1010B000CF911F910F9108950C941F01CF93C1E020 -:1010C0008AE094E00E946C15892BB9F08AE094E0E4 -:1010D0000E9485158A3041F01CF4882329F007C04E -:1010E0008D3011F0833219F4C0931C02E9CF682FC0 -:1010F00081E292E00E94791AE3CFCF9108951F9286 -:101100000F920FB60F9211242F933F934F935F933B -:101110006F937F938F939F93AF93BF93EF93FF93BF -:10112000E091FB03F091FC030995FF91EF91BF91D2 -:10113000AF919F918F917F916F915F914F913F916F -:101140002F910F900FBE0F901F901895FC01E85F34 -:10115000FE4F1082B39610827B97108231961182D7 -:1011600010827B962FEF2083FC012083AC0120E0CE -:1011700030E0FA01E15EFE4F11821082FC01E20FC5 -:10118000F31F14822F5F3F4F4E5F5F4F26303105B4 -:1011900081F7FC01E55FFE4F1082339626E930E0CF -:1011A000318320833D964DEC5CEC6CE47EE3408320 -:1011B00051836283738372971082339610823196C3 -:1011C000108233971082089580E090E00895CF93C5 -:1011D000DF93FC01E55DFE4FD081C0E07D97CD1728 -:1011E000C1F0DC01A15EBE4F2D913C91AB01421BD1 -:1011F000530B9A0157FF03C031952195310902968F -:10120000408151814217530714F08C2F03C0CF5FE8 -:10121000E6CF8FEFDF91CF910895FC011482158204 -:101220001682178210861186411104C0DC01A85F66 -:10123000BE4F4C91641780F4DF01A60FB11D1A96C2 -:101240008C91DF01A80FB11D14968C9114978F5FBC -:1012500014968C936F5FEECF08952F923F924F922A -:101260005F926F927F928F929F92AF92BF92CF9236 -:10127000DF92EF92FF920F931F93CF93DF93CDB73F -:10128000DEB72E970FB6F894DEBF0FBECDBF9E8798 -:101290008D8740E060E00E940D09ED85FE85E55DEB -:1012A000FE4F5080712C2D853E85255E3E4F3A873E -:1012B00029878D859E85885F9E4F9C878B877514B7 -:1012C00009F4C3C044244394470C642C272C312CCC -:1012D000C101880F991FAD85BE858A0F9B1FFC0138 -:1012E000E15EFE4FFA83E9832A0E3B1EF4E02F0EE7 -:1012F000311C29813A8138872F83651409F4A3C0F2 -:10130000862D90E09C838B83880F991F9E838D830D -:10131000FC01AD85BE85EA0FFB1FE15EFE4F00813B -:101320001181C80117FF04C088279927801B910BE2 -:10133000BC01882777FD8095982F0E942B1CE9859A -:10134000FA8520813181428153810E94DF1C4B014B -:101350005C01A981BA81CD90DC907801EC18FD0880 -:10136000F7FE03C0F194E194F10820E030E040E0A2 -:101370005FE3C501B4010E94DF1C9B01AC01C50104 -:10138000B4010E94941B0E94F81B6E157F050CF49B -:1013900058C0EB85FC85208180E090E0821750F4F6 -:1013A000ED85FE85E80FF91F3285361101C0728682 -:1013B0000196F4CFD1014C91552747FD5095EB8113 -:1013C000FC812D853E85E20FF31FE481FF27E7FDB9 -:1013D000F0959A012E0F3F1F21153105E1F4C49EAF -:1013E000C001C59E900DD49E900D1124B9010E949C -:1013F000621D7B010E9FC0010F9F900D1E9F900DDF -:101400001124B9010E94621DE60EF71EAF81B88556 -:10141000ED92FC920CC00C0D1D1D17FF02C00F5F5A -:101420001F4F15950795E981FA8111830083ED819E -:10143000FE812D853E85E20FF31FE15EFE4F118296 -:10144000108263945ACF742C3ACF2E960FB6F8942C -:10145000DEBF0FBECDBFDF91CF911F910F91FF90E7 -:10146000EF90DF90CF90BF90AF909F908F907F9044 -:101470006F905F904F903F902F9008953F924F92C2 -:101480005F926F927F928F929F92AF92BF92CF9214 -:10149000DF92EF92FF920F931F93CF93DF93EC01B4 -:1014A0008FEF8883FE01E55DFE4F30806E0100E026 -:1014B00010E0EE24EA94FE2C4E0188EF881A8EEF9D -:1014C000980A031508F06AC0F601E15EFE4F5F015D -:1014D000FFEFEF16FF0639F5F5018081918197FD49 -:1014E00022C0FE01E00FF11F6481772767FD709530 -:1014F000872F972F0E942B1C2B013C01F401608148 -:1015000070E080E090E00E942B1C2BE734E14EE27B -:101510005EE30E94DF1C9B01AC01C301B2010E948B -:10152000DB1C1816A4F1F5012081318137FD30C094 -:10153000C701880F991F8C0F9D1FFC01E15EFE4FB4 -:1015400080819181281739071CF5FE01E00FF11FFA -:101550006481772767FD7095872F972F0E942B1C3A -:101560002B013C01F401608170E080E090E00E947A -:101570002B1C2BE734E14EE25EE30E94DF1C9B0153 -:10158000AC01C301B2010E94DB1C18160CF47801F7 -:101590000F5F1F4FF2E0CF0ED11C93CF8FEFE816F5 -:1015A000F80641F0E882CF5EDE4F81E090E099835B -:1015B000888301C080E0DF91CF911F910F91FF9050 -:1015C000EF90DF90CF90BF90AF909F908F907F90E3 -:1015D0006F905F904F903F9008958F929F92AF923F -:1015E000BF92CF92DF92EF92FF920F931F93CF9310 -:1015F000DF93FC018C010F5E1E4FD8018D919C91F1 -:101600001197019709F07CC05A96BC90BA94C7E034 -:10161000AC2E6F01B8EFCB1ABEEFDB0AB7FC70C07F -:101620002B2D332727FD3095C901880F991F8E0F69 -:101630009F1FDC01A15EBE4FCD91DC91D7FF5EC044 -:10164000D195C195D109C83682E4D80708F056C0B3 -:10165000E080FF24E7FCF094C701880F991F8E0FEC -:101660009F1FDC01A15EBE4F8D909C90CE01B40106 -:101670000E944E1D6832710508F040C0A89CC00150 -:10168000A99C900D11248C179D07C0F5DF01A20FB6 -:10169000B31F14968C9186308CF5D6014C9150E096 -:1016A000BA0161507109912C892D90E08617970736 -:1016B00084F4DF01A80FB91F1B96CC911B97D0E0D3 -:1016C000C217D307C9F41A96AC91B0E0AE15BF05A6 -:1016D00099F4485251098417950784F4DF01A45DF9 -:1016E000BE4FBC9282E090E0D8018D939C93E75F5F -:1016F000FE4F908281E009C09394D6CFBA948ECFEA -:10170000E45DFE4F8FEF808380E0DF91CF911F91EA -:101710000F91FF90EF90DF90CF90BF90AF909F9090 -:101720008F9008950F931F93CF93DF938A01E90160 -:101730008AE094E00E94C717B8018AE094E00E9412 -:10174000C717BE018AE094E0DF91CF911F910F91FE -:101750000C94C717EF92FF920F931F93CF93DF93D1 -:10176000EC01F62EE42EB9018AE094E00E94C7173E -:10177000EF1460F0FE01EF0DF11D4AE050E06285CC -:101780008AE094E00E94E618F394F2CFB8018AE070 -:1017900094E00E94C71780E0DF91CF911F910F91D5 -:1017A000FF90EF90089570E0FC0126A1332727FDFC -:1017B00030956217730751F027A1332727FD309525 -:1017C00081E06217730719F080E0089581E00895C1 -:1017D00070E0FC0120A5332727FD309562177307C1 -:1017E00051F021A5332727FD309581E0621773075B -:1017F00019F080E0089581E008959F92AF92BF9222 -:10180000CF92DF92EF92FF920F931F93CF93DF93CC -:1018100000D01F92CDB7DEB78C017B0120E330E30F -:1018200040E029833A834B83FC01668DF3E06F9F90 -:10183000B0011124C7010E943019E114F10449F1EB -:10184000912C87ECA82E81E0B82ECE0101966C0178 -:10185000F801868D8915E8F0F80183A1981620F427 -:10186000E90DF11D808101C08FEF1F928F93BF9210 -:10187000AF92DF92CF920E947720B601C7010E94FB -:10188000691A93940F900F900F900F900F900F90F4 -:10189000DFCF0F900F900F90DF91CF911F910F919D -:1018A000FF90EF90DF90CF90BF90AF909F90089502 -:1018B0000F931F93CF93DF938C01EB0160E270E0F5 -:1018C000CE010E943019209709F468C06CEC71E0D9 -:1018D000CE010E94691AF80184A195A126A1220FC8 -:1018E000330B820F931FFC01E15EFE4F608171811B -:1018F000CE010E94B81A6BE3CE010E94791A60ED06 -:1019000071E0CE010E94691AF80184A195A127A176 -:10191000220F330B820F931FFC01E15EFE4F6081AB -:101920007181CE010E94B81A6BE3CE010E94791A30 -:1019300064ED71E0CE010E94691AF80184A195A1BD -:1019400020A5220F330B820F931FFC01E15EFE4F97 -:1019500060817181CE010E94B81A6BE3CE010E94B2 -:10196000791A68ED71E0CE010E94691AF80184A12C -:1019700095A121A5220F330B820F931FFC01E15E7D -:10198000FE4F60817181CE010E94B81A6BE3CE01D7 -:10199000DF91CF911F910F910C94791ADF91CF9124 -:1019A0001F910F9108950F931F93CF93DF938C0195 -:1019B000EB0167E070E0CE010E943019209799F0AA -:1019C0006CED71E0CE010E94691AF80162A573A561 -:1019D000CE010E94B81A6BE3CE01DF91CF911F9127 -:1019E0000F910C94791ADF91CF911F910F91089567 -:1019F0004F925F926F927F928F929F92AF92BF921F -:101A0000CF92DF92EF92FF920F931F93CF93DF93CA -:101A1000EC010CA11DA1580185EDA81A8EEFB80AA2 -:101A2000F5018081843008F4C4C06801F8EFCF1A52 -:101A3000FEEFDF0AF601608170E080E090E00E9436 -:101A40002B1C2AE037ED43E25DE30E94DF1C0E947D -:101A5000FD1B40E050E0912C812CEE24EA94FE2CFA -:101A6000262F30E0F5018081481708F06BC0642F05 -:101A700070E0F801E60FF71FE4818E2F992787FDAC -:101A80009095821793070CF45BC0660F771F600F69 -:101A9000711FDB01A15EBE4F6D917C91161617067A -:101AA0004CF55E0F8394E60EF71EEFA1EF3F69F051 -:101AB0008E2F880F990B800F911FDC01A15EBE4F06 -:101AC0008D919C91861797070CF4E42FEFA3E9A55D -:101AD000EF3F69F08E2F880F990B800F911FDC016B -:101AE000A15EBE4F8D919C91681779070CF4E42F8D -:101AF000E9A726C05E1B9394EEA1EF3F69F08E2FFD -:101B0000880F990B800F911FDC01A15EBE4F8D9154 -:101B10009C91681779070CF4E42FEEA3E8A5EF3F3A -:101B200069F08E2F880F990B800F911FDC01A15E49 -:101B3000BE4F8D919C91861797070CF4E42FE8A770 -:101B40004F5F90CF652F70E080E090E00E942B1CEB -:101B50002B013C01F601608170E080E090E00E9482 -:101B60002B1C2AE037ED43EA5CE30E94DF1C9B015B -:101B7000AC01C301B2010E94DB1C1816D4F098100E -:101B800018C0C70163E070E00E94621D7BA76AA7CE -:101B90009EA19F3F71F088A58F3F59F0981749F09B -:101BA0002FA12F3F31F099A59F3F19F081E0291314 -:101BB00001C080E0DF91CF911F910F91FF90EF90D6 -:101BC000DF90CF90BF90AF909F908F907F906F905D -:101BD0005F904F900895FC0183A12E2FDF019A2F73 -:101BE000921B981710F41D92FACF168E178E87E06D -:101BF00082A3089524E1FC0124A70C94EB0D7F92AD -:101C00008F929F92AF92BF92CF92DF92EF92FF920C -:101C10000F931F93CF93DF93EC018CA19DA1FC0147 -:101C2000E45FFE4F108233971082D12CF12C812C6F -:101C300037E0B32EAA24A3940CA11DA1F801E85FFC -:101C4000FE4F8081881608F04DC0F11014C0F801D5 -:101C5000E80DF11DE2846E2DCE010E94D30B81119F -:101C600006C06E2DCE010E94E80B8823C9F1F80151 -:101C7000E75FFE4F80820CA11DA1D1108FC0C8016B -:101C8000885F9E4F7C01F801E80DF11DC2846C2D28 -:101C9000CE010E94D30B811161C0F70180818816AB -:101CA00008F47AC05BC0672DCE010E94E80B782E45 -:101CB000811184C04F8D50E02CA5332727FD30952E -:101CC000421753070CF0C8C07110B4C0CE010E9477 -:101CD000EB0DF12C4E8D8BA1481708F486C0DF2C3C -:101CE0008394AACF88122DC0D801A75FBE4F4C9114 -:101CF000423038F12F8D30E08CA587FD8F5F8595C0 -:101D0000992787FD909582179307DCF4841A8082C7 -:101D10008CA19DA1FC01E85FFE4F408150E04F5F28 -:101D20005F4F3196608170E0665F7F4F680F791F6B -:101D30000A960E94DD1FECA1FDA1E45FFE4F81E049 -:101D400080834F8D50E02CA5332727FD309581E00F -:101D5000421753070CF0B5C080E0B3C0282DF7013F -:101D600080818816B0F4C8018C0D911D8C0D911DD9 -:101D7000FC01E15EFE4F9180991C9924991CF801A9 -:101D8000E75FFE4F8080281949F020FF07C0839449 -:101D900005C0FF24F394A4CF839475CFE82CF12CD5 -:101DA0006801CE0CDF1CF6017284672DCE010E9403 -:101DB000D30B882309F477CF9A2414C0F801E85F85 -:101DC000FE4F208130E021503109E216F3060CF07D -:101DD00071CFF6016385CE010E94E80B882309F4D8 -:101DE00069CF8394FF24F39475CF5AA1852F90E097 -:101DF000292D332727FD3095052E01C0220F0A9487 -:101E0000EAF7FE01E40FF11D3081322B30832F8D74 -:101E10002F5F2F8F28A1821B910997FD03C0521BB2 -:101E20005AA35DCFBAA24F5F4E8FFE01E40FF11DA2 -:101E3000108255CFF801E85FFE4F808190E0019756 -:101E4000E816F9060CF042CFF6016385CE010E9438 -:101E5000E80B882389F13ACFF801E65FFE4F8082D4 -:101E60008CA19DA1FC01E85FFE4FDC01A65FBE4F87 -:101E700020818C91281B20838CA19DA1FC01E85F0F -:101E8000FE4F408150E04F5F5F4F3296608170E0BF -:101E9000665F7F4F680F791F0A960E94DD1FECA1D5 -:101EA000FDA1E45FFE4F81E080834F8D50E02CA5C3 -:101EB000332727FD30954CCFF801E75FFE4F808038 -:101EC00005CFDF91CF911F910F91FF90EF90DF90A1 -:101ED000CF90BF90AF909F908F907F9008953F924A -:101EE0004F925F926F927F928F929F92AF92BF922A -:101EF000CF92DF92EF92FF920F931F93CF93DF93D6 -:101F0000CDB7DEB7E3970FB6F894DEBF0FBECDBFF7 -:101F10007C013C0188EF681A8EEF780AF30180811A -:101F2000883208F474C2C7010E942D0940E060E0C5 -:101F3000C7010E940D09C7010E943E0AC7010E9405 -:101F4000ED0AF7018381882309F422C1EF5EFE4F79 -:101F500080819181029709F01BC14701F7EF8F1A29 -:101F6000FEEF9F0AF40160815701F6EFAF1AFEEF12 -:101F7000BF0A82E0860FF5018083F3017081872F0D -:101F800090E00197D701A45DBE4FF5011081212F8C -:101F900030E028173907FCF4F701E20FF31F4385FF -:101FA00050E02C91332727FD30954217530779F4E1 -:101FB000428550E0F7012081332727FD30954217F5 -:101FC000530729F41150F501108311E005C01E5F7D -:101FD000F5011083DACF10E0F5018081781708F45D -:101FE0007083F5014081C7010E940D09112351F052 -:101FF000F501808190E0F4012081821B910988978E -:1020000034F4C2C0F30140814E3F08F09EC0670126 -:10201000F3EDCF1AFEEFDF0A67E072E0C6010E941F -:10202000C51987010D5C1E4F67E072E0C8010E9470 -:10203000C51962E0C6010E94791A6FED71E0C60110 -:102040000E94691A6BE3C6010E94791A312C37018C -:1020500085ED681A8EEF780AF3018081381640F515 -:10206000432C512CF701E40DF51D84818823F1F0F8 -:1020700060E5C6010E94791A632DC6010E948C1A80 -:102080006DED71E0C6010E94691AC201880F991FA7 -:102090008E0D9F1DFC01E15EFE4F60817181C601C6 -:1020A0000E94B81A6BE3C6010E94791A3394D4CF08 -:1020B00062EE71E0C6010E94691A6BE3C8010E94DA -:1020C000791A65EE71E0C8010E94691AF701608112 -:1020D000772767FD7095C8010E94B81A6BE3C801A5 -:1020E0000E94791A69EE71E0C8010E94691AF7012D -:1020F000E45DFE4F6081772767FD7095C8010E94FF -:10210000B81A6BE3C8010E94791AF701E35FFE4F2A -:102110008081882349F06DEE71E0C8010E94691A40 -:102120006BE3C8010E94791A63E0C8010E94791A22 -:102130006AE0C8010E94791A9601F5014081F40114 -:102140006081C7010E94AA0BD1C0F4016081623096 -:10215000D8F0F501808190E08D3F9105ACF0461BF1 -:10216000F301408350E04F5F5F4F70E0665F7F4F49 -:102170006E0D7F1DC7010A960E94DD1F81E0F701E9 -:10218000E45FFE4F8083BBC0C7010E94A608B7C0B2 -:10219000F7018181811104C08281882309F4ABC0D9 -:1021A000F701EF5EFE4F80819181019709F0A3C096 -:1021B000F3018081883208F49EC06701F3EDCF1AE5 -:1021C000FEEFDF0A67E072E0C6010E94C5198701D1 -:1021D0000D5C1E4F67E072E0C8010E94C51962E005 -:1021E000C6010E94791A8EE18CA381E089A31AA20C -:1021F000CE0101960E94EB0D29A187E090E0821BA1 -:1022000091097AA167E041E050E0262F30E0821783 -:1022100093074CF49A01062E01C0220F0A94EAF7A4 -:10222000722B6150F2CF7AA38FEF8FA388A789A773 -:102230008AA7FEA2EDA2CE0101960E94FA0DCE0160 -:1022400001960E94FA0D81E18DA7F7018281882312 -:1022500009F45FC0CE0101960E94F80C882309F4AE -:1022600058C0CE0101960E94FF0D882309F451C089 -:1022700067E072E0CE018E960E946D1962EE71E009 -:10228000CE018E960E94C519BE01625D7F4FCE01C0 -:1022900001960E94FD0B62EF71E0C6010E94691A6F -:1022A0006BE3C6010E94791AB601CE0101960E9425 -:1022B000580C6BE3C8010E94791AB801CE0101964F -:1022C0000E94D30C63E0C8010E94791A6AE0C80139 -:1022D0000E94791A9801AE01425D5F4FB601C701B5 -:1022E0000E94920BCE018E960E94FF1881E0F701AA -:1022F000E55FFE4F47CFF701E55FFE4F1082F70124 -:10230000E45FFE4F8081811182C0C7010E94A60850 -:102310007EC0F7018181882349F36FEE71E0C60129 -:102320000E94691A6BE3C6010E94791A512C570169 -:10233000F5EDAF1AFEEFBF0AF5018081581648F59A -:10234000852C912CF701E80DF91D84818823F9F083 -:1023500060EC71E0C6010E94691A652DC6010E94F9 -:102360008C1A6DED71E0C6010E94691AC401880FD4 -:10237000991F8E0D9F1DFC01E15EFE4F60817181F2 -:10238000C6010E94B81A6BE3C6010E94791A5394E1 -:10239000D3CF62EE71E0C6010E94691A6BE3C801F7 -:1023A0000E94791A65EE71E0C8010E94691AF7016E -:1023B0006081772767FD7095C8010E94B81A6BE3AA -:1023C000C8010E94791AF701E35FFE4F80818823DC -:1023D00049F06DEE71E0C8010E94691A6BE3C80113 -:1023E0000E94791A63E0C8010E94791A6AE0C80164 -:1023F0000E94791AF30140814150960160E0C701C3 -:102400000E94AA0BF701E45FFE4F10826FCFE396A4 -:102410000FB6F894DEBF0FBECDBFDF91CF911F91F5 -:102420000F91FF90EF90DF90CF90BF90AF909F9073 -:102430008F907F906F905F904F903F9008958F9214 -:102440009F92AF92BF92CF92DF92EF92FF920F9343 -:102450001F93CF93DF931F92CDB7DEB74C018C0152 -:10246000085F1E4FD8018C9190E08D3F910544F09C -:1024700081E0F401E35FFE4F8083C4010E946F0F8F -:10248000F401E05FFE4F10826401B9EECB1ABEEF9B -:10249000DB0AD601ED91FC91119780819181129612 -:1024A0000D90BC91A02D2D913C91D8014C91509153 -:1024B00000047401B5EDEB1ABEEFFB0AD7016C9175 -:1024C000651708F45C93442361F082279327B92EA3 -:1024D000BB1CBB24BB1C81E04D3F09F480E0B8224B -:1024E00005C0D7011C9210920004B12C608171814B -:1024F000C40149830E94E708A82E498187FD2CC0AA -:10250000F401E40FF11D8287423030F081858A1199 -:1025100003C0C4010E94A6088A2D880F990B880D5C -:10252000991DFC01E15EFE4FD6018D919C912081A9 -:102530003181DC018D919C91280F391F37FF02C03A -:102540002F5F3F4F3595279531832083F801808198 -:102550008F5F808320E012C040E060E0C4010E94F1 -:102560000D09D7018C91863041F480910004F4016B -:10257000E80FF11D8481823024F421E0B1101DC0E8 -:1025800001C020E0F8018081A401455F5E4F5A013F -:10259000883248F081E0DA018C93C4010E946F0F09 -:1025A000109200046AC0C40129830E94A608F501A4 -:1025B00010821092000429810BC0D8018C918832BE -:1025C00038F083E090E0F401EF5EFE4F918380836A -:1025D000222309F452C0F80140815091000480E0A8 -:1025E00090E0242F30E0F9013197280D391DBF010B -:1025F000680F791F6F3FAFEF7A07E1F00197D901BC -:10260000A80FB91F1A96AC91A513F1CFCB01019673 -:10261000481BD8014C9350E04F5F5F4F655F7F4F81 -:10262000680D791DC4010A960E94DD1FF8018081A2 -:102630008F5F808340910004D601ED91FC91208151 -:102640003181C401840F911D840F911DFC01E15E55 -:10265000FE4F31832083F8018081F401E80FF11DE2 -:1026600042878F5FD8018C934F5F409300044630C0 -:1026700021F410920004F70140830F90DF91CF9175 -:102680001F910F91FF90EF90DF90CF90BF90AF9090 -:102690009F908F900895CF93DF93EC01C55FDE4F3D -:1026A0001882FC01E75EFE4F0190F081E02D208151 -:1026B0003181DC01A95EBE4F0D90BC91A02D2D9300 -:1026C0003C93DB012D913C91318320830E941F12AA -:1026D0008881DF91CF91089508958230E8F4E82F42 -:1026E000F0E0EE0FFF1FE75FFE4F718360838130E4 -:1026F00041F0809169008C7F842B80936900E89A77 -:10270000089580916900440F551F440F551F837F22 -:10271000842B80936900E99A0895823078F481309F -:1027200011F0E89801C0E998E82FF0E0EE0FFF1FE4 -:10273000E75FFE4F8CE693E19183808308951F92BB -:102740000F920FB60F9211242F933F934F935F93E5 -:102750006F937F938F939F93AF93BF93EF93FF9369 -:10276000E0910901F0910A010995FF91EF91BF9164 -:10277000AF919F918F917F916F915F914F913F9119 -:102780002F910F900FBE0F901F9018951F920F92D0 -:102790000FB60F9211242F933F934F935F936F9334 -:1027A0007F938F939F93AF93BF93EF93FF93E091AA -:1027B0000B01F0910C010995FF91EF91BF91AF9141 -:1027C0009F918F917F916F915F914F913F912F9149 -:1027D0000F900FBE0F901F9018951F920F920FB67B -:1027E0000F9211242F933F938F939F93AF93BF9397 -:1027F0008091020490910304A0910404B091050417 -:102800003091010423E0230F2D3720F40196A11D00 -:10281000B11D05C026E8230F0296A11DB11D20930E -:1028200001048093020490930304A0930404B093E2 -:1028300005048091060490910704A0910804B091CA -:1028400009040196A11DB11D80930604909307040D -:10285000A0930804B0930904BF91AF919F918F9109 -:102860003F912F910F900FBE0F901F9018952FB78B -:10287000F894609102047091030480910404909193 -:1028800005042FBF08953FB7F894809106049091F6 -:102890000704A0910804B091090426B5A89B05C0BF -:1028A0002F3F19F00196A11DB11D3FBF6627782F5C -:1028B000892F9A2F620F711D811D911D42E0660FB5 -:1028C000771F881F991F4A95D1F70895CF92DF92FD -:1028D000EF92FF92CF93DF936B017C010E94431430 -:1028E000EB01C114D104E104F10489F00E94921BB0 -:1028F0000E9443146C1B7D0B683E734090F381E093 -:10290000C81AD108E108F108C851DC4FEACFDF91BD -:10291000CF91FF90EF90DF90CF9008958230910596 -:1029200038F0880F991F880F991F05970197F1F7C5 -:102930000895789484B5826084BD84B5816084BD37 -:1029400085B5826085BD85B5816085BDEEE6F0E028 -:10295000808181608083E1E8F0E010828081826084 -:102960008083808181608083E0E8F0E08081816005 -:102970008083E1EBF0E0808184608083E0EBF0E035 -:10298000808181608083EAE7F0E0808184608083D9 -:102990008081826080838081816080838081806883 -:1029A00080831092C1000895833081F028F4813033 -:1029B00099F08230A1F008958730A9F08830B9F0FD -:1029C0008430D1F4809180008F7D03C0809180009D -:1029D0008F7780938000089584B58F7702C084B587 -:1029E0008F7D84BD08958091B0008F7703C0809162 -:1029F000B0008F7D8093B0000895CF93DF9390E077 -:102A0000FC01E555FF4F2491FC01E154FF4F8491F7 -:102A1000882349F190E0880F991FFC01E352FF4F92 -:102A2000A591B4918D529F4FFC01C591D4919FB750 -:102A3000611108C0F8948C91209582238C93888131 -:102A400082230AC0623051F4F8948C91322F309571 -:102A500083238C938881822B888304C0F8948C9183 -:102A6000822B8C939FBFDF91CF9108950F931F937B -:102A7000CF93DF931F92CDB7DEB7282F30E0F90157 -:102A8000E956FF4F8491F901E555FF4F1491F90183 -:102A9000E154FF4F04910023C9F0882321F069839A -:102AA0000E94D4146981E02FF0E0EE0FFF1FED5279 -:102AB000FF4FA591B4919FB7F8948C91611103C019 -:102AC0001095812301C0812B8C939FBF0F90DF91C4 -:102AD000CF911F910F910895FC01818D228D90E07F -:102AE000805C9F4F821B91098F7399270895FC0189 -:102AF000918D828D981731F0828DE80FF11D858DB3 -:102B000090E008958FEF9FEF0895FC01918D828DE5 -:102B1000981761F0828DDF01A80FB11D5D968C9131 -:102B2000928D9F5F9F73928F90E008958FEF9FEF3C -:102B3000089589E097E1892B49F08EE598E0892B8B -:102B400029F00E94091781110C945E080895FC0178 -:102B5000848DDF01A80FB11DA35ABF4F2C91848D26 -:102B600090E001968F739927848FA689B7892C935B -:102B7000A089B1898C9180648C93938D848D9813F6 -:102B800006C00288F389E02D80818F7D80830895BF -:102B9000CF93DF93EC01888D8823C9F0EA89FB8904 -:102BA000808185FD05C0A889B9898C9186FD0FC0FB -:102BB0000FB607FCF5CF808185FFF2CFA889B989D0 -:102BC0008C9185FFEDCFCE010E94A715E7CFDF9155 -:102BD000CF910895CF92DF92FF920F931F93CF93DF -:102BE000DF931F92CDB7DEB76C0181E0D601589616 -:102BF0008C9358975B969C915B975C968C915C97B5 -:102C0000981307C05096ED91FC915197808185FDF6 -:102C10002EC0F601038D10E00F5F1F4F0F731127B9 -:102C2000F02EF601848DF81211C00FB607FCF9CF13 -:102C3000D6015096ED91FC915197808185FFF1CF9F -:102C4000C60169830E94A7156981EBCF838DE80FC8 -:102C5000F11DE35AFF4F6083D6015B960C935B979F -:102C60005296ED91FC915397808180620CC0D60101 -:102C70005696ED91FC91579760835096ED91FC919B -:102C8000519780818064808381E090E00F90DF9194 -:102C9000CF911F910F91FF90DF90CF900895BF9239 -:102CA000CF92DF92EF92FF92CF93DF93EC016A0114 -:102CB0007B01B22EE889F98982E08083411581EE9B -:102CC000580761057105A1F060E079E08DE390E0BF -:102CD000A70196010E94761D215031094109510931 -:102CE0005695479537952795211580E1380798F037 -:102CF000E889F989108260E874E88EE190E0A70124 -:102D000096010E94761D21503109410951095695BD -:102D1000479537952795EC85FD853083EE85FF85B2 -:102D20002083188EEC89FD89B082EA89FB89808135 -:102D300080618083EA89FB89808188608083EA8959 -:102D4000FB89808180688083EA89FB8980818F7D0F -:102D50008083DF91CF91FF90EF90DF90CF90BF9075 -:102D600008951F920F920FB60F9211242F938F93F5 -:102D70009F93EF93FF93E0911A04F0911B048081DD -:102D8000E0912004F091210482FD12C09081809195 -:102D900023048F5F8F7320912404821751F0E091F8 -:102DA0002304F0E0E65FFB4F958F8093230401C07E -:102DB0008081FF91EF919F918F912F910F900FBE86 -:102DC0000F901F9018951F920F920FB60F9211241B -:102DD0002F933F934F935F936F937F938F939F9323 -:102DE000AF93BF93EF93FF938AE094E00E94A715FF -:102DF000FF91EF91BF91AF919F918F917F916F91D3 -:102E00005F914F913F912F910F900FBE0F901F90A8 -:102E100018958AE094E00E946C1521E0892B09F452 -:102E200020E0822F089510920D0410920C0488EE79 -:102E300093E0A0E0B0E080930E0490930F04A09381 -:102E40001004B093110489EF91E090930B048093E8 -:102E50000A0485EC90E0909317048093160484ECA8 -:102E600090E0909319048093180480EC90E0909384 -:102E70001B0480931A0481EC90E090931D048093CE -:102E80001C0482EC90E090931F0480931E0486EC57 -:102E900090E09093210480932004109223041092D8 -:102EA00024041092250410922604089508950E9487 -:102EB00099140E9456170E94C507C9E9D5E10E94DE -:102EC00056072097E1F30E949915F9CFCF92DF9230 -:102ED000EF92FF920F931F93CF93DF937C016A01D0 -:102EE000EB0100E010E00C151D0571F06991D701B0 -:102EF000ED91FC910190F081E02DC7010995892B9E -:102F000019F00F5F1F4FEFCFC801DF91CF911F91D5 -:102F10000F91FF90EF90DF90CF90089561157105AC -:102F200081F0DB010D900020E9F7AD01415051091E -:102F3000461B570BDC01ED91FC910280F381E02DE3 -:102F4000099480E090E00895EF92FF920F931F9311 -:102F5000CF93DF938C017B01C0E0D0E0F701EC0F51 -:102F6000FD1F6491662359F0F801A081B181ED91B4 -:102F7000FC91C8010995892B11F02196EFCFCE0164 -:102F8000DF91CF911F910F91FF90EF900895DC0199 -:102F9000ED91FC91DB0114964D915C9115976D912B -:102FA0007C910280F381E02D0994DC01ED91FC918C -:102FB0000190F081E02D099465E072E00C948E1789 -:102FC0000F931F93CF93DF93EC010E94A4178C0102 -:102FD000CE010E94DC17800F911FDF91CF911F91CE -:102FE0000F9108950F931F93CF93DF93EC010E94ED -:102FF000C7178C01CE010E94DC17800F911FDF9153 -:10300000CF911F910F9108950F931F93CF93DF934B -:10301000EC010E948E178C01CE010E94DC17800FFC -:10302000911FDF91CF911F910F9108958F929F92E1 -:10303000AF92BF92CF92DF92EF92FF920F931F93C6 -:10304000CF93DF93CDB7DEB7A1970FB6F894DEBF6D -:103050000FBECDBF7C01C42EE52FCB01D22E19A20D -:1030600021E02D1510F02AE0D22E8E010F5D1F4FAA -:103070008D2C912CA12CB12C6C2D7E2FA5019401AF -:103080000E94761D8C2DD29E8019112401501109A9 -:103090008A3014F4805D01C0895CF80180832115B9 -:1030A00031054105510521F0C22EE32FCA01E4CFBD -:1030B000B801C7010E948E17A1960FB6F894DEBF23 -:1030C0000FBECDBFDF91CF911F910F91FF90EF9079 -:1030D000DF90CF90BF90AF909F908F900895CF9248 -:1030E000DF92EF92FF920F931F93CF93DF93EC0148 -:1030F0006A017B012115310579F4E881F98101909C -:10310000F081E02D642FDF91CF911F910F91FF90FF -:10311000EF90DF90CF9009942A303105E9F477FFE2 -:103120001AC06DE20E94D5178C0144275527BA01B9 -:103130004C195D096E097F092AE0CE010E9416181C -:10314000800F911FDF91CF911F910F91FF90EF9012 -:10315000DF90CF9008952AE0B701A601CE01DF915C -:10316000CF911F910F91FF90EF90DF90CF900C9433 -:1031700016189A01AB01662757FD6095762F0C94BF -:103180006F180F931F93CF93DF93EC019A01AB015C -:10319000662757FD6095762F0E946F188C01CE012F -:1031A0000E94DC17800F911FDF91CF911F910F912B -:1031B00008952115310541F4DC01ED91FC91019058 -:1031C000F081E02D642F09940C9416189A01462F73 -:1031D00050E060E070E00C94D9180F931F93CF93E8 -:1031E000DF93EC010E94D9188C01CE010E94DC17FC -:1031F000800F911FDF91CF911F910F910895FC01D6 -:10320000808191810C94361ECF93DF93EC018881ED -:103210009981009711F00E94361E198218821D8232 -:103220001C821B821A82DF91CF9108950F931F9306 -:10323000CF93DF93EC018B016F5F7F4F8881998182 -:103240000E94C51E009731F0998388831B830A83EF -:1032500081E001C080E0DF91CF911F910F9108952F -:10326000CF93DF93EC0188819981892B29F08A81A2 -:103270009B818617970760F4CE010E941619882358 -:1032800041F08C819D81892B19F4E881F9811082AC -:1032900081E0DF91CF910895EF92FF920F931F93FA -:1032A000CF93DF93EC017B018A01BA010E943019B0 -:1032B000811104C0CE010E94041907C01D830C8334 -:1032C000B701888199810E94EF1FCE01DF91CF91D4 -:1032D0001F910F91FF90EF900895FC0111821082D1 -:1032E00013821282158214826115710559F0FB0157 -:1032F00001900020E9F7AF0141505109461B570BDF -:103300000C944C1908950F931F93CF93DF938C0166 -:10331000EB01FC0180819181009799F042815381FA -:103320002C813D814217530750F0688179810E94BA -:10333000EF1F8C819D81F8019583848313C00E94C7 -:10334000361E88819981F801918380838A819B81CF -:10335000938382838C819D819583848319821882D3 -:103360001B821A821D821C82DF91CF911F910F91C7 -:103370000895CF93DF93EC018617970711F00E9411 -:103380008319CE01DF91CF910895CF93DF93EC01A4 -:103390006115710561F0FB0101900020E9F7AF01B3 -:1033A00041505109461B570B0E944C1902C00E9404 -:1033B0000419CE01DF91CF9108950F931F93CF93FE -:1033C000DF93CDB7DEB729970FB6F894DEBF0FBEF7 -:1033D000CDBF8C01862FF8011182108213821282D8 -:1033E0001582148250E0BE016F5F7F4F90E00E9413 -:1033F0005220BE016F5F7F4FC8010E94C5192996F8 -:103400000FB6F894DEBF0FBECDBFDF91CF911F91F5 -:103410000F9108950F931F93CF93DF93CDB7DEB72E -:1034200062970FB6F894DEBF0FBECDBF8C01CB0103 -:10343000F80111821082138212821582148250E0E8 -:10344000BE016F5F7F4F0E941F20BE016F5F7F4FE5 -:10345000C8010E94C51962960FB6F894DEBF0FBE70 -:10346000CDBFDF91CF911F910F910895EF92FF9201 -:103470000F931F93CF93DF93EC017B010C811D8190 -:103480006115710511F480E016C04115510591F0E8 -:10349000040F151FB8010E9430198823A1F3288159 -:1034A00039818C819D81B701820F931F0E94EF1F8C -:1034B0001D830C8381E0DF91CF911F910F91FF90CD -:1034C000EF900895FB0144815581608171810C94D6 -:1034D000361A6115710559F0FB0101900020E9F7DA -:1034E000AF0141505109461B570B0C94361A80E02E -:1034F0000895CF93DF9300D0CDB7DEB769831A82EA -:1035000041E050E0BE016F5F7F4F0E94361A0F907E -:103510000F90DF91CF910895EF92FF920F931F9339 -:10352000CF93DF9300D000D0CDB7DEB77C01862FDC -:103530004AE08E010F5F1F4FB80190E00E942A20E1 -:10354000F80101900020E9F7AF0141505109401BFB -:10355000510BB801C7010E94361A0F900F900F90BF -:103560000F90DF91CF911F910F91FF90EF900895F1 -:10357000EF92FF920F931F93CF93DF93CDB7DEB7F8 -:1035800028970FB6F894DEBF0FBECDBF7C01CB01EC -:103590004AE08E010F5F1F4FB8010E942A20F801F8 -:1035A00001900020E9F7AF0141505109401B510B38 -:1035B000B801C7010E94361A28960FB6F894DEBFEC -:1035C0000FBECDBFDF91CF911F910F91FF90EF9074 -:1035D0000895FC01248135816217730748F48081C6 -:1035E0009181009729F0FC01E60FF71F8081089573 -:1035F00080E008950C94E91A0F931F93CF93DF9303 -:10360000EB0141155105E9F02097D9F0FC016481E7 -:10361000758126173707A0F4621B730B8A010150CE -:1036200011096017710708F48B01FC016081718139 -:10363000620F731FA801CE010E94F61FC00FD11F99 -:103640001882DF91CF911F910F910895CF93DF934F -:10365000FC01848195814817590778F4C081D18194 -:10366000FB0160817181CE01840F951F0E940520AE -:10367000009719F08C1B9D0B02C08FEF9FEFDF911D -:10368000CF910895BF92CF92DF92EF92FF920F9366 -:103690001F93CF93DF936C017B01EA01890124170B -:1036A000350720F48D2FE901042F182F67E072E011 -:1036B000C6010E946D19D70114968D919C911597A2 -:1036C000C817D907C8F48017910708F48C01D701EF -:1036D000ED91FC911197E00FF11FB08010826D9178 -:1036E0007C916C0F7D1FC6010E94C519D701ED9119 -:1036F000FC91E00FF11FB082C601DF91CF911F91C5 -:103700000F91FF90EF90DF90CF90BF900895FC0154 -:1037100080819181009711F00C94AD1F60E070E002 -:10372000CB01089508955058BB27AA270ED009C190 -:10373000FAD030F0FFD020F031F49F3F11F41EF4A6 -:10374000EFC00EF4E095E7FBE5C0E92F0BD180F365 -:10375000BA17620773078407950718F071F49EF58E -:1037600023C10EF4E0950B2EBA2FA02D0B01B90149 -:1037700090010C01CA01A0011124FF27591B99F0E7 -:10378000593F50F4503E68F11A16F040A22F232FF3 -:10379000342F4427585FF3CF469537952795A79543 -:1037A000F0405395C9F77EF41F16BA0B620B730BEA -:1037B000840BBAF09150A1F0FF0FBB1F661F771F5B -:1037C000881FC2F70EC0BA0F621F731F841F48F410 -:1037D000879577956795B795F7959E3F08F0B3CF96 -:1037E0009395880F08F09927EE0F97958795089580 -:1037F00004D06894B111D9C00895BCD088F09F5707 -:1038000090F0B92F9927B751A0F0D1F0660F771F2C -:10381000881F991F1AF0BA95C9F712C0B13081F00C -:10382000C3D0B1E00895C0C0672F782F8827B85F54 -:1038300039F0B93FCCF3869577956795B395D9F76D -:103840003EF490958095709561957F4F8F4F9F4F77 -:103850000895E89409C097FB3EF490958095709583 -:1038600061957F4F8F4F9F4F9923A9F0F92F96E9CC -:10387000BB279395F695879577956795B795F11141 -:10388000F8CFFAF4BB0F11F460FF1BC06F5F7F4FDE -:103890008F4F9F4F16C0882311F096E911C07723F0 -:1038A00021F09EE8872F762F05C0662371F096E8F9 -:1038B000862F70E060E02AF09A95660F771F881FC8 -:1038C000DAF7880F9695879597F90895990F00086C -:1038D000550FAA0BE0E8FEEF16161706E807F907E2 -:1038E000C0F012161306E407F50798F0621B730B7D -:1038F000840B950B39F40A2661F0232B242B252BFE -:1039000021F408950A2609F4A140A6958FEF811DA0 -:10391000811D089597F99F6780E870E060E0089541 -:103920009FEF80EC089500240A94161617061806D7 -:103930000906089500240A941216130614060506B3 -:103940000895092E0394000C11F4882352F0BB0F44 -:1039500040F4BF2B11F460FF04C06F5F7F4F8F4FA7 -:103960009F4F089557FD9058440F551F59F05F3FE2 -:1039700071F04795880F97FB991F61F09F3F79F091 -:1039800087950895121613061406551FF2CF469513 -:10399000F1DF08C0161617061806991FF1CF869595 -:1039A0007105610508940895E894BB276627772779 -:1039B000CB0197F908958ADF08F48FEF08950BD0B3 -:1039C000C0CFB1DF28F0B6DF18F0952309F0A2CF01 -:1039D000A7CF1124EACFC6DFA0F3959FD1F3950FAF -:1039E00050E0551F629FF001729FBB27F00DB11D83 -:1039F000639FAA27F00DB11DAA1F649F6627B00D13 -:103A0000A11D661F829F2227B00DA11D621F739FFB -:103A1000B00DA11D621F839FA00D611D221F749F09 -:103A20003327A00D611D231F849F600D211D822F50 -:103A3000762F6A2F11249F5750408AF0E1F0882397 -:103A40004AF0EE0FFF1FBB1F661F771F881F9150A4 -:103A50005040A9F79E3F510570F05CCFA6CF5F3F65 -:103A6000ECF3983EDCF3869577956795B795F795D7 -:103A7000E7959F5FC1F7FE2B880F911D969587955F -:103A800097F90895991B79E004C0991F961708F0DB -:103A9000961B881F7A95C9F780950895AA1BBB1BB2 -:103AA00051E107C0AA1FBB1FA617B70710F0A61B3E -:103AB000B70B881F991F5A95A9F780959095BC015F -:103AC000CD01089597FB072E16F4009407D077FDDB -:103AD00009D00E944E1D07FC05D03EF490958195BB -:103AE0009F4F0895709561957F4F0895A1E21A2E1A -:103AF000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F92 -:103B0000A217B307E407F50720F0A21BB30BE40BE1 -:103B1000F50B661F771F881F991F1A9469F7609528 -:103B20007095809590959B01AC01BD01CF010895E2 -:103B3000EE0FFF1F0590F491E02D0994CF93DF93D2 -:103B40008230910510F482E090E0E091A904F091B8 -:103B5000AA0420E030E0A0E0B0E0309739F14081E5 -:103B6000518148175907B8F04817590771F48281F5 -:103B70009381109729F013969C938E9312972CC0E3 -:103B80009093AA048093A90427C02115310531F030 -:103B90004217530718F0A901DB0101C0EF019A0198 -:103BA000BD01DF010280F381E02DD7CF2115310562 -:103BB000F9F0281B390B2430310580F48A819B8170 -:103BC0006115710521F0FB019383828304C09093FA -:103BD000AA048093A904FE01329644C0FE01E20FBC -:103BE000F31F8193919322503109398328833AC07E -:103BF0002091A7043091A804232B41F420910201C5 -:103C0000309103013093A8042093A7042091000170 -:103C1000309101012115310541F42DB73EB7409196 -:103C2000040150910501241B350BE091A704F0918C -:103C3000A804E217F307A0F42E1B3F0B281739073F -:103C400078F0AC014E5F5F4F2417350748F04E0FF8 -:103C50005F1F5093A8044093A7048193919302C0DF -:103C6000E0E0F0E0CF01DF91CF910895CF93DF93B3 -:103C7000009709F487C0FC01329713821282C09129 -:103C8000A904D091AA04209781F420813181280FC2 -:103C9000391F8091A7049091A8048217930779F5A2 -:103CA000F093A804E093A7046DC0DE0120E030E0AB -:103CB000AE17BF0750F412964D915C9113979D017A -:103CC0004115510509F1DA01F3CFB383A283408195 -:103CD0005181840F951F8A179B0771F48D919C91D8 -:103CE0001197840F951F02969183808312968D9170 -:103CF0009C911397938382832115310529F4F093C6 -:103D0000AA04E093A9043EC0D9011396FC93EE9354 -:103D100012974D915D91A40FB51FEA17FB0779F437 -:103D200080819181840F951F0296D90111969C93F1 -:103D30008E938281938113969C938E931297E0E0E9 -:103D4000F0E08A819B81009719F0FE01EC01F9CF28 -:103D5000CE01029628813981820F931F2091A704FA -:103D60003091A8042817390769F4309729F4109284 -:103D7000AA041092A90402C013821282D093A8044C -:103D8000C093A704DF91CF910895A0E0B0E0EBECE1 -:103D9000FEE10C943B23EC01CB01209719F40E9427 -:103DA0009E1DB8C0FE01E60FF71F9E01225031098B -:103DB000E217F30708F4ACC0D9010D911C911197DB -:103DC00006171707B8F00530110508F49FC0A801C1 -:103DD000445051094617570708F498C0025011097A -:103DE000061B170B019311936D937C93CF010E94D7 -:103DF000361E8CC05B01A01AB10A4E01800E911EC6 -:103E0000A091A904B091AA04612C712C60E070E02B -:103E1000109709F449C0A815B905C9F5ED90FC90B3 -:103E20001197670142E0C40ED11CCA14DB0478F17B -:103E300047018A189B08640142E0C40ED11C129607 -:103E4000BC9012971396AC91B5E0CB16D10440F01C -:103E5000B282A38391828082D9018D939C9309C001 -:103E60000E5F1F4F0E0D1F1DF90111830083EB2DF7 -:103E7000FA2F6115710531F0DB011396FC93EE9377 -:103E8000129744C0F093AA04E093A9043FC06D9137 -:103E90007C9111976616770608F43B01BD011296D6 -:103EA0000D90BC91A02DB4CF6091A7047091A8048F -:103EB00068157905E9F468167906D0F44091000197 -:103EC000509101014115510541F44DB75EB7609124 -:103ED000040170910501461B570BE417F507C0F468 -:103EE000F093A804E093A704F901918380830EC0A6 -:103EF0000E949E1D7C01009759F0A801BE010E94FE -:103F0000D41FCE010E94361EC70104C0CE0102C0DC -:103F100080E090E0CDB7DEB7EEE00C945723FC01D3 -:103F200088279927E89421912032E9F3293010F06D -:103F30002E30C8F32B3241F02D3239F4689404C08E -:103F40000E944A20820F911D219120532A30C0F3F4 -:103F50001EF4909581959F4F08951F93FC0199271A -:103F60008827BC01E89411911032E9F3193010F060 -:103F70001E30C8F31B3251F01D3249F4689406C05C -:103F80000E943520610F711D811D911D11911053EB -:103F90001A30B0F33EF490958095709561957F4FFF -:103FA0008F4F9F4F1F910895FB01DC0102C00190CC -:103FB0000D9241505040D8F708956817790768F47A -:103FC000FB01DC01E40FF51FA40FB51F02C0029036 -:103FD0000E9241505040D8F708950C94D41FFB0125 -:103FE000DC0101900D920020E1F70895FB01DC0156 -:103FF0004150504048F001900D920020C9F701C097 -:104000001D9241505040E0F70895FB015191552316 -:10401000A9F0BF01DC014D9145174111E1F759F4B9 -:10402000CD010190002049F04D9140154111C9F397 -:10403000FB014111EFCF81E090E0019708954532F7 -:10404000510520F4423010F00C942A20FB0110821C -:10405000CB010895BB274A3031F4992322F4BDE205 -:10406000909581959F4F0C945E20592F482F372FA4 -:10407000262F660F771F881F991F660F771F881FCF -:10408000991F620F731F841F951F660F771F881F6C -:10409000991F08957AE0979F902D879F802D910D0D -:1040A000112408954532510520F4423010F00C944B -:1040B0005D20FB011082CB010895BB27FB01552732 -:1040C000AA27880F991FAA1FA41710F0A41B839575 -:1040D0005051B9F7A05DAA3308F0A95DA1930097EC -:1040E00079F7B111B1931192CB010C949722AEE004 -:1040F000B0E0EDE7F0E20C9445230D891E8986E0DF -:104100008C831A8309838FEF9FE79E838D83AE0193 -:10411000475E5F4F6F89788DCE0101960E9499208E -:10412000EF81F885E00FF11F10822E96E4E00C94E9 -:104130006123ACE0B0E0EFE9F0E20C9437237C01BE -:104140006B018A01FC0117821682838181FFBDC148 -:10415000CE0101964C01F7019381F60193FD859103 -:1041600093FF81916F01882309F4ABC1853239F443 -:1041700093FD859193FF81916F01853229F4B701F9 -:1041800090E00E94A722E7CF512C312C20E0203272 -:10419000A0F48B3269F030F4803259F0833269F444 -:1041A00020612CC08D3239F0803339F4216026C073 -:1041B0002260246023C0286021C027FD27C030ED85 -:1041C000380F3A3078F426FF06C0FAE05F9E300DD3 -:1041D0001124532E13C08AE0389E300D1124332E43 -:1041E00020620CC08E3221F426FD6BC1206406C013 -:1041F0008C3611F4206802C0883641F4F60193FD34 -:10420000859193FF81916F018111C1CF982F9F7D7F -:104210009554933028F40C5F1F4FFFE3F9830DC0D2 -:10422000833631F0833771F0833509F05BC022C0EB -:10423000F801808189830E5F1F4F44244394512CE1 -:10424000540115C03801F2E06F0E711CF801A08016 -:10425000B18026FF03C0652D70E002C06FEF7FEFD5 -:10426000C5012C870E948C222C0183012C852F777D -:10427000222E17C03801F2E06F0E711CF801A080E9 -:10428000B18026FF03C0652D70E002C06FEF7FEFA5 -:10429000C5012C870E9481222C012C852068222EAA -:1042A000830123FC1BC0832D90E048165906B0F40F -:1042B000B70180E290E00E94A7223A94F4CFF50182 -:1042C00027FC859127FE81915F01B70190E00E9454 -:1042D000A72231103A94F1E04F1A510841145104C9 -:1042E00071F7E5C0843611F0893639F5F80127FFFA -:1042F00007C060817181828193810C5F1F4F08C06C -:1043000060817181882777FD8095982F0E5F1F4F00 -:104310002F76B22E97FF09C0909580957095619584 -:104320007F4F8F4F9F4F2068B22E2AE030E0A401CC -:104330000E94D922A82EA81844C0853729F42F7EC0 -:10434000B22E2AE030E025C0F22FF97FBF2E8F3643 -:10435000C1F018F4883579F0B4C0803719F0883787 -:1043600021F0AFC02F2F2061B22EB4FE0DC08B2DD7 -:104370008460B82E09C024FF0AC09F2F9660B92E12 -:1043800006C028E030E005C020E130E002C020E1B6 -:1043900032E0F801B7FE07C06081718182819381AC -:1043A0000C5F1F4F06C06081718180E090E00E5F5E -:1043B0001F4FA4010E94D922A82EA818FB2DFF7719 -:1043C000BF2EB6FE0BC02B2D2E7FA51450F4B4FECD -:1043D0000AC0B2FC08C02B2D2E7E05C07A2C2B2DD6 -:1043E00003C07A2C01C0752C24FF0DC0FE01EA0D1C -:1043F000F11D8081803311F4297E09C022FF06C09F -:104400007394739404C0822F867809F0739423FD0B -:1044100013C020FF06C05A2C731418F4530C5718FD -:10442000732C731468F4B70180E290E02C870E942B -:10443000A72273942C85F5CF731410F4371801C09C -:10444000312C24FF12C0B70180E390E02C870E943A -:10445000A7222C8522FF17C021FF03C088E590E02A -:1044600002C088E790E0B7010CC0822F867859F02F -:1044700021FD02C080E201C08BE227FD8DE2B70181 -:1044800090E00E94A722A51438F4B70180E390E0E1 -:104490000E94A7225A94F7CFAA94F401EA0DF11DC5 -:1044A0008081B70190E00E94A722A110F5CF3320B0 -:1044B00009F451CEB70180E290E00E94A7223A941D -:1044C000F6CFF7018681978102C08FEF9FEF2C9680 -:1044D000E2E10C945323F999FECF92BD81BDF89A85 -:1044E000992780B50895262FF999FECF1FBA92BD5E -:1044F00081BD20BD0FB6F894FA9AF99A0FBE0196C5 -:104500000895FC010590615070400110D8F7809526 -:1045100090958E0F9F1F0895FC016150704001908F -:104520000110D8F7809590958E0F9F1F0895DC019C -:10453000FC01672F71917723E1F7329704C07C91DA -:104540006D9370836291AE17BF07C8F308950F9300 -:104550001F93CF93DF93182F092FEB018B8181FDE0 -:1045600003C08FEF9FEF20C082FF10C04E815F819C -:104570002C813D81421753077CF4E881F9819F012A -:104580002F5F3F4F39832883108306C0E885F98564 -:10459000812F0995892B29F72E813F812F5F3F4F6E -:1045A0003F832E83812F902FDF91CF911F910F9109 -:1045B0000895FA01AA27283051F1203181F1E894B9 -:1045C0006F936E7F6E5F7F4F8F4F9F4FAF4FB1E006 -:1045D0003ED0B4E03CD0670F781F891F9A1FA11D01 -:1045E000680F791F8A1F911DA11D6A0F711D811D02 -:1045F000911DA11D20D009F468943F912AE0269FC7 -:1046000011243019305D3193DEF6CF010895462F25 -:104610004770405D4193B3E00FD0C9F7F6CF462F06 -:104620004F70405D4A3318F0495D31FD405241936F -:1046300002D0A9F7EACFB4E0A6959795879577952C -:104640006795BA95C9F700976105710508959B01B3 -:10465000AC010A2E06945795479537952795BA953C -:10466000C9F7620F731F841F951FA01D08952F9215 -:104670003F924F925F926F927F928F929F92AF92F2 -:10468000BF92CF92DF92EF92FF920F931F93CF933F -:10469000DF93CDB7DEB7CA1BDB0B0FB6F894DEBFD6 -:1046A0000FBECDBF09942A88398848885F846E84FC -:1046B0007D848C849B84AA84B984C884DF80EE8046 -:1046C000FD800C811B81AA81B981CE0FD11D0FB64F -:1046D000F894DEBF0FBECDBFED01089510E0CCEE23 -:1046E000D0E004C0FE010E949A1D2296CE3ED10762 -:0646F000C9F7F894FFCFAA -:1046F6000000AB0480002C01066C136C133B0049D0 -:1047060054506172616D733A20004F4B005620334E -:104716002E322E302D623132205349474E414C64A1 -:1047260075696E6F202D20636F6D70696C656420EE -:1047360061742046656220313320323031362032B2 -:10474600313A33373A33330053796E633A200020D7 -:104756002D3E2053796E63466163743A20002C2007 -:10476600436C6F636B3A20002C20546F6C3A200028 -:104776002C20506174744C656E3A20002C205075C4 -:104786006C73653A20002C20002C206D53746172E6 -:10479600743A20005369676E616C3A20002E20003F -:1047A600205B005D005061747465726E3A200020D3 -:1047B60050002A5B002C0025303258004C4C3D003E -:1047C6004C483D00534C3D0053483D00433D004D91 -:1047D6005300443D0043503D0053503D004F004DB3 -:1047E60055004D430000000000EA1566176C15855C -:1047F600157715C8150D0A006E616E00696E6600A4 -:064806006F7666002E0033 +:1000D00003030301020408102040800102040810F9 +:1000E0002001020408102000CB18BF1811241FBEE5 +:1000F000CFEFD8E0DEBFCDBF11E0A0E0B1E0E0EC93 +:10010000F3E402C005900D92AC39B107D9F724E0B1 +:10011000ACE9B1E001C01D92A435B207E1F710E0EF +:10012000C5E7D0E004C02197FE010E94B419C4378E +:10013000D107C9F70E949D110C94D3210C940000A3 +:100140000E949E1B2F923F924F925F926F927F92DE +:100150008F929F92AF92BF92CF92DF92EF92FF92D7 +:100160000F931F93CF93DF93CDB7DEB7AF970FB643 +:10017000F894DEBF0FBECDBF8091E703811106C0AA +:100180008091B103883210F40C94E7091092B40303 +:1001900060E080E00E94E70F8090D803882D90E017 +:1001A0009C01215031093E8F2D8F8091C403909185 +:1001B000C503A091C603B091C7038F8B988FA98FF9 +:1001C000BA8F9091B1039B8FF12C8F2D90E0ED8D24 +:1001D000FE8D8E179F070CF0AFC0FC01E955FD4F57 +:1001E0009F012C5F3F4F4481442309F4A3C0EE24B8 +:1001F000E394EF0C880F991FDC01A853BC4FBA8B16 +:10020000A98B3E8B2D8BE81408F094C02E2C312C3A +:10021000F101E955FD4F9480992009F489C0E989DD +:10022000FA89A080B180F101EE0FFF1FE853FC4F67 +:1002300000811181C8018A259B25990F880B982F71 +:10024000892B09F075C0B80117FF04C0662777270E +:10025000601B710B072E000C880B990B0E945A2013 +:100260002F89388D498D5A8D0E94B9202B013C0170 +:100270006801CA18DB08D7FE03C0D194C194D10825 +:1002800020E030E040E05FE3C301B2010E94B9200A +:100290009B01AC01C301B2010E94BB190E94991AD3 +:1002A0006C157D050CF444C0E3EBF2E08E2F23EBDC +:1002B00032E0821B3B8D831730F480818E1101C0A8 +:1002C000F0823196F3CFAD89BE89DC90492D50E0A4 +:1002D000ED2DF0E09F01D5010E94AD19049F900122 +:1002E000059F300D149F300D11248901330F220B0F +:1002F000330B600F711F821F931FE40FF51F9F01C7 +:10030000FF0F440B550B0E948E19E989FA8931833E +:1003100020839D0CAD89BE899C92F101E955FD4F6A +:100320001482F101EE0FFF1FE853FC4F118210827F +:10033000E39469CFF39449CF60E080E00E94E70F37 +:100340008FEF8093A7026090D8037090B10358ECB0 +:10035000C52E53E0D52E00E010E0EE24EA94FE2CEA +:10036000872C912CA12CB12C061508F059C0FFEF59 +:10037000EF16FF0611F5D6018D919C9197FD1DC0DA +:10038000F801E955FD4F648170E080E090E00E9443 +:100390005A201B012C01C501B4010E945A202BE7F1 +:1003A00034E14EE25EE30E94B9209B01AC01C20140 +:1003B000B1010E94CF1A181664F1F6018081918173 +:1003C00097FD28C0F701EE0FFF1FE853FC4F208177 +:1003D000318182179307F4F4F801E955FD4F6481E8 +:1003E00070E080E090E00E945A201B012C01C501C2 +:1003F000B4010E945A202BE734E14EE25EE30E94F2 +:10040000B9209B01AC01C201B1010E94CF1A18169C +:100410000CF478010F5F1F4FF2E0CF0ED11CA4CF78 +:100420002FEFE216F20641F0E092A70281E090E0A1 +:100430009093BB038093BA038091BA039091BB035E +:10044000019709F074C04FEF460DE091A7020E2E00 +:10045000000CFF0B072D10E0480131E0831A9108D2 +:10046000CF01880F991FDC01A853BC4F7D0137E0F5 +:10047000632E085211094F3F09F457C0C42E042EB1 +:10048000000CDD08D601AA0FBB1FA853BC4F2D914D +:100490003C9137FF48C03195219531092836B2E4A7 +:1004A0003B070CF040C0D701AD90BC90C901B5012D +:1004B0000E94441968327105B0F56A9CC0016B9CBA +:1004C000900D11248217930770F5D601A955BD4FE1 +:1004D00014968C918250863030F550E0852F90E054 +:1004E0008815990584F4DC01A955BD4F1D962C9102 +:1004F0001D9730E02C153D05A1F41C962C9130E0A1 +:100500002E173F0771F4801791076CF44093DA03BC +:1005100082E090E09093BB038093BA035093B203C0 +:1005200006C05F5FDBCF4150A6CF4093DA038091D6 +:10053000AA02882309F427C18091BA039091BB03D2 +:10054000029709F020C1B7E2B71508F01CC18091ED +:10055000B20392E0980F9093B3036091DA03062EF2 +:10056000000C770BA091A7020A2E000CBB0B472DA5 +:1005700050E041505109292F30E024173507A4F4E9 +:10058000F901E955FD4F258530E02617370751F46D +:10059000248530E02A173B0729F491509093B30348 +:1005A00011E005C09E5FE7CF9093B30310E09091F8 +:1005B000B303791610F47092B3036091B3030E94F1 +:1005C000E70F112351F08091B30390E02091B20323 +:1005D000821B9109889734F4CFC08091B1038E3F7C +:1005E00008F0B8C066E671E08BED93E00E941C1144 +:1005F00066E671E081EE93E00E941C1162E08BEDF3 +:1006000093E00E94CF1067E671E08BED93E00E94CB +:10061000E2106BE38BED93E00E94CF1010E080912D +:10062000D803181778F5212F30E0C901880F991FDA +:10063000FC01E853FC4F7F0180819181892B01F1FE +:10064000F901E955FD4F84818823D1F060E58BEDF8 +:1006500093E00E94CF10812F0E94C10F65E971E0E5 +:100660008BED93E00E94E210D7016D917C918BEDB0 +:1006700093E00E949F106BE38BED93E00E94CF10FC +:100680001F5FCDCF6AE671E08BED93E00E94E21030 +:100690006BE381EE93E00E94CF106DE671E081EE96 +:1006A00093E00E94E2106091A702062E000C770BE7 +:1006B00081EE93E00E949F106BE381EE93E00E9435 +:1006C000CF1061E771E081EE93E00E94E21060914B +:1006D000DA03062E000C770B81EE93E00E949F1048 +:1006E0006BE381EE93E00E94CF108091B6038823E4 +:1006F00059F065E771E081EE93E00E94E2106BE350 +:1007000081EE93E00E94CF1063E081EE93E00E94BF +:10071000CF106AE081EE93E00E94CF100091B30306 +:100720001091B2038BED93E00E94B60E011768F0B2 +:10073000E12FF0E0E955FD4F648570E080E090E046 +:100740004AE00E94E70E1F5FF1CF81EE93E00E9426 +:10075000B60E16C06091B203623070F08091B303A0 +:1007600090E08D3F910544F087EA92E00E94FC0DF5 +:1007700081E08093B50307C087EA92E00E94BD0D37 +:1007800081E08093B4038091B403811120C68091ED +:10079000A802811105C08091A902882309F417C617 +:1007A00066E671E08BED93E00E941C1166E671E055 +:1007B00081EE93E00E941C1162E08BED93E00E94B9 +:1007C000CF10B091A902BF8BBB2309F453C5809110 +:1007D000F301811148C082E38093E70181E08093B7 +:1007E000E4011092E5018FEA91E00E94AD0D809145 +:1007F000E40127E030E0281B31099091E50187E012 +:1008000061E070E0482F50E0241735074CF4AB014D +:10081000082E01C0440F0A94EAF7942B8150F2CFBE +:100820009093E5018FEF8093EA018093EB01809331 +:10083000EC018093ED011092F1011092F20187EA30 +:1008400092E09093E9018093E8011092EF011092F9 +:10085000EE0184E18093F0018FEA91E00E94AD0DFA +:1008600081E08093F3018091E70381111BC08FEF3A +:100870008093EA018093EB018093EC018093ED017A +:100880001092F1011092F2011092EF011092EE011C +:1008900084E18093F0018FEA91E00E94AD0D81E147 +:1008A0008093F0018091E703882381F08091E80133 +:1008B0009091E901FC01E25FFE4F108233971082B4 +:1008C000E12C912CF12CCC24C394D1C12090E801CF +:1008D0003090E901F101EF5CFE4F1081143008F413 +:1008E000BEC4B797608170E080E090E00E945A201B +:1008F0002AE037ED43E25DE30E94B9206B017C0101 +:1009000020E030E0A9010E94CF1A20E030E040E072 +:100910005FE387FD05C0C701B6010E94BB1904C093 +:10092000C701B6010E94BA190E94991A7101E4E048 +:10093000EE0EF11CD101AF5DBE4FC12C40E0F701BE +:1009400081917F01861758F15C2D852F90E055230A +:10095000F1F0FE01E80FF91F70819101270F311DA1 +:10096000270F311DF901EF5DFE4F2D913C9111973D +:100970000190F081E02D2E173F074CF4E1E0F0E00C +:10098000EC0FFD1FE80FF91F70835150DECFE1E03F +:10099000F0E0EC0FFD1FE80FF91F4083C3944F5F99 +:1009A00012964113CCCF1091EA010091EC01E09036 +:1009B000EB01F090ED019E012F5F3F4F388B2F87A9 +:1009C0003E8F2D8F5F855DA7C101865F9E4F9FA7DC +:1009D0008EA78D8D2F85821B8C1508F091C0AD8D53 +:1009E000BE8D2D91BE8FAD8FC101820F911D820FE3 +:1009F000911DFC01EF5DFE4F208131813C8F2B8FDB +:100A00001216130634F7220F331F38A72FA3AE0197 +:100A10004F5F5F4F5CA34BA31FEF0FEFEE24EA94F1 +:100A2000FF24FA941A8A198A19A21AA28FEF9FEF4B +:100A30009E8B8D8B2B8D3C8D032E000C440B550B08 +:100A400029A73AA74BA75CA78BA1FDA58F1B8C15E7 +:100A500008F0BFCFABA1BCA1DD90BCA3ABA3ED2D33 +:100A6000F0E0F8A3EF8FEE0FFF1FE20DF31DEF5D37 +:100A7000FE4F8080918069A57AA58BA59CA50E94D8 +:100A80005A202B013C019EA28DA297FE06C0222770 +:100A90003327281939093EA32DA3AB8CBC8C4DA15B +:100AA0005EA1A41AB50AB7FE03C0B194A194B1081F +:100AB00020E030E040E05FE3C301B2010E94B920D2 +:100AC0000E94991A6A157B050CF046C3AFA0B8A422 +:100AD0008DA19EA1A81AB90AB7FE03C0B194A19432 +:100AE000B1082DEC3CEC4CE45FE3C301B2010E9481 +:100AF000B9200E94991A6A157B050CF071C4A4CF25 +:100B0000F092ED01E092EB010093EC011093EA0109 +:100B1000A6C3D394D71408F0E5C0F801ED0DF11D7C +:100B2000848590E08417950709F0F3C48F8862E00C +:100B300070E0260E371E882061F3DF10FDC4DD2033 +:100B400009F4FAC443859801240F311D240F311D87 +:100B5000F901EF5DFE4F20813181B90137FF04C0FB +:100B600066277727621B730B61304DE774070CF023 +:100B7000E3C4880F991F800F911FFC01EF5DFE4FAA +:100B80008081918182279327990F880B982F892B39 +:100B900009F4D2C4072E000C880B990B0E945A202E +:100BA0002B013C016091EE017091EF01072E000CCA +:100BB000880B990B0E945A20698B7A8B8B8B9C8BAC +:100BC0009B01AC01C301B2010E94271A4B015C01D9 +:100BD00020E030E0A9010E94CF1A20E030E040E0A0 +:100BE0005FE387FD9AC4C501B4010E94BB190E944E +:100BF000991A623071050CF49FC4072E000C880B03 +:100C0000990B0E945A2029893A894B895C890E9454 +:100C1000B9209B01AC01C301B2010E94271A9B01BC +:100C2000AC0160E070E080E89FE30E94BA194B01DC +:100C30005C0120E030E0A9010E94CF1A18160CF0E8 +:100C400071C429E23CE54FE85DE3C501B4010E94AF +:100C5000532018160CF470C4F801E55FFE4F808134 +:100C600081508083FF24F394FD0C99249394009188 +:100C7000E8011091E901F801E65FFE4F9081F91655 +:100C800008F081C08091F10181112CC0F801EF0DB5 +:100C9000F11D848590E04091EA01042E000C550B73 +:100CA000A091EC012091EB01A090ED018417950734 +:100CB00009F418C4622F022E000C770B86179707D1 +:100CC00009F410C46A2F0A2E000C770B86179707B9 +:100CD00009F408C46A2D0A2C000C770B86179707B5 +:100CE00009F400C48091F201882309F44AC080917C +:100CF000F101882309F445C0AF2CB12CF801EA0DAD +:100D0000FB1D848590E02091EC01022E000C330B3A +:100D10008217930709F46FC32091ED01022E000C96 +:100D2000330B8217930709F466C32091EA01022E60 +:100D3000000C330B8217930709F4B7C32091EB0122 +:100D4000022E000C330B8217930709F4AEC3809177 +:100D5000F001082E000C990B2091E2013091E30183 +:100D60002817390708F04DC01092F1011092F201D6 +:100D70008FEA91E00E94AD0D912C8091F1018111DB +:100D80003DC3F39474CFD801A45FBE4F81E0982691 +:100D90008F2D89198C932EEFF21249C09E3F09F0D6 +:100DA00046C011976C916230F0F08091F00187FDA0 +:100DB0008F5F8595082E000C990B2091E2013091F0 +:100DC000E3018217930778F4C8010E94FC0D80911B +:100DD000E8019091E901FC01E25FFE4F21E02083F0 +:100DE000F29620833CC28C91811121C0D801A05C75 +:100DF000BE4F81E08C931082F801E25FFE4F80834A +:100E00002EC2F801E45FFE4FEE24E3949E248F2D62 +:100E1000891980836F2DC8010E94FC0DE091E801C3 +:100E2000F091E901E25FFE4FE0821092F1018091C2 +:100E3000F001082E000C990B2091E2013091E301A2 +:100E40002817390708F40BC266E671E0CE0109964F +:100E50000E9442116AE671E0CE0109960E941C11BF +:100E600080E390E3A0E089839A83AB836091E20101 +:100E70007091E30176956795769567956E5F7F4FE4 +:100E8000CE0109960E944A10D12C8E010F5F1F4F90 +:100E900067E7A62E61E0B62E4091E10150E02D2DCE +:100EA00030E08091E701ED2C0D2C000CFF0890E064 +:100EB00024173507F4F4E816F9062CF4F701E15588 +:100EC000FE4F808101C08FEF1F928F93BF92AF9230 +:100ED0001F930F930E94EE1BB801CE0109960E944A +:100EE000E210D3940F900F900F900F900F900F90EF +:100EF000D3CFE816F9062CF4F701E155FE4F8081B7 +:100F000001C08FEF82958F701F928F938CE791E0D5 +:100F10009F938F931F930F930E94EE1BB801CE01F6 +:100F200009960E94E2108091E2019091E30187709E +:100F3000992701970F900F900F900F900F900F909F +:100F4000049710F18091E70190E0E816F9062CF47F +:100F5000F701E155FE4F808101C08FEF8F701F9226 +:100F60008F938CE791E09F938F931F930F930E9431 +:100F7000EE1BB801CE0109960E94E2100F900F906F +:100F80000F900F900F900F9061E871E08BED93E060 +:100F90000E94E2106BE38BED93E00E94CF1060E2C1 +:100FA00070E08BED93E00E944A108BED93E0009788 +:100FB00009F472C064E871E00E94E2108091E801D7 +:100FC0009091E901E091EA01EE0FFF0BE80FF91FA4 +:100FD000EF5DFE4F608171818BED93E00E949F1069 +:100FE0006BE38BED93E00E94CF1068E871E08BED2E +:100FF00093E00E94E2108091E8019091E901E09174 +:10100000EB01EE0FFF0BE80FF91FEF5DFE4F608164 +:1010100071818BED93E00E949F106BE38BED93E069 +:101020000E94CF106CE871E08BED93E00E94E2101B +:101030008091E8019091E901E091EC01EE0FFF0B46 +:10104000E80FF91FEF5DFE4F608171818BED93E03A +:101050000E949F106BE38BED93E00E94CF1060E93C +:1010600071E08BED93E00E94E2108091E801909195 +:10107000E901E091ED01EE0FFF0BE80FF91FEF5DC5 +:10108000FE4F608171818BED93E00E949F106BE3B6 +:101090008BED93E00E94CF106BE381EE93E00E9412 +:1010A000CF1067E070E081EE93E00E944A1081EE7D +:1010B00093E0009789F064E971E00E94E21060918A +:1010C000EE017091EF0181EE93E00E949F106BE3BF +:1010D00081EE93E00E94CF1065E871E081EE93E02D +:1010E0000E94E2104AE0B8018091E2019091E30190 +:1010F0000E942920F80101900020E9F73197AF0103 +:10110000401B510BB80181EE93E00E9471106BE31C +:1011100081EE93E00E94CF1063E081EE93E00E94A5 +:10112000CF106AE081EE93E00E94CF108BED93E048 +:101130000E94B60ECE0109960E94B60E81EE93E093 +:101140000E94B60E1092E70381E08093B403CE01B3 +:1011500009960E943D118EC0181419040CF0AAC102 +:10116000FD2CEF8DF8A1E20DF31D8481A989BA89C8 +:10117000A80FB11DBA8BA98BBAA1BF5FBAA3ED8925 +:10118000FE89E80DF91DFE8BED8B1F3F09F45CCC49 +:101190000F3F09F459CC5FEFE51609F455CCF5166D +:1011A00009F452CC89889A8897FE03C0919481945F +:1011B0009108092C000CAA08BB08AEA5BFA56C912C +:1011C00070E080E090E00E945A202AE037ED43E290 +:1011D0005DE30E94B9202B013C0120E030E0A90131 +:1011E0000E94CF1A20E030E040E05FE387FDFEC0C0 +:1011F000C301B2010E94BB190E94991A68157905B2 +:101200008A059B050CF4E5CBB9A1EAA1BE13E1CB9D +:101210001E1509F4DECB0F1509F4DBCB101709F40A +:10122000D8CBEF1409F4D5CB1F1509F4D2CBE016B7 +:1012300009F4CFCBF092ED01E092EB010093EC01C9 +:101240001093EA018D899E8966E070E00E9458192A +:101250007093EF016093EE013F89311127CB8091AC +:10126000E703882339F08091B503882319F081E0E2 +:101270008093B4038091A802882309F4A8C08091C8 +:10128000BA039091BB03019709F0A1C08091B40308 +:1012900081119DC08091B103883208F498C067E93C +:1012A00071E08BED93E00E94E2106BE38BED93E035 +:1012B0000E94CF1010E08091D803181788F5212FD5 +:1012C00030E0C901880F991FAC0148535C4F7A0187 +:1012D000DA018D919C91892B09F1F901E955FD4FB6 +:1012E00084818823D9F06AE971E08BED93E00E9454 +:1012F000E210812F0E94C10F65E971E08BED93E050 +:101300000E94E210F701608171818BED93E00E94F1 +:101310009F106BE38BED93E00E94CF101F5FCBCF4C +:101320006AE671E08BED93E00E94E2106BE381EEE0 +:1013300093E00E94CF106DE671E081EE93E00E9491 +:10134000E2106091A702062E000C770B81EE93E06D +:101350000E949F106BE381EE93E00E94CF1080917A +:10136000B603882359F065E771E081EE93E00E94AF +:10137000E2106BE381EE93E00E94CF1063E081EE18 +:1013800093E00E94CF106AE081EE93E00E94CF10BC +:101390000091B10301508BED93E00E94B60E10E076 +:1013A000E12FF0E0E955FD4F648570E080E090E0CA +:1013B0004AE00E94E70E1F5F011790F781EE93E06D +:1013C0000E94B60E1092B50381E08093B403809121 +:1013D000B5038111C6C087EA92E00E94BD0DC1C06D +:1013E000181419040CF07CC0ED2CBBCEC301B20163 +:1013F0000E94BA1901CFE92C9C24BFCCEE2009F43D +:10140000C0CC8091E8019091E901FC01EA0DFB1D3F +:101410002485820F911D820F911DFC01EF5DFE4F0F +:1014200040815181E091E1018091E701E817D8F511 +:101430008091E6012091E2013091E301873051F47F +:101440002115310539F0EF5FE093E101F0E0E1555E +:10145000FE4F1082E091E101F0E0A82FB0E0E155ED +:10146000FE4F61E070E01416150614F060E070E0C5 +:10147000082E01C0660F0A94EAF79081692B6083F9 +:101480002F5F3F4F3093E3012093E2019091E401FD +:10149000A91BB109B7FD04C0891B8093E60103C0F5 +:1014A000E7E0E093E601E12C6CCCEE24E394992490 +:1014B000939463CC0D2DEF8DF8A1E20DF31D848183 +:1014C00029893A89281B31093A8B298B39A13F5F39 +:1014D00039A34D895E89481959095E8B4D8B55CECC +:1014E0001D2DE9CFF801E55FFE4FF082C092F101BA +:1014F000C092F20131977080022E000C330B0A2E3D +:10150000000CBB0B0A2C000CBB08DF2C212C312C4F +:1015100001CB82179307D1F409CBC501B4010E9416 +:10152000BA1965CB29E23CE54FE85DEBC501B40192 +:101530000E94CF1A87FF90CB51E025223324C101AE +:10154000A1E08A27B82FB1709B2ECCCB8A179B07BE +:1015500021F08A159B0509F0C5CB812C61E070E074 +:10156000E8CAAF960FB6F894DEBF0FBECDBFDF91CD +:10157000CF911F910F91FF90EF90DF90CF90BF9090 +:10158000AF909F908F907F906F905F904F903F9023 +:101590002F900895FC01918D828D981761F0828DB6 +:1015A000DF01A80FB11D5D968C91928D9F5F9F7397 +:1015B000928F90E008958FEF9FEF0895FC01918D39 +:1015C000828D981731F0828DE80FF11D858D90E0A6 +:1015D00008958FEF9FEF0895FC01918D228D892F43 +:1015E00090E0805C9F4F821B91098F73992708952B +:1015F00080E092E00E94EC0A21E0892B09F420E0CF +:10160000822F0895FC01848DDF01A80FB11DA35A1C +:10161000BF4F2C91848D90E001968F739927848F12 +:10162000A689B7892C93A089B1898C9180648C9309 +:10163000938D848D981306C00288F389E02D8081F4 +:101640008F7D80830895EF92FF920F931F93CF9326 +:10165000DF93EC0181E0888F9B8D8C8D981305C002 +:10166000E889F989808185FD24C0F62E0B8D10E074 +:101670000F5F1F4F0F731127E02E8C8DE8120CC0E7 +:101680000FB607FCFACFE889F989808185FFF5CF8D +:10169000CE010E94020BF1CF8B8DFE01E80FF11DF0 +:1016A000E35AFF4FF0820B8FEA89FB8980818062C9 +:1016B00007C0EE89FF896083E889F98980818064A9 +:1016C000808381E090E0DF91CF911F910F91FF9097 +:1016D000EF900895CF93DF93EC01888D8823C9F0B4 +:1016E000EA89FB89808185FD05C0A889B9898C912B +:1016F00086FD0FC00FB607FCF5CF808185FFF2CFC6 +:10170000A889B9898C9185FFEDCFCE010E94020B8B +:10171000E7CFDF91CF910895089508952091A20118 +:10172000E6E9F0E09491E0EEF0E08491ECECF0E09A +:10173000E491EE2309F43BC0992339F1933091F001 +:1017400038F49130A9F0923001F594B59F7D12C024 +:10175000973091F09830A1F09430B9F490918000D6 +:101760009F7D03C0909180009F77909380000DC073 +:1017700094B59F7794BD09C09091B0009F7703C046 +:101780009091B0009F7D9093B000F0E0EE0FFF1FAE +:10179000E555FF4FA591B4919FB7F894EC912111B5 +:1017A00003C080958E2301C08E2B8C939FBF109217 +:1017B000A2010895CF93C1E080E092E00E94EC0A7C +:1017C000892BB9F080E092E00E94CA0A8A3041F089 +:1017D0001CF4882329F007C08D3011F0833219F4EE +:1017E000C093A301E9CF682F81EA92E00E94CF1055 +:1017F000E3CFCF9108950E94F80A81110C94DA0B7F +:1018000008951F920F920FB60F9211242F933F93BA +:101810004F935F936F937F938F939F93AF93BF93F8 +:10182000EF93FF9380E092E00E94020BFF91EF9113 +:10183000BF91AF919F918F917F916F915F914F91E8 +:101840003F912F910F900FBE0F901F9018951F92F0 +:101850000F920FB60F9211242F938F939F93EF93B4 +:10186000FF93E0911002F09111028081E091160245 +:10187000F091170282FD12C09081809119028F5F52 +:101880008F7320911A02821751F0E0911902F0E053 +:10189000E050FE4F958F8093190201C08081FF9127 +:1018A000EF919F918F912F910F900FBE0F901F90EE +:1018B0001895CF93DF9390E0FC01ED52FF4F2491F8 +:1018C000FC01E154FF4F8491882361F190E0880F7F +:1018D000991FFC01EB54FF4FC591D491FC01E555D4 +:1018E000FF4FA591B491611109C09FB7F894888109 +:1018F000209582238883EC912E230BC0623061F403 +:101900009FB7F8943881822F809583238883EC9148 +:101910002E2B2C939FBF06C08FB7F894E8812E2BF7 +:1019200028838FBFDF91CF9108953FB7F8948091BE +:10193000FC019091FD01A091FE01B091FF0126B53F +:10194000A89B05C02F3F19F00196A11DB11D3FBFF7 +:10195000BA2FA92F982F8827820F911DA11DB11D85 +:10196000BC01CD0142E0660F771F881F991F4A9581 +:10197000D1F70895CF92DF92EF92FF920F931F93CA +:101980000E94950C00919D0210919E0220919F0251 +:101990003091A0026B017C01C01AD10AE20AF30A5D +:1019A0009701860160939D0270939E0280939F022F +:1019B0009093A0020A3511052105310578F181E0E7 +:1019C000C8168DE7D806E104F10410F4960102C0B0 +:1019D00021E03DE74A9B03C0319521953109809173 +:1019E000E9038233D8F48091E9038F5F8093E903A0 +:1019F0008091EA036091E8030E9438199093EA030A +:101A0000E091EA03F0E0EE0FFF1FE451FC4F318359 +:101A100020838091EA038F5F8093EA031F910F91E7 +:101A2000FF90EF90DF90CF9008951F920F920FB626 +:101A30000F9211242F933F938F939F93AF93BF9354 +:101A400080919E0190919F01A091A001B091A10170 +:101A50003091FB0123E0230F2D3720F40196A11DC7 +:101A6000B11D05C026E8230F0296A11DB11D2093CC +:101A7000FB0180939E0190939F01A093A001B093DE +:101A8000A1018091FC019091FD01A091FE01B09116 +:101A9000FF010196A11DB11D8093FC019093FD01F2 +:101AA000A093FE01B093FF01BF91AF919F918F91E1 +:101AB0003F912F910F900FBE0F901F9018951F927E +:101AC0000F920FB60F9211242F933F934F935F9372 +:101AD0006F937F938F939F93AF93BF93EF93FF93F6 +:101AE000E0910501F09106010995FF91EF91BF91F9 +:101AF000AF919F918F917F916F915F914F913F91A6 +:101B00002F910F900FBE0F901F9018951F920F925C +:101B10000FB60F9211242F933F934F935F936F93C0 +:101B20007F938F939F93AF93BF93EF93FF93E09136 +:101B30000301F09104010995FF91EF91BF91AF91DD +:101B40009F918F917F916F915F914F913F912F91D5 +:101B50000F900FBE0F901F901895FC0180AD2E2F97 +:101B6000DF019A2F921B981710F41D92FACF12AA38 +:101B700014AA13AA87E087AB0895CF93DF93FC01E3 +:101B8000E65FFE4F1082DC01AF5CBE4F1C92B89640 +:101B90001082B0971082319611821082B0962FEF8A +:101BA0002083FC012083EF5DFE4FEC01249611920F +:101BB00011921992EA17FB07D1F7FC01E35FFE4F80 +:101BC0001082339626E930E0318320833D964DEC38 +:101BD0005CEC6CE47EE34083518362837383729791 +:101BE00010823396108231961082F1961082F4970B +:101BF0001082DF91CF910895FC01E65FFE4F408196 +:101C0000A42FB0E0262F30E02A173B075CF4461BD8 +:101C1000408350E0B901645F7F4F680F791F0C96D5 +:101C20000C94AC1B08951F920F920FB60F921124C3 +:101C30002F933F934F935F936F937F938F939F93D4 +:101C4000AF93BF93EF93FF93E0919C01F0919D01BF +:101C50000995FF91EF91BF91AF919F918F917F91E6 +:101C60006F915F914F913F912F910F900FBE0F9009 +:101C70001F901895CF93DF9387EA90E00E94640F3E +:101C8000C7EAD2E08B8190E00E94850F82EA90E063 +:101C90000E94640F898190E00E94850F8DE990E099 +:101CA0000E94640F8A8190E0DF91CF910C94330FF2 +:101CB0002B9A2091000130910101482F429FC001D1 +:101CC000439F900D11248230910538F0880F991FA1 +:101CD000880F991F05970197F1F72B982091000124 +:101CE00030910101629FC001639F900D11248230E9 +:101CF000910538F0880F991F880F991F0597019754 +:101D0000F1F70895E8988CE89BE0909304018093A4 +:101D1000030108958AEB9CE09093040180930301F2 +:101D2000E9E6F0E080818C7F81608083E89A089505 +:101D3000CF93DF93EC01FB01248135810E94571181 +:101D4000CE01DF91CF910895009769F0FC010190D9 +:101D50000020E9F73197AF01481B590BBC0180E027 +:101D600092E00C94031080E090E00895FC0144811F +:101D700055816081718180E092E00C940310CF93D3 +:101D8000DF930E94B60EEC0184E691E00E94A40E5F +:101D90008C0F9D1FDF91CF910895CF92DF92EF922C +:101DA000FF920E94950C6B017C010E94950CDC0156 +:101DB000CB018C199D09AE09BF09883E9340A1054E +:101DC000B10598F3FF90EF90DF90CF9008958F9238 +:101DD0009F92AF92BF920F931F93CF93DF93CDB794 +:101DE000DEB7A1970FB6F894DEBF0FBECDBF19A224 +:101DF000423008F44AE08E010F5D1F4F842E912C73 +:101E0000A12CB12CA50194010E946C19E62FB901F7 +:101E1000CA0101501109EA3014F4E05D01C0E95C27 +:101E2000D801EC93232B242B252B61F7C8010E94AA +:101E3000A40EA1960FB6F894DEBF0FBECDBFDF9102 +:101E4000CF911F910F91BF90AF909F908F90089569 +:101E5000E0910002F09101020190F081E02D682FE5 +:101E600080E092E00994CF92DF92EF92FF92CF93BD +:101E7000DF936C01990FEE08FF08F7FE12C08DE2A8 +:101E80000E94280FEC0166277727CB016C197D098A +:101E90008E099F094AE00E94E70E7C01EC0EFD1EB0 +:101EA00006C04AE0C701B6010E94E70E7C0184E645 +:101EB00091E00E94A40E8E0D9F1DDF91CF91FF90A7 +:101EC000EF90DF90CF9008950F931F93CF93DF9300 +:101ED0008C01C0E0D0E0F801EC0FFD1F6491662397 +:101EE00071F0E0910002F09101020190F081E02D8B +:101EF00080E092E00995892B11F02196ECCFCE017C +:101F0000DF91CF911F910F910895CF92DF92EF92C1 +:101F1000FF92CF93DF936C01990FEE08FF08F7FE55 +:101F200017C08DE20E94280FEC0166277727CB01AE +:101F30006C197D098E099F094AE00E94E70E8C0FFB +:101F40009D1FDF91CF91FF90EF90DF90CF9008958C +:101F50004AE0C701B601DF91CF91FF90EF90DF908B +:101F6000CF900C94E70ECF93DF930E94A40EEC0168 +:101F700084E691E00E94A40E8C0F9D1FDF91CF910B +:101F800008950F931F93CF93DF9300D000D0CDB768 +:101F9000DEB74AE08E010F5F1F4FB80190E00E944C +:101FA0000120F80101900020E9F73197AF01401BB3 +:101FB000510BB8018BED93E00E9471100F900F90C0 +:101FC0000F900F90DF91CF911F910F910895EBEA41 +:101FD000F2E098E09E0F11929E13FDCF611102C0B6 +:101FE0006091B103861768F4E82FF0E0E955FD4FE2 +:101FF000E485F0E0E955FD4F94819F5F94838F5F06 +:10200000F1CF08950895CF92DF92EF92FF920F9350 +:102010001F93CF93DF936C017A018B01C0E0D0E076 +:10202000CE15DF0589F0D8016D918D01D601ED91B6 +:10203000FC910190F081E02DC6010995892B11F4E6 +:102040007E0102C02196ECCFC701DF91CF911F9195 +:102050000F91FF90EF90DF90CF900895FC01808169 +:102060009181009711F00C94DA1F60E070E0CB01D1 +:102070000895FC01248135816217730748F480813B +:102080009181009729F0FC01E60FF71F80810895E8 +:1020900080E008950F931F93CF93DF93EC01888125 +:1020A0009981009729F02A813B812617370788F408 +:1020B0008B016F5F7F4F0E94D41A009761F0998364 +:1020C00088831B830A832C813D81232B11F4FC011F +:1020D000108281E001C080E0DF91CF911F910F91CC +:1020E0000895EF92FF920F931F93CF93DF93FC011C +:1020F000248135816115710511F480E019C0411505 +:102100005105A9F07B01EC018A01020F131FB801F0 +:102110000E944A10882389F3288139818C819D810E +:10212000B701820F931F0E94BE1B1D830C8381E0A9 +:10213000DF91CF911F910F91FF90EF900895EF9253 +:10214000FF920F931F93CF93DF93CDB7DEB72897FE +:102150000FB6F894DEBF0FBECDBF7C01CB014AE0C5 +:102160008E010F5F1F4FB8010E940120F8010190FE +:102170000020E9F73197AF01401B510BB801C701AF +:102180000E94711028960FB6F894DEBF0FBECDBF27 +:10219000DF91CF911F910F91FF90EF900895CF9312 +:1021A000DF9300D0CDB7DEB769831A8241E050E0FB +:1021B000BE016F5F7F4F0E9471100F900F90DF91F3 +:1021C000CF9108956115710551F0FB010190002038 +:1021D000E9F73197AF01461B570B0C94711080E063 +:1021E0000895EF92FF920F931F93CF93DF93EC012B +:1021F0007B018A01BA010E944A102881398181112C +:102200000DC02115310519F0C9010E94241F198242 +:1022100018821D821C821B821A8206C01D830C83B9 +:10222000B701C9010E94BE1BCE01DF91CF911F9162 +:102230000F91FF90EF900895CF93DF93EC0161151C +:10224000710559F0FB0101900020E9F73197AF01CA +:10225000461B570B0E94F1100CC088819981009792 +:1022600011F00E94241F198218821D821C821B8279 +:102270001A82CE01DF91CF910895FC018081918176 +:102280000C94241FFC011182108213821282158289 +:1022900014826115710551F0FB0101900020E9F7EE +:1022A0003197AF01461B570B0C94F1100895BF9264 +:1022B000CF92DF92EF92FF920F931F93CF93DF9312 +:1022C0007C016B018A01E9012417350720F4812F75 +:1022D0008901C42FD82F66E671E0C7010E94421120 +:1022E000D60114968D919C91159708171907D0F473 +:1022F0008C179D0708F4EC01D601ED91FC91119724 +:10230000EC0FFD1FB08010824D915C91BA01600FFF +:10231000711FC7010E941C11D601ED91FC91EC0FB9 +:10232000FD1FB082C701DF91CF911F910F91FF90E8 +:10233000EF90DF90CF90BF900895CF93DF93CDB70C +:10234000DEB7C757D1090FB6F894DEBF0FBECDBFB9 +:10235000789484B5826084BD84B5816084BD85B580 +:10236000826085BD85B5816085BD80916E0081608C +:1023700080936E0010928100809181008260809332 +:102380008100809181008160809381008091800034 +:102390008160809380008091B10084608093B1005F +:1023A0008091B00081608093B00080917A00846059 +:1023B00080937A0080917A00826080937A00809185 +:1023C0007A00816080937A0080917A00806880939F +:1023D0007A001092C100E0911002F091110212E017 +:1023E0001083E0911002F09111021082E0910C0232 +:1023F000F0910D021082E0910E02F0910F0200E1C7 +:10240000008310921802E0911402F091150286E008 +:102410008083E0911202F0911302808180618083B9 +:10242000E0911202F0911302808188608083E09134 +:102430001202F0911302808180688083E091120281 +:10244000F091130280818F7D808360E082E00E94A2 +:10245000590C61E08BE00E94590C61E08DE00E9414 +:10246000590C00938100109280001093A60188E11E +:1024700099E79093A5018093A4019093870080939E +:10248000860082E1809381008EE89BE090939D011D +:1024900080939C0181E080936F0080E090E00E9437 +:1024A00077218B3099F481E090E00E947721982F7A +:1024B00091709093AA0281FB992790F99093A802BA +:1024C00082FB882780F98093A9020AC06BE080E034 +:1024D00090E00E947F2167E081E090E00E947F21F0 +:1024E0000E948A0E68E270E081EA92E00E944A103F +:1024F0009E012F5F3F4F19018091A301882309F4AA +:1025000090C41092A30160E070E081EA92E00E9422 +:102510003910803539F48DE191E00E94B30F0E94AB +:10252000CD0E72C48F3309F045C00E94280F8CE78E +:1025300090E00E94640F86E50E94280F80E20E94CE +:10254000280F89E60E94280F80E20E94280F82E56A +:102550000E94280F80E20E94280F84E70E94280F23 +:1025600080E20E94280F88E50E94280F80E20E94E6 +:10257000280F86E40E94280F80E20E94280F83E53E +:102580000E94280F80E20E94280F80E50E94280FF9 +:1025900080E20E94280F83E40E94280F80E20E94BC +:1025A000280F87E40E94280F80E20E94280F86E609 +:1025B00091E004C0863529F480E291E00E94B30FD7 +:1025C00023C4823579F4809150049091510400978E +:1025D00011F484E594E0D101A81BB90BCD010E9450 +:1025E000330F12C4893609F02DC161E070E081EA31 +:1025F00092E00E943910843709F4A5C0823781F532 +:1026000042E050E061EA72E0C1010E94980E8D81C3 +:102610009E81009721F46C961FAE6C9716C00297AE +:1026200018F002E010E002C001E010E069817A8158 +:10263000A801CE01855A9F4F0E94C51BEBE5F0E033 +:10264000EC0FFD1FE00FF11F1082C1010E943D1130 +:10265000CE01855A9F4F0E94BC1F8093020173C018 +:10266000833709F05DC02B9A42E050E061EA72E0E6 +:10267000CE01855A9F4F0E94980EA1960EAD1FADB8 +:10268000A1970115110511F4198211C00732110526 +:1026900010F007E210E06D966EAD7FAD6D97A8016A +:1026A000C1010E94C51BF101E00FF11F1082CE0194 +:1026B000855A9F4F0E943D110E94820E00E010E05B +:1026C0008091020190E00817190734F56FE181E06D +:1026D0000E94580E7101F70181917F018823C9F092 +:1026E000813371F0863449F08033A9F763E081E0EB +:1026F0000E94580E63E081E009C063E081E002C0FF +:1027000061E083E00E94580E61E083E00E94580E71 +:10271000E2CF0F5F1F4FD4CF0E948A0E2B9813C0B9 +:102720008336B1F442E050E061EA72E0C1010E94F8 +:10273000980EC1010E942E10709301016093000158 +:10274000C1010E943D1181EA92E00E94BF0E5CC36C +:10275000803709F059C366E671E0CE018F599F4F6B +:102760000E94421164E170E0CE018F599F4F0E9498 +:102770004A1067E571E0CE018F599F4F0E941C11EE +:10278000809102016D961FAE1EAE6D976F961FAEC3 +:102790001EAE6F97A1961FAE1EAEA1974AE0B10183 +:1027A00090E00E942920B101CE01855A9F4F0E94DE +:1027B0001C11A1964EAD5FADA1976D966EAD7FAD2C +:1027C0006D97CE018F599F4F0E947110CE01855A8F +:1027D0009F4F0E943D1160E671E0CE018F599F4FDF +:1027E0000E94E21080910001909101016D961FAE50 +:1027F0001EAE6D976F961FAE1EAE6F97A1961FAE61 +:102800001EAEA1974AE0B1010E940120B101CE01A4 +:10281000855A9F4F0E941C11A1964EAD5FADA197A6 +:102820006D966EAD7FAD6D97CE018F599F4F0E9413 +:102830007110CE01855A9F4F0E943D11CE018F59D4 +:102840009F4F3BC2833509F040C266E671E0CE017E +:102850008F599F4F0E9442116EE170E0CE018F5957 +:102860009F4F0E944A100E94820EE12CF12CFFEF34 +:10287000A896FFAFA89721E0AE962FAFAE9731E0B4 +:10288000E0963FAFE09732E1D32ECC24C39449E0E9 +:10289000B42E52E0A52E62E671E0CE01855A9F4F1C +:1028A0000E9442118091A5029091A602E816F906B5 +:1028B00098F48090A1029090A2026D966EAD7FADCB +:1028C0006D97C4018E0D9F1D0E94D41B009721F0AF +:1028D0008C010819190902C00FEF1FEFCE01855AAC +:1028E0009F4F0E943D110F3F2FEF120721F4AF962B +:1028F0001FAEAF970EC13FEFE316F306C1F3980189 +:10290000A70161EA72E0CE01855A9F4F0E945711DC +:10291000A3968EAD9FADA3970097A9F06D966EAD6F +:102920007FAD6D976115710561F0A5964EAD5FADF8 +:10293000A597A1962EAD3FADA1974217530708F07A +:10294000ECC30E94241F6D968EAD9FAD6D97A3962C +:102950009FAF8EAFA3976F968EAD9FAD6F97A596E5 +:102960009FAF8EAFA597A1968EAD9FADA197A7966D +:102970009FAF8EAFA7976D961FAE1EAE6D976F96E9 +:102980001FAE1EAE6F97A1961FAE1EAEA197CE01D1 +:10299000855A9F4F0E943D1178018FEFE81AF80A7F +:1029A00060E070E0CE018F599F4F0E94391083354F +:1029B00059F561E070E0CE018F599F4F0E943910A8 +:1029C000833409F462C08D3471F4A8968FADA89752 +:1029D0008F5FA8968FAFA897F101D89EE00DF11DEB +:1029E0001124C28258CF823509F055CFA8962FAD59 +:1029F000A8972F5FA8962FAFA897F101D29EE00D60 +:102A0000F11D1124A28241C0803509F024C362E087 +:102A100070E0CE018F599F4F0E9439108D3309F01D +:102A20003ACF22E030E041E050E0BE016F597F4FE5 +:102A3000CE01855A9F4F0E945711CE01855A9F4F54 +:102A40000E942E10162FCE01855A9F4F0E943D11D5 +:102A500043E050E0BE016F597F4FCE01855A9F4F32 +:102A60000E94980ECE01855A9F4F0E942E10A89664 +:102A70006FACA897B69CF0011124E10FF11D3396BD +:102A8000EE0FFF1FE20DF31D40C3AE961FAEAE97D3 +:102A900002CFA9967FACA997672C712CAB967FAE1D +:102AA0006EAEAB97A9963FADA99722E1329F700118 +:102AB0001124F101EE0DFF1D82818230B9F182E116 +:102AC000AB966EAC7FACAB97869DF001879DF00D09 +:102AD0001124E20DF31D8281813009F46AC02B9824 +:102AE000A9963FADA9973F5FA9963FAFA997A89632 +:102AF0006FACA897631668F6AE967FACAE97711070 +:102B00000E94CD0EAF962FADAF972F5FAF962FAF30 +:102B1000AF97AF963FADAF97E0966FACE0973615A5 +:102B200009F4C7C0A9961FAEA997B3CF26E0E20E5D +:102B3000F11CE20CF31C4480558003810E94950C2B +:102B40004B015C0110E04016510658F1B80181EAD2 +:102B500092E00E9439108053F701E80FF11DE80F51 +:102B6000F11D60807180630177FE04C0CC24DD24F8 +:102B7000C618D7080E94950C681579058A059B052B +:102B8000C8F377FE02C02B9801C02B9AC601DD0C5A +:102B9000AA0BBB0B880E991EAA1EBB1E0F5F1F4FF0 +:102BA000D2CF0E94950C681579058A059B05C8F35C +:102BB00086CFE080F1807480E1967FAEE19713814B +:102BC0000E94950C4B015C01C701FF0CAA0BBB0BCB +:102BD000AD968CAF9DAFAEAFBFAFAD97880F991FCD +:102BE000AA1FBB1FE5968CAF9DAFAEAFBFAFE597F9 +:102BF000E1966FACE197611608F471CF612F70E038 +:102C000081EA92E00E9439108A3314F097E301C000 +:102C100090E3891B04E0C02ED12C08E0482F880FD8 +:102C2000550B2401350120E0E02EF12CE422F522A1 +:102C3000E114F10451F12B98AD968CAD9DADAEAD84 +:102C4000BFADAD97480E591E6A1E7B1EE6962FAF8C +:102C5000E697E7964FAFE797E8965FAFE8970E9451 +:102C6000950CE6962FADE697E7964FADE797E89679 +:102C70005FADE897641575058605970538F3213033 +:102C800031F021E0E114F104B1F22B9AD5CFE596B1 +:102C90008CAD9DADAEADBFADE597880E991EAA1E59 +:102CA000BB1E069591E0C91AD10809F0BACF1F5F83 +:102CB0009FCF0E948A0E81EA92E00E94BF0ECE0151 +:102CC0008F599F4F0E943D119FC08437C1F58FB728 +:102CD000F894C0909E01D0909F01E090A001F090E8 +:102CE000A1018FBFC701B60128EE33E040E050E0FC +:102CF0000E946C19CA01B9010091A9011091AA01A1 +:102D00002091AB013091AC01C016D106E206F3066A +:102D100050F42091A7013091A8012F5F3F4F3093CD +:102D2000A8012093A701C092A901D092AA01E09224 +:102D3000AB01F092AC014AE00E94E70E61C0883519 +:102D4000B1F461E070E081EA92E00E9439108135CF +:102D500011F40E94820E61E070E081EA92E00E942C +:102D60003910853409F050C00E948A0E4DC0863457 +:102D700009F44AC08334F1F561E070E081EA92E041 +:102D80000E943910182F873419F40E943A0E3CC063 +:102D900062E070E081EA92E00E943910833539F0F8 +:102DA000853541F0833449F4E9EAF2E008C0EAEA03 +:102DB000F2E005C0E8EAF2E002C0E0E0F0E015343D +:102DC00019F481E0808303C01434F1F410828091FF +:102DD000A802682F660F9091A90224E0929FC0017B +:102DE0001124862B6091AA02682B81E090E00E945A +:102DF0007F210AC0873449F288E690E00E94640F80 +:102E000084E691E00E94A40E8091A301811106C086 +:102E100066E671E081EA92E00E941C1181E08093F5 +:102E2000A201AA24A394B3E0CB2ED12C8091E90374 +:102E3000882309F40DC18091E90381508093E9034F +:102E40008091EB036091E8030E9438199093EB03A3 +:102E5000E091EB0381E08E0F8093EB03F0E0EE0F47 +:102E6000FF1FE451FC4F808191819093AE018093CC +:102E7000AD011092B403E091B103EE2369F0F0E0EC +:102E8000E955FD4F838590E0880F991F88539C4F2B +:102E90009093C3038093C2032091AD013091AE01A2 +:102EA000E091C003F091C103318320838091B1038D +:102EB000882369F0E091C203F091C30340815181FE +:102EC00042275327452F441F4427441F01C041E098 +:102ED00051E0211533480CF450E091E08E3F09F4A5 +:102EE00090E0952311F0411109C091E08E3F09F067 +:102EF00090E09093B6030E94A20006C0883221F4AD +:102F0000D092BB03C092BA03E090C003F090C1031B +:102F1000D7010D911C91B80117FF04C066277727D0 +:102F2000601B710B072E000C880B990B0E945A2016 +:102F30002DEC3CEC4CE45EE30E94B9200E94A01A08 +:102F4000AB017093B8036093B7036091D803E8ECCA +:102F5000F3E0B12CB616D9F0819191919C01202714 +:102F60003127330F220B322F232B79F4009769F08E +:102F70003801681A790AC30177FE03C091958195DB +:102F80009109481759070CF0D3C0B394E3CF6830C8 +:102F900041F560E080E00E94E70FE091D803F0E0A7 +:102FA000E955FD4F8481833010F00E94A2006091AA +:102FB000B10370E0615071098091D90316161706AC +:102FC00084F4FB01E955FD4F9485981307C06F5FAA +:102FD0007F4F87EA92E00E94FC0D03C061507109A7 +:102FE000EDCFB090D903E091C003F091C10380818F +:102FF0009181EB2DF0E0EE0FFF1FE853FC4F918322 +:10300000808381E08B0D883019F08093D90306C04E +:103010001092D9038093D8031092E7038091D903CB +:103020009091D803981710F48093D8038091B1033E +:10303000E82FF0E0E955FD4FB4868F5F8093B10330 +:103040008091B403882309F4F1CEA092A201EECEC0 +:103050000E94FB0B51CA8235E9F461E070E0CE01B9 +:103060008F599F4F0E9439108D3309F014CC42E0E4 +:1030700050E0BE016F597F4FCE01855A9F4F0E948D +:10308000980ECE01855A9F4F0E942E10E0966FAF8A +:10309000E0973DC08434A9F4F101A8967FACA897CD +:1030A000D79CE00DF11D1124A6968FADA6978C2C10 +:1030B000881A882D8E0D838301501109158304838E +:1030C000EACB833409F0E7CB61E070E0CE018F59A1 +:1030D0009F4F0E9439108D3309F0DDCB42E050E064 +:1030E000BE016F597F4FCE01855A9F4F0E94980EA7 +:1030F000CE01855A9F4F0E942E10F101A8967FACF9 +:10310000A897D79CE00DF11D112471836083CE0137 +:10311000855A9F4F0E943D11BECB0E94BE1BA196B7 +:103120008EAD9FADA197A7969FAF8EAFA7972BCCE3 +:10313000B7FC2DCF0B2D000F110B08531C4FD801DE +:103140006D917C91AB01770F660B770BF701808156 +:103150009181092E000CAA0BBB0B3A014B01680EA2 +:10316000791E8A1E9B1EC401B30122E030E040E0BC +:1031700050E00E948E19D8012D933C9357CF81EADD +:1031800092E00E943D1181EE93E00E943D118BED93 +:1031900093E00C943D110F931F93CF93DF93E0E0E6 +:1031A000F2E01382128288EE93E0A0E0B0E0848324 +:1031B0009583A683B78381E191E09183808385EC39 +:1031C00090E09587848784EC90E09787868780ECF1 +:1031D00090E0918B808B81EC90E0938B828B82ECE2 +:1031E00090E0958B848B86EC90E0978B868B118E8C +:1031F000128E138E148EE8EEF3E082E38083118248 +:1032000013821282CCEBD3E0D093C103C093C003EE +:103210000EEB13E01093C3030093C20366E671E064 +:103220008BED93E00E94421166E671E081EE93E03F +:103230000E944211F801118210821982188287EAD5 +:1032400092E00E94BD0D66E671E081EA92E00E9484 +:1032500042110E94950C60939D0270939E02809390 +:103260009F029093A002DF91CF911F910F9108953B +:10327000991B79E004C0991F961708F0961B881FC8 +:103280007A95C9F780950895AA1BBB1B51E107C029 +:10329000AA1FBB1FA617B70710F0A61BB70B881FE6 +:1032A000991F5A95A9F780959095BC01CD01089575 +:1032B00097FB072E16F4009407D077FD09D00E94E3 +:1032C000441907FC05D03EF4909581959F4F0895D1 +:1032D000709561957F4F0895A1E21A2EAA1BBB1B22 +:1032E000FD010DC0AA1FBB1FEE1FFF1FA217B307D2 +:1032F000E407F50720F0A21BB30BE40BF50B661FE8 +:10330000771F881F991F1A9469F7609570958095AB +:1033100090959B01AC01BD01CF010895052E97FB4F +:103320001EF400940E94A51957FD07D00E946C1945 +:1033300007FC03D04EF40C94A51950954095309598 +:1033400021953F4F4F4F5F4F089590958095709511 +:1033500061957F4F8F4F9F4F08950E94C421B7FF03 +:103360000895821B930B0895EE0FFF1F0590F491B3 +:10337000E02D09945058BB27AA270E94D2190C941B +:103380003D210E942F2138F00E94362120F039F48F +:103390009F3F19F426F40C942C210EF4E095E7FBE2 +:1033A0000C942621E92F0E944E2158F3BA17620788 +:1033B00073078407950720F079F4A6F50C94702123 +:1033C0000EF4E0950B2EBA2FA02D0B01B901900140 +:1033D0000C01CA01A0011124FF27591B99F0593F84 +:1033E00050F4503E68F11A16F040A22F232F342FCC +:1033F0004427585FF3CF469537952795A795F0401A +:103400005395C9F77EF41F16BA0B620B730B840B2E +:10341000BAF09150A1F0FF0FBB1F661F771F881FE6 +:10342000C2F70EC0BA0F621F731F841F48F487953E +:1034300077956795B795F7959E3F08F0B0CF939530 +:10344000880F08F09927EE0F9795879508950E94A9 +:103450003B1A0C943D210E94362158F00E942F21E6 +:1034600040F029F45F3F29F00C94262151110C946F +:1034700071210C942C210E944E2168F39923B1F301 +:10348000552391F3951B550BBB27AA27621773078A +:10349000840738F09F5F5F4F220F331F441FAA1F1E +:1034A000A9F335D00E2E3AF0E0E832D091505040DA +:1034B000E695001CCAF72BD0FE2F29D0660F771F88 +:1034C000881FBB1F261737074807AB07B0E809F06E +:1034D000BB0B802DBF01FF2793585F4F3AF09E3FF3 +:1034E000510578F00C9426210C9471215F3FE4F390 +:1034F000983ED4F3869577956795B795F7959F5F36 +:10350000C9F7880F911D9695879597F90895E1E081 +:10351000660F771F881FBB1F621773078407BA07E0 +:1035200020F0621B730B840BBA0BEE1F88F7E0953B +:1035300008950E94A01A6894B1110C947121089505 +:103540000E94562188F09F5798F0B92F9927B751BC +:10355000B0F0E1F0660F771F881F991F1AF0BA9537 +:10356000C9F714C0B13091F00E947021B1E0089504 +:103570000C947021672F782F8827B85F39F0B93FF6 +:10358000CCF3869577956795B395D9F73EF49095EA +:103590008095709561957F4F8F4F9F4F08950E9442 +:1035A000952008F48FEF0895A0E0B0E0EAEDFAE18D +:1035B0000C949121EC01009721F4CB010E948F1E05 +:1035C000B8C0FC01E60FF71F9C0122503109E21739 +:1035D000F30708F4ACC0D9010D911C91119706179F +:1035E0001707B0F00530110508F49FC0C801049713 +:1035F0008617970708F499C002501109061B170B8C +:10360000019311936D937C93CF010E94241F8DC071 +:103610005B01A01AB10A4C01800E911EA0915204C8 +:10362000B091530440E050E0E12CF12C109709F4E4 +:103630004AC0A815B905D1F56D907C90119763012A +:1036400082E0C80ED11CCA14DB0480F1A3014A1920 +:103650005B096A0182E0C80ED11C1296BC901297D9 +:103660001396AC91B5E0CB16D10440F0B282A3839F +:1036700051834083D9016D937C930AC00E5F1F4F25 +:10368000C301800F911FF90191838083EB2DFA2FE5 +:10369000E114F10431F0D7011396FC93EE931297E5 +:1036A00044C0F0935304E09352043FC08D919C9129 +:1036B00011974817590708F4AC017D0112960D9037 +:1036C000BC91A02DB3CF80915004909151048815E6 +:1036D0009905E1F446175707C8F4809107019091C6 +:1036E0000801009741F48DB79EB740910B015091AE +:1036F0000C01841B950BE817F907C8F4F0935104EB +:10370000E0935004F901718360830FC0CB010E94E4 +:103710008F1E7C01009759F0A801BE010E94A31BD7 +:10372000CE010E94241FC70104C0CE0102C080E068 +:1037300090E0CDB7DEB7EEE00C94AD2181E090E0F3 +:10374000F8940C94D321FB01DC0102C001900D928E +:1037500041505040D8F708956817790768F4FB0185 +:10376000DC01E40FF51FA40FB51F02C002900E92FA +:1037700041505040D8F708950C94A31BFB01DC0185 +:1037800001900D920020E1F70895FB01DC0141500A +:10379000504048F001900D920020C9F701C01D92E1 +:1037A00041505040E0F70895FB0151915523A9F095 +:1037B000BF01DC014D9145174111E1F759F4CD01ED +:1037C0000190002049F04D9140154111C9F3FB01D2 +:1037D0004111EFCF81E090E001970895AEE0B0E0B5 +:1037E000E4EFFBE10C949B210D891E8986E08C831C +:1037F0001A8309838FEF9FE79E838D83AE01475E17 +:103800005F4F6F89788DCE0101960E94111C2F8128 +:103810003885F801E20FF31F10822E96E4E00C9435 +:10382000B721ACE0B0E0E7E1FCE10C948D217C0134 +:103830006B018A01FC0117821682838181FFBDC161 +:10384000CE0101964C01F7019381F60193FD85911C +:1038500093FF81916F01882309F4ABC1853239F45C +:1038600093FD859193FF81916F01853229F4B70112 +:1038700090E00E94F91DE7CF512C312C20E020323E +:10388000A0F48B3269F030F4803259F0833269F45D +:1038900020612CC08D3239F0803339F4216026C08C +:1038A0002260246023C0286021C027FD27C030ED9E +:1038B000380F3A3078F426FF06C0FAE05F9E300DEC +:1038C0001124532E13C08AE0389E300D1124332E5C +:1038D00020620CC08E3221F426FD6BC1206406C02C +:1038E0008C3611F4206802C0883641F4F60193FD4D +:1038F000859193FF81916F018111C1CF982F9F7D99 +:103900009554933028F40C5F1F4FFFE3F9830DC0EB +:10391000833631F0833771F0833509F05BC022C004 +:10392000F801808189830E5F1F4F44244394512CFA +:10393000540115C03801F2E06F0E711CF801A0802F +:10394000B18026FF03C0652D70E002C06FEF7FEFEE +:10395000C5012C870E94EE1D2C0183012C852F7739 +:10396000222E17C03801F2E06F0E711CF801A08002 +:10397000B18026FF03C0652D70E002C06FEF7FEFBE +:10398000C5012C870E94E31D2C012C852068222E66 +:10399000830123FC1BC0832D90E048165906B0F428 +:1039A000B70180E290E00E94F91D3A94F4CFF5014E +:1039B00027FC859127FE81915F01B70190E00E946D +:1039C000F91D31103A94F1E04F1A51084114510495 +:1039D00071F7E5C0843611F0893639F5F80127FF13 +:1039E00007C060817181828193810C5F1F4F08C085 +:1039F00060817181072E000C880B990B0E5F1F4FA1 +:103A00002F76722E97FF09C09095809570956195DD +:103A10007F4F8F4F9F4F2068722E2AE030E0A40125 +:103A20000E94311EA82EA81844C0853729F42F7E85 +:103A3000B22E2AE030E025C0F22FF97FBF2E8F365C +:103A4000C1F018F4883579F0B4C0803719F08837A0 +:103A500021F0AFC02F2F2061B22EB4FE0DC08B2DF0 +:103A60008460B82E09C024FF0AC09F2F9660B92E2B +:103A700006C028E030E005C020E130E002C020E1CF +:103A800032E0F801B7FE07C06081718182819381C5 +:103A90000C5F1F4F06C06081718180E090E00E5F77 +:103AA0001F4FA4010E94311EA82EA818FB2DFF77DE +:103AB0007F2E76FE0BC0372D3E7FA51450F474FE8A +:103AC0000AC072FC08C0372D3E7E05C0BA2C372DC7 +:103AD00003C0BA2C01C0B52C34FF0DC0FE01EA0DA5 +:103AE000F11D8081803311F4397E09C032FF06C098 +:103AF000B394B39404C0832F867809F0B39433FD54 +:103B000013C030FF06C05A2CB31418F4530C5B18C2 +:103B1000B32CB31468F4B70180E290E03C870E94B4 +:103B2000F91DB3943C85F5CFB31410F43B1801C0D4 +:103B3000312C34FF12C0B70180E390E03C870E9433 +:103B4000F91D3C8532FF17C031FD03C088E790E0C6 +:103B500002C088E590E0B7010CC0832F867859F049 +:103B600031FF02C08BE201C080E237FD8DE2B70178 +:103B700090E00E94F91DA51438F4B70180E390E0AD +:103B80000E94F91D5A94F7CFAA94F401EA0DF11D91 +:103B90008081B70190E00E94F91DA110F5CF33207C +:103BA00009F451CEB70180E290E00E94F91D3A94E9 +:103BB000F6CFF7018681978102C08FEF9FEF2C9699 +:103BC000E2E10C94A921FC010590615070400110C4 +:103BD000D8F7809590958E0F9F1F0895FC01615036 +:103BE000704001900110D8F7809590958E0F9F1F1F +:103BF00008950F931F93CF93DF93FB01238121FD42 +:103C000003C08FEF9FEF28C022FF16C04681578167 +:103C1000248135814217530744F4A081B1819D016D +:103C20002F5F3F4F318320838C93268137812F5F15 +:103C30003F4F3783268310C0EB01092F182F0084D4 +:103C4000F185E02D0995892BE1F68E819F81019602 +:103C50009F838E83812F902FDF91CF911F910F91A2 +:103C60000895FA01AA27283051F1203181F1E89412 +:103C70006F936E7F6E5F7F4F8F4F9F4FAF4FB1E05F +:103C80003ED0B4E03CD0670F781F891F9A1FA11D5A +:103C9000680F791F8A1F911DA11D6A0F711D811D5B +:103CA000911DA11D20D009F468943F912AE0269F20 +:103CB00011243019305D3193DEF6CF010895462F7F +:103CC0004770405D4193B3E00FD0C9F7F6CF462F60 +:103CD0004F70405D4A3318F0495D31FD40524193C9 +:103CE00002D0A9F7EACFB4E0A69597958795779586 +:103CF0006795BA95C9F700976105710508959B010D +:103D0000AC010A2E06945795479537952795BA9595 +:103D1000C9F7620F731F841F951FA01D0895CF93CD +:103D2000DF938230910510F482E090E0E09152043C +:103D3000F091530420E030E0C0E0D0E0309711F182 +:103D40004081518148175907C0F04817590761F45D +:103D500082819381209719F09B838A832BC0909353 +:103D600053048093520426C02115310519F04217DF +:103D7000530718F49A01BE01DF01EF010280F381BD +:103D8000E02DDCCF2115310509F1281B390B24303A +:103D9000310590F412968D919C91139761157105E0 +:103DA00021F0FB019383828304C09093530480939A +:103DB0005204FD01329644C0FD01E20FF31F8193CE +:103DC0009193225031092D933C933AC02091500495 +:103DD00030915104232B41F42091090130910A01C3 +:103DE0003093510420935004209107013091080131 +:103DF0002115310541F42DB73EB740910B0150918B +:103E00000C01241B350BE0915004F0915104E21792 +:103E1000F307A0F42E1B3F0B2817390778F0AC01ED +:103E20004E5F5F4F2417350748F04E0F5F1F5093CA +:103E30005104409350048193919302C0E0E0F0E07C +:103E4000CF01DF91CF9108950F931F93CF93DF930D +:103E5000009709F48CC0FC01329713821282009102 +:103E60005204109153040115110581F42081318110 +:103E7000820F931F20915004309151042817390765 +:103E800079F5F0935104E093500471C0D80140E0FB +:103E900050E0AE17BF0750F412962D913C91139746 +:103EA000AD012115310509F1D901F3CF9D01DA01E9 +:103EB0003383228360817181860F971F8217930756 +:103EC00069F4EC0128813981260F371F2E5F3F4F9F +:103ED000318320838A819B8193838283452B29F4BC +:103EE000F0935304E093520442C01396FC93EE9374 +:103EF0001297ED01499159919E01240F351FE21748 +:103F0000F30771F480819181840F951F02961196B9 +:103F10009C938E938281938113969C938E93129798 +:103F2000E0E0F0E0D80112968D919C9113970097F4 +:103F300019F0F8018C01F6CF8D919C9198012E5FBC +:103F40003F4F820F931F2091500430915104281746 +:103F5000390769F4309729F41092530410925204EF +:103F600002C0138212821093510400935004DF9117 +:103F7000CF911F910F910895FC0188279927E8940C +:103F800021912032E9F3293010F02E30C8F32B3282 +:103F900041F02D3239F4689404C00E942120820F30 +:103FA000911D219120532A30C0F31EF490958195E4 +:103FB0009F4F08951F93FC0199278827BC01E8941F +:103FC00011911032E9F3193010F01E30C8F31B3292 +:103FD00051F01D3249F4689406C00E940C20610F14 +:103FE000711D811D911D119110531A30B0F33EF4D3 +:103FF00090958095709561957F4F8F4F9F4F1F9142 +:104000000895BB274A3031F4992322F4BDE29095FC +:1040100081959F4F0C942A20592F482F372F262FF8 +:10402000660F771F881F991F660F771F881F991FBC +:10403000620F731F841F951F660F771F881F991FBC +:1040400008957AE0979F902D879F802D910D1124E0 +:104050000895BB27FB015527AA27880F991FAA1F80 +:10406000A41710F0A41B83955051B9F7A05DAA3393 +:1040700008F0A95DA193009779F7B111B19311925E +:10408000CB010C944320DC01FC01672F7191772355 +:10409000E1F7329704C07C916D9370836291AE1703 +:1040A000BF07C8F308950E94952008F481E00895A1 +:1040B000E89409C097FB3EF49095809570956195C2 +:1040C0007F4F8F4F9F4F9923A9F0F92F96E9BB2778 +:1040D0009395F695879577956795B795F111F8CFF4 +:1040E000FAF4BB0F11F460FF1BC06F5F7F4F8F4F5F +:1040F0009F4F16C0882311F096E911C0772321F055 +:104100009EE8872F762F05C0662371F096E8862FEC +:1041100070E060E02AF09A95660F771F881FDAF743 +:10412000880F9695879597F90895990F0008550F70 +:10413000AA0BE0E8FEEF16161706E807F907C0F02D +:1041400012161306E407F50798F0621B730B840B35 +:10415000950B39F40A2661F0232B242B252B21F40F +:1041600008950A2609F4A140A6958FEF811D811DAF +:1041700008950E94CC200C943D210E942F2138F0FC +:104180000E94362120F0952311F00C9426210C94E6 +:104190002C2111240C9471210E944E2170F3959FC3 +:1041A000C1F3950F50E0551F629FF001729FBB272E +:1041B000F00DB11D639FAA27F00DB11DAA1F649FCA +:1041C0006627B00DA11D661F829F2227B00DA11D7D +:1041D000621F739FB00DA11D621F839FA00D611D03 +:1041E000221F749F3327A00D611D231F849F600D24 +:1041F000211D822F762F6A2F11249F5750409AF04D +:10420000F1F088234AF0EE0FFF1FBB1F661F771FD8 +:10421000881F91505040A9F79E3F510580F00C94A3 +:1042200026210C9471215F3FE4F3983ED4F38695E8 +:1042300077956795B795F795E7959F5FC1F7FE2B43 +:10424000880F911D9695879597F9089597F99F671F +:1042500080E870E060E008959FEF80EC089500240E +:104260000A941616170618060906089500240A94DB +:1042700012161306140605060895092E0394000C61 +:1042800011F4882352F0BB0F40F4BF2B11F460FFF0 +:1042900004C06F5F7F4F8F4F9F4F089557FD905819 +:1042A000440F551F59F05F3F71F04795880F97FBFA +:1042B000991F61F09F3F79F08795089512161306B4 +:1042C0001406551FF2CF4695F1DF08C016161706E3 +:1042D0001806991FF1CF8695710561050894089518 +:1042E000E894BB2766277727CB0197F90895F999BA +:1042F000FECF92BD81BDF89A992780B50895262FEB +:10430000F999FECF1FBA92BD81BD20BD0FB6F894BA +:10431000FA9AF99A0FBE019608952F923F924F9202 +:104320005F926F927F928F929F92AF92BF92CF9245 +:10433000DF92EF92FF920F931F93CF93DF93CDB74E +:10434000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFC6 +:1043500009942A88398848885F846E847D848C8497 +:104360009B84AA84B984C884DF80EE80FD800C81A0 +:104370001B81AA81B981CE0FD11D0FB6F894DEBF83 +:104380000FBECDBFED010895A29FB001B39FC00144 +:10439000A39F700D811D1124911DB29F700D811D71 +:1043A0001124911D089510E0C5E7D0E004C0FE017E +:1043B0000E94B4192196C637D107C9F7F894FFCFE8 +:1043C0002C01068C0B8C0B000054048000000000B4 +:1043D00000230B0310EC0ACA0ADE0A6A0B4F4B00DB +:1043E0005620332E332E30205349474E414C6475AE +:1043F000696E6F202D20636F6D70696C656420613C +:1044000074205365702031362032303136203233FB +:104410003A32343A3037004954506172616D733A20 +:1044200020003B000D0A004D5300443D0043503D29 +:104430000053503D004F0025303258002530315890 +:10444000004D43004C4C3D004C483D00534C3D005A +:0C44500053483D00433D004D5500500016 :00000001FF