Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

RiotJournal - Graphical LiveJournal Client

by #include (Curate)
on Nov 25, 2003 at 17:52 UTC ( #309984=sourcecode: print w/ replies, xml ) Need Help??

Category: Web Stuff
Author/Contact Info #include

http://www.riotmod.com/lj
Description: A small, simple graphical LiveJournal client. Based on ljer.pl by amoe. Uses Perl/Tk, LWP::UserAgent, and HTTP::Request::Common.

UPDATE: According to jsprat, RiotJournal works on Win2K, as well as Linux.
#!/usr/bin/perl
#
# ==============
# riotjournal.pl
# ==============
#
# Based on ljer.pl by amoe (http://perlmonks.thepen.com/120236.html)
#
# Description : Perl LiveJournal client
# Version     : 0.2
# Author      : Dan Hetrick
# Website     : http://www.riotmod.com/lj
#
use strict;
use warnings;
use Tk;
use LWP::UserAgent;
use HTTP::Request::Common;

#==========[ Settings ]=========

my $APP_NAME    = "RiotJournal";
my $APP_VERSION = "0.2";
my $APP_CONFIG  = "$ENV{HOME}/.riotjournal.rc";
my $APP_AGENT   = "$APP_NAME/$APP_VERSION";
my $APP_CGI     = 'http://www.livejournal.com/cgi-bin/log.cgi';
my %global_params;
my $mw;
my $GUI_LOGO_WIDTH  = 597;
my $GUI_LOGO_HEIGHT = 86;

#==========[ Post Settings ]====

my $LJ_SUBJECT;
my $LJ_ENTRY;
my $LJ_MUSIC;
my $LJ_MOOD;
my $LJ_POST_TYPE = 1;    # 1 = Public, 2 = Private, 3 = Friends
my $LJ_USERNAME;
my $LJ_PASSWORD;
my $GUI_POST_TEXT;

#==========[ Main Code ]========

if ( -e "$APP_CONFIG" ) { }
else { GUI_EnterUserInfo(); }
$LJ_USERNAME = GetSetting( "user",     $APP_CONFIG );
$LJ_PASSWORD = GetSetting( "password", $APP_CONFIG );
$APP_CGI     = GetSetting( "cgi",      $APP_CONFIG );
$APP_AGENT   = GetSetting( "agent",    $APP_CONFIG );
GUI_EnterPost();

#==========[ Support Code ]=====

# =============
# GetSetting()
# =============
# Arguments   : Setting, Config file
# Returns     : Setting value
# Description : Retrieves user settings from riotjournal.rc
#
sub GetSetting {
    my ( $myset, $myfile ) = @_;
    my $retval = "";
    open( CFGFILE, "<$myfile" ) or die "Error opening $myfile.";
    my @cfgfile = <CFGFILE>;
    close CFGFILE;
    foreach my $sln (@cfgfile) {
        if ( index( $sln, "#" ) == 0 ) { next; }
        if ( $sln eq "" ) { next; }
        my @ln = split( "=", $sln );
        if ( lc( $ln[0] ) =~ /$myset/i ) {
            chomp $ln[1];
            $retval = $ln[1];
            last;
        }
    }
    return $retval;
}

# ===============
# GUI_EnterPost()
# ===============
# Arguments   : None
# Returns     : None
# Description : Displays a Tk interface to the PostToLiveJournal() sub
+.
#
sub GUI_EnterPost {
    $mw = MainWindow->new();
    $mw->title("$APP_NAME $APP_VERSION");
    my $icon = $mw->Photo( 'image', -data => rj_icon(), format => 'gif
+' );
    $mw->iconimage($icon);
    my $canvas =
      $mw->Canvas( '-width' => $GUI_LOGO_WIDTH, '-height' => $GUI_LOGO
+_HEIGHT );
    $mw->Photo( 'logo', -data => rj_logo(), -format => 'gif' );
    $canvas->createImage( 0, 0, '-anchor' => 'nw', '-image' => 'logo' 
+);
    $canvas->pack;
    $mw->Label( -text => "Subject" )->pack( -anchor => 'nw' );
    $mw->Entry( -width => 75, -textvariable, \$LJ_SUBJECT )
      ->pack( -anchor => 'ne', -fill => 'x' );
    $mw->Label( -text => "Music" )->pack( -anchor => 'nw' );
    $mw->Entry( -width => 75, -textvariable, \$LJ_MUSIC )
      ->pack( -anchor => 'ne', -fill => 'x' );
    $mw->Label( -text => "Mood" )->pack( -anchor => 'nw' );
    $mw->Entry( -width => 75, -textvariable, \$LJ_MOOD )
      ->pack( -anchor => 'ne', -fill => 'x' );
    $GUI_POST_TEXT =
      $mw->Scrolled( 'Text', -scrollbars => 'e', -width => 80, -height
+ => 10 )
      ->pack( -anchor => 'nw', -fill => 'x' );
    $mw->Radiobutton(
        -text    => "Public",
        -command => sub { $LJ_POST_TYPE = 1; }
    )->pack( -anchor => 'nw' );
    $mw->Radiobutton(
        -text    => "Private",
        -value   => '0',
        -command => sub { $LJ_POST_TYPE = 2; }
    )->pack( -anchor => 'nw' );
    $mw->Radiobutton(
        -text    => "Friends Only",
        -value   => '1',
        -command => sub { $LJ_POST_TYPE = 3; }
    )->pack( -anchor => 'nw' );
    $mw->Button(
        -text    => "Post to LiveJournal",
        -command => sub {
            $LJ_ENTRY = $GUI_POST_TEXT->get( '1.0', 'end' );
            PostToLiveJournal();
        }
      )->pack(
        -side   => 'left',
        -anchor => 'nw',
        -fill   => 'x'
      );
    $mw->Button(
        -text    => "Exit",
        -command => sub { exit }
      )->pack(
        -side   => 'right',
        -anchor => 'nw',
        -fill   => 'x'
      );
    MainLoop;
}

# ===================
# GUI_EnterUserInfo()
# ===================
# Arguments   : None
# Returns     : None
# Description : Displays a Tk dialog to get the LiveJournal user
#               and password, and calls CreateUserInfoFile()
#
sub GUI_EnterUserInfo {
    my $username;
    my $password;
    $mw = MainWindow->new();
    $mw->title("$APP_NAME $APP_VERSION");
    my $icon = $mw->Photo( 'image', -data => rj_icon(), format => 'gif
+' );
    $mw->iconimage($icon);
    my $canvas = $mw->Canvas( '-width' => 317, '-height' => $GUI_LOGO_
+HEIGHT );
    $mw->Photo( 'logo', -data => rj_logo_small(), -format => 'gif' );
    $canvas->createImage( 0, 0, '-anchor' => 'nw', '-image' => 'logo' 
+);
    $canvas->pack;
    $mw->Label( -text => "Enter your LiveJournal Username/Password." )
      ->pack( -anchor => 'nw' );
    $mw->Label( -text => "Restart $APP_NAME for changes to take effect
+." )
      ->pack( -anchor => 'nw' );
    $mw->Label( -text => "Username:" )->pack( -anchor => 'nw' );
    $mw->Entry( -width => 20, -textvariable, \$username )
      ->pack( -anchor => 'nw', -fill => 'x' );
    $mw->Label( -text => "Password:" )->pack( -anchor => 'nw' );
    $mw->Entry( -width => 20, -textvariable, \$password )
      ->pack( -anchor => 'nw', -fill => 'x' );
    $mw->Button(
        -text    => "OK",
        -command => sub { CreateUserInfoFile( $username, $password ); 
+exit; }
      )->pack(
        -side   => 'top',
        -anchor => 'nw',
        -fill   => 'x'
      );
    $mw->Button(
        -text    => "Exit",
        -command => sub { exit }
      )->pack(
        -side   => 'top',
        -anchor => 'nw',
        -fill   => 'x'
      );
    MainLoop;
}

# ====================
# CreateUserInfoFile()
# ====================
# Arguments   : Username, password
# Returns     : None
# Description : Saves username/password to /home/<username>/.riotjourn
+al.rc
#
sub CreateUserInfoFile {
    my ( $username, $password ) = @_;
    open( CONFIGFILE, ">$APP_CONFIG" ) or die "Can't write configurati
+on file.";
    print CONFIGFILE "# riotjournal configuration file\n";
    print CONFIGFILE "user=$username\n";
    print CONFIGFILE "password=$password\n";
    print CONFIGFILE "cgi=http://www.livejournal.com/cgi-bin/log.cgi\n
+";
    print CONFIGFILE "agent=$APP_NAME/$APP_VERSION\n";
    close CONFIGFILE;
}

# ===================
# PostToLiveJournal()
# ===================
# Arguments   : None
# Returns     : None
# Description : Posts entered data to LiveJournal
#
sub PostToLiveJournal {
    my $journaller = LWP::UserAgent->new();
    $journaller->agent($APP_AGENT);

    $global_params{user}     = $LJ_USERNAME;
    $global_params{password} = $LJ_PASSWORD;

    my %login = &login;

    my $http_res = $journaller->request( POST $APP_CGI, \%login );
    die "Failed to login!" unless ( $http_res->is_success );
    my %lj_res = split( "\n", $http_res->content );
    $lj_res{success} eq 'OK'
      ? print "Logged in as $lj_res{name}!\n"
      : die "Failed to log in: $lj_res{errmsg}\n";
    print "Server: $lj_res{message}\n" unless ( !$lj_res{message} );

    my %postevent = &postevent;

    $http_res = $journaller->request( POST $APP_CGI, \%postevent );
    die "Failed to update journal!" unless ( $http_res->is_success );
    %lj_res = split( "\n", $http_res->content );
    $lj_res{success} eq 'OK'
      ? print "Updated journal successfully with entry $lj_res{itemid}
+\n"
      : print "Failed to update journal: $lj_res{errmsg}\n";
    exit;
}

# =======
# login()
# =======
# Arguments   : None
# Returns     : Parameter hash
# Description : Sets LiveJournal login parameters
#
sub login {
    my %params = %global_params;
    $params{mode}          = 'login';
    $params{clientversion} = $APP_AGENT;
    return %params;
}

# ===========
# postevent()
# ===========
# Arguments   : None
# Returns     : Parameter hash
# Description : Sets LiveJournal post parameters
#
sub postevent {
    my %params = %global_params;
    $params{mode}        = 'postevent';
    $params{lineendings} = 'unix';
    if ( $LJ_POST_TYPE == 1 ) {
        $params{security} = 'public';
    }
    elsif ( $LJ_POST_TYPE == 2 ) {
        $params{security} = 'private';
    }
    elsif ( $LJ_POST_TYPE == 3 ) {
        $params{security}  = 'usemask';
        $params{allowmask} = 1;
    }
    @params{ 'subject', 'event', 'prop_current_music', 'prop_current_m
+ood' } =
      ( $LJ_SUBJECT, $LJ_ENTRY, $LJ_MUSIC, $LJ_MOOD );
    @params{ 'min', 'hour', 'day', 'mon', 'year' } =
      ( localtime(time) )[ 1 .. 5 ];
    $params{year} += 1900;
    $params{mon}  += 1;
    return %params;
}

# ===================
# rj_logo()
# ===================
# Arguments   : None
# Returns     : Base64 encoded GIF image
# Description : The RiotJournal logo
#
sub rj_logo {
    my $binary_data = <<EOD;
R0lGODlhVQJWAOcAAGaazmaaymaWymKWxkp+ri5ekh5OggY2agY6bhpOgjpqnlqKvlqOwj
+5ypgo+
cgI2agIyZipeklKGukp+siZajg5CcjJmml6Owj5yoho+ckZSdnZifoJmgiZCbhJCdl6Swl
+aKulKC
tk5+skp6rkZ2qkZ6qmKSxj5uohZKfgI2Zg46bopqgppyhm5eflJWdi5GbjpuojpunjZqmm
+KWykZ6
rgo2al5aeg4+ckZqjmqGnl5+liJOdlaKvkJ2qjZqnjZmmiJShjZKchI+ckJminaSrr7K2u
+bu9tre
3nKKohpKfkJ2pk6CtlaGuhpGdlZ2mrrO5v7+/vLy8ra+xkJyplKGtl6Sxnpifh4+bsLGyu
+7u7vr6
/ubq7sbS3pKisjpihk6CsiZShn6Sps7OzsrW4hJGdgo6bhZCcsrKylKCpkJymhY6aqayui
+5Wgn6u
yo6+2pbG3oKu1kZ2njZafaKqtmqauoq61prK4nam0j5adm6evpLC2iZWii5SfoqarlaGqk
+ZmiipO
ch5Sgk5+ooa20j5ulmaWujJmjmKSsiJWhi5ikluLrjZiikp6onqqxn6iwipajl6OsnKiwj
+pmli5a
gjZWciJGbm52fpqSioKGhlZqeramksKukuLCmvbOnuzGnKqejlpuet6+mvLKnnqCgubCms
+qylta6
lhY+ap6Wiu7KnjJilmJyfpKOhhpCbk5memqazvb6/vL2+vb2+t7m6nKWumaOsu72+ipWgi
+ZOgiJO
gpK22rrS6sra7rLK5pq63nqm0jJaikZypm6ezoau1p6+3q7K5qbC4oqy2nKi0u7y+t7q8s
+LW6hI2
ZjZejrbO5tLi8uLu9ury9pa63nKizq7K4ury+vr+/uLq9q7G4nai0qrG4tbm8qLC4mqezr
+7S6n6q
1iJGdsba7o622qbG4s7e7lJ+st7q9pq+3tbi8trm8rLO5o6y2sre7oKq1kJuor7W6oqy1h
+5KdipW
iqq6zlZ6mh5Odqq+zo6muuLm7uLq7jpehnKOqo6iuv///////////ywAAAAAVQJWAAAI/g
+ABCBxI
sKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihQYoKTJkyhTqlzJsqXLlzBjyp
+xJs6bN
mzhz6tzJs6fPn0CDCh1KtGhJAUiTKl3KtKnTp1CjSp1KtarVq1izat3KtatXqwC+ih1Ltq
+zZs2jT
Zh3Jtq3bt3DjykUYYK7du3jz6t3Lt6/fv4AbCghMuLDhwDGRDlg8QIDRx5AjS55M+SeAyp
+gza97M
ObHUAQQKGDiAIIGCBWpTq17NurXrtGHDvp5Nu7bt21gXMmiQwAGCBw8gPEAQQcLh48iT76
+1bV7nz
59A/TqBQITiE68IhOLBwIbr37+Af/g4eHL68eecrB2AwgABCBg0bOGjogN1DA8cxP4AIIW
+IEif8k
lCBCCCCYgF9nCCao4IIpXXYZgxBGKOGEKDl1AgopqKDBCiy04MILGaQAQQopJDBCVCYsEI
+J/GMAQ
gwwWxGiBDDHAgIGAC8yA24489ugjVLGN9+OQRBZp5FMH0YBhDS6wwIINGRxwAw456LADBA
+hQwMNB
MzAgwQQ9wBCjDzU2gEEMMSgQ4w8xwtCDCAycJ+ecHTHnIJ145slXABcAcQCTLKwQRApCDE
+FEEUYc
gUQS2lnwAUFdSkCCAj8o0IASJIwwwRJM8BDCEhOU0EMDPqypQA88zKDnqqwiNF5s/q3GKi
+tHKM3Q
QHtBsMBBBzU04cQTUAQbhRQ4tFfBFI4NcEEIPfgAQwMlLMFDnCQ5WJcAF4BAwwk+lPoDBl
+QMQOG4
5Jb7krUPmqvuuuzypBQAVSzJgRVX1LCDDlhkAYUWW3DRhRceCIeCBFVQoYQCMTTwBQOq3u
+nYw+Q5
BgADJcAAowUwMHHkxhx3XFWQQXos8sgkl0WQAFQE14EVL9QARhhYiCFGFGPkQAYENZTR3g
+MGcOtD
CQsMQFJzOs5gtNECzHBtAElL0MAPUMNA7axUm2ennVVnrfVDAcxAgIjz1WBGDlicIQYWSD
+gAAWkF
oJFGGWsnoATDssk2wwA8gDrq/hQlbDq1gwz0YAGbSmxtuHOvvnr44oebJMAAJZCoRg0I6C
+DFGWes
wQbcKqTRhhtvwBFHCsDRoCrRVSwxhQIyQM3mxZXCMMIHQjKBweA+aNzu7rxnhi5zvQcvfP
+BICSQA
A+1dJ0cXmM8hxwEpkEFHHW/YYf0dEVznAQiOFaxEDN02QMMEVFDBXwmkjgnu6TNIEMOMGO
+hY8vz0
2wZy4vXnr//+5MU2gAwIEJET1nCGOeBBBSlAgQfyoAfrWU8PdLhZCvYAKiWcYAojoAIDLl
+CFARxt
BlVgAAhEcDsLKIAAjxLAB2gwpu4w7oV+uRq6YEhDWQEPW3toDx/6sAYd+CYC/l8wTRscaD
+03+CGA
ZaBADGiwBAZ8QGlMIw/THvSBBYwARj4QgaoEsID3WWAJDVOILnbBizKa0Yy98MUvDsKERQ
+DjjcFQ
iDCGQYxinHEXxjgGMhJCjDP68YzjSIguzLiMYbxCIcPgRjGWYUZvcGMd01DIK4bByDLq4i
+BkLOM4
1igQYYTjj2UMxy7G8Y1DEmQa0jjjO9qRkHO8o4y7uKQk4WBGZ9yBIdyoJSsPkjiQ1fCXq2
+Ia8ALw
BQyp4A86AEQKAgGCAMQhAYIYBBHtUAdCkMgBP+DBYEpystgsDYRLUFMDtAmAD4xgcCQQl0
+uKkYxg
ufOdtlDGMnxxh5MAQAQd/mCGPpuxEmHowhnPgEY03hkLaDzjCdKYhkre8c6GvpMXLCmGO2
+Hhi26o
RBji6AU5jJAMa0zUCM/whi6m8QqVdOMcWnDnOFQy0GDxAg4mEYZD3wkLI/CCGqU0CTKw8U
+4tUCMb
K3lCFIJlhJW25A69cGcsdCEMlyzDnUYQx0p+Z63hWfWq5TLeNktCiIAJwQwPIEMJChGAAR
+gCCIdw
AxHf0AZEHOABgfhCww6ELsV1bQI++AEBqpA0JrSJr1AJADWqMdN3WuMa2MhGUu7ZCn0yAx
+hNgYM2
thGLwgZLFrPoxTGWAgCGWtadvHgKNSYqjVcs5RW/MMY2YPFZKKTDGYZc/koAXnEO1gbLGE
+0hrEvb
UTxheLS1ydhFO0wLgDtI9J3K0IVpObsLWxAVt08JwDCU8c5eKPYprwgHVNfRlPvdj3/gDW
+/HYKWU
DyTiBiQqQwS2qghELCIP1SNiIVAgnAhwz64RG8hRVKgEjBmnnO/7gQsVUoyWthYa3OiG8U
+ZwBccC
wyDD8EY7WxssWJCDqQMRgDcoDAVyJEQbSpWGggfSjXY8obIc7vA5snEyYfjCtlDQxkEMTI
+5hkGQa
KYaFM9YogGyMtqHv4CSknIHiasg4IcLghiyQewyFBOCpwYKGLAsiQxkC88p04iZKQLAH6N
+3AAmXF
DwGAQIg2xNeBjAiY/gN8UIVrSXGrsJJNCCz2hcFUob8/qIJCkMJOpRrhzxyFsRae8Q2BvC
+IEfGgC
OMAhiYJ8IxwoVmo1/hyNWPx2u6YMQDEAXY2UBksLkzbCNXZxkLocFwoUHbFAvrELGFc41E
+aIhafd
CQ1fCEO/J531kQuiWyiww8ZhkelEYW0EVxvhHBbNRlIbeo1zmJIgRA5WNAKZEDiww6HcuD
+VCsgvV
KWfYu4rDsrjL0xyslYQAgRhRILY0tDSAgRFqJaIbDNEeMighjK9amjcF8oEpWMB0AjDBCN
+j0gZYI
hBotjUU4xMFwcYyDHBOGghG4YWgTlOPiI1hAuqYRjiUHyxq2MIcz/s7BcF/0Ah22uLQ1nv
+GLkgLg
Gw0nBnWjPA6G66IdKgkLiC9bWpP8otUE3YY3iMFwYqjjGSl/569dLoBXvFilKRGAgV86RW
+RcmhxE
L7k3nOtOZyCjxz9u6DJ+YU8BPIHrRWWJ03vtzhqvxDFQhgI0pIoSql4Nq3jP+4KKN8xkYa
+ACEFCv
joRpVjAo4szWawQFDgABA4RAyw6y67dH8LM2z2ACMbpAdE094WT0wnglmcYybKuFcGi1Ch
+cwgeqT
8gpsCDodxPi6fgEgDGk849JQ8Do3SfKNZ7gTHcCOIlMuc2qKLvcV1Ij4YY2hUIIEwJ/bwP
+0umv98
lLoTuosFQK95/rHL579zGYXe5iukAWNyHCMAyp6pLbCx3Oac+LlOCcDPZwoLYsjmXQDgdr
+C2wN13
9fL/TCF8USGAVUGA0XUVBhh/BzgVCSgVDRiACEgVBPiAspUVFKgUFwiBDNhd97dYdvYDIl
+IGGBAW
wqQIFLAHjjBNdnAICSAciKBnUxRn+6Vl4dQDjzIAEjA4eqYQM4BwwWIL6lA8SBEAvnAN7n
+QNxYNP
jtUMhvYNuFdjEjOEl2Fa3xB3wbIOy1U8v4AO7pQOwyAxCSEAOwcFsYBsAqEL6fBO6XAHWb
+hNSSEM
vHBp0YBbU/h0wbJrJCF1bTcMR4EM7+QNv7BNU2iERHUOAIAM/mFHhr/FDpwkMc7AdUbmKu
+vge8Fi
Du/0BCxGZXBHa95md1Q1bqDoHc1hEM2xBIgQHBWQKt5EAI+wCNK0VoIAeDeQCHn4IHEmhQ
+EgASdg
g2EBAjGygwZRPADQZ1CQDOrQTcPAhVE2ECIADg7WScZwdevQDWAYhQ4yDLzwTkH2bb33e1
+/YP87H
HKcWCyJWEtTAdRL3DaNYNwPxCsIQfe4UDmsUALnmTng4EL32a9skbMGyDLu0VeHgac2Gfs
+vWj0YQ
LLFAatXyflAwbQghDAUZC9xgicGiDNKwbdpFVN72f94VjOBoPB4ZjCKZYR8ZZyQ5krxUki
+qpkiBZ
ECuJkt92/pIuGZIz6Sos6ZIfeZMno5MxqVUw6ZM1mZI/yY7dhDUOMwNLkAg3AwEJwABuph
+6BEAcN
RERtEAO/QQYksG/WOIpI4TQ0oHkDQAWDU3A5dxk92FKet3sCMQyUCAXXsGAZsISXMQ3b4E
+7JkGBS
5GaX4RjdIA29ZgR8qGVb6E7bEHwNMh5jaHy0F4fBYmTPppagN0kHGSzpoAuO4XQwZlRHwT
+RT949W
507eoI7jMVvhYFu1doiJqAvs8FvpsA5184hEpZn2NAzkYJfTwA0opgW90FSOI0xxN3f2VG
+W/0yDp
YhLFuXsNkpzGeZzDtJzKWZbP6Zx1p2XTWXfMeZ32hJ3W/hmd21md2emdxkmc3NmcQxOc3W
+me0Ame
yLmd6fIwADADTDABEtADaoMABfAowsQAMbADkKCCkZAII4ICzeRLXEkSSxADE6AqJiACFn
+ACBhKA
o0iMttAL+OEg3KBbsMAOg/EK5eCM+vRgAPALMPZrLTl7QfILGQkF1qBcexkA3Rgs2wBTTm
+EtxecL
rzBJaQij6oic6TI0wvAMnpYM1HAZ9Xhb2ScQvUYOMHUZ/AgFgBh5zzeZULAN60CQ7zQMuk
+CRsOAN
C4liRoB9SVEX2oCh5BAAyBBxz9B/4Kh/UMB/Hghu3xWmbiansjWnQziBwsdNdVqnHYgf8W
+enfoqB
gLpf/n26X3JaqHh6qHsqqIj6p43KqJy1qIoqqJKqp5QKqZcKoY86qXQaqZfBAEtABV3iA8
+HhAA0A
gyXBBBEABo0wTW7Agljygv0zg1gTTgRQEjPAQj0AjMHYNT5YjMc4hAIwibaVDM5gaCMQlx
+8qAP70
TollqXaSX7f5TtqgWAMxmMECfHumc0qFbAFgDJMJC8vQhm4orEkxph/nDZdphzGmXw8zdV
+8YFn7o
TqtkJ3fgDDAGfqj5TscgDPi6L9dwSYMBm1AQiS45De/wW8ngC4NBDkG6a8K0iVE2ZcIpnE
+PpKhNR
khgLERrLS2HoEB27ECEblCBbst0kGBlrsuKhsgtR/hcLugQm8J4gEAgiggIEIC7J8gU7IA
+l58Ip6
0AaQ0IJYIlfXQpLM4RgTAANLEBZ3ZgEJSpMCQYyyQA7ncA6+wA3qgA4e51qumX8j4KHMwI
+TZYAzv
5AskCHr7Zi3H8E7qEIgP8qJTCmxUdjXj2HO9wHWxcIw7mRDSIKWmR4/Wd4cHsX1wQBJN+g
+za4AvE
oEjhgI7JYAxNlX7uZEjwoIwZ2lQAwJAOaRC+MHPWkA5ABQDjwHVawAuFVhBsagSyxJEcub
+c4+bqw
K5NEKbtA6boxKYy2W7u0m7uzq7tEibu7C7y+GzEvybsm2bvCi7z9k7zCy7w56bvKS5OjSD
+Qg0ERH
/rEAFqA2EEABEnAgH6AEZTAJceAHfuA2iyAHlPAAB6AAjVG0XDkYMzAq5PQBMPAD3COejn
+GWH2cL
0NC/0TBrBVsM1IgU5dBgyzoNYwgFFzk0dSNMbjYM1cViU4StUIAOMHWYQZKYFQUA6jBh0Y
+AN5baO
Z/sg4gAN8biumbmZ7+pO+iivl1ZT0HANRgDA1rAMS4qI/Pp8o4uQNgoABJt29tQN7+Bxsf
+AOJPgN
hCh33BCxvklrdOeJVfadBxLCzjnF5bme5WbFx5mH32meXCydVdzFDozFyKnF5/nFZJzFYk
+ydaEzF
ZVx2a6zGYIzFbXzFcpzGttiic3zH5daeU8QA/jTABDryniKgJvVpAQzgpwzgAJVACZSAB5
+BsCZeA
CSNSAHxVLS3JNAuAQW3GRXkFWIxKEMT4WdUQmhlWDk0gl0n2TsRAjVQGklK0tu7UtlsFt8
+DXXXRL
WiWVfD/oDDwqnbKhC1IKUYA7a3TIa6DFh0zKYbKQpiVlpZN7Gdj4ceiQDa/AkF+KgQLQDj
+kKBbaw
C8cwDMMAD0ksC8uwRwTBpm4Kp6x7pyRZofenlocaz80Bz/SsVfY8z3Qqz+58z/i8e0LYz/
+Psz/rM
z/A80Pp8p/ks0P18zwm90Act0AYN0A390Jv5vhEN0RQthGGxBEuwgzMAAhhwsxTQHh5wAk
+rj/hhB
mwma0NKbwAmd4Amf4IKo6s6j+AUYwAR1MQNi2QBCw0vCpL+FBXLp0AunGxavwGAOxqy6EM
+GyEa0g
WRcuRq2RFBsU7IUYi5hKVVECQAyTWXpZuJfmKozGoFvW8A4obI8tusLBwg5wMB7zalk1FQ
+7D0A3E
hcPutFmzxQ3h2soEa7AgOVjupAXXsA3bkA7oUA2X5oUP08QTC8WeeDIxmGEi7J6S7ZJcOd
+loK9k5
KcKU3dmYDdrHC4afjdmmDXqiXdqXDdSpjdokO8KqTdmnTYKtTduzHdq3bdurrV98MgKJXB
+IUgwEm
EAALkAABZCImcQEJAAqhIAqd8NzPrQnt/oECtGO0LToDU9AD91sFlKdFsTsQo6wFuGcORs
+3PHcoM
EBC2q3ZpVHpIW1ktdfFog21IwGPLcjt7uVxhIvYK8ECRUGAOTda7ztcNvOBpX0qkgduuBk
+G4httT
ACwL3lDX1Cm5wdJkTPMNniV3rIZim2u45IB7n5UMxYC6Kaq6rAun0Nu8xSu7zvvdwyskUJ
+viHavi
Mf67Ky7jr9vixgu8NO7iuKvjuxu9QI7jrywQBAACQsM0cyYBJjECS7kHWxIADFAGo0AKnS
+AKzv3c
paBMNxAnggiUIh0C28QAMMBm+BvUv5oM7FCbXSea2ZfU+fShYZEN3QwF1NB8fFehSPEK/u
+KAjsrA
h69CwYUZdfczhrFgozOADGyOauHgcif7IJNkYNsgDmkdLOPQ2GzdYfEqAJ/Z1uwAY9AQfh
+yN18ES
ryWxDhH3BMuAdpp5GReaYhUJVI39m+IA2VGsxvA8xlyc63TVorv+xm/M687563dM7Ggs7M
+EO7Gps
7HqM68qOyUxc7GsN7GjM7Lru69Mu7dFe7Xey7c1u7QfS2FWwq/k5BVMwyGUlAw6QAvZpAq
+BxAJ/g
CdCN5aJQCpRwHU5ZoGKd3U6JFFTwLZpqEMSYDE8gDpGWDMSgbSQ5AnH+WJ3EDci1wA5DXs
+n4Ts4g
wW/bloXJWVVWfMjmGMXQa9GgC8PU/qOOcQfpcGnnjOCzpg4Kj4/JzBxN+g6+cG0VxgvaBj
+wUDgXn
Z2gI7E62gA5eCl3CVJqw3pD2144pugWWyc7gBpkkuI72DHpSD5mVDZlTH/WS3cdb3/Vej7
+ZTn/Vh
b/WYXfVXb/aYTNlo//Vjf/Zffydq//ZaH/dwT/VyH/aJMwGCLBAzIALjxMAMEAH1FgMMMA
+mVANPP
neWdYAqgICJibtMDwQMNIAENA8gxEAKuwsRCHQ0un8AW+W2HVA7Kqt6DMQ29pgWwh7n5VR
+LiUJdK
VbggQ8HaKhDIcAy6cPtMNRgQGWLu3Q6LrgVGQAxZKIDd8AuzcGnK4AtT9HwwxguA/s40r0
+AMkbYL
ssfpf9gOviClsKANCvUqpA4FX+jAw6D97mSwg/ENUgr86LD+7L/+6DhoTEzrtv6JtD3Zjf
+3Z9i9M
+F//y6v/qJ3/ACEgAACCAgEIREjwYACDBRkyVIhw4MGIDysmdNhwoUGJAi5O3AgxI0iODz
+2O/Hhy
48eULFF2dBlSpcSKMmPCRElw4IASH04yUEJigEiCIRBBSEEmERlMnjo9hSqK0ygIEErMOG
+jwYYAG
PXwO5AGjgQmFBVWWBVAsGRQoyZy9+rWNLRRry9oVLFgOHDO+wABMPAdrrhYjy9Yhmziwnb
+Z0guf2
Qvz3b4Bvz+aiG6bzlzoj1Tpz/hMmYBi7ubHg6RTGDdpcKNHCSUNWttsvbui0zJW1685fgQ
+GMzIXl
7RvBbu1+s4WlTXIAYazffctWzHHbYd0GBgiQrRfrY2eRcWM9N9o4nQG0xZq7Tdo39u2//d
+J2HIqR
4QRfhZt7TZdH/hT7/88KrQDLEuAss9AqUEAEDUxwQQcVHDAiAyM8sEEJBbTwQAg1vPDBDh
+XMkEIO
RQyRxAk9HDHFEj9MUUTJAJhhgSU8CmCGCTCgQkKGBughAQjKqKCSUkQhMqpOSLkkhRRgqI
+Ikj2w8
gQesADBBBBgmwC7LxDqqkZpo2EqmFwC60aWa0tSJzawRruCLGb8OegUZatAr/u0acpzBhh
+ptltkm
mtvYsoacb14B8Bd00hsGOwGQKYY1I7xxhhw655vmFYqywcbMOu+khppe3kmnGmtY42WYVy
+DyaJfp
YiGnF2p2UYa1dHTxD5lR2RKum2Hwm+uZb/qTk7XMtgrgF8vCM2KcgV4RRpk/tXBmmhmmpV
+aAV77h
FQotdjlVoGVKW6YYbMQtRhtuhrtuuRdNEoldnXByl7et4KVJXozindekdy2yt916T8KXXn
+7ZZRfg
egvet6F87z1YYIMHdnjLhf2FWN9+90X44n4f5tIEGi4oUAAGeugB5IgoYiCGG5A6xRJUQk
+mlyKc8
0aQqVRgYyOAFYAhhhod4/jgBAwZCLhC7DdViy5ZiPHpFnem2AI1pAfRqExj+CrzDGVvCg8
+KWzpL5
czByElUXu8oQpfEVXbaeyxZbwoZlF6MN+qUXTVlL5uvpkHtGHGF0Wuib1eayJopqJoUClm
+Jiu665
ubz5hTlfvmRr218m0447szwSxhfE5zMGO2F0mc4cabQ0GrtXpJvLiDTvI9yWaqKZ3TNypA
+GwP5DK
2h1wAXt/ccPgFQJ+eN8hBL745I8nXsHlhTc++uiLbx4t5a3/3fnsoX8ee++R3/57Ag+qoo
+QXQzhh
AqzSTRcECxxACgFKVrmkFKegKgUpCnBOV4APaCjBAE4yAALA4AsQ4pJA/mbgJbZEQx0L+Q
+UvHGMN
dIhDIa9YU5uaUb1fYAMat+JaeKrxjmNMpFCHYgtmypK1sHFNGXc5S7GwYY4QhjAW3lhHaM
+5SIGMM
roZaKFXODoIM59wlANPQxnSqYQxkeCRYcxmGRpzIDhBCoRraKJAwyMEayP2uaPDYIqB8EZ
+oAfKuG
bDGCL8qmrgTKJGcI45Ib4eiuNsZRInOkSR3pyB864tEiXPJjSWBix4nxMY+BdKMbDflHgg
+2yj448
ZG8gychJagVGPDjgX2ZAAwwwgV94EcAMqPADIHggBVUBBChYsYlQkGITmECKARZgyQtMoA
+c4U6AE
unIBFAkIaW15IABO/rUOGrJFFsvIRlao1pcXnSQbxGBHNKoYHlugAxu/WqPZjgUFzFjkWs
+v4XOLM
QY3rZEkh0zgHOeRjQ3Oo4xeWkldihDGObexNPOGAx6mW4zi2PIc/vyDNXMihi1Nlbi7HsF
+4AXrGO
tcylGuQBwDcmlQxfoK530ygGCLcRG9idEQrQIEbuKAI9kpbUpCdFaUpVulKWttSlL4VpTE
+v6gRAM
DTsj84pZ/jiZAYAgBoggAwKq0gpXsAIVmThAVcggAbNUQZe4JIjHMLCEyZhzYybhhjJiEQ
+tlaMOc
AegFNGwRC1uYI6SEotoVrrAIGglxIL8YBy/SAY2tjrUa5mBHL/yW/jORRnCrsWAHHK6Gna
+xtwwhu
SwY0eDHGhITMaK+4AzfIYQ4jJGOssjPHM9RB0Kr2hzcAGN0uzHE4sl5jG8aIHKqGSNooOO
+NyxBnG
YbdajWLsBhnj+GssBKulti6DtdvgBmh9MdatvkOwRGsQRHSRjlhEwRbJQNcucus2t9UVHd
+LI5mQS
WDBFcReQ3/VuIcPbyPBKsrzz2u557wje7Zq3vRNTb3ffm975ije+8XWvfMdbX4QIpAoiYI
+hAJHCC
EXzgZAbrLAEpgAIHnLIMpyhDVSCAAAkMcAk9qDBvZoC+EVQBuUbbUACOoQ11OEMb66DRX7
+JhDHW0
2BkQFcAC3CEJ/hqPIGTvEqYT26GLEreYG8eYhqKax74jEsPFxLiDCRv0DWL0whnUkMZr8U
+Kgdg1D
Gtgo8YuHgRgQA64hfBTGMLhR4mKsYxq8k4wAhNHiEutiGv3phi96kWVjtIM5x2CzM+5wY9
+54BD4u
HkdmpmFkFw/jbwntzy98kWVnmCoA0sizMyTtYmcYQ7D+wbRMNb1pTnfa058GdahLagIJgK
+SAVGXf
ZABnUSpYIAkIOCVSJHzAAAxgCSSgwu4+oAQl4AxE4cX03AxCKD5fkNgxzDRD4JmRkc4N0w
+xCM47h
2RshEs9CumP2TDK07S+njiMjHam1vMyRor0Rgc1e9kIiJG4M/qWYJEKeSaYlmV39vhe/9c
+Y3e89L
XnvzV1H0va++AV5ffu/33usNeMEHvm+E9/u+uzNaDzqpkWdDJMBaMkEcECFUJVWlAVWogi
+0XsK8B
0AAGM+rl93pHcQ6xm8rVS3OCRJrqN/K5aM1cCIhvriVrMy/exd5KebR9kngvR7UaM97VHB
+ttLzd7
c0bnefMmxNfcpRiUzxZ11rW+da533esoNe9BTDAFGIAgKzsVYoKIhZ0PtDrCVcEACEowAl
+yKRAQK
mMAAqgri8ja23A4ZH7hPlmbtWgQk6Ro31gVP9LbGfMp+743Qqwr4w8Mbx+qS+rc9yzw0Z2
+lF1La4
arcUPKoT/g3HjY88Sf9O88IT3N/cTbjrxSvw/S7c4Q03uOzza/t79572v4c97nm/XVCe5A
+NdYcDV
P7uu0U+rRk7FQCAesAe8fwArNBJAWGjAAAESrcvCI0kzv18hCSE43NQmnpBXbfS9qzorAA
+M8ghDk
L7Wv+vvmDkl5iDLknNtEkgbiO2EzGM/CPqgTvPTTnZvjo9SxqPATqRP5ugiUwAmkwAo8N9
+5hgAaY
gpEjMs47EBO6DqcigZMzgfUhiBmoggZQglkqnvZiNmFTshWhkLS7vItoNhrcvPgjvR0ypx
+i6NnDT
l6EjkB36ss6yPMBTCb7anLkZP+Urj+X7QeCpv3dLNgCh/giLo7eMQRgthIktZBh94UIwbL
+iEsbiI
KUAvtBg0TIg07EIz7Bc2FEM41Io2lMMyjEOOscMvXMMx3Jg+9EP2A4ALQD4HDImLq0HMmw
+Huc7oP
6AEFoIIpGcIQO7z5a7fBo8TjoTqsczc2CjDGQ7wFVLJy6rJ2CTz/sJCg067ymzKnO8J4Sb
+r3uzmY
czb4ez+os6qmw54b+w+r08RM453k6Z0mHL9RBMaE+h3qEcZgLEbnUcZjNMYnfMb0c0ZmnE
+Zp5J5m
jEZodL9fzEZt7MZt9Eb9+yOBYAAMwAAeyCPCaxCNEMBUZMIZuIAeiAEJIAuLIsOOgDyd2x
+2iw5Ae
bD3E/sM8x7PCHfrA/uHHlXCsxAg9ECS9VoQ/iDs7xfNA+wuwX/O8VLQ6LBw35Do9VUs96F
+m9LMTH
ekug3StJkzDJgknJhltJlCTJQjpJlZTJ/nrJkZzJhWlJmiSYm9TJkfTJi+NJoPxJ98pJoU
+TJq8GL
DIwBdGw2WuS7wVLFpSsQBqABH8i7Trwx6vkeqwO9SBRCKNQpYiQKmhPFcno68cOQ+RvAjJ
+w8qQNB
hVG/zus/R6pIbpw8PqtIfsRCfzzGBNS8r2rAA+tFCLTAwjTMw0TMTbuOC8AAH0A192tBrg
+RIiAsA
BigBBaCBKjjANPOuF+SrGES/SJQ/87NBgMHBA2TH/p6rCGeztp+ztqOrRRaJxbaaF3D7ts
+R7PyZs
QcHztpZDoE1EwqaUt89iPSLDCPcaCaKTr+Rktpw7TotBTpsQiejECepcGOZ0zumETu3czu
+fszjJ0
iO9UTjAUz/B8zvM0T+30zvMEz+xUzvXUTnCsgimwAAK4Pv9Ar9HjP995EgYYgRigARM4ER
+ncxpWT
wqILntTcyF5kvf7yRJwLzZ27RVK0RKV7TYX8yqIrJ89yxZWDRYqrvGR7ugaEyKmrxV1M0M
+HkzWW0
Rrts0WT8xmE0y26EUWp00RbVxhrF0XBkwGoMR3CUUR8tUBb90SDV0SJlyKJBiB74gQ10K1
+PUwXYU
/rK58U8YKAETYMCo6ztU+Tt1Gzy4JJYrdJdJnESZG84vbTwlDDcuTb0p1ceGPDpSLFHN40
+3w8bwB
5S2MXBdeLD281J030sohTB16a709vDiftJeTpEnsO1SXZFQldVRDhdRFTdQ7VNRKHUpJvV
+RHjdQ8
3NT+wlRHDdVFPdRRLVVOXVRNnUlMXceIKCAfALDlU8jTkyKZK5oZAAF5VJ934chAhTnJvM
+WzG7rr
OMhyq7yxLJuydD+81EFLbM5OXJe29LK3VMj9W7/Io8sQCcBM7LNwI867ZEa/TDvAtMere8
+DNlJ7u
YTqYS9fwWVfxYdeJ1Ep1jdfhuR54nUh5ddcQ/ttXD4TIfr1X7QFYgX2FgrUUSwEBDLCAW7
+KPg023
gv0LiF0WYSoLS6GCEzg5YZoIg+VYYeLYjoUng6VYkfXYg1Wohw3Zgx3ZlP1YiG3ZjzW2lV
+XZkx1Z
1alYiSWel5XYkD3ZmfVYjaXZU4FZlE3ZZXFZ1dlZmG1Y3gHZhtWnlr3ZkF1ah31ZndDZq3
+VZp1XZ
kqXYkt1akZValv3arPXargVb+9BasyXbpvXatXXbtzVbtYVbsZXbuC1blpVblT1brqVbvA
+3btPVb
wHVau2XbvS1cWNgqxE1cWZgFWrAABXAEI0BcWdgqWbBcyo0FxIWFyU3czc3czZ0FR5iCWn
+iC/tyS
hc1FXeLKrdX9K8yNhdPNLcWt3L/yXNlFXdpN3Nf1XNbVXd71XdftXNnNXdaVXcqFBdjtXN
+V93coF
3ty1XM1dXeTlXemFXuj93Nll3tW93c7N3OFVXNeV3ui1Xs+FXc79XcyFBVtI3/VV3/Zl3+
+idXtZt
Xuw13fqV3/vFX/ud3+WF3/z1X/q13wDm3/4V4NbF3/2dXwQmYAP+3wF2YAYuYADGXgVeYA
+a+hUmY
hAtmgwzO4FsogB9QgDSghAu+4A6eBDa4hRRWYQzuYBK+BRwYgRO4hSbABRRmAxS+hT1Y4V
+u44RP2
4Q3eYB8u4QzGYSK+YRLeYBXm4STeYR7m/mAlXmIoTmEMBuIfBuIjPuESlmIMnmIUFmIW5m
+EVZmIN
dmEcXuIqDuMWvuE1XuEs/mEiFmMpVmIvVmMsVuIsJmE1JmM2HmIWxmMONmM95uMUxuIOtu
+EwPuRE
9uEvXuQkbmQOfmQNpmJIduRItmRLDuJMpuRJlmRG1uRO/uRLDuVQ9mROFmVT1uRS/mJSTu
+VRNmVM
fuVKdmVVduRW3uRVjmVTlrBdljAVAANJWARVyIUaiLWOk7BY42UJO4BTAIMCmIQkEIJTku
+ZkRgpk
puZrrgprPmZk1uZsxuZqnuZwxmZpNmZjPmZZ22VzpuZuRmdZUxJr7mZuLudz5uVp9mZ2/j
+7nd1bn
a7bnbcbndebnjgtnbRbngm7nb0bohFbohWbohnboh4boiJboiaboirZoes7mZd6DH7CARM
+AFIahn
eOZlBDADA3iEAgADD6iBdD5oljZod07nB/BnmV7neG5ngoZpl85pjE5mkebpas5nnZZneC
+Zqni7m
m/bmdC5mc/7nfq7nbObmgAbonRZndP5nfr7npxZpnN7qrNbpoP7qe3bqnSbrsvbqs0Zrex
+5rp17r
gybnlmZruEbqrg7rnG5rugZrsZZrvD7rqEbmAyCDR7CAjl4wISDmqpDpB7DmMvAAMgiEk7
+6FeDiF
A3jnXVZsfYZon05mxb5ppk7qfWbp/oiu7NC+6NI27dNG7dR26Kse54Vm7Z527dZWaK72Z4
+b2a9iW
bZhW69cG5222asSeaoBearRGaIN+adiuagiQ6TJohVuwAI5uBgoAgiaogBtQgTLA7huoAD
+JAAQPY
gwIogEfIhRtgBt4WanceaM3+bNxOarOW6qr2adAGbdWm7/q27/vGanIu6MrWb/3Wbf7u7f
+Qe6ABH
b4Em8P7OasxOcPlmb+T+6Z4+6rGebXbW7LaGcH2+7QcfZ/PO57em5sRW7gcQgkAogMEebG
+feAzDA
BVwAg1uQhwiwAFUogFvIBTNYaa2uadHO8fYm7Zo27tYe7X2WcPwm8iI38iNH8iK//moK7/
+BTYouD
ngcooAcIiHJ6mGceP2u2WHJwnm8cV+pufvIG32V6gAJ7gAAyN3Mh1+01D/PgbumqOIAmQI
+STTgSO
/gGOHmxVSARnnm4hSCrO5uvzVmu3Hmp8ZvCoPm9Bf2qs1vAkd/RHd3S2jmv1NvC8Bmq6Lm
+q+rnS9
rvCQtvTkToE2r+YodwIIsAcoKHW37mtvDvNy9uz8ZvRXl7Ann+8IdwIomIcUuPVcX++F1n
+Kg9nJe
pumqMIN4AAIKiIAIeARll+54MANmMGp1xnAO73FD7+fR/m1gd/PVVnNI9/Zv/3YmX3QsJ3
+dx3/Zy
P/cHp4dSjwcncIJrr4d152V3/m93CGh1CTv1KfcCJ4gHfXACL5Cwdk/1qth3fYDpdS/meq
+D3XXb3
gKcHL0iBdtcHL/CCeKAHg1/3eNBmfwd4f48He4cCr1YSf5/yWNt1CJD4XW73kpc1hNeHi5
+fmW0f1
j09wpB723g525dbmm5/tNTdwbJfrN+908/75bP/seD5qcFf6pVdt/xbrCHd1v55nbHf6/v
+bsIMf5
Al9vrJdmtrgH1kj1iOcC1riHWYcCfAh5Wj9mUqdyVJf5auYHKMgHpHCCfJgLfBj4No/7ub
+CHeqiK
Nj/5W7f7eRB8tGeLd68KJzD8Mj/1d2/zadaHxcf7xMd1CDh5lB/7ueAHs8/8/soH+cPvct
+0GcTEf
dweHcB0/fXJ/8y/3eSB39ZzXdqaX/dkvbWpvdNIv7thm9G+ei3yYB7uHAoOHALTHB3uIci
+go+1CX
+3kA+WRufFOXcgiw+1S3+32AAH1gCy6Yh8zXBycP+bbH9ePnAqTQ8lMK/OzfB5kvfsMneL
+bw/c4v
dVFHinhw/99nCysnc+ZH81NCe98/dSgACH4pIEApOI9LQScp5hnUB+Hhw4EQJUKsCPHBRA
+gDU6R4
gDGixo0VRVoEKZIkyYgUOXIsqbJkSoomNVo8SXOkS5AZc/Ls6fMn0KBChxItavSozpcyWY
+5cmTLk
0qdMYUptObGqxKgkDbZk/sgFwj4oXOJpjFewHkEoXjgWfAmBoUK4KfhBmQdhUUGyCO/RDP
+s1bQov
UPDV49gEHxR6aSE6qZuicb6HjaGQTZEv8ULHkhMCtsjQXsR79vhBaDzvcV2wYslCMEs57b
+6H91J3
bmn7Zk2cVn1qbcpSptClOW+rXKlzN0ykU3cibe78OfTo0o8CT8ocN87cybVXx279unacBZ
+vQrNfW
nth56uchdrL4YUHj6N3LdQ2Brt2069XHX4weSUVh2dWWRvSkZppGCGoEV1pNUISQe/1lNd
+4B2CGI
oFf2rHeZYhIqSGBuxvUWYlPhBWXTRichB1xW2yX1VE+3oZQdcm61OB2O/jnquKOOy0E1on
+W/+ebb
iFoB+SORK9oGInxQQIBYQVFyRmAKIErEIIMQIITEZfoEJiWYTb4FhXsQHIDagE4OZBqaAx
+mYHwTz
vccSevRUqeZNBVVY0oWpXQbmlE5udlptNdKUonffmUgiVdS5tFt33V2FYqIZTVUjjIbyuC
+mnnXo6
3KMuVlpdpDyVuqii4MHWl1hjcuEErPQ4QU9hVDI5kFzzrTkYFJE1eY+ssSq0mF8TIUTEnV
+48JGBp
tL0JEUN2IhTbQ00EutO0EHlBj2LPPuuVrOE6gZaHtDGJnaTZHYqkSVJVuq5N6141qaSGxk
+Qii/Ci
ep1wn/r7L8DR2cui/lONllgTwSEZPC/Cw3UXJT9O0AVFbIJBcc+sCOHTpETxySRnlhD8Gd
+tAs+Gz
jxNEXMbXYk1c9qoTCOVDHkKvhuWYgmw+JOfNEe8DpULnQmAgFD4XJBCbCFocccyDiTnoQB
+LuK5ym
ovr4W9W8qduwU8bdlHW6P/n4bsBlm302qDtRvfWNM6mtW6joyi132/KmBSVXHE0W5cxPz0
+kTlmRC
NNtrgINpV9RQVBgP3oOxZrGUpxkI2tCajVkmenxD2JnClUc+aLP5Ec13ExWWm9+tndsNVX
+JR7Ruj
vjKuyJ3Vlp5I6dwDH0c22r37vmO/a/MbZO5wbyf87rbTDVVb+6in/mxF8Tg/D7UPqbeRet
+g579D2
LTVhzz4p6XPP8xUxSYSG1T/kBfn7eAE+BPrYg8RA+lDf1zzQQ/C+PfdIb4+y5gEa4cSDH+
+Vb3/28
QD2JSE896sve+sA3EA0hSkQKO1XaQhWpsMFuYRh8lIxWFyKrYMo7WfsdClOYow8ST1SpIt
+ULXZiq
GfbHRRs5wJ4U1bWk5FB58qrZCMemQYRxcGtDUhG+zBS74IjNdkJq1/KGGK+q0MthrQNPvJ
+xoQlOx
TYVe/KLACgYp1UEKUVBUiojaZps0zmuMa1Tendw2kx0yzC3Y2dO9TJiQM3ltiHEbIwj/iJ
+spzpCL
lIIR8U7ILyU9/pEo/WoUHb9mRxkGp4QulFUkmyhHVakLd7QCynKIUzdOuo2EvEviIYfCwl
+HVToar
HKUO4yZLTsKQlpSs5Stnmahc2nJqx9MlK33IOkZN8pRXRGKKHpm8Lm4yRrgLHqlupKJaGt
+F4pzQl
IsX2QQtW80ehnBsoi4hKu/ESVcpUFS/L2c1YurKb1KwmLHepy3ei0523/GU7XTSLffKzn/
+78J0AD
KtCBErSgBj0oQhOq0IUytKEOfShEIyrRiVK0oha9KEYzqtGN7hMew/joMDzqUZCCdKQkPS
+lKSxrS
lMLDpCl96UddSlKZwvSlLRXpSnFq048ew6Q0XelJf6pSlPo0/qQtrWlQjwrUpQZVpUKd6U
+2f2lSo
ShWpJT0qTpXq1JxyVadI/SlNwUpUq4aVpWOFaVnPOtOYqnWtU61pWt861J3Kda5sretd3Q
+rXtto1
r2bFK1OHAYDBAkAAhSUsYg2L2MUyNrGHBUAAIhtZAcygsZZdrGIZm1nJElayAYDsZz9LWM
+pW1rCm
fWxjFUvZ0aZWs5dFrWMHa9gZ0PaynJ3sAAbwWQGINrOYZe1mPetZ0ta2s6EV7Wg9W9jivr
+a5hc1t
AHjLW+iCNrrWle51D+vbxr4Ctqz9rWvB+9rtele24bUseclbXtWeN7buvWx6Wyte+b73u/
+a9L37L
217z7le/mvlVr3ojO9jd8lbAiEXuZDlb3duCtrHCHe5wCyzgB0/YwNU98IAljGDIcni3FA
+6tcT0s
3MKOWLICOLFyKXxhBH/4wcYl8XFdzODbmljBIRYthCts48meuMfC1bCLB9zhDCvXwUMOMo
+ZVLOMl
p7jFOqZxiaP84QU/Gco0pnKMm6zlFmMZy1muspStLOYuKznMU2bylsGc5i+DOSAAOw==
EOD
    return ($binary_data);
}

# ===================
# rj_logo_small()
# ===================
# Arguments   : None
# Returns     : Base64 encoded GIF image
# Description : The RiotJournal small logo
#
sub rj_logo_small {
    my $binary_data = <<EOD;
R0lGODlhPQFWAOcAAAIyZgY6bvr6/sre7jZqmramkoqy1l5+ll6SwpqSihJGdnam0t7q8v
+LKnpa6
3kZSdmqaujZiilpuenqCgra+xnKKolZqet6+mlaKuprK4h5Odury9sLGygI2Zn6iwnpifp
+6+3oqa
rnKiws7e7ipOchI2ZqbG4maayq7K4maaztLi8laGqo6ium5efrrS6h4+bvLy8m6ezlZ6mk
+Z2nm52
fkZ6qmKSstbi8qLC4oau1sbS3i5agmqazhY6ai5Gbtre3o6+2kJymkp+rnaSrsLW6lJWdv
+b6/qay
uopqgiZajhZKfj5adn6uys7OzpK22pbG3jZWchI+crLK5n6q1uLq7sba7mqGnr7K2v7+/j
+Zejsqy
lu72+i5SfkZqjqq+ziJWhg5CcjpihmqezluLrk5+ohpGdoq61qqejgo2auLm7n6Spjpuni
+ZShuLu
9rLO5lqKvoa20hpOgmKSxvr+/lZ2mi5ikmKWxk6CspKisvb2+q7G4jZmmpKOhtrm8go6bp
+q+3u7u
7k5metbm8lqOwuzGnC5ekmaWuh5Ogh5Kdr7W6gI2ajJmjrbO5kpymsrW4jJaimaOsubu9p
+pyhgo+
cjpmljpehq62vvbOniZWiqrG4lKGto6y2kp6oiJGbpq63sKuknai0iZCbqKqtl6Osipekj
+5yogY2
aoKu1oKq1kJ2pqbC4lKCpvL2+jpqnh5SghZCcuLq9j5ulnqqxkZmijZafUJypipWgmaWyq
+q6znKi
zo622k5+sr7S6l6OwlKCtmKWykZ2qjJmmsrKylaGuo6muhJCdury+hpKflJ+st7m6iZOgt
+a6lq7K
5kJuonKi0l5ael6Sxnqm0kp6roqy2ubCmj5uoj5ypiJShg4+cpLC2oKGhipajkJminKWuj
+puoubq
7lKGujZKclaKvnKOqi5Wgkp+skJ2qkZ6riJOdho+ciJGdjJilu7y+sra7t7q9rrO5mJyfo
+Jmgk6C
tuLCmg46bipWinZifp6Wim6evjZqniJOghpCbu7KnkZyphY+agAAACH5BAEKAP8ALAAAAA
+A9AVYA
AAj+AFMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGCOe2Mixo8ePIEOKHEmypMmTKFOqXM
+mypcuX
MGOqvEWzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqFZqxqdOnUKNKnUq1qsUTVrNq3cq1q9
+evB2+l
OEnTjlk7t2SqXcu2rdu3cOPGHfvTjpBCh0wFiNPqzdK/gAMLHky4sGHCKcQuHGQtzqQAih
+QBUBSA
FDiwmDNr3sxZIlasCcslASMZgOnJACYF69W5tevXsKuKFRvSTqlDAQCke2Av3oNQp4tZS3
+sSAQZf
u6QBWw6sxi5fGOQQl0u9uvXr2K2PpZuzmpIO9B7+IJHUooiPdB0AdOgQR1pPOW98KS/lbQ
+2BYPiD
EVjjrZTzN78cJuCABBZo4ICJJXjQOd+hUYQkkjyTjinYdGHFAegAEEAS4hz0yyDglGOON/
+jlw581
payxRiv47YGfN+bsMkhsNNZo41SfbUfQCb1cY4qDkiARTgdRcDPEFZH8UMExqQWDAEEfgg
+NMK3u0
Yk0qwEhTjjzDiOOLPOXUYI41+bTYijni/HLjmmy22dBsCXr0izW5hSNJPKGgUQYd72DhJw
+wUdJEb
GLWkZUcvvpiTjzfW1CCPODMKlCNWt/SCwTnV5FPmHqVoYkd2oIYq6qjZbfeZTSlA02A8H7
+yABjr+
B3AACBYCfKMDHmEUM5kS4ECjSSqtrGHNHYOoqWNayCqWVgqD1ODNfcF4M8yB1FZr7bUGJg
+gnQbdo
IlkoH/iABhtqcNBEEzA4YoUCAKDhR26KHJJpPjW8YYekoAX4y7773vILpSf4C441exTsTa
+RuJqyw
jZPqONYvQqT3GxqvWMGBME1wUMEkAOhVyCpB+NFxHKkUm9hs/tohDphj1lLDlghvN4g5wb
+iYysI4
59wZnHBydIsdNazXAxoBHECBMMIcQY7I9ATBBBBPnDJDB5Gdo2a+0MhTSysEFOwitFV6Iw
+0CKA9T
Ss35TEvq2my37fZIpppKk0C3DJKbabTggbT+KLSY0oECEJjxRAaEL0CKacVgkJavqayhqT
+XnlKOJ
JsjVQGaJnV79Czhr6FdKgNiGLvropOuk7ekDiWUHAQGkR8cRwoiyBD0dKFEMPtkQTng2EL
+DbASZg
plJNLdJoMkgv0NjB7y/QDILBLmcH04oQT96CwDklsqbz9txn1fD3AfeCSW5chHDEAY+Rcg
+dfTOhO
OBArtO5HEmucI88gCPwbsGIBj3UCAm+Qxn3ysQs13eINnQuGPIylECe4oB0QjGAEpeCJaB
+xkGBF4
hAb7oZAY5AAEzJCgC1QxDWckBAQSTKEETZAQJ0SQCDnggUJygANmECGCvMDBJnKhEB7k4I
+b+EHTC
QR4IQRNYUCAxqIIKIVgFF5hgCjIkSC4cIMFEoCIhf0gEBF0gxB6eIoKMWABDcADGK4bldD
+1bFkfu
8B16zOIAJOiAKzBwghnEgQxwcF8GzBCL9UxiD+KgDWjoFqfEnIB58mCRNQKZAgRIo2bA+B
+RJmMEO
P1nykltgABE8sYCOpGAXoSiBKLMQkhg4gREqaMMGLsmKNqjgHQ7IBUgScclaXrIdImGGJY
+3gCTGA
JAa6kMIIIsGOOewyEirghRNywQOQiOEPArCkCUCySj+14xQciYEtL2mESLQDBVDkiDP0cE
+kBoAAU
IXkHDPwUiWmOZAFSsCQrnBADkhDBkpH+0EVI4tawk/nvBLHQVRReoQgF1MAQJ7DDIq5hAy
+C47wlM
+IIpFOGKOxhrOnHb1iHLkY89CAEa/hrGi0DKkxOgwBjbvOQcYKEHUNTkk/sQZQkekZNTZE
+IQrEip
n/KQDClM4yYpoKVOLdmOnaBglw7gwU14EA1VCMIIQ8VCHxgRw5ucgAd/gKqfVJETlFoTFX
+OLgTGj
yg4XoEKpKViALi/JACcoFagu2AI7ubqTE+SAAZeUgkt3woMq4HMTOUEj6pRVEwTUARvr8Q
+MpBDmG
L0QAH4NznyGUMBlSKE6jyhrIRmiCgFRE6zKN7NwetKcQZlQzqm3AgRjoJo0XyPQRBsn+AS
+8qGVU/
GWEE9EwdL2qLhREkJBPydMBqByIGVLwjp7zt7R9Awa0YeEKrWMjEQU47ghxIKhfJNQIjLH
+gLUBy1
lok4IpQYgVxjSDchMcBBHtg6DYWc4J5+akMXC/I9fn6mIxjAhN+wEYyEEkcI14gFEyKrO0
+7oahL5
gAal+CdIBZ3MF8+6g1ig4dk9QEMhNKGkPCPBYWJCVwAqmIJAeOALLpRBHeqgREGmUAXkyt
+MYHN4A
K8b61yiegBkdNkY0/SQAGEcCFi44CFbWigVeDlcgU3ABdG3r40iwYseWbIMnYqDZZ0L5vA
+XxKhYG
YN3EaHOXTY7EkiPxB1+CIp61hMX+H6JIEPL6aQMsTMgpBmBLHFAZIX3F53xTJ9ieSUpHGx
+GCK9Tj
ig7hKwhs4IRD3QeEReRGAalgoJ+XRRuBIKAWwbDaLeQgDRchAG4pQEE1WVEFXZhaFyYYAW
+2xEAkc
jFgOyIi1NN7wz1xUYb1+msMW3MGIP5jaE1K4wRZoPAcVRKOZKZjCqUGA1/iawNROQAVIEg
+PcnSaV
I9FQMisFwQsQmBoEblDBsC/JZWTfggfPleZHbnHaa/bPGTQegbd/zQu5WpIRzujud2tJhG
+h48hbv
sHc7RYJuLVuyuiFJC3yx0AZ9eoSf/JzbfQOW0FKAAQCKDRDFFcqGMRCYcLJIgin+AHAIX2
+wkowoa
pFikQS8F/6Ic+OlFXYdMW3ZIgW4byQURtCqAKtDtFtDohRyGXhMe6OHDfQBBvjWbghg4QA
+U0xgK+
Ty6pKajAkjfo8v5wMhYi8/KtPEDBqleqClnuyJSCiLoLzH6CGEDTknR9aQq03A4ztv2SRB
+AxbXjg
AOiOYBonOPM2t6CHt4LmuHPVyQmyvU0jgOBkqEpBnv30DcCiimeC/fnlU7WH9PihFIZMyx
+iSgAkP
6DEDNojDZL5w4f45eLPEGUsizfEkO4CjZhdWyC9E7actuGFuNDmBJ2BhSVjMDZQyzcKIpx
+D16lJa
jUqdwsL9tIm3zi0aN7BkH3L+sKyE3KLaWGBFmQXihD5csg8LsD5tahKDdtB4A1wdC7qhi2
+VJsfvg
OdisMy7Ji2hU+qrEx05/kALOsG/hN1YDcETLwgj2Zl4IcQubcHV+4g6X9A7MRV8KF2V7Bn
+HggxCg
IQ9fIBlgkCZxIgTbEAF59FBkcHHYUAf25z8OFnxjAQ7VQHuJgQH4kXsGMTcpoGFYwA5uwC
+0pkAPZ
F18DsQvq8FpIpArxtgli0H2Uth050A6XFF58ZnVYx32KQV+fQWSsIFwbgQL2xmpTMEj+NB
+A8EANp
Z0lVYEEnYGWWVH8DoWVcRhtf5idEYEaCVAU7pmaBh2Z4GAl+wgpB9meIhwX+cIYQMQCIrI
+ADFOgn
DOAAeOZX7LRnmHeJfzZIoOEv8lAH7AIAcTAIC2YbrjADueM+TLAGkKEAwFBIUahytzAw5y
+BzdqAJ
NfNp0/YwvPeDUkB1ApEDEogFsMBa6ZB8Y5ELgmBJ7KBa/LNgdPGGDqBlkZB/J7d4RYgFgq
+B1H6Et
4Pd1Ted+fmJebOaLOOdDgugnfeAEaTF/6uYzAdNueghvlsQLZTgbV1UFWiVlBGiATjAAY9
+UHm+BP
DMhO7vRwOTACypgLOIBcAiAF9eSOGRhfDleNHMiBm9U/vzAM5QAO5sAxAVAIT0Jxg7AG6D
+AKpycC
daAeSkBHqKNykiIPa1D+DmoiB7sQDNUgHTjhiz64BVIQe1iBA15lBAMgFjyADEkoSrCVAt
+EAXVxG
SDtCSLcQDZSIBXPgVs+IhX4iCNhkOl24S57AAz5kfllZhlQ3cfgSAyqwY+yAAmMBh1sldw
+KhZSOA
TWNxh1jQf9uRFjFwjti4CX94STngBI9oBLxgiMgVCXFXE1iRCUE5AifgDKumApa3hZI3lZ
+X3Uph4
iUBFG4MgD5rwIfkgGZNgDa23EcNACmwgC3oEBKmnIay3hbBHkSmQSEKwEb+APeaggzt4SL
+sIhCcT
MBGoVezACCMmDcWIlLdgSpfUUicng5RCSAp5SZngUgOBfVmIYdQmT2X+dgKqcI5GQATqt3
+7BZxOM
mWu8sI7p5idYRnH3Z03clxj7Z0lWlCMLwAjQlXf7eEnTEAP2SSuwIERiMZBY4IAFcQu5kA
+hjxQ6e
IBYjoJbriSzvpYFMV1/9RF8pQJPyIAcp8AsY4ArpoQRC8CmGcgfoQAn4kILZwASjoHoaYl
+HP+XOn
cgLl4A3ykBgUFgwyuYOU6YN5MAJ/8AeegANucAO4JlUBKXnScJQloHygoAqX5AmGhHOFZC
+rTcElu
4H/+g5XY2GVcaCpeeG1SYG+sEITcQpkF4QB86XNv+HbqeRB0dwqSYpcqkAmeAAI1VAVjyA
+6qUE+C
Z0kxZABFKJT1lAL+h5iIBuEJzTYHfYBOKWAC9iYA7SBiBTF5rNZFmZl5migQHHo/m/UGwc
+AxAJAE
4DAdneUHOzADK7ACIBMBtAAFimAKrYAWzwmLGzomjIQA3rAHirONz7h71aRrbRCsGwBlA8
+oMT0gT
yOBayJkL4IcFkogv/kRxC5YDecVc/WOdfnID2LSNPNONvZQCbkBbG6AHoEGOUeo/utAGbI
+ie0OVO
ENqeW/aetyCPthUJbQALkUCsc0AEdFmA+tl2jjqIX5kCAjpwniQGiYBrrJAIhjQFAchwOM
+CeFLdw
DUeRFGpf7Mks5zAMAbKhu8AiHhkMg0AcdTMJnQAFULAEKksDCaD+DepRCCD1Z04ZMG9APA
+p2QB1F
UjZhrj44VMZAj6mDDGVgjOl1SSDwhBbaklVqSVcqSFqadYE1KV53bWLXe4xQlv8ErTThBH
+yJS2sK
ZfGXZUSVf3XJW3kgmc30l346FlOYazcACjxwiIi5s7eACmKJBVvgAtOQAzlgAA+bB0RgQg
+RBqZfZ
Z4a7ebcgD/KQexxaCiGaBLlRDNXwL2mxohZQAJj7CfNwCYRwBqtXmsGXIwJxB6UwDFjxC7
+ZoDfcS
FhTnqzqla30gBZKaGDzQWq+VnE5Qrb+Zl4SEFc4lnTyUINgqVVxaoNwoT710CyBwjj1nfd
+yRLDyo
Cl41B4nArnH++IzIcloDcAqzEZ861U1VkANigFb+akk/dVU44J1HK6AESkgnZUkCAAuCIA
+h9cAPG
QGPb964RGl9CdLH1tSM8Ig0juxHNUgpycAJvEAet0x4c0QtxIAEX0ACXMMETXAC5oQRkkz
+pqlBa/
UAvmsKvQwHIFVKBm2oOrJgBR5w6y64vImoQAsKRIRmOCUH1RWmlxw2LwG0P39bTFm4leil
+TjawCP
iAXu0F5nKGRi0A47hphtyabR5aZEBadlC7/Emge8IL7VqLZ+0l4BMwVCxXBJhlyGGqcjEH
+VDxQ7M
MKlTGQnqeLiZJ7MpIAQYcC8BA2HgwBHS8ImY0CEnMAh+MAH+1HAJDSDBE6wFcYQNM2LDZ4
+gBpeAL
nOkNCcarEuu6PzgACHlv9Sh3tRtKSJkYoHC3WIACZidxsUcTPKALY8gA+Qcnw5uN64ZG4M
+cKX/kL
znDJRVYFyCaE+OJDpyUIumC9fmIC+guvzgefNDYAAwBdbaB3wJeffipIm7Bq70AEAleQYw
+GUyQWJ
6AShFKsLFUmhF7k4uSmStVALHZtQBDAJHfCRcmAXpnAGhEDBg9wAWgAFpiGKLskdHiyKNK
+EJnJKT
ZjgQPsgO76ALLsYOIHBnGiwNnDxTSIQDbPWsx6Igt0CEl8QI1pqlwZiNQPU9XldmacEMWr
+YBTmCW
HGFIC9D+BzQWuE0MZW6g0HM4tp9hl4ngCXRmW+1wZ/fVp1sMGjzArJa0BTdwmHRFcfiYzY
+j4eGho
mW18qZqpLeXAsZq6C4sErYNACo+2BoOwA52wuRNMyJewDBKQHo4cug4jDtYADsYyCOewBr
+7wgJO8
ixvw0s0aiXwmQ8hwnDAsFrmgZQKQdIOaWRuhC8koT1LMyteYdQPhDNPgBI5NT2KxiMElQ3
+VrywIQ
CSBgfVt3C2IQDclAYwzgCf3TdtDVDqscMDwAAi7mAks3r/yHCp7Al0aQCbIEJ+XrJ9wnrT
+kg25ZE
oGIxBXx52Tcw3MQ93GMIYhLbzd9ckX8GNBnMLFgiogT+4QtfoB4K4InaEM8U/NXzMAGmUQ
+MGtMEb
YQ20tyziwCgaWqYIMdCMwFSFTZV56JS3YJRKCBpZBb+RQASb4AzlmgKokAl9sGRSwN+mcg
+I8LCnR
4AaRAGPGYGcVfdPhZwBxigPqakkbUAUOILgC0dk4cANQlgcuIEbSKttAmwLFJdvSNdNVOA
+WgwAzQ
xQ5Y7D88jQU/RRDOANG2ZKgbkQkuJggOMAVAHuRTEA2ZwJeRMLuU+p9Ojama+gbyQBsv1y
+kaHDB2
YA6q5wdg0AlaMM/yfAnUkADr4Q0KpsEbWg7VQIIXugveUA6SrL+UbHMm7gRaNqYaThO228
+m0W4Au
Fn7+sDACjKAHKJAJRCAIw2pJczACUIR5rUyN80pkrMYLjDACLhYJzJQgoKAHBscKfc4IKI
+ACUpAI
fXC/t6TDcKJtgzgCUoACLtBs6AigxjyPUyAGOTCVWBBitm2A1iWtixeM+DRNkhcDDLBjAs
+AIubA8
/cIDOMxjLtBMERl+RMAMegDtzJAJOCBiFAqhcjCLNTEz5iBzfCYWI4kN6uEPNHAPF8APg0
+zBhFAA
prEOophyB+QNvkC5JyAO1VAKI7uzAU0QO8kMROkG0PUNDi55862kNAV59TmGQb3g7ECstI
+Jw9qWl
HC1/TqDwW7AFUGYELtCcWBENUmBwfsIODL9kRab+Arqg0w1b4bkGA8aw50bADCak4vPob8
+51WgLg
Am6oxTSueU3nCXvOaqqwEaYEXe7gANu4ETzg4vgkuJSqa8awAU8PYyPgAJeqLdBQAzriC9
+WQo/WF
gxyzzlAADwmgBdpdyOqRBPicl9dTA2ghEHbhDXcA124u10GYFtHQDlo1BzfgzcWprDAss9
+GgB21g
xillDIkAeFApvIldvPXp8Gx1RZS5eHowxFHFCrywCTHAgz+nCiq/TZBKtt1bhVd0AswKXc
+agCkt3
21iQ23zmDP54SeZFEzFgy3cpXpoVfAZgy3MwZc2eUpEApf67oeIQ9w9zDqVLcULoL/58Dc
+WQHgD+
QAISwAefcAHU8Aku2wGH4Bc50gsiws+HNDDdTsKlVXNk2kybMMSAy1wtXN9OCQogMAAbQP
+hBfQN6
MAX/V+A8jPzITgQ/X2TugAIAcSLFCYICU6TI9WdEJCwNHT5k5c5NNB4HT9wiaDGGCUFGHj
+rcUMUA
D4ElYzxMNOVWilvRBjwc4YQkKCkPpx3ESZDHJnYPjZk4OIWVQ3aeChbEeTAXszkOBTlLwa
+PKR6pt
QKzEylIrTgS+BmE8McicOQQHb2HEqJWgHQxrvigIAADAvkB87lkwJVcBOLO3oIGzNujiQT
+nnSskb
eNQi2ouNb+FgwIoVg0xIT0hps4XVFndXedz+QqauxIsXEVZmPJ0imol2fdpI1mzM3QApum
+IIPKs1
a7R2klkNOIUV7AJGgiJt2cKuTTtPMdCyPJuRxwIcI9xFYqd5i2wVbmQmHrxy4MoYTly4Mw
+YbliBV
0QhmveUsPSsYjKLhFJPjuGRjzBakcMYE31gJ7qjTTiBiPhgEwSGFGDzRTLJEgjurQvEGc6
+IP+pKb
YiAXBkQOOdhucGAgE0saDyNodrkII3CqkaYss7YarKBb7BAiCSUm6QAAP/zxQy4AAgBHPD
+vkMafI
8X7xBUZoLAQrKSkHmiYTNxjJZJPUTgBFFTe+ZAQolt5ohhIzpalwsahWcgYVJ678Eodpcn
+n+L6cT
E8sFBDBBWMCgNFOYAgQpGEHBgftwEg/RwQbKwQE9rgwzB2eQsjMt3U6IIQccrmRmk1ySQv
+GWGL68
0olcshLDEykgVQUVTKchlZEF/mxRNSuvNCEHhPQEM4cYpqxzpWg8gZSRHEhyIFZGlgWTEV
+WC0y1a
nOQAx6AUhPAGMRRLMojbozQJ5pgAegSAXADuGOhIYDSxNgUEUklFsClZcqzeaFFL67M/ce
+JB30RN
zGq8ihQNGLVo/93KopxWGhgs3EDNbcbU6A0Yun8j7svPjBqTdqtbBsYtrQpRazepggc2K2
+REUTZ5
S0XDQ1RasFzeNqOcBDKnlGEslZjiFI/+kmOGL+LqgFxroIGmHHPeWOwEO87JFmGM57W2ZJ
+4RTfTj
KXmu2uKD1boTtxbFi87ES20uWzE1zZ5RYowb63ZRrxO+MLGCGbPTZIvLzlvhgvva8qh2H5
+YyZPig
Y/vwgGfGTY5avMEAOo5TE248wREAN0i5SsGgBmkEey6FXVopxw7wbK6XseiEi5JevROOGW
+C7Oe66
69wOh53sAwEmO2XWUa8RbRQtCnbt4f0WuWO2Cwdv6pfrLL7biXmHUs3dW5+35Y3DNrtyd6
+0xZ5Ce
x1M4MTV/+eWEX/4qxRVFMCEdgV/UukUcb84ZxA4obc6+74mxxxrdIrYo3VGqeXaq2en+zD
+c3jW1N
SqEbm9m8BSrXUSxuckMgvcT2nJkhDHiGW8ziyDdBhBEvKy16mMNOp7av4c6Dg7BGLZiWwO
+UFsIEn
+AswsiWH+RlkfdZIxRuuRrDU+c58fLNQ9qaWwrURjEZMrFjK+oZBFf6rVuOzXMX2hTis+a
+l5xZNi
olRmMZKVDIvmI2DWaoi44yXvQi4cIfeGx62D9AJ88uoZY1DYxDul4Bf5o5G7zNEKTczvgS
+W8Wd+k
eMjYPbBryFMc2LZFsYilTWKUSpsBF9UuNe4LbibEWu/axq27cax8MdsfBYknLT/lxlsGlB
+3z0gSf
6UXyhJPDyCBKUQpx4I1yXOQaCKH+J7Zf9MIcawCHHFYovdSh8HcNjF0Jqzi7tNSuUpHMXV
+/QCEwj
jixuB7rhzWBGvj4iD4qqBFbzEOmw4J1QTbaD0hvVIjYzzis6k8Sn91YCwzX0kkZ1W2B4eD
+bLsp1l
EOfIR+nGlqZ6pnNGGoPl7UK5tgLyz0YZpKNi0DbARb7OiSma2AQrpTFLXZR59LQgVt7jwQ
+syUKL0
O5HBgAWzPap0Y4Ljny2Vp7AT9KIU+dBWQO35v+MNLiw1aMU5oAE7vzWTbMGTHOBU2DIHyt
+Nk4zQY
7hQ1xYshxYoYq5hjBHgxsnrRRmB0nRiBeU8N2hN2G9NdIxnZRiaST4Q1kmNMF3j+EGjUIh
+hCmB98
4MY3DBZ1Rn+UxhrOIYd1InKVp+xoANuWuEdSr4V5RUslq3nJjb5yYZDt5NtaVyfATbZuYL
+QXZHVj
ocEl8m9ewyn/YknBWa42cZcVrOTQYo49yPBhKXyqa10J1VsMQhreqIEcbqo2pzqTjNBsW0
+nf41Vq
GhaeX8smG0MlSg6y1W7gkWLVUHta2rrxrdnzlvNSdtHovfOa1bPrEWXbP7biM2yVRBS28s
+EicsbN
egO9XXR+gYFjlsOQC3Vl/9BJ1IiGjozkrKh45YZPz24UoENkKgQZylPZis13FyxhqEjGwZ
+UWrqW0
eulpAkc4E5+woBp8JQt1qtX+fvUrKinAQCmCEb6D2NjG/KrICWwskIqwrCKaqEa2omKQGj
+c5Kk12
8sBqfOMpP7nIQjaylItMZS1D2cdednKPtzzlIPt4yUJOypSrBuYhSxnLWybylbG8ZCjfGM
+hajrOc
1exlIIMqymImiZWrDOgei5nLYLYImxVtBMkwutF5SEY3gtEKD0SC0XmQTB40jWlWMNoIl2
+70pzv9
6WR4oBaQeMeA8vBpVkdoQK/2DadZseoBOTrTvhG1rVmN60bPWtSw9jWwhS3rUNu617C2Na
+aNQOtQ
u3rWmSZ2rzXt6VczG9jWpja1R31raL9616Hu9LEdLWtrV1vboqY1qIfNaSP+bKHd73Z3vO
+HNClvs
YAf1Jse9722LQuyhFUGAQr3rve8dkMMWB0e4vfctcFt0QRrVsEUZlGFwchjcFphIuC0qXn
+CO5zvf
HB/4vS0u8ooLPN8I1/jJM65xfaM85S4/uL093nGPl7zgA4e5vWNucJArXOMIVzm+GW7xlM
+/85wuv
eNITfvOOixzoMEc5z5Fuc5TfXOBIF7rSQ65wq+ub6FjX+sFtvm+K/7zsZ9+BkNQuJHqwgR
+IRWIc+
0ECuoqndXGuXiyn8wYZC7OAYUehR4PFerrsP3vDlGnzd5VL4xR+e8IKH/OEDr3jFC0nwdm
+e83RNv
+cdrfu3mKhrdOf95xDf+PvOcD33lJV96y6ve8az/fN0hX/jI1x72jbe83jGxh2DUQRlRiL
+3nhRSA
VxxiG4VgQzHQoPnT2170d++AIloffcO7HvGgJ/3lUX990ldf+LevvPa5D3rVlx/7o9e+6D
+G/+PCv
vvnsHz3erV/69HOf/q+XP+u1bwoFbCMYvdeRKJg7uZA+Rbg7PygGBXCF47MFRPAHUwg9tT
+PA1MO/
zYu/tTNA/Ws/+ju926vA6eu+EDQ9EPxA7GO8DtS/8YM//ItA+FM/6cs/76O75/tAFXQ+5r
+M/AJA+
P9gHWwgG3suCJLiGMgADbKAHP0BCbAADBVCCQ8CEQiiEbdAHbCgBFNz+vNqbPejrvhMUPv
+FzPNmz
Py0kPPlTvyyMwe/LvgtMPBq0wjW0QNzLQTjEvNQzQTT8wjZMw8ErQB1UhChwhUL4v//rO0
+xgA2VQ
BjawhXoghWBYh0KwBX14heXLw+CrQTscQzlUw9i7QRmkPNoDPxTMPBOsu4aAPVzAAhkAAF
+OUAcrL
RO1rCFB8vPmbRPZjPFI8w7WTASzwAgDIxV10vRsUPFu8wMwzhTL4guOrA97bA977v3Wog7
+4bwijI
iwzUwvezvTgMvxYkw/w7v+3zxMizRDkUw9bbPm+0PGEkPFOkAwDwAixYR9ijQdzrEVvsxG
+7kRu+7
xNsjxfl7PjrAAlz+6AB/BEh5rMFXTMHMg0G5eAVEuIYkIAVS2AaIFEJEeIUSGEbzo8BKFM
+fqS78N
nMHV00gSzEReXEdEoAM6SD8NkIF3FJKTNEkAoEchaUdUDAM6QIRKoIMwEBKTZEkAqMlK4L
+6VpDsN
cEm1O8mdlIEw6ACTrIQwCANEkAGgXElEKDyc1EmcRASYxIIRJDycREVyEUgAYEq1M8mvRD
+yhrISo
DDx/dMesBEfES8jOm8UMlECNdD4zVEP1+746rEAwvDwxtD5WvL6GIIaHeMel1IGHIAYhaY
+g02Mp9
tDx1TEV3ZEvCYwEsoIJyoQMqcIg0YElhvEyH8AINkAthDEt/5Ez+XEBNx2wIlJQLOmBNXW
+xHlBRG
wauE2PTM1/xHAAhLsUxMh2ABxsSC39xNrWxNLgy8PbzF5cTBbQxJD8zHULzDTbzCTpzFfD
+ROKsAF
zsQCoAQAx0wDLzBFLFjMDmgI7dRKvJtNdjxFAODMd+TMcQCASmgIHcCF36yEedzKyfzH8d
+SBcnnF
HjnN+hwHtgxP1pSLMDjP+3SIdUTHckGEBeXOVcxFXOBFXewRx9TOdsQCFtDPf/xNlBxPXA
+DKcTy8
hJw9RUDRMaxGGVRBbCQ/WQzMFMTBb4xD6NzI0WsIgOwRU/zPcRhOt4xQLCDNhlBK89xPxV
+PHDljS
y7TQCGiIrEz+zPIEACD9T63sAAVNAw0omjJwTFQ0zX8MSMzUTSxwS85cRVMcSN5sTSxdO1
+PcxXIh
Bi8IToEcUwu10qwUyyjVSvkEgMK0UDd9y73ETpCkxTnUxko00fWLUfRbwTcMyUSFTv0sA8
+TTAFJs
R/vEhU11TAfdTzdtvPVc0iEFACctzf7c1PHUT/asALUDUgulxwplUwu908WTzIYoA3NJTE
+/9S1zN
i7sbUAv1UfHcVDQV1N6szYOcw3skx3B0v/HDS0zUy2EsRxa8RsA8wTIczE891e+kijalx2
+SdzHWU
TABIzArgzPxU0G/dT1IsVwgMS8i0Uzu90EBlT0+lxZlEUvv+a4i8wLtgdU92xVfdHEiDbF
+EwZE5n
9cJHtUs3xMSHXdZrrM6PbM5mVbuGkM8esdLJ1IGTpIOVlAEuDVdu7VF37IDZFFAs0FDhJI
+aVPEmh
TM+NXbzEHAIk1ckq3c3elFW5UMUOSEw/BYAyANdPJZefFZIwkAFUlFVZ9VGQ/Vg6KFIsWM
+vifFAc
7cLr08bJg0cc3UTxy0YZRc68vFGJhdgclUPgpIPQlM91JYaPTcw0OFVyCVC1E1V3FBLuzN
+g/VdkC
HQLOXMz0LAPO7Fg6SEwqqNTE7FggFdPepNd7xdkOpYNxYE3a5Fa5yEXIVVwPndfdXFcWOM
+m37VaC
1c9BpVb+WRTBRKVDPLzF5uvI86NYSLXLX3zDxnwIHh3ThzDc0E1P7pPMctVbM2288XQIWt
+XKvECE
2FRZPV3X2u2AXrRcMeVZu2VPh6CCXQVVxbvc4SXYWX1e3C2DvDBYZCXaapXLii1U1TVHrZ
+28RZ1W
s11YjnxRbHVONiwaUhyHTb3ZnbxfXADaVBxIJiVeIblfoBzguisDLxgH7asEYsDfi+XWIR
+DP/vVJ
Bh6HMEDg+fSCCuiRSuBfxLvf/LVgLyAGRBgHL9BJXPBFzUMEFmjgBO3gMOBfciHhTe3fTT
+1aBO4R
8fxLrJ3UL3xW54xUh+1hyfPLG2U+6zTfQhVO6TQ9U/D+14dtVNZ74mq9PMTNvoz0Ydoz3Y
+TtvNlL
wx751Rc1VEPNQlHcWmuMX3iMUdZlVvAbWzEu263Ny5g8WJHEzg3MO668P7trTQi0x+tEvz
++2WM+r
vx22Whcl3Y3c4ouEPjp8zkUlxyjeY9NFXzL0xOWE2UMtQfKNY2W9vJDty2ycZNhtTlZEX2
+A0Yhe1
Yz0+34bFQqxlXyi+WtUt4ml93WalXy4UwUm0QlM+ZPhdXU4OxdQl31OuZBu8vmRQ5mVm5m
+Z25meG
5miW5mmm5mq25mvG5mzW5m3m5m725m8G52w2gBwg5xwY53Eu53JG53Rm53ZWZ3N2ZwNYZ3
+emZ3Ke
53Tjvud6pmd5Pmd47ud9JudpWOd8hmd2Juh3bueBNmd51meDZuiChmiDfueDxmd+pmiJru
+iLbmh1
Zuh+fuiJ9ueQ/md91pt1UjAFKxgDMaSTdquWBi/iuanluQX0uSwlMouVNukHQmmXXgn0We
+mZIiU7
sAMPY6pGCqvYugif/umYviqvommWPukbGWrGEOr0ai6tyh6Q6RbJmS/xmiqc0iugxil2uq
+flEpyX
RmsJYieMAhikZhuvAmt2Sq+yjrHlemukButVihK3tgzwMhBYUqDTUaGzNqH9+Wu8ZmvLAW
+y2zmtQ
CQgAOw==
EOD
    return ($binary_data);
}

# ===================
# rj_icon()
# ===================
# Arguments   : None
# Returns     : Base64 encoded GIF image
# Description : The RiotJournal icon, displayed on all Tk
#               dialogs
#
sub rj_icon {
    my $binary_data = <<EOD;
R0lGODlhIAAgAOcAAAIiTrNdAgY+a1KmzppQEKzO87KonRKCsiU+X7ZyshgmOrqabnpKQi
+dafEkK
UZ5qQqp1Wm5ajo7W/i40PAdSgK58Ok5igs5fAqWCWzUiGeqqYnLK4iV1pQJucs7OzrVlNk
+qOhnik
yvaEgJKKfmZGamwCQLdnDKKCqrp2Vlubyjhegrp+zgRcinI6an5ekmUDW0wkErJlLYm+7N
+7Kvpp6
Tk1CQJ2jk+T4/q/C5jhmlUtqkuPGpKJqEs2CV1yErB5iVnmDndiNgNFmCX52rrq+umxmWl
+5mcsNm
AneQuMZ6IkYqIi5jjGI0QmsWcCpIZl4WQrmchcV0Bd6VSYa33y1zpxtEbmIDgwhqmFuOt4
+ZuVp5i
TUWHtJy22I2r0eZ+akJKUlJ2mZJyNAM4XuZoAnK66GYfZ3oCYsheAua2tppqnvbRt92Va4
+2atcNp
Hl52fsyqjmMbQF0EcClTeRRjkI3F856KyMBtLSllndmeftRsKgp2poJOfhhUfmKbvbaCxj
+l1psJt
B8KSvrB1R24UOfSYYNR0EWGj04KWpmePtdLOyrC6wlkEWxtaiQw4YJ+Yk2xyjDptogNkk4
+pekoGi
zSJumqTd/k6FsGQEbsZ0QuaISPmtd3xiThNFbU5WWsqa2CVclN6gZuTd087i/lt8oIaWqn
+QEXHoi
UvCOaFcWaI6GyvSRgTVTe69pH5vF7mmDrm+n0wItWP7GmkNpjTlhjwJun6ZqFj4iQsKwoI
+ZaOgVF
cFQOYLbK6pfS/tSHQE6Rv0J0nv7itrVaFt+NWbaWqt5qAjtslcprBs3Ft3Wbw26w3NJtBE
+aWxrdu
CnoOesF9NsRlEUZehhYqTs5iIspyJpqetkIuGqB1pWIyamYKWr6GWp5irxtjkNKWaurSuG
+yXvxZ+
hhZqlp9jL86emsfV7eOme71vPjBejFZTXU1xm4Koy662unwSVOGJbG4DXy5soTBlmhZxn6
+LQ/aF2
Mk96qFl0lmp6rg5lksddF8J2HAVdmNdeBho2WEZWekJfgoo6hj44PCH+FUNyZWF0ZWQgd2
+l0aCBU
aGUgR0lNUAAsAAAAACAAIAAACP4AaeXLd0dOFTkAYN3JBQ8eCz2RtrkrVkzWrFk5ILlj9O
+fOO0gq
Hs7hVGWfHDecxMyxx+IKhStU7uSY5y1dOm99/myhsGWJnHn5OFCApYINPQSy5OSiAK4hiy
+190iFD
RM+Hj3lYXvX5NAudnHwU+JibtM+CqBvxxPBhRAEEmWSvEPkYNcoHFm9YfllClkOHjnyMAP
+jYBwTH
DUU+BIjJRUfrvF9LZIGhp2PVzBBYECHqB41SLgGzjOAYx88JPRlYAFj6w6eYjxDpJiFDZr
+OYHERg
kNCzwIKSAFij+UWbhCMerxywivWhM+WmZiTIRoXwpmISOiTQ4FGYI8YHGATI+v7Fa9VqCq
+dZyH4V
M2dORQ6KIXyk6+cDERIdkezZywWrCiK880jASyWv9GcORZDI4Y457yyBiCXpyNEFIjrQwg
+ILHHyW
1St/+FKJDJUUI4Ac67kDyR+QFLOEJf+pkI4r6NASyRX2UCAGIymkYMg2ZHzYigqwLNHAHe
+584tES
OYSACHqjzMPCAWBRYggsf+iYwh8yxFNAF07IMYtGRqbYAG3oYYFOJDLmQ0YKuYjhiyGGWP
+JLAQXs
Mso+VUDy0R13yNKAN12sMtsstFBgzzLJ5GIJBQK8YkkI6IxCDRukILDPLJ+4c8eBKhySTn
+WTmDOj
PRLw4Q5qsHyiJCIWAEGNIv6H7CMLg5BA0lUXrugw4SxXXDGAL3xYIgMfdwDwizeHPBLKMY
+l4EM0q
s3y0xCyjFNAPPV2go0IH32xgjzu8/LENBYxi4YYN3aihxgwTfAGJkRzcQYc3VaQTqA4/gN
+CHHL+E
ICRrYiDQyTHA7DBDNzV84YQsv9w2yW5sANGJEY50Y8AIHhBhgw0j2OBIDRnQcEwoJBdxzj
+E2GGBA
KLcssMMOUIgDBQrkaIHBGzSEIU8F4TygBQMwVFOEIor8U0MWuDwQSzbhQIAH04KEk0kmH0
+gBSi08
MBOMMkIEU44WuFQzgQL/KAEBJpr08oEdoKxRjh12fFDIM20II4UJRwgxhv4+fOdBgCA0FA
+EyDDFo
AkowwfSgiTPBtBHMMyYEYIcwwthhjDJ8762PNHawIs8DPBAASi+AAGJ1L8ywAsgRxpiQhB
+2ZsOO4
NMToM8YFZxSyuglRAGICPvgEgI8GoDDDTBRHcA1IAM70EEQwqgNiDOvGGBOFMXwrU4gJMT
+ijgTBR
mNAG1xcIIcQzwazBDQQVZF0664VcT8wYZzTeCzfkvP64EBdcYAzdWuAGBjAQBhpkTRr3SC
+D6zvCM
aQhCEHgARQw+8IEzSANyz7CDF7wQBHEM4xZQWEDb2CGCEqpCFepDgTjUgIYgrCEIp4jhKd
+ghjDWs
wxRl0EUaSAAFJjDhCY/YWMc6SlGCQTxhD54IRAscAAdUDOKJUBwEHBZBRVQ4wA+SsEYa9p
+DDRTTB
H9rwgye0gQpdlAEVi8DGC16QRmzoAhtepGITFpGANLjABUNIRR3qcAJrkNEBi1jjC9rxgj
+jEYRGX
GOQL4HiJZqzRAdeIABCQ4Ip6PIIEtnAANi7RjlKUwgztiIMVRmnIdrQjIAA7
EOD
    return ($binary_data);
}

Comment on RiotJournal - Graphical LiveJournal Client
Download Code
Replies are listed 'Best First'.
Re: RiotJournal - Graphical LiveJournal Client
by Anonymous Monk on Nov 26, 2003 at 04:43 UTC
    use User; (use User; my $APP_CONFIG  = User->Home().'/..riotjournal.rc';)

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://309984]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (10)
As of 2015-07-30 08:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (270 votes), past polls