delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/09/15/17:47:56

From: Kbwms AT aol DOT com
Message-ID: <28cd0c52.35fee03f@aol.com>
Date: Tue, 15 Sep 1998 17:46:39 EDT
To: djgpp AT delorie DOT com
Cc: Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>
Mime-Version: 1.0
Subject: Much Improved Version of qsort

This is a multi-part message in MIME format.

--part0_905895999_boundary
Content-ID: <0_905895999 AT inet_out DOT mail DOT aol DOT com DOT 1>
Content-type: text/plain; charset=US-ASCII

Dear DJ Delorie,

I have finished work on a new version of qsort that is substantially
better that the current version in our library.  To show that this is
so, I append to this letter the results of two test runs.  The first
shows the results of the current qsort, the second on the new version.

Each test run consists of two passes on the test program.  Each pass
calls qsort 10 times to sort a different kind of sort target on each
call.  On the first pass, each sort target consists of 20,000 items.
On the second pass, each sort target consists of 40,000 items.

As can be seen in the timing figures, our current version of qsort
demonstrates quadratic timing behavior on two of the sort targets.
These sort targets are the last two in the list.  As you can see,
the numbers of comparisons are virtually quadrupled on targets that
are double the size.

Similar runs are shown for the new version of qsort.  As you can see,
the numbers of comparisons are much smaller for the targets at issue.
No such quadratic timing behavior is demonstrated.


Total sort time for the current version of qsort: 287.74 secs.
Total sort time for the new version of qsort:       3.35 secs.


Attached to this letter is a zip file that contains the following
files:

    1.  fqsort.c - the new fat-pivot version of qsort.
    2.  lqsort.c - the current library version of qsort.
	This version has hooks inserted to count swaps.
    3.  tstsort.c - a test driver for any sort function
	that has a qsort-like calling protocol.
    4.  a header file, tsrtdefs.h, and five C-source files,
	with extension .cin, that are included by tstsort.c.
    5.  a makefile
    6.  two result files identical to the stuff that is appended
	to this letter - fqsort.out and lqsort.out.


The source files are herewith released to you.


K.B. Williams
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Generating Targets in [20000 (20000) 40000]
Sort Function is Standard Library Qsort
PlotTimer Option is FALSE

  Items  Comparisons  Exchanges  Code/Target I.D.
  20000       315228      77650  (R) Random-Uniform
              270865          0  (S) Already-Sorted
              270866      10000  (V) Reverse-Sorted
              900881      83589  (H) Reverse-Sorted-by-Halves
              477073      19998  (F) First-Item-Out-of-Order
              272199       6666  (T) Every-Third-Item-Inverted
              270865          0  (Q) All-Items-Equal
              281338      10629  (E) Every-Eighth-Item-Different
           100050088      10195  (A) Alternating-Pairs
            51016508      19662  (B) Bore-Sight-Simulation
Suite Stats: 20000 Items/Target, 58.131868 Seconds
	     154125911 Comparisons, 238389 Exchanges

  Items  Comparisons  Exchanges  Code/Target I.D.
  40000       689461     169508  (R) Random-Uniform
              581714          0  (S) Already-Sorted
              581715      20000  (V) Reverse-Sorted
             2043983     177877  (H) Reverse-Sorted-by-Halves
             1034071      39998  (F) First-Item-Out-of-Order
              584387      13333  (T) Every-Third-Item-Inverted
              581714          0  (Q) All-Items-Equal
              603311      22460  (E) Every-Eighth-Item-Different
           400120590      20398  (A) Alternating-Pairs
           198488228      38612  (B) Bore-Sight-Simulation
Suite Stats: 40000 Items/Target, 229.505495 Seconds
	     605309174 Comparisons, 502186 Exchanges

Total Sort Time: 0 Hrs, 4 Mins, 47.74 Secs
========================================================================
Generating Targets in [20000 (20000) 40000]
Sort Function is FatQsort(Median Pvt)
PlotTimer Option is FALSE

  Items  Comparisons  Exchanges  Code/Target I.D.
  20000       313077      81837  (R) Random-Uniform
              240010       4094  (S) Already-Sorted
              260621      29998  (V) Reverse-Sorted
              271539      83970  (H) Reverse-Sorted-by-Halves
              260620      19998  (F) First-Item-Out-of-Order
              252503      30602  (T) Every-Third-Item-Inverted
               20003          1  (Q) All-Items-Equal
               64460       9927  (E) Every-Eighth-Item-Different
               30005       5003  (A) Alternating-Pairs
               26615       6082  (B) Bore-Sight-Simulation
Suite Stats: 20000 Items/Target, 1.043956 Seconds
	     1739453 Comparisons, 271512 Exchanges

  Items  Comparisons  Exchanges  Code/Target I.D.
  40000       661261     173685  (R) Random-Uniform
              520011       8190  (S) Already-Sorted
              561233      59998  (V) Reverse-Sorted
              585485     178978  (H) Reverse-Sorted-by-Halves
              561232      39998  (F) First-Item-Out-of-Order
              544413      53404  (T) Every-Third-Item-Inverted
               40003          1  (Q) All-Items-Equal
              134495      21056  (E) Every-Eighth-Item-Different
               60005      10003  (A) Alternating-Pairs
               53077      11971  (B) Bore-Sight-Simulation
Suite Stats: 40000 Items/Target, 2.197802 Seconds
	     3721215 Comparisons, 557284 Exchanges

Total Sort Time: 0 Hrs, 0 Mins, 3.35 Secs


--part0_905895999_boundary
Content-ID: <0_905895999 AT inet_out DOT mail DOT aol DOT com DOT 2>
Content-type: application/zip;
	name="TSTQSORT.ZIP"
Content-transfer-encoding: base64
Content-disposition: inline

UEsDBBQAAgAIADKFLyV3SE710wAAAP8BAAAMAAAAQ0xPTkdBUkcuQ0lOrY9BS8QwFITPDeQ/
DAtCW6rrfcmhdD0IoiLivcS0W6ipJC+9iP/dV5LoHjzuXELmvcx82ddQZ0K9l4I9PS927N14
oyebvf/21AVUpKxupdbrBy7GNbrFrsaRB1utG0ELNiRMlsxoHJ94CvQZqIGZvcHRDH2Yqbg0
1/PL/Vv7eicFF58RlvrUO9QRrolomSFd68hXSfElBVhbwqbH8MFBBymiHa9Q8F73dihz5u5q
ft816ZfV7/o0oMxPFG6r6HJFkQo5KYEc4uw7P3WGgrN//Tz4AVBLAwQUAAIACAAshS8l2G1g
qYgMAABcMAAACAAAAEZRU09SVC5D7Rprc+JG8rNctf+h41QlEsbs2rnLVZbFKfxKuNiYNexu
ru6uXGMYYCpCItJg1kn832+656GRAMc4yV0+HLWJNaN+d093z2he1qDl/aD28sWOmvsxTzPZ
GAZmuALyqUiG8WLE4Q3Lc65Ap0f+ZC5HIl2di8UtTSLNFztQg8FU5KD+sQTEbB7zGU8kkyJN
IB3Djwsx/AHlADllEuYskwLf5WrMgWUZuyciMoVbDgjIRyASNZTTjKsZPkF6+WuEIkj8HTRA
SD7LNVGWcYh5TqMEGIx4LiYJQ0pzcZdK4Fooh364gs5/XLAYiCvfgPTFCtIk44pJptmuRSzZ
54ckXSrxtOafj9EaCP85sHiSZkJOZw2AvtL5O54lYqKI1uG48aFBRFgygl7j7w3oxWwx4Vkd
dvvpWC5RjkGaxnl9F6A9Golc2f0Dz2Mu63Dw1d++rMO8AQcHX2oyTqirhMN4kSlRMsj4WCQk
M4q5yPlICfJhyrVSkCxmtwpKOdNohtoQEd/o84znXJLX8mkajyCcsUSMeS5hqNwtmaL+9rLT
jerKvRhtIk2ICAVHwbeDXNFgpVDykEoIYIhwNpzaWIGMkVok2JIJKZIJLBIpYtLnjmf3wJU5
lbcVCeVUSwTfKnyRmcAkk73ESP8UxBg+GZGdRiGpoSYDPRHgOPgKoRRZMXYIFr53fXXeuThD
FIPRu+68bw/OCCXO+cqLIEe1hyWS8n7OFVSwSDC6lepxmkyCdxdX3W+aejXC/urP5oLzd92T
QeeqC0qYwdXgH72zvn21CetTZTTFEM4r6tzc9AenJzc3EfzyizdJhNWsZ5jzEHoQBT1Pz8qr
MPJ0VLJ0uqdn3QFcnZ8by1uD3KViFHRsDPQxBM7DkLSHc5Hlsg56cMFyGUXNCuZbTEMlLANP
oPyj5FmiISlpIhSOoFaHXPzEb6T7+2InCAKRSAhrUUiRDRbSH0VEuCJFf8nmSHo4ZRkQhn6o
wGrqJ7N5FhH0I0yaJTeVHQWDs/5AiWu0o3BBCU5k1vQ8cfzusnfT/9Du3ZwMroO9PQOyxmcl
yHK4G4hvzgY3vc77q8FN+/T0OjSOuRSjuvZLEPxLCRSeXPauQ5oliAiO4FUEXwf6NSbbUMMY
AoQLRy0FFcDXGgleE7AhhhDEyANTo8BCqZ+iqum8rnLRyJ4oG5gUejioDTw8m8Bxu38WigjC
y/tjlnPYA7KNmto/iIqcAKdnJ2E7CsI27LfglEn2QYzk1APodC3A3nqA0/agTZxqIYZQLTKs
PRBijSA6+EP7V0Q1+1xQLvE+Pfs+ZBEazaKGON4HrVb0ssBTKh54uGQ7VofbyEa1HhUQGFMG
AoAWiYXYlKC8zHaRDlm8/02c3rIY3rNMsNuY548kN4urc2yg13XgxG+6N7g6g5rWjxZoKUV1
YU1f9dxfqWVTRqU/DLCi+nX39p6KVNFUzbicpqMg+L1F2S7hYzZ6sUOym7SJJrMpE7qLmXsm
E9df7ODyE4kMayfpbM4yHsGjea7IRj4vzYXIa7pgqWk4xaNmnGe8rGCLgXW3kiPwBdFZ1SS3
n7WsGLfQsvSbetLFjHpjieG8Wekt0Jm+FrkIwreuFtkVBwd1u6pQGWT/8LtHVrl27gP/yIcL
yXU32pcZE5OpLKCAwFxn+j8OMFMZQTu/pMrGHqAImcew/QrzYofQA5pr2hG+WhMQmhNAl3+U
ndHHurIhy/DJxIAu7VDD9+1RVodaL+N3+olA1aMLCTsBLV0udPHBNGqojdMMQstBQTmApuML
b1qkRhP29uxcpLGVyIHhrnA97gHWFDtGXgExMjpZWFTK6glHyHN/3wwVg+BnU02NpgrL8Gqa
F1jZzJRudGhW+T98hdWa6oMzjqGCSz6wsge3GWc/WHIPjgTVjRVMhHvQij/8ESupZ/ewX8B+
MchBmWrCpd466C1snC7zOpwzCT3c6eW0i5uKyTSHP9N6KhTatJjscw0u+FiSMsXUNWYOmtu4
5jwO3oKr+9RKVB5Zh2bd1RyqN1fQWLNgNzYDT/qRkQ2Zk5jluRiyGAbLdH+pvO30w63mUshp
4XQ45ZJnM5HoIxGPzO8hjc1CaA1jQ2qDm0GgOPR5zIfEViQj/pHnuGosaj7FDA/wrVCy9u4k
tOCVRusgMPYd3yp6niYW06Y28k97NMoUGuLhI54IKEydnzqSzzyOFg+F9dBw6ImKSMEaLKWV
h6RGT8Ahg3hYNK7gwRo80ne9ZtoUGzSztkT4wp6DdF6yDRpU2dthY7NuewwyhsOkkek50C1i
yGSarcfUujlUPVzFtai4HcS/WuATifIeaNTC4yfpIpE8s6Y13Q01VvhrgatUuDqpYMERVggN
aR0Ntq45cL1TOyoKnPOUA0U2e3a75UGaOABHFGmZdy4iS4U0cnX2V1advzp1kMCMjwRLyid7
jaeuYgfn4knJVdkjWxvVrWL1whZPFny9Cr2FXD2WBIGndTkbq/mYDXlj+5RUhN/YBACp9kmr
0NNrPKhIO6i6B9N0Rfpp7H1JO4mQgsXiJzwitsv5zu7+tlFqrZOK1FZEcqntqgS4CTcclyIa
TE+2IchpovDycipiDkQFuzn9trDkVjWD1NJFgGXDKYyzdEbRQNSxzcPzekxjR8ZvDYeyLRdq
GptQkhvbUF2VsMe0hor8htHLd/ocxi2FUowY6CfJpeUx4MfYNUKSLjFQ29iWaQdVNX4Gdd28
Kl2tDo+2q9iObmHXja7TIYXWpvrz5pl+KzlN01QWQS2wszdNBDbtRSKqus0GN/nNgf0Gx1Vc
1xlrFZk0Ahpd68ap3XS5rfNW3XdUqPK4+/AvtrXW7R4emv1bdmd9Q0Ifef1SQfUZ6yrQliD6
rijX4TL1x3DmV6Xn8UG9bO+CpiBfF1ssv62plKfA7fB8IP3mYY0JdT9VtVhrrcX29lxzohuT
48VsvtqdPEHvkjm7CvUfHNtAZUv1P9PvOhDcpOGhov2EWW6An8TItye08EC6ZFSv5T5oVidN
fSha16op8T9koNOtqxJufZLLilxa6Sb89LU+ez2xZGpzovcoP5E0RzYj2ah1gF74zsrhizXo
6bH7SMD+F0KWlPx/xG4bsVtueMuVIBlmlN9ennLz5G3g3pc7vudzWtus2BqwoSiag6ZAn3i4
9efKx8OW/e2jDW9b6u/i8xQ3fSyOi68C5tpCRvlUuV8nVg935bJCmj1y46ER+GzXMIpxFTg+
9vZFCe3ZmhbnOjaiXHfsHe/Yd7AHYbGB3debxK2F8E1FtbW8YVJaC6X8MM0y3BE+d9dU2TcV
u41PvKVT3Tc5qEoO+8MON4sP5ZVPBG/dNyf3UQCC4E/1XaD4sLLtN4EC89nfA34tDvyAKYxM
Z4UDJmK4VrbO8m2OCB2g2TbqzekbK7uNIyP1upNW3RBQL4HHN/tgSZgbLi6lbf5m0lyT9KoJ
cdPp72eeUJ95579P3zqUkj4ZtD9jccyzgqfWaYvyYE66XJ9UJKTCPsZcpTProgtYjSaPxIFu
NDSllkfCHCustB/rKZfxPGdQfEKrzLOyF/3Dsgd9u8fEMZyyZIKZY5nCiElW1BC6qZWOvW+n
t/eS53+STBLofIB62Fs6tL86cHd1aHi4MZMQpsGwkAaTZpul4aGfSMqXzC7b39NdG/8+lZ0L
Dv/65WoG0vd87Id2/z6Dfl+6vvPkOlk6E0X3igQu01zC2XgshgIL5CVLEp5tn7fypZDDKYT+
XRYT6nSojt/QD157icQcs+Plxe/H3H1fNENoFTameT2y04el6UM1XSFT7duI/6HP334yGSxT
H9EMkVGoQWoRlCWpzK+CHm4ARTkr7NbK+RdfTne2ny4yH9OOiT0BrQpaml4BPFwPiFJWmVXF
HPExW8RynT8HfDY/Xoz/aeP735aGiWU4Sef3ffVcB+SAT7/lXBCp4T3c2WI4xb/zNM/Fbcx1
bpqzPH/2uSAdqlkZwbum1QTcbzvp3RNe9rLalYqIncSPLA74DVkkHYfGYlEEXxekXtuNWQVI
2yqY8dlwfm9n6zavOe5ND8jPYI+AqHeOXBlIh89ey3OdDhRvqlrt1mycHip5HK80Rt6F9F2Z
Z1K9zBvTXbrI82JnxkRC999YNhmatF2rqcFd5FJl/+p6cIO0bvqD63fUOfRYNsuLCxl2poFU
ghYRa655d6ff3a28w6fzRaJe012llfdX352kI54HxSUh6L67uFiBO/vIh1024wpwd0ykdtfC
XLBbHoMCOmfyLd2OutSfrvCEZNcpJnNJLz9z2HY7kXG5yBJ41TRWN8XlP1BLAwQUAAIACABs
dS8lyU8mM1ECAABYBgAACgAAAEZRU09SVC5PVVSdlV1v2jAUhq+HxH84l0RamL8T965dYa20
qh+w3Uy78BoDloLTOaZa//3sxIy2dBLUF4lj+T3vOcePnC/aaqe8sUuYK7fUvgVj4QdBYcCo
e2XA4uvncDBrnIfpxt5701gwLUyVv23D4uhKV0ZZuHn02XBwUzd+btbawfXDv52nX2eT4WA4
ALj0et0CfG7WD8qZtrHhY/LnfqXsUnfrlf7U5wKX4/NxlPTp9INiioqin5e4pGE6usvgTtmq
WeffrFk0bh1FzwcJJeBtBIYkC6JZBqe106p6ymNhutoTCSQITnMpZRlE34OTftSu1f8TFZhT
mdKjsgimo4vXovzXU36h6kfdvumZEsXJc5rB1LjW57Fz+fXG580iv3aVdntqTjiiqU9IIBLU
8wwmwfspn6+Mq/oYlzasvJF812i6+wzFj25jm+pO1+aT3xtV76kEY2LbXClJPJHJ1nViliu/
6m3PzWKhnbZ+LwINvjzNeZfC6DT6eu1sR2d+o0IL9vMVAm91ApWx3rMMzhoXOh2Nw3O9qVWk
cDiYbYzXMPPKtycJqa6qRNtHwGPEqOQCZvq+sVWw+9C3oaCScfoc2Y/dQWOyI/fdcLNncIdy
iMBbU1HyQ+DmoRacOIUSS3QI3Dw40XTU/FC4eclZyVN6pSzK4+DuPEk68aPh5owxvM2YMsSO
hZu9B25MGZMJMYIRF8fDLXZwY3QE3Hx30WEsC3w43OwNuMk4xCgReQ03LQgmmL+Em/OClOwl
3PPGqxq6f0C83U8AwYULexFcmaihY8pj8G7zX1BLAwQUAAIACAD2hC8l0G/rHecBAACoBAAA
DAAAAEdBVVNSQU5ELkNJTqVTTWvbQBA9S6D/8EgxSJY/5IsPldViEpOG1Glx3NBDIcjZlbMg
rxppFQol/72zu5KqxLmk3YN29nlm3psPT4dIegfDqecStk/rqkwlm9wJ6TTYkd87Ie/ymnEs
Dqm6n9x/6EOVYrnYWRC1ZDxzNsurM3qRKSQ3L8dnRb3LeaC5jkj+9bSCz7k8pzo2lBtj7Lnk
Zap4hRQarkQqx0xUqhS7WnEGKwVCwh/PRwjnwWuV/5eor5uLm+V25bmWy+kp9APP/e25oNMI
wYarmzSPPdfC9okEunN+gPBNhuc6MFneHvyKAmNM/XZ82u92vfxOIbNJFFC355OoCyu5qkvq
qo3S6Z70UogMdhWYf/ppdXp5++XbNnixQqIwG/RYCOa5h1TIpk3tEl1sV2tDjFlkzmdLmRdy
r28RP2/pmqdyhGvFzvgj3fXBfK4fOq30ovoMRnfUhGdFCV8QMIshsEjQ8sYIQxFYJ5LlNHO9
4r+UWbsEz0ZsaBzNAYQJWrfYgkTZA4e9X3X6J3vpCqzCadv9TkxXhKmvrePIj8ajswz1J34R
4TfWAjTGj4jwHtVDqRr47yr8LIVUmX+iaykyDHIG/R8uDmBiL1RFqQbZqFWrTcoAyzHIfsiT
EdXcCmom0R9OtyVcMpF57h9QSwMEFAACAAgAbZUsJW7mjqonDAAA4B0AAAgAAABMUVNPUlQu
Q61Z63PbNhL/LM/kf9imk0ZSJDvutTdtXKej+NHo6lclublMp5NCJCRCJgkZAKWomfzvt7sA
H7LV3pdmYocEsO/fPsAcdOFELzdGzRMH7ZMOHH7//Tdw+h84lak2SvbASgkn1zfvh1c/7eP6
TBuIpRMqtdA9eLL3pcqjtIgl/GBdnKrpfvL6yd6TvYNu/8kebDGPiPl3L3v0+18wSSSM5Fzm
zoKegcPX21ytpLHKbWjlRKQKheVK7DOnQZoCc7JgpJVmJWPe4M2RjJV1Rk0Lp3QOIo+hsBJU
DlYXJpK8MlW5MBuyILMgjISlNJlyTsbMY2n0SsUyRl2EewXtw05J3ORN0tH6HE8pC6i+QkZR
aSUzyrVTQWSkswzP9Pil/XXnASvvO5XPvW5KWjqwTMWGGZFTZjpN9ZqOiOgu1+tUxnNJPF8B
/PHHhJRAxeMicoEb8rB65tZoIDOJ5QpDuUS7ppu/dXMP3khzJ1O5YW0VOjrSuddWG/v8ObNj
y9ElOipIC8H+1gY0rhrIhJNGidTW3lwrl3iShunMiqVgsDCwIkaVnLJkZ82DBOBhWpxJ4QqM
O4miyDJklGU+pbn7cCUVq0HicpHJHcjKdb3NyEM7mUvTVtRhA1NJkmJwGsMc46ok4WhXpp0s
nY4BQ2VXAUIz3PTAKHVi83XhwC5lpGYqQkKFbNaGgJd7CFqLVnqUT94OxzC+Pp+8G4zOAJ9v
Rte/Dk/PTjHYgzEuPH8Og6tTeDecvL2+neDzezj7783obDyG6xGzGF7eXAyRADmMBleT4dm4
B8Ork4vb0+HVT72K8mJ4OZwMJsPrqx5KPSvJmEVNCtfncHk2OnmLr4M3w4vh5D3LPx9Orkjm
+fUIBnAzGE2GJ7cXgxHc3I5ursdnbM2BrwTM8t5q4/ajV/xyXRjQ6xw4KIQfHya7sU5m/igY
9JrK0YGJihJAl84E7hpCschBIKmYe4Qj9dffPut5pKV6bRlZiZonHODDl8944duXz4KPUdTk
LbrsrU5jDDOSEH/SQOWWcKipbqAOLjHSJnjKJ3AiLB7HqIl4UdiyblBFNDLSJmZxVv0p4Zvv
UE8nbS3wkiUSL5K1TiRhA012egkzlXMREMjdkY2ZjJXIax9+GUs8I1te61brm1broFtrxyrU
qnNZDhSXJcm/d5B4Mf48qBl4mrg1ORtPaAn/BDZvbi9vPozfDW4+nExGrU8A8iPqmaO383lr
vBbLE2eOAF68qJ4/EwOZWhkY7eQEn/wxNH9GdlqqJxGgLa7Vanfvo2zZaUc6tw5WWsXQ7UHz
rXMUjKIKnC2FURbNL4FDZm0xvLd/IgFRcIwwVlJESYjd4+PeV4GixovKIUqEsY8JsooCCS7/
gqKREM4nw6nGwN8XKrojzPHSuTLW9RgXbF0IlExl3U2WheNOBTqXZVWeER0sU0HthxHtW4Cy
kVGZyoXTZh+gzW3jqef6lPBIcG5KCgk583qkAndRJjPLVBynstTFdojfLRduLnyBgcIoSRFv
MSppSKCAqZozv7XKicckkXmPzxa2EClgNJ0K1f/ArsVyiQ+90A59M8v0yovdYSVFRDM7P32w
TyoxMzUvjARdeKMJDtUU4tbajwOCs8n2IPaMbCbSVBr2t5FRYaxaydQ3S9pPhZmH7ZUSaKGR
S0nxmYVmrqihxqTF2Gm2h+oARw6VoWaRSktRQ/959FRe5j5Z+6Rqn1EqBffHYunLn3d9s4a1
kVQXBiLWvuOdnxRzak15PVrFwgkgP/vRKPao6qcql726BtslurGfao73lNynMtm3ggLhebUH
3h3BIp2nG6460oegLH3sDfxLcjp1oQv5ROn9ZO/eujYlDnSnwqIW/jkTHztP9j4hiV+IetBV
+LOgn8URrSvCmDqqjnQzFeOuy5bVdqp7kNARWuCMBHKExwPVZNKyh8fKzpAX2ZSiO2OWInLS
MGSaEfJIJEZRYQwhvYoYZck79qJNdMFtB9AS6APZxh4ATvztjH+chz75t5PQL4m7UjqXBeay
dYyAJx0saKJhsFoCZ8jNmmupy3DGGqL9AdkMTOY9Lzacqzko99w21qjgh1pcKkM8Qme23oG1
QIc6B+6cmyqfe/hZ1LNYoqKBydLIWZjrvJJBfF1bqMiKMBgq33iBQQUUxOOGs319ruNZRVDY
Rp0GiHWLUQYkEjko/CF6eAH39k+Cehs5H9BLB16/hsPOkT+uZkA7r1Go7wgdvx64AUbgGNrU
3NrtxSJw7fRAIRt4CT8CLr7Ct6PyPDHk44setF22rMwh0UzUKY+iDG5w6PEooUB773jfk10t
Fo6/jknMj2jVK3wgWa2mGJTSgR+YccsrXGYP/fnc1GwBX6BztjRQ5Ctqt/i81fDx3bsVmUZ4
pkspiM9d9eIFvS7C64JfI3r7TNUnldDu91XDJ0GF8E/IYILKWGaqb53IY2Hiuq/ubigl1YF/
oKGoXca5x2ZXjj6CI3gYyKCZQk8RRr76Cth/qkev6L9j70AFL0p3bNEtMHR0cMt1ZRC4Zi1q
Jp9CJPqVZ4HvLCovJPsJfzw2lEeox/lKpAVnhQIxo9mSTPdIIFGKgOB1CBKQZgE/9FmzHuRy
zabRjOCpynRg5C5KyX7Sq1koZlGR1Ie3TSDSuXaatdoNr4aGtZemRoq7x+e9FluZoHbaokIu
cIRVfFT5LqT6//Vdw4gtHejEq0r9Og38woNc8IshIep0qJKBHYb/VMkQRO3OCLWVpI8T40Lr
OxDu0bRTZ8ajWaeipWnAV5Lpphx+dB6KcKBpzD/TTUWZiTuaFSzNW76b0ocF0qHnq6nvXR+5
7BfLWDhZ0UbaoCyXbnzTmxqRRwlPHiK620d3Fs4PGH7SqujazfFM85Wxou0QqEjdymrgzwjB
zhl5KJU08PIlwc9h+w/qhAo11Kf5i0aMCbFtbjiLsrdTBrcTVdUS1XlYRuqGUfWLFg0/oQrV
IWaHETzLBZaUqO2Y11mwJQFVeCSBKpX4WAsgDX2iVvwqtG1piCc+P7zdv2reXUIHtzqTME/1
1I/0IpM8OFGhvacrhwab8KebMJlv34N4biA9O71yzKY5mKdeZP5g0tUYc5mupKVBRxd43qps
mcof/WcRmlRy7fb363GznDORuu2vlOThlz2O/QcHefXkAUuTY7vr55u/vZhuTajdELYwzHZY
xtHOAZbG0m6yPbqiEjT0hlmVIpkTpA4Diox0hcmZgsaSY1bVv0Zc0ry6vOKD54sSlJda3ske
bF029xgUYfTJOdoe7l6X18eBESsUIFfDt4GvpDFChbsyI4x+laD91DjqrQ4HqiH93F9y6Zsa
V6n6YlleVDK6zU4f3Iq9jhTDakquLsza+kog6G5k6atjLlM/kVa3FH9Hnm5wXxguJY/4PLy0
tcO3Rr+bk78wdKW3euV3nwYfjjYhvRxQQLn6KrutbXPE5cGFChIXBJ5yOWH93EGTXKKq8aU5
56V6e370PKro8mzHVawRG54vxRLPsmb+c0NZGne0uAdTVbI9SB9Ri26qVxWtqJwI/WsYCrt1
9QuNMtoqV1tYeUcFhG6/ZVAJE6xwj76+5XoNpsgffGhPNktp+vS5MXDZrjP7AOdoUfh2lAnF
F/AKghxC/hD82+HvVOB+y/uHv/cCKyqL6IAQUIy//Fi24vIyNzifnI0CkvmaTOCb6+pOEypl
2anLSfdBMbSJmlF3pHJZXliptwm+sgdOGAXlizFbU32fCR4xevoIZGhejTCfpbhS44xyFppo
Cd2DAYfn/djEbtpGHs1bXDwPmq00URXvL4490ae/naZYSX/jI708wvr9cB9TeQUzPyEyxhjw
rQqmIQcI/f0g+zV3We77i064sVT3FX6Mdt5MPnObbH5cbdPH1U7j/82eOmscbtr95Cn1Uzj+
B/60KGIH3RZ/yh3DeDK4Oh2MTuFi+GY0GL2HX89G4+H1FX3d/+V2ePLz+Ho0aQWif06Bnf83
+BeGq9w92aNkalOTFWYelR98uviyKhsqAKn6gcz6MJ6MbqnTG3cjTGZDg2ys7BOb1jFzO9qx
t/J7q0d79HRe5K1jP9g82r/++UTH0rbqng5XtxcXj86dfZTRlcgkHnyaMqunO89ciKlMAQ+N
y2y+UFND/1n5S0nkyZx1PKx8VdGXvdWPAfDyKCAufFP/H1BLAwQUAAIACABidS8lspiWBmMC
AABiBgAACgAAAExRU09SVC5PVVSdlc1v2jAYxs9D4n94jyA1zN+2e2tXWCttoi1sl2mHtDFg
KTidY6rx389OQldoq475kNiWn/fj8Y/w2Tjj82DdEua5X5pQg3Xwg6A4YNC8hsDS62e/N6t8
gMnG3QdbObA1zELuitwX8MXe+dxv4aaOR/q967IKc7s2HqYPu7OTsy+zcb/X7wFcBbOuAT5V
64fc27pycTH+fb/K3dI0+4X52FYDV6OLUZK0BbWDYk6IaudSCh73B7dDuI21VOvsm7OLyq+T
6PkgEinB/66TaDaEs9KbvNhmqTVTvCoS7Ry3FQy+x0zm0fjavCHSCCmF27miXOkoujwUZXfb
7DIvH019KGdSIkm7nFrr2OhgMoSJ9XXIknPZdBOyapFNfWH8y4pJFHULIVLxg/kQxjH3Npuv
rC/aGFcu7rzV8YFNN8mmstHV2fjXJi9fqBSmVO18EiS1PN5lHdvlKqzatBd2sTDeuLAXIVnL
k2u7JdaxhMFZyhuMdw2f2XUeLdjPzOPReP87nRaCRN35EM4rH51OieNzvSnzRGG/N9vYYBK1
oT7tkGq66mg7Aa5GmGIlFMzMfeWKmO9DG5szTLjG+Dm1J0CoovGCn+D9b77ZM76F0ky0AGGh
m/be55srLDE7ku9G1N02+Ue+CWJUqxZQLKWS8ii+MaIMye7nQY/mmytGlexC0TiO5Ps1m97n
WyBKcVczIUyg4/iOl4sJ4hrtHKRN1+/yjbViSj1966gS+Ai+2St8E6JHHHGm+SHgAnGKNJZs
H3COCFZiH/B5FfISmj+D9JE/jSZe+niWwVebNEyOYpgYvzn9B1BLAwQUAAKACAAcjS8l/BF+
Wn8BAAAGAwAACAAAAE1BS0VGSUxFjVJNT+MwED0nUv7DSPRADo7EHiOxtKTNqrvdDdSt4ICo
rNTpZuskxXag4tfjcT4aQCuRi+fNvJk3HzmDgu15lgsOWSUhZprc5M+Vhqc6T/eqktpzPTeg
6zie389oOLSdgB85BBUEKZKiyLmEXWrsKF5MflCDyB0TAkjyDcg8AFIceKnzuoDR+WpGV755
l5M/0+S377mNgTlTrD71XKRYjAYK/LrdJNc/TV0ne8LOgurBcx1HK90g5Cx6jvgvhybrZTSj
YL5LZ3ROk+VqQ9Hjt421qOF2QehlU1uyrW9HPyUZVqfV0FJRlTsmd0Gal9axY7WSrNz2DlnV
A6S4ViJXundoJfWWZyr4a+ELy20MZc1yw64pPAWI3sbwKRKaMdvtmakMiCKctbmTD6SC0RhG
j5gk3iUtvpbU3SMcdDso9snfnwM1PmxcsWceGj2h7EzkAvBE6+Y+/c8qOdsWHK5agVrDd/hX
l3tcnUk+7F/zA5AaCD+CUbM0GA8Yshjw3wBQSwMEFAACAAgAmGEtJSaS7mYAAgAA9QMAAAYA
AABSRUFETUVtk8Fu2zAMhs814HcgsMsGLMa6XtadhqLDhvVSoAF2piXaFiJLLiXV7duPkh2n
CZYcYkXkT/L76f1gAiCrwbwQKO8iGhcgUohy0gSdZwieI3TJqWh8vhxQjt5aP9dVHAielwDP
I/gOFFprXA84TcgYU2gA9rO/VEGmujJO2aRJf6+rugL5XEvwoeg1CnZH5TUJ2jd4aO4a+Guk
BI5hyfkqOfaUc//n1+MjcHLRjHShkMs8+cRqGYxQDbllGSLQu942Dgij/MLEvmccl8kVikxL
EBM70iBtzSYOErq73/982kvyOBlLDJ3FPs+eCZ/JZEJhQVdAaxb4DPNgpB0JHnwKomzckcqN
yMQQtxE3e3LAlRdhEtYUFsYRuacYyk0pBRcM8v9e+GQrCVwaW6menZPOkU3ICDY8udZaxOQU
FJEXE9+ASeEE6DREH9FCwc30nAyTLo399v5QjAYjJbQuM5Walxu1NpTvJO/UEb2qAV1PocmC
/9/V7NGBOkG+EgzCz2oQiwrGmFv3OonnRZ5eSaWIrcTnpEX6zouF2+LlobaN+rAuaYkWGzhq
6kIzFESZjnH92h6dnPn8zrCjwsJ7eXMkqSz91UlQDsp614t9jZJDjymwtFIOLHyWpyDeWhNi
OcxoykP+nr0aAB8f2nkMP9DbRoz9VFdfbnfXN7vbb3X1D1BLAwQUAAIACAD2hC8lWZViCkUB
AADBAgAACQAAAFJPVU5ELkNJTpVSX2vCMBx8bqHf4cAXq7bKYE9aQfYHhIGyyV5L16Qa6JKR
psKY++77JSlOcYMtL20ud/e7SzseIDtZGIyjkDCtWsnSUsigAy5IPSHLumUcs9fC7NLd/IL2
13U2Ewk0N62WDUpN9vV74nDOIKThW67xVmgDVWGhtz+l+9fYHkQFxishOevn+dPm9ibPYxwO
J+D6cbVZERqF68fl82JzFzDVvtQ8cMH6fmPTxNaP1w3/hekpHUSbqeNLJqoo/IhC0OrMltKM
cK+Lkij+gBAgQ1UrpZ3RNAio+EOht7wxx7uZZTaIq2ZV1gIeSqyFF61VI4zYc3dshJIBnMJr
6EL6TjfHJL2OPUjxguHQOvj9p3/Yst8CulOrsCOE+zwQDRRjo+7TGgW+5/KYzpraXsPM1Utw
lU4w6DqSE70THp+P9H8HfBTCvgBQSwMEFAACAAgA9oQvJZ4sHLEFBAAArgwAAAwAAABTRVRT
TElTVC5DSU69Vltv2zYUfpYB/4eDDJsl20q2vToe0KbuEMyzg7pZH7oOUCTK5iaTgkjZzZb8
950jURTlyy4tNgKJJfKcj9+562oIU2fB8Krfwz3FtMq40pcxF83ekRz7qFkhvHgTFd5KFvpG
Jky9/zDp977gIs7KhMF1rB9zdrn5zt1TuuBi3d280KrQCUvV5ebi6LZPXZ5hvmKa+M3RIAjp
TYF9j+JYFgnyAS2r3VXOYgU7BcsfKoO8E+Z/FqG7N7c/vXg783aSJ/2ew80nT8LQkhhDvWGI
jIELXR+TdNDv/dHvAa5UFuDDxNGcwGhkX4JaCoXrUA0XGDhChClgKOJN4dvojR2QAAOJOjwF
v9WYwuJ+PkdIj/AIN8dg6tS/eCXFQMNvQu5BIQTE9Q1fxj+LizHKel1k7xn/WKaYA0X20Zqn
erVJ9Y2uGVRHyMKQte5wAAMjRkieVcfrfcQMfF/x35lMWzsDCOFbUsIVOvaF0IpULAn02fwa
tvaexvLbbV7InBWVLtwc2k3yB7Z7sRSai5I5V5gnG194QvbfwPV1647Gb0bj+b8qlOXDryzW
yq2VZqtTLrHcbiORhBkXDBRZ9/8UiyFj6mX4oljvTtZK7Uwj3dYL8gs/eVWdz6DQxWBWSKkW
AIbf8UlUrMstE+g3qhrQrNhyEWmWuCiGcgflNkEtnnJWKJApeZ3lOnrIWF1bGoEpMg5KN26+
LHUAL/Gy4hH2GDFCIZGwUaVw0QUJuCif6ZcapyljPum+/xgp9ECV21P4egwLqd9FgrxRvbbP
kwbpHzNybbhNoVSsgH1Ejo+yrO1HagzfM7aDwWz77622GtSLmqBNp2DSMKhj/PRkk5AOZ8uV
03/tQdtmJrac6wd3Hthktg9ftT4MrJeIj+tb9KBzpwvo9Hnn8QC0Q6eaLbwKSpXu7/kHGi78
5FBBgXqmlHnhG2lnirQyUxiEA3eIjEbmrGmILmtz5LrBpk5nlFA3x3AORgNA2nOm0aoqau2E
OaQxGnRGxxGPtjH/DaMuHfxPmbh4NVu8heXr1zWLqyH+e1nyLDG1APSNdarAZV3JKE4BoBxm
QhecKeDCdpVK27BbMw0CWVVBMns3UuwYdQsJ93d3szcQR3aAoSO4hge25kLBnusNRBQTc0rr
odzmVVONYmKaSy7oVyLkkSRZ1JhyL/Z1IR8Y0kxQ8COlkH/n8k7IAgf7mCeK2rH6lxxHxNFj
IkGQs2zfnedaKYZm6NMbhqLJZaNWoXAFQmpg21w/Gl2F0ViWOi/rGFEEHI32w+eMLPsYZ6Xi
OxaiTySR99x8iZCL9bIBrLuvm3QL26+e3UZh8rQtX3dGwtTwbNtA++FzRsHpPL+0LX1y4uqu
YrdLnQWduJ87fwJQSwMEFAACAAgAF1spJRV3dSFsAwAAFwoAAAoAAABUU1JUREVGUy5InVZt
T9s6FP7sSv0PR0K6JFWAAdu+lE3qbRNWjSZZ4kp30pWi0DiQq+ZFsctgY/99thNTZ6S9AwtR
+5znOcfn8Ut8MoIPWoPRyXDAbYzWLCEpPb5FraUP9eEFTXFmtjN37RD+AvzVt/koBMcLIPQC
DNgO8dy9BD/wLoPJAr02zQFkKfDpZwVJjCjCYYBFouiTKXxkTQn/RQ0AdD8387/GgWZfjCLO
iYlCbBwcyO6TE7itcUrHcLCl2V6I0OG/bw4Rn7pdJFCmQFmdFTfN3FqYH+D5ggN9ifO5nwHO
cgI6ClyvQbkSNSuLQ9ZiBUpUsyk4FDmTq9DeBpdDBPBmi8DBUgOIEYLTJkSWCgRfmb+Xl1th
kG+AA6ZmmBlpZ3hqpFbVsZwJy6lVnXWs58pqVecdx1vNYVVvO753XZ9Vveu43z9zW9X7nuVt
q0AIOb9Vwk12b0HAHftK4+4/qFNE+ePCkf1CKZD9Kn2QvUe3IsnSzkZuREorsd9Sg7KE1LWV
mhqikakH1IinYLp2z5FKR4XuqLaL0CqqOM8E3clqxVXEPm33cVudFX2HzP8ToZF8G2byjxGb
qOFAjMRRn6y/xQ8Uqs5Z1241eVj1FfdlDBmp7xQ82dUq8xxHL2zqCneXi2iO7UVoTEw4gq8Z
WScUik1+TWpx22WM5BSyAuK6jh9gonivyqc00pMig2bfSZny7knbG/G+KUVlDxURFx4XDk0X
fhA5S9dYlQVlcFdmCYws0EfmeEsRFiS+RJKj0CJDxJ5+hwMkGqjYTYhtEMrqzYqhsKwZJpSF
fDgc/BgOgDexmG2L65vVGAEIPctjmJZ5HhfJ0ZW49Sf1DT1uPgQCurqNa8kZjTjrrmX9ztjk
pGB0y1J1cIuYi7MpWqJdsPoBrspVzLKyEAsm/D3pYOR9npYJoS1Rwrzr/8iK5/FJnWeMkaSX
aN+TlRvnZNwUyHsij7BuWHy9JuBk/N8O4lV8TdZjmfFWpJwRuqqzimV3BKRPEn/yhZA1ildD
FOJgOd69r9UW5HpM8dxzxRMDe+IFEu7Zne1jQn5AwXn2rgjxbBpFJjw+akYZmFu1w+cY4IOJ
/J5z2boM/Wzyuczdme1i8BynPfvknpG6aDYoo4wKWRzD6NYPI7PZitqUtWDu0z0iE8lr5uLi
ovMAgo8fJeoXUEsDBBQAAgAIAEyFLyU7UDHUVhYAABtXAAAJAAAAVFNUU09SVC5DxTxrc9s6
rp/Vmf6C/YL1TnqlxE7tpK+TNN1xEqfxPYmdtZ3udtpej2rRsVpZ8pGoPO7u+e+X4EvUw6nd
Nr2Zc1yZBEEQBEAQgPx0Ew6MP9h8+vgRa6MJTaKYbk8s2VAC+hv7zw8nQeoReJ1Qz4+2Z29y
bf5V6AaFRurPiWgCfwoemfoh8WA8ftu7PBqPWbOlQdPQZ2glMAkSkutV0wEJPX+aJ6dGk5gy
3Mn2rPb40eNH9G5B2FcrDZEmNl8QhVfW5Vm/93Yf+/8Gacj64WLQfdcedfLE2ReD/kn3rOPg
9KLNMgAVYfkeSKhL/YlBnzHL5eFZ94h9F0Pkd4vcUhKHlmU93YRpFMM0DSfUj0JGx8QNYhef
E855vh+N8p/au5PL3tGo2++x9fRH/dH7i85QdS0bpWg7Kax9PB6Ojo/GYwf+8x+jkSNmrcbC
T2y4AMe6qOCJ7LIdgx2Mlm7vuNMbQf/kRK5K8e468j3L3hxGMT1JQwdObBubYLMOif+/ZEz1
v48fWZYfUrA3HXsShQkFBWh+cxxn38TPRlhHs6/DmHrt+I6RZ3NRYINmbozg+wXY+SJmhABC
3jdLNszyovRzQKy3JHzrpsnADT1LrqKEvRv6FJc6SEOEGfYHo/GoMxyNh6PBJRTI4ay5iNm4
Yz8mEyETSBanvHIF2RCcZeTGV4RmQ6qojqOU0YvEiIYyuuFXfzGa+YnAhpAMfQUYTngfmMXB
xv90fcrnM2jKyWSmLMedk/blGTKnPRhZzeZZVVfnwmot6epfWDtN0bfMAMkx5+1/jXEzEJUa
URBsBQIvnj/ffZ5XdoWlf9w96XaOrVbW1uuPxrq9KfX5YKU/pccdbizcILiDAZmSmIQTtoq3
QfTZDeCdG/vu54AkUGG7v4F7mZVYamyOojSkCSNoMnPDKzan7UVsjX4IxJ3MAA8R5x7rU42X
66M1vHEXRzTeX51DaqKzaPITeSMZI0y6ODYsbhSQOCvjwVE0XzD0SWan5RBUc64MZ35C+YhD
n8I7MqFRDNEUsIuN9iRVcpSwcWLgkD3DgZbJ/TzqiyCiI39OBDWjwWUHZZu1+OEVMKx+TLw8
RfwAtIbUFagPoFnHobwBB+HcSBluH1BhMxCBhYPIQpLTajbrgJY8nMRkTkLKDy41tjgsUsNQ
AffxnPJDN4BheSorR6u0StYoosj0RCwyomzsxOC4l8ZIeZyGlsFEYzCKkzmYaJEtDOVy8Q1h
BSU/YvP6n7+QCU3AjQln+FXoUuKBm+xpuFXxDYD974ZeNLcsiz1nE7HndhAT17vjkxIv3/8O
B5JrEieksv+01A+f7+DUDa5JYsKdsOcTP04odCmZQz+lSkZz6EbsucOw3cFo5seeAO6GrAUx
Z3D/4GQHvD+Bzh+pG+Tp6mhEHf9qRmcC07E/5bpLNVybI+J2j8vohcuIzGE6ZM+HUYz8n1EY
+vM04G5TDmiVfVjZWlUYREOZG3BGKCM4ATpzKfgeW44/vTNFXdkhy7qZkVC53bYDCWEI0JJG
rHVGIFuCZU2i+dwNPQjwEOLMXMPAFkmWioJHLzc1nPQPn+AAaoPhu9OT0T867cPa/vcxRXPl
2KUujO4WgivuZxIkwlgYrNiG0YzccR3K1rpAz4V4ig3uhPrXPr1rTNDmQkwm7kLDIk98AbcI
ItrwcNKpHxDgzE0TEmtYEvKNueBUoAHtL6iaRPFXwSKft628OjZ+lNebyBLOEWT240f/fvwI
0deE7jcuQ59RNq/VZbPU/IbQXN0sFfr+5sbnu4bQcw3AFbyBmtbop7QRTRv92COx7ucK2eCa
LaCUZhsEBbwnaXCdLowUqiyGalU2xmo1bnA11j2ovo0hDm5k+lt7/OjPfcOrsv7Z7o3s/gL7
8EitA3vupXPH+vj4kWV0wBPLEm0teP0abBvPpmhqazl3oAE7+CEROI45zaDdO+6fW+ijqab2
2eD4/Xg4GJkenTV4NxjyRhB/O4Wu07N3Q9m1m3WdDIajcf9yZD3L2kang+Nxt/fOem7OeTYe
ts871ousrfNu8H78anRqvTThRuOLdncwtF5ljYd9nGXYPbd+M67CwL0YGLGu0fuL/ceP5JNw
2a/oB+VpfFKKr25rPXFf1FftKzdNYjf0tic+7lPWwW8RpdaE0CTwE1rquHH9cuME/RQ3vuId
4mp8dE3PWGM7vrKd9fzb1VzH7GIIDYgJTeMw0S6VdGncOHbvwE+49cJj1vrZhBgXxMePMpLE
RRV66Vxd9XC/hPPhaBMigADaSKZwoLEZL8rAfQD6zg3ggK+Kby+2ohm01Qj07fb1eHiNM+7D
1pZqccQYNp/lT8GWF2RbCg9sGZga0HLqkPVoFPAGmgyP9W9FQWfHronDc0YmX+HE9QNh9zcS
wNMz9MgtbATpx7DGL/7Z0usZVrYebqWPnwlkKMtsDB5nG6mmI2tSyEx6MzCz9VMOrgzzSdxa
rRyLT9pnw46i6XNM3K/45U+x4D/VyoWY2WIUovnz54u1jGE0pM9MEnBDFAlyRWJk7y3c+HTG
PQ727e4BZDozPtLYwObFaCDtT1HkpUSZAZbbfLzlLhP4rS11Gytw1N605RQOW+AbML7eOfB3
aMEeHg45qNclqAYDg+bD7MtbErYDys9AaMAVCUnsUrySoOsSTcE1HN6FhGrVoVmXn9vb2w9m
fJDPjx8ZFNp646Twq0AcqDtq2Qj5eQvjwwE098GH13oMGhbfsChKsfxP3AxJG8NgjDHScHC1
ysE38/r1IBuGPsrwituz0pZxRz8Rngtr+6xvI7z34bcqo+17N8v8fui7ySnfsjp/Povks5hl
mM4ly8UwcdkWw8w+Ffg67A86w+7b09H4sD3sWK1Xze3MtYJ+rzNmveftcWcwsJrbzxVa7l/Y
O87akiQv/0gOA+YOiZ2bBfh+qhCtLQOPXN74oNf6iLKEnRFMkDJmYTgQNPCbKuBTXwKzT8WW
rQPOof2irKsdcxjCHKdgiw+Q1BnMZ5gyDPuFU+V4166dEzfkuwXcp8Yjb1qHs0iErPBr4NXh
1Jff+Td+IKrQr7nVT0G3Ko4rsahLUXEkEcctNbfg/cYUD1otGBWYHsy88ttJUVfNuFY0BYIw
YEcxhMSNA7yhO1xjH15hFXnfVtc69+DOI8+f3vUXhr/H6NOt6JU2USbDCFR4S16JhdeKt+sb
l1+pxaH8E421BipIIqqISbcazN1tpBEIj/8QEf8hgQgmCvqsb5GiNQ6nYYBP4KUDBwdCG9VU
XKfN0fAUdhCAjy6eI42cMvqwBS3uWXKtt0QWYPWROJUeLRnz0GdU5zq+G81irxteLxX8m6eS
75QH8HwMu/nymv8LBD+j8EeOKjX0CxzAbll8W1xmDpbKrxKLL5UeBff7c5bZN22/MeQL2uLd
/W8jsH0ecvgFbspJnNAunWP8tigBGJrm1oDcTsiCwpSHe4UAJBCgeCTUengZyEj8Sa5law1r
VaXhObOloJsF2/YguzUIvXnxlBJ7FE0h5jFBCNP5Zwxa+iGNFHW/YJckad+7RTzRetL9V+e4
5M6pjGrWbKsaDQewVMTuXZ6dORJU5Va/+3zKdpzP5cBmqWn/YXVyQK6HMT0N8kY5ltHaREdr
ZyIrI9Nhv2CLFV0/xRRrvfxSdgqKG2er/i15UN63gYjZ+oKH7E62UcWJ0Oaak60hIJX4H1AQ
vKLG5yUhF2/8ZVLg/YCuf59yGjsnTfE37PODbInIlVTdFPRxaSfkjxSTeG4AGMV2fsGmaLL+
H6Ivv2QLLL0FtBO4i4Qt1p+jLAxk9F22Am/2QxiSSRR6CZh/P3MfOC5xP8UdMKmyrUkQTb4i
z7FUApt4WDhrjRbYmO2EiETq+66tINj6NArHuBAfnfWPfh+OLzqD8bBz9CDehlFxxqjAb74b
oPpd6+KYBgRYQgNP4ErUzTS4AIXklnKNeNiEh0FgsR6Oy/6FG8+TjMUqscETAgtqhN2z66ce
1njjxlcTvBK0DKkvlNSZ4J1bMum5cp8L7TyR7ahATn5u43TKnBx+5Qgpr9hpx1cMnEbpYkFi
e7NA4vWH1ifu+HD44YJMOnFsZhSwJtXavAx9XPwB+IlL6Z2N2e4wshPqkTh2MHotHmEPH6KU
ihiSrK2Up6acVTYKCF1ThGZAk3sAF4NR99yIk/01A3zyBBTgXw+wyo0BGlek9r9su3YZfg2j
m1AVJzHYlN/1D2BjonIxPMteyQ6d3iG3PrVbThZbWyUjL0qRhKURZRojklAstrkigPl+LG0S
9UgKckWcBVrxLrijAtdH17SdTDBnaW8W4Oq5msU6PFG1VU4xrKGLrl4X4xpGOZaJbN8INSgR
zGN6o6vJ8vikpEGWIMxNYpSg5SYoLnVrq7iDTj1fvcnXKwvQnFKsRnepIKwRbtFdB3mM+RAN
5NHk12tgq1pwcRpz1WKGNdfbF9sbZdubUVAxVOiXsf2yeE7xQrPKrKszZ9Or+FM9GCyJqiTA
xFnFEnOmHDu+McvrjJHLSdcgeYyFgJkQDEGcqSFTXiQ0tdEY1rH6XxZR7UENsYisMmIXBXqB
P/e5dx1hOhlSNirBW/ZGgBVxlCTKEKllCkcrmmp3yDA8Q0KzRHRilzTcaOj/zmtOUBBkLaiT
WWNxeEhuG2eHzGRKkIeJkhcLyhuwiKNrH0vYvKw1CuE0ukGuXSZEVao9tANcPJhF1YM+kyH7
Ls5iMyh+FBDWOZzEhIQctT6F/vKhOf/Lhxb7f+e/a47yannXx3gj2eMHQ4KFB7hGPKjmhM4i
jycxssmzaXMohnchdW/3GHC+nf3LMH6QxWaf4AOaVf6PG4uvEfv6eqvx5oP0wpNPuRlL6CSq
Pf4gauxE8VPV3AgPYq8NeLDnfhD4CfepecwlFkV2WMDqLMHTAziOwv+icBjRGRtQgSNkE9yP
B1e/B/IBVIZD1InW4ZDQG9w3rruDNEyqUbgxRRw9HhlDJRZlpgyPKGFVw6tHR4KAytG8Nvm+
0WKH9qCPRZoxnGOWTdV7HssaYBQd4WmIEscl/JRcjbCg8Y+Ul2v7U7iLUp6qATcIeAYnVyz5
MbwX2Zamr3M7CdLEvyYZVVGoy84FYXbi3Iutka127lONiNGZX10Jidldro6GaRQE0U0CNvsk
MUzchED/d6esO1lVNFT9ZcXIu8VS5DJJ8qrAq5TLfxX1yiUU5VLrHIqsovlVqZy5hOsbZdmV
Vc8lJMtrtjlBywqjl21YW1bZqjcbcOOMQlxxpdgujeVWhRc6lAdEKc0N4C/9sCGMqAReHw3e
4MFyFIVskSmp5dCuW2pboqtz684XAUnKYrWBFcCtZhOa/K0E2OIlz/AGPvRTinepbxhgcU5w
np2o9/XwoszDRQnGlK9w0/yQexBVKjaNozmbnS2eEyBzn9wGJZQsuGPSMjq2q5C0paFNoGSI
63AT+9izUJtTiQGXgEd8cMctjSpOTxZk4k991KIq3vVM3jV4pfiP8Q5r0KKUivJtKu6I7Psi
pZW8W8rpZWytwrIWp7kxRcdIcyZfzc95YNjmB3LWjFf5GkLRCqldrOW7TEjM3RPrl3hpGU3S
S9Pz3xeXtDstFCUuKtkAZ/1Mro31oxvPgxQAPzlCv15IxTqlJN90GqTJTAVM9h8isIlXBBXq
w7BmFAQJ8IghRNckRiEVgTWltpOvP3fHzBeixIaZJNkqeLmZBST1hqk+HXQ9EE12tkM3M3zD
wtYAGkLd6SXLM/Q5JD9fQ/Jvp0JDqEyi3x2Rb42Id3JCz59wy9nrA3/d82E1JU8bvg8Loyva
9W4zlnee27WNzQQ2Ws0EwN6YOCD1wxagorgFy1d3YQ92mnhXrfX6DSSfQWWP8mop3ugRYz/V
IXvvRDY90C7kXv6FBj8IUuS0jiKDSKdMiLBXeF59JWSBdtz1vAcvQslTWLkXsq4YIxTiZdRc
veMFd5jUO5P8JOPl6nyzymzOVObCLlrM2mUP96xzDO3BoP2+ZgBj0EMHWQ2DV85E6PTDflb8
aCQv9mW4Qiv+k0zh93kdtH7l3tYppqz6rBADqauachH/VmkNU7XNyVlHIZVSQbeMh4jDduP5
dnMK8wQF30S0iad0c7vpmMa8HGb/gdXkDgj12ikGdbMyc9nD3ynlZZjGu8qZEgcpajEeSSuq
sZygrvAJildRYCVYMhRW+0jZzFOcTSWWpChv6RY5h3nYFg9DHdnNXkHJWFimA5eEISwzs1IW
9bKgL9/E0uDD9vHZ+0YZhZWlBB4sSSxjXtAAyn1X/kX9TkeCLwj+dIslLJWKaK6fDJPswPeo
eIiB3JrFGAr4NE7qcO6H7HNIJuzzJHYn+/mibqmC8pivQ96wmL5CtUHSYbmlaRTZL88JkeNx
0KL+z5HZf+948aMz9rD7ttsb1TmOTLyzOGsuw6iZWMoY5spVcz+MMugcdwedIx45X+eXDfjr
5zN8dUxENCEmIsSaqESduO5oYHzlJQoIOomen3wVr7OiMIzxx3HwGm6tnKzSRHD/nEfAvE4c
4+1MvPBr4q2pBNY0JtGChHYGXIeaW6uDSjIakXiFePMkDYILl84QXKWKzDZ849WyxlPWtGBN
vM6rDuYUTeN9KhHj4CsXTFJck1F8HbE3p8iyhWwFxM51LanitM3cwVGUBh6PY6rZ5Ox4t1Oo
F+x7FBu8WZqiNArYrM6uXXsrSkzQc1DxMT+ED5iEsNmHg+mIT3JduXRUHVQ6TuiXqp638CaV
v077iTpzliaucVCWwhXR42wc8tRwPuDvUEP7XoM9qPFMdM1IBZtOimapquez/Gw715JVOeAi
pdANPf/a97BWX+aPeQibB5iSSCnNd83AJey8MzrtH3+k9/FM7y8fcdwetYH/whIbFYj8QO/y
fNwddc6Htj4g1S8QWZU32qoBurhdp8tEzGXH2wO1p755BBv321xelg/bVFF7qBla8SN07GLE
E2lYMqOKf1jaj7rP9VRV/up4KmYEwTy7eBBAyn25E30xlUU3DZM6m1KfEn0i6QSrHr4kK65f
3TQX2sFlggwU5379xfg5HP5TEE/lJai7fbxtWg8e+3gZeCg1kgJDUIwffrFFpZdjHuBWzjs9
yNzRAxCvwVVdHor7KCbXBWTmZioq8tum+OfkGcjfyFdpTTTeubmMIuKSKy5erCjcxZpOVQFD
rk4hf5FuVlBeQVerRFdWXrcaZa11KWutRtlOmWNZNeZqpO2sS9rOaqTtLiENy4VXo2x3Xcp2
V6PsWYky442C1Uh7ti5pz1Yj7XmJNPOFl9Voe74ubc9Xo+1FmTb1FlrFTdn8ubJKMl+sS+aL
1ch8uRaZ95L4cl0SX65G4qsSifpd6dW2+NW6hL1ajbDfSoQZbwavRtpv65L22xLS7jl/tJtQ
OHMqo0n8xLw3oqQOp1JESf++BEKgb4GpbHS1+eEtj+c6bExVnNv8kQkhX8ZEGTU7GGjhDsgG
BqsMH6AuWrQjoBCqA7uuz2ujmKgjOCKrgqqYIH2p/GV8jdgaH30aJ1jaxX+N0c6jerr7otlU
QRQLQwLLAF80oYGBg80XGTwGD5bAM2A2YhNsnHwTn7d4xEFsP8Yb9MBWs7k5nUeeXQw5tDDo
ZzDhmV0TP+UmqgzYIvdgwxPRDPavCGhseNvsGSnjWTl1naoMeeSjR/8HUEsDBBQAAgAIAPaE
LyWfUxOuyQAAAKIBAAAIAAAAV0FJVC5DSU6lUMtqwzAQPFegfxhcCrZxknvzAB986M30eSkU
R17HIkUyWtltKf33qnEMoTlmbjs7szu7ixSzEyBdSBG4j0r7udLm6lifaa61Ue99TVgpa7Sd
t5tTjn195IJ3fQGm/W8vIRBmYG87Bn2S6r22JjsEZTTWoVJeD4Q9fcFbbAmdI2aqpxGXxDic
XN7fPeePhRSD1fWYKFZt5ZByIsW3FAhoOqeNb+LwAXIuQ/TqyvzpobgFbhhRBk6Wo3JHXrXx
VP3zBVv01/qR4hdQSwECFAAUAAIACAAyhS8ld0hO9dMAAAD/AQAADAAAAAAAAAABACAAAAAA
AAAAQ0xPTkdBUkcuQ0lOUEsBAhQAFAACAAgALIUvJdhtYKmIDAAAXDAAAAgAAAAAAAAAAQAg
AAAA/QAAAEZRU09SVC5DUEsBAhQAFAACAAgAbHUvJclPJjNRAgAAWAYAAAoAAAAAAAAAAQAg
AAAAqw0AAEZRU09SVC5PVVRQSwECFAAUAAIACAD2hC8l0G/rHecBAACoBAAADAAAAAAAAAAB
ACAAAAAkEAAAR0FVU1JBTkQuQ0lOUEsBAhQAFAACAAgAbZUsJW7mjqonDAAA4B0AAAgAAAAA
AAAAAQAgAAAANRIAAExRU09SVC5DUEsBAhQAFAACAAgAYnUvJbKYlgZjAgAAYgYAAAoAAAAA
AAAAAQAgAAAAgh4AAExRU09SVC5PVVRQSwECFAAUAAIACAAcjS8l/BF+Wn8BAAAGAwAACAAA
AAAAAAABACAAAAANIQAATUFLRUZJTEVQSwECFAAUAAIACACYYS0lJpLuZgACAAD1AwAABgAA
AAAAAAABACAAAACyIgAAUkVBRE1FUEsBAhQAFAACAAgA9oQvJVmVYgpFAQAAwQIAAAkAAAAA
AAAAAQAgAAAA1iQAAFJPVU5ELkNJTlBLAQIUABQAAgAIAPaELyWeLByxBQQAAK4MAAAMAAAA
AAAAAAEAIAAAAEImAABTRVRTTElTVC5DSU5QSwECFAAUAAIACAAXWyklFXd1IWwDAAAXCgAA
CgAAAAAAAAABACAAAABxKgAAVFNSVERFRlMuSFBLAQIUABQAAgAIAEyFLyU7UDHUVhYAABtX
AAAJAAAAAAAAAAEAIAAAAAUuAABUU1RTT1JULkNQSwECFAAUAAIACAD2hC8ln1MTrskAAACi
AQAACAAAAAAAAAABACAAAACCRAAAV0FJVC5DSU5QSwUGAAAAAA0ADQDQAgAAcUUAAAAA

--part0_905895999_boundary--

- Raw text -


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