aboutsummaryrefslogtreecommitdiffhomepage
path: root/unittest/data/parser/input/mbox/jwz/101
blob: e7442f006bc9a0d807fc87c7a4633a6394174e90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
Return-Path: <ysato@etl.go.jp>
Received: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)
	id <AA08508> for nsb; Thu, 18 Jun 92 07:05:20 EDT
Received: from etlpost.etl.go.jp ([192.31.197.33]) by thumper.bellcore.com (4.1/4.7)
	id <AA27316> for nsb@greenbush; Thu, 18 Jun 92 07:04:45 EDT
Received: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W)
	id AA29286; Thu, 18 Jun 92 20:04:04 JST
Received: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER)
	id AA17361; Thu, 18 Jun 92 20:03:55 JST
Received: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE)
	id AA29968; Thu, 18 Jun 92 20:03:47 JST
Date: Thu, 18 Jun 92 20:03:47 JST
Return-Path: <ysato@etl.go.jp>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="=="
To: nsb@thumper.bellcore.com
Cc: rhys@cs.uq.oz.au
Subject: Re: multi-bytes richtext
From: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)
Organization: Electrotechnical Laboratory, Tsukuba Science City
Message-Id: <gFrys.ysato@etl.go.jp>
References: <gAe+o.ysato@etl.go.jp> <gAfnd.ysato@etl.go.jp> 
	<1451@‾/Mail/drafts> <gFqTf.ysato@etl.go.jp> 
	<ceDpgPa0M2Yt8Gvww6@thumper.bellcore.com>

--==

I'm sending a copy of this message to the author of richlex.c,
wishing my small change to richlex.c may be adopted. 

In message <ceDpgPa0M2Yt8Gvww6@thumper.bellcore.com> on 06/18/92(00:32:43)
you Nathaniel Borenstein <nsb@thumper.bellcore.com> wrote:
 |Can you
 |possibly send me an example of multibyte richtext that works with your
 |modified code (as well as one that doesn't) so that I can try it out and
 |see?   

Ok, I enclosed a picture which shows how the old and new version of 
richtext process a sample data in Japanese (JIS).

--==
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Description: richtext for multibyte charset text

R0lGODdhNQQCA/MAAP///wAAAMDAwAD/AAAA//8AAICAgMPDw+6C7vz8/AAAAAAAAAAAAAAA
AAAAAAAAACwAAAAANQQCAwAE/hDISau9OOvNu/9g2AViaZ5oqq5s675wLM90bd94ru81yf/A
oHBIBPmKyKRyyWw6n9CodMo6Uq/YrDZj3Xq/4LB4TC6bVd2zes0etd/wuHxOr2/T9rzeid/7
/4CBgoNhfYRbA4mKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0
oCEDB7m6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPkzgO35enq
6+zt7u/w8fLz9PX29/j5+sTnILj7AAMKHEiwoMGDCBMqXMhQXr8P/xpKnEixosWLGDNq3Mgx
3EMP/hE7ihxJsuQ6AyhRmlyZMaVKljDffewQMqbNmzhz6nJpQKfPgTx/Ct02k0PNAxOsGLLQ
R2mapyWWAmhqQioMq4eyasURoGvXGkPDRgsqtqy0ohuOJqWAVQKer27jJoUqQirVqDvabt3L
t4VXt14DCx5MuLDhw4gTK17MuLHjx5AjS55MeXCFypgza97MubPnz4YxqL2gF6oPpXHpvrhb
N2/f17Bl/D3As7bt27hz697Nu7fv38CDCx9OvLjx3ryOK1/OvLnz59Cj4xbda+3av4DhymU7
dXt369y5TNX+fS5cEtgtjz/PXT1p7OtPB05Nvsv82PjzG5HOv7///wAG/ijggAQWaOCBAlLH
C3jjXRdeeXKd9iCE3jF1xIUTooehd6ihViFT7YUooXYbcqjfiSiShuCKLLbo4oswxijjjAQq
uAuDHr51WYQZgigeeB72aKJ1EjKIQVNfoZfag0FSmOKT+AVA45RUVmnllVhmqaVtNuqCI5P2
MTnkh0ux5mSQTt3X4IRcOLXkiGKaBx+UdMIm5ZZ45qnnnnz2yWeXuXxpZJOWEerjkYgaCWGJ
Tn7X5AZFvrkkkGzWaelrd/qp6aacdurpp8MBihSHGKKZqKM7pnqqqou2OmZ3pmrQ4Vyw0kep
oJfmmlWmoPbq66/ABjujqF/Cp2aji6ZZn6yr/sb3anrpZUjeZcYmWWutc9o3p67cBsKrsOCG
K+645AZHbAp6ueFHut22O8i35cYr77z0enouCsfWta0d7Lrr77rAJSBwAgEMTLDBCCdccMIH
D9wVwg9DzPDEBi9MscUSU6wxxhp3LDDHE4Ps8ccjl1yyyCanrPLKLLfs8sswxyzzzDTXfO+/
OOd8Kby6VezzyQxH3LDFC3OMcsdHkxx0y0mr3LTSKz9dc8NTV2311VhnrfXWXFN8s85gh50f
z7ldbDLIBRftM8ZsW42y1Et3DTPcNNMt991456333nsTWyi6dh0aQr9GNEG4DaopekK/ggFx
eOEzPA5YfEnmS+vk/uvJeSGJlv8ouFsBO7y20IH9vDbUB7ctutlemf5x66lHPNjrso9eesiw
py001bRT3TbsBAPPO+6k53677qo7LDzfzDfv/PPQa3zvo4N/WOnhknOQvWyGf44sXtUrjvj4
kQN+Oefv0Vr5mg2uj7663pONm+uk8050xmqLnvzwEN+P+u/+s9/pVse/jJGsfv8joP3ul7ym
/e50akOgABUYvQpa8IIYnNr0KgU5SHmPL9vjygdzQL0bhNCDT3jf+yzUvs1x7oWb80BpQpfA
1YnMaEp7oAKT1kDX1XCCOfxhyAYItR7ukH4SNFvQHpa2A5puf3bLoBSnSMUKbvA6MESh/pyu
Ry32XKtV1VKSs5jFln2VcVpddOGIztO4MWpIjVtMlJLeKK35qOc+dCQjfQyRI2iFcY1litYf
9xhHN7YRj5nLTuCw2JYVopGF68NcId13lzkmskJdoSEQfYdDAubPiUdUosJ8CES2CUZ5Bhyi
/lRZRPr9rHaou5gpnRjBJ1bslFXMpS53Gb0rSlKM1qPcmBI3qy+6aVKoEt+zVmUmYMKqRIYi
ERg5iCoN3YqLxWKU4KT5nmg5CE5YFF+HStUecjrommA0ZzBJpcwyXk6SbZLPO1t4vkfyyJrb
6ZAmoZhKU5ZOh0IcZdxiWUpSDs2grnxb/zqZQCOO7JOpO6hD/gvIy4pa9KJZ8+U022koMvUI
nK5CpjY9t04L8ZFVzmRUMZGJq1RZEp0eLRY1l0kaIomIVCltVkgzRyhr1VSmNoXfTts0zzUR
Jju/dBP6Iumjl+azPfu85So9ycpPQpSiBBViE6l6xIlqlaIMdeVUg0dBgYKSrFvVHVcDitG2
uvWtJtPoODvX0pFGs407BeYx9VhUFn6PfX9DZ2BZqkh7DpZVMS1sTklawo1KylEgRRYxMefM
80n2jH9BkvaEBKkYUouoTFUhHOGpucWCMar6K97uFIpKqabSrK89HhKLlrvZUlC2A40dP23I
xLIqDHita2IthWe05cH1uMhNrlxD/iRDzk42qB2N0CMXOcKh/vS51l1pO8MTKcSeCZsljS5K
pxlZ03pXu5V17Hi9O1Oa+hWw8iSt+vBpVM+OkX0uHSZUfyOzKCItuSzbnwX9C+ACGxijyz1n
eJ27Te66N5ktbbA4+2oi9NZVvebN72XP+9H2irfD3xRphoEq4u9OLlYVljAzqclGd8I3fSfG
57QoSeFkohhWmnTZ7Zhm3ANvrMfRI7CPh0xkDCZYuvYcVLY+p6buRvOSdFVyknkaz9H2VD5e
RPJo5RjMt9SHjVn+64cFhcgiZda6ceyjU88I2RmDubuFXLEym9w4vH6Wsm/2o+Z+5GQl57jI
gA60oAdN/miPfY0NjRWbohetIv4W+tGQjrSkkXtoRJuR0ZjOtPxuQ7vgzs2BsE2ZkIF2wVFn
DW2hfpl/cZk3U5P6aq5m4ilZ3b/WAnfHtwZybhHqW4FVOtPADnYcNm0bsTItq2UVsqv/W2oM
ovq1qo4ar0+9tWVv7NO2JtoNtY1Wtb6u22T99kNZSW6E/VrY6E43GYhdG2MHeNzQnjSzq/js
vQm4a9aet7O5He5+11rWylOttov3aqd57QKjwRdJq6LFKZxwCezCbhWE2sHwLXy7Fwcbu3mS
UIHrO3irDTVutyrAXA9N17Hc8RJ391uP67bTsqttrgd+tOGCfLbBxaVsUV5y/paL9Xi4lrnP
b1m7mR/Q5SCnLdCLjnRyI+9k/PY37sAt7oBzG+BxE+7Nbyt0jp37AydFV8Ol8HAlRFzFE98s
+FrD1/a2PWwbdwkSxwpW3LaynwMk+SzPClEeuvvvXR3dWntOd5KDlZYBrHcoj97r/wVwobCk
5Vlj12sAFr7fhs/84ik/eb+3Fquu9ffQF1r11Xo73LoebuI7rsCvN1enbM94CtewvUR3LwZm
qrjY4p4Sd2telAXF+1T1ntDBX3vapC83QH1XfLqzNYi/55/il+/55zO/5AcN+CZJCcXe7tD7
sKU+ssOP/NIXF+Yxp+3nqQ7u0dt88NM32LnoHGZt/p65poOkHFXyj3/25D+PbnRJeYUogpRF
ijRJ/Ed/G6ZXmGUtl3aAz/Qo95dOW/ZXEcgmZZZnWNZn7qFxqNVQtEZ+xrdJyANczbdAHoM2
DnRVtYZ+weeCy+eCK+dpuyZ9REeD40eCTod9+VN0CBV/qFdAPphbs/M2T7NbSBN16/dvp0dw
mHdrMwh+10dQ++M3zMVSKlVj0nRjMPZFklUq6vRMCiaGTxVh70RfOWVhaniFhiVS2zRSFQZN
ccJOWLhd3DSAd/hkMAV3H4h9BedVOph9X7V18faDwHeEVGhLyUZEjYc/yKZ4bHVvvreDD1RL
l1eD4hd/rJWIwEeEPxh1/jG3hKiEdagHilCYdT90b1WIcNUxWTfWWBZWUhi2Yms4hqYVJl12
hV6YXjnCZLpYSeUhcc0UUq/IWVDWcFm4XgMIYRboL7yHEpMoiZv3eIPYdz8nfDtYeaLYUIz4
eJnYjUrEgpwYjdOGhHhXiXwXfedIRFJYRNHHT0CYjY+oftm2jQSHdSwHcE4oUNb4VatoAWrh
inOIZrMoi3N1adqVYow0gYgFZyD2kKVVVDDkU12GV8JIi3K2jNJVhrJHPa9okbi4aM9oAJOY
dB+ncpCIa4OIeDR3kiiHgy3XkiSYfv0YdKMXRIfXckTXada3ksK3cznUW9JokhPkaduWVstj
/jyRd4P6NpQ2mXNA5oRKuXRWV3M4eXdWJ0RWOF7FOGG2aIe6yFgmVoeJw0VhR1jqtWAaZoxr
OZYEmZBSpoy7CJY/lVjByEF9xmgjKWhDKW9++ZeAqTdbSZZnCCYYuYd3NpddyIvl9JW5J4CJ
yZiO+YuzaF9NBV5vGZaDUpeOdYewh4cDGYtu6Yx/NmQqF5iomZqqiTXzl4AUqS3pNST5gpBQ
9oB55GX+Z4CPKWaJhJtbRn+/GUbfk5ddRJAByJkAuIwTSF0N6U04BYFXhnGWsperWZ3WeZ3Y
KX+suCB6gD1+oZa6YnvqVgilmZ3meZ7oGWiu1wbe6RfMmStRNp5i/kCdc9OJ73Z8upRvA2Zw
2DgzUqNsx4afhZiC6Zk36ymfCJqghlOe/FmD0iag9HZgURSP/glvD3qh5daIEFqgW3OgCvqh
IBoE9BltGYqhDipF+llBy9aXzeY2JWqhHMo1HhqiNFqjPUBDT5mKpKdQRpd07keIp2k7RyeT
T8eTLzeNQ9R1WWmkRNmkOdo7rEV8VSlcN0mURZpy4AdAMpmDR4qlTKd0UwmCQRqjVTOjNnqm
aLoC1PmN8LeNmPeCU9d5ccp5EZValydB5hh6TeiHcsqm6ahKUjp3jyh4WDmFKCinXIqnrFeo
4selZEozZpqmkjqpYBc6mqiI1teooMen/jnZp+CoqQy1iXXqqT8pcuCIitQYiOQ3Ud7oe0nk
iZGIqUXZk49qM9t5I5Saq7q6OJa6qrIqjaDalD4qqobHjan1T8o3fjHIqTIodQInhUaokv1J
rJ1qqLsVeaAGq8bmT6eoobUqM5G6q+Kaq2vqq22qjZe4qcvqiZfqfNU6eesYr+XIjyKIiou4
eScYW/mYr6laiKr4q/bqqN8KM+E6rgaLpuV6p5/XQNQKiC04qnXnrpZHqqmWegxkrhQLsZqn
hI54r5nKiD50Qyf4qqnmjwCbrpA4sC9TsAfbsiFKn096c9QIkz+XlD/ao0tTWzE5pEsqqo1Y
pEe5pTE7tO34/koGBZM1p7OrGnKhhIPZKnJKu0BgqlUkq7Itw7Ium7UIOqKFBqAVCnop+pcs
arXmibVae7boxrWE5rX++bRkO6ZkW6Bmi7Z0i2lqG7d4m7d6u7K36iV1+7c1erd7O7iEW7jm
1reBAriK+6GCa7iO+7hkO7eLO7nt0riQe7mYK7eIOypgcBjF+XokRLmh+wZldxUMmrmom7rV
KblEYF9P0UhTthqx+y5jE7tYUbpVMLsierqq27u+O2msKwR7RSG6K4tXERvFS7uyYhXJ6xop
xLu/G73SC2jBiwRTVjmS04GyYWdR8YAyxL0N2E2Q6WLLa0aZdb3o673la03Zgr3m/tNZ2tM5
54u7xam+uAe905u/+ktpm2sG6Stf9/Vezbi+RCWdBTzARwKL7GUsJgW+xCu+1rNCGFgV8fW6
8ZVGVWY5hcGZjcLAFPy/xrsa+Lu/JFzCvFS9RYC+5JuYJuUCSWa/31tj8WsX2iLA0xVILAxP
bnZeNawvlPVeL0zD8bu8OYxfzSvANky/XDDCJtzETnxBKNy6OKyFgXTEB9xNJ+TA3xvER8XC
N7y+4PtlRdzAWjzD7YPEV9yFaZxGYTy8PnzFVowvTPzEdFzHfdO/ZaDCVDzDtce8MHzAcYxZ
agzHXkbEQyyRfuyeySnDY7zCCWzI8MvIh/zIkizCjmbH/picyc4TxUOgxwCMXygVyDKcJhTs
yGDHZkX8uqYMyqmcxDmsyuwVw6w8y4OMxrbcV7D8ybJMybp8v5esycAczF3DycI7xZ8cxKts
BHzkxmDnQqVMYWLsxYUcwcwczeT7xZVcwNg8ybysWdRsytbcvZBMy7Ixx8J8zuicMsT8A9oL
ndvSzhEoyvrXf3+cwC3WGmUcwGlmvt4rv36Em50lz/XVwAHdzwadvr4JgYPjwHhUz2hgzukc
0RKdMOssuhY9NhB9aoaRfDDKNWE70fVJZB99wnh80SYtkhmNNaD4W1A30sRjni4toVW6qQLb
ajNNZBV90jqtFZaLN3uHpWfj/tMwHdMSmoQpSNQkGmk5zRXwLAcOTSdKnMGwaZsM2cwGKMjl
S8BX0NN8U6WyZmqzozVhrWM8d9Rw66MrR4gsnYQ9BpU/xkNnzdZqRVxfjW1GLddHqdZuU9cF
ttQkZJl0INCdTAVPrabLzFeBPGN1aViAnU9Rbbq/rKJwTY+QJ0vl99ZJe9mWXdNLZIhHS7KF
sWt5nVX7GLI8Jm4qSNlMSTwhOKxDF1bax9k7K0v96lZ+zdTJTLqP3QO77cLsfNi8HMLdrMZo
tMMrLNhckdLVBteh97A6WTdJm2+lLWoznY8q2NxuWnXard3WDW3dHTX0eN3bjd1r/WPmTd6m
p2rM/p3dF3XbJsTMSFW/ixxnbFbYLfzIVM3Y803f9x3c9nzD+z3Pijy+iwPcEGzYX9jYxm0e
2ZzCyi3W6z3eEr6kMePVZd3SN03b0T3W6/fak83h3H1+eB3Xb41W5X3Xm33erN3a6U3WKi51
b+XeiNPYL1bfF1yYB/44Eszgs+yZqLzN3szKG+yL913c4onV9mzA3NzICv2+p7LN8kXjfPDg
Gv3i7neEF47iGq7e7P1Qbf2fP03eYn7i3/3in3alY37ina3laj6nME7dVo7UeCPjvI2QPYxn
UU7j4dzMC1zNev7nuBySTA7KRh7oOm7M5KzMa0zQbAzPxRvkvdzbLkzl/iod4W9+6VJr10SY
4Ws+4QQa2+hN5ttm5tIX5s7a5qMWim3u5p2e4q1OhabuNJbO6bpE5zRwz698TLjOxsRNOLq7
53t2y2Qs7IMeGoPe5HxOyGuny48u0PZr4MyeBVxtb7NuhK5O66ze3Niup9ve4aMuii3+sN8+
3uG+sOOO6Uct4Zxe3bVdteUe4lx+7XJ+N7YeOQp+5wMt5IDe4Meuw7kM5d2cy5Hs3wT/3ws9
zlbcvotOJjoe6eNMy5Juyb5Raq1tpTY7piUI1hWf8eqt6gZX8RS+2hj/kl9Ok2mN2XbtcyQO
4pW95S7f8iS+4kHLpHBV79sb6NKM58c9zb2c/sY8T+jwbbt+HsuerCi2i8q73OtvPMrQnuiI
PYy5jpyETekgXfWZbPO4N/Skdc8Lzs+5PfBQ3vUAD8RAHuQ/X+gIny5FH8c7zuRLtux5Tldt
L+AOR/VWf/dPjPUurID9vUXzi8FA/2YFjiSCj9VuJvS7jvQGX2VYzCz53OiNr89WDcY6Ivlb
jOT6V8X//c4RXxd2j/egT8J6v9Okv/dTHtmZSxiRluWhL2mjX/p7ARqyP/ueCwXTbrjTzZfz
rtKtrzWvD/vArwa3X7jvHmjdHmS7j/eHZt8crHDvjdy2/wXMD/f60vmdDP3kifqoW/y9s6No
vto6yfq0bdkWe+Xf/g/+L+3qK57WUQnyV1/SNT74ht352G849T+695/k+NJIzmv65PO8EGDk
pNUknPXm3X8wFEeyNL8gyNKOxdyVdeF49VL1PTWYjnPfK5cYbnDC1rDIUy6JOGjLmAQ6ac5d
Vrvldr0mQFgcHhzMZ3FqDFCv3e9xAD6ny+l3vLud5/f9fz1AwcE6uz1CPjvEwzlGxDzHRzZF
yUbKSsw4i02KL89P0FAQKKwno6KZKo4erKvSEJ9WVKumpJrV2tMpW5SlIFbcV9Fh4mJjDbiy
M7OwyEOcyUtAUulENWg4qLvIPtJmZ229a25qSWxxuXNCdXHz8eo/9rh07kk8b3RD8Mzx/uzw
/Hr1og20BM+bPD2cFB5j2LBhKl63kJiiGCxIRYwlLuJiciMKxxGkQIrYKIQaLZJHHK5k2VJE
smXM7LWbp+/Nv5s2cwo8V20PvG+PGPlc47ONo2f+eCoCx3QdU2kngd47anRpGqtBi568WTRn
HIAIrX0jCnar2a3l0Gk9y3Ye2joKObmkW9cEMF0db0HMm3Hi37vCJPrF27fXYMCjhJXUm5Kx
XciRt8CM6RZr25lfG122VOgt5oBTxzbTzPlzZqyiTdNc7VZg59Oxn7aWLdtobdSsLWsF+hoS
JaSXhvrOzTo45tOq2cjdJNm55MKIXU2MNSui35C+rldv3H07/koeHhWvGnmDieDn6dUje6Ns
2e7cxIujFX2VNtnQ7tLsVIs7rer8antGOd3mk28bAgNEELeluNrJM6GAi0qqfBaEELb7jkqE
OQvW89Ch6frijqIRn5DFO41yMaxElQyLqMXGNurhu/Jo/PDGGyl7z0DhEqzPN/t2+6k3Ahc0
SDn5cCrQtgn9szDDIi98csnSeJQSwakOxLC4A5V0Ej4m/WFjQw47wfHMT0QyiQqLTHTzPFXg
NAm9Xkr56KMf4swTFpVkfAxPKmRhTAU10TRUMh3RsOy4367cUrfhnNSysyMDQa6r1B4NE7lJ
F71Nv0bFhGu1fTQtS8HZaEPKq0yr/nS1QHK6LNPMQ2u19VZcc9V115fai+mA5D6lqhAvvxwQ
NFQXyVJCKmNLFtkqO2Ur1kqSXBZKBp2CNCr/fkoVoWOdrZS0ZoN1tJFZJ+B1XXbbdfddeD1J
VKaalPqx2CGtAhcbJcMJrth4ANyXp2hiBZgse/F76siDf3utvwf5U7jCgrIqOOEICaLYK3ww
/s9hUaMMIF0J4jX5ZJRTVhnNeYHNZBpWX5Z5ZpprtvlmnHPWeWeec9awG5IvWLkuOkGh5hRA
kSY0CzyTNlEwGNscemqqPWi5Z/6ixHprrrv2+muwwxZ74XiCrpqlqB96ZVAUSYhFisQkukjF
s+te+eqx/vPWG9Ntutmb5iz/9vtvrQUfNRt0SbYbRLpKclw7LWYs7xdfKm97cczZxdtwzgd/
mUgHyY056x4P1qZwP4AT3dLON8u64NIbbhW/jveDWRCxPK8jG7MzJ1qGxwI7zKOisyOCeMQy
qo5u35vfdXOvUW+9ptxlr8/20VcX9VW4pE0drN6o8v5zqXLHXnvVU7tee/Yh2V39dag/n3ZN
FHfe6LTPs+GLxxUL3u3FJE95VhDg/QxoKOhxbXzTO9xlDEG98sGOQqSR0LW2B6vR1e5785Og
Bq+BPgjeDn4ctF3oxjSq2IlOH+Ubyn0wJQ9/sc5hTQHYyOx3QE8Myjpe6B+f/ihXvuuMQjyX
0wEOjXgo6EHsP1mpnsAGprGI2Ut62aMPB4UziBUCiUgFwVL6RIi483lRWyNsn/iSckIT9g2C
BEOj+joGlTHuLo4yPNzD3HeT3h2xCzokohCJ+L83bSF/uwii4/R4SBxt7ox0tNgJ1+gMKmpM
WJBsID/CmD19saMs5wLTxHS3QdetTozd45s51BhCDcaDhGWMYRln58hSVvKKr0wL726ISKYt
ZoeB2WWNwuOiu8Ttl0MsYPFwecyGKPJhPdoW91rDKE9RMVKAmx+3WInJWDpzPh9LhBX7FRBS
qjCDfJuQ+WBZrip2UInnXKKXtJWfRdKxkudMpVmc/pFHZApveMLkEzALOMDIXQ4VNZrbMPN5
0JUksYlpRE2ppOhOZn2JdrKLHwhjxrB+ZZOZFyRWN90YOAOF05GzrGY7PylP+oH0Hh4FIzvf
t0qXinOeKvUJPhGakvH8M6fY+SeMjGnQuB3tRYIa5E2NGooEXgydpBKWNsV1KafK7IGRTEco
LYrJcGmzSaf8Yjkn2EZsznNY7GShWJZluoeacI5XCh8YN5pNbhbFpke1yNz6VFQf+i9/VQBk
MOSUJ7wO8iT+pGthT6DIekF1q/AJkjc35dhIctV1JEXpR6+YxUs965kAqqhVR0lPS1F0SlZF
JWnbWjEYijWzpOUYI0Xr/lIbpsuws3VJX2l72wQoM1sCiihoorVYLkHlt1/cjDUDwVm3btaF
nVQH6MYnMsQZ95VThOkqnXJaV97LndVt7Uw52T07imOuuGVIWc17XvSmV73rRS953TsCxNaT
jPJTalwlRjF8LXOaK2UkVGVq2f5MdUzlJBa4PJlYV/KXpa6Fa7Uki72qVlelsZxlhPlb4QYn
WJQJ5lZsZ/VeEIdYxMRIKgO/1qV1duutlR3pAg0H3bHqDaMWjmmNaTlRkmoNmmvBojnbl47x
4jWYOQSRkNv1U/UYOU17tO26lIzDEptYyhnjqIanjDtQXpkcJcyvUCKLRc4RyabRySWS2VTk
/pU9eT16MoaaiQmLlpi5n+V9V5SvDGafdQ27PEsQJqh7Z0AHehr4LFFAibySJudKzpHhC52Z
bDxEL3qfxUh0jnxVGUF39McZ5u6Xy6rall7UrClG8JdN3ek/Z1rVq66fbIXpCkJVGk6yPkJR
nUZYAN6VqIIKpNJkrT82uRl5k44c8CS9JvHYGj2F+utej90RPwmW2bh2U2CjbexP2DnLlZWe
F+tbx4dymlz0eDCouV3Cj45blOYkdwY1eeopktqU1aogHO2dxVSLu3PS8nCZBLi8V1ubn7f+
wf5EtNNiExKovCbMQAO1U7sqQZDMexrBs8PmPe0z4kEdLHmAChha/gg1l8hW+PFWFKhb33Wo
2wHF1f48YXNTmF+XrCBruYzRO4Y652sRsLrBqtQ5yhd2nn0plvM8757T2NtW7iygUddvDv3b
cvzkaRGrfvUQxWhtz5aciyiXvCf3EOy9TJE/f611YnvnRFJHOHZmkPYdZF06laPTnyheaLm1
/NI7Am7TY85isL6zYYFbK9M5vG17/nzcpJ6qQXbubkrieXqqo7xIO+13LeMuj3aldh8l3vYV
2cniZ//Lrp0WPIv3dOrdqTTeqa5PnL550pyvk8iRBvq4k73ipxey3efMdpNne++KcjwFswp0
grxx5vuRbxw3GbClX/KiRf9uG3se+Gty/vjd0zU+OBfBOnt3/0n0gDEFWSzd+yKfX/+IYU/c
ny8d+7je4v/G5teu0z72WvahH4nYuSCD/Qui2sO9xPg6/JM92ns0SBNAG6G2vhI4BeS4FPE/
BlQ70Qs+eRk+mWgrb4Ew8Bkjb1M6mNozw3uLeBqh5nIjwOMuDREwtbg+7YOGGUs/EoQ+ENyw
DgylHFQwNIo+Kyo6EczBEMyMIASfv/PBdDI+5luOW3I9QOKjBWxAkNs6/lkaAQQPFAC2CgQo
/ss9s3u2q/sjyOlCByQgj6PAkRs7jzM4/cM/3xMo0usAvAm6DfPAcapDn0PCGns+Vaoj4QI/
6tM5Vqmq68O3/shbsAxDwtfSKHRbQhaUvhkKFxJcH5pLQlgqwjukLnarxCWEOuYQkfv7PZTT
JYRjETRMuNnDwjc7RbkJRVqjuNcruyjsP1e8v1pcQ57qOi9sQ4woND9hwwMks87LgjlEHxi0
Q5GqtyHxNJvrNsq6xOKzsT6zkEI0NR0rNzycPqPrLgm6xFPSQxnqMNYSmHT7rInyRq9axoDR
MOdDRyZ0tdt7OL1KQGdLOV2jO4zbPR5atnoMoGkDLF0SvVT4NWlLPceAmn/UQqWZE3kkHoYj
OIM0noJshYrTq4b0nyECQw6Ir9DSwXCExMQbweI6MBuzjZEkp0CErQszv8WrJyeC/qjqyZC/
o6qR+siXAsdxqjyQNDwYNEeyMkJrzDJK1MnFGy+0KbkRS0qlTI+3EwXdsrn/GrB0wkSZQr9B
JBX3ecZGBMRxhMqguC6s9Er2oSwDIyFzDC+bZEl23EkgdEe2nDCqrEmpdES1nMu61AkdHEqg
LMpb+h1hW0rADExi+EsSSKKUxIdWWjcUBC9B3EoR5EoMQ7VH7KTsY6ZVSUnJ3EqxikzFC4tq
Wr7sOp0jtKf3uzf68ZjEhMbFvLnwOzAn2kN/AU2p9ES5EEzbvM2k1LZASy2EIZ2+i48Ci6Ba
ejzVRK0aopYCMyOtPKN8YzXnbEw+e8cPw03qrE7a0s3n/pwZH1lEB2sgofMzF6O37BxPSwKb
FDBKNtRI61xP9tQV7CRP+IxP+ZxP+tS8vsRF9WxP/dzPRNJAl6lPAA1QAR3Q+aTNhfAjq+NP
BV3QdnlPRHy8/Vq15qQyTclGZeFKydtDAt1QBULPo4m1JohDBh1REh0GByVOHhzL55zQiqLE
O+xOS+wqseRQGpUq9EzQGXG4Et1RHqWLE03RDC3ByQubaVxBzJvJtKxRJd0aA50LBMVAK0zQ
Hp1SKiUx/5TLiyEALd3STInG3vrB5JyY9GE/8xm89Zu50qS/gcAs6suoLjUN8nvTNr1Bkgyh
ATs+7lxSPcWj+1S4gbK9Kg1U/kHtApcroS3V0sw4VDChQ2lqS6K0S0iNxpjySW+hPLD0OVZK
zbMUo0styZ/EVHDsLUrdU1IdtD41qD8dVFVdVUK9UkIEAESlS6lEVMejsU/dTC4a0xdVima0
PBncy6RrS0gcQhzMzCoi1lBDVk8tVWZNiFNNz/DQUVadVmrdSFcdE1rdS+yJ1eMCrUZtxgfi
1HQLGbbyznAF1nMkumFNRnR9MDhaI2G10PBs1g1t0ubIK4eLyGrd1yot1AAggGCVrn/tClu1
SphzS4tCElBT1mK9ucvLxlFFxh5UWG0svGS1vIelV1K11w7hV4/9WC4oVAJQPFttMVjt1uUE
PKL8/qCv1FYvldR3ulWWxVQL3dVNtcRjFEQ6DdW7xFkk1dgB5dgKAFmiLdrCvNKTnT/YYtmR
5cahe1qhI9MI+9X6MtOSna+ZYCJ3TNM5hb8VmtiZnc0GqQqqbUly9Eaoba55BVryFFpaMVq4
jVsMuJqmzYS6Zdvvy1gm/dkXw1t6dVt1MYECGFzCLQC5PdwSbZm7tVu/jZC1tZk8bVzJHRvA
LRkRKNwOwFzE3dz2nJfFfZnPnVzRHV3S/ZwbTYDBLYHU5VzWxc1EIYD/pJnQLV3arV3bjYtn
Xd0T0N3W7d3c3DvYPQCuqME5mN3bPV7kJd3KFZoN4N0scF7fjV7coozg/v1PPdQa401e7d3e
v50rw/WE75Ve8b3OS6tetiSE7OVe9V1fGl3e5g2F8B1f+TUqmKhe6/3AL22Y9GVf/u1f+XTf
DIjfTxDg+S1gXKrfHSlOtF1gN9hf/31gCFY1AIbeASZgA77gA0oG+71fkMRJMXDgCA5hEZ48
s7FgUTBhDE5hzNFgTGPgpfMNEB5hGZ5hyg0aFD5hFc7h5oGDDeZgiNW3GKZhIR5iPiOZGx6G
I9ZhJT4ZHv6VDvZZOghiIp5iKrbRWSkA5l2JJF5iLm7QN+jhJ05bGK5iMi5jn0kXLC45MzQ5
Y9riLn5j92xg91CUnZFiM75jPE4cDsHiLIZS/rhh492FY0GGly+eY3rRGTvOY0VWZLflYzlh
tqUBgkAeZEpelwYGAEOOXUReZE7uZNxlDj5mXkkOvjixQiRz40pOZfW45EzGmkT2ZFgWYqEN
5TkxthAZ5eJBZVXe5chYg6ZtZcxEhFeOZWIOYY4NZVE+nijdoSj4KV2mKwSIZmmummn2gmru
gGvegmgmgWwmWl8mAycOZvQtZnLG42OmlUiuyCIy5VNOymzu5pNBgATY5i+gZw+wZ22WZ27W
Z6P9ZkwO554Z5nIeaPW1V2QW5WYWCYWWUtUVMXiG5xHgZ1CQ6HqmaGu2aA3A54bQaGwWBYwO
MX8G5guK3DEQaII+/mnkNeih1YF0/uNR3oFnzieOzuiP/oCZ7oKbzudQyOl5rmli4Ome3mmf
dq+QBuiW8uDiRWmlnuEmPWiErjU16ROGbuj34mmg3gCI5oKs1umJ9umrFmoQ2OosEGui/mAx
aGWIeeHvLOmlbmtjlgunNjhJZmdlnmoSiGlcump6fue9luZp/muN5mt99muyxmrB9msTQGzD
5gDALoFq3uaHVmwM6GuJJmx8luyetmfEtuyhJt8wqFuR1rnwNGm3Lm28NVCnTuY1iTUkiOSX
Flz30mt+DuzKpujHvmzbru0TuG3dTmzKpmmaHuyvzgDI7mvgnmzNlmfCXuzjDmrizu3m/lZK
tgbnFm7MPyNt0yYEyw5QaX7OaOaD7pYy1L5XUl7mum5tuw4BvD4k2X5u5kbu93Zu+I7u4XZv
+55vx+5t/JZv/haBxuZv6Ebu2cZtrI7v5I7v3/3sszZqlNTbS85urAnvMJDw+EQAAPhu58Tw
PNBwBqLN1BYaurmCXpS19T6i9t5vAA/w+6bt6PZviz7w/GbsAb9vFA8Bjobxe1bxFDfwvZbx
wJzuf67uJarTP8BuCO8DCp9wDkdymrHwl1nyDYVyN3DyJ8ciTvjwhcPF9Kbq2zrx/ibwFsfx
/a7v/pZvMr/xGUfxM3/xNM9xHg9uy15sjCZzwwLy0OYZIz9y/jyQcjHg8znwc+2mckwAdAAl
dEIHhEO3pQr48D7mq7cBLC4ocRzychan8S9v8zHv7BY3c023dE639DX38RoPc/0uc2z+aDov
LDtn8DrWc50B9ETv81hH8lkHb0HnUFiv9T3X9TTYBEbfhc+T69d+XtyidB2v9BU/9k6vcTF3
cVH/9E0Pazb3dFKnb02H6FSnq1UX8lZ39Zs5dAyn8PDm7Av/7iQX93DfblrncHLfdSdPclnX
cL+O93eH9zcYdwuHd8Ieg3QX9HZXcnaX8Hn/dzKhAEZX7VoW9li862L36lLf8WpX84e38Wkf
dZuueGin9ot/dqtW9miXc4yXbgVf/nBu32Rvtxlwp/IlD/g1wHd/v3WW9wOX5/db3/VyP3eV
z/mWf3lav3klp/l4l/WbX3mY13mhB/qjN1WDr025htYD5PLZ6viIl/j3RnZT3/iqX/Yyx3Gr
d/asr2mrx22HF3AEHzGzJvkEduWTr5mUT/qfd/tyR/q3d3tdj/m5t/Wc9/edv/u473OZN/d6
5/e9B/igh/uil3uit/JFZ3qrg+TdI0wNkPRJR/PcHvCHB3Oyz3yLx/pM3+1Sx/yrd3Mer2xQ
v/zLzuipF/mTRXs6Vvu1n5m253u7l32jp/uapwMol/fbx/3Dp33bF/yeH/y+h4PE/3259/kL
n/Ldv4fF/mf8uNty2CYvwT71/55v4b5+w65+5+503v74i8d+Gu/+GB99zA77wRbw8vf4eVb9
u71zPH992F/+pC9+30f83uf7O8j92rd14eds3T9+CEBg0moBkjZTfrsGVt6UmecmheP6uUBg
yHIx23aSBHu++7yO9xvmisYjslhIMpvOJzQqnVKZp4zTlNMWuQms98gNh6MncdlcPhvPWPV7
uyZ72XIEOv6t0/HVP2Cg4CAUBUHFwIHi4sRPI8zOC2Sk5MVhJWam5iZnp+cnaKgoJskLSSnG
CupqCCsLJ2qqCGzLaUtKhyxGZ6ytpOtsye1HrDBojE3NzY1RwJEzErR0D2HC/lI1drb2drYe
9zd4uPg4ebl5lSHiImNARTsljEs7xbzm5Sh+vv4+f/9+MS5jr4IJDAasYKZerYb9qrWwkgcV
GhiauuWrYkCEAFMM21gJ2Qxly2Y0K0KkpA5qKQldO+fy5TlvMGfSrGnzJs4j6SgkWnfAXaR6
8Ya8c8fpnr+kSpcybarJY6mDughOlerxgkKqpBxqxTVxIi+LDzEO1EhRRNZPIA2IHCkDpckk
0ohWa5nzLt4kMvPy7ev3L86dE3quazSvKD15Q446bez4MWRRUFVxpXrQ6lmsYrs2zGiic6td
YTWDoIiZxdmIUjmtbeu2GdEfJp1Bi1sXMG6ae3Pz/u7t+/eTCvcIszMqVKhRUEgjM2/u/PFn
jtKFUc44NdXC6rTKXk9YmfqI6dg9pQWfC+F1VqrCW878orVbHCqByO1Re5td4Pqr2dnv/z+A
OQnHk08/1RNUchcct8lyzzn4IIT4RGceRxxEBdZ4GZZmoXbumTdhd1tZd4VC2ZG32YYgniYa
idoRFFEn8MX31kqzEXFfECcNkl+APfr4I5BBzjTgYAUaVtSCisGTSYMROvkklBWhICWFGnLI
UHQqXqWZeh5Sl51DANVy4oVdogYmahWeuWGaMYY0I0m2rYRjjSplw6OQeeq5J5996iQYcYo0
12SUhRp6qD5bIrooo0mB/uTaa3JOE419PmiDp5+Zaropp30RCUCgPzFHaKOlmtqooqequiom
j8JJIzW02YlSbXQKgmmnueq6K6/afBrqoKwKO6yTqRJ7rKquvmpfrLPWqeNtvUo7LbXVNvGr
kaMiuy23TRnbLbhRKgsnbPPZWauc0Vq7LrvtaoqtT8GGOy+9ZHpZL77NjTtjuTnKKqlsd7o7
MMEFB2jBJcBqmy/DDTv8cKH7xmfbv/Sdg6vBGWu8cU0IFxlvZKRCPDLJJZssCjKQRnrjrJb6
6zI2GHM8M801Z+MxqEYm6Qgk8TziA4MnCz000UUrSMOrsNY4KVzOxmwz1FFLHQjOwC549VCG
/iXGpNFde/11viknbYCN5j5jo8XqTr02220nUHW2h1kANJKPbI2JyGDrvTffhoqd9GwpMZ1u
nQK7fTjiNMMNcs/0yF23z3bj3TfllVse4d/LMisrELXGBjNLiYs+OsGW5Ayy3JFnjViSleR9
Oeyxyz5K5uQKHvikc4kjM+m9+56p6VYb5/jqWksuyeuzK78880ezNXZJFluKY2yG/3499sBb
IvzWdEf++JIvJN88+eXDXju/TdhaOPs7Zv8+/EJ+QIDCx3Qyvvn56/91DCqv/Dno2Le+QPAu
fgY8oF9cQIBs2S9o+3sgBPvWv7GRjXDr+5fTQofADXLwLwpkoFPw/hfBEZIwbM+DXlwAmKOW
caOAHXwhDMfxQcaFsIQ2vOHIJojCc1lQcHSxXgyDKERyuGAACyyM8ZIiQhwysYmn0iHgKiWb
gDGraU8bIhazuI0iHpERd/PHEp0oxjGK64RRvN3SzobGARJQi258I9U+kIguiup4/AgjGfOo
R+dAUXNC2Nz0pojGS8GxkIYMjhwPQMcETQI5CXKkIfC4x0lSkil9tJ0P2fis9rnvkJ785NsS
qUgvSq51c/siwgggyUqyspW0M6PmMlk9H6qRkKC8JRyLqIguPtI4i4Hc/CawSlcSs5it8l+k
Vtis6G2yhbh8ZhZ1uUtB3Y0o8shaMAVj/sxtcvMYyBxJCsM5p0FyspPQPCcMpTnNXrYKmzgT
zjC7KU9WBuCby0hX7sZZS1uis58bVOcu2WnHxCDmU6abJ0IT6g57MuMZ9wEd9TQJCBf6s6KJ
A2hAF9NISRRUm9lUKEi7WU8KVpAK6NqdRVP6Poz+JJ4HdZ1LQypTCI6Ugk+w1eC+QVGV8jRq
LBXmPkQY05kStXw13SETcPqyAGqwp069qCiRCICYhlGVRb0qGY96xvo0TaJNfSpY2fZTj3pi
lUPFKlorp9VYUqqttKEiP8MqV59GtTjCRAok72ZVUZy1H3mNTPgUlFdT0m4ff1UdI1mT1ifC
EpP9amuzvEqF/p3OtbLs+ily9nrYduwVH5190mEdk7r3XBOVKDMsR0vridAuFrSNTR/uosA5
Z1q2tjPD7PxU2SDdflYffc0Ha50SXMSadlWDbWBrGXVJ2EovqQCUbBQoa9vp7gq3QCMeb1UJ
vs1ed6OqsyrPvCveD4SXvNfV6DvgwbP0HghB4yXv3Lp7PO8lkb2O66hgCRpY/R6nv5SwbyPb
+19fyje+jrAmgn+p4AMvmG4NDsqD2etgBlN4whaGcIUxfGEJa7jDHP5wgEGcYAq/dmJJPfE4
oSsF6VK3xZvC7IEEOpQYw5egw0sMXlXX0eMWV8dfVK+PgUxjwt53wD+uZuuE3ONH/tI4v/M9
MpCfbONqJrdRyzUxV926zLi6uMvUwu2RB3q1X77HvXZbzs4MLN8ND9THPzazO0c74/CaMsmM
bHKcj7RmKJM5zMS1c5jlPNwqP+fKyYQsrT7HZS8zurp1FVSdTUvkNg+4dZ21ZhIV02bi3dm8
P7uxzzCtWjeXstNPxrNqJ01cKp+S1XpWL3JCO2I2z9rDIb51rUUcYVzvOte8zrCugf1rWve6
2IYGJ4rVSD3aNrrZugKzlP+cWEmDGrGX2Cxpl+xnaU/Zbt0ddKRdTeqd7VdB2562uKM9aUET
elHHvmeyCWdFtTm73tq7APfUXW0ef1pr7f1ukNH9PX5//q/fTHZzrAUe7XFzutTd2wSeCd7q
gLN6xwwndbsdhD4sIzqDabuivUPeJ2iHer3nVTid3UtfR2j32wU28Kr1HF9KIwhrLi83KlN+
XpUfeHgvBwp9Nw1J9J78zUVe+JJ+nnHIbPzQWbaiiqMr8qnzaayn+u1jVI05hddr0EtXStOR
7a95Fy7qUGAx1dMOGKtfHeuNKa/flP71EoYd3tH44ZbN/gS0q73veWG7qtw+98ErF2lRxLtD
54J4c/q98foBfOAJL/mH1b2hcoErBsvZRsdz/jeQD7zgJy/6B1VePmNPY7mmoXcm8L3zrj/H
51cV+tHTHrCGZ2stHxqrnDL+/vW+//uj63is3ta++IwtsdgDdpIfZp7ev3/+TWIvrNkbv/p+
fRPuO17F7Tsf+t4fUvDDRX3rk/+Vt2euy97KzJMC8fvuf4n0h0X88tNf49jHZD4xOFvuf/X9
/i9H/BHL+NUfAX7E/THXMuUfrbTf/zUgOASgABagBDKHxCSTjqje7i3e5jkgB34DBArgABIa
zk2gJlRg8t3d05HdH7ReB7YgEnzg8JGgDC6FjMCWSe1T97mgDqJD+DXM/M0gEB5DMuDeLOHg
6iUBC+6gDsLgtoRgEBpfDXJc2VHKW0HLBiohFlIBEzbhE3ahWgyhY02hssnbrWShGU7BFjah
E3qh/uStBfLFSQ/BRRV+3ESdoR0iEr6BkHIhWLa91KghywjGyF8F4n3VGHChFms4ktexitfJ
mlpwHdPdgD0lHuYp0/713h1mYhGk4dYt2V/9YMwNyyJm22CB29Ah4iHGiLmFjWKl1mpBYtZJ
YhjmE2RZYR1qIi5uYg8mCyyKD+Xpg6yZoiHiwyj2IcSVTCM6Si++nSzaIBku1e0coRLkIjVy
IoSMWX8BnVA0SNLJnXcBmJKw2zcWFDjOlzeWVzCa3JoJGM6t1yQUIsEhCayxzskVWKzF2M0N
4jvK3Jz9zDyy49H1Y4AF5DtyF3+VWT3+Yyw246GpUO7B1RVS4x1aI+kB/oWfmVJvRdyopVeP
YU23Fc9haOTCdZpGmVdIwhqn/Vc8Nk6craSS+ZsvndvAfWQp0iRLcqTBuZNO4mTBQVnDpRqq
TdxNYpwlLcM3kZ3uVQwdVkESSqT3UaTGmdpIvhNRchScrWSowRzkhFtV6ptVEiRKDqVVWpyq
eWROkqVUipvFDSNa2mSakaSMmWUoOtymIV1XOopR2qBSwQYGSqM1OCUuQmWhpeU9+qIdBWKl
CZyodeOnsY5UippQBuXM8eNNhqQnPs6+bSTF+WPP/WFPcqbSKWKf5eSr/VtpXtxpah1dzmWk
QWZRMqTYtU9EmY00NiVg/p5g8hFhDmMqrZo+/tokb3rbqWETVwYXoJUZWJpmlK3iWd6lXLYl
yjGnXBqjmFVbXWZlZMqkan4ma8IlBY4EMvGlBsKMX/7lbWZiburLbk6lcIikdK4lc+7kTG6l
e5aljJkkZYalSgLlZpbbv5nlVYaiIvpkR8YnT+LXZsonoEEnYspkckDnXAJXJBxAXjZkljFV
edrmeb5eelKgqRHdCO6AdlEmfsKnYBmZt9Xcw+XjSXJX0n0EiKpkhiGkfBYkja7lyhWdmrUo
jsrd0CWknCWnQmLckNpoOJqopyGcNwLjhIKnhWaQHObghu5gh9bLGhJjARbjCAENhVao3aHe
5T0jU07pRO7i3lzp/mmdz3OtKZu2qZsC0DHSU5M66Zcq3o10jgauGJmWaR7S0JmiKVa9aZsu
Fpe6hcpI0Rwumz6tnobuKedVKcMAalEJKptWmRvCptLokxgW4WQ5qh1CaqRKqmgN4o+qhXFq
aTsdA4/pKMwN3qWCoellIHkuH5TunaeeIaj6YNiQapIKYqqiqiu+om8imWUe5pLK1KvCqtLo
jrPYKVOd3a3iqplejqhqXKmuFmsBa6oKa6oVolgSJKHCiWvw5cs4VDiZXaNGq9/lqsOA4h7q
XJEF2845WLyeo5pxJkwGZEmapGr+aLHyq6W+SlvElmzun96lq7r2Hbs+TLWGws6lJDsW/mtY
itd+IiSKzpiNOWa6GehABuc+EqK2FlOyKmveYV6iQqStJiwWLizDMqJpNk746OfLQlhlbmuC
1s09SuZjuuK8Gs86EmJIjSysRs8lklOtNgHCqmzasSzDNqyvJmnMKmfEyqhFfoR3+lxKahtq
1ljPwmw3Ai1ICe39QV0Kah7rKe3KTuvyOC3E1SRL1te/BhbNZppmfmRjeqUx6myKnqTPfm3I
EpPYYp8cqt+8RV3Sou3UMe3IuCtouW2R7qfOSW13EijWzqRwsqW28e3Hai6J/u0kBa7hEa25
Oo3hIq4SKi7JsC2MnuiF1eyRvJrr7uMfuuPECZiOuWi/vm7M/i3pscoT6CINIJwUdB2umKpg
8LZLecpWTQxQ8v6BZDVv8xoM6qZu+VHqmi6jSFFQDVAihp6NoiKhEzzrDUIB9HYKeZat2aav
8a6p8YZvsqEsoi5l2aAv/eJg/brN9Kau6uqR9T5XwGqvEXLvlpHhNTyU+Cov2sibLY7vNmjS
BQWC7iWw9l3QAkuU6jmw+1bBA5sNNC6qeN5UECAaRH5vvGnwAldL/pbM/rLhDf1uSCRa2nAO
+1EMD9iF8mlf+MIvp5oUm6qv+oDw/WawBM9w5h0w81aKc8lv+0Yd8/7RpnLwDTcr/CLqDxev
NEbvyKmt/qwwC5OQC79FS9Ai2lQM/hVOYxVPMAaTbzZs8GMNAhtrcAYzjbMKcX3McPva7x3j
sbnklLMupRjrMSAbMB1e8caksMkwbhcHKklVUAEswR9Ho6YisTUUABu9MdnO7+WVL/2iC0RR
YgbGrxSxUJ4ScRCrT3M9HZ3YMSCPLoqR8QJGcpSacgyTK8WcXikDcVeFcibdmwXUDwlxcSLr
zxeXVD05ZLmWjRA4QwGfMQ5L8QHPSfJacqJJSi7TBymLEw+VMFI6L+F6XPqd8jHnsdl2jqYy
n8fl8PQk8SCfrzabcPoxUwqpsvxoMQQhcjAH7SLHBZ5wcqJSShgzc+4FshAfoTGDKQcbdCrH
MgtF8hG3/jNB268176XmeVUlR1azxq9ES0Eao7I6C4JEF3EzVR09RxAw3zPzDLNtUPI7p54F
1dP6VvFstvMHQzBHlx3vLXQut8wFkrBANzP58rQBvy8dD3WYwjJPr3IQNzSUyjMCjyE0RrBI
96lU4VBJm/TsoPR8NLJR698RaPVL/3BCi+fzenQKNh8s45MIo7WWiekR2ylSB85Ls3FF47AF
7zENV/BP2+IJL01Gr94D8x5U74khG409WzU3YbU+eXVSuvIki+H9KrFOb3QbA7QUEzVOk9M1
DzBTT/S5BDZY6/FNG/QEUzZLl+wS43IcSvI+9TXAoPZjJaU4A8hgd01VG7Za/uXzfPxAIy92
Ou/2RcumZa/20YZ1XY82ads0OeMTniZ3ZNevHId0LCuqZ18oLkP2Bs/mx0m2T6t1Rnfcc080
tAjy4GCxp4y0DRW2bbcSYn93I/t2SixBe1MyXE82LQfvM5NhaIv1FP9I96o292Z3Kh+1fu+w
MqnxaleyomWyc93UfYcz6UYweTuaVJMSGdV2eoPNei+4DsR3e4c3bjRxU8e2wTzvXoODgJc4
NjR4OUA2x8w22Fi47AyAjM84jde4jd84jue4ju84j/c4j2M4bkek6d6mi784jF+Ojye5ki85
kzc5jQM5SfXfkDtlkevNkVeOk2e5lm/5kkO5TRXv/tmW9axG9DeruPMGSIQ3MBxDdJ6kOTe7
tkJXQ1gfrYEvNfhNODVV0hKNYv/2OaVyy4zbLHydotVq7VIEOv8EuQ8bAaZYMzxfNp27MZrn
BhMbd5C4+fjONXWvcVqT9TNi+rWYd/5k6115ZoQ6Wef+3L6io0FuC6Lf2nVip1BirmEB7at3
DWIL+SDBtlqL+JkDCKjLubC/tX4Ee4gf96IzsExrtK8TkaiP+r7qlWcuYj7W69Q+Lry+LYmu
rqaheiL2sow/qKGLI0/uaLQH63tVwq0bTa7zthPwyHez9Xbb8g2Xub1/si7Tu5lLMEDXO5lz
EgaeXhUicyuLtgDltecw/jc0kzmCK7HyscyYX3DCL7x2VyK5kvKYc7Zwd7b80sXAtzSLC0KV
m8xviig33q4pZqO1W7vKwy4/ZmOQIme3T+bT8kS4P5w5Xi+4zrqW0u4mrHvRtPtrI21A97ql
c/RiUzNaOzqva/YUTHdO7x42N3TRdrP+XbfBz3m8gXTTY/bWf71OYzMt5R2kjzFOQ7WjzzdX
EzWEG70Is19gu/nIkwy2HQiauXzbtnyIXbvel2RsuFrI7hfY0vxg3Pzlxnx08qxrqmInAD3R
CL3bM/rGZ3PZVvyjI/Tlm3Xbe7TDV/OjU73Xdz3Wq7LWO7cTHzR0K7hDR/0KNf140zHaR33c
/hs8m4s91Bu9HRv73OP6i94Doef9WEYu3O0oxDYZuWX7QPpa8vO9zQ+AuHPdbxrr4acpJzj+
0EB+2ZvxGEs3ZVtwwqez0oNy14My/8lWfkM317M1y4h99nfwwSM1TgV8Z2+/KQ83Cce/0wtv
ic/+ZWf2rsM5BIQ0U7C0Wo15xZICPe7qzBOlgJVdhwOO25mu7RvP9Z3v/dwCCLICKwJBWCv6
NDjNk/hs3qTK4TLZWk6Hwi226l11yVPxmTVQj6VXbRs7g3q32XqWZlb+XGv+HzAwMMCg0PAQ
sfBjMQSlgGRRxEOSskMyBeRyZEKkErJRU5MxZXTTxJPTNLMEJTMV/tSy9BO18bM1Fra2VhT3
FbM0NJJxw5dUdZS2E5iT9dZ2RNm4GJWXV9rY5iUGRrDb+xvcOw4PgGB87EcPnS2Mrp0oyuzK
bR0erYxNDuwrqj8Iv4WaAVrqkbNXMF9COezmvDmY54/AcBMpMkl08dAyXSYebZRQKVmvU8Jy
+QoJkmQqT81GMvvl8ZgpZ65K6mI5TJZMnc8+hujpEuVGZNWQ5ez089UlWiKpDYW561owm9Ne
UrVq8tq1bNu4VfT6FSyTceOOQBR7Bw+ceGHArN3HFqGdcwm7KJzndl6cugAk2mtrUO/Cfnvs
1FNn8GGPvmEZUySEEaPGYh06Wn3ik5UU/mbETnG+HHPzZppJPZduZg3zTqGfUXJuebSEqA3W
RuuUisk0tAurMru2tLuV79mde7buffNZhtMkgF+dpJzU7ZifcSPdpNQ16qwqamjb1hh8+HQ8
9o4txzAdvTLt4NxZ/z4w4MF5+Dmku4/+vXGLCwt+OBcdANsCkDCzfuBPvATTgSyy7U6ozMEI
JZyQQmm0q9DCnDDckMMOPfywKtVAnHCpEU08EYOtuFKQxRbj2sO8hcyZj8B4GHqrofZudGut
dYo4Bz8r7JKHnxyJzAcL/tCKy7wYBSSohycL7M4PF62kgsGLOIQQxS691PBL5pALk8wyzazu
wjN/G1PNNlNQ/vG7K+VkbK6/nLSnrCSCtKEudRp6Qw8/a0xLH/sAbaIKgOjYUVEzFvsrMXcC
hNIJQ4GoVEgqB5qT0zGyTKRDLt0cldRSTT0V1VRVXVUaOGXoFNaJ1CqUVsNmzI/P9nTdldde
35kv1hse/a9HXF8U7C4qBl201oCqDNbFxz41hJQjrCXAEVa13Zbbbr39Ftw2Xe0K2nLBWpYG
JKbUx9d23e3V3AP9iA8xTPGiD8ix9vpjLgTjDU/aaQ0Q7VoTCsZA1HAVXpjhhh1+WM1xD/iX
YjnLQndZdHeIkc+NM65R43qFFYjkkk0+GeWUVV6Z5ZZdrjjBgKfF4Aihaql5goQh/t6Z5559
/tlhiWEemryJkMB4X0rZ3VXpjHVIutl1qfA4AJetvhrrrLUmmWjwZP50giNKNBhbnYE+G+20
1V57RKG7fjvXP5fGIU9xRFYaoh/lttGJOnn1Cw282IJiia0NPxxxrOEO6+ssE8D2mOxIMMds
ti2/HPPM03Z78c7xdmjJPI4O+d6nragD0sCf9jvXQzeeuiCOgYC6Pz2LhXRWHzb1PFqBDYFc
lWhiIqCANDU/HvnklTeVc94XJxB3ZdWNG3q+M817x/+IbNedve++UW4cy5uddh//Edm9jg90
vnffgQftuk/eX57++u2/H8Xm2d+f0EjXqZsdn0MM1H7U/rr+waNPBlyd+o7VwNTJDnaS8sek
pIS+8gmLfzFz38CeghXmFGB++BPhCElYwg7oL4OeSx36WjA9BuINZEwK0BzqI0DvAYp6Aeye
jhL1K4zhqoCoq5fTVLeD3aWQTgIjgCI6GL9TgNCEUZTiFJWHQiTCbYUVNIIL/ZOYQeGuDQg5
XxeLpSwFlo8M/qFXA2GYnyAO0XRsxOAVGTetJTLROcIzxSNCSEU//hGQQesOVyZGRxXKUGrn
kRoEDZQvCQJJh7TqE7zIgUYfqdGHcbwUkuC4ugtmw5Dn+tQd8Qg/PSonAB3pYyBZ2UpXnsqK
oZTTD+VzqKRxUYwGeiFBCihB/jJmCo1ftKAQu9jLX1bydZesExMAcURZgqNxhyBlKTdUmVW+
EpvZ1KaJYvnMaL0OksTaFwBBdphj2i6I1VNWsq5HGEceEIe202UuHQi4ZRbNWHP0JjQZNE1q
YghC19zmQAla0FYNckX77NQ9vSi7FRrBf4aJIYyUuUv7sDNqApySXuITuj3FDnaMlGOkQtcd
hX4jmoXwJwc9ZE2DvhSmMT0hQuN00jnlrp2u08HR7GXMeVb0kolsFOssGjf/pXGASdNXoAa4
TntBaVnPsikfUrpSloaKZjLV6la32c2p0uldYXWX2MRaVl1ZNJjs6lv4lPrRSMrqnfwyoxG/
Coiq/mopRNIIKFf52ldAerWuz8RlYAkbDqkW1gkYsepVW5IVLgnUr5GVLPIAi1g6AtCymW2m
ZoGg2Aa1lAOQnexoSbs5mr6KswodbGpZq8/WEuEii2WsSFCZrayWFre5NS0NvIPa18pytb/9
rTNf2zjZRkcyHHisbpnb3J1VVrjsw2x0h0td40JGNJlJThsSsFznfhe834IudZ0XXPJmlris
/ZpsZ5ucDKRAVKIN73zpW6bxntdz08UveqO7XgYht7EcCW19CVzgiJ2WXPs1pHkV/NX0clZm
7G1vcq0RXwNfGMMnum+DF8dgDp/0wZmNsOPySh0BDzjDKVZxhTb84bfp/tfFIBZuwCQ8YYAa
bMU51vFBeUvIGIfSwz82ZIgRS2OwjShh8t3xkjHcYiETLchPTuFhRSzNIyO5A0pm8pbr62Qp
wwzGX74ikQlrZBJjGcVcVrOKvSzmikXZzZ6jcpGtfGYQWXjNeW4yggsZ5xSG2c/OI3NdpVVj
G984zXpWNH3bHOh/wdnRRBv0VAs9sxPhedGZ/u59H3rOiEb6G5AGNcUmbdNKX5k10AkOSzCt
aVfnltOfliPpRu0DQNd6aKVW6KlJDJJTNrHVrxb2ZGM9603iuiKiRnasdL1PXv/3A81RiWZo
EexhX5uvGzZmYNjDhYPccNk7Dffimv3MZ2PX/iXPsVl2JWFtbL87ptqG5wN5aRiNjptuysa3
lcoty3M3KCiTWTcFvAtvg8ebzztUOEi/fTp5qnXfP9B3xFnUb0P+G69HgV9yu5vog398oC1e
YxZRV56SUjwHt0b5lSxOx8cYmqXDGZtoKONxkN/8lSJvGrEQaG9Zr7wGEwc6Y1qOxJcLrEvu
xvnS/ajzb9spLduW6NBtTXVmFz2DR7c0igrOdK83PeHMxCFHbeTTL/jU6ikXetongnX+af3K
l7b51+lOwkazvVNrx7s35nxSuNvZRF2v++BFePe9z0nlh/eK29n3d2hzfe6El3wVww7mayU+
4npXfEQK63h0Q/62/pMX/fIkRkjTnx71qVf96lnfete/Hvaxl/3saX96AtQe97nX/e5533vZ
99b3wRe+5z8L+rCNHvnJK73wmd985z8f+rg/QvSpX33rVx/419c+VzAOqukQQzOTGNNek19+
zC1/++lX//rZf3v2vx/+7M9+/KPffURQpTXTXrdLzd9/tqGf/gJQAAfQ9dyPAA8QAWtv/hKQ
9+wvI5JCTNTNOkSB//zPAs8GABlQAzdQ/aaPAz8QBBcQBGfPAanFJ6JNJaBh4wju+C7QBX0m
A0dQBmew9wyQBm8w/kQQB1evBPGIJvJP3QQuZ1rwBYvwYWJwB5NQCVPPA5fQCaNPB5+Q/vt+
x9ICDjhcQbtOTMuMkAtTBQmlEAyT0AbDkAx1LwrDsAc5aCWuUAU/gk1UqQvjMFy+sAzrEATH
0A7z0PXOEAzTEEPSBA7lUBC5hQ710BAPsAkPURFPjw+f0Mwej0SugY8GkRJZpRAXERPhDw8z
URHVQBEf8fO8BIoqkRRR5RI5ERW3LxFT0RAbcQlBsfiSbgtLkRa5ic9YERfjbxNzkQxdMQlh
Ea+EMFRmsRaLsUNOkReTsfl2URmd0Bd3EBi9Txg7hBiN0RopBBmbURt5bxW3cQmf8Qaj8f4G
jhqv0Ry9JBu9UR1rjxnXUQbBkQZHDBKxg02wEAWI5xzz0RZ7/swd+xH62tEfORAeZVAeQzEk
XkNE8FEfF/IYbzEgH1L3uhEiN3AgR9C/DHIZuMsecaxyGNIjeWwGKnIiR9L0AJIkBVAkOfAi
i48Swm9NfIMCIKcjP5ImTSAdTxInYUAiczIAU3IDr4slwQQXeAF4ZrImj3ICbpIncdIkl1L9
fJIBgTIYTWkmTqAokRIr38QhnZIrba8rUdIOpVIaZcLEhtIqWTAr05IDlPIrJ3In21L7oBIB
o2mxvGR+jFItF5It4RIim5Ivnc8TyZAuY3FE7jIv83Iv/zIg31Ixn08uCfCuxrIwa+4w0zIx
G9Mf/RIze+8xBTAyx/FEQggvK9Mc/i9zM91RM08z9zozAFPKAFZKGLXDGvpoNFXFeLyETabx
1yjkNo1BNk+gN4WSJk1TNdWRMYtz91gz/lwTNlXjN8/yxBYmOE2kNmirKDpkOp1BO90rKg6T
OJHTG1MTPGFPOeHPNV9zHLNTNa6pNlFFPT8kTWiDZ4hCQt6zGL9zPLVRPPOz9cqT/c4TPU3Q
DZci1TgjhJ6gI1JtF0wDNlCjLMWEN2TuOLDwOHQjN8lScqINKXwNNkQkcupR1SajQGMj/BR0
2h6U3VBpN6iNRS9DI1t0NmB0RV1URgc0RmkUR29UR2d0R22UR3/UR4NURYX0RXMUSIc0RbaS
P7nyOJf0/vX8c/0ANEDVUHhOQhkOFGEiJyWCkEvpMzavM9269L1SEAIHrkTB9Dr0SLt2ExjY
NAup8k1PAk2zEj+dVBn3005ND0rTT0oD9CpKhBLMgdqUKzVWgidE1CWhg7t24iBDwwrxzyUb
VVIzckGpw0pdFE2lQ01xYgWRsk7zlBebFFRRb0+3r0/R80+NIvSS4xFiAzQmtDeiozqZ41B/
g0xvNUJzc1I7SE6nMY+AE1htpikwozS4U0N7FEmLFFmV9UiZlUhrNFmh1Vmj1UiftVqpdVml
VVtN7FNHNRfx1FtL9fpO9TVTVVhj0ktzJuDI0lflkxybSFO/j00DbFjN1TIu/pQqA4zjXlVD
asM+a7FbvRUXwRVUxdX6yLVc61VLH8c5P6B4TlDj1nUCg3VMmaKJTGJi2fVddxVj4dVXKYxi
a/VWnQj/5tRDS1NJBXYpRVVlYcBgqQ9hH0dha8sDIIc2NqBVm2M4aJZnUbRQV40eGZUNYYFB
AYxYZWFn4TREQ3bm0pVmk4FEXdUj3vQjA7ZlWZFgnTQwf9F3mAhnYlIavnY72tNnZu5UzJY0
nytlr5YnWVZgXxb6YjYmgQeyxNZByLZsYXJVfDZtecZVGilKXmiSxgelFOSTKE7zxq3vukZu
aeZg5tZaEK1vPfJv1ShwjSV9eM5uDHfzEjfcGI9T/hqXbB53Sya3ak/rqY6t55Bp5KCJRWgN
3zCP6kB3lrr20KpREk2XclHXUPQGRz6nl9aI4dbpd7tnrYp3jPSEcNEj7TwX12j3SkQ3y5JO
d/WSdykljejlTpCpjSLo4eBpo1hXnpDK50Zq3Jy31qC3fXynWoyvelGWHxOsfGune5cEgibK
4UZKQM4neHdueK1OdlFOfVtEeqdX7t73HCsXe7HXoQBHc2WNqDotn9zgjbhXosBt5dA30gbY
cG23fQ8Yga9RgRvOi5omURb4p4AXhZOJ28bXf7+neTXYzzhYg7r2g0E4hO/zep9udecXhSUY
fx8OqbRo296ohrT33qhO/objjIYBxoNvGM1yWIfjt8+M13fLiIVo5B2+aHsqqZzWQ4hnSHyY
d/MU6fCa2GueOAVwV6+k2BhHWBBgN3WhRY7LeIsUD42TyIah+M7ceIpDsqa6AYM9qY7Fo5Dt
2IzZbnHjpYANOPD8GGB3GJGRbYmlLI9FaY/5+EPwFpLLD44nGdcCGNkWuVwa2ZGjuJMHsXLV
4pCLKGoON5HCoZW9Ypa/gpFq+efwpXwqGYYLl3E212P4IoXjaXBoR3s5qk/UeI3dN5XlEI6F
dzxgOJyo6peDBZcr4pZlJZrZSJTxqZrPZRDM1x6cCe3IiN7Ctz86ypQjr3SbWZUlGZrFTpNy
/lmzrplOhhlgkhiiHKMx7FmbxXkdyLmeVvhuMndSem6d2bmatkMjQ5ahz+ZfaRU4jWdMIvpd
HSQ4pUNtetNBI/GiLRGeeek9VNeXEIl5H2hAwPjsuFincoh4b4dZuo2CR5qMAVd5yS57ZLrk
WFqMvXelOUldaIhZXPqKT3qojSQvaLqoS/p6llpwj9pP0gBRIopjNMagm+pHlHmZcbg7zdSj
f8aiy9RWLcRpKySsT9Y6z3pbODqvsgJtteWZe9eCl8Z+VRiksohG+ieeCZqIn5rbokecBqTe
qNovzpmkdo58GSixEbveCoic7sGvBRuBJPug5/eve1ia83qXsveF/ncngeYJp2fngQsjoVe1
jzFaOPHnrGWTosuaNz0ko5WHrUfkrUGaiotpsNmodQ/7rr933g4oZPY6f9elhUm4tzH7fxv7
f7NZnPTZsOm6t41pdMwOrUyYusvuqTH75BRbo6b5e7XXs3/plle6UepXCLT6Hpk5Q0BhOY7V
aGkOaE8UTe41al01Q482vi96USO1JfUWvgf0Z+lV/Do0QuX7XNm7QW+haAfcwHt2wQEcSR3c
OizWv5M1RPl2VOI6sDF4t026hdGO3lA6mYAFmPrmXpD4xHO7dLBnu2vJuqf6554bqpp72y5m
ru3afCr7orIYfCxoxIW7gTu8akabnvD5/qqRuLRNG7RQ+wQ9yDks1qvZO8pHdmJ/wg2n4mJh
IlEj0MHDlESZtmI3NF2vHFervEqZQhmaNs0jIc3XvCbMHMtLNkzpdV6D581XRcOPe8Tnepo/
3MXVmaG899OE24FfGJqLW58paKB526QzO7lJ2M/RYkb22rupu9J5vKkEvUAIvXWFXJh/u8iB
PKgs+7wz2RjY2Bjak2M/djXcWtoaFiowtDio3GMF/GMntMlj9dZfPWMpfEur3GR79UvvXGKn
41AVtti3E22FHa3PJM/FF4JfONPFF8R5roF7qrtJvLm1255U3NKzvX832+e+PcaJXM/RqXYC
gKcIm9vxo8+v/pu0VfzRLbfc7YLP4WEg6MG4SR2d0SJf0Du9udo3JSMULqTgZZXWiaNYc10C
+ZVYK9pkJbrLw3xe7fvXwbzYG1pf4XTLhXVQayJFvfzjndzCN3ZfQXZRvTCkrd2cYGh7kvqn
dfyEEZqmqSfmjQp6Xn65kReqdH5qOm2L9QWmB51wsr2w9f0thOCxibrnK1itbn5I9L2lTyd5
e3mny2hw8n2IBjepfVqLcwTgofORH5pXHdo6dfPiN14FtXQjST4+Ix4F4XtMdR3Wab1pL35d
hx3l11tVQd5DZxXZoRzMTV7Lu+WTQ4nQQTnvKI6Ubyrsxf603ZrgT77We4HXMT4l/oaWzEm2
Ux1+1eT+y9MN4oEi87308iN2S/tezvVey92cUok9U0s/RJb99Vnd2SXZ3Fpe8YOFl8nrklHq
8XFM4Gd/TjFc1h10aHUT/IaBDe3xvuVe4VN7vy21v+sx+S1URGSO+a18+Tf+IPlWNpa/+yEU
v5+2TQvcUYlfvy+fZ1X+tnf/8LrZkn9fkIP/lCNfm9R6zfSf2HBf0+EfAoCctNqLs968+88R
4EiW5olaQ8pygQHH8gwn9o3nCaH3/n8rAIfEovGITA4DyqbzCQUGptSq9YrNarfc6pEZDYvH
5PIPMzioD58AwO2ZYuAmusV+b23kF3zJXwGoN0jBR3j4/kcg0hZYiCjYSGI4Avk2N7HCiKjx
QuMZk8RjZiM0anqKmqq6itrlSsUaKzt7irbGlhdZmZu3mwFZ6dsiKLxnvIlsmbzMKbHYgWdX
DCI8HSnZ3IdJzXz3+R16WkpLXm5+jm7z+pre7k5uu8brqBx3Wc/9141Pj7Jrvc9FwIH1nlHq
R9DfJmIUMkFL2OkbjXDi3lmcNUUKmBwZlXRcstFMyCQfOarrOPIGrIssW6aKp+ZaPzdUJlSR
WZPOP5sSaE76WdNS0DlDb+KTVkgOw6JBrfx6Y8iotqZQdVJlysdnNJ5ce2WtahOr1ahiw5Kl
SUFRz65QzX4d2ucq0KRoe+oE/mt3Er9GcIG+zWp0gFGkTgNGlCiDoqlxLhuTKakD8skmkiOr
M5XSCJjMmzeuRDnSi+PRpIfAxLVWm12eSLtaRcgLTtSZjmarXksY4d3VcVnT5nS39Z3gwWsX
Z7079VGiyH07x107+nOhYS2ISK48u+15Ptkm38qbunfg47W3VS7NYV30EBFPVGyGcen5ZSpX
JnIfR+bHTvZf/p/AZ55xtBJ9BpJ2GlvX5FbecrBFJ5tuCjo4j3nC1XOhhMLtNB1DHS7HIHQN
ZjheiOJJuBd4ImY3gVrrsXihhytSiB2Guv2UjXks0liIeqmRyMxh7hmghCijyHeggVeoFJIV
ATqJ/sWTsHyUhRQEoiTlSQWKtqQPogHYA2eg/fBlkmZelOCEFJ7IY4NTKRPjhECmKJ2Oa2r4
21PISYUTnR9esZdrD1rIXYqFnVddXjkN+gYBL/IT521sLqggdrJFqGamNvapXQCCkSXTPkK6
VyQqSJ45moCTrSrlmE8yySSVnWn0mX6vXsbEZgHaCmaYtjrpa2SuokpsaWnKieeIeV5SV6R+
7rijiRsyKq2mhAo03bUzQsteeH36YSK30Y6bqRvXherst3rmFVudd4a6rJ1IOfQjo8mMilip
FRVbmqysQubvrQJnRLBn/qnEK66/7sqwlghb+XDDwf6nasSt8otxOce6/onoi9Py5gtamMrr
roxsrocjeiZ7zBUxx3E7G7jG/bkuWC5nC2LJOdPsbW1qwRbhnOGi2O5zKd9zW7X1wrECy/Va
mwK+EjVhZHwZpyomrPoZ/G+XBQpMZsK7ppQrxbr2alnEBzfpMNhNfn113KhsLKhxY919qcj2
WKpo3iMHqqhbZsE5mFJIE66XXnYLzuxXw/11N7SHlosXIFJdXlbgmtv8lLl9J2Xn43+7JfJZ
hrd8+uSDFjbYjWENkEmM0iiuh9Tg6Huk3C7Zx/XWWgfsO/BhW1y2SbqyjbZJakMs4KxZxnqw
7tI/QTe8CV2PffbWP1Q7tdojYpD2c35/Ar2a/iw0ZGK4Wz29RbxrffGqwH857PBgFr/w2PBH
j7zEaTcvv5LQr30EpN4F0iCPmpFvgQy8Vx0IwaftNZAEP/teBCdoAthh0HafoJqpCtiO90Ev
V727GJRKCDflQQ9txesM/p4Xpq+trW37SaEKQYhDIlQPgzzsoQ9/CEQAhC+IRFTBBtMHCg8u
JodMbOLW1sEFJ0rxDAe8RRGviMUsarEFFdwiEc1nQSTWQIm5m6IZ2wfFLpxxjQnYoQsA4sU4
ynGOhxgiHRsIRvGJkUhkZB8b/wjIQJ5xhyGD2h0PichEhkCRE8wj9jjoCSdUzY+CrKQlL3m1
6lXDXozspCcR2cVP/ibEkdeD5Hv6WIZTYXKVrGxlS+hGmMRJUJS0rCUW7WjLZZCSIKacwRMm
SQZVunKYxCwmKzYWDb7NMpfMbCYDQ+lMROxyIL1UHyqDacxsanObZjiWzDgmrmiKc5wDwSU5
UzBNUe3xl/vipjvfCU/TVDGBMCKaIc+Jz3zqwZz6HEE6u1HNJEqynfEsqEG5CUt7qqifDG0o
F/np0A38cxkBHeNAl3jQjGp0mJp00/giCtKQagCiIq2ABvUoRigAcwzC3KhLXzpFQurIKXAs
qU0ZStKbAmCiyKgoHy9aRpgKdahOdKNOj4pUCua0pCd95DpVSlCi/hF2VK2qVa+K1axq/nWr
XL2qVOExz5gkdaxkpWBZG4JSJEZhpWJo6Veb2NW4ynWudB3AW2dh1LPqVa/QTCpPD+HTtUb1
rlOsq2EPW1fCxiKve20sWZcK0r9C8KnsxKhizUjVJGX2sqpgLHMcC1qc6lWytaNsZSkZt+jF
MI2sbW3cNuullsCWs7UIK2o42a3Q6lacfb0paYdhWqCiFiP4KW7avvA2AdoQWFp6m0ZeC7tW
UUm20aXt3GxbocPVdLfcnSNkG/rbqAX3mixFR5duGFv04kdW7KVflJo7wlixaoVFyA/Y4IeE
ymz2bP57x2yt203sakiWuO2ugUFJ1vD6Y7zrS6U7/ONCXyUX/rnOHWF7y6TcLdUKVvx9Lpmy
5pHM7BdAqi3HfwFMBmQGQpkFPrCL5dhbkSq4DgxucHnTMcMBKY+5mlHuE917XrcBeYAkDoMI
SSLi6p6tw+44MYrF4M1CqWm7L64yEL+bzxn/ocbwwaZjZKje/oJkbeet0oc13LaGIa/MyS2Y
F6J0QgtDZsT+K/EsnPzkKKhYodm1sp+9i+VzapkSXEYCW8PgVnMUTGxitrN8zzzkMglruVjq
VYRvNT8uOW9gaL6vDahqZkfLAs95NqAKrMjnSv151YkM9DibCtBCH+HQUUi0edHLGSSTTc5y
3nVze7fhOndt2L4L4P5IyOke0Ll//hYhdamb0NHQfZTV1L7lUQfdBlnP2rItAViYRf08HUv3
wsE2mIaBxWSGHRlgwDa3piucg2U/DNyqcPazkyBTB9G02vymY4wZCmuKatsItH6CrUXSY1yr
24a0Mhuvf73hC8d33ipcd2jajd/JCO8G8g7zOex97yN4tt8kp6WrnYltaAy8CAU3OC1K/ML+
8ne6Y/71w8cNmnO3l2Iyzzix44dpFHZav0q2NEtAHvIijLzkTO/kv/WZ8j2snAgtd8LB6zMx
Js+8yCWM4ROvJCYZsnsJFhOy1+ObaTcvumsjyay4k4cOpCddnqemZ9PvzsyT5zLqnJg61bkt
i/cWe/Bq/j7ypFuLeHYIy0xuJx517Tp3KCzdglpY8TSo/EC8e7IYeicf5jvA9zn4fQhVV8LV
yUFv+x0+8azXAnQFk7DUr0LukffB5LExjEQZKg6062nvQfr5aMJFNTEO/kJ+34KmCTylYyh9
Ek6PcONCrL71Va19HS37U+S6CYjtvvezWntTmxTVy7THQXCSIeSXH7BIVT/w92AHO7o/e8av
hGBaTI3RA8H5z9fMKGB+fV+wXgM4fWS3Xhjmfwf4ZjUXb9/ngN8Xfk4QbSxQU8FggXhRB6pz
fBdECcMnCRpIOnGhFb8QMhyYE8jngXQxfyLYHX2hFCtIghUwRO4HgidofMAx/oKSckALRYH6
t3+ARysMB3TpZWRidiUgsVqux3OSEUXSJTGhkYAQpmbq9mMq9IBXiFgRCG0CVimZk4OH0jp9
EYMkeCksOIbh9Ea/dzR/UCPUIDTWUxSiY4JwuB2g0zP1xIYg8zh3WBXAgAXOsAhZoIOWU4cd
iIKFCCKTAEY3+AY++AP8dwTQZ4Svkm68Yl9ewmMEkl8gtnj0ZYBZx2h2JoRb525FBnHZp4UH
smclMjO5lYjgxIe6hygrRoYQ5Ic3CCps+A/JNBx2SItneIdz4YvRwosfqIe/OIvI+FnWIYu9
OIzeAoO9AYxr2DHb0GdbxnzNB4SfeFxvd4SQZj9w/tNmvVYlZuZx5Fhxmcg/Qmg2ZVNDPDcx
qUhAUQYvSrMmTjNlF9iM+6iCtWOB0YiDANmPRPGHykg7h1iQw5g4JZiQhtgW4FIM6vd7LvKP
gGKQmHeIvvhN6JFH9eeIPgCJkTgGb/eOmMhsZXdfyIaS8+VhxzWJk0iS5xh7YkeFMbc8q0UG
kCePLLGKxHgTH9M3j0It+hiLNJiCHZiGGPka/pCC8yeMyuiM8PeMRjkINiiNbySVI5WRWMmP
bUCUs7hQOhFwuPiRILmNHlF2JZmACjdvvgZ2DHh4NKRGJyRpMNeJ7qgw28c8qMhxO+kSCYUs
nPIuJgOVF7mM3CGQhekd/okJlts1OxCZXU/5jIUJmc1IYJNJZYBxlVkJjBjgKORRj7PDlKDZ
M87iBvTCiIFVBiFZBJIIioy2kqpndJrollXYkprIkrgpbPcjk2m5eHipl+EYBdXllzzJhXUz
I/gYNO5iLVtZlH44mUh5mIx5FhkYnZIJjYSYj5gpmsh4kN2Zh8kYi1G5jMTwM9q5j9gpndO5
kdNyUozYiNmojUEFBemmltTHlulFafPlCvczQ1Q4k3UpfdNHMI1WfZc4BMRZnGhynK7hha6j
ORsph4QIGAs5hyDolRfKgRlahtiAoZszkCZ4lCDKOCK6i4yZKIqzoaRTkcDxmWRIoX6ji03Z
/hQe+De7oXyTJZ/z6WAFODxQ+GMI6psyaX2bdnZhU0NYUps2aaCxWXEK45IDmgQKuqAWcXua
h6W19HS2FHrxqVZmwJpE0FJ2uaS/Yn1ByI1x6Wk+Z4l3uZK1EpyzCZMUF6c+mps6QKVV+g5X
mqV9+kmdd0ddqpqreZZvimtAaoqyOZN2+jtGSni96Xj4tWTpeENSuJtRqqiV2Jd6+pcN6qef
Gk2ASkehN6hkEKZDkGiCd6RvuZag+J+6uXF3CneT9qY6Rjb2AXZsU5vfSIRt6gM6yanGWXdi
FZTwqUUjamDGKk4WyaIwqgxbyjh9KDrw16LnZ0Q6+qVgSp9B2nrd/uqt3wqu4Squ44p4nxJk
wWoOmrSUy6qsvIRFyNpAACGhgAWdNTMJkHWZM3EzfLiu5ndAORIHZfmIhYquqAKsBWulnqqe
uYSiC9SwEEFNJyCv1wiwpEmeUIkH+NqGjXmxCxmdz/KvCuQCAmuW24qwxHKwJ+sO6vqxNvqC
GGh5LpODTAmdI7qhVkmQJ2qxOUuhMKuCD2t5Pmut+pAPFAgN9SqCGwCtD0mQ6VmMg8OvOnit
Uit1O8qjPaqyBpuyWZsOLMuv/WozHaqRTYuGpPmdYju2SSue1XiVKtqQqraH4kmNAYmD9yQp
uYEViBM0cxtLkWNIalitGbBUKMiPHrsg/paTNNHxKYMjo0LxEyRbsljLtQeSp5OLDup6lIYL
MmgbHt/5sZwpOeCpe577tU67Pc4ZjGArtF5psQIZltX4GrGEnIv5IVADuEkpOopQgxF5mGs7
ZUgju8oXu62IIZDbA6f6A65puR+3tcubrgrLuaXZnZrJgug5njvLnjy7mQFZmVzJsxdklImJ
ugApoSxTLUDpUXeSfkhLrUrbvsewvWpIta5YF7BjvjrTE8arA8ibvM5bGpXrvxoDvaarkB3q
toUruqzrvXKrur6rkd0Luhfbu87qhq0LR697vvsmtXHCrEexsOMJwRdgTtHLSZorQYjLihJw
f327KH2gvznA/r8+oLwBzAoATMO04LUMbJjnYcKke72dab3JuLASmcBCPMGYKcHoZw3jW4HJ
kpwg+yAcfDhCzL4Y6wvQVMShI713G5lOrEFDQwwvDMMme8Pt0LxljMMDTMBUvLne6cMOzJlv
rLk0Gsc+3HuIyLGKWcAVPI2O6aA7w7Q4Qy7aAidt+5VBa7dCFMUQebMN3MH2hCEvkqOBvC02
IcY4EMM6MMNoPApnzMmygEyY07MxG7bJRL0lCq91a4bSGqKmfKIkvLoDmbOr3Dip3KzTysq4
xzmt0cKts8Eo4stk+72qsaKeeR1+8ZjFnLmPHC+73COcw8phbLWmSrCfXMPW3LWe/gqq2xxR
omoYJaBlpaqtZIzN11zO58Cn3KzOeXdF2zVj4jzOknvO5jzPAjyst7XO+dxPS+tF73zJmEzO
9WwGNizQnaXNU6zPCe10oqRg8Eyow1XQZUDQEX1d93w+EguxCq3R7utJDf3PN5DJmkzRnezJ
I11bFt3FRju0FKvFG73R/JxF4eXQDy3PJg0FE23TozCB+Ae/RVt+POjSL91JMv3RIB3QAXyS
vZkSJZ3TpgCYSuy3X8g6ckEifRvFQY3VQuTNjYSN2XoKIY0DmxysSQ2b6MXUTa3TxykjGTy7
sitt3vm7WR3UW81AvzXT1HzUzuuNmHpDZ43WAYbSgLMp/k482IAMKYNc2Dwt131K1wtEWneN
1zVdxpOKMF4TbDopaX+d1oEdKFWtwfT72VKmLCy92OoM00AUcCM7zfHsZdaMP/3DbMWD2WWt
2WPw1OBUvriN0KZJ2qW9zo2tPZIF2Vd7Yyq7JGwWqY1GMJXLjrUteQoLNDqDvkMDOCwG1L79
0sCNPX813GIA1kFwzrGdlrpiv7jJl85te9rchqJ8o3QRoSzd3i2N3XMdqPm32qxd3J8s3ryp
EkXH3+hdBnnVrvNN4Nij3aOUbfdN062t34v6354Ce/C4pgD+3Jzd2wWO4UR02hjEU93t3Xmt
10c4YVICe2tWoBSeYged4St+/kgHHhAT5VN7JOMwQAAzjhgFYOM5ruM7zuM97uM/nuMDAORD
TuRFbuRHjuRIns4szuRB5OLdAONJbuM1PuQ4LuVXjuVZruViJORb7uVfDuZhLuVL3uRl3kMb
XtcqJ+afQOVAbuVrDudxLucS0eVzbud3judbTuZmzucT9OTJ8E8xfuVt/uNvnueHjuhIXueJ
zuiN7uhDsud9Lunkg+bfk06CLuWE7uOG/uid7ul0vuifLuqjfueRPumnnj1/Lk2qjeeazuOc
Tuqx3uiwI+u1butfbuqorusEoeqHME2YnulEDuu3TuxrTuvFjuzJDuS5vuvN3g2Vfj2pXQiH
7uqv/q7s1+7lx47t287tkK7izg7uDdTrerBLwJ7k1b7jw97t687j2s7u787uzB7u8w4+WERK
5n7uVQ7v+67joc7v/57s8k7vA79P445Oe3gA1C7sAM/w37AGApDwDS/xty7wBG/xKWDwKGA+
NUqureco4loAHS/yI0/yJc96EiAAxWryK8/yLe/yL59GFX/xM18C0L4PG1/MonILt0AAO+/z
Pw/0t1AAQU/0RW/0R4/0Sa/0S8/0Te/0TG8AAhADT0/1VW/1V4/1Wa/1W4/1koVAxErzYW/g
QYSaOR8kABD0Pa/1Q8/1be/2bw/3bS/1Ux/3dW/3d4/3eX/1Xk9+Yu/3/ryO2j/reWm/9Wyv
94eP+InP9O5uAIrv+I8P+ZGv9Hxvd+6de90jKrZMRwOe+Zx/4arMsEBrzD/UpUZL+IUv+amv
+nEPO6vv+q8P+3hP+WDfuZ+n+e+b+bV0+xv0w/5o+7zrrvS6DIHI4T4UAKe/9rGv/Mt/9K3P
/M8P/dFf9LOPzyZMtJdvGJ7PQNrve72P+aO5wAClrKI/Ui/K1bxP9Gqf9YYv/e3v+s7v/vEv
/7BP/df5mLHModT5gre4izRbodULAUBOEGy9dFoe9Ac/LhzH8BQz0kNbqVTd0wQvOnU7Vuve
eNvJWrYgRbfqkQgoWJH3AzY/A2HVOjtktVvC/tb7BYMLYXLZfEan1Wt22/3WDuBzet1+x+f1
+y/VKtcycsJ4YoHCOATyQRqM2qjZaVy8euKpsUwxdIppTFpRzHyknCQsPBpFJBVMJD00gdK5
EZ0VNMo8Hc2QfcGspY0KINhNLa1UBeUF8UNlngEo68ob46Outr5uA8Te5u72/tZbFtI+8DVG
ZmWtQIZkCoKNlFQXUhn8gWf3kTzHMWef/+QvH6p68gz28udq3z17hmbso/duUxGGEBcRWNLu
WLGNxRoNENdM5AZoZjCeRJkyZQGVLV2+hBlT5kyaNW3exJmz5QCdPX3+BBpU6FCiRVuaCemC
nMBjADvOgqiOUydP/v2a1YMUa2KOYfy84hsog6FGkU45eg3YUapWqgstcmXKduI8FRnRfm2Y
LETSkcw8mIRGqUBfwoUNH0b8J/Fixo0dP4YsJBoZviiWhh0rNirAtXHjPexrI627iJ1Hn+Vo
Fi/Zq29Rh7X62rRmtyOnxh7SlaNd2PkSiT4BMrJYwGR4Cxk8XPly5lcqN4ceXfp0VJPDPN+7
ZfVd1rhBf28qEXzrdd3LM0WoOx3Frb1Jo1f9Hu7pvJhrIxS13rZ4tBRXncYIPYF+Awg75f4q
yTjBqGOwwcSEczBCCSdszjowDJxCu3MUisidqrxLiD1HTvPrvo3o4s88czh0Tz4CQ3Nt/jYW
1YqENVgExIogTeoLD8caJbCLs8/GC67BAIoL4zjkKGSyyb0wdDJKKafUwMI+nNMwlKw2+7AV
hbpEZEf2dJlLtyqE/HKhMNsys6skwCyNkfhuyQ1OfRjRp6G1vswTz7I8cHMYQO0Ms0phzByx
H9egfAzBBMFQUobkqKSUOggrxTTTKK30gtEJLpPOP01HJbVUUzONVEe9lGLwSCS/SLWFSU+l
lbBLa8U118M43cJTCUANlVBdhyW2WGNPiJUSRDXwdTFHjVNwwWOnVYZaa6+lgNc4sAwEW2+v
EutMatUc1bXlzJ0gQOiaTczVR2EdZdZviWV3Xnun1DaLZoG9/tdUdOl5SCtbRPBQllgCBrSx
d1bFr1I2BzX4YK4kErjhdNed7lloIUVF3n5PrfdjkSXM94B9s3TmFyr/xVTiLYeAmWGZLdIv
5acKW1ieiVlGTK5lRaWF4qhUPu8DdZcLGWc0eE0WBY9H1jRpqKeWruSTu2ViYId5zvQgh4CR
a022HqFYPhCbSk9Ym4vOs2JFvg5abYJXWZiEtjnBb0y4xQxbayiafjDUZ85gumOqSZX6cMWV
s5rbLHLQWkc7cflPPZrBlCLggrm2WK8fI2db3DXnU/HOgkEXfe26Pf+lKp4p/9ptyOluM5l4
3L5dZcARS7yspZM0fHFKbxW+eJKR/nK8HIRFo0FYvC9BnZjQx56b6ObJcqVzwj5nG2ja74He
bO76tILroYP2O3J7cI6Z9tH9Ilpm8rkHcvfCiB9O4429sB+Ep42PEP4AOMCqIe8PKLMbOorm
ls30J0UC6hE/MqOyCR6GfpuIn/dCt8Hxoclc9Htfoqq3QKikJ3xlOh+JTng32ckPbF36USL6
15fe+SUNnJqhBv5HwOkIkIc/ZJwBq8Cv8JFwdX7aEuVUMaMkwvCBrzGFEtnHMAy6sIXry9tB
aAOwF2ZNNuorIeg06LLZrc195Cpj+1boghw2w4eO0V+SOBY8IDLojXXEI2Mad0Csqc4WZERY
6STII0GG/mh8LTIM3KzHwe5ZbEwQTMfZosfFmfksPyNspKqm57PfbE5nTZQdCENwNMfUMBc3
nGO88thDU67SlS3Y4xARWMScpU56A2kPjcS3yQFpEDUse4siGcnADyWsUL0kEjLVeIUUktB2
DRPTn8KVxGFqj0swnOQoI9NKcanBSm2cwA5f2RhujtOcVRLiOGY5wlrGb4mEBIsu5XebQVqF
iXNi5B8xSbY0YmJI6DCRllwYQmWVz25V/I87bZnA6hmziNX0JEJZRsrFlJMe3oQXM8R5TsNY
lKPnjKU6+6i5ujmPoHRCKebaJKhXsPSah4zeGDvROk7GkJ+F8CT0VHpEZhqU/qFqcdYyS8hT
7eVzjLzgGjidc67B/Y5/zdjoR0fiUamOM6QyIGJVNUkbQr0IkjZbVtd8mpsJPcyZD80KKHvB
OQAodYjMcRfhMkpHrXa0rnetTjqxuk68NqlmRR3XWFs2U9uptCyAbQZFD0NVu63BQm4FQFT7
Oo7JVlYGV1UKX5sTzClCja0LzZ8ZIxOj7bkSsi1gLAkc+1SoWhYVd3StZTGLWgSaD5+Izadg
j3W9febWt9nkZDa92NBASRGnaP2paHvLQ8XaKrSr5YJIJBtbCsCWupOdrWVmicZj5oJuFJSb
cg87XNzS8rv7fBgWvTgooQo3uWG83SueCQyY3Yi+/mJsb2nCWtDSnre7p9DBafdyIDZY57TT
va51r9vX7AZnu6Y7L0K5qqfw3iJsbG2me834JvSV7b35IZBTuDvNtAozdp6TLxUnNznhYrhR
OOOeQ886CwFXCzJxfFeNF4za1O4YgA3OzkjXIcoMSnKgGqYkND9rRYKsl3UnLapDCUti5Iq3
PMYUVQsvyUHO/hRz4FrZedq5Kgk31409Jgl0s6BjH9u4zTsGsjJq+7wPczltBlkyk1d4A70h
lUxvSrGfv0zmKk9skkQl8pEheGVGD+zEa0QimZ8HsU/Cz4THhJgaM+3TC4rWCWz+1Y2bikot
gPrNoT41nPWaWawRAbhW/tYbuW673E/maMbsfTKhV1fp3gIT1/Ns6a6x2U9FNVps841yD8yK
UoiWKNBD/mOiFyjttYLxvYMAtYJt04bJ9K8A3wb3tyOLYCCK+624Mjd10i2YdeuQ3I5p96ZW
TVsh+9Kdna5zrpVFPX0bW8yo27W1FclrR1oavJhRaJcTmDATs7DQ+R4oUcnn3YYascXWpnLA
rz1KNqMZx49q47rjTamRqxvBSSv5ctKdcpUnh+UfePnL/ffuE6yc5gUsw9UeNyBYq9jKE+fv
pUVkZwqmr4toy7d6mXlU2EibtGT1dyYh/vBmE/23yI3dESSOPoVGMcueRkHHG8XtUrObAjJv
/hLamaN2qakd3pNy+9slEPeY0zzuTrt5g+KcoZGCD+IyVvF+Oad0aPvTy+zkuuHv7YxoIvks
OpvyiOc5O4fEEJCKFhsKwap08x10ZhdPfBplPHqAw7LGPf74/kI+K3GD++yuDyfs5y57d9t8
3LMvebhx3/rBmFv3sx+3vFwPd9rXPvbBf/23hcP73Rs/+L6XPfOfH4LfN7/2zKd99V9/++nH
3vbAv324nxb94u+e+CKHvfjD33viJ9/83Mf99su/nL0zC2WAJzhMp53hm8X0kFO2uDDSNaN7
uL3ZOkuwt6gTQLTKv1qokX8yKqHyHkHxPwGki7QYswgMPU0LQELD/q3TgyM3iIbVc7/0c7kT
ZD/wizfoez8WND4XfL4U5L7hsz0TBL/rQ0Hk4z4IUT8YVD/4c8EelL7tm8EhPL74s0H48z7p
gz4Z/D4YdDcgHD/2O0EVZMLzG0KbS0IplEIqxDnKSJ4tE0PQIy9hgibMIzwNxCQOi5vGOyIK
XLibmjxko0Oa6ToIrDIT+7U7JK/D26AR25sjIyOh8UA/xDyu84REBLRlEbDUSr2NIcEjLEIr
hLkqrDlLpMQo1EQlJMInbL9J3ERMbDeQwERNXLkbDELWmy4orERJTMVWPEJW5EJQDMVSREVL
lMXvu0VU3MVZ1MUKmTft6rtcEqh9EzGd/toZ46KVXcgdtXKgZAuu4yK2J/K64lIh/1oeJXM0
kDotRxTBNTM7V0RB8tPC+ftB9NO+JRRHHOxFT0xHTpzFyCJFWzxHjylHVnzH97O+WozFHyRC
88PCdaTFf8zFTxS/gOzFdrRHg2RISQTGnAvD8tqsZMK6cYoRZQyqmKowyaGOWRMeyGKsR5Sj
A4hEhbxEWzTFUkS7LUS/TKRFWfxHgSwAP4DCV+THTXS/lHQ+gmzIS4xJ5/PEG+RJoTRJ6vNB
VexHWHxJUcw7wqi/6tKsVJPKqdQUM8Mqxoir1SpJXxQnmExKJVS7o+xEpixKowynXhwAXETK
l0xIh/zJgSTK/nj0SqFkObGEy7KUya4ky7w8S678SngMIojko52jysI0zKp8raB6gy7YSncs
Qic0QoCky8hEPhaUQcmUSy+szClkycFIy3pMPnK0zM2czMtcwiaEx9bjStMszcd0zSRUzSj8
xeMzQciEzMgCS97Dwiq8zCz8ROh4yk+JSt1yGCf5Fwk7RErJs/3Ir3/rL4yjOD2bF6WiqqzE
qMb8Te3TzvkjzXbLx+5zSSTsTVUUzZMUR5rEPuHzzbUET+/kThrcR528xZFzT3Qkz6U0SvaU
TYSMT3w0wuxTyZaMy8AEw8FUHtsgleXMSNBCTn/pSEEEq87awJ4qsnuxyuCwKJGU/iNTo5q7
Q63DnMrg/JXhBC3lNE4ElcgpUVCD60PHo9CfE73iaSOPsk5v4tB+QU0aQjMQZa5gdLA+UkRd
IAaJ4bDmMdKCmBOTijDpKYE4dEMmBY65kTL02pn7KqkjJabTObZNwzQoxTJE6TOamlKyQVI1
TLz4Wh6GozOgm5Yc0rZuWswbxdHvpIQ35VHs8tEgI8wM/LUYizY5LDykctEDvDWPcE5kJD2s
wMNLAqEGNSE+7UCrk9QYe8A/FdQ6lJNCFLa4kUP+K6kJVZ/PeUNsudAp6Bk4KNVKbMoBdZIV
ZMrqizvY8lBNmVWfVEpbNcvKElEAAJYJPKtRzUAPxDCp/gCjMau1QEVW0kPUogMsPHMmX/UQ
5RpVRzDWQjSvBdS4AVQ0CVNWCD3TFNWVGeImDU2SGapVnJQS+lTLHGTVKcCQc60UeL1Vt5w5
vKvXK5DXYtlVfkHSJsVWrdMnr0OkYvMjQB3TJopUa/0eZnWv+ujWfq2ZgJoxUEhUEOsqjJvW
QqU2bp2Ki/1W/dNX+ymnGvUmK8hXwEy7KQzP2XwSSVlVkntZdG3XKlDXcFScfV0nM8zW6QlY
Msy4MuzZK7tAfwO8id1GhuXDR8Wv3yJUa+XWZ7W1GMVWAoRaOxS6roNOIltRTBFZ9pkDbyNH
+duhcqRN9axB+wzNtJXZTORO/sB0vWUoP3/8zu10T/zcR93cSfAMzd90WwHVR7HNzfarzSZ8
VTq10DyVs1YL2oct1sWNVE1oH2LtsKONmYHj2Zux3DME2s/gXMc9IQD007VSVmg1xEMVs9Cl
wxbVOELN2Nb9lt0Z1681WcHdTVtNxfG0Qs28XVCs23sl23l9Prg1Tby9S/jEz85kW+KNwfAU
z8lsRV1U3tPsQtRE3vUr249EXL4jzP96Ng9jw8Lq1/tCwyh9qO+Ftto5XSENhWNF2vEt0x0R
2vAlqUCqnBKzOCxdJtfBKdQ936HNWja13wXsrqvLlVQ1JXIFHprdS5lz1bZ0SZtsYE7MPXos
vt5N/suytMm3zGC73GBRZF6/TM2eZFkBPUUQ5t3bXBycFbIwi46mvVPEYxIXfuG2+tDt+Vqw
xctcXd7MrN6DVEfMpNcP1kGiFDdxCMrcNUfR5GCG/L0j3tuF/MoIPmF6JWEofmC5ZVmoUeHt
NdGM2a8ZFt8Y/uIXbpoaQmBIwWETHsopTt4czsmUg16UdN7XCwknnss3tmK7leKCtFdexE2l
7OBb5eMrnjm+pZotPlAwVuRFZhKrPOAbVmA3BuElJmSUFeKEzODcZBa4xWA59t08puSbLOG6
zM4kjmJD1mQg7OTn9WSRQWRGhuVYjpBY6Z0zhpU0tt4BpcFxpN7dXOAr/rRNCT4/Hexl9ayu
zyQ/Ta7NEA7ms83BZbbLHTbeEjRms4zjIXbIezRJL/TN8LPk181e+2s1gKU6GG2Z0Ji6rY3h
VuE/AQYzdG7R5FyukWkuO1UtVKVhl81JVvXH7kxH+IxjtP3hmMRi6d1EHqxPVh7o61NbgybN
u+VbAK1ZKS5kgmbNVI4/TEbIIz5ZWnll6HRRcI2SPAPAcl7GBzXTantOFBWvzjOeSEkcW34q
OdWomDWMjk43e26OjmYMnobljwZVqiHpJgusjKEykZaQki7Rw1ESneYB2aXpjrHpwsDp5NjR
vvBpxMhqRgZqXVvTAS7flRJSsc7cRRzrr2ax/vO9pTDl0peZH0fDXwDGxpQC2LjmUn9V0jB+
JD89UjNtawREa/kKtsH2ajg5mMPWusRWNsVugsYmgsWGbMemNAvACB0YAMSObCGFagnZaumK
WXO7aqye6sRoW1m+gq6etqlNOJDuMK113FqqPFFl7Wfq09CrbfOC1Nw+tN3+V4M1VJvKIPNF
3ahV1KRtBQy0bUN12l/9oeOQGpK9ISBJMNPmUdR2XTHCBZlyHfKd7NENvMJj3NZWNkHd2ac9
7Pkdw2cVWGoFsGuVtIrFVJe5bk1tXPDlrcL2V3172uUmWiA6mqSR6ejKZ9cKbequI+vGWCOr
JKjr1vVOjcpjtPJW/sbzVu3Z/kMIh4r4KggGFx+JG+ue5RvuKm+qrVagrVAYTvCje7w6kewt
ZezHbnHMjvEX724Xp2xAuewZT0TZHfDKKnAD9+9whsq+S/F5lk7E2zosslwsY26sna8RvzQq
9W3KLTQXztjJtVgn5+9C5e+fsXDQRXEPV1jmQrWC4vGonhqnBnLZEnLhJPKPHfP//Vyj1dZL
JQQmt7UrVzwot/NJPd0/1+0T76QKz3D1tvAt39QuT7IkL93wrnPTled+CZCQge6luZi+UvM1
19U2H9E3p++5XkOxTlb6vVKGi/C1NgUna3IrBa6+ht/G4949GaaIKdpUqNi43jA+29/k/v5r
FJdU7Fbf937rNtRyeq6XAC876carTNd0PBVMWVphxVHnBZNh6Kj2Zj/tY+fxHq8qZsd2vFJh
oxD3cSf3cjf3c0f3dFf3dWf3dnf3c+cJnBg1brt0rfrxb29uTufVNXv3fvf3fwf4gBf4gSf4
gjd4l4h3m6h0wskWe8f36tZ3QDj4iaf4irf4i8f4jNf4mwCJm5j3Amt4qbr3h+/RZxcpLib5
lL+rk8AUP7CfhTeJkOeokVf5H4t4Eq35nH8llp8SCAEcZAfHejcnmtd57DX5vYr2old6q0pV
S0mXpoH5wJB5V/L2pf8ooJZxGNf6Gs96rqdxG9fxFrf6sa8C/p5nEnGIFaAnySoZp6one3NC
7beX+1VCiQkJCTOL+mgRejxy+7k3rZtPer8XfOZq+uFICiVR++NAc2Pp+8HHI6z/+q4H+62f
fK/PbMsXe8fXfKMp/FICAcTf9r3nocbf/Hw/elZD+dJX/R/r/Ir6/CD5eMcyGr5f/euK+9rH
/Y80e+V4jiAJfWX/IaLPfXA+fXpL/eFHfqZufRpClnX4fW4HIOFP/mu5/em3fi1efmbAjsp+
fugXHum//jYF/OMP//KX9OyvUyYomZif/QECf/PX1/FPZPin/4/Z/cXCjmBY/wRme+Mh/fqH
ACAnrfbirDfvlxyhOB6DNw3jubKt/vvCsTzTtX3jub7zfU4ACTkTJgAIgUjKpdDS9EF3A2K0
ar1is9otJ7kMUT0pkctYM3PT6jW77X7DeUHbNBMQeb9MzDOervsFCg4SwuUthXWMhVygFVE4
WkRKQhZaXmJmam7KAdEkThiNAOntfXD6AKKusrYWHiqBbiweUG5ETkrkVuC6+v4CBwvjzMXI
AtyRwOr1UTQPtxxDT1NXd5WWsNDyVgZ4V3KH6yJ/h9pao6err7sVRzceKZFiHzxL2LNXSOfz
92cuj9h3YZs5SGgOwisYCuG4c/4eQowo8YM7MY2Y0cMHQGM+gRM/grQCUIRHfSoagkO5y8wk
Rwwdhowp/nOmr4oaQInCWEojx3UlaQINymIkGG0nUSJ9mRKZOKZIFQqNKnVqG5sDJWGbZ+pU
xJ9Uv0olmm0FQaguoT51mhStWrBu38L94QlDopxZv/CEqCou37DYvEooq/Ds05Vm0e7qq3gx
4wpBntWlh2QrV357G2OeKBYwAMEFCbdN7BQ06MymT/d1F8ZuxkMce067jHr2us1GydDOrXs3
MU+rJY8apQH2MNm8jwOzTfYo8ubOnzsBxBr4vNcdoWNvpfyE5+zev58eECQZ8OA9if/iDH49
l+1imLOPLx9snQCPy+M5r079/P4+3CsC3w2i+VeggYQQQV4Q+M3FRzr8HRgh/g0ActBdWzAQ
mJCEG3LYwwDT1aPVThtlgB4rEHaY4gkUziJghh68CJOKM9LIHTLMiCjPPfiYuIlxNQLpAos3
wYeLNwcdOU6S5BzJ0pJGLJlWkFNOaUJrOdbjTGU7PtZHgxS1sdeX01g1wZg7otnJDWfywyab
lgyZgWC9mHNWOWqVBqVSMVLZ54EfMqhVM88M+oQ7b6bpWI+JapMIohMuKtcGbjbx6AyWDlVp
pFhgKqSmZm7KRpx0HdWSQ1CmlGdoTfnZaocB0FLeY054qagzJlLaQqcWyLbrC77uYGmuUQC7
QrFZHJspqKiMOhBzdBrU5KpJNYnqI65im2Ks+IVI/qiWy4K7kZcNelJMl1x+iq5N5QpRzBSz
pkluRfDSOte57KK77LrlgnomvfOOa+6n+7Zrq7hoshuwoe3meq6i8opbqMS3gpuwuvkiPG68
DEeMb5mCNMtrkUulRRrJF7KVrcr+GbGtrFx+S2K4hy4sMMPpHnwwxJTeLK4J9g688MYcP5yz
vHMADTPNEW9Mq75CZ5wu0juPmbTOFhutac8GDwv01h0LDfHQTOec9cUVB53o1KFqEbJJuKXa
jdyDLWUtqyvj3R+s3Ap3K74P02v2PWrjbPXfXeOM9peGv0Yo1E6XbbXg/hYuNdSSY15o02Iz
Hi7aYAoeeuWEkx655aAn/p2554S4TYGFSN4p7bS6lCO7qXnjrvcRLkvG074UN22w6A6TXTbw
mdus8NE8Ls0o2KVzTvznwUcP/eNPD6/u6Fzb0+X2lE+fvenwvunx6aXD+ddtjOTevvst3MF7
Rl1oPHPi1q8Os/NNi3f+38YXjQ+qm171gidA/JnOgAOk2OEu57j8SQ54EowgAsUnNgnaqoHo
S9YWWocCAb0vhCI0Bxj4liVl2U9tFQQfBTf2M/8RDYDCQ931OqfA+3GPgA5cYfe2F7oU5hBy
EywcD4s4wyCKT4YgU99y4DbCJ44wGVPgW6QW9ziHVa9n//NYEL0msLF5TYZTQ5jxvLfBrY1R
/nhbDJsNE1imBYZxgZ+bGBz/FcO14U+LOAxf6hJ4CQ8GBoRQ1AKfBtkXu8iPGbrSXBkv6Mgv
GnBZ/SMcx5CnMAFa0XljvODzMDZDgDHwfI18ow+XB8QhUuSRfgtgv5Joyv3xcYewDAQgO1Oq
aqFMSh0oZCF4eYtC8ikxhoGRHXaZy2tpSAe+XAEvb5eFZsrINOQpAbfYVogfCYODVdCmISfF
RO6MLGXH5MAyBVHOhGSIJScQJsqCWcyTqZOYjzjnLciJIRY4c500gObdMsOaRFImGNh0RRjf
UNBuEuOb73Hi7GZCz35qyJ3XgpY9kZnLeBpzosqs5z2ZeYYZ8LM5/tOk5suKgw7ptSNwCLVB
LT1jpztdSHbvXAhMJfEkJmnAduCwnU6jFFOf2hSmL3op7EqD0z3hlHZC5cU3lEK3KMn0p3ZL
502h2tSc1o0pVrVWT5faFD0VNat1SupRlapOn+YTrDR9qD+mA1Bl/AM2KOrNSlHT0nDSjm6H
mWlDsxo7i9pNq3I760tUlUyw1pRVfzXZYEiDEMaqBKPiWGzcGnsyvz52IXxdFWXz+lK91i2z
e+WsaMlBWtCapbTjDMpISdq7uM4ipXU9zV0ZatiYylOcjbiqOAkj2bKetbJrOaxuSzY3lYj1
M8fFk19naifh9pWqgZ2uRdfy3LFiF7lf/l0una6rJO7OLq3gBQuI3ooH2MrJoNacLU1qy77R
MpepFTXIL7/bW1zmVbOCDS5qqzVM7WK1uf1NrnfjO9xcqAqyDSVQ7Th72cKAl6hJ+i98EetV
B2dXq7ik8HCVhF/yIoI6ngKf4tiYSQy662p07GLNQtkvbrJ3Ju6tRXINDNHe8pW6yVSug/kL
4NWOdqgC/rGCC4xU1HZYsANG8qkwrMskU7fAuhRvhmsc5eVOuclVdguIXJuVRWpSY4yTXtXY
SAQ8Ro3FGXtx0NYb45jMeLtLfvKCkcnbLGd4qqgi7JyPqeAAm9a+RNavkfIc5NvmV8mDzm86
NevdxE7W0ce9/rOi75bgnU72yp7FMlsuXVygtLaE84MBiW144lI3YZJ+5OTk7pg4Vr+ZL3G2
MmKACpOoBrXSwrzpZ67KVQ0bFddMvXBF1WpWkk24nWSNqpECa2NgrxXZvobRtHvt7IhWuyHJ
ZtJvOy1WneZax9sGt4wMK2ypdNnLilykVcYMyUjyT9UFFGMlv1c/Jcb6LbNmrT/zPZtQi3pE
KHTT4PZXtYJzrw4DhLX5KuhHf8taoQFiqEP7DfF+62GKAjfWHu0oRE8eT5ZJDDkQT4zvi09l
3yhfud5KAdAqotRzaSQx5CapyjRDLpOsxhqMWc4OlXPU50L/dzwyvnGOxxCDHYMg/vM6oz/0
dRKJT6f3D4feXolXSJA71qdHb0wNYAIanw/uqNXfAnCSHL0qHJnrLMsOHaAb9wUh/fTWNQH2
zXKdznWvsdtBXXSj48UQa/+V1vq+HrgjmOy5lQFb03B3HBg16JttvOGrcXa0Bz6l+Bgo/T5W
+eYAPfHWXTZvuxp5okb708bmtocJG9Zjw97Y/oV9WXNM1qAme6sJJrbeP9/WvwNeR5bgvO87
pPL/flbQlNYTk12i2sjTV9AartPznTz9RStfNM4v7val/9u/SonyxQfG5TEvfASxffzs2Tc7
R29oI3v7MMG2Pfzhj1tDQ7mvcqazp6XfYQ6r3+8Bh8u4/hkUEF8ASsjxEdf7dcOGVVedzR73
4d7ytdOHxY4D9hcG8h/f7R+w8VqQ7R0C5kP5mV/fCMIBiuCBhJ6WeZ/14RmtAaClNVk+2QKV
6R/0VVjYSVkOxl0KPkS6hRhcnaAPTgniIZukZRcFAmD/jcZ8yZ9quV8LFtmkaR8HwiCBQReQ
ESE6kGAJIsEQbiGQwN2zAddOld4HyuBekVvYpZ7s7dYFwqFkOZ+TwOFqIdobTouwySF8heEI
At9fCGEcpF8fZscY0l06iB8hxlgXkgQtFOAQKGKNGGLvIWIkBiAQfoEjCqIl0sgkcuInIiK3
aNwJhckggiLoYV2LUJxQJCIC/rZiGcgHJmbieZXiKaqIJ0pUCD4gRJUT2OViNNXXRsmdL9Hg
AzbeL/KiGW5b69kaPCDj2AVdMW7dK7IDI5LAGDziDKCgLcbHGHYb3m0ZOD5YLxojJT7Ztb0T
NZKjFp5eRkGjHZrjOF0bkggXpZVbPLJTFXYgJUrjO0KELM4iKf6BKXIjchghPqbjR+kiG4Yf
QmqUOwoj/CzeLgKj5GUhQ/IYoTnWpu3iN1JkE9Ydg0Fk3smENV6jQG4BQRakQaYikdhWA75e
YdwZ6tVagz0Jfq2hhTkVcumetE3VSJqeWb1eBL4hDqahUNJhO0aLUrZe6snkT0raRu5ZR1Jf
TEoV/hmKXmrxFO9JlVH+4x8OIEpmgUqu5HEoYPTp2qGlSmFhVp/p2P2dQ2dhH1cu5R5Slo+R
4XZ9WEiyIFbSWq3hX3iZDAV6mAfuZGQF5kbyIWL05U4iGjW6gkleYza6AFmWJW+w3wxC1/yF
FzxtJqbVmZ2NV2iq3pDtF7UcJhZipLLlWg/CI2u2YP5h2h7a1zw612jeoUfCZcpAVV9WpACa
UAlQpjZc5oycpfx9JgguoGoipX4xZmN2Jg/qIKf9WqClpnJiJA02mGu2H4Ql5l8q2WD6X0Mi
p1taYTEWml/qFmS2gmReY0oWp3G2pJzglfUdGfbtY3SSJ1Pm4BQy2XJW/lpt6idgHSJ6Mudi
ciduHuht7WCCfid2xp9nQmiS+WM/AKTLjaVlxuduHGSgpeX/fR+BPmgU5mWwVR+ImiMTCig9
6t2fTR4Lgt9fIt+JCqZ3/h+n8aFc2hiLUlhWqqWDattCqoN7joKGyomRbmhueGNT0t5V2uaO
5WS0xF5oQUsv9GRNBigbrqGA1p5S2QFakSSC1c5M3hoa1iDp8V7uaZkGGmaVcsOVPmWWXuRF
jSlU+qRHsicmXCgzbKMM9GmSrt98ksoqxkSefp6hjuR8EOl5IanrNCqgzoYnfgSiGh6lWmQs
guXL/Ok7QKp8YmgTvVeniiohLOoXOh0PPOqo/tKWoDoLoarqq6rBnmbeqUIirHKIpH6kRNrq
rt5IcJKihqYqrzLGkk6nOCKosF6mrFIGWQYrsipGh76okFKUsxZnqQokQW4qtTrHClalhGIW
f2prQSrr+QXGJzRruMbFcSbaYZrof1oquqKctTZD+mUrvJolq4oM3NjgMO1rrtprGI5rIKKA
MZzrv7qFug5ojs7puxpsrMkrr8BAvTasbnDrjR5lwmrhxKZgwJqg61SmxvpHh/4Z8mUhw4Is
ez0sr3BGwZ4sVRCrfz4kfrYsIXIsLUKsjcysfOBqzp5syqqsRfBsN+Lr24Rq0AZtzZrqVVSI
0Qrtp4KTq+aAyTKt/r/5rNLSBctObVBAq79eVFwA1dfupZdKKVI2o7HCgdTyBdq2Z6aKWHpd
bdYGqtMuVNE252+6puJd6iF6K0P2Ynra1JfKV+DGo3pe6iui40cOVdlW6DmK3WquIzE9o976
QtVaraPCbdxm3PrQGOKK7ZuOra5G7nhyoJB5nZ/V4W59Kez87WXZYIHarT6CZqKGI0fyK0l6
7kQC4+OmYejKqTAgrVjqw89e7uENretoXRU6plCSHe/iqROaLThuVRHsmuoKLvTmrd1SpOgx
L3kS7vZmrOx+bzRpr+3G7tf5KvAG78AOL+ZmouaWQZoKKYHCqZNGqFbeJFc2Wzv62krk/uOe
tQS7QmldJuXesl79PlUc+mT3wiACYylSgelSMmkERilRZuXqMduw5SX5se1rxVa5ri/7IoL7
MhPzPWfpVpeO3iex+ahswiZpFiYJr64z+u8E9uO0kmbr3qFlxWaNTqhTofCPIiZ+wvB9fuhu
ruWI4olXRub5EocJYO0Ha23xfhDUamk/EaNmmmf5EnDntu4Mjqn0FtNNxrANlzBvxuixBqlo
IjFnPlu32Z8Lg6TMDqhvsXBcKqjCQsPvNjEU66wUBxIVg/ERYm8ArzF4EvB2tnB3apuTBDI6
MXL1iu89Rl/yrifrmiYRm5sdX7J0ZjB/7okFTquPvvFjWh4T/gMtH4MHwgLuEQ4wLJanEBtw
Il8kDt4Oi8bwmSaacy6mgU6o/t0tBCbnj8WxjdqndNLy3hJxRrZw/sFsBv8Cx05BNEvzNFPz
E6MynPmxLTmRkNkwRp3xfP0wivrZxdoyDnOvLqNluf0vOU/jEQPpMPNdOPOwqfCyh76lYpIx
MJuni0YXjeLzJVRzQAv0QAe0zV5zAmazS0WUdzJEaUGaRs1vs/UuhYrtMmqnmXZuAa9VYqGV
7hHlwuJhl140Ii80TDol/XLYQ7veSUv0k5YpSc/hlGplpJl0k7Z0+OoDQev0TlPzPZnyQW8I
4n10Lucy9UIykKitrnLBQ1fcLPD0/lPvtN39NFBHiHtB9VVjdVZrdUA3RlI37mxs9Vaz4gaP
GlWrYEI3Ylir9VqztcSqaltftaJOtVkXiFXD9V3jdVQrYl7rdDfpMV2ftdxOXAmogjcX22zy
r38x9akoLgrUq1c3Bl/3tSVSLmD3sWBnHRgUNpEp9l6eGzGPMEkf6TGIpOQKhWQP9Mz+tWWH
LFprNhXEk27KI0cpdgzESDRLqwn7CGoLNGuXwVz7NgjHwvrgdhpLoIgSmnG7coXIBk3+8g3w
dm8H9yCs9i/N3mLDj5iSk/ZBtm3DMOpiNzrrDTCRd3cbi2sTtgl0NmqGbRvaZBon9moOxGX4
LRpEdzVP/ndJAjddFHUiQlp4L/Z/E+NDhbejcbeHBqMPFPgaLLh4Qx55r5N5DwV6F/cwi/IY
a+9Q2/PzOupWx2B+Y5yvood6d98ZaDfjnfgIozjXlXYwUWqDO14zGSqMNziMVwWFb3Z8UdSO
124c29qHz3dd7N8KgzhqVHZObV9HM3VH1+XfNlVMe1adSvm6ajiz3e+U94BV3Z5MPXmTJhVO
ajlHK3lik7nyavSTtzdP0VeXe3RrEjVNnXT6YLYqprcyE3M+imbo8kmFG/MgF/khkfWXRbiU
ijGCG7hzovkE2vNWfjmPDvF3aySjPfJRlTe13W+jS/qETTqYRzq3pWedGrp1/v4vCV9gpnd5
uH13omu6lwrVo4O3LWOCXcM2aONWdyE3+AIgn89ZPv+5P+03kqPlF4d6qYu6eLf6ulJ5she7
sAeumCt7aA/6Ihv7pDd7Qzv6m6/ugjv7URe7g2+7sIP7tUs6hmM76+B4gpTxlCpxaMQI7Fav
ritzMvf6aVT3LpW4lG97txN7OjM7om86KMP6RhcVtX/2Lds7uZt5TXG64Erw9DKwouOeLi98
uXP5I4e7shN7vvf7H537XDYjXYbDxnM7BgsuvM87y/z6KmP8gY/7ot+yyGd8wHNxine6mLd7
ja9zy/f7xTN8zme7RFd76q58fyN5Q9f8vw99z5f7/iDIOsZqaZrne0bLnWNb88l/Rb1vd7BT
O8Ize9R3fdIPO6nTvM6PvXUfvLSTPdF3+2jIvEpvfdgv/drzfNwvesy3vNy/vd1rgqzfd9+H
dddd7+I6r4RvAeFXqOFzrWlDAZED/iUcucq7PKW/ur/fntp7+tCr1amblj2uuqczcuaz58Tj
O8ED/BeDPsWDOaR7PqpvWsOvOQYf+9GzepLL/ObXvrnPuUumt9/zPlZ/ddE7bmdfsOIj/j7F
Aen+fhS0u70Pv/NKL5uGdPy2AdYneORrtJsjuOZLPJRbPwPr/bDFdNc39j7tex1qv+Rn9MMv
+al/dudDsL8zn8KLqfxP/rLFqz6TR3+ov8K5937/87SXQwCQM0x7cQa1auq3MBhH0OrMDE2l
tWXhszRdsP7YeyN5Pg9hOqCmw6n1kC3fyiW8FD2cD5RCemJ6Me02FTh8wWHx+EDgntFp9Zrd
dr/hcTl6Nrff0wRyeLAdhFXSnAKvtgZfiKSGCOtikrpUZhQXEU8EDbG4dBptKiGJKAkzQQst
Q6NQhXw+RZlKaThNUSZXZ6uy8OAq9njFzHKBg4WHiYuN1WKPld/0evu0/sBG6TDbBlVxTpWc
VluTlUCLuj2zNavZbpisSg/LC5uQksRxX3HayWVRbeKbbtfdsfwjZWXSO3wHl3XptbBMQocP
/iFGlDhM4ESLJprxehYj2pdXrozMKjEPisAjlv6NuzfNlaiALevtCJeoEkxTi6SkHLmtZKOT
U+qoDOTzpoigJp/sRLh0WtFsIf05JQjQEzd9OGN686koJyltFS9aYtjrV1g6K5NGMtslHdpv
bt7CWhvkGtq5cDLu2Qij4wGpKG2JxBoUoLopRe0O6eeS1V99P0MSbgX4MDiQtvAZfmETcyzM
VSrXvEl0KFvGTwOPHm2T5zae/CLHXkwj4GYgXZsOTLzMy9g9Ze862i2TeHFkwwW11RIX3cqj
wcHVNg4aOrG8ZPay6FsYZffQIlR/9E7O7meEbnNfQ42LdXjb3wvG/udeTv7qUFQQY63q+Mqh
dFdBck8/+gSLwjzF+OvEKZm6+o82pibaxTcygKtOrjWeay4i5orhkLrp1mLOQwtzuW6M7FLY
zp0A4dthCa/oA0yoan7K7cEEJ0urloM4G0zGqU7r8ZHzXFtxPARjpOpA2HZsikXRktzvQ0bI
84cT/36w7JR2xrmrtwl9We7KrRh8bqStzBwTLOokMcLFM11MSrMy16zIJKiiiu61PMsk7kx4
CvJTHDplaJMgPFuzrC3DxoyzUCt17PKob7okEQYTxUDRBBWjBK/FGmMSEkZtDJKKnsbuu7G/
25AS79MjiXT1PRup6rS+AZFkSdVQ84Op/selAr1l1hgdlFXB27ZcrjoJwQyjwn10Ku5QN+M8
NDpDHSWUJkG5dS3aDLt9KU1h17FWWjzb3BPbbxvldtprB/U2XUHBgnPPR9mdkk3lqj0iXktj
wJQPPwBhB7QnlRp2QVHtoTUTUC9DVU71SssJYnbkE+xJXonN51hvWpTSz5mYsmrF1J6yj1T8
2FRSkmTrOTC8YEmldcQOmw0zh84KnNfnf/cNWk/p0p33XD2NNloGe3pumminww03aXjgPbpb
cH8eeumq1eI6aqHTAnFbgC9dSFMQOF0NN0SAbNLGX93Oajatfd1V5VErK0lXOT1lW6m4F87v
TQhrRlYn0sj9/iplvA2WkU9KpsImy6paYlmxuSWfe0G8LX+I2Zwb2lm6q+PN+t4MwVXL3qnB
Zl1sz6A+F/Wma9Fsdn37dP0RrElSeuuvP9Sd32Qm3aRSsj0QGIyzPUgbeVhOHX1iR46lmcdZ
Oyf8ee2B+dXh73O5J6WukeU7PaFANZ/x7B36EvRnxw6+9Pm5Nl1qbty0/3avfdfa6tQdJTzp
CdB/cCLg7/b3u7ABD2n/6h8D1fS07aVAeV9gngacN8EIsQVLVxHb5jQIQmJQTIEf61D06lSg
R8kBdpeI34YAADowwI98DqQf6epnwwZeKIE91OHreNY6f/EPaEM7IPF+CDzeFdB4/mBb4AG3
hkTpeS2EGKjgAS6YgQxWkYtd9OIXwRhGOsjwCzSMRL5ymMY3uU5bUvyfxeQnuwAGix72eiO1
0jSPqLHxT11bYr+0NDs8qoJaH1yimcKWMHgV0krIgc4Vs4iBLYqRkpW05CUxaZbP5cyMZ1Qf
DkEJyNStbngqZGO25IW7Igkrjokyjh27QSar3SuRphSJLHkHwE9SSoWoBJEui5cIRnoRkgST
hjngkkllLpOZzdSg+zgZxps5Ew/TpOY121BMaBQsK4JjnDexGU5xjpOcGIohGTtZTnX60Zrr
dKcVzWZMj3QTR7Wq5zvxmU99VhKazUrnPssZPYAO9ALa/uQIN/fTqsABpT2OJOhDIRrRYGzS
n5psJ/mi6FBDaFSiHV2LQfmCUKpByVjSUpJHUZpSlYaPjKELn1s4SkT/GQhDMb3QSnGKl3hu
85ipWtwoLharnA6VqEUNREv/aQ2YvuGBN7toCe3wVKMWFaTaEamsigU5Adlzql31KkT7Caak
9qlQGhvSCge3tD7ukE6kjFYjSWIgs6pjXGllJXvQ+NWhVjVFCMWVzIJKUq7qlbCFDeg5ZThW
c5FusZHC3bsIKMg9FrKptUPX/MxVvB8aSqqGVSdfN+XXXI1WcSLTnGdRm1pshnVCiu0lFd2o
xBvuz4dqlC3THlvE1rH1gaqN/iho0Sba8gnWZHUbrG+Rm1wvUlSsdJFfueaEQN2ajraxo+4t
6zXEBkJ3YtPFbm+VC1DgNk+44TXveXPKWt+4VmhKi23/rtte63amlS98I2xvKN0ponef48Vg
efkbYAEDlLmtda4aZflE79pWf0mM5WufyNv8hjKJqhzwOv2rRQBfmMMdFqd6x+JayuJVrbUB
5mzXWjR6TYdMUEEidxcJ49d8N5CkhKqHqZlhSW6Ynjj28Y+RV+D10sVOBhzpS6Da4EHK95dH
Pt4qc0lWct1SuqO0KZCRp+MLTPI0yMTyl8FMEaQemJmdDfOPtWyBLaaPGuc485vhnIkxi67M
V45z/oDTPIEMZtWFbr7zn8MMYoawd5lrAnSc8ywB52X1wS+DrmV70p5DT5rDQg4xpTGdz0QD
IG2b6BhQfjoY89g506WGAQJQjQAJqBpgqV41qwHg6jGi09S1HuemOSU5nw5r1Ec6ra2B7QZU
TyDVsLaQqocda2Mn2xxzDvazlYnrqzpJXIocdRZ0DW1tp4HZxDY2dLqdgXAvx9nbNjcYpd3T
zCzUmw395rnh7YFxx9pS87aAvSFR7njve3vpnic4fRSyv8KM3wXXwLy/HRx8v1oQ+jb4wx+5
04OqO9SujBtdE8VmiBtc1iYo9gU6rmxYy7rbxU74xw9ucmSX/OQhlzOt/jce87v42y8elPnN
j4FycSc75OFmucgZ/uqRDx0EPl/20b1tA4fjnOkJobkJmx51YOj83khPetWrvvJVg3zkXJf3
t39ObK8fFeZSN7sxnn52tSvD5Fgfu7LfDne37zzudQ+73K+ugqWvne9xSHvfAR8MnY+b2Uaf
e9B3rvKE5x3xeFe8vS096MBPXqfOkGfNqcdVElL+5iRvOePxHnrRHz4Fhs/7wrGwd86vvmyW
5+m/gyDCwpGa9YDm+ecbH3rT0z0Gu3f84kGh+toPPwN/jz2ENk98bQP/9hgoPNitDnrSexz6
c0f9E4SvfO0b//gsk03G10N77YeX+awmPNEP/m/08gOf94x/PvuvkP3xD5/7P+i1yDx1//nb
HveNZ/nQo8/blk0A7+3r4u7/CpAI5G//Vu/v5KGO9G9R+gatGDDOBg/6zE/9hu3uBJDqFK/o
qs/9VA4VFrACJ6/+JmdARgpRrsUE7ywD8Y3qsk7ohG7xZLAGQfD9YBAD4W8DStAF+w4FG8O4
Eoq4gPAIeQOx3gcJlU8IVcWU7IO+ZooJqfAOBG0hxqoKpc4JTQhIiiRyZEGRtHAM4yDysJAM
OY8L0XANu+gKyYINA08N4XAOg0wJOYkA8DAP9XAP+bAP/fAPATEQBXEQCbEQDfEQETERFXER
GbERHfERITESJXES6RNR4kKK4oKjD+lwE0+gpTzxE0ExFEVxFEmxFE3xFFExFVVxFVkRTCJp
y3hMODrryQCgQrKQE4/QDFtxF3mxF33xF4ExGIVxGIlxeS6vpKCOcsqKnmwRFznRDYsxGqVx
GqmxGq3xGq3xFdUMG7mxG73xG8ExHMVxHMmxHM3xHNExHdUxFLVRz9bxHeExHuVxHumxHu3x
HvExH/XRFNtR0fbxHwEyIAVyIAmyIA3yIBESG/uR0xKyIR3yISEyIiVyIimyIn9xIfvCIjVy
IzmyIz3yI0EyJLPx8kSyJE3yJFEyJVVyJRuSeSIAADs=
--==

 |In particular, I notice that you call "extended_command" only in the
 |"default" case of a switch statement that sorts on first letters, so I
 |can tell that it only happens for keywords that start with other
 |letters, but I can't tell which keywords -- in other words, at a quick
 |glance it isn't obvious what your code expects in  its datastream.  I'd
 |be very interested in seeing that!

My code expects the input is a stream of multi national character
set switched by ISO-2022, that is "ESC $ X" for switch to two byte
characterset and "ESC $ X" for switch to one byte character set.

 |Note that MIME defines things like
 |<iso-8859-1> some text </iso-8859-1> 
 |but doesn't say anything similar about non-8859 character sets.  In
 |particular, people were worried about the implications of multibyte
 |character sets 

Even if multibyte character sets are ignored by them, column calculation
which is able to cope with propotional fonts could be necessary.
If richtext cope with propotional fonts, it makes easier to handle
multibyte character sets...

 |-- what if one of the octets corresponds to the ascii
 |"<"?  I'd like to know how you handle this!  -- Nathaniel

ISO-2022-JP is a implication of US-ASCII and JISx208, so "<"s is
passed to richtext as is when the context is US-ASCII, but
translated to "<lt>" when the context is JISx208.  This switching
is found in ISO2022Getc().

As I found some problems in richtext.c I send yesterday, I enclose a
refined richtext.c.  Also I inserted a hook into RICHLEX.c to 
treat extended SINGLETONs.


In message <gFqTf.ysato@etl.go.jp> on 06/18/92(00:13:50) I wrote:
 |In message <gAe+o.ysato@etl.go.jp> on 06/02/92(06:33:20) I wrote:
 | |That is I want to use your richtext.c for the ISO-2022-JP.
 | |I need several extensions for richtext.c to do this.
 | |
 | |First, I need a way to extended command. For example, by defininng
 | |a variable like int (*RichtextCommand)();
 | |
 | |Second, I need a way to avoid two-bytes codes (like ISO-2022-JP)
 | |to be splitted at a odd position on the end of line.
 | |
 | |Lastly, I wish to catch all of output characters from richtext.c
 | |by hooking a single function, for example by defining a variable
 | |like int (*RichtextPutc)();
 | |
 | |With this functions, I can smoothly make richtext for ISO-2022.
 | |I will be very happy if you would think about my above requirements.
 |
 |I did this extension tonight.  Outline of changes are:
 |
 | - extended the element of OutputBuf from CHAR to INT.
 | - inserted hooks into richtext.c at initialization, getc, command, and putc
 | - outputc() assembles a multi-bytes character and puts it to realoutputc()
 | - multi-bytes character is treated in realoutputc()

and today,
   - inserted a hook into richtext.c to find a extra folding point
   - inserted a hook into richtext.c to calculate line position
   - inserted a hook into richlex.c at SINGLETON checking.

 |Based on these extention, I wrote a richtext driver for ISO-2022-JP.
 |It seems work well on the whole, except in some special caces.
 |The problem seems originated from a strange behavior of richtext
 |which will try strange justification on some input patterns.

This is caused because FlushOut() function does not try to find
alternative folding point when it cannot find any space character.
Since languages like Japanese does not explicitly separate words
with space character, such a situation is very ordinary.
A sentence can folded at any places, except that some characters
(like phrase or sentence delimiter) should not be at the top of line.
I inserted a hook at FlushOut() to find user defined extra folding point.

--
Yutaka Sato <ysato@etl.go.jp>
Information Base Section
ELECTROTECHNICAL LABORATORY
1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan

--==
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Description: experimental richtext.c with multibyte extension

/*
Copyright (c) 1991 Bell Communications Research, Inc. (Bellcore)

Permission to use, copy, modify, and distribute this material =

for any purpose and without fee is hereby granted, provided =

that the above copyright notice and this permission notice =

appear in all copies, and that the name of Bellcore not be =

used in advertising or publicity pertaining to this =

material without the specific, prior written permission =

of an authorized representative of Bellcore.  BELLCORE =

MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY =

OF THIS MATERIAL FOR ANY PURPOSE.  IT IS PROVIDED "AS IS", =

WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
*/

#include <stdio.h>
#include <ctype.h>
#include <signal.h>
#include "richlex.h"

extern char *getenv();
#ifdef AMIGA
extern char *strchr();
#endif

int (*RichtextGetc)();
int (*RichtextPutc)();
int (*RichtextCommand)();
int (*RichtextInitialize)();
int (*RichtextLineposition)();
int (*RichtextFoldingpoint)();

int linepos =3D 0, inspace =3D 0, leftmargin =3D 0, rightmargin, biggerte=
xt=3D0;
int workingleft =3D 0, workingright, inexcerpt =3D 0, insignature =3D 0;
int termcolumns=3D80, termrows=3D23;
int controlputc();

/* A common problem, in justifying text, is figuring out how to format a =

   line when part of it wants to be left-justified, part right-justified,=
 =

   and part centered, or some combination thereof.  There is no perfect =

   solution to this problem, so this program takes an incredibly cheesy =

   but simple way out:  voting.  For each character on the line, a point
   is added to the "center" score if it is supposed to be centered, and =

   so on.  If it is inside TWO "center" environments, two points are adde=
d.
   This may be the world's first implementation of justification by votin=
g...
*/

int centerenv=3D0, leftjustenv=3D0, rightjustenv=3D0;
int centerct=3D0, leftjustct=3D0, rightjustct=3D0;
int UsePager =3D 0;
int linesused =3D 0;
int JustSawCmd=3D0;
int JustCorrect =3D 0;		/* Non-zero to just correct and not format */
static char MoveRight[10];
static char standoutbuf[50], standendbuf[50], StartUnderline[50], StopUnd=
erline[50];
static char KS[50], KE[50], BoldOn[50], BoldOff[50];

#ifndef AMIGA
#ifndef __MSDOS__
#define TPUTS_OK
#endif
#endif
#ifndef TPUTS_OK
tputs(char *s, int n, int ((*func)(char)));
#endif

void
cleanup(signum)
int signum;
{
    FinalizeTerminal();
#if defined(AMIGA) || defined(__MSDOS__)
    exit(signum);
#else
    signal(signum, SIG_DFL);
    kill(getpid(), signum);
#endif
}

InitSignals() {
    signal(SIGINT, cleanup);
#if !defined(AMIGA)
#if !defined(__MSDOS__)
    signal(SIGILL, cleanup);
    signal(SIGTRAP, cleanup);
    signal(SIGIOT, cleanup);
    signal(SIGEMT, cleanup);
    signal(SIGFPE, cleanup);
    signal(SIGBUS, cleanup);
    signal(SIGSEGV, cleanup);
    signal(SIGTERM, cleanup);
#ifdef SIGXCPU
    signal(SIGXCPU, cleanup);
#endif
#endif
#endif
}

nomemabort() {
    fprintf(stderr, "richtext: Out of memory¥n");
    FinalizeTerminal();
#ifdef AMIGA
    exit(20);
#else
    exit(-1);
#endif
}

main(argc, argv)
int argc;
char **argv;
{
    int c, i, standout=3D0, underline=3D0, bold=3D0, atstart, negated,
    ForceTermcap=3D0, ForcePlain=3D0, NotTtyEnv =3D 0, FakeTerminal;
    char token[MAX_TOKEN_SIZE], *tok, *nottty;
    char tbuf[1024], *term, *dum;
    FILE *InputFP =3D stdin, *tmpfp;
#ifdef __MSDOS__
    int ansi =3D 0;
#endif

    if( RichtextInitialize )
	(*RichtextInitialize)();
    InitSignals();
    dum =3D (char *) getenv("MM_USEPAGER");
    if (dum && atoi(dum)) ++UsePager;
    for (i=3D1; i< argc; ++i) {
        if (!strcmp(argv[i], "-p")) {
            ++UsePager;
        } else if (!strcmp(argv[i],"-c")) {
            /* Only perform correction: don't format */
            JustCorrect =3D 1;
        } else if (!strcmp(argv[i], "-f")) {
            /* Force termcap usage */
            ForceTermcap =3D 1;
        } else if (!strcmp(argv[i], "-t")) {
            /* Force plain text */
            ForcePlain =3D 1;
        } else if (!strcmp(argv[i],"-n")) {
            /* Disable the richtext correction routines */
            CorrectionEnabled =3D 0;
#ifdef __MSDOS__
        } else if (!strcmp(argv[i], "-a")) {
            ansi =3D !ansi;
#endif
        } else {
            /* open for input */
            tmpfp =3D fopen(argv[i], "r");
            if (tmpfp) InputFP =3D tmpfp;
        }
    }
#ifdef AMIGA
    /* THIS IS THE AMIGA TERMINAL INITIALIZATION CODE */
    nottty =3D (char *) getenv("MM_NOTTTY");
    if (nottty) NotTtyEnv =3D atoi(nottty);
    if (!isatty(0) || !isatty(1) || NotTtyEnv) {
        UsePager =3D 0;   /* Disable pager if I/O has been redirected or =
we're under a window-oriented mail reader */
    }
    KS[0] =3D 0;
    KE[0] =3D 0;
    if ((!ForcePlain && isatty(1)) || ForceTermcap) {
        FakeTerminal =3D 0;
        strcpy(standoutbuf, "¥x9b¥x37m");   /* Enter standout (highlighte=
d) mode */
        strcpy(standendbuf, "¥x9b¥x30m");   /* Exit standout mode */
        strcpy(BoldOn,      "¥x9b¥x31m");   /* Enter bold mode */
        strcpy(BoldOff,     "¥x9b¥x30m");   /* Exit bold mode */
        strcpy(StartUnderline,"¥x9b¥x34m"); /* Enter underline mode */
        strcpy(StopUnderline,"¥x9b¥x30m");  /* Exit underline mode */
        strcpy(MoveRight, " ");
    } else {
        FakeTerminal =3D 1;
        strcpy(BoldOn, "*");
        strcpy(BoldOff, "*");
        strcpy(standoutbuf, "_");
        strcpy(standendbuf, "_");
        strcpy(StartUnderline, "_");
        strcpy(StopUnderline, "_");
        strcpy(MoveRight, " ");
    }
#else
#ifdef __MSDOS__
    /* THIS IS THE DOS TERMINAL INITIALIZATION CODE */
    FakeTerminal =3D 1;
    termcolumns =3D 80;
    termrows =3D 23;
    strcpy(MoveRight, " ");
    if (!ansi) {
        KS[0] =3D NULL;
        KE[0] =3D NULL;
        strcpy(BoldOn, "*");
        strcpy(BoldOff, "*");
        strcpy(standoutbuf, "_");
        strcpy(standendbuf, "_");
        strcpy(StartUnderline, "_");
        strcpy(StopUnderline, "_");
    } else {
        strcpy(KS, "¥x01B[37m");  /* White text (reset) */
        strcpy(KE, "¥x01B[37m");  /* White text (reset) */
        strcpy(BoldOn, "¥x01B[1m");   /* Bold text */
        strcpy(BoldOff, "¥x01B[0m");   /* End bold text (normal) */
        strcpy(StartUnderline, "¥x01B[31m");  /* Underline (red text) */
        strcpy(StopUnderline, "¥x01B[37m");   /* Underline end (white) */=

        /* The following should probably be something else, for italic */=

        strcpy(standoutbuf, "¥x01B[31m"); =

        strcpy(standendbuf, "¥x01B[37m"); =

    }
#else
    /* THIS IS THE UNIX TERMINAL INITIALIZATION CODE */
    nottty =3D (char *) getenv("MM_NOTTTY");
    if (nottty) NotTtyEnv =3D atoi(nottty);
    if (!isatty(0) || !isatty(1) || NotTtyEnv) {
        UsePager =3D 0;   /* Disable pager if I/O has been redirected or =
we're under a window-oriented mail reader */
    }
    if ((!ForcePlain && (isatty(1) || isatty(0))) || ForceTermcap) {
        term =3D (char *) getenv("TERM");
    } else {
        term =3D NULL;
    }
    if (term && tgetent(tbuf, term) !=3D 1) {
        term =3D NULL;
    }
    if (term) {
        dum =3D KS;
        if (tgetstr("ks", &dum)) *dum =3D NULL; else KS[0] =3D '¥0';
        dum =3D KE;
        if (tgetstr("ke", &dum)) *dum =3D NULL; else KE[0] =3D '¥0';
        dum =3D standoutbuf;
        if (tgetstr("so", &dum)) *dum =3D NULL; else standoutbuf[0] =3D '=
¥0';
        dum =3D standendbuf;
        if (tgetstr("se", &dum)) *dum =3D NULL; else standendbuf[0] =3D '=
¥0';
        dum =3D BoldOn;
        if (tgetstr("md", &dum)) *dum =3D NULL; else strcpy(BoldOn, stand=
outbuf);
        dum =3D BoldOff;
        if (tgetstr("me", &dum)) *dum =3D NULL; else strcpy(BoldOff, stan=
dendbuf);
        dum =3D StartUnderline;
        if (tgetstr("us", &dum)) *dum =3D NULL; else StartUnderline[0] =3D=
 '¥0';
        dum =3D StopUnderline;
        if (tgetstr("ue", &dum)) *dum =3D NULL; else StopUnderline[0] =3D=
 '¥0';
        dum =3D MoveRight;
        if (tgetstr("nd", &dum)) *dum =3D NULL; else {
            MoveRight[0] =3D ' ';
            MoveRight[1] =3D '¥0';
        }
        /* Some TERMCAP entries have REALLY screwed up "nd" fields, sigh.=
=2E. */
        if (!strcmp(MoveRight, "¥014")) strcpy(MoveRight, " ");
        termcolumns =3D tgetnum("co");
        if (termcolumns <=3D 0) termcolumns =3D 80;
        termrows =3D tgetnum("li");
        if (termrows <=3D 0) termrows =3D 23;
        FakeTerminal=3D0;
    } else {
        KS[0] =3D NULL;
        KE[0] =3D NULL;
        FakeTerminal =3D 1;
        strcpy(BoldOn, "*");
        strcpy(BoldOff, "*");
        strcpy(standoutbuf, "_");
        strcpy(standendbuf, "_");
        strcpy(StartUnderline, "_");
        strcpy(StopUnderline, "_");
        strcpy(MoveRight, " ");
        termcolumns =3D 80;
        termrows =3D 23;
    }
#endif
#endif
    /* Check for the LINES & COLUMNS hack */
    dum =3D getenv("LINES");
    if (dum && ((i=3Datoi(dum)) > 0)) termrows =3D i;
    dum =3D getenv("COLUMNS");
    if (dum && ((i=3Datoi(dum)) > 0)) termcolumns =3D i;
    richtextreset();
    if (JustCorrect) {
        richtextcorrect(InputFP,stdout);
        exit(0);
    }
    FPUTS(KS, stdout);
    rightmargin =3D workingright =3D termcolumns - 1;
    while((c =3D richtextlex(InputFP,token)) !=3D EOF) {
        if (c =3D=3D RICHTEXT_COMMAND || c =3D=3D RICHTEXT_NEG_COMMAND) {=
 =

            negated =3D (c =3D=3D RICHTEXT_NEG_COMMAND);
            tok =3D token;
            switch(tok[0]) {
                case 'b':
                    if (!strcmp(tok, "bold")) {
                        if (negated) {
                            --bold;
                            if (bold <=3D 0) controloutput(BoldOff, 0);
                        } else {
                            ++bold;
                        }
                        ResetTerminalCodes(FakeTerminal, standout, underl=
ine,
                                            bold, standoutbuf, standendbu=
f, 0,
                                            StartUnderline, StopUnderline=
, 0, BoldOn,
                                            BoldOff, 1);
                    } else if (!strcmp(tok, "bigger")) {
                        if (negated) --biggertext; else ++biggertext;
                    }
                    break;
                case 'c':
                    if (!strcmp(tok, "center")) {
                        if (negated) --centerenv; else ++centerenv;
                    } else if (!strcmp(tok, "comment")) {
                        int commct=3D1;
                        while (commct > 0) {
                            while ((c =3D getc(InputFP)) !=3D '<' =

                                    && c !=3D EOF) ;
                            if (c =3D=3D EOF) break;
                            for (i=3D0; (c =3D getc(InputFP)) !=3D '>' =

                              && c !=3D EOF; ++i) {
                                token[i] =3D isupper(c) ? =

                                  tolower(c) : c;
                            }
                            if (c=3D=3D EOF) break;
                            token[i] =3D 0;
                            if (!strcmp(token, "/comment")) --commct;
                            if (!strcmp(token, "comment")) ++commct;
                        }
                    }
                    break;
                case 'e':
                    if (!strcmp(tok, "excerpt")) {
                        atstart =3D !(linepos > workingleft);
                        if (negated) {
                            leftmargin -=3D 4;
                            rightmargin +=3D 4;
                            --inexcerpt;
                        } else {
                            leftmargin +=3D 4;
                            rightmargin -=3D 4;
                            ++inexcerpt;
                        }
                        MakeWorkingMargins();
                        if (!atstart) outputc('¥n');
                    }
                    break;
                case 'f':
                    if (!strcmp(tok, "flushleft")) {
                        if (negated) --leftjustenv; else ++leftjustenv;
                    } else if (!strcmp(tok, "flushright")) {
                        if (negated) --rightjustenv; else ++rightjustenv;=

                    }
                    break;
                case 'i':
                    if (!strcmp(tok, "italic")) {
                        if (negated) {
                            --standout;
                            if (standout <=3D 0) controloutput(standendbu=
f, 0);
                        } else {
                            ++standout;
                        }
                        ResetTerminalCodes(FakeTerminal, standout, underl=
ine, bold,
                                            standoutbuf, standendbuf, 1, =
StartUnderline,
                                            StopUnderline, 0, BoldOn, Bol=
dOff, 0);
                    } else if (!strcmp(tok, "indent")) {
                        if (negated) {
                            leftmargin -=3D 4;
                        } else {
                            leftmargin +=3D 4;
                        }
                    } else if (!strcmp(tok, "indentright")) {
                        if (negated) {
                            rightmargin +=3D 4;
                        } else {
                            rightmargin -=3D 4;
                        }
                    }
                    MakeWorkingMargins();
                    break;
                case 'l':
                    if (!strcmp(tok, "lt")) {
                        outputc('<');
                    }
                    break;
                case 'n':
                    if (!strcmp(tok, "nl")) {
                        outputc('¥n');
                    } else if (!strcmp(tok, "np")) {
                        outputc('¥n');
                        outputc('¥014');
                    }
                    break;
                case 'u':
                    if (!strcmp(tok, "underline")) {
                        if (negated) {
                            --underline;
                            if (underline <=3D 0) controloutput(StopUnder=
line,0);
                        } else {
                            ++underline;
                        }
                        ResetTerminalCodes(FakeTerminal, standout, underl=
ine, bold,
                                            standoutbuf, standendbuf, 0, =
StartUnderline,
                                            StopUnderline, 1, BoldOn, Bol=
dOff, 0);
                    }
                    break;
                case 'o':
                    if (!strcmp(tok, "outdent")) {
                        if (negated) {
                            leftmargin +=3D 4;
                        } else {
                            leftmargin -=3D 4;
                        }
                    } else if (!strcmp(tok, "outdentright")) {
                        if (negated) {
                            rightmargin -=3D 4;
                        } else {
                            rightmargin +=3D 4;
                        }
                    }
                    MakeWorkingMargins();
                    break;                    =

                case 'p':
                    if (!strcmp(tok, "paragraph")) {
                        if (negated) outputc('¥n');
                        outputc('¥n');
                    }
                    break;
                case 's':
                    if (!strcmp(tok, "signature")) {
                        atstart =3D !(linepos > workingleft);
                        if (negated) {
                            leftmargin -=3D 4;
                            rightmargin +=3D 4;
                            --insignature;
                        } else {
                            leftmargin +=3D 4;
                            rightmargin -=3D 4;
                            ++insignature;
                        }
                        MakeWorkingMargins();
                        if (!atstart) outputc('¥n');
                    }
                    break;
                default:
		    extended_command(tok,negated);
                    break;
            }
            JustSawCmd =3D 1;
        } else if (c =3D=3D '¥n') {
            if (linepos > 0 && !inspace) {
                outputc(' ');
            }
            JustSawCmd =3D 0;
        } else {
            outputc(c);
            JustSawCmd =3D 0;
        }
    }
    if (term) { /* cleanup a bit for insurance */
        controloutput(standendbuf, 0);
        controloutput(StopUnderline, 0);
    }
    outputc('¥n'); /* for good measure */
    FPUTS(KE, stdout);
    fflush(stdout);
    if (UsePager) {
        Pause();
    }
    exit(0);
}

static int OutputBuf[1000] =3D {0};
static int PendingOutput =3D 0, PendingControls =3D 0;
static int IsControlOutput[1000];

controlputc(c)
char c;
{
    IsControlOutput[PendingOutput] =3D 1;
    OutputBuf[PendingOutput++] =3D c;
    ++PendingControls;
}

immediate_controlputc(c)
char c;
{
    (*RichtextPutc)(c, stdout);
}

controloutput(s, immediate)
char *s;
int immediate;
{
    tputs(s, 1, immediate ? immediate_controlputc : controlputc);
}

FlushOut() {
    int i, j, x;
    int NewOutputBuf[1000], *s;
    int NewPendingControls=3D0, *NewIsControlOutput, NewPendingOutput =3D=
 0;

    NewIsControlOutput =3D (int *)malloc(1000*sizeof(int));
    if (!NewIsControlOutput) nomemabort();
    OutputBuf[PendingOutput] =3D 0;
    if (linepos >=3D workingright) {
        for (i=3D0, j=3D0; j<workingright && i < PendingOutput; ++i) {
            if (!IsControlOutput[i]) ++j;
        }
        if ((workingleft+4) < (x=3Dfolding_point(OutputBuf,IsControlOutpu=
t,i)))
            i =3D x;
        else
            while (i > workingleft + 4) {
                if (!IsControlOutput[i]
                     && isspace((unsigned char) OutputBuf[i])) {
                    break;
                }
                --i;
            }
        for (j=3D0; i<PendingOutput; ++j, ++i) {
            NewOutputBuf[j] =3D OutputBuf[i];
            NewIsControlOutput[j] =3D IsControlOutput[i];
            ++NewPendingOutput;
            if (NewIsControlOutput[j]) ++NewPendingControls;
        }
        PendingOutput -=3D NewPendingOutput;
        PendingControls -=3D NewPendingControls;
        OutputBuf[PendingOutput++] =3D '¥n';
        OutputBuf[PendingOutput] =3D 0;
    }
    if ((rightjustct > leftjustct)
         && (rightjustct > centerct)
         && (rightjustct > 0)) {
        /* right justified */
        i =3D termcolumns - calc_column(OutputBuf,PendingOutput) - 1
            + PendingControls;
        for (j=3D0; j<i; ++j)  {
            controloutput(MoveRight, 1);
        }
        fputsmovingright(OutputBuf, stdout);
        ++linesused;
    } else if ((leftjustct > centerct)
                && (leftjustct > 0)) {
        /* left justified */
        for (s=3DOutputBuf; *s && isspace((unsigned char) *s); ++s) {;}
        fputsmovingright(s, stdout);
        ++linesused;
    } else if (centerct > 0) {
        /* centered */
        i =3D (termcolumns - calc_column(OutputBuf,PendingOutput) - 1
	     + PendingControls) / 2;
        for (j=3D0; j<i; ++j) {
            controloutput(MoveRight, 1);
        }
        fputsmovingright(OutputBuf, stdout);
        ++linesused;
    } else {
        /* Leave indentation (margins) as-is */
        fputsmovingright(OutputBuf, stdout);
        ++linesused;
    }
    if (linesused >=3D termrows && UsePager) Pause();
    rightjustct =3D leftjustct =3D centerct =3D 0; /* not quite right for=
 wrapping, sigh... */
    PendingOutput =3D PendingControls =3D linepos =3D 0;
    inspace =3D 1;
    j =3D (isspace((unsigned char) NewOutputBuf[0])) ? 1 : 0;
    for ( ; j<NewPendingOutput; ++j) {
        if (NewIsControlOutput[j]) {
            IsControlOutput[PendingOutput] =3D 1;
            OutputBuf[PendingOutput++] =3D NewOutputBuf[j];
            ++PendingControls;
        } else {
            realoutputc(NewOutputBuf[j], 1);
        }
    }
    free((char *)NewIsControlOutput);
}

int RichtextCharcodeLength =3D 1;
outputc(c)
char c;
{
    if( RichtextCharcodeLength =3D=3D 1 )
         realoutputc(c, 0);
    else multibyte_realoutputc(c);
}

realoutputc(c, alreadyformatted)
int c;
int alreadyformatted;
{
    int i, newinspace;

    if (c =3D=3D '¥n') {
        IsControlOutput[PendingOutput] =3D 0;
        OutputBuf[PendingOutput++] =3D '¥n';
        FlushOut();
    } else if (c =3D=3D '¥t') {
        int tabpos =3D (linepos + 8) / 8;
        if (tabpos >=3D workingright) {
            IsControlOutput[PendingOutput] =3D 0;
            OutputBuf[PendingOutput++] =3D '¥n';
            FlushOut();
        } else {
            int spaces =3D (8*tabpos) - linepos;
            while (spaces-->0) {
                IsControlOutput[PendingOutput] =3D 0;
                OutputBuf[PendingOutput++] =3D ' ';
                ++linepos;
            }
        }
    } else {
        newinspace =3D isspace((unsigned char) c);
        if (!inspace || !newinspace || !JustSawCmd) {
            if (linepos =3D=3D 0) {
                int i =3D workingleft;
                if (inexcerpt) {
                    IsControlOutput[PendingOutput] =3D 0;
                    OutputBuf[PendingOutput++] =3D '>';
                    --i;
                }
                if (insignature) {
                    IsControlOutput[PendingOutput] =3D 0;
                    OutputBuf[PendingOutput++] =3D '+';
                    --i;
                }
                while (i-->0) {
                    IsControlOutput[PendingOutput] =3D 0;
                    OutputBuf[PendingOutput++] =3D ' ';
                }
                linepos =3D workingleft;
            }
            if (!alreadyformatted && biggertext && !(inspace && newinspac=
e)) {
                IsControlOutput[PendingOutput] =3D 0;
                OutputBuf[PendingOutput++] =3D '_';
                ++linepos;
            }
            inspace =3D newinspace;
	    linepos +=3D charlen(c);
            IsControlOutput[PendingOutput] =3D 0;
            OutputBuf[PendingOutput++] =3D c;
            leftjustct +=3D leftjustenv;
            rightjustct +=3D rightjustenv;
            centerct +=3D centerenv;
            if (c =3D=3D '¥014') inspace =3D 1;
            if (linepos >=3D workingright) FlushOut();
        }
    }
}

MakeWorkingMargins() {
    int oldworkingleft=3Dworkingleft, i;

    workingleft =3D leftmargin;
    workingright =3D rightmargin;
    if (workingleft < 0) workingleft =3D 0;
    if (workingright < 0) workingright =3D 0;
    if (workingright > (termcolumns - 1)) workingright =3D (termcolumns -=
 1);
    if (workingleft > (workingright - 8)) workingleft =3D workingright -8=
;
    if (linepos =3D=3D oldworkingleft) {
        for (i=3Dworkingleft-oldworkingleft; i > 0; --i) outputc(' ');
    }
}

Pause()
{
    int	c;

    (void) fputs("Press RETURN to continue (or 'q' to quit): ", stdout);
    c =3D getc(stdin);
    if (c =3D=3D 'q' || c =3D=3D 'Q') exit();
    linesused =3D 0;
}

/* Leading spaces should be output as MoveRight, to avoid =

   having margins that are underlined or reverse video */

fputsmovingright(s, fp)
int *s;
FILE *fp;
{
    int inmargin=3D1;
    if (!s) return;
    while (*s) {
        if (inmargin && *s =3D=3D ' ') {
            controloutput(MoveRight, 1);
        } else {
	    if (inmargin) inmargin =3D 0;
	    (*RichtextPutc)(*s,fp);
	}
        ++s;
    }
}

ResetTerminalCodes(FakeTerminal, standout, underline, bold, standoutbuf, =
standendbuf,
                    modifiedstandout, StartUnderline, StopUnderline, modi=
fiedunderline,
                    BoldOn, BoldOff, modifiedbold)
char *standoutbuf, *standendbuf, *StartUnderline, *StopUnderline,
    *BoldOn, *BoldOff;
{
    /* We always turn back on the appropriate terminal modes, because
      on some terminals one thing turns off all of them */
    if (standout >=3D 1) {
        if (FakeTerminal) {
            if (modifiedstandout && standout =3D=3D 1) outputstr(standout=
buf);
        } else controloutput(standoutbuf, 0);
    }
    if (bold >=3D 1) {
        if (FakeTerminal) {
            if (modifiedbold && bold =3D=3D 1) outputstr(BoldOn);
        } else controloutput(BoldOn, 0);
    }
    if (underline >=3D 1) {
        if (FakeTerminal) {
            if (modifiedunderline && underline =3D=3D 1) outputstr(StartU=
nderline);
        } else controloutput(StartUnderline, 0);
    }
}

FinalizeTerminal() {
    tputs(standendbuf, 1, immediate_controlputc);
    tputs(BoldOff, 1, immediate_controlputc);
    tputs(StopUnderline, 1, immediate_controlputc);
    fputs(KE, stdout);
}

outputstr(s)
char *s;
{
    while (*s) outputc(*s++);
}

#ifndef TPUTS_OK
tputs(s, n, func)
char *s;
int n;
int (*func)();
{
    if (s) {
        while (*s) {
            func(*s);
            ++s;
        }
    }
    return (0);
}
#endif

/*#######################################################################=
####
 *	Experimental extention to handle multibyte character sets.
 *		92-06-18	Yutaka Sato <ysato@etl.go.jp>
 */

static extended_command(tok,negated)
char *tok;
int negated;
{
    if( RichtextCommand )
	(*RichtextCommand)(tok,negated);
}

static folding_point(line,ctls,i)
int *line,*ctls,i;
{
    if( RichtextFoldingpoint )
	return (*RichtextFoldingpoint)(line,ctls,i);
    return 0;
}

static charlen(ch)
int ch;
{
    if(ch & 0xFF000000)	return 4;
    if(ch & 0xFF0000)	return 3;
    if(ch & 0xFF00  )	return 2;
    else		return 1;
}
        =

static int PendingCharacter =3D 0;
static int PendingLength =3D 0;
static multibyte_realoutputc(c)
{
    PendingCharacter =3D (PendingCharacter << 8) | c;
    if( ++PendingLength =3D=3D RichtextCharcodeLength ){
    	realoutputc(PendingCharacter, 0);
        PendingCharacter =3D 0;
	PendingLength =3D 0;
    }
}

static calc_column(buf,pos)
int *buf,pos;
{   int *s,col;

    if( RichtextLineposition )
	return (*RichtextLineposition)(buf,pos);
    return pos;
}

static FPUTS(s,fp)
unsigned char *s;
FILE *fp;
{
    while(*s) (*RichtextPutc)(*s++,fp);
}

/*#######################################################################=
####
 *
 *	Richtext driver for ISO-2022
 *		92-06-18	Yutaka Sato <ysato@etl.go.jp>
 *
 *	This is lodging in richtext.c for easy experiment.
 */

extern int (*RichtextInitialize)();
extern int (*RichtextGetc)();
extern int (*RichtextSingleton)();
extern int (*RichtextCommand)();
extern int (*RichtextLineposition)();
extern int (*RichtextFoldingpoint)();
extern int (*RichtextPutc)();

extern int ISO2022Getc();
extern int ISO2022Singleton();
extern int ISO2022Command();
extern int ISO2022Lineposition();
extern int ISO2022Foldingpoint();
extern int ISO2022Putc();

static int OutCharlen =3D 1;
static int OutPrevChar;
static int DoLiteralize =3D 0;
static char pushback_buff[20];
static int swto1B =3D 'B';
static int swto2B =3D 'B';

static ISO2022Initialize(){
	RichtextGetc	     =3D ISO2022Getc;
	RichtextSingleton    =3D ISO2022Singleton;
	RichtextCommand      =3D ISO2022Command;
	RichtextLineposition =3D ISO2022Lineposition;
	RichtextFoldingpoint =3D ISO2022Foldingpoint;
	RichtextPutc	     =3D ISO2022Putc;
	DoLiteralize =3D 0;
}
int (*RichtextInitialize)() =3D ISO2022Initialize;

static char xcharsw_prefix[] =3D "xiso2022-";
static int  xcharsw_leng =3D sizeof(xcharsw_prefix) - 1;

static ISO2022Command(token,negated)
	char *token;
{	int len,swchar;

	if( strncmp(token,xcharsw_prefix,xcharsw_leng) =3D=3D 0 ){
	    if( token[xcharsw_leng] && token[xcharsw_leng+1]=3D=3D'-' ){
		sscanf(token+xcharsw_leng+2,"%x",&swchar);
		if( swchar <=3D ' ' || 0x7F <=3Dswchar )
			return;
		switch( token[xcharsw_leng] ){
			case '2':
				controloutput("¥033$",0);
				controlputc(swchar);
				swto2B =3D swchar;
				RichtextCharcodeLength =3D 2;
				break;
			case '1':
				RichtextCharcodeLength =3D 1;
				controloutput("¥033(",0);
				controlputc(swchar);
				swto1B =3D swchar;
				break;
		}
	    }
	}
}

ISO2022Singleton(token)
	char *token;
{
	return !strncmp(token,xcharsw_prefix,xcharsw_leng);
}
ISO2022Getc(in)
	FILE *in;
{	int ch,nch;

GETCH:
	if( ch =3D *pushback_buff )
		strcpy(pushback_buff,pushback_buff+1);
	else{
		ch =3D fgetc(in);
		if(ch =3D=3D '<' && DoLiteralize )
			strcat(pushback_buff,"lt>");
		else
		if(ch =3D=3D 033){
			ch =3D fgetc(in);
			if(ch =3D=3D '$' || ch =3D=3D '('){
				nch =3D fgetc(in);
				if( ch =3D=3D '$' ){
					sprintf(pushback_buff,"<%s2-%x>",
						xcharsw_prefix,nch);
					DoLiteralize =3D 1;
				}else{
					sprintf(pushback_buff,"<%s1-%x>",
						xcharsw_prefix,nch);
					DoLiteralize =3D 0;
				}
				goto GETCH;
			}else{
				ungetc(ch,in);
				ch =3D 033;
			}
		}
	}
	return ch;
}

ISO2022Putc( ch, fp )
	int ch;
	FILE *fp;
{
	if( ch & 0xFF00 ){
		putc(ch  >>  8, fp);
		putc(ch & 0xFF, fp);
	}else{
		if( OutPrevChar =3D=3D 033 ){
			if( ch =3D=3D '$' ) OutCharlen =3D 2; else
			if( ch =3D=3D '(' ) OutCharlen =3D 1;
		}
		if( ch =3D=3D '¥n' && OutCharlen =3D=3D 2 )
			fprintf(fp,"¥033(%c¥n¥033$%c",swto1B,swto2B);
		else	putc(ch, fp);
	}
	OutPrevChar =3D ch;
}

ISO2022Foldingpoint(line,ctls,pos)
	int *line,*ctls,pos;
{	int i;

	for( i =3D pos; 0 < i; i-- )
		if( ctls[i] =3D=3D 0 )
			if( line[i] & 0xFF00 )
				return i;
	return 0;
}

ISO2022Lineposition(line,pos)
	int *line,pos;
{	int *s,col;

	col =3D 0;
	for(s =3D line; *s; s++)
		col +=3D *s & 0xFF00 ? 2 : 1;
	return col;
}
--==
Content-Type: application/octet-stream
Content-Description: richlex.c with a hook to extended SINGLETONs

*** richlex.c.orig	Thu Jun 18 17:32:24 1992
--- richlex.c	Thu Jun 18 17:33:30 1992
***************
*** 46,51 ****
--- 46,52 ----
  
  int (*RichtextGetc) () = fgetc;	/* Function to call to get characters */
  int (*RichtextPutc) () = fputc; /* Function to call to put characters */
+ int (*RichtextSingleton)()=0;	/* Function to check extended singletons */
  
  #define	RGET(f)		((*RichtextGetc)(f))
  #define	RPUT(c,f)	((*RichtextPutc)(c,f))
***************
*** 92,97 ****
--- 93,101 ----
   */
  static richtextsingle()
  {
+     if( RichtextSingleton && (*RichtextSingleton)(NextToken) )
+ 	return 1;
+ 
      return (!strcmp(NextToken,"nl") ||
  	    !strcmp(NextToken,"lt") ||
  	    !strcmp(NextToken,"np"));

--==
Content-Type: application/octet-stream; charset=ISO-2022-JP
Content-Description: sample data for multibyte richtext

The followings is a sentence written in Roman characters in <bold>JIS-X0208
</bold> which could not be properly processed with original richtext.
<nl>
<nl>
<center>This is a sentence written in<nl>
Roman characters in <underline>JIS−X202</underline>.
</center><nl>

Original version of richtext destroy
 the sentence.この文章はJISコード中のローマ字記号で書か
れています。古いrichtextではこれを正しく処理できません。Even in  ASCII
sentences, a long word will cause a strange folding like this.
This-is-an-example-which-causes-a-strange-folding-in-richtext.=================================
<nl><nl>
<center>
This is an example of <bold>bold</bold> and <underline>underline
</underline> represented in the<nl>
<bold>richtext</bold> format of <italic><bold>MIME</bold></italic>.
<nl><nl>
これは、<bold><italic>MIME</italic></bold>の<bold>richtext</bold>
形式を使って、<nl>
<underline>このような下線</underline>や<bold>太字</bold>を表現した例です。
<nl><nl>
</center>
--Yutaka
--==--