delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-developers/2000/01/08/14:01:52

Mailing-List: contact cygwin-developers-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-developers-subscribe AT sourceware DOT cygnus DOT com>
List-Archive: <http://sourceware.cygnus.com/ml/cygwin-developers/>
List-Post: <mailto:cygwin-developers AT sourceware DOT cygnus DOT com>
List-Help: <mailto:cygwin-developers-help AT sourceware DOT cygnus DOT com>, <http://sourceware.cygnus.com/ml/#faqs>
Sender: cygwin-developers-owner AT sourceware DOT cygnus DOT com
Delivered-To: mailing list cygwin-developers AT sourceware DOT cygnus DOT com
Message-ID: <38778A0D.5633ADAF@vinschen.de>
Date: Sat, 08 Jan 2000 20:03:41 +0100
From: Corinna Vinschen <corinna AT vinschen DOT de>
X-Mailer: Mozilla 4.7 [en] (WinNT; I)
X-Accept-Language: de,en
MIME-Version: 1.0
To: Chris Faylor <cgf AT cygnus DOT com>
CC: cygdev <cygwin-developers AT sourceware DOT cygnus DOT com>
Subject: ntsec-patch16 (and some other)

This is a multi-part message in MIME format.
--------------18BE35AF3BEBB466DF17EAF3
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello Chris, hello all.

First of all, I have four patches related to the rearrangment of
the sources. Chris, would you please take a special look into 
these changes?

- configure: I had to add the directory `mingw/profile'
  else it was ignored.

- cygwin/smallprintf.c: I had to add `#define __INSIDE_CYGWIN__'
  else the linker said sth. about `undef'd ref to _ctype_'.

- cygwin/regexp/regexp.c: Ditto.

- mingw/profile/configure: This configure script couldn't find
  install-sh, because the search paths for $ac_dir didn't reach
  back enough in the dir hirarchy. Here I have added the path
  `$srcdir/../../..'.

Moreover, I couldn't find any problem with ntsec. What kind of
problem did you find, Chris? Do you have more detailed info?

The next is to correct an error made in an earlier patch:

- My last patch to access() was messy. I forgot to set errno to
  EACCES in case of missing permissions and to set EINVAL in case
  of incorrect specified flags.

At least, I have made many changes to the ntsec code:

- Defined some constants for better readability:
  MAX_SID_LEN instead of using the constant 40.
  DONT_INHERIT for no inheritance of permissions.
  INHERIT_ONLY for permissions that are only inheritid to child
  objects but are not applied to the object itself.
  INHERIT_ALL for permissions that are applied to the object and
  child objects.
  Extended usage of defines instead of constants.

- Eliminated any code that sets special permissions to local
  administrators group.

- Usage of /etc/passwd and /etc/group to get info about the users
  group membership (including supplementary groups).
  This is used when constructing POSIX permission bits.

- Not only ACCESS_ALLOWED_ACEs but also ACCESS_DENIED_ACEs are
  resolved when constructing POSIX permission bits.

- When constructing ACLs, only ACCESS_ALLOWED_ACEs are used
  so far they are able to reflect the POSIX permissions.
  If the rights of the user are less than the rights of
  group and the user is member of the group, the superfluous
  rights are explicitly denied using an ACCESS_DENIED_ACE.
  This is needed because the group allow bits are valid for
  the user as well.
  The same is done for the combinations user/world and
  group/world.
  This has one disadvantage because M$ has not well thought-out
  their DACL model. Their documentation contains in short the
  following:
  1. ACCESS_ALLOW_ACEs will be accumulated related to group
     memberships.
  2. Order of ACEs is important, because system reads them in
     sequence, 'til either any needed right is denied or all
     needed rights are granted.
  3. All ACCESS_DENIED_ACEs _should_ precede any ACCESS_ALLOWED_ACE.

  Notice, that the last rule is a preference, not the law.
  The system will correctly deal with the ACEs regardless of
  the sequence order. Unfortunately, the security tab of the
  NT4 explorer is completely unable to deal with ACCESS_DENIED_ACEs 
  while the explorer of W2K forces the sort order before you can take
  a look on them. If you then press cancel, the old sort order
  remains unchanged (thank God).

  Why is this sort method not thought-out? It's because it is
  unable to reflect each possible situation of a POSIX permission.
  The special case is, when the group has less permissions than
  the user _and_ less permissions than others. Let's make an
  example:

    rw-r-xrw-

    UserAllow:   110
    GroupAllow:  101
    OthersAllow: 110

  Because of the accumulation of allow rights, user may execute, too,
  because the group may execute.
  Next try:

    UserDeny:    001
    GroupAllow:  101
    OthersAllow: 110

  Now the user may read and write but not execute. Unfortunately, the
  group may write because others may write.
  Next try, according to M$ rules:

    UserDeny:    001
    GroupDeny:   010
    GroupAllow:  001
    OthersAllow: 110

  Now the group may not write, but unfortunately the user may not write
  anymore, too. How should this problem be solved? According to the M$
  rules a UserAllow has to follow the GroupDeny but it's easy to see,
  that this never could solve the problem, because the GroupDeny is
  harder.
  So, the only chance to solve this is:

    UserDeny:    001
    UserAllow:   010
    GroupDeny:   010
    GroupAllow:  001
    OthersAllow: 110

  As I mentioned earlier this works for both, NT4 and W2K, but the GUI
  and M$ tools are not able to deal with it.

  Only in this (unusual) case, ntsec sets the ACEs in the above manner.
  Of course, if this should be more a burden than a help, it could be
  solved in another way (slightly incorrect for POSIX rules but in
  conformance to M$).

  - For more dealing with ACLs I have (nearly completely) implemented
    the acl API that is used by newer versions of Solaris. The new
    data structure for a single ACL entry (ACE in Win32 terminology)
    is defined as:

    typedef struct acl {
        int      a_type;    /* entry type */
        uid_t    a_id;      /* UID | GID  */
        mode_t   a_perm;    /* permissions */
    } aclent_t;

    The new API calls are

    acl(2), facl(2),
    aclcheck(3),
    aclsort(3),
    acltomode(3), aclfrommode(3),
    acltopbits(3), aclfrompbits(3),
    acltotext(3), aclfromtext(3)

  - Like in Solaris, Cygwin has two new commands for working with
    ACLs on the command line: getfacl(1) and setfacl(1). They are
    implemented in the winsup/utils directory.

  - Online man pages for the aforementioned commands and API calls can
    be found on eg. docs.sun.com.

  - Not fully implemented is the CLASS_OBJ or MASK acl entry. I haven't
    found a way to implement it in the NT security model.

  - The a_perm member of the aclent_t type contains only the bits for
    read, write and execute as in the file mode. If eg. read permission
    is granted, all read bits (S_IRUSR, S_IRGRP, S_IROTH) are set.

    A point of discussion is the following:

!   Should the a_perm element contain POSIX compliant permissions as
!   today or should it filled according to NT permission bits to
!   reflect the possibilities of the guest os as good as possible???


Best Regards,
Corinna


ChangeLog:
==========

Sat Jan  8 20:00:00 2000  Corinna Vinschen  <corinna AT vinschen DOT de>

	* cygwin.din: Added new acl API calls.
	* grp.cc (getgroups): Changed to work for any username.
	* smallprintf.c: Added define for __INSIDE_CYGWIN__
	* regexp/regexp.c: Ditto.
	* security.cc (get_id_from_sid): Changed to work with acl API.
	(is_grp_member): New function.
	(get_nt_attribute): Rewritten.
	(add_access_allowed_ace): New function.
	(add_access_denied_ace): Ditto.
	(alloc_sd): Rewritten.
	(setacl): New function.
	(getace): Ditto.
	(searchace): Ditto.
	(getacl): Ditto.
	(acl): Ditto.
	(facl): Ditto.
	(aclcheck): Ditto.
	(acecmp): Ditto.
	(aclsort): Ditto.
	(acltomode): Ditto.
	(aclfrommode): Ditto.
	(acltopbits): Ditto.
	(aclfrompbits): Ditto.
	(permtostr): Ditto.
	(acltotext): Ditto.
	(permfromstr): Ditto.
	(aclfromtext): Ditto.
	* syscalls.cc (access): Sets errno again when needed.
	* include/cygwin/acl.h: New file.
	* include/sys/acl.h: Ditto.
	* utils/Makefile.in: Added getfacl.exe and setfacl.exe to
	list of PROGS.
	* utils/getfacl.c: New file.
	* utils/setfacl.c: New file.
--------------18BE35AF3BEBB466DF17EAF3
Content-Type: application/x-gzip;
 name="CV-patch.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="CV-patch.gz"

H4sICL2GdzgAA0NWLXBhdGNoAOw8a3PayLKfza+YeHe9YIEN+G2vc5Y1JOEex6QAr72Vk9KV
QcaqgMSVRByfxOe33+6eh2Yk8bCT3a26deUqg0YzPf2enp4WbX/ofj5mg8C/9Uaz0C2cfvtV
6J712K03do/ZdhQOtgefojAI4u17z49m00q1Wq1V97fVlOVPhdCNQ8/95PkjFsJH5AU+q23R
X2Ho3d6yyoxVpqwSikYN30qlktyt1QH4drW2XT1g9frx7uHx3v6aBGRZVl7PQ1Y7PK7vQM/C
r7+yyv5uvXzALP4BDbEbxWz9x7sgim1n7DnROntxCg2xE45c1bSxUWCMTcNgFDoTexq6t97n
0x+/6J0eKwUGf5Xe5W/Ndrd3uj54GAFH2P1O3Zl6bALE37NZ7I0jNgwG6wVrYUf6vw0TIp/1
YSya3Qy9MDpd/1EAWMd53cFdwH50BrbP1gd37uAj8vr+zo3v3JD9+OVt45+tysT56D6yyI0j
9i/e9Li+vrW1ReMG66z2cmO/0BYKQzht84+toef/hYqTnvpZCpQgThqUhpmjSQemJi0csXNc
rR1XD0mjatX6UXmHWfRZ30Gl4qN26rbnx27oO2N2KtpUS4H9+q7/xm6cn3eufo3ciX3veHGm
MQ4fctunoK4FyxmMC5YN/wE8fb/lLbe8id/BP1II3pO+8u6iFb5FQRjzx/iNP+Vt8CUOJsHQ
5Y/5d95BtsPX2zCYJJ3kHe+WPKMx0xsvjiQwupHQxBMxROunbhOASd84iN3PsQSI3yU83i4G
JJ3kXQKMnplqPwqnW4PBX67yfNrnqLtAWFN13pKj5kd5ap7TW1fx+k61XN9jFn7W9lHDwYuM
QtePWbGEnhHGo04CU6snBfaIfnB7k51xxzYM3Mj/OQbPNZ2ifuHn2J3AaCd8gKHBbBqxKGD3
4O0BFhA/C30W+OMHBu6LDWYhzTTyhmxzu1ABcYEFsfUzcHxgTYXKCHEhIEWP90Mf5/3bLeN3
O2ab9HjsRXGpYD2ht2yB/2VcWmClGNw5IducRWjDExdo/1Ko/ODdsiqiDp/FBB77BbhRIpIS
qoA9FcbUDO+rH4Bnk4fIHd9WXsJYeiz61uDmB3ccuchhhP2CxoELsSfuJAgf7CkxHwc4Q9uN
BzZ1KJZOcElgyB028GMhFWy5DUJOtkeN8PEL8dcee74bnTDL8gTGOJ+GFzs95VjbN7Pb996H
rVFoQzPwU3Ze1ImzAHjF5IUjELVfNAGUksc6i6AbMikH8AlXzr1DXNHru0d8RV9VwHK2R/4F
Gc0JSU0EvFaYKf6NBANzOr8feR+QkyNPCV+Ij0VxOHAidzCZJsyVulSeB6skmJwPZpXhGlu/
6DcriOGJotg/LO+DKPaOyrWj58hCyCOYxceFxGhg2pOC9ViwCpZm/BYa/1PMGfj4pWBxa7Xm
WKuVtlZrsbVaurVa3FqTNg05A7HEwWjAkhvlXsBqf3B98Pjcp5qLFCjALPTih79jpdLmfs5y
paOurVlac3rhOjquVvMWrtwhFPJX6zLkr+2Xa1WIz+BjD5Vy6MYOxNNbuJqwHzx/MJ5BtPLL
zAeJDLfuXuqN0DL2blKNbhj6AbZZSdvYm0BMkh79EG3HD1M3rz2KnTgFA5shKDE7r3MBbN2t
610HCJY6QusQtiO+y942ru1eu2mfty5IiXdBzWFnwC3mt07nnDnjcXBvQwTqgGYZLcBHUO1X
jfNeC5cKZNtOHW155wCZB/cIud1sXfTbr9qtrt247L/pdNv9P1gEZubM4rv3aByaf/nSa51d
Yg/7op90Bz1+PNGxbnbgcfviTQuesiKaoHwiGjHsZax4Bv0a7QuYWrWftb52fvuv1llfb8oB
0Lk4/4MV9Tsa+wSIBfYO6C+gQdtALyviLZtGaLXNq063ySL5BZyV/LoZUoCAzDykNeroQC1R
sFRrkAgQuPXZIObeAd1WSZ/VGcKWkI/gUQdjqEHegF107LPOuz94aKK6kXverX4gF7W8p6Y7
MIRlhhCWCQ6n7OLy/FyGGbgoqWcluSlCgmu1WkKxSYLG0Icohj3NUtqSfkuJS3VdiToNjSx5
yUNBH3gTpK++l9CXoiMhcADxWRyEdnDvu+FyOlW3pWSaPVeiMsEhS6R6JmiEaB9p3EkCqzmk
JKTeB+F4uJxE1W0piWbPlUhMcMiSqJ4JEnd3y4dA4t4OfAgSTRIwqJg6UXQPTe5EhNIUaVAQ
lLQVKthq27BiDMCr0rbEBrRxi5nxGeR7I9cJB3fgCCCMtwQhMqZZdWSZcNnE1YD4LelsR787
Y2/Yw9E4UEaB3BvV9g5Isvv7iWRXmRBhwL7ulRfCViiGzVsc4FhcGxgOFpxiECVzLwb7NuiF
6yzHS1tuFEIiRuZ26w11hUi3Z8SPl3SgIAfCuyR6qw6038HHlZpc22oHR+UjYAC45drOUzkg
L4jMpvd8D3yit1cqicIYD5ADAPulvi804k0RUSbXF/OWg+DCTj1gXAmAysteq3uSfjxvgseC
9lWgJINYOV+ibezrVyZULcEwhV1iFy+RzDwsqny3UDsCxwJSqNfq5do3iUGmIlJiUKj8DVJ4
3e1cvnueGMRHBW2NEASLa1+/bR2zNhsGmEn56Af3iIQX49Z/PH5An/cxAk1njv/AcHNYZjcz
2P3DQwjLBZTzIPg4mzYGg2Dmx+AaiiXoPmQXbvz58+fXbtz2bwNou3Mi9skFu50GYMhTN4Rd
78TxB64A40ZTd+DRtJTdmTjw4fqfvDDwMasT8X7b6BPJX7RjkJs7idjY++hSTmeGskUvAZ6J
eRG1jZ0Ic0M3DIPJAIN6FtzSk4hnfiwCdgWjIw6lizFJBPH8rTMbx+yy3dx+DU3C3Uir3wTK
gNje7KYhARe5RuU8OUPWcI/JKqxGmRSR2SliTFdiPM0hbiq1EkeLxLnJ+gKrifNw48JTHOhw
fuOGDkcOgsl0FvMN3pYY1vaBHmADCo7du0LLKduAdOoQPJ+ahKNF8XFPizu3SMG7JTNFzvqu
O3SB1gQqCsuBT5xMDNiW+2FOHOBtGrpy0kIhSdENoSUy8zCXN3Fjb+JGAIlmvnM+ubRWBDhI
A/HzYOw6Prt3Hn7mlAkmJF22CxVjhRC8eF+r4hqhP+GKaD7gcbgYY49dfxTfgUpAn1QXPji/
B644F423LRs8q4KF3DHXKIkZLlLog2lMah0TOGKXs87bd5f9Vpcgw4L2uv/GqiXdFeaIEyBk
QE31Aqhar1zAakSaGEEIk8RS9JB2FKyIcVRZOGJBaJltmIwtFyprcHEa4anBU603KVZJX2Ge
MiHCK2f9rnHpKFB/PlJMzNZg0VpjGKu5Me3l+dKxpvwzBQprjwlXonsvBpMpGiRIJLSH4gHO
UAFwZM9ATh9aLyM3PKZWsqc1MZbv+YQ5b07vMb3mxtN7MHY1HSAn+wsEod8/4F/l5fTeRl96
jIPIqaq+j0SQjsFrdBRzUVDbTo7BKJyDAV/j0U2giEoocwK2Ru6BjQNYc2RS3wldNgngHzl+
TGuhqweDp3vRCU2cRq/Oi7WVObGGC6nJu1FYeSmTlpJVVopVDTzRPc40X7nj8T9h7fUFKw0t
nBsULAoJdKebGZiJO1YWVmYcl1pOvML4IqkzJdXn0Wy4gYjj40mGNVy9n8aQnEh1GT/WUoxY
qiy5nJjez+dEoksnarp8FqB9idhDWlWS95UqmD8wCfLSK688URlyeiQYZsSOlA22nrpX5Plv
HUlzJB+k7y3JwkXqXW61EWiBjd2RM6ZtOcmyaCwr+m5UTMYlfqpri4wxtGYyq/TxA1zQUzdM
7d60SOKMVbAIR8uLkAo8B7mB2YozOg6YIY3qWE+yRCRJaV9vHCioUwTxxTwH5PIlNmsznbJ+
9xLXaCnbF8meaGODvUh2h0LYys7nKjWpAfxLFEqQEE6j9xfkWHo2LP5J/JCc/WkEaT3LNHbx
Qqr71hH5Vv24YuWhFLce551uaLh66o6fsWnnk34sDiaNYzAi3ftAZ47qINIwM8kpXTJFAVFO
/qgbhOpIKg+LP0k2SelYQvcpWOFkFXV14Odwess4GEXhpzLPUYQ8eSzzYnkJj4XJjoWJDpGF
9oYQ7pwo8BD/ILvf7+ztfzBaRZhspfrNix+N6FOGqQrWonCWaUEqocYWxKB0hniIuThrZ6fK
U3KrclummDjL0dAE99UeRlMeI968INBSVATWzAtkLnKURc5skMZuFQJMfldaNhTYAEM5M/g+
g4epfOzisDY1raYg+vxLQ2N9/jmi03FaCE4LrPWOwP30CqEH4PIaBbQphHUoFgfIR/VybRel
f4SfTxQ/v4yMFB2Vx8A07XP6QAxAhS8jP0pltv6vf62XuOxLmWTRAmWRYJYIPUd4T9EZvL5F
b+T036g6Eo3l2rOq8uC1kacYeBnKoVpV5MTmCodvHZfZ8UJ5zGfEaja4mIHz5bgKm2SnxTZG
J7jVQ3Kle3tPd6WaHX2LDS0U0YrW8//eVl25xpI1lEcS/97+DhU+7Neq4gwfQ34/tp04Dr2b
WZzSAkwh8vMkcc7zh+vcwYYAxDaEfXsQsMlscMcTy+2fP2FCEajqNSPM09aBt+zmIXajFyIB
KyISPEr7t0tyO9on/HiQI4/+jkRk8k6VCzRbvbNu+12/04VePNjJPioJCBSJ5I6drjJY1clB
cHaiMr1wA0O7rjPsNVmR8yUaotg5NaVSUi40d8A0dwTJR5nW0L2ZjexpCBgAmHUB4KfWemJB
Ijgl/EiqB/vl+hFItb4j6lmeIlWKIcV2hHaSYvsynE0mD1qy+wXD3Lgormm60SD0pnEQdvDY
F4wCKVNHwKi+OLyk+LF49HTu8DyeLIDE+bQYY9oXCowV3StjLEZP5w5fGWMOSUi2UNneZs3W
b5evEfscBbWxNqWLu/fhgCjkxhS6n054Phxxzp3nLPDjMBgLimE4/IdhJXHUpTL5KZx7LbvZ
ODvHOp2OrH1pNY/ZT8P1OT4WJhiwDZY/sIQvUVRLJ0tme9ft9FtnT5tIjUnm4OMeiauti6bk
LOk7DMFC70TT4cZ2P3tRHC1X9yYW0nNOJsP4zcoqxGFMlwEx/UI6NZ3LxfnTcTWj111q9fLB
Dr7vAjHA4VO9heZ/qmppIaYRK++cSBSCiPJ8UT+mPxe1onOf82oL83luTiWVzUEyZkb6Kqle
WSWQZbwIy4CgDLxERgpAGmdnrV6Pv3jRamIxGNt0BvzgB5lE9Qy8AES0DF3/wWjYvB07I5D3
puPHmORQZdjcpLVEB0iu8rIxcOkMUqQ8mGG0i9DBi9QQ1AKAYDAI+uVB+PHu9w6eipZQ5Vy9
mhgEH3v+zBwPfSov38BC5IZbAOcVYg/ml66eWwQmORAxQPXNXLCW3aZEcpY4u//Hu5aRVCZe
Asc2iPFGdhXZi09QAMYDMxtkTtZsXbSXzpWBKKfKIpGeS6WHtT4ZdimjkiJYKsGKOF9ayGjz
nGcxi1OOF5FIKrxgo9H6n5kzpnM5kXnaoCnx8Dx2wriclJURdmviQGgz8TIbp+w/Pbvdvbq+
FCc4Ge/Bs6b0TCniWyf6CNr3qn3esrutRhPWgH6jJI6AdPhfTxmCv+x1F4G4wtVpCYyrJTBa
17Be91vzAVxLAI9pvqbeMViVuZpfWsbc1xpzDdf7PZj7uvvum5m7BMZy5koAybme4upyRqbK
+5bzs6Px01iqvgc/O/0338zPJTDS/JQntbmsTWDhBcFUL/YGHx8YkExL1tAL3QHEGJ4b0Zl8
OMSSf9h8jsGffWbhjEpQdAAXAWwSfRAPDhclKuo5D5qyODdb5y0g/OxN+xxluEFlBQwx7DXb
3WKCNxffWoaQ3u/9a0XIo6kswkNnnWJmKagYfBiPmTfyg9AdvsiHlToJTD1FBNQpIi+mHri2
kcw3ldVYk+f4YgHC9L556+tyHTUCJh6yGC51GShdV+fDuloJltLZ+YCuTUCKs8scrOKY7lK/
O8fARc2LQL+Cb9LCWDwOLFJkiDsczuxSif1DfmfHtMP5Ttx/Pl5XGl5Xq+O1iiSfj9S1htR1
DlJZrchThOyS8N31AfzqIhJNDQB+KA2A70TU6qP/VP15Ch1XGh1XT6bju+pbpozGVMAFVOVg
dq3Rdb2MrrzxS5SWX89de7Ng8lbgVK+V1uE8Ejc28hblOT0NLuAKXcrpaUiGL+NGn0fdupOW
VOhWFBuNryImFp+dr3Lmk9QgmC/Zy6WA8d0fzBQ9RFgFkORf+MuSP0Xsp8/rZcYzJxof9KId
9Va8+Y4IlfCQC8LRek4G+80il78qYdYUJCkanenaux9aK6aADqqHdAxwsLdf3t2VKaBVJtQI
oIpIqjriSbTh0AYtdKPIJsa5eAtQZLqN4xfc3kauehtOTbak6iQpdCgzTJ3bMdsYu74Nc0pQ
nn/nhl4sq3e4AjeGwwah1OAYJVtoTBt2W7+3e+3ORVnHg2kBgPISqdybaBV8SDJUQvUWZojU
Xp7jIfmRn5HJTbyAZgpiCaLgA7NOiTUBTJAJX7FwXT4kdqXtzMJE5TlV5dJaGMm6IkGjqF5S
lVS6tMEavO8q7G+UdZPw+UtFnXD6/5Kkc8/QCuQWB3Y0zC+fyy92osSo5HyZyiTnHO7ZYaIx
m+KkDNvInVnm0ZQl/VsQ2TcuLH52OPPxCODe8y/66ocwiC751h+5v3qtXDs4ZNZhdadc5+eg
q1KVyoELsGL1UeVUVDlVNyqsNrPvcNKa3m6KomjnM9sV56VsHPgjpBY6vBYv0+F7HXRMD6L1
3Xu+wVM1V3SX955B3tz5ZWTZ10AV6mprtCrqlfSxYgJzzvEWiH7+mS8/t1VIpY+RqwIsbArA
xFhxA09WqmVlCBFl76mL8Ch46mJUxWED0qZkJj0Zbcbhe0l2OeGnSKvUZVZ4oQQWRvCqiJwS
SBgDRuL5uM+QI4xy7qms1xzReQQHjJKVoEluK8AGpHURixSDoRkn0qDAnwK8r1/ZC4oMAKR5
noLTldSrchjKmZUknFxp/UYmGAdQecIw8F0hldQpFo6mKOr9T8MPEEfxihBr3mSCAXmzWRlT
tTKzUX99Og4vW3aR99ZYmovo29bmvkSW7s1fKJMnSwuMnbQhMWfTHk1ztuaanrWacjFVTJs+
gtRBClIMTIwSH1Ah8XroC+PHDbQjc5wiXSOYki10obcQeDmSFLGZ/da0Sa11ue5ZvMdKtykl
gOWegK5rwmj7Xuw5Y/Qx/BUW+csiMFierWLXed5scRWKQo2HL8lk2QNc4dHyigJkYCMtK0XW
QqjiTPgJ8Y/SIwp/EuR7cwsyOOaa36AQatnhtvArWcHOEauR3tOK4eZgRoUXHDNNG78/ZuTb
xFLD9KDtXC5H8mE2pNN2DzkxnXmIlI7pEv+ilYa80MyXjDLJfOkmmfpRDqlXz0Z0bQ6OmYk0
VI1MbbGobb6Z2L6nOSAuoGtFqv40spRn0kpJsgR0/ky2GrnL/BUWVLDSA5C8yEaiYapL4jsa
WK5CmxjR0dxULfU9DVV/Usmy5IV6xSnP5fI9Jh2QYwkT/kKWWgZlzLZTPaiLhW9+0GYtIgsh
ZGgSfkAewuMOZuDasI0TESdvn7vZV+8oq9d2kZBT1us3LpqNbtPutl+/6dNIrbPxNvXv/WtK
9k2cB/7bhzdYYBkjIe5n8GqxczPmWbz/DvBXXX+mN63deEuD8QqeDoIQM4XsDsIKfPefzXzY
Z7Ir3CWVs4k9ets/DjQgNxjS+SWaW7wqDoSqafB1TcElkTc0FR7zqSXNZDOnquJ0ToeSthnM
kWoQODdhg0zYv25dtLrtM8q9s696ArvR73fbv132Wz2zvdU4WTDb1UqzESQAy3m3CN71SvBE
qvpkMTNFnnQeMF2QKUgrZ8OoU07YnmPkOTD58lNKSjElBno2pJpXwpKQlJ8Myf4OF3A/9ye7
Tp4ezpivu2vriBa8ZNYRfRnCteq5i2xSv/MkUSXrQP6V9jXCPrgJdK6AaeIFfeqdt/avrShz
GqdkvpYVeC23Zul7SRshJd4ZfyWVH63DkvJ8J8rHf4MD5QDmOU9ribu0FrhKSyKHv7AESLt4
1jBG5aBdnpHkyESeVs5qJgGeYZqL9oi8jjGZHzmkck58TeOWIQseizkrGxD0H86ZBQd9K7pr
a8HCQLB1dPJWhnkgrlYDkXb3+cCuVwOmfP1cLdDPw/IgmY5+NfmpNAKXH3dJUn55zmKJ0Ois
Oyszal4gMjwv5ZB1DJ4ksrkg8pTw67MEuRqWTxNkHqTnCNLFH2OC7admi+i7/gZZoq8SSqph
8CRZzgXx/WS5GpZPNMocSClZMpaRJhWD/297z9rVxpHs5/hXDBjbwpJAEtjYIrDrAPbhXmx8
IFnISXw5yuiB1kLS1QjjnNj57ber+lXdXfOQELaTu9qskWb6UVXdXV1dXQ97CWXZqg3c5DNY
134cAkMEUQzwqsLlFqrWn5R3PNRiiIKa4iA3BhvoLasVUg1rkbLysr3g9Cs09TIq5m0aEifK
7DQ+lAwhPqRsKj7FgF+1K/q0o0YfJBlnN7X2fPDeUXSn3LOqwzhu4OVyhQxAIUcHItKaEz0J
rWvNMHxBWaEh6cbisZRqCMDDjEUKAF0Q5BSAHbqbRWZ1TfPS3dYuRHdyBlgA3R08itOdTP0C
QBcEuRDAdNeaca7YBVoEZk8JNgPozilwbj0kfGbSRarDX6qSSO6fpC/XdDFHgauOWVpPoE37
9tyjoLXCLq5B+S5DwPO7ZQSClPpnbP05pIGU9s/z4fN1MZrm+foYplFPJzPrKd8oZNxrL+io
wMkcK2WezKOyXmp3fEbXR3K45fRkHhkrWOd1Sblow3tN8YaEmiZ3m+Yte/NZxINZ2p48dHpw
nTpnd0XO7tq4IpOuU1yS5/IpthOXvYNQSgSlOohu+tPL6Ho46Qxa004b2HZSbFyg8ghdasuM
S225kElcuqutoo3jKTuirrJk57aF4BeUUm95/8oR52BZtlTTbnejVL87s+b/oCxgNkbOnqmy
GIrHRTNbO8tqbR6emtnbeWHY75LDhm3OzGoZtzDafwHGi9U9Nbg7ryQAjWz+62K9MMU4fGZy
OoIPnGQxWxysJsomaCE0/nC5NO9w45QJTb+FADWfl5Ot7u4G6VCwrj+2mbk8h2z1Qi4mXk3G
IxjJLyaay6F9yqup3uFuC9IEZ8ZXGGLo8V5w0T9S26lFTYhng1w2vbfSEc5xuJvtVPy+TzEw
ils3cNbgL3X0J7zc0R8nZie5emdgcGqWy2p9ukGn3Asj1tJEbmFoaQKGtRVpG60tTarf+UEw
csI3VA0W6nz1Ih4AtOD0oYKIt6MPrcE1HrHU3iZL7Fibx3JxcwDE0RpaUoNcfczbg/QfnQgC
cSBbyDSVmptU8xopRdQuVIsSYBqqYvCQWDGvW+87p51B9wQWV/9DB8L2IDhGAjGBexTqUCOC
CJaSF/Yx/hGLNyWcUeXldkjNn42o5DTFBRC6jcVSuTAxKGy3GJ5IWcPJZhEOb27K+dWOTvfp
FH3s0kYMM+CGUQs8Wqtf1PVmnOiAuWAN/rz2FFLTQbJWTGkpU1nmBkQBM3Ftewblx5MR6jEE
4B9EgV4nEcgLEbPm2qHLhCOMEfOTesOaI6tQWOLZO6LC9ANnldnAWdHtgl+VSfCr8syxrNyJ
kBXLyp0VujtpWFiOAlwNny1JPBx7/Yq00dfmodbTwIcyHAtpkSQRFs2eicXb8ZC0vAIHzoNY
/cypmOrplczh6cVHhGP9FviirjsG47Eh3cSebz6p1OuwMp4+qTx/UtdLY0ZHMfGnsWgSuCh4
kaW5BkljGTQ0HxOZmCZhTCeo+RCq6lqKotp9imZ1EoDirsejN4RUSX1wVJLvRdEOJBqAo/NA
rFYTvXsW7lC+DXcw4auzWMEtOUG17jIC1+HHVyBBlrFyqgNLIb1Peuy5GXY1CjV1yeEN9BGo
vdH4dzwVOGEkHRcBUZk548wDUarnhx1XRVepjqN0nVWflhsh73Z0talm56Crqcyc2uaBKNUl
wqHrAjwJFuUlMDemc1v636pHa9VPb+fmsOqfEwqqIl2kLfK8Jlrp0eDLWdHgy4zDGusQRHj8
DKbScw8xl3xcb3tUG2vaVsbUM5u5FDdygY+MJIF7LOSzbl2MO5OrwOAFPjnmLjmNnaU0VlQt
y+CqFbW6fGCRkgPSeRH8qKEMfGzQOdLmNDu2H/qpHv/wX04gvEwKGFtCRzkz20Vy0Stk/eHM
Dmh6Yl9X5c9y+WHjDQIBmgEmJc+T1CFpiobRddLU7plswbuiU6SCYy+aSJidJJgmdzvmnMnD
ItFhBt1mberNNujaq1Lpof8egy5YEMMb7njQqUbeMRlZEFL7By8v/ro8j8Z6XQAR/r58b4GE
+lZ436JR+vvyvwVS6tvigbdH7DOR+r/Q5VX527yfck9Aha+RwHlonOA52Il8Us64SHIVc0aP
oOtzirqZNQIFO79FP4UuhBwkC+nkHXXshxGoGHqgj5ULSWpaH5pYVnCaqagM0jo+0U1/CAvv
4qqVvPefqdPPH2ouq/OQGDKTJVg+xdM6JpbUJKWtpgWVpOWm7nW9H8nbrFbZH570hLBRIj+t
0Wb0D7zEd2O8mliZKT16BgJchzp6MkZqzsQ0iDt5B6ieuaie3QWqZ/mouqEp7wDPcxfP87vA
Uwbf5q42IGeou5rg3mLs3234iytS8QD+0EqwviKjnwSS0xPhbSX0YlUQgBX+BRtu0fz3ghxC
KrCFZJpVV8oAscFtxjfN71NGg/wqIEEv9XbHBsTzqfGt3PF8AzfA7p2OVXCSVEVl73qIXILi
L3MP6qg1F3EZNIcZ8Iy73rXO95ua0yQfqRlvYmY1MJ4dqZ5BKi3NikLKrIOB+IaablA5H7z5
8eTw4FROcRPtbaAjCnjFosdGq66bW5XwYaM1yyGMMtJ7i9DqyYSP66SSOZ95ryWOtFaD1DKC
vcLUpiMqc7bTOSNcMJVQEdlrxlRC6cOsGch4BOzdwYGYZ8uTmbHPNsAhmxdVJaOHL99Hrw/f
0IEFji9eEH6NVBaPjC57Rxm5/xR90r465tuxAV52o7lv2JHYO83LZgCFbkVMRAzEpzh2JZIT
EhpPnYGEdKKcSzt/o3Ns1GWYCQOVoCLdC1fZS5N063tdAkdnrixB+uFsCQxwp3d+qtVR84Ca
K7MBt6j1x1nS8lMsKHxudgCWKzjd9ubotmgseoa7eL3X0vpOadGwaodTG8jw5CtYDApHgXYS
wVlS1Miz59Xj3/CgtG/77UYmMPJEjrA0QotgDVADBD0OIhYqQwPRedAkfOiAMwU+u48+M9TH
Zefdk7EZuJYK5+DKylWg2CoRzSWn8vbNipbHxVyPdneCYPb6lGyYrq2g7Llf44GYMStnczEo
oT0TP/DXpFAAFwT5WZ+lzJ3uxf7hycGekGh/zl4qn3bwEnv/4OWLn45+DObvN0kqo3UpDF1t
VZmgYn1Zyyu0zW05sCdxOwni0Se7bMl7op3LfkpPgPAw+rOUVu2VAPf7aMPi7pX7lNVjtLsb
baR2C3kXMqs+9XVbpXz6whYjB970K3bk/HqSCbkzBqZ00XHdO3ohNnTB5t1p546TkocUmzJV
trlCcjgp8fBtQUwQEt2MQ0ZIf9jTEk5BoupLonkIay4ZGOIiIIXI69y+rLpwzDJM0I4/VLSd
ghwsa1idLjKGVj5CErADdRdcBRqFt7tWPqVVjAJHl7UqDyg0j1gtfiajyRS7xSOhbhLfBuk6
HigRBw9RD5LV5Yo8tIB+w9EkyxmM8nnnozg6DaPlvWVpvlwOdDzj1vRS6nXiq3ZhBU8BPwIk
Cz1wwRPo7UJ0/0G8aQncxE+BvvjX6vvNizVx6BtN/FkFvarToF/STKiAdNW6vJUxdDM9+kA6
c2zJ9gD582C8MI6eB5G0SgNlmvjHOSdIRZTBHksr6yNB7Qx7o9ODH8X8dG7TCOIHb45Pfz51
RUfegiNsBvAiZ8i6t/XRXg7f/OvFkduLkf6XJL4lOX0eJlP/oi2QUF0lyeY7VvA1kO2yWYlY
sTdbP5JeGsXlZLqWoNIqp7CWIGT5q1G7U0R6oJ9PKZVzBIGCLTxl4P+cQ2F/7OGTTuF0ZVJ6
cULiXhaJ6zkkfnUbEisx7XYtwCDNQeLGTCRO07xlFQ9Oy1yhDNIe34a0x0jap7duYR7SbsxE
2o1M4ZIvnkfajb/rrN1kADevd6JNlnW78hD9pMhGpsVMvaP+yK3UkcJSEMrYCffe/OhshrLR
zcyN1LTNC2REqkBXU1a0cK6LOBnATFx+98cdV4mLJSueEZFx1UNLeZYhdFaKQQVdf7jRgDhT
GVPLkQCtSMoRiJczMqUMn8IK3N6c4NryrhtdklkrA8XUCfNVABWDDH5M9OrDz8lOCSonGC/F
zSAXB3fFwUmii/VAyu225ztAtDGa8dpwNL0YjTvDqNQNvZt4kGXfD9oAc7dNBH+C9w8v9l/m
eWh55yDRsoTpl277XXUXRlUmdrGnE1lMupbNCKtYESPMk5MFtSfZs2CHiRx1F80IXkDMZzKo
MDzBwMqbOBTecdjY5ZB6hIwxrkopGF3OXOLxzWU/vtTjjneGcJiCNEkXo9/+LShkE9WZt/IC
I/W1jLCX+joetMSZNPX1dQ/eJfxLsbpyYIMSOfBBkRwYoUgOnAgKA6u6rmxs0xs4+YzeQ1KT
E3sB6Xu/EAWNYdLubsTYgcNKoIPosHdPCEPDHTUFXM4mZ4YA2V4qWlaJsxS7Pjg5OXazbpPt
3ptKKiEgxxgzfDQ0OmZU7wqfVydv89GhcysfH870VuNjpuBd4SM7z8WILoV8jIx4zmBkVsxd
YSQ7z8WIrtx8jBwnAta1Rms0G65KUy3SqIxLugx5CYxUVcVnVfEs94zArPWK/5C/FJqLsv4F
pCLt/k9vjw73XkA0ztwVbbhePnFTXFX0jKH8/OuyKW9nKYZZFrtyNqKvyrL8LbEYblmsy9lB
vzL78nfzYthlsTFn8//KrMwXRIqvuCY/W//D1rJIXZC1hYc81R1cWf3sdWUvLKg4pN+C7Zoj
V/gvzNwmL0qUDUMYA3731SUpZrq0O8n9wxJHc0Nt4p6j0H596M3lz+QwU0s5q4ClQnw11hde
4DYhjip1HaJG/W7Is8l9AW9/2IE6pf4qRIX04tisRq3796WRgb3bgdL11equUi5W8UHDPDDn
xiXMCl1WGDkVBRC0mtKTO5qj+5DCpwuFMg5l8i4xPICJIyEOQ85p3DnWycOcbQePu8ydnlVN
4YIW04HR+tgDcvrlEnvQ/V/Ud5XkOK1GDFyB4rCixtw57KbNDyTbdIRa0/zDLBSD1/DXUk6e
u7aJ3WgKMaQNqa58K7pIECKaZSO8DmeopcUk50b8tlB82vF5rmuuMhuI1JBhATDKe+qsDq3F
Q2AlULTitksN/2jNGf7MRhQjKC164AqA+rTwQgJLR2j5r7SSvtLS4cguRkMNTJGL5U9M6XyT
MrbK0/8nK7QY0bMu7UIK5t7SsVW+OgcoRoqsq+EQr9y74LQqGzNs1ePf+tNkhr0ayxsWY3Xf
ZNP3Sa2q5HG6RUGiuWYRWJS/nrywuFeGYZuOkukkKqle4InughYeo7/dO8Vb8VftHYw4YfgH
L/bB/fLR5FHUjB5VH22bonWvKHq9YtmboGzDKwtuo1j0Y1B0A4o++rX2iI7/WLr1BaTXOOPY
TcWbVNKDHDucUsmW7iPyrd5F1K9d3yCQHG8YsVjWcoXiGZaim5de+UQiQRq1Wk3aRZkRMvTB
W4Fuf5JM7dERnqdp/yWQru7fOXwtYWNkiYuJFINJF8YbXK4Qtyndrb2C0I0wR3Ax7sRWPbV9
dcAlvRS5mSgYmSvRV2OioagMPUPcOvglDgjLcEBuNh8ky7yKgSwrhk96pgnFgmUVgOdBOx2i
QKdRWQCQfMCWbEhRhXCnpAtjrhSB6IsTj1Pu5YEK3vR3Sjs+Cks2UKj7uSuoQiVWroEpnw+B
upRo45bppA3uwoCHtz/KzVDuj7C9IvTqlp9skGrPxM3X+vKhPKpohKXBMWzDVX3U6oJRGwEO
SiGz3oHNU9uDQ6ufdnRwCuXO+erkrfomxgobMAa1uhXRm9glc/ury/5umP7OTH9npr8zvr96
4f4asr+PTH/npr9z0985318jrz/1AFrnpAC75Rs5TMoCcnRBOBA/lSDwmJcEsMQCd209WUzT
oNB+p08cRf3CjVu40mjBbxtaVe/tZsOX+MZoXTuZjt7TXTuKxX/kDUAuX7FigCg2lEpSsitX
oq1Uj7TAryPDOy2GjCVb4Urm+sZtUPT8JNMtMP7liZyKzUfe8YSDizUFd91Ig16y2tr2CyKC
T4LHAGk/aQ3Gly1x6onDmGAptqpB3NtIhZkbtq4E7qFZpCElE0suox/sK5sT0096lhr9CUxK
4UOpiMa045vq7vgm1dxezdr4coIzAoaYKRd0ZXhMP2n3e/1pGsUDcHCFDLCvh+L/9RrvjbsU
w0FArLYlbtrBhx/LYvTNpm0Bv1zrk+EsJykZifX0dIHriTf8n3NB8b7Id7OiTMzoSIXuy11Q
THy+jG6wqy+/oHqT6m5vkupc8Z8FtcAFhfL7gvcn3hWhwHoqQItCqcXykJbngwVzEd635Wtg
jQpYxv/UPTqsrgJuKKWmEeE2x5pIKmk8BS2JQhbtUG3XanSF+YSku2qq84RSzzAOqsW8U62K
cqzy4RwO252PzSj+vXfTH64nAAWeLdfiezu3/9w72TtFX9ZmtJ5M4vX4QzIZjabroq/kelwV
tK/Xnq4znVc+3BOwTvqdD2D4PBF/kv5oGNXX8H/32v1uN6peR9VxVJ2oh5EDfLVa5ZD6DtRx
67X6em0rajSam8+btfp3utVyuZxd51lUf9asbTU3tjA7Ub1e2YrK4t/nkJeo3Zm2+oNkLXq8
fi+63x/Gg2txnPo+mbZbk97a5a77UDQdPmwP+r/BQ2O3cHFx+Ob0cP/gYu/nV2eHby4uaPkY
lp4sLk0JMksLrNqjmwT7vBepLEiA5YVRJsgDSDuZeumOrqaVtbU1MYO8ySJN1pO1+CvMFdv3
XFOFgE5nin1ceKKkVNkQ5Zu1Z3Ke1BpblaebmOBNfNmA2aJSebih+YbykNuF0COYKGyC+y8o
WOEdeOSaPGQTJpPYffGipvMJdlUAk7OL4/9GfrG+LluObjoTsS0M49Fk0omng9+jZNyJ+91+
p615jK77Z+mlqP3pBP6Bdj6dQ2Mm3x9JP+n7qsn7hHvV7+wdkEmKu/44ilvDR9PoBsKjQvRd
sSHh0MPaqYbMF8NH8b4Vmi+7PBlz3EnGW72v96CJMkKKXBxPkD4Ko8jH6FoGZyTZuJyMy2Qr
klFyAp+9n05P/CS6fLxiJ0OiefZZfzV7uXG9pXD1ZoYLInMuFC6mD8jkQfrg2vfb/uwPz9md
Ds/ZNzo8Z19geM4WMTzndzo859/o8Jx/geE5n2t4BLsbii2PpIlUSlila5RJSstmD8GmUnit
NldUomJEtLauJDDp9Dofx+rPV5Acvf7nkQgM7EQc8JplRIItTiRIrabFx81NFAs2N0F8FP+i
+OjYAUxiGcRweeWw3YwsXgIHGAgj1S2rV5fLniDZH92VHGml1Bx5FmC7avX6MUCn5suVKHWz
Pp6MYGTXhezT7feuJ50vN2FSAJhnxljoYcqkNBzOmfqmM2dy6+GkEVVrDZw0Tza2YNbIP+LB
/tHRj8fHRzsrf6hv1fZgMB2NBmLFiidnJy/eynfwDd7dTFpjXM2t+KJ1/fGi3Z/s3KvCBYR4
IH5AlP8VQUD4qv6ur62Rr+K/bcFz7pVnq+P+0o1IDjvtCBm42o1WZHPrYsimQqiuJpfbIBoO
JXMjAKuC5rmqcJFc7iyv2HKkoagam1l4PRXntHVIGwBEX+sPv9z8C7qeZ+ZRyGHuBY0ys+65
M+syauB829hsNupyvj3D6fZMzrbXh29enV0c7b88evHqtLmzUnpxdKR/rkYrJfX+EObX25Nj
KHMFMWNXSgfnBwfnP65G197vcWK/v+8PBvbXr2a7vHov707su6v3qPu1DwTrBcdn5wGa+ND2
9Fbqtya4VyvumN9me/XL9TpT8MomFYMHXkuCDIKBnv709mL/4C0STO4RF8noehJ3VtXsWLtU
mcC36pV6LSrLP3BKHAyaZrgFfZGm2Kzsaa3zUcw39T2OJTe5EHCOxtO1kR2Q/aPDH6Bevwv8
/V8HJz8cnx6Iw9lKaW/PjtueGseqqPnPaOWPm9GkDTkmo3qlUVn5n89R9YeVkuzit+v+oL26
Hrkz4F55ES06k0wAjee36nf/7MSXgBK0X70ajqqSlOltr/whqCYkluroWnCXHx5UPGg/b/96
JyRYCKAuEQDUu6EtCotiPrkzpxkFM1W9il0mqpbEl5T5vI7TGWjAPCMLrWWb5pnHNJ88bTZQ
vCMMM7Xs8+aGZJe1ili+YvU2NsXyBUsHKyONb9pSyDJPepOx94RIbubZ9VAMalBVjoZX+/dk
HWS5hHkOYIdPQejEx9oYE3Tkf1/jU6kfU6iCaYKMBGJSNnCYXiMQT1RWCy6HrT5Nefnjrm2k
briuAz39NRp0qAtzjBpi7Gm4gsti7N8PRzfD3WVjDiVhx91PAm8yTHDA9zjguVS79g4VYe+F
sPdUymq8m8yCvZcCuzqYlpXJ9VVLsEQ0cm1NenFFHXweix8fNCbqvAllxGTvD9vGdiauqPQn
WF+8tH5TEO/Vf6BtXeuUDDS2o7mIAZc7zqgHCt1cwiZcKsWSVNBJScIOQAuUW+3lVTQtOzh+
6UXmiFPicDxqPSKWdAoTesJnXHUftWmddl6d0GCvqxX+gq+IYz+a6bR6kMcqiX6pttrvkAmv
ra39OlyWyInFTe++1NKyfX726SPHq1wGzwagEWelJBXb2Hz8Log36dzEjTEYqCrswsLEK/ct
kiLfKnp8PcXpVnr065DcnutpYsPDmWg899W+9CCxNIkJHKQgZgeAnGBY0ujB2LLSnsMt26Nl
8S4z1gGdDK1kICsmMC7MX8edZHGk9CN0xzQ+d9CNuqlMSBqkNBvyoK6pL2YRY0fAAOkRVk/5
Zf8q2TEUMLq3dtgP2wcxZnfx+rMwYunm7Q4C0po9AD+0xnXazGnvQbspsxMmJq1l8fZ5y3Kn
E2VIPgvUoWU40+Kt4OaNup1epA33LGDzRtlOo8oGu2Crzry0sQglszEymSVBYKfNGFNrrytH
Xk++lryezCOvJ4y8nswgr6eWfd5sPKPy+sbWViCvc7I4UZUyus8yf5c/hyRf6KxQQNpHkRd1
uuBqZPXB6HiEYpiVynRJ8EOyJeFXVAKv/7Akug7ZovgzKtXYsodHRwevXhxdvD7eJ1XoU7HR
yUPHau1jV32cpgBZaKozvL6SfPXN6EU8FbMH3RxOO1P8+3okyv+OX/c7g860o5++ET91yZeT
0dVLMXPFEhGcBdq4mG5b+frqd5Bwt5WwGqF4FJW0XKrkJ158mryLqolMM6W8m6kwJRuWKzdo
Rq1l08xVezHtdLEZVCGltUEkOjxmqOMfnGbg5KVMQ/pDanhvDQnFc4wQ0h+Ko10g6kH2HJBg
pqM+CPyucNPX6RD70W60RTZPBRGdIaaizoCIzqnRJ/llA75Qeyvq9QEQhj4fQePaVg6NK5cn
1WUwyAApSfcMXurm/Y16X095/1G9b7xbzelXPS9hZ8rpRJxxMxxNxNnXCX/zCSsbDxJZOc1r
hK9s3EFk5TQXEKys54lkKzJ4KsxTNEaTy0mtK32yi91QJSY1rXqrAx9iHhoT1bm2TZ6R0M3q
iTLso24+rOsDyA/P/DEipeB9I/CkcEHhvCEYU1xwFPEnYZpLRCpA1/kAcX4QBcDJtyt3BJMA
sl4hyEKL8vlBsxa62ZBd8ZDJu3UKn3sMCTmO6xDrYRba9s6PGTHDzUZt9EVQCw14C6LmsDYS
0RRPgBS4kp6xgpmQiBMMWnEj7Dr7pAmsBtiX3PK9QxiLPnweY0dGZSg/ofm0an6JaZ5tWqOw
E8WLhzoEL8Wi3+lPsdmNbZu1hMyB0NB/I7T0h65EC/NC6c4FE3slBd6ZnKZ4Z6nUUadIs95L
RZITzuKDwvueFIKPdQZx1Fuz0dUpvRP9yTrTMRvNjNTxu+F9jLhtIw3NmKbdAM4kFhiz16as
KYe7+GzJMHXBl0hQFgqpkG4fxwUZqpJKsiRXEibQhixyq1vRW3oq0OZcadIC4bbOCmhwkEgT
0VBx73gp6HDf/fZHT14jIpclOTlY+XSHDGPR4+7Ybi7QTpfcTzjbWlTqgodEV8aQlzcKk+XV
3D1N6aC7AmGBZxcrivYrkZtOIWDFS4wIW4m6miIQ0LKEVCiXc5MidePBKAEgxqHyJ3XN864s
YVPerisdh+dzGc7CPM5Eu8jEQ+2CGwCJeL9wQeVVXkpMtkoDiPW3+azENBa61kOrhTQYE/2s
mJhypYulLniqOm/aQtIW1M2rCzKY28yqt4T7FHGbUkHebY3aUl9vcJ72pgpJjDJjXySTWL5I
qFs7FKxEJHk14q5iwUAkmETFgQmiwEzdsFPYb3BLIDr9xYZX9eeo+pScUlp806LbKtzBmhKC
hE1BBPdoP/WuIUIDVjyh6zYk32MZXbDMdPNTSTQKdrgc9bSZ4n6BU2eqyNdfDZEXJPulD8Fq
4TYZf4RpzapVbCF/AWdskdD0FPqQFAgEhimEuGUQLJe9vhndryqBMxIibcJKnHbVnGR5v0wb
wTF/Mi8LxD6AGgPZO/wsEArB30G4HbtlM1ucqqsvvY4Sumz15RZVbcFHkiXYcTFQ1A7Nm5F6
sYYA48WabhPC5KoG9HqXWA4MaAhlai0GKVnV9qVQC9H6PMc9unwzGk/Fu23ynLtfV1oWZ6oI
kLXC1RSc0Kv23Fv0SAfzElsK0dtItIAi8k5ym84cSUc7c3DIsUTufXy72W1eNSdJc/ZreeeK
3Z2imgbOsjQUklInWZ3+IVK0IDXUfH2lp/YaoEXVEtc66W0XzqXIk/WUDjyS467n5UM5CK4s
47HO0EzgQdKM+oNBp9ca4OxVnQTa5ABYN8w2YZSceUN3XtqfdqaLoxuRZf9KxLual3hyUmZP
XEZNcXcTV93j/IVoP/FpvzTxLQsmobVOcTJxfSZferH419dpi+fbHLjUEPwBpoxGwSMoVxMq
yL002sUNGQTJnPKc9ENMTWykShntXRDRDVPpb14mu0emyRdQ9mo06UTTy9YwGg07SpWFB8Hw
gjCFuNaeZZ4e4Spkng5JFowZe4TbhHl6JFlFZuwRtfzzdOnloMjttn09HvTj1rQTtdrtPkwp
sWaQwkJ0xLGdrX+SlCK37/7wQ0tMTIkmnrZn68tmgsinbj9JwHJEcYIZ+zl4XbAbMMUX0qaQ
QkczDFx2GkfFVIzORgndUayMJOFEqiVS77xmTA41O1XclCohtMHP/wHQqlfvXycBAA==
--------------18BE35AF3BEBB466DF17EAF3--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019